Created
October 5, 2015 17:13
-
-
Save andymason/78a4141a3b57e110ba53 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved. | |
* Available via the MIT or new BSD license. | |
* see: http://github.com/jrburke/almond for details | |
*/ | |
/*! | |
* jQuery JavaScript Library v1.11.2 | |
* http://jquery.com/ | |
* | |
* Includes Sizzle.js | |
* http://sizzlejs.com/ | |
* | |
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors | |
* Released under the MIT license | |
* http://jquery.org/license | |
* | |
* Date: 2014-12-17T15:27Z | |
*/ | |
/*! | |
* Sizzle CSS Selector Engine v2.2.0-pre | |
* http://sizzlejs.com/ | |
* | |
* Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors | |
* Released under the MIT license | |
* http://jquery.org/license | |
* | |
* Date: 2014-12-16 | |
*/ | |
/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/ | |
/*! | |
* VERSION: 1.15.1 | |
* DATE: 2015-01-20 | |
* UPDATES AND DOCS AT: http://greensock.com | |
* | |
* Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin | |
* | |
* @license Copyright (c) 2008-2015, GreenSock. All rights reserved. | |
* This work is subject to the terms at http://greensock.com/standard-license or for | |
* Club GreenSock members, the software agreement that was issued with your membership. | |
* | |
* @author: Jack Doyle, [email protected] | |
**/ | |
/*! | |
* mustache.js - Logic-less {{mustache}} templates with JavaScript | |
* http://github.com/janl/mustache.js | |
*/ | |
/*! | |
* howler.js v1.1.25 | |
* howlerjs.com | |
* | |
* (c) 2013-2014, James Simpson of GoldFire Studios | |
* goldfirestudios.com | |
* | |
* MIT License | |
*/ | |
/*! | |
* VERSION: beta 0.6.3 | |
* DATE: 2014-12-31 | |
* UPDATES AND DOCS AT: http://www.greensock.com | |
* | |
* @license Copyright (c) 2008-2015, GreenSock. All rights reserved. | |
* This work is subject to the terms at http://greensock.com/standard-license or for | |
* Club GreenSock members, the software agreement that was issued with your membership. | |
* | |
* @author: Jack Doyle, [email protected] | |
*/ | |
/** | |
* @license RequireJS text 2.0.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. | |
* Available via the MIT or new BSD license. | |
* see: http://github.com/requirejs/text for details | |
*/ | |
/* | |
Copyright (c) 2011 Juan Mellado | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this software and associated documentation files (the "Software"), to deal | |
in the Software without restriction, including without limitation the rights | |
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
copies of the Software, and to permit persons to whom the Software is | |
furnished to do so, subject to the following conditions: | |
The above copyright notice and this permission notice shall be included in | |
all copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
THE SOFTWARE. | |
*/ | |
/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. | |
Redistribution and use in source and binary forms, with or without modification, | |
are permitted provided that the following conditions are met: | |
* Redistributions of source code must retain the above copyright notice, this | |
list of conditions and the following disclaimer. | |
* Redistributions in binary form must reproduce the above copyright notice, | |
this list of conditions and the following disclaimer in the documentation | |
and/or other materials provided with the distribution. | |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR | |
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | |
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ | |
/** | |
* dat-gui JavaScript Controller Library | |
* http://code.google.com/p/dat-gui | |
* | |
* Copyright 2011 Data Arts Team, Google Creative Lab | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
*/ | |
function trace_init(e) { | |
trace_initiated = !0; | |
if (trace_showTraces) try { | |
console.log("") | |
} catch (t) { | |
trace_showTraces = !1; | |
if (trace_divListFallback) { | |
var n = document.createElement("div"); | |
document.body.appendChild(n), n.id = "divListContainer", n.style.position = "absolute", n.style.top = "0px", n.style.left = "0px", n.style.height = "100%", n.style.width = "700px", n.style.background = "#000000", n.style.color = "#FFFFFF", n.style.fontSize = "10px"; | |
var r = document.createElement("ul"); | |
n.appendChild(r), r.style.height = "100%", r.style.width = "100%", r.style.overflow = "scroll"; | |
var i = document.createElement("div"); | |
n.appendChild(i), addListener(i, "click", trace_toggleDivList, !1), i.style.position = "absolute", i.style.top = "0px", i.style.left = "100%", i.style.color = "#000000", i.style.padding = "5px", i.style.padding = "5px", i.style.background = "#FFFFFF", i.style.fontWeight = "bold", i.innerHTML = "TOGGLE<br/>TRACE", trace_divListContainer = n, trace_divList = r | |
} | |
} else trace_divListFallback = !1 | |
} | |
function trace_toggleDivList(e) { | |
trace_divListVisible = !trace_divListVisible, divListContainer.style.left = trace_divListVisible ? "0px" : "-700px" | |
} | |
function trace(e) { | |
trace_initiated || trace_init(); | |
if (trace_showTraces) console.log(e); | |
else if (trace_divListFallback) { | |
var t = document.createElement("li"); | |
t.innerHTML = String(e), trace_divList.appendChild(t) | |
} | |
} | |
var requirejs, require, define; | |
(function(e) { | |
function h(e, t) { | |
return f.call(e, t) | |
} | |
function p(e, t) { | |
var n, r, i, s, o, a, f, l, h, p, d, v = t && t.split("/"), | |
m = u.map, | |
g = m && m["*"] || {}; | |
if (e && e.charAt(0) === ".") | |
if (t) { | |
e = e.split("/"), o = e.length - 1, u.nodeIdCompat && c.test(e[o]) && (e[o] = e[o].replace(c, "")), e = v.slice(0, v.length - 1).concat(e); | |
for (h = 0; h < e.length; h += 1) { | |
d = e[h]; | |
if (d === ".") e.splice(h, 1), h -= 1; | |
else if (d === "..") { | |
if (h === 1 && (e[2] === ".." || e[0] === "..")) break; | |
h > 0 && (e.splice(h - 1, 2), h -= 2) | |
} | |
} | |
e = e.join("/") | |
} else e.indexOf("./") === 0 && (e = e.substring(2)); | |
if ((v || g) && m) { | |
n = e.split("/"); | |
for (h = n.length; h > 0; h -= 1) { | |
r = n.slice(0, h).join("/"); | |
if (v) | |
for (p = v.length; p > 0; p -= 1) { | |
i = m[v.slice(0, p).join("/")]; | |
if (i) { | |
i = i[r]; | |
if (i) { | |
s = i, a = h; | |
break | |
} | |
} | |
} | |
if (s) break; | |
!f && g && g[r] && (f = g[r], l = h) | |
}!s && f && (s = f, a = l), s && (n.splice(0, a, s), e = n.join("/")) | |
} | |
return e | |
} | |
function d(t, r) { | |
return function() { | |
var i = l.call(arguments, 0); | |
return typeof i[0] != "string" && i.length === 1 && i.push(null), n.apply(e, i.concat([t, r])) | |
} | |
} | |
function v(e) { | |
return function(t) { | |
return p(t, e) | |
} | |
} | |
function m(e) { | |
return function(t) { | |
s[e] = t | |
} | |
} | |
function g(n) { | |
if (h(o, n)) { | |
var r = o[n]; | |
delete o[n], a[n] = !0, t.apply(e, r) | |
} | |
if (!h(s, n) && !h(a, n)) throw new Error("No " + n); | |
return s[n] | |
} | |
function y(e) { | |
var t, n = e ? e.indexOf("!") : -1; | |
return n > -1 && (t = e.substring(0, n), e = e.substring(n + 1, e.length)), [t, e] | |
} | |
function b(e) { | |
return function() { | |
return u && u.config && u.config[e] || {} | |
} | |
} | |
var t, n, r, i, s = {}, | |
o = {}, | |
u = {}, | |
a = {}, | |
f = Object.prototype.hasOwnProperty, | |
l = [].slice, | |
c = /\.js$/; | |
r = function(e, t) { | |
var n, r = y(e), | |
i = r[0]; | |
return e = r[1], i && (i = p(i, t), n = g(i)), i ? n && n.normalize ? e = n.normalize(e, v(t)) : e = p(e, t) : (e = p(e, t), r = y(e), i = r[0], e = r[1], i && (n = g(i))), { | |
f: i ? i + "!" + e : e, | |
n: e, | |
pr: i, | |
p: n | |
} | |
}, i = { | |
require: function(e) { | |
return d(e) | |
}, | |
exports: function(e) { | |
var t = s[e]; | |
return typeof t != "undefined" ? t : s[e] = {} | |
}, | |
module: function(e) { | |
return { | |
id: e, | |
uri: "", | |
exports: s[e], | |
config: b(e) | |
} | |
} | |
}, t = function(t, n, u, f) { | |
var l, c, p, v, y, b = [], | |
w = typeof u, | |
E; | |
f = f || t; | |
if (w === "undefined" || w === "function") { | |
n = !n.length && u.length ? ["require", "exports", "module"] : n; | |
for (y = 0; y < n.length; y += 1) { | |
v = r(n[y], f), c = v.f; | |
if (c === "require") b[y] = i.require(t); | |
else if (c === "exports") b[y] = i.exports(t), E = !0; | |
else if (c === "module") l = b[y] = i.module(t); | |
else if (h(s, c) || h(o, c) || h(a, c)) b[y] = g(c); | |
else { | |
if (!v.p) throw new Error(t + " missing " + c); | |
v.p.load(v.n, d(f, !0), m(c), {}), b[y] = s[c] | |
} | |
} | |
p = u ? u.apply(s[t], b) : undefined; | |
if (t) | |
if (l && l.exports !== e && l.exports !== s[t]) s[t] = l.exports; | |
else if (p !== e || !E) s[t] = p | |
} else t && (s[t] = u) | |
}, requirejs = require = n = function(s, o, a, f, l) { | |
if (typeof s == "string") return i[s] ? i[s](o) : g(r(s, o).f); | |
if (!s.splice) { | |
u = s, u.deps && n(u.deps, u.callback); | |
if (!o) return; | |
o.splice ? (s = o, o = a, a = null) : s = e | |
} | |
return o = o || function() {}, typeof a == "function" && (a = f, f = l), f ? t(e, s, o, a) : setTimeout(function() { | |
t(e, s, o, a) | |
}, 4), n | |
}, n.config = function(e) { | |
return n(e) | |
}, requirejs._defined = s, define = function(e, t, n) { | |
if (typeof e != "string") throw new Error("See almond README: incorrect module build, no module name"); | |
t.splice || (n = t, t = []), !h(s, e) && !h(o, e) && (o[e] = [e, t, n]) | |
}, define.amd = { | |
jQuery: !0 | |
} | |
})(), define("../bower_components/almond/almond", function() {}), | |
function(e, t) { | |
typeof module == "object" && typeof module.exports == "object" ? module.exports = e.document ? t(e, !0) : function(e) { | |
if (!e.document) throw new Error("jQuery requires a window with a document"); | |
return t(e) | |
} : t(e) | |
}(typeof window != "undefined" ? window : this, function(e, t) { | |
function g(e) { | |
var t = e.length, | |
n = h.type(e); | |
return n === "function" || h.isWindow(e) ? !1 : e.nodeType === 1 && t ? !0 : n === "array" || t === 0 || typeof t == "number" && t > 0 && t - 1 in e | |
} | |
function S(e, t, n) { | |
if (h.isFunction(t)) return h.grep(e, function(e, r) { | |
return !!t.call(e, r, e) !== n | |
}); | |
if (t.nodeType) return h.grep(e, function(e) { | |
return e === t !== n | |
}); | |
if (typeof t == "string") { | |
if (E.test(t)) return h.filter(t, e, n); | |
t = h.filter(t, e) | |
} | |
return h.grep(e, function(e) { | |
return h.inArray(e, t) >= 0 !== n | |
}) | |
} | |
function A(e, t) { | |
do e = e[t]; while (e && e.nodeType !== 1); | |
return e | |
} | |
function _(e) { | |
var t = M[e] = {}; | |
return h.each(e.match(O) || [], function(e, n) { | |
t[n] = !0 | |
}), t | |
} | |
function P() { | |
T.addEventListener ? (T.removeEventListener("DOMContentLoaded", H, !1), e.removeEventListener("load", H, !1)) : (T.detachEvent("onreadystatechange", H), e.detachEvent("onload", H)) | |
} | |
function H() { | |
if (T.addEventListener || event.type === "load" || T.readyState === "complete") P(), h.ready() | |
} | |
function q(e, t, n) { | |
if (n === undefined && e.nodeType === 1) { | |
var r = "data-" + t.replace(I, "-$1").toLowerCase(); | |
n = e.getAttribute(r); | |
if (typeof n == "string") { | |
try { | |
n = n === "true" ? !0 : n === "false" ? !1 : n === "null" ? null : +n + "" === n ? +n : F.test(n) ? h.parseJSON(n) : n | |
} catch (i) {} | |
h.data(e, t, n) | |
} else n = undefined | |
} | |
return n | |
} | |
function R(e) { | |
var t; | |
for (t in e) { | |
if (t === "data" && h.isEmptyObject(e[t])) continue; | |
if (t !== "toJSON") return !1 | |
} | |
return !0 | |
} | |
function U(e, t, r, i) { | |
if (!h.acceptData(e)) return; | |
var s, o, u = h.expando, | |
a = e.nodeType, | |
f = a ? h.cache : e, | |
l = a ? e[u] : e[u] && u; | |
if ((!l || !f[l] || !i && !f[l].data) && r === undefined && typeof t == "string") return; | |
l || (a ? l = e[u] = n.pop() || h.guid++ : l = u), f[l] || (f[l] = a ? {} : { | |
toJSON: h.noop | |
}); | |
if (typeof t == "object" || typeof t == "function") i ? f[l] = h.extend(f[l], t) : f[l].data = h.extend(f[l].data, t); | |
return o = f[l], i || (o.data || (o.data = {}), o = o.data), r !== undefined && (o[h.camelCase(t)] = r), typeof t == "string" ? (s = o[t], s == null && (s = o[h.camelCase(t)])) : s = o, s | |
} | |
function z(e, t, n) { | |
if (!h.acceptData(e)) return; | |
var r, i, s = e.nodeType, | |
o = s ? h.cache : e, | |
u = s ? e[h.expando] : h.expando; | |
if (!o[u]) return; | |
if (t) { | |
r = n ? o[u] : o[u].data; | |
if (r) { | |
h.isArray(t) ? t = t.concat(h.map(t, h.camelCase)) : t in r ? t = [t] : (t = h.camelCase(t), t in r ? t = [t] : t = t.split(" ")), i = t.length; | |
while (i--) delete r[t[i]]; | |
if (n ? !R(r) : !h.isEmptyObject(r)) return | |
} | |
} | |
if (!n) { | |
delete o[u].data; | |
if (!R(o[u])) return | |
} | |
s ? h.cleanData([e], !0) : l.deleteExpando || o != o.window ? delete o[u] : o[u] = null | |
} | |
function et() { | |
return !0 | |
} | |
function tt() { | |
return !1 | |
} | |
function nt() { | |
try { | |
return T.activeElement | |
} catch (e) {} | |
} | |
function rt(e) { | |
var t = it.split("|"), | |
n = e.createDocumentFragment(); | |
if (n.createElement) | |
while (t.length) n.createElement(t.pop()); | |
return n | |
} | |
function wt(e, t) { | |
var n, r, i = 0, | |
s = typeof e.getElementsByTagName !== B ? e.getElementsByTagName(t || "*") : typeof e.querySelectorAll !== B ? e.querySelectorAll(t || "*") : undefined; | |
if (!s) | |
for (s = [], n = e.childNodes || e; | |
(r = n[i]) != null; i++) !t || h.nodeName(r, t) ? s.push(r) : h.merge(s, wt(r, t)); | |
return t === undefined || t && h.nodeName(e, t) ? h.merge([e], s) : s | |
} | |
function Et(e) { | |
J.test(e.type) && (e.defaultChecked = e.checked) | |
} | |
function St(e, t) { | |
return h.nodeName(e, "table") && h.nodeName(t.nodeType !== 11 ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e | |
} | |
function xt(e) { | |
return e.type = (h.find.attr(e, "type") !== null) + "/" + e.type, e | |
} | |
function Tt(e) { | |
var t = vt.exec(e.type); | |
return t ? e.type = t[1] : e.removeAttribute("type"), e | |
} | |
function Nt(e, t) { | |
var n, r = 0; | |
for (; | |
(n = e[r]) != null; r++) h._data(n, "globalEval", !t || h._data(t[r], "globalEval")) | |
} | |
function Ct(e, t) { | |
if (t.nodeType !== 1 || !h.hasData(e)) return; | |
var n, r, i, s = h._data(e), | |
o = h._data(t, s), | |
u = s.events; | |
if (u) { | |
delete o.handle, o.events = {}; | |
for (n in u) | |
for (r = 0, i = u[n].length; r < i; r++) h.event.add(t, n, u[n][r]) | |
} | |
o.data && (o.data = h.extend({}, o.data)) | |
} | |
function kt(e, t) { | |
var n, r, i; | |
if (t.nodeType !== 1) return; | |
n = t.nodeName.toLowerCase(); | |
if (!l.noCloneEvent && t[h.expando]) { | |
i = h._data(t); | |
for (r in i.events) h.removeEvent(t, r, i.handle); | |
t.removeAttribute(h.expando) | |
} | |
if (n === "script" && t.text !== e.text) xt(t).text = e.text, Tt(t); | |
else if (n === "object") t.parentNode && (t.outerHTML = e.outerHTML), l.html5Clone && e.innerHTML && !h.trim(t.innerHTML) && (t.innerHTML = e.innerHTML); | |
else if (n === "input" && J.test(e.type)) t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value); | |
else if (n === "option") t.defaultSelected = t.selected = e.defaultSelected; | |
else if (n === "input" || n === "textarea") t.defaultValue = e.defaultValue | |
} | |
function Ot(t, n) { | |
var r, i = h(n.createElement(t)).appendTo(n.body), | |
s = e.getDefaultComputedStyle && (r = e.getDefaultComputedStyle(i[0])) ? r.display : h.css(i[0], "display"); | |
return i.detach(), s | |
} | |
function Mt(e) { | |
var t = T, | |
n = At[e]; | |
if (!n) { | |
n = Ot(e, t); | |
if (n === "none" || !n) Lt = (Lt || h("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement), t = (Lt[0].contentWindow || Lt[0].contentDocument).document, t.write(), t.close(), n = Ot(e, t), Lt.detach(); | |
At[e] = n | |
} | |
return n | |
} | |
function jt(e, t) { | |
return { | |
get: function() { | |
var n = e(); | |
if (n == null) return; | |
if (n) { | |
delete this.get; | |
return | |
} | |
return (this.get = t).apply(this, arguments) | |
} | |
} | |
} | |
function Vt(e, t) { | |
if (t in e) return t; | |
var n = t.charAt(0).toUpperCase() + t.slice(1), | |
r = t, | |
i = Xt.length; | |
while (i--) { | |
t = Xt[i] + n; | |
if (t in e) return t | |
} | |
return r | |
} | |
function $t(e, t) { | |
var n, r, i, s = [], | |
o = 0, | |
u = e.length; | |
for (; o < u; o++) { | |
r = e[o]; | |
if (!r.style) continue; | |
s[o] = h._data(r, "olddisplay"), n = r.style.display, t ? (!s[o] && n === "none" && (r.style.display = ""), r.style.display === "" && V(r) && (s[o] = h._data(r, "olddisplay", Mt(r.nodeName)))) : (i = V(r), (n && n !== "none" || !i) && h._data(r, "olddisplay", i ? n : h.css(r, "display"))) | |
} | |
for (o = 0; o < u; o++) { | |
r = e[o]; | |
if (!r.style) continue; | |
if (!t || r.style.display === "none" || r.style.display === "") r.style.display = t ? s[o] || "" : "none" | |
} | |
return e | |
} | |
function Jt(e, t, n) { | |
var r = Rt.exec(t); | |
return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t | |
} | |
function Kt(e, t, n, r, i) { | |
var s = n === (r ? "border" : "content") ? 4 : t === "width" ? 1 : 0, | |
o = 0; | |
for (; s < 4; s += 2) n === "margin" && (o += h.css(e, n + X[s], !0, i)), r ? (n === "content" && (o -= h.css(e, "padding" + X[s], !0, i)), n !== "margin" && (o -= h.css(e, "border" + X[s] + "Width", !0, i))) : (o += h.css(e, "padding" + X[s], !0, i), n !== "padding" && (o += h.css(e, "border" + X[s] + "Width", !0, i))); | |
return o | |
} | |
function Qt(e, t, n) { | |
var r = !0, | |
i = t === "width" ? e.offsetWidth : e.offsetHeight, | |
s = Pt(e), | |
o = l.boxSizing && h.css(e, "boxSizing", !1, s) === "border-box"; | |
if (i <= 0 || i == null) { | |
i = Ht(e, t, s); | |
if (i < 0 || i == null) i = e.style[t]; | |
if (Dt.test(i)) return i; | |
r = o && (l.boxSizingReliable() || i === e.style[t]), i = parseFloat(i) || 0 | |
} | |
return i + Kt(e, t, n || (o ? "border" : "content"), r, s) + "px" | |
} | |
function Gt(e, t, n, r, i) { | |
return new Gt.prototype.init(e, t, n, r, i) | |
} | |
function on() { | |
return setTimeout(function() { | |
Yt = undefined | |
}), Yt = h.now() | |
} | |
function un(e, t) { | |
var n, r = { | |
height: e | |
}, | |
i = 0; | |
t = t ? 1 : 0; | |
for (; i < 4; i += 2 - t) n = X[i], r["margin" + n] = r["padding" + n] = e; | |
return t && (r.opacity = r.width = e), r | |
} | |
function an(e, t, n) { | |
var r, i = (sn[t] || []).concat(sn["*"]), | |
s = 0, | |
o = i.length; | |
for (; s < o; s++) | |
if (r = i[s].call(n, t, e)) return r | |
} | |
function fn(e, t, n) { | |
var r, i, s, o, u, a, f, c, p = this, | |
d = {}, | |
v = e.style, | |
m = e.nodeType && V(e), | |
g = h._data(e, "fxshow"); | |
n.queue || (u = h._queueHooks(e, "fx"), u.unqueued == null && (u.unqueued = 0, a = u.empty.fire, u.empty.fire = function() { | |
u.unqueued || a() | |
}), u.unqueued++, p.always(function() { | |
p.always(function() { | |
u.unqueued--, h.queue(e, "fx").length || u.empty.fire() | |
}) | |
})), e.nodeType === 1 && ("height" in t || "width" in t) && (n.overflow = [v.overflow, v.overflowX, v.overflowY], f = h.css(e, "display"), c = f === "none" ? h._data(e, "olddisplay") || Mt(e.nodeName) : f, c === "inline" && h.css(e, "float") === "none" && (!l.inlineBlockNeedsLayout || Mt(e.nodeName) === "inline" ? v.display = "inline-block" : v.zoom = 1)), n.overflow && (v.overflow = "hidden", l.shrinkWrapBlocks() || p.always(function() { | |
v.overflow = n.overflow[0], v.overflowX = n.overflow[1], v.overflowY = n.overflow[2] | |
})); | |
for (r in t) { | |
i = t[r]; | |
if (en.exec(i)) { | |
delete t[r], s = s || i === "toggle"; | |
if (i === (m ? "hide" : "show")) { | |
if (i !== "show" || !g || g[r] === undefined) continue; | |
m = !0 | |
} | |
d[r] = g && g[r] || h.style(e, r) | |
} else f = undefined | |
} | |
if (!h.isEmptyObject(d)) { | |
g ? "hidden" in g && (m = g.hidden) : g = h._data(e, "fxshow", {}), s && (g.hidden = !m), m ? h(e).show() : p.done(function() { | |
h(e).hide() | |
}), p.done(function() { | |
var t; | |
h._removeData(e, "fxshow"); | |
for (t in d) h.style(e, t, d[t]) | |
}); | |
for (r in d) o = an(m ? g[r] : 0, r, p), r in g || (g[r] = o.start, m && (o.end = o.start, o.start = r === "width" || r === "height" ? 1 : 0)) | |
} else(f === "none" ? Mt(e.nodeName) : f) === "inline" && (v.display = f) | |
} | |
function ln(e, t) { | |
var n, r, i, s, o; | |
for (n in e) { | |
r = h.camelCase(n), i = t[r], s = e[n], h.isArray(s) && (i = s[1], s = e[n] = s[0]), n !== r && (e[r] = s, delete e[n]), o = h.cssHooks[r]; | |
if (o && "expand" in o) { | |
s = o.expand(s), delete e[r]; | |
for (n in s) n in e || (e[n] = s[n], t[n] = i) | |
} else t[r] = i | |
} | |
} | |
function cn(e, t, n) { | |
var r, i, s = 0, | |
o = rn.length, | |
u = h.Deferred().always(function() { | |
delete a.elem | |
}), | |
a = function() { | |
if (i) return !1; | |
var t = Yt || on(), | |
n = Math.max(0, f.startTime + f.duration - t), | |
r = n / f.duration || 0, | |
s = 1 - r, | |
o = 0, | |
a = f.tweens.length; | |
for (; o < a; o++) f.tweens[o].run(s); | |
return u.notifyWith(e, [f, s, n]), s < 1 && a ? n : (u.resolveWith(e, [f]), !1) | |
}, | |
f = u.promise({ | |
elem: e, | |
props: h.extend({}, t), | |
opts: h.extend(!0, { | |
specialEasing: {} | |
}, n), | |
originalProperties: t, | |
originalOptions: n, | |
startTime: Yt || on(), | |
duration: n.duration, | |
tweens: [], | |
createTween: function(t, n) { | |
var r = h.Tween(e, f.opts, t, n, f.opts.specialEasing[t] || f.opts.easing); | |
return f.tweens.push(r), r | |
}, | |
stop: function(t) { | |
var n = 0, | |
r = t ? f.tweens.length : 0; | |
if (i) return this; | |
i = !0; | |
for (; n < r; n++) f.tweens[n].run(1); | |
return t ? u.resolveWith(e, [f, t]) : u.rejectWith(e, [f, t]), this | |
} | |
}), | |
l = f.props; | |
ln(l, f.opts.specialEasing); | |
for (; s < o; s++) { | |
r = rn[s].call(f, e, l, f.opts); | |
if (r) return r | |
} | |
return h.map(l, an, f), h.isFunction(f.opts.start) && f.opts.start.call(e, f), h.fx.timer(h.extend(a, { | |
elem: e, | |
anim: f, | |
queue: f.opts.queue | |
})), f.progress(f.opts.progress).done(f.opts.done, f.opts.complete).fail(f.opts.fail).always(f.opts.always) | |
} | |
function Fn(e) { | |
return function(t, n) { | |
typeof t != "string" && (n = t, t = "*"); | |
var r, i = 0, | |
s = t.toLowerCase().match(O) || []; | |
if (h.isFunction(n)) | |
while (r = s[i++]) r.charAt(0) === "+" ? (r = r.slice(1) || "*", (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n) | |
} | |
} | |
function In(e, t, n, r) { | |
function o(u) { | |
var a; | |
return i[u] = !0, h.each(e[u] || [], function(e, u) { | |
var f = u(t, n, r); | |
if (typeof f == "string" && !s && !i[f]) return t.dataTypes.unshift(f), o(f), !1; | |
if (s) return !(a = f) | |
}), a | |
} | |
var i = {}, | |
s = e === Hn; | |
return o(t.dataTypes[0]) || !i["*"] && o("*") | |
} | |
function qn(e, t) { | |
var n, r, i = h.ajaxSettings.flatOptions || {}; | |
for (r in t) t[r] !== undefined && ((i[r] ? e : n || (n = {}))[r] = t[r]); | |
return n && h.extend(!0, e, n), e | |
} | |
function Rn(e, t, n) { | |
var r, i, s, o, u = e.contents, | |
a = e.dataTypes; | |
while (a[0] === "*") a.shift(), i === undefined && (i = e.mimeType || t.getResponseHeader("Content-Type")); | |
if (i) | |
for (o in u) | |
if (u[o] && u[o].test(i)) { | |
a.unshift(o); | |
break | |
} | |
if (a[0] in n) s = a[0]; | |
else { | |
for (o in n) { | |
if (!a[0] || e.converters[o + " " + a[0]]) { | |
s = o; | |
break | |
} | |
r || (r = o) | |
} | |
s = s || r | |
} | |
if (s) return s !== a[0] && a.unshift(s), n[s] | |
} | |
function Un(e, t, n, r) { | |
var i, s, o, u, a, f = {}, | |
l = e.dataTypes.slice(); | |
if (l[1]) | |
for (o in e.converters) f[o.toLowerCase()] = e.converters[o]; | |
s = l.shift(); | |
while (s) { | |
e.responseFields[s] && (n[e.responseFields[s]] = t), !a && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), a = s, s = l.shift(); | |
if (s) | |
if (s === "*") s = a; | |
else if (a !== "*" && a !== s) { | |
o = f[a + " " + s] || f["* " + s]; | |
if (!o) | |
for (i in f) { | |
u = i.split(" "); | |
if (u[1] === s) { | |
o = f[a + " " + u[0]] || f["* " + u[0]]; | |
if (o) { | |
o === !0 ? o = f[i] : f[i] !== !0 && (s = u[0], l.unshift(u[1])); | |
break | |
} | |
} | |
} | |
if (o !== !0) | |
if (o && e["throws"]) t = o(t); | |
else try { | |
t = o(t) | |
} catch (c) { | |
return { | |
state: "parsererror", | |
error: o ? c : "No conversion from " + a + " to " + s | |
} | |
} | |
} | |
} | |
return { | |
state: "success", | |
data: t | |
} | |
} | |
function Jn(e, t, n, r) { | |
var i; | |
if (h.isArray(t)) h.each(t, function(t, i) { | |
n || Wn.test(e) ? r(e, i) : Jn(e + "[" + (typeof i == "object" ? t : "") + "]", i, n, r) | |
}); | |
else if (!n && h.type(t) === "object") | |
for (i in t) Jn(e + "[" + i + "]", t[i], n, r); | |
else r(e, t) | |
} | |
function Yn() { | |
try { | |
return new e.XMLHttpRequest | |
} catch (t) {} | |
} | |
function Zn() { | |
try { | |
return new e.ActiveXObject("Microsoft.XMLHTTP") | |
} catch (t) {} | |
} | |
function ir(e) { | |
return h.isWindow(e) ? e : e.nodeType === 9 ? e.defaultView || e.parentWindow : !1 | |
} | |
var n = [], | |
r = n.slice, | |
i = n.concat, | |
s = n.push, | |
o = n.indexOf, | |
u = {}, | |
a = u.toString, | |
f = u.hasOwnProperty, | |
l = {}, | |
c = "1.11.2", | |
h = function(e, t) { | |
return new h.fn.init(e, t) | |
}, | |
p = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, | |
d = /^-ms-/, | |
v = /-([\da-z])/gi, | |
m = function(e, t) { | |
return t.toUpperCase() | |
}; | |
h.fn = h.prototype = { | |
jquery: c, | |
constructor: h, | |
selector: "", | |
length: 0, | |
toArray: function() { | |
return r.call(this) | |
}, | |
get: function(e) { | |
return e != null ? e < 0 ? this[e + this.length] : this[e] : r.call(this) | |
}, | |
pushStack: function(e) { | |
var t = h.merge(this.constructor(), e); | |
return t.prevObject = this, t.context = this.context, t | |
}, | |
each: function(e, t) { | |
return h.each(this, e, t) | |
}, | |
map: function(e) { | |
return this.pushStack(h.map(this, function(t, n) { | |
return e.call(t, n, t) | |
})) | |
}, | |
slice: function() { | |
return this.pushStack(r.apply(this, arguments)) | |
}, | |
first: function() { | |
return this.eq(0) | |
}, | |
last: function() { | |
return this.eq(-1) | |
}, | |
eq: function(e) { | |
var t = this.length, | |
n = +e + (e < 0 ? t : 0); | |
return this.pushStack(n >= 0 && n < t ? [this[n]] : []) | |
}, | |
end: function() { | |
return this.prevObject || this.constructor(null) | |
}, | |
push: s, | |
sort: n.sort, | |
splice: n.splice | |
}, h.extend = h.fn.extend = function() { | |
var e, t, n, r, i, s, o = arguments[0] || {}, | |
u = 1, | |
a = arguments.length, | |
f = !1; | |
typeof o == "boolean" && (f = o, o = arguments[u] || {}, u++), typeof o != "object" && !h.isFunction(o) && (o = {}), u === a && (o = this, u--); | |
for (; u < a; u++) | |
if ((i = arguments[u]) != null) | |
for (r in i) { | |
e = o[r], n = i[r]; | |
if (o === n) continue; | |
f && n && (h.isPlainObject(n) || (t = h.isArray(n))) ? (t ? (t = !1, s = e && h.isArray(e) ? e : []) : s = e && h.isPlainObject(e) ? e : {}, o[r] = h.extend(f, s, n)) : n !== undefined && (o[r] = n) | |
} | |
return o | |
}, h.extend({ | |
expando: "jQuery" + (c + Math.random()).replace(/\D/g, ""), | |
isReady: !0, | |
error: function(e) { | |
throw new Error(e) | |
}, | |
noop: function() {}, | |
isFunction: function(e) { | |
return h.type(e) === "function" | |
}, | |
isArray: Array.isArray || function(e) { | |
return h.type(e) === "array" | |
}, | |
isWindow: function(e) { | |
return e != null && e == e.window | |
}, | |
isNumeric: function(e) { | |
return !h.isArray(e) && e - parseFloat(e) + 1 >= 0 | |
}, | |
isEmptyObject: function(e) { | |
var t; | |
for (t in e) return !1; | |
return !0 | |
}, | |
isPlainObject: function(e) { | |
var t; | |
if (!e || h.type(e) !== "object" || e.nodeType || h.isWindow(e)) return !1; | |
try { | |
if (e.constructor && !f.call(e, "constructor") && !f.call(e.constructor.prototype, "isPrototypeOf")) return !1 | |
} catch (n) { | |
return !1 | |
} | |
if (l.ownLast) | |
for (t in e) return f.call(e, t); | |
for (t in e); | |
return t === undefined || f.call(e, t) | |
}, | |
type: function(e) { | |
return e == null ? e + "" : typeof e == "object" || typeof e == "function" ? u[a.call(e)] || "object" : typeof e | |
}, | |
globalEval: function(t) { | |
t && h.trim(t) && (e.execScript || function(t) { | |
e.eval.call(e, t) | |
})(t) | |
}, | |
camelCase: function(e) { | |
return e.replace(d, "ms-").replace(v, m) | |
}, | |
nodeName: function(e, t) { | |
return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() | |
}, | |
each: function(e, t, n) { | |
var r, i = 0, | |
s = e.length, | |
o = g(e); | |
if (n) | |
if (o) | |
for (; i < s; i++) { | |
r = t.apply(e[i], n); | |
if (r === !1) break | |
} else | |
for (i in e) { | |
r = t.apply(e[i], n); | |
if (r === !1) break | |
} else if (o) | |
for (; i < s; i++) { | |
r = t.call(e[i], i, e[i]); | |
if (r === !1) break | |
} else | |
for (i in e) { | |
r = t.call(e[i], i, e[i]); | |
if (r === !1) break | |
} | |
return e | |
}, | |
trim: function(e) { | |
return e == null ? "" : (e + "").replace(p, "") | |
}, | |
makeArray: function(e, t) { | |
var n = t || []; | |
return e != null && (g(Object(e)) ? h.merge(n, typeof e == "string" ? [e] : e) : s.call(n, e)), n | |
}, | |
inArray: function(e, t, n) { | |
var r; | |
if (t) { | |
if (o) return o.call(t, e, n); | |
r = t.length, n = n ? n < 0 ? Math.max(0, r + n) : n : 0; | |
for (; n < r; n++) | |
if (n in t && t[n] === e) return n | |
} | |
return -1 | |
}, | |
merge: function(e, t) { | |
var n = +t.length, | |
r = 0, | |
i = e.length; | |
while (r < n) e[i++] = t[r++]; | |
if (n !== n) | |
while (t[r] !== undefined) e[i++] = t[r++]; | |
return e.length = i, e | |
}, | |
grep: function(e, t, n) { | |
var r, i = [], | |
s = 0, | |
o = e.length, | |
u = !n; | |
for (; s < o; s++) r = !t(e[s], s), r !== u && i.push(e[s]); | |
return i | |
}, | |
map: function(e, t, n) { | |
var r, s = 0, | |
o = e.length, | |
u = g(e), | |
a = []; | |
if (u) | |
for (; s < o; s++) r = t(e[s], s, n), r != null && a.push(r); | |
else | |
for (s in e) r = t(e[s], s, n), r != null && a.push(r); | |
return i.apply([], a) | |
}, | |
guid: 1, | |
proxy: function(e, t) { | |
var n, i, s; | |
return typeof t == "string" && (s = e[t], t = e, e = s), h.isFunction(e) ? (n = r.call(arguments, 2), i = function() { | |
return e.apply(t || this, n.concat(r.call(arguments))) | |
}, i.guid = e.guid = e.guid || h.guid++, i) : undefined | |
}, | |
now: function() { | |
return +(new Date) | |
}, | |
support: l | |
}), h.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(e, t) { | |
u["[object " + t + "]"] = t.toLowerCase() | |
}); | |
var y = function(e) { | |
function ot(e, t, r, i) { | |
var s, u, f, l, c, d, g, y, S, x; | |
(t ? t.ownerDocument || t : E) !== p && h(t), t = t || p, r = r || [], l = t.nodeType; | |
if (typeof e != "string" || !e || l !== 1 && l !== 9 && l !== 11) return r; | |
if (!i && v) { | |
if (l !== 11 && (s = Z.exec(e))) | |
if (f = s[1]) { | |
if (l === 9) { | |
u = t.getElementById(f); | |
if (!u || !u.parentNode) return r; | |
if (u.id === f) return r.push(u), r | |
} else if (t.ownerDocument && (u = t.ownerDocument.getElementById(f)) && b(t, u) && u.id === f) return r.push(u), r | |
} else { | |
if (s[2]) return D.apply(r, t.getElementsByTagName(e)), r; | |
if ((f = s[3]) && n.getElementsByClassName) return D.apply(r, t.getElementsByClassName(f)), r | |
} | |
if (n.qsa && (!m || !m.test(e))) { | |
y = g = w, S = t, x = l !== 1 && e; | |
if (l === 1 && t.nodeName.toLowerCase() !== "object") { | |
d = o(e), (g = t.getAttribute("id")) ? y = g.replace(tt, "\\$&") : t.setAttribute("id", y), y = "[id='" + y + "'] ", c = d.length; | |
while (c--) d[c] = y + gt(d[c]); | |
S = et.test(e) && vt(t.parentNode) || t, x = d.join(",") | |
} | |
if (x) try { | |
return D.apply(r, S.querySelectorAll(x)), r | |
} catch (T) {} finally { | |
g || t.removeAttribute("id") | |
} | |
} | |
} | |
return a(e.replace(z, "$1"), t, r, i) | |
} | |
function ut() { | |
function t(n, i) { | |
return e.push(n + " ") > r.cacheLength && delete t[e.shift()], t[n + " "] = i | |
} | |
var e = []; | |
return t | |
} | |
function at(e) { | |
return e[w] = !0, e | |
} | |
function ft(e) { | |
var t = p.createElement("div"); | |
try { | |
return !!e(t) | |
} catch (n) { | |
return !1 | |
} finally { | |
t.parentNode && t.parentNode.removeChild(t), t = null | |
} | |
} | |
function lt(e, t) { | |
var n = e.split("|"), | |
i = e.length; | |
while (i--) r.attrHandle[n[i]] = t | |
} | |
function ct(e, t) { | |
var n = t && e, | |
r = n && e.nodeType === 1 && t.nodeType === 1 && (~t.sourceIndex || L) - (~e.sourceIndex || L); | |
if (r) return r; | |
if (n) | |
while (n = n.nextSibling) | |
if (n === t) return -1; | |
return e ? 1 : -1 | |
} | |
function ht(e) { | |
return function(t) { | |
var n = t.nodeName.toLowerCase(); | |
return n === "input" && t.type === e | |
} | |
} | |
function pt(e) { | |
return function(t) { | |
var n = t.nodeName.toLowerCase(); | |
return (n === "input" || n === "button") && t.type === e | |
} | |
} | |
function dt(e) { | |
return at(function(t) { | |
return t = +t, at(function(n, r) { | |
var i, s = e([], n.length, t), | |
o = s.length; | |
while (o--) n[i = s[o]] && (n[i] = !(r[i] = n[i])) | |
}) | |
}) | |
} | |
function vt(e) { | |
return e && typeof e.getElementsByTagName != "undefined" && e | |
} | |
function mt() {} | |
function gt(e) { | |
var t = 0, | |
n = e.length, | |
r = ""; | |
for (; t < n; t++) r += e[t].value; | |
return r | |
} | |
function yt(e, t, n) { | |
var r = t.dir, | |
i = n && r === "parentNode", | |
s = x++; | |
return t.first ? function(t, n, s) { | |
while (t = t[r]) | |
if (t.nodeType === 1 || i) return e(t, n, s) | |
} : function(t, n, o) { | |
var u, a, f = [S, s]; | |
if (o) { | |
while (t = t[r]) | |
if (t.nodeType === 1 || i) | |
if (e(t, n, o)) return !0 | |
} else | |
while (t = t[r]) | |
if (t.nodeType === 1 || i) { | |
a = t[w] || (t[w] = {}); | |
if ((u = a[r]) && u[0] === S && u[1] === s) return f[2] = u[2]; | |
a[r] = f; | |
if (f[2] = e(t, n, o)) return !0 | |
} | |
} | |
} | |
function bt(e) { | |
return e.length > 1 ? function(t, n, r) { | |
var i = e.length; | |
while (i--) | |
if (!e[i](t, n, r)) return !1; | |
return !0 | |
} : e[0] | |
} | |
function wt(e, t, n) { | |
var r = 0, | |
i = t.length; | |
for (; r < i; r++) ot(e, t[r], n); | |
return n | |
} | |
function Et(e, t, n, r, i) { | |
var s, o = [], | |
u = 0, | |
a = e.length, | |
f = t != null; | |
for (; u < a; u++) | |
if (s = e[u]) | |
if (!n || n(s, r, i)) o.push(s), f && t.push(u); | |
return o | |
} | |
function St(e, t, n, r, i, s) { | |
return r && !r[w] && (r = St(r)), i && !i[w] && (i = St(i, s)), at(function(s, o, u, a) { | |
var f, l, c, h = [], | |
p = [], | |
d = o.length, | |
v = s || wt(t || "*", u.nodeType ? [u] : u, []), | |
m = e && (s || !t) ? Et(v, h, e, u, a) : v, | |
g = n ? i || (s ? e : d || r) ? [] : o : m; | |
n && n(m, g, u, a); | |
if (r) { | |
f = Et(g, p), r(f, [], u, a), l = f.length; | |
while (l--) | |
if (c = f[l]) g[p[l]] = !(m[p[l]] = c) | |
} | |
if (s) { | |
if (i || e) { | |
if (i) { | |
f = [], l = g.length; | |
while (l--)(c = g[l]) && f.push(m[l] = c); | |
i(null, g = [], f, a) | |
} | |
l = g.length; | |
while (l--)(c = g[l]) && (f = i ? H(s, c) : h[l]) > -1 && (s[f] = !(o[f] = c)) | |
} | |
} else g = Et(g === o ? g.splice(d, g.length) : g), i ? i(null, o, g, a) : D.apply(o, g) | |
}) | |
} | |
function xt(e) { | |
var t, n, i, s = e.length, | |
o = r.relative[e[0].type], | |
u = o || r.relative[" "], | |
a = o ? 1 : 0, | |
l = yt(function(e) { | |
return e === t | |
}, u, !0), | |
c = yt(function(e) { | |
return H(t, e) > -1 | |
}, u, !0), | |
h = [ | |
function(e, n, r) { | |
var i = !o && (r || n !== f) || ((t = n).nodeType ? l(e, n, r) : c(e, n, r)); | |
return t = null, i | |
} | |
]; | |
for (; a < s; a++) | |
if (n = r.relative[e[a].type]) h = [yt(bt(h), n)]; | |
else { | |
n = r.filter[e[a].type].apply(null, e[a].matches); | |
if (n[w]) { | |
i = ++a; | |
for (; i < s; i++) | |
if (r.relative[e[i].type]) break; | |
return St(a > 1 && bt(h), a > 1 && gt(e.slice(0, a - 1).concat({ | |
value: e[a - 2].type === " " ? "*" : "" | |
})).replace(z, "$1"), n, a < i && xt(e.slice(a, i)), i < s && xt(e = e.slice(i)), i < s && gt(e)) | |
} | |
h.push(n) | |
} | |
return bt(h) | |
} | |
function Tt(e, t) { | |
var n = t.length > 0, | |
i = e.length > 0, | |
s = function(s, o, u, a, l) { | |
var c, h, d, v = 0, | |
m = "0", | |
g = s && [], | |
y = [], | |
b = f, | |
w = s || i && r.find.TAG("*", l), | |
E = S += b == null ? 1 : Math.random() || .1, | |
x = w.length; | |
l && (f = o !== p && o); | |
for (; m !== x && (c = w[m]) != null; m++) { | |
if (i && c) { | |
h = 0; | |
while (d = e[h++]) | |
if (d(c, o, u)) { | |
a.push(c); | |
break | |
} | |
l && (S = E) | |
} | |
n && ((c = !d && c) && v--, s && g.push(c)) | |
} | |
v += m; | |
if (n && m !== v) { | |
h = 0; | |
while (d = t[h++]) d(g, y, o, u); | |
if (s) { | |
if (v > 0) | |
while (m--) !g[m] && !y[m] && (y[m] = M.call(a)); | |
y = Et(y) | |
} | |
D.apply(a, y), l && !s && y.length > 0 && v + t.length > 1 && ot.uniqueSort(a) | |
} | |
return l && (S = E, f = b), g | |
}; | |
return n ? at(s) : s | |
} | |
var t, n, r, i, s, o, u, a, f, l, c, h, p, d, v, m, g, y, b, w = "sizzle" + 1 * new Date, | |
E = e.document, | |
S = 0, | |
x = 0, | |
T = ut(), | |
N = ut(), | |
C = ut(), | |
k = function(e, t) { | |
return e === t && (c = !0), 0 | |
}, | |
L = 1 << 31, | |
A = {}.hasOwnProperty, | |
O = [], | |
M = O.pop, | |
_ = O.push, | |
D = O.push, | |
P = O.slice, | |
H = function(e, t) { | |
var n = 0, | |
r = e.length; | |
for (; n < r; n++) | |
if (e[n] === t) return n; | |
return -1 | |
}, | |
B = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", | |
j = "[\\x20\\t\\r\\n\\f]", | |
F = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", | |
I = F.replace("w", "w#"), | |
q = "\\[" + j + "*(" + F + ")(?:" + j + "*([*^$|!~]?=)" + j + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + j + "*\\]", | |
R = ":(" + F + ")(?:\\((" + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + "((?:\\\\.|[^\\\\()[\\]]|" + q + ")*)|" + ".*" + ")\\)|)", | |
U = new RegExp(j + "+", "g"), | |
z = new RegExp("^" + j + "+|((?:^|[^\\\\])(?:\\\\.)*)" + j + "+$", "g"), | |
W = new RegExp("^" + j + "*," + j + "*"), | |
X = new RegExp("^" + j + "*([>+~]|" + j + ")" + j + "*"), | |
V = new RegExp("=" + j + "*([^\\]'\"]*?)" + j + "*\\]", "g"), | |
$ = new RegExp(R), | |
J = new RegExp("^" + I + "$"), | |
K = { | |
ID: new RegExp("^#(" + F + ")"), | |
CLASS: new RegExp("^\\.(" + F + ")"), | |
TAG: new RegExp("^(" + F.replace("w", "w*") + ")"), | |
ATTR: new RegExp("^" + q), | |
PSEUDO: new RegExp("^" + R), | |
CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + j + "*(even|odd|(([+-]|)(\\d*)n|)" + j + "*(?:([+-]|)" + j + "*(\\d+)|))" + j + "*\\)|)", "i"), | |
bool: new RegExp("^(?:" + B + ")$", "i"), | |
needsContext: new RegExp("^" + j + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + j + "*((?:-\\d)?\\d*)" + j + "*\\)|)(?=[^-]|$)", "i") | |
}, | |
Q = /^(?:input|select|textarea|button)$/i, | |
G = /^h\d$/i, | |
Y = /^[^{]+\{\s*\[native \w/, | |
Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, | |
et = /[+~]/, | |
tt = /'|\\/g, | |
nt = new RegExp("\\\\([\\da-f]{1,6}" + j + "?|(" + j + ")|.)", "ig"), | |
rt = function(e, t, n) { | |
var r = "0x" + t - 65536; | |
return r !== r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, r & 1023 | 56320) | |
}, | |
it = function() { | |
h() | |
}; | |
try { | |
D.apply(O = P.call(E.childNodes), E.childNodes), O[E.childNodes.length].nodeType | |
} catch (st) { | |
D = { | |
apply: O.length ? function(e, t) { | |
_.apply(e, P.call(t)) | |
} : function(e, t) { | |
var n = e.length, | |
r = 0; | |
while (e[n++] = t[r++]); | |
e.length = n - 1 | |
} | |
} | |
} | |
n = ot.support = {}, s = ot.isXML = function(e) { | |
var t = e && (e.ownerDocument || e).documentElement; | |
return t ? t.nodeName !== "HTML" : !1 | |
}, h = ot.setDocument = function(e) { | |
var t, i, o = e ? e.ownerDocument || e : E; | |
if (o === p || o.nodeType !== 9 || !o.documentElement) return p; | |
p = o, d = o.documentElement, i = o.defaultView, i && i !== i.top && (i.addEventListener ? i.addEventListener("unload", it, !1) : i.attachEvent && i.attachEvent("onunload", it)), v = !s(o), n.attributes = ft(function(e) { | |
return e.className = "i", !e.getAttribute("className") | |
}), n.getElementsByTagName = ft(function(e) { | |
return e.appendChild(o.createComment("")), !e.getElementsByTagName("*").length | |
}), n.getElementsByClassName = Y.test(o.getElementsByClassName), n.getById = ft(function(e) { | |
return d.appendChild(e).id = w, !o.getElementsByName || !o.getElementsByName(w).length | |
}), n.getById ? (r.find.ID = function(e, t) { | |
if (typeof t.getElementById != "undefined" && v) { | |
var n = t.getElementById(e); | |
return n && n.parentNode ? [n] : [] | |
} | |
}, r.filter.ID = function(e) { | |
var t = e.replace(nt, rt); | |
return function(e) { | |
return e.getAttribute("id") === t | |
} | |
}) : (delete r.find.ID, r.filter.ID = function(e) { | |
var t = e.replace(nt, rt); | |
return function(e) { | |
var n = typeof e.getAttributeNode != "undefined" && e.getAttributeNode("id"); | |
return n && n.value === t | |
} | |
}), r.find.TAG = n.getElementsByTagName ? function(e, t) { | |
if (typeof t.getElementsByTagName != "undefined") return t.getElementsByTagName(e); | |
if (n.qsa) return t.querySelectorAll(e) | |
} : function(e, t) { | |
var n, r = [], | |
i = 0, | |
s = t.getElementsByTagName(e); | |
if (e === "*") { | |
while (n = s[i++]) n.nodeType === 1 && r.push(n); | |
return r | |
} | |
return s | |
}, r.find.CLASS = n.getElementsByClassName && function(e, t) { | |
if (v) return t.getElementsByClassName(e) | |
}, g = [], m = []; | |
if (n.qsa = Y.test(o.querySelectorAll)) ft(function(e) { | |
d.appendChild(e).innerHTML = "<a id='" + w + "'></a>" + "<select id='" + w + "-\f]' msallowcapture=''>" + "<option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && m.push("[*^$]=" + j + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || m.push("\\[" + j + "*(?:value|" + B + ")"), e.querySelectorAll("[id~=" + w + "-]").length || m.push("~="), e.querySelectorAll(":checked").length || m.push(":checked"), e.querySelectorAll("a#" + w + "+*").length || m.push(".#.+[+~]") | |
}), ft(function(e) { | |
var t = o.createElement("input"); | |
t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && m.push("name" + j + "*[*^$|!~]?="), e.querySelectorAll(":enabled").length || m.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), m.push(",.*:") | |
}); | |
return (n.matchesSelector = Y.test(y = d.matches || d.webkitMatchesSelector || d.mozMatchesSelector || d.oMatchesSelector || d.msMatchesSelector)) && ft(function(e) { | |
n.disconnectedMatch = y.call(e, "div"), y.call(e, "[s!='']:x"), g.push("!=", R) | |
}), m = m.length && new RegExp(m.join("|")), g = g.length && new RegExp(g.join("|")), t = Y.test(d.compareDocumentPosition), b = t || Y.test(d.contains) ? function(e, t) { | |
var n = e.nodeType === 9 ? e.documentElement : e, | |
r = t && t.parentNode; | |
return e === r || !!r && r.nodeType === 1 && !!(n.contains ? n.contains(r) : e.compareDocumentPosition && e.compareDocumentPosition(r) & 16) | |
} : function(e, t) { | |
if (t) | |
while (t = t.parentNode) | |
if (t === e) return !0; | |
return !1 | |
}, k = t ? function(e, t) { | |
if (e === t) return c = !0, 0; | |
var r = !e.compareDocumentPosition - !t.compareDocumentPosition; | |
return r ? r : (r = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1, r & 1 || !n.sortDetached && t.compareDocumentPosition(e) === r ? e === o || e.ownerDocument === E && b(E, e) ? -1 : t === o || t.ownerDocument === E && b(E, t) ? 1 : l ? H(l, e) - H(l, t) : 0 : r & 4 ? -1 : 1) | |
} : function(e, t) { | |
if (e === t) return c = !0, 0; | |
var n, r = 0, | |
i = e.parentNode, | |
s = t.parentNode, | |
u = [e], | |
a = [t]; | |
if (!i || !s) return e === o ? -1 : t === o ? 1 : i ? -1 : s ? 1 : l ? H(l, e) - H(l, t) : 0; | |
if (i === s) return ct(e, t); | |
n = e; | |
while (n = n.parentNode) u.unshift(n); | |
n = t; | |
while (n = n.parentNode) a.unshift(n); | |
while (u[r] === a[r]) r++; | |
return r ? ct(u[r], a[r]) : u[r] === E ? -1 : a[r] === E ? 1 : 0 | |
}, o | |
}, ot.matches = function(e, t) { | |
return ot(e, null, null, t) | |
}, ot.matchesSelector = function(e, t) { | |
(e.ownerDocument || e) !== p && h(e), t = t.replace(V, "='$1']"); | |
if (n.matchesSelector && v && (!g || !g.test(t)) && (!m || !m.test(t))) try { | |
var r = y.call(e, t); | |
if (r || n.disconnectedMatch || e.document && e.document.nodeType !== 11) return r | |
} catch (i) {} | |
return ot(t, p, null, [e]).length > 0 | |
}, ot.contains = function(e, t) { | |
return (e.ownerDocument || e) !== p && h(e), b(e, t) | |
}, ot.attr = function(e, t) { | |
(e.ownerDocument || e) !== p && h(e); | |
var i = r.attrHandle[t.toLowerCase()], | |
s = i && A.call(r.attrHandle, t.toLowerCase()) ? i(e, t, !v) : undefined; | |
return s !== undefined ? s : n.attributes || !v ? e.getAttribute(t) : (s = e.getAttributeNode(t)) && s.specified ? s.value : null | |
}, ot.error = function(e) { | |
throw new Error("Syntax error, unrecognized expression: " + e) | |
}, ot.uniqueSort = function(e) { | |
var t, r = [], | |
i = 0, | |
s = 0; | |
c = !n.detectDuplicates, l = !n.sortStable && e.slice(0), e.sort(k); | |
if (c) { | |
while (t = e[s++]) t === e[s] && (i = r.push(s)); | |
while (i--) e.splice(r[i], 1) | |
} | |
return l = null, e | |
}, i = ot.getText = function(e) { | |
var t, n = "", | |
r = 0, | |
s = e.nodeType; | |
if (!s) | |
while (t = e[r++]) n += i(t); | |
else if (s === 1 || s === 9 || s === 11) { | |
if (typeof e.textContent == "string") return e.textContent; | |
for (e = e.firstChild; e; e = e.nextSibling) n += i(e) | |
} else if (s === 3 || s === 4) return e.nodeValue; | |
return n | |
}, r = ot.selectors = { | |
cacheLength: 50, | |
createPseudo: at, | |
match: K, | |
attrHandle: {}, | |
find: {}, | |
relative: { | |
">": { | |
dir: "parentNode", | |
first: !0 | |
}, | |
" ": { | |
dir: "parentNode" | |
}, | |
"+": { | |
dir: "previousSibling", | |
first: !0 | |
}, | |
"~": { | |
dir: "previousSibling" | |
} | |
}, | |
preFilter: { | |
ATTR: function(e) { | |
return e[1] = e[1].replace(nt, rt), e[3] = (e[3] || e[4] || e[5] || "").replace(nt, rt), e[2] === "~=" && (e[3] = " " + e[3] + " "), e.slice(0, 4) | |
}, | |
CHILD: function(e) { | |
return e[1] = e[1].toLowerCase(), e[1].slice(0, 3) === "nth" ? (e[3] || ot.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * (e[3] === "even" || e[3] === "odd")), e[5] = +(e[7] + e[8] || e[3] === "odd")) : e[3] && ot.error(e[0]), e | |
}, | |
PSEUDO: function(e) { | |
var t, n = !e[6] && e[2]; | |
return K.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && $.test(n) && (t = o(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) | |
} | |
}, | |
filter: { | |
TAG: function(e) { | |
var t = e.replace(nt, rt).toLowerCase(); | |
return e === "*" ? function() { | |
return !0 | |
} : function(e) { | |
return e.nodeName && e.nodeName.toLowerCase() === t | |
} | |
}, | |
CLASS: function(e) { | |
var t = T[e + " "]; | |
return t || (t = new RegExp("(^|" + j + ")" + e + "(" + j + "|$)")) && T(e, function(e) { | |
return t.test(typeof e.className == "string" && e.className || typeof e.getAttribute != "undefined" && e.getAttribute("class") || "") | |
}) | |
}, | |
ATTR: function(e, t, n) { | |
return function(r) { | |
var i = ot.attr(r, e); | |
return i == null ? t === "!=" : t ? (i += "", t === "=" ? i === n : t === "!=" ? i !== n : t === "^=" ? n && i.indexOf(n) === 0 : t === "*=" ? n && i.indexOf(n) > -1 : t === "$=" ? n && i.slice(-n.length) === n : t === "~=" ? (" " + i.replace(U, " ") + " ").indexOf(n) > -1 : t === "|=" ? i === n || i.slice(0, n.length + 1) === n + "-" : !1) : !0 | |
} | |
}, | |
CHILD: function(e, t, n, r, i) { | |
var s = e.slice(0, 3) !== "nth", | |
o = e.slice(-4) !== "last", | |
u = t === "of-type"; | |
return r === 1 && i === 0 ? function(e) { | |
return !!e.parentNode | |
} : function(t, n, a) { | |
var f, l, c, h, p, d, v = s !== o ? "nextSibling" : "previousSibling", | |
m = t.parentNode, | |
g = u && t.nodeName.toLowerCase(), | |
y = !a && !u; | |
if (m) { | |
if (s) { | |
while (v) { | |
c = t; | |
while (c = c[v]) | |
if (u ? c.nodeName.toLowerCase() === g : c.nodeType === 1) return !1; | |
d = v = e === "only" && !d && "nextSibling" | |
} | |
return !0 | |
} | |
d = [o ? m.firstChild : m.lastChild]; | |
if (o && y) { | |
l = m[w] || (m[w] = {}), f = l[e] || [], p = f[0] === S && f[1], h = f[0] === S && f[2], c = p && m.childNodes[p]; | |
while (c = ++p && c && c[v] || (h = p = 0) || d.pop()) | |
if (c.nodeType === 1 && ++h && c === t) { | |
l[e] = [S, p, h]; | |
break | |
} | |
} else if (y && (f = (t[w] || (t[w] = {}))[e]) && f[0] === S) h = f[1]; | |
else | |
while (c = ++p && c && c[v] || (h = p = 0) || d.pop()) | |
if ((u ? c.nodeName.toLowerCase() === g : c.nodeType === 1) && ++h) { | |
y && ((c[w] || (c[w] = {}))[e] = [S, h]); | |
if (c === t) break | |
} return h -= i, h === r || h % r === 0 && h / r >= 0 | |
} | |
} | |
}, | |
PSEUDO: function(e, t) { | |
var n, i = r.pseudos[e] || r.setFilters[e.toLowerCase()] || ot.error("unsupported pseudo: " + e); | |
return i[w] ? i(t) : i.length > 1 ? (n = [e, e, "", t], r.setFilters.hasOwnProperty(e.toLowerCase()) ? at(function(e, n) { | |
var r, s = i(e, t), | |
o = s.length; | |
while (o--) r = H(e, s[o]), e[r] = !(n[r] = s[o]) | |
}) : function(e) { | |
return i(e, 0, n) | |
}) : i | |
} | |
}, | |
pseudos: { | |
not: at(function(e) { | |
var t = [], | |
n = [], | |
r = u(e.replace(z, "$1")); | |
return r[w] ? at(function(e, t, n, i) { | |
var s, o = r(e, null, i, []), | |
u = e.length; | |
while (u--) | |
if (s = o[u]) e[u] = !(t[u] = s) | |
}) : function(e, i, s) { | |
return t[0] = e, r(t, null, s, n), t[0] = null, !n.pop() | |
} | |
}), | |
has: at(function(e) { | |
return function(t) { | |
return ot(e, t).length > 0 | |
} | |
}), | |
contains: at(function(e) { | |
return e = e.replace(nt, rt), | |
function(t) { | |
return (t.textContent || t.innerText || i(t)).indexOf(e) > -1 | |
} | |
}), | |
lang: at(function(e) { | |
return J.test(e || "") || ot.error("unsupported lang: " + e), e = e.replace(nt, rt).toLowerCase(), | |
function(t) { | |
var n; | |
do | |
if (n = v ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang")) return n = n.toLowerCase(), n === e || n.indexOf(e + "-") === 0; | |
while ((t = t.parentNode) && t.nodeType === 1); | |
return !1 | |
} | |
}), | |
target: function(t) { | |
var n = e.location && e.location.hash; | |
return n && n.slice(1) === t.id | |
}, | |
root: function(e) { | |
return e === d | |
}, | |
focus: function(e) { | |
return e === p.activeElement && (!p.hasFocus || p.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) | |
}, | |
enabled: function(e) { | |
return e.disabled === !1 | |
}, | |
disabled: function(e) { | |
return e.disabled === !0 | |
}, | |
checked: function(e) { | |
var t = e.nodeName.toLowerCase(); | |
return t === "input" && !!e.checked || t === "option" && !!e.selected | |
}, | |
selected: function(e) { | |
return e.parentNode && e.parentNode.selectedIndex, e.selected === !0 | |
}, | |
empty: function(e) { | |
for (e = e.firstChild; e; e = e.nextSibling) | |
if (e.nodeType < 6) return !1; | |
return !0 | |
}, | |
parent: function(e) { | |
return !r.pseudos.empty(e) | |
}, | |
header: function(e) { | |
return G.test(e.nodeName) | |
}, | |
input: function(e) { | |
return Q.test(e.nodeName) | |
}, | |
button: function(e) { | |
var t = e.nodeName.toLowerCase(); | |
return t === "input" && e.type === "button" || t === "button" | |
}, | |
text: function(e) { | |
var t; | |
return e.nodeName.toLowerCase() === "input" && e.type === "text" && ((t = e.getAttribute("type")) == null || t.toLowerCase() === "text") | |
}, | |
first: dt(function() { | |
return [0] | |
}), | |
last: dt(function(e, t) { | |
return [t - 1] | |
}), | |
eq: dt(function(e, t, n) { | |
return [n < 0 ? n + t : n] | |
}), | |
even: dt(function(e, t) { | |
var n = 0; | |
for (; n < t; n += 2) e.push(n); | |
return e | |
}), | |
odd: dt(function(e, t) { | |
var n = 1; | |
for (; n < t; n += 2) e.push(n); | |
return e | |
}), | |
lt: dt(function(e, t, n) { | |
var r = n < 0 ? n + t : n; | |
for (; --r >= 0;) e.push(r); | |
return e | |
}), | |
gt: dt(function(e, t, n) { | |
var r = n < 0 ? n + t : n; | |
for (; ++r < t;) e.push(r); | |
return e | |
}) | |
} | |
}, r.pseudos.nth = r.pseudos.eq; | |
for (t in { | |
radio: !0, | |
checkbox: !0, | |
file: !0, | |
password: !0, | |
image: !0 | |
}) r.pseudos[t] = ht(t); | |
for (t in { | |
submit: !0, | |
reset: !0 | |
}) r.pseudos[t] = pt(t); | |
return mt.prototype = r.filters = r.pseudos, r.setFilters = new mt, o = ot.tokenize = function(e, t) { | |
var n, i, s, o, u, a, f, l = N[e + " "]; | |
if (l) return t ? 0 : l.slice(0); | |
u = e, a = [], f = r.preFilter; | |
while (u) { | |
if (!n || (i = W.exec(u))) i && (u = u.slice(i[0].length) || u), a.push(s = []); | |
n = !1; | |
if (i = X.exec(u)) n = i.shift(), s.push({ | |
value: n, | |
type: i[0].replace(z, " ") | |
}), u = u.slice(n.length); | |
for (o in r.filter)(i = K[o].exec(u)) && (!f[o] || (i = f[o](i))) && (n = i.shift(), s.push({ | |
value: n, | |
type: o, | |
matches: i | |
}), u = u.slice(n.length)); | |
if (!n) break | |
} | |
return t ? u.length : u ? ot.error(e) : N(e, a).slice(0) | |
}, u = ot.compile = function(e, t) { | |
var n, r = [], | |
i = [], | |
s = C[e + " "]; | |
if (!s) { | |
t || (t = o(e)), n = t.length; | |
while (n--) s = xt(t[n]), s[w] ? r.push(s) : i.push(s); | |
s = C(e, Tt(i, r)), s.selector = e | |
} | |
return s | |
}, a = ot.select = function(e, t, i, s) { | |
var a, f, l, c, h, p = typeof e == "function" && e, | |
d = !s && o(e = p.selector || e); | |
i = i || []; | |
if (d.length === 1) { | |
f = d[0] = d[0].slice(0); | |
if (f.length > 2 && (l = f[0]).type === "ID" && n.getById && t.nodeType === 9 && v && r.relative[f[1].type]) { | |
t = (r.find.ID(l.matches[0].replace(nt, rt), t) || [])[0]; | |
if (!t) return i; | |
p && (t = t.parentNode), e = e.slice(f.shift().value.length) | |
} | |
a = K.needsContext.test(e) ? 0 : f.length; | |
while (a--) { | |
l = f[a]; | |
if (r.relative[c = l.type]) break; | |
if (h = r.find[c]) | |
if (s = h(l.matches[0].replace(nt, rt), et.test(f[0].type) && vt(t.parentNode) || t)) { | |
f.splice(a, 1), e = s.length && gt(f); | |
if (!e) return D.apply(i, s), i; | |
break | |
} | |
} | |
} | |
return (p || u(e, d))(s, t, !v, i, et.test(e) && vt(t.parentNode) || t), i | |
}, n.sortStable = w.split("").sort(k).join("") === w, n.detectDuplicates = !!c, h(), n.sortDetached = ft(function(e) { | |
return e.compareDocumentPosition(p.createElement("div")) & 1 | |
}), ft(function(e) { | |
return e.innerHTML = "<a href='#'></a>", e.firstChild.getAttribute("href") === "#" | |
}) || lt("type|href|height|width", function(e, t, n) { | |
if (!n) return e.getAttribute(t, t.toLowerCase() === "type" ? 1 : 2) | |
}), (!n.attributes || !ft(function(e) { | |
return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), e.firstChild.getAttribute("value") === "" | |
})) && lt("value", function(e, t, n) { | |
if (!n && e.nodeName.toLowerCase() === "input") return e.defaultValue | |
}), ft(function(e) { | |
return e.getAttribute("disabled") == null | |
}) || lt(B, function(e, t, n) { | |
var r; | |
if (!n) return e[t] === !0 ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null | |
}), ot | |
}(e); | |
h.find = y, h.expr = y.selectors, h.expr[":"] = h.expr.pseudos, h.unique = y.uniqueSort, h.text = y.getText, h.isXMLDoc = y.isXML, h.contains = y.contains; | |
var b = h.expr.match.needsContext, | |
w = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, | |
E = /^.[^:#\[\.,]*$/; | |
h.filter = function(e, t, n) { | |
var r = t[0]; | |
return n && (e = ":not(" + e + ")"), t.length === 1 && r.nodeType === 1 ? h.find.matchesSelector(r, e) ? [r] : [] : h.find.matches(e, h.grep(t, function(e) { | |
return e.nodeType === 1 | |
})) | |
}, h.fn.extend({ | |
find: function(e) { | |
var t, n = [], | |
r = this, | |
i = r.length; | |
if (typeof e != "string") return this.pushStack(h(e).filter(function() { | |
for (t = 0; t < i; t++) | |
if (h.contains(r[t], this)) return !0 | |
})); | |
for (t = 0; t < i; t++) h.find(e, r[t], n); | |
return n = this.pushStack(i > 1 ? h.unique(n) : n), n.selector = this.selector ? this.selector + " " + e : e, n | |
}, | |
filter: function(e) { | |
return this.pushStack(S(this, e || [], !1)) | |
}, | |
not: function(e) { | |
return this.pushStack(S(this, e || [], !0)) | |
}, | |
is: function(e) { | |
return !!S(this, typeof e == "string" && b.test(e) ? h(e) : e || [], !1).length | |
} | |
}); | |
var x, T = e.document, | |
N = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, | |
C = h.fn.init = function(e, t) { | |
var n, r; | |
if (!e) return this; | |
if (typeof e == "string") { | |
e.charAt(0) === "<" && e.charAt(e.length - 1) === ">" && e.length >= 3 ? n = [null, e, null] : n = N.exec(e); | |
if (n && (n[1] || !t)) { | |
if (n[1]) { | |
t = t instanceof h ? t[0] : t, h.merge(this, h.parseHTML(n[1], t && t.nodeType ? t.ownerDocument || t : T, !0)); | |
if (w.test(n[1]) && h.isPlainObject(t)) | |
for (n in t) h.isFunction(this[n]) ? this[n](t[n]) : this.attr(n, t[n]); | |
return this | |
} | |
r = T.getElementById(n[2]); | |
if (r && r.parentNode) { | |
if (r.id !== n[2]) return x.find(e); | |
this.length = 1, this[0] = r | |
} | |
return this.context = T, this.selector = e, this | |
} | |
return !t || t.jquery ? (t || x).find(e) : this.constructor(t).find(e) | |
} | |
return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : h.isFunction(e) ? typeof x.ready != "undefined" ? x.ready(e) : e(h) : (e.selector !== undefined && (this.selector = e.selector, this.context = e.context), h.makeArray(e, this)) | |
}; | |
C.prototype = h.fn, x = h(T); | |
var k = /^(?:parents|prev(?:Until|All))/, | |
L = { | |
children: !0, | |
contents: !0, | |
next: !0, | |
prev: !0 | |
}; | |
h.extend({ | |
dir: function(e, t, n) { | |
var r = [], | |
i = e[t]; | |
while (i && i.nodeType !== 9 && (n === undefined || i.nodeType !== 1 || !h(i).is(n))) i.nodeType === 1 && r.push(i), i = i[t]; | |
return r | |
}, | |
sibling: function(e, t) { | |
var n = []; | |
for (; e; e = e.nextSibling) e.nodeType === 1 && e !== t && n.push(e); | |
return n | |
} | |
}), h.fn.extend({ | |
has: function(e) { | |
var t, n = h(e, this), | |
r = n.length; | |
return this.filter(function() { | |
for (t = 0; t < r; t++) | |
if (h.contains(this, n[t])) return !0 | |
}) | |
}, | |
closest: function(e, t) { | |
var n, r = 0, | |
i = this.length, | |
s = [], | |
o = b.test(e) || typeof e != "string" ? h(e, t || this.context) : 0; | |
for (; r < i; r++) | |
for (n = this[r]; n && n !== t; n = n.parentNode) | |
if (n.nodeType < 11 && (o ? o.index(n) > -1 : n.nodeType === 1 && h.find.matchesSelector(n, e))) { | |
s.push(n); | |
break | |
} | |
return this.pushStack(s.length > 1 ? h.unique(s) : s) | |
}, | |
index: function(e) { | |
return e ? typeof e == "string" ? h.inArray(this[0], h(e)) : h.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 | |
}, | |
add: function(e, t) { | |
return this.pushStack(h.unique(h.merge(this.get(), h(e, t)))) | |
}, | |
addBack: function(e) { | |
return this.add(e == null ? this.prevObject : this.prevObject.filter(e)) | |
} | |
}), h.each({ | |
parent: function(e) { | |
var t = e.parentNode; | |
return t && t.nodeType !== 11 ? t : null | |
}, | |
parents: function(e) { | |
return h.dir(e, "parentNode") | |
}, | |
parentsUntil: function(e, t, n) { | |
return h.dir(e, "parentNode", n) | |
}, | |
next: function(e) { | |
return A(e, "nextSibling") | |
}, | |
prev: function(e) { | |
return A(e, "previousSibling") | |
}, | |
nextAll: function(e) { | |
return h.dir(e, "nextSibling") | |
}, | |
prevAll: function(e) { | |
return h.dir(e, "previousSibling") | |
}, | |
nextUntil: function(e, t, n) { | |
return h.dir(e, "nextSibling", n) | |
}, | |
prevUntil: function(e, t, n) { | |
return h.dir(e, "previousSibling", n) | |
}, | |
siblings: function(e) { | |
return h.sibling((e.parentNode || {}).firstChild, e) | |
}, | |
children: function(e) { | |
return h.sibling(e.firstChild) | |
}, | |
contents: function(e) { | |
return h.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : h.merge([], e.childNodes) | |
} | |
}, function(e, t) { | |
h.fn[e] = function(n, r) { | |
var i = h.map(this, t, n); | |
return e.slice(-5) !== "Until" && (r = n), r && typeof r == "string" && (i = h.filter(r, i)), this.length > 1 && (L[e] || (i = h.unique(i)), k.test(e) && (i = i.reverse())), this.pushStack(i) | |
} | |
}); | |
var O = /\S+/g, | |
M = {}; | |
h.Callbacks = function(e) { | |
e = typeof e == "string" ? M[e] || _(e) : h.extend({}, e); | |
var t, n, r, i, s, o, u = [], | |
a = !e.once && [], | |
f = function(c) { | |
n = e.memory && c, r = !0, s = o || 0, o = 0, i = u.length, t = !0; | |
for (; u && s < i; s++) | |
if (u[s].apply(c[0], c[1]) === !1 && e.stopOnFalse) { | |
n = !1; | |
break | |
} | |
t = !1, u && (a ? a.length && f(a.shift()) : n ? u = [] : l.disable()) | |
}, | |
l = { | |
add: function() { | |
if (u) { | |
var r = u.length; | |
(function s(t) { | |
h.each(t, function(t, n) { | |
var r = h.type(n); | |
r === "function" ? (!e.unique || !l.has(n)) && u.push(n) : n && n.length && r !== "string" && s(n) | |
}) | |
})(arguments), t ? i = u.length : n && (o = r, f(n)) | |
} | |
return this | |
}, | |
remove: function() { | |
return u && h.each(arguments, function(e, n) { | |
var r; | |
while ((r = h.inArray(n, u, r)) > -1) u.splice(r, 1), t && (r <= i && i--, r <= s && s--) | |
}), this | |
}, | |
has: function(e) { | |
return e ? h.inArray(e, u) > -1 : !!u && !!u.length | |
}, | |
empty: function() { | |
return u = [], i = 0, this | |
}, | |
disable: function() { | |
return u = a = n = undefined, this | |
}, | |
disabled: function() { | |
return !u | |
}, | |
lock: function() { | |
return a = undefined, n || l.disable(), this | |
}, | |
locked: function() { | |
return !a | |
}, | |
fireWith: function(e, n) { | |
return u && (!r || a) && (n = n || [], n = [e, n.slice ? n.slice() : n], t ? a.push(n) : f(n)), this | |
}, | |
fire: function() { | |
return l.fireWith(this, arguments), this | |
}, | |
fired: function() { | |
return !!r | |
} | |
}; | |
return l | |
}, h.extend({ | |
Deferred: function(e) { | |
var t = [ | |
["resolve", "done", h.Callbacks("once memory"), "resolved"], | |
["reject", "fail", h.Callbacks("once memory"), "rejected"], | |
["notify", "progress", h.Callbacks("memory")] | |
], | |
n = "pending", | |
r = { | |
state: function() { | |
return n | |
}, | |
always: function() { | |
return i.done(arguments).fail(arguments), this | |
}, | |
then: function() { | |
var e = arguments; | |
return h.Deferred(function(n) { | |
h.each(t, function(t, s) { | |
var o = h.isFunction(e[t]) && e[t]; | |
i[s[1]](function() { | |
var e = o && o.apply(this, arguments); | |
e && h.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[s[0] + "With"](this === r ? n.promise() : this, o ? [e] : arguments) | |
}) | |
}), e = null | |
}).promise() | |
}, | |
promise: function(e) { | |
return e != null ? h.extend(e, r) : r | |
} | |
}, | |
i = {}; | |
return r.pipe = r.then, h.each(t, function(e, s) { | |
var o = s[2], | |
u = s[3]; | |
r[s[1]] = o.add, u && o.add(function() { | |
n = u | |
}, t[e ^ 1][2].disable, t[2][2].lock), i[s[0]] = function() { | |
return i[s[0] + "With"](this === i ? r : this, arguments), this | |
}, i[s[0] + "With"] = o.fireWith | |
}), r.promise(i), e && e.call(i, i), i | |
}, | |
when: function(e) { | |
var t = 0, | |
n = r.call(arguments), | |
i = n.length, | |
s = i !== 1 || e && h.isFunction(e.promise) ? i : 0, | |
o = s === 1 ? e : h.Deferred(), | |
u = function(e, t, n) { | |
return function(i) { | |
t[e] = this, n[e] = arguments.length > 1 ? r.call(arguments) : i, n === a ? o.notifyWith(t, n) : --s || o.resolveWith(t, n) | |
} | |
}, | |
a, f, l; | |
if (i > 1) { | |
a = new Array(i), f = new Array(i), l = new Array(i); | |
for (; t < i; t++) n[t] && h.isFunction(n[t].promise) ? n[t].promise().done(u(t, l, n)).fail(o.reject).progress(u(t, f, a)) : --s | |
} | |
return s || o.resolveWith(l, n), o.promise() | |
} | |
}); | |
var D; | |
h.fn.ready = function(e) { | |
return h.ready.promise().done(e), this | |
}, h.extend({ | |
isReady: !1, | |
readyWait: 1, | |
holdReady: function(e) { | |
e ? h.readyWait++ : h.ready(!0) | |
}, | |
ready: function(e) { | |
if (e === !0 ? --h.readyWait : h.isReady) return; | |
if (!T.body) return setTimeout(h.ready); | |
h.isReady = !0; | |
if (e !== !0 && --h.readyWait > 0) return; | |
D.resolveWith(T, [h]), h.fn.triggerHandler && (h(T).triggerHandler("ready"), h(T).off("ready")) | |
} | |
}), h.ready.promise = function(t) { | |
if (!D) { | |
D = h.Deferred(); | |
if (T.readyState === "complete") setTimeout(h.ready); | |
else if (T.addEventListener) T.addEventListener("DOMContentLoaded", H, !1), e.addEventListener("load", H, !1); | |
else { | |
T.attachEvent("onreadystatechange", H), e.attachEvent("onload", H); | |
var n = !1; | |
try { | |
n = e.frameElement == null && T.documentElement | |
} catch (r) {} | |
n && n.doScroll && function i() { | |
if (!h.isReady) { | |
try { | |
n.doScroll("left") | |
} catch (e) { | |
return setTimeout(i, 50) | |
} | |
P(), h.ready() | |
} | |
}() | |
} | |
} | |
return D.promise(t) | |
}; | |
var B = typeof undefined, | |
j; | |
for (j in h(l)) break; | |
l.ownLast = j !== "0", l.inlineBlockNeedsLayout = !1, h(function() { | |
var e, t, n, r; | |
n = T.getElementsByTagName("body")[0]; | |
if (!n || !n.style) return; | |
t = T.createElement("div"), r = T.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 !== B && (t.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1", l.inlineBlockNeedsLayout = e = t.offsetWidth === 3, e && (n.style.zoom = 1)), n.removeChild(r) | |
}), | |
function() { | |
var e = T.createElement("div"); | |
if (l.deleteExpando == null) { | |
l.deleteExpando = !0; | |
try { | |
delete e.test | |
} catch (t) { | |
l.deleteExpando = !1 | |
} | |
} | |
e = null | |
}(), h.acceptData = function(e) { | |
var t = h.noData[(e.nodeName + " ").toLowerCase()], | |
n = +e.nodeType || 1; | |
return n !== 1 && n !== 9 ? !1 : !t || t !== !0 && e.getAttribute("classid") === t | |
}; | |
var F = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, | |
I = /([A-Z])/g; | |
h.extend({ | |
cache: {}, | |
noData: { | |
"applet ": !0, | |
"embed ": !0, | |
"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" | |
}, | |
hasData: function(e) { | |
return e = e.nodeType ? h.cache[e[h.expando]] : e[h.expando], !!e && !R(e) | |
}, | |
data: function(e, t, n) { | |
return U(e, t, n) | |
}, | |
removeData: function(e, t) { | |
return z(e, t) | |
}, | |
_data: function(e, t, n) { | |
return U(e, t, n, !0) | |
}, | |
_removeData: function(e, t) { | |
return z(e, t, !0) | |
} | |
}), h.fn.extend({ | |
data: function(e, t) { | |
var n, r, i, s = this[0], | |
o = s && s.attributes; | |
if (e === undefined) { | |
if (this.length) { | |
i = h.data(s); | |
if (s.nodeType === 1 && !h._data(s, "parsedAttrs")) { | |
n = o.length; | |
while (n--) o[n] && (r = o[n].name, r.indexOf("data-") === 0 && (r = h.camelCase(r.slice(5)), q(s, r, i[r]))); | |
h._data(s, "parsedAttrs", !0) | |
} | |
} | |
return i | |
} | |
return typeof e == "object" ? this.each(function() { | |
h.data(this, e) | |
}) : arguments.length > 1 ? this.each(function() { | |
h.data(this, e, t) | |
}) : s ? q(s, e, h.data(s, e)) : undefined | |
}, | |
removeData: function(e) { | |
return this.each(function() { | |
h.removeData(this, e) | |
}) | |
} | |
}), h.extend({ | |
queue: function(e, t, n) { | |
var r; | |
if (e) return t = (t || "fx") + "queue", r = h._data(e, t), n && (!r || h.isArray(n) ? r = h._data(e, t, h.makeArray(n)) : r.push(n)), r || [] | |
}, | |
dequeue: function(e, t) { | |
t = t || "fx"; | |
var n = h.queue(e, t), | |
r = n.length, | |
i = n.shift(), | |
s = h._queueHooks(e, t), | |
o = function() { | |
h.dequeue(e, t) | |
}; | |
i === "inprogress" && (i = n.shift(), r--), i && (t === "fx" && n.unshift("inprogress"), delete s.stop, i.call(e, o, s)), !r && s && s.empty.fire() | |
}, | |
_queueHooks: function(e, t) { | |
var n = t + "queueHooks"; | |
return h._data(e, n) || h._data(e, n, { | |
empty: h.Callbacks("once memory").add(function() { | |
h._removeData(e, t + "queue"), h._removeData(e, n) | |
}) | |
}) | |
} | |
}), h.fn.extend({ | |
queue: function(e, t) { | |
var n = 2; | |
return typeof e != "string" && (t = e, e = "fx", n--), arguments.length < n ? h.queue(this[0], e) : t === undefined ? this : this.each(function() { | |
var n = h.queue(this, e, t); | |
h._queueHooks(this, e), e === "fx" && n[0] !== "inprogress" && h.dequeue(this, e) | |
}) | |
}, | |
dequeue: function(e) { | |
return this.each(function() { | |
h.dequeue(this, e) | |
}) | |
}, | |
clearQueue: function(e) { | |
return this.queue(e || "fx", []) | |
}, | |
promise: function(e, t) { | |
var n, r = 1, | |
i = h.Deferred(), | |
s = this, | |
o = this.length, | |
u = function() { | |
--r || i.resolveWith(s, [s]) | |
}; | |
typeof e != "string" && (t = e, e = undefined), e = e || "fx"; | |
while (o--) n = h._data(s[o], e + "queueHooks"), n && n.empty && (r++, n.empty.add(u)); | |
return u(), i.promise(t) | |
} | |
}); | |
var W = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, | |
X = ["Top", "Right", "Bottom", "Left"], | |
V = function(e, t) { | |
return e = t || e, h.css(e, "display") === "none" || !h.contains(e.ownerDocument, e) | |
}, | |
$ = h.access = function(e, t, n, r, i, s, o) { | |
var u = 0, | |
a = e.length, | |
f = n == null; | |
if (h.type(n) === "object") { | |
i = !0; | |
for (u in n) h.access(e, t, u, n[u], !0, s, o) | |
} else if (r !== undefined) { | |
i = !0, h.isFunction(r) || (o = !0), f && (o ? (t.call(e, r), t = null) : (f = t, t = function(e, t, n) { | |
return f.call(h(e), n) | |
})); | |
if (t) | |
for (; u < a; u++) t(e[u], n, o ? r : r.call(e[u], u, t(e[u], n))) | |
} | |
return i ? e : f ? t.call(e) : a ? t(e[0], n) : s | |
}, | |
J = /^(?:checkbox|radio)$/i; | |
(function() { | |
var e = T.createElement("input"), | |
t = T.createElement("div"), | |
n = T.createDocumentFragment(); | |
t.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", l.leadingWhitespace = t.firstChild.nodeType === 3, l.tbody = !t.getElementsByTagName("tbody").length, l.htmlSerialize = !!t.getElementsByTagName("link").length, l.html5Clone = T.createElement("nav").cloneNode(!0).outerHTML !== "<:nav></:nav>", e.type = "checkbox", e.checked = !0, n.appendChild(e), l.appendChecked = e.checked, t.innerHTML = "<textarea>x</textarea>", l.noCloneChecked = !!t.cloneNode(!0).lastChild.defaultValue, n.appendChild(t), t.innerHTML = "<input type='radio' checked='checked' name='t'/>", l.checkClone = t.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !0, t.attachEvent && (t.attachEvent("onclick", function() { | |
l.noCloneEvent = !1 | |
}), t.cloneNode(!0).click()); | |
if (l.deleteExpando == null) { | |
l.deleteExpando = !0; | |
try { | |
delete t.test | |
} catch (r) { | |
l.deleteExpando = !1 | |
} | |
} | |
})(), | |
function() { | |
var t, n, r = T.createElement("div"); | |
for (t in { | |
submit: !0, | |
change: !0, | |
focusin: !0 | |
}) n = "on" + t, (l[t + "Bubbles"] = n in e) || (r.setAttribute(n, "t"), l[t + "Bubbles"] = r.attributes[n].expando === !1); | |
r = null | |
}(); | |
var K = /^(?:input|select|textarea)$/i, | |
Q = /^key/, | |
G = /^(?:mouse|pointer|contextmenu)|click/, | |
Y = /^(?:focusinfocus|focusoutblur)$/, | |
Z = /^([^.]*)(?:\.(.+)|)$/; | |
h.event = { | |
global: {}, | |
add: function(e, t, n, r, i) { | |
var s, o, u, a, f, l, c, p, d, v, m, g = h._data(e); | |
if (!g) return; | |
n.handler && (a = n, n = a.handler, i = a.selector), n.guid || (n.guid = h.guid++), (o = g.events) || (o = g.events = {}), (l = g.handle) || (l = g.handle = function(e) { | |
return typeof h === B || !!e && h.event.triggered === e.type ? undefined : h.event.dispatch.apply(l.elem, arguments) | |
}, l.elem = e), t = (t || "").match(O) || [""], u = t.length; | |
while (u--) { | |
s = Z.exec(t[u]) || [], d = m = s[1], v = (s[2] || "").split(".").sort(); | |
if (!d) continue; | |
f = h.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = h.event.special[d] || {}, c = h.extend({ | |
type: d, | |
origType: m, | |
data: r, | |
handler: n, | |
guid: n.guid, | |
selector: i, | |
needsContext: i && h.expr.match.needsContext.test(i), | |
namespace: v.join(".") | |
}, a); | |
if (!(p = o[d])) { | |
p = o[d] = [], p.delegateCount = 0; | |
if (!f.setup || f.setup.call(e, r, v, l) === !1) e.addEventListener ? e.addEventListener(d, l, !1) : e.attachEvent && e.attachEvent("on" + d, l) | |
} | |
f.add && (f.add.call(e, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), h.event.global[d] = !0 | |
} | |
e = null | |
}, | |
remove: function(e, t, n, r, i) { | |
var s, o, u, a, f, l, c, p, d, v, m, g = h.hasData(e) && h._data(e); | |
if (!g || !(l = g.events)) return; | |
t = (t || "").match(O) || [""], f = t.length; | |
while (f--) { | |
u = Z.exec(t[f]) || [], d = m = u[1], v = (u[2] || "").split(".").sort(); | |
if (!d) { | |
for (d in l) h.event.remove(e, d + t[f], n, r, !0); | |
continue | |
} | |
c = h.event.special[d] || {}, d = (r ? c.delegateType : c.bindType) || d, p = l[d] || [], u = u[2] && new RegExp("(^|\\.)" + v.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = s = p.length; | |
while (s--) o = p[s], (i || m === o.origType) && (!n || n.guid === o.guid) && (!u || u.test(o.namespace)) && (!r || r === o.selector || r === "**" && o.selector) && (p.splice(s, 1), o.selector && p.delegateCount--, c.remove && c.remove.call(e, o)); | |
a && !p.length && ((!c.teardown || c.teardown.call(e, v, g.handle) === !1) && h.removeEvent(e, d, g.handle), delete l[d]) | |
} | |
h.isEmptyObject(l) && (delete g.handle, h._removeData(e, "events")) | |
}, | |
trigger: function(t, n, r, i) { | |
var s, o, u, a, l, c, p, d = [r || T], | |
v = f.call(t, "type") ? t.type : t, | |
m = f.call(t, "namespace") ? t.namespace.split(".") : []; | |
u = c = r = r || T; | |
if (r.nodeType === 3 || r.nodeType === 8) return; | |
if (Y.test(v + h.event.triggered)) return; | |
v.indexOf(".") >= 0 && (m = v.split("."), v = m.shift(), m.sort()), o = v.indexOf(":") < 0 && "on" + v, t = t[h.expando] ? t : new h.Event(v, typeof t == "object" && t), t.isTrigger = i ? 2 : 3, t.namespace = m.join("."), t.namespace_re = t.namespace ? new RegExp("(^|\\.)" + m.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, t.result = undefined, t.target || (t.target = r), n = n == null ? [t] : h.makeArray(n, [t]), l = h.event.special[v] || {}; | |
if (!i && l.trigger && l.trigger.apply(r, n) === !1) return; | |
if (!i && !l.noBubble && !h.isWindow(r)) { | |
a = l.delegateType || v, Y.test(a + v) || (u = u.parentNode); | |
for (; u; u = u.parentNode) d.push(u), c = u; | |
c === (r.ownerDocument || T) && d.push(c.defaultView || c.parentWindow || e) | |
} | |
p = 0; | |
while ((u = d[p++]) && !t.isPropagationStopped()) t.type = p > 1 ? a : l.bindType || v, s = (h._data(u, "events") || {})[t.type] && h._data(u, "handle"), s && s.apply(u, n), s = o && u[o], s && s.apply && h.acceptData(u) && (t.result = s.apply(u, n), t.result === !1 && t.preventDefault()); | |
t.type = v; | |
if (!i && !t.isDefaultPrevented() && (!l._default || l._default.apply(d.pop(), n) === !1) && h.acceptData(r) && o && r[v] && !h.isWindow(r)) { | |
c = r[o], c && (r[o] = null), h.event.triggered = v; | |
try { | |
r[v]() | |
} catch (g) {} | |
h.event.triggered = undefined, c && (r[o] = c) | |
} | |
return t.result | |
}, | |
dispatch: function(e) { | |
e = h.event.fix(e); | |
var t, n, i, s, o, u = [], | |
a = r.call(arguments), | |
f = (h._data(this, "events") || {})[e.type] || [], | |
l = h.event.special[e.type] || {}; | |
a[0] = e, e.delegateTarget = this; | |
if (l.preDispatch && l.preDispatch.call(this, e) === !1) return; | |
u = h.event.handlers.call(this, e, f), t = 0; | |
while ((s = u[t++]) && !e.isPropagationStopped()) { | |
e.currentTarget = s.elem, o = 0; | |
while ((i = s.handlers[o++]) && !e.isImmediatePropagationStopped()) | |
if (!e.namespace_re || e.namespace_re.test(i.namespace)) e.handleObj = i, e.data = i.data, n = ((h.event.special[i.origType] || {}).handle || i.handler).apply(s.elem, a), n !== undefined && (e.result = n) === !1 && (e.preventDefault(), e.stopPropagation()) | |
} | |
return l.postDispatch && l.postDispatch.call(this, e), e.result | |
}, | |
handlers: function(e, t) { | |
var n, r, i, s, o = [], | |
u = t.delegateCount, | |
a = e.target; | |
if (u && a.nodeType && (!e.button || e.type !== "click")) | |
for (; a != this; a = a.parentNode || this) | |
if (a.nodeType === 1 && (a.disabled !== !0 || e.type !== "click")) { | |
i = []; | |
for (s = 0; s < u; s++) r = t[s], n = r.selector + " ", i[n] === undefined && (i[n] = r.needsContext ? h(n, this).index(a) >= 0 : h.find(n, this, null, [a]).length), i[n] && i.push(r); | |
i.length && o.push({ | |
elem: a, | |
handlers: i | |
}) | |
} | |
return u < t.length && o.push({ | |
elem: this, | |
handlers: t.slice(u) | |
}), o | |
}, | |
fix: function(e) { | |
if (e[h.expando]) return e; | |
var t, n, r, i = e.type, | |
s = e, | |
o = this.fixHooks[i]; | |
o || (this.fixHooks[i] = o = G.test(i) ? this.mouseHooks : Q.test(i) ? this.keyHooks : {}), r = o.props ? this.props.concat(o.props) : this.props, e = new h.Event(s), t = r.length; | |
while (t--) n = r[t], e[n] = s[n]; | |
return e.target || (e.target = s.srcElement || T), e.target.nodeType === 3 && (e.target = e.target.parentNode), e.metaKey = !!e.metaKey, o.filter ? o.filter(e, s) : e | |
}, | |
props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), | |
fixHooks: {}, | |
keyHooks: { | |
props: "char charCode key keyCode".split(" "), | |
filter: function(e, t) { | |
return e.which == null && (e.which = t.charCode != null ? t.charCode : t.keyCode), e | |
} | |
}, | |
mouseHooks: { | |
props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), | |
filter: function(e, t) { | |
var n, r, i, s = t.button, | |
o = t.fromElement; | |
return e.pageX == null && t.clientX != null && (r = e.target.ownerDocument || T, i = r.documentElement, n = r.body, e.pageX = t.clientX + (i && i.scrollLeft || n && n.scrollLeft || 0) - (i && i.clientLeft || n && n.clientLeft || 0), e.pageY = t.clientY + (i && i.scrollTop || n && n.scrollTop || 0) - (i && i.clientTop || n && n.clientTop || 0)), !e.relatedTarget && o && (e.relatedTarget = o === e.target ? t.toElement : o), !e.which && s !== undefined && (e.which = s & 1 ? 1 : s & 2 ? 3 : s & 4 ? 2 : 0), e | |
} | |
}, | |
special: { | |
load: { | |
noBubble: !0 | |
}, | |
focus: { | |
trigger: function() { | |
if (this !== nt() && this.focus) try { | |
return this.focus(), !1 | |
} catch (e) {} | |
}, | |
delegateType: "focusin" | |
}, | |
blur: { | |
trigger: function() { | |
if (this === nt() && this.blur) return this.blur(), !1 | |
}, | |
delegateType: "focusout" | |
}, | |
click: { | |
trigger: function() { | |
if (h.nodeName(this, "input") && this.type === "checkbox" && this.click) return this.click(), !1 | |
}, | |
_default: function(e) { | |
return h.nodeName(e.target, "a") | |
} | |
}, | |
beforeunload: { | |
postDispatch: function(e) { | |
e.result !== undefined && e.originalEvent && (e.originalEvent.returnValue = e.result) | |
} | |
} | |
}, | |
simulate: function(e, t, n, r) { | |
var i = h.extend(new h.Event, n, { | |
type: e, | |
isSimulated: !0, | |
originalEvent: {} | |
}); | |
r ? h.event.trigger(i, null, t) : h.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault() | |
} | |
}, h.removeEvent = T.removeEventListener ? function(e, t, n) { | |
e.removeEventListener && e.removeEventListener(t, n, !1) | |
} : function(e, t, n) { | |
var r = "on" + t; | |
e.detachEvent && (typeof e[r] === B && (e[r] = null), e.detachEvent(r, n)) | |
}, h.Event = function(e, t) { | |
if (!(this instanceof h.Event)) return new h.Event(e, t); | |
e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.defaultPrevented === undefined && e.returnValue === !1 ? et : tt) : this.type = e, t && h.extend(this, t), this.timeStamp = e && e.timeStamp || h.now(), this[h.expando] = !0 | |
}, h.Event.prototype = { | |
isDefaultPrevented: tt, | |
isPropagationStopped: tt, | |
isImmediatePropagationStopped: tt, | |
preventDefault: function() { | |
var e = this.originalEvent; | |
this.isDefaultPrevented = et; | |
if (!e) return; | |
e.preventDefault ? e.preventDefault() : e.returnValue = !1 | |
}, | |
stopPropagation: function() { | |
var e = this.originalEvent; | |
this.isPropagationStopped = et; | |
if (!e) return; | |
e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0 | |
}, | |
stopImmediatePropagation: function() { | |
var e = this.originalEvent; | |
this.isImmediatePropagationStopped = et, e && e.stopImmediatePropagation && e.stopImmediatePropagation(), this.stopPropagation() | |
} | |
}, h.each({ | |
mouseenter: "mouseover", | |
mouseleave: "mouseout", | |
pointerenter: "pointerover", | |
pointerleave: "pointerout" | |
}, function(e, t) { | |
h.event.special[e] = { | |
delegateType: t, | |
bindType: t, | |
handle: function(e) { | |
var n, r = this, | |
i = e.relatedTarget, | |
s = e.handleObj; | |
if (!i || i !== r && !h.contains(r, i)) e.type = s.origType, n = s.handler.apply(this, arguments), e.type = t; | |
return n | |
} | |
} | |
}), l.submitBubbles || (h.event.special.submit = { | |
setup: function() { | |
if (h.nodeName(this, "form")) return !1; | |
h.event.add(this, "click._submit keypress._submit", function(e) { | |
var t = e.target, | |
n = h.nodeName(t, "input") || h.nodeName(t, "button") ? t.form : undefined; | |
n && !h._data(n, "submitBubbles") && (h.event.add(n, "submit._submit", function(e) { | |
e._submit_bubble = !0 | |
}), h._data(n, "submitBubbles", !0)) | |
}) | |
}, | |
postDispatch: function(e) { | |
e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && h.event.simulate("submit", this.parentNode, e, !0)) | |
}, | |
teardown: function() { | |
if (h.nodeName(this, "form")) return !1; | |
h.event.remove(this, "._submit") | |
} | |
}), l.changeBubbles || (h.event.special.change = { | |
setup: function() { | |
if (K.test(this.nodeName)) { | |
if (this.type === "checkbox" || this.type === "radio") h.event.add(this, "propertychange._change", function(e) { | |
e.originalEvent.propertyName === "checked" && (this._just_changed = !0) | |
}), h.event.add(this, "click._change", function(e) { | |
this._just_changed && !e.isTrigger && (this._just_changed = !1), h.event.simulate("change", this, e, !0) | |
}); | |
return !1 | |
} | |
h.event.add(this, "beforeactivate._change", function(e) { | |
var t = e.target; | |
K.test(t.nodeName) && !h._data(t, "changeBubbles") && (h.event.add(t, "change._change", function(e) { | |
this.parentNode && !e.isSimulated && !e.isTrigger && h.event.simulate("change", this.parentNode, e, !0) | |
}), h._data(t, "changeBubbles", !0)) | |
}) | |
}, | |
handle: function(e) { | |
var t = e.target; | |
if (this !== t || e.isSimulated || e.isTrigger || t.type !== "radio" && t.type !== "checkbox") return e.handleObj.handler.apply(this, arguments) | |
}, | |
teardown: function() { | |
return h.event.remove(this, "._change"), !K.test(this.nodeName) | |
} | |
}), l.focusinBubbles || h.each({ | |
focus: "focusin", | |
blur: "focusout" | |
}, function(e, t) { | |
var n = function(e) { | |
h.event.simulate(t, e.target, h.event.fix(e), !0) | |
}; | |
h.event.special[t] = { | |
setup: function() { | |
var r = this.ownerDocument || this, | |
i = h._data(r, t); | |
i || r.addEventListener(e, n, !0), h._data(r, t, (i || 0) + 1) | |
}, | |
teardown: function() { | |
var r = this.ownerDocument || this, | |
i = h._data(r, t) - 1; | |
i ? h._data(r, t, i) : (r.removeEventListener(e, n, !0), h._removeData(r, t)) | |
} | |
} | |
}), h.fn.extend({ | |
on: function(e, t, n, r, i) { | |
var s, o; | |
if (typeof e == "object") { | |
typeof t != "string" && (n = n || t, t = undefined); | |
for (s in e) this.on(s, t, n, e[s], i); | |
return this | |
} | |
n == null && r == null ? (r = t, n = t = undefined) : r == null && (typeof t == "string" ? (r = n, n = undefined) : (r = n, n = t, t = undefined)); | |
if (r === !1) r = tt; | |
else if (!r) return this; | |
return i === 1 && (o = r, r = function(e) { | |
return h().off(e), o.apply(this, arguments) | |
}, r.guid = o.guid || (o.guid = h.guid++)), this.each(function() { | |
h.event.add(this, e, r, n, t) | |
}) | |
}, | |
one: function(e, t, n, r) { | |
return this.on(e, t, n, r, 1) | |
}, | |
off: function(e, t, n) { | |
var r, i; | |
if (e && e.preventDefault && e.handleObj) return r = e.handleObj, h(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; | |
if (typeof e == "object") { | |
for (i in e) this.off(i, t, e[i]); | |
return this | |
} | |
if (t === !1 || typeof t == "function") n = t, t = undefined; | |
return n === !1 && (n = tt), this.each(function() { | |
h.event.remove(this, e, n, t) | |
}) | |
}, | |
trigger: function(e, t) { | |
return this.each(function() { | |
h.event.trigger(e, t, this) | |
}) | |
}, | |
triggerHandler: function(e, t) { | |
var n = this[0]; | |
if (n) return h.event.trigger(e, t, n, !0) | |
} | |
}); | |
var it = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", | |
st = / jQuery\d+="(?:null|\d+)"/g, | |
ot = new RegExp("<(?:" + it + ")[\\s/>]", "i"), | |
ut = /^\s+/, | |
at = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, | |
ft = /<([\w:]+)/, | |
lt = /<tbody/i, | |
ct = /<|&#?\w+;/, | |
ht = /<(?:script|style|link)/i, | |
pt = /checked\s*(?:[^=]|=\s*.checked.)/i, | |
dt = /^$|\/(?:java|ecma)script/i, | |
vt = /^true\/(.*)/, | |
mt = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, | |
gt = { | |
option: [1, "<select multiple='multiple'>", "</select>"], | |
legend: [1, "<fieldset>", "</fieldset>"], | |
area: [1, "<map>", "</map>"], | |
param: [1, "<object>", "</object>"], | |
thead: [1, "<table>", "</table>"], | |
tr: [2, "<table><tbody>", "</tbody></table>"], | |
col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], | |
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], | |
_default: l.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"] | |
}, | |
yt = rt(T), | |
bt = yt.appendChild(T.createElement("div")); | |
gt.optgroup = gt.option, gt.tbody = gt.tfoot = gt.colgroup = gt.caption = gt.thead, gt.th = gt.td, h.extend({ | |
clone: function(e, t, n) { | |
var r, i, s, o, u, a = h.contains(e.ownerDocument, e); | |
l.html5Clone || h.isXMLDoc(e) || !ot.test("<" + e.nodeName + ">") ? s = e.cloneNode(!0) : (bt.innerHTML = e.outerHTML, bt.removeChild(s = bt.firstChild)); | |
if ((!l.noCloneEvent || !l.noCloneChecked) && (e.nodeType === 1 || e.nodeType === 11) && !h.isXMLDoc(e)) { | |
r = wt(s), u = wt(e); | |
for (o = 0; | |
(i = u[o]) != null; ++o) r[o] && kt(i, r[o]) | |
} | |
if (t) | |
if (n) { | |
u = u || wt(e), r = r || wt(s); | |
for (o = 0; | |
(i = u[o]) != null; o++) Ct(i, r[o]) | |
} else Ct(e, s); | |
return r = wt(s, "script"), r.length > 0 && Nt(r, !a && wt(e, "script")), r = u = i = null, s | |
}, | |
buildFragment: function(e, t, n, r) { | |
var i, s, o, u, a, f, c, p = e.length, | |
d = rt(t), | |
v = [], | |
m = 0; | |
for (; m < p; m++) { | |
s = e[m]; | |
if (s || s === 0) | |
if (h.type(s) === "object") h.merge(v, s.nodeType ? [s] : s); | |
else if (!ct.test(s)) v.push(t.createTextNode(s)); | |
else { | |
u = u || d.appendChild(t.createElement("div")), a = (ft.exec(s) || ["", ""])[1].toLowerCase(), c = gt[a] || gt._default, u.innerHTML = c[1] + s.replace(at, "<$1></$2>") + c[2], i = c[0]; | |
while (i--) u = u.lastChild; | |
!l.leadingWhitespace && ut.test(s) && v.push(t.createTextNode(ut.exec(s)[0])); | |
if (!l.tbody) { | |
s = a === "table" && !lt.test(s) ? u.firstChild : c[1] === "<table>" && !lt.test(s) ? u : 0, i = s && s.childNodes.length; | |
while (i--) h.nodeName(f = s.childNodes[i], "tbody") && !f.childNodes.length && s.removeChild(f) | |
} | |
h.merge(v, u.childNodes), u.textContent = ""; | |
while (u.firstChild) u.removeChild(u.firstChild); | |
u = d.lastChild | |
} | |
} | |
u && d.removeChild(u), l.appendChecked || h.grep(wt(v, "input"), Et), m = 0; | |
while (s = v[m++]) { | |
if (r && h.inArray(s, r) !== -1) continue; | |
o = h.contains(s.ownerDocument, s), u = wt(d.appendChild(s), "script"), o && Nt(u); | |
if (n) { | |
i = 0; | |
while (s = u[i++]) dt.test(s.type || "") && n.push(s) | |
} | |
} | |
return u = null, d | |
}, | |
cleanData: function(e, t) { | |
var r, i, s, o, u = 0, | |
a = h.expando, | |
f = h.cache, | |
c = l.deleteExpando, | |
p = h.event.special; | |
for (; | |
(r = e[u]) != null; u++) | |
if (t || h.acceptData(r)) { | |
s = r[a], o = s && f[s]; | |
if (o) { | |
if (o.events) | |
for (i in o.events) p[i] ? h.event.remove(r, i) : h.removeEvent(r, i, o.handle); | |
f[s] && (delete f[s], c ? delete r[a] : typeof r.removeAttribute !== B ? r.removeAttribute(a) : r[a] = null, n.push(s)) | |
} | |
} | |
} | |
}), h.fn.extend({ | |
text: function(e) { | |
return $(this, function(e) { | |
return e === undefined ? h.text(this) : this.empty().append((this[0] && this[0].ownerDocument || T).createTextNode(e)) | |
}, null, e, arguments.length) | |
}, | |
append: function() { | |
return this.domManip(arguments, function(e) { | |
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { | |
var t = St(this, e); | |
t.appendChild(e) | |
} | |
}) | |
}, | |
prepend: function() { | |
return this.domManip(arguments, function(e) { | |
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { | |
var t = St(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) { | |
var n, r = e ? h.filter(e, this) : this, | |
i = 0; | |
for (; | |
(n = r[i]) != null; i++) !t && n.nodeType === 1 && h.cleanData(wt(n)), n.parentNode && (t && h.contains(n.ownerDocument, n) && Nt(wt(n, "script")), n.parentNode.removeChild(n)); | |
return this | |
}, | |
empty: function() { | |
var e, t = 0; | |
for (; | |
(e = this[t]) != null; t++) { | |
e.nodeType === 1 && h.cleanData(wt(e, !1)); | |
while (e.firstChild) e.removeChild(e.firstChild); | |
e.options && h.nodeName(e, "select") && (e.options.length = 0) | |
} | |
return this | |
}, | |
clone: function(e, t) { | |
return e = e == null ? !1 : e, t = t == null ? e : t, this.map(function() { | |
return h.clone(this, e, t) | |
}) | |
}, | |
html: function(e) { | |
return $(this, function(e) { | |
var t = this[0] || {}, | |
n = 0, | |
r = this.length; | |
if (e === undefined) return t.nodeType === 1 ? t.innerHTML.replace(st, "") : undefined; | |
if (typeof e == "string" && !ht.test(e) && (l.htmlSerialize || !ot.test(e)) && (l.leadingWhitespace || !ut.test(e)) && !gt[(ft.exec(e) || ["", ""])[1].toLowerCase()]) { | |
e = e.replace(at, "<$1></$2>"); | |
try { | |
for (; n < r; n++) t = this[n] || {}, t.nodeType === 1 && (h.cleanData(wt(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, h.cleanData(wt(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 = i.apply([], e); | |
var n, r, s, o, u, a, f = 0, | |
c = this.length, | |
p = this, | |
d = c - 1, | |
v = e[0], | |
m = h.isFunction(v); | |
if (m || c > 1 && typeof v == "string" && !l.checkClone && pt.test(v)) return this.each(function(n) { | |
var r = p.eq(n); | |
m && (e[0] = v.call(this, n, r.html())), r.domManip(e, t) | |
}); | |
if (c) { | |
a = h.buildFragment(e, this[0].ownerDocument, !1, this), n = a.firstChild, a.childNodes.length === 1 && (a = n); | |
if (n) { | |
o = h.map(wt(a, "script"), xt), s = o.length; | |
for (; f < c; f++) r = a, f !== d && (r = h.clone(r, !0, !0), s && h.merge(o, wt(r, "script"))), t.call(this[f], r, f); | |
if (s) { | |
u = o[o.length - 1].ownerDocument, h.map(o, Tt); | |
for (f = 0; f < s; f++) r = o[f], dt.test(r.type || "") && !h._data(r, "globalEval") && h.contains(u, r) && (r.src ? h._evalUrl && h._evalUrl(r.src) : h.globalEval((r.text || r.textContent || r.innerHTML || "").replace(mt, ""))) | |
} | |
a = n = null | |
} | |
} | |
return this | |
} | |
}), h.each({ | |
appendTo: "append", | |
prependTo: "prepend", | |
insertBefore: "before", | |
insertAfter: "after", | |
replaceAll: "replaceWith" | |
}, function(e, t) { | |
h.fn[e] = function(e) { | |
var n, r = 0, | |
i = [], | |
o = h(e), | |
u = o.length - 1; | |
for (; r <= u; r++) n = r === u ? this : this.clone(!0), h(o[r])[t](n), s.apply(i, n.get()); | |
return this.pushStack(i) | |
} | |
}); | |
var Lt, At = {}; | |
(function() { | |
var e; | |
l.shrinkWrapBlocks = function() { | |
if (e != null) return e; | |
e = !1; | |
var t, n, r; | |
n = T.getElementsByTagName("body")[0]; | |
if (!n || !n.style) return; | |
return t = T.createElement("div"), r = T.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 !== B && (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(T.createElement("div")).style.width = "5px", e = t.offsetWidth !== 3), n.removeChild(r), e | |
} | |
})(); | |
var _t = /^margin/, | |
Dt = new RegExp("^(" + W + ")(?!px)[a-z%]+$", "i"), | |
Pt, Ht, Bt = /^(top|right|bottom|left)$/; | |
e.getComputedStyle ? (Pt = function(t) { | |
return t.ownerDocument.defaultView.opener ? t.ownerDocument.defaultView.getComputedStyle(t, null) : e.getComputedStyle(t, null) | |
}, Ht = function(e, t, n) { | |
var r, i, s, o, u = e.style; | |
return n = n || Pt(e), o = n ? n.getPropertyValue(t) || n[t] : undefined, n && (o === "" && !h.contains(e.ownerDocument, e) && (o = h.style(e, t)), Dt.test(o) && _t.test(t) && (r = u.width, i = u.minWidth, s = u.maxWidth, u.minWidth = u.maxWidth = u.width = o, o = n.width, u.width = r, u.minWidth = i, u.maxWidth = s)), o === undefined ? o : o + "" | |
}) : T.documentElement.currentStyle && (Pt = function(e) { | |
return e.currentStyle | |
}, Ht = function(e, t, n) { | |
var r, i, s, o, u = e.style; | |
return n = n || Pt(e), o = n ? n[t] : undefined, o == null && u && u[t] && (o = u[t]), Dt.test(o) && !Bt.test(t) && (r = u.left, i = e.runtimeStyle, s = i && i.left, s && (i.left = e.currentStyle.left), u.left = t === "fontSize" ? "1em" : o, o = u.pixelLeft + "px", u.left = r, s && (i.left = s)), o === undefined ? o : o + "" || "auto" | |
}), | |
function() { | |
function a() { | |
var t, n, r, a; | |
n = T.getElementsByTagName("body")[0]; | |
if (!n || !n.style) return; | |
t = T.createElement("div"), r = T.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", i = s = !1, u = !0, e.getComputedStyle && (i = (e.getComputedStyle(t, null) || {}).top !== "1%", s = (e.getComputedStyle(t, null) || { | |
width: "4px" | |
}).width === "4px", a = t.appendChild(T.createElement("div")), a.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", a.style.marginRight = a.style.width = "0", t.style.width = "1px", u = !parseFloat((e.getComputedStyle(a, null) || {}).marginRight), t.removeChild(a)), t.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", a = t.getElementsByTagName("td"), a[0].style.cssText = "margin:0;border:0;padding:0;display:none", o = a[0].offsetHeight === 0, o && (a[0].style.display = "", a[1].style.display = "none", o = a[0].offsetHeight === 0), n.removeChild(r) | |
} | |
var t, n, r, i, s, o, u; | |
t = T.createElement("div"), t.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", r = t.getElementsByTagName("a")[0], n = r && r.style; | |
if (!n) return; | |
n.cssText = "float:left;opacity:.5", l.opacity = n.opacity === "0.5", l.cssFloat = !!n.cssFloat, t.style.backgroundClip = "content-box", t.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = t.style.backgroundClip === "content-box", l.boxSizing = n.boxSizing === "" || n.MozBoxSizing === "" || n.WebkitBoxSizing === "", h.extend(l, { | |
reliableHiddenOffsets: function() { | |
return o == null && a(), o | |
}, | |
boxSizingReliable: function() { | |
return s == null && a(), s | |
}, | |
pixelPosition: function() { | |
return i == null && a(), i | |
}, | |
reliableMarginRight: function() { | |
return u == null && a(), u | |
} | |
}) | |
}(), h.swap = function(e, t, n, r) { | |
var i, s, o = {}; | |
for (s in t) o[s] = e.style[s], e.style[s] = t[s]; | |
i = n.apply(e, r || []); | |
for (s in t) e.style[s] = o[s]; | |
return i | |
}; | |
var Ft = /alpha\([^)]*\)/i, | |
It = /opacity\s*=\s*([^)]*)/, | |
qt = /^(none|table(?!-c[ea]).+)/, | |
Rt = new RegExp("^(" + W + ")(.*)$", "i"), | |
Ut = new RegExp("^([+-])=(" + W + ")", "i"), | |
zt = { | |
position: "absolute", | |
visibility: "hidden", | |
display: "block" | |
}, | |
Wt = { | |
letterSpacing: "0", | |
fontWeight: "400" | |
}, | |
Xt = ["Webkit", "O", "Moz", "ms"]; | |
h.extend({ | |
cssHooks: { | |
opacity: { | |
get: function(e, t) { | |
if (t) { | |
var n = Ht(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": l.cssFloat ? "cssFloat" : "styleFloat" | |
}, | |
style: function(e, t, n, r) { | |
if (!e || e.nodeType === 3 || e.nodeType === 8 || !e.style) return; | |
var i, s, o, u = h.camelCase(t), | |
a = e.style; | |
t = h.cssProps[u] || (h.cssProps[u] = Vt(a, u)), o = h.cssHooks[t] || h.cssHooks[u]; | |
if (n === undefined) return o && "get" in o && (i = o.get(e, !1, r)) !== undefined ? i : a[t]; | |
s = typeof n, s === "string" && (i = Ut.exec(n)) && (n = (i[1] + 1) * i[2] + parseFloat(h.css(e, t)), s = "number"); | |
if (n == null || n !== n) return; | |
s === "number" && !h.cssNumber[u] && (n += "px"), !l.clearCloneStyle && n === "" && t.indexOf("background") === 0 && (a[t] = "inherit"); | |
if (!o || !("set" in o) || (n = o.set(e, n, r)) !== undefined) try { | |
a[t] = n | |
} catch (f) {} | |
}, | |
css: function(e, t, n, r) { | |
var i, s, o, u = h.camelCase(t); | |
return t = h.cssProps[u] || (h.cssProps[u] = Vt(e.style, u)), o = h.cssHooks[t] || h.cssHooks[u], o && "get" in o && (s = o.get(e, !0, n)), s === undefined && (s = Ht(e, t, r)), s === "normal" && t in Wt && (s = Wt[t]), n === "" || n ? (i = parseFloat(s), n === !0 || h.isNumeric(i) ? i || 0 : s) : s | |
} | |
}), h.each(["height", "width"], function(e, t) { | |
h.cssHooks[t] = { | |
get: function(e, n, r) { | |
if (n) return qt.test(h.css(e, "display")) && e.offsetWidth === 0 ? h.swap(e, zt, function() { | |
return Qt(e, t, r) | |
}) : Qt(e, t, r) | |
}, | |
set: function(e, n, r) { | |
var i = r && Pt(e); | |
return Jt(e, n, r ? Kt(e, t, r, l.boxSizing && h.css(e, "boxSizing", !1, i) === "border-box", i) : 0) | |
} | |
} | |
}), l.opacity || (h.cssHooks.opacity = { | |
get: function(e, t) { | |
return It.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 = h.isNumeric(t) ? "alpha(opacity=" + t * 100 + ")" : "", | |
s = r && r.filter || n.filter || ""; | |
n.zoom = 1; | |
if ((t >= 1 || t === "") && h.trim(s.replace(Ft, "")) === "" && n.removeAttribute) { | |
n.removeAttribute("filter"); | |
if (t === "" || r && !r.filter) return | |
} | |
n.filter = Ft.test(s) ? s.replace(Ft, i) : s + " " + i | |
} | |
}), h.cssHooks.marginRight = jt(l.reliableMarginRight, function(e, t) { | |
if (t) return h.swap(e, { | |
display: "inline-block" | |
}, Ht, [e, "marginRight"]) | |
}), h.each({ | |
margin: "", | |
padding: "", | |
border: "Width" | |
}, function(e, t) { | |
h.cssHooks[e + t] = { | |
expand: function(n) { | |
var r = 0, | |
i = {}, | |
s = typeof n == "string" ? n.split(" ") : [n]; | |
for (; r < 4; r++) i[e + X[r] + t] = s[r] || s[r - 2] || s[0]; | |
return i | |
} | |
}, _t.test(e) || (h.cssHooks[e + t].set = Jt) | |
}), h.fn.extend({ | |
css: function(e, t) { | |
return $(this, function(e, t, n) { | |
var r, i, s = {}, | |
o = 0; | |
if (h.isArray(t)) { | |
r = Pt(e), i = t.length; | |
for (; o < i; o++) s[t[o]] = h.css(e, t[o], !1, r); | |
return s | |
} | |
return n !== undefined ? h.style(e, t, n) : h.css(e, t) | |
}, e, t, arguments.length > 1) | |
}, | |
show: function() { | |
return $t(this, !0) | |
}, | |
hide: function() { | |
return $t(this) | |
}, | |
toggle: function(e) { | |
return typeof e == "boolean" ? e ? this.show() : this.hide() : this.each(function() { | |
V(this) ? h(this).show() : h(this).hide() | |
}) | |
} | |
}), h.Tween = Gt, Gt.prototype = { | |
constructor: Gt, | |
init: function(e, t, n, r, i, s) { | |
this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = s || (h.cssNumber[n] ? "" : "px") | |
}, | |
cur: function() { | |
var e = Gt.propHooks[this.prop]; | |
return e && e.get ? e.get(this) : Gt.propHooks._default.get(this) | |
}, | |
run: function(e) { | |
var t, n = Gt.propHooks[this.prop]; | |
return this.options.duration ? this.pos = t = h.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) : Gt.propHooks._default.set(this), this | |
} | |
}, Gt.prototype.init.prototype = Gt.prototype, Gt.propHooks = { | |
_default: { | |
get: function(e) { | |
var t; | |
return e.elem[e.prop] == null || !!e.elem.style && e.elem.style[e.prop] != null ? (t = h.css(e.elem, e.prop, ""), !t || t === "auto" ? 0 : t) : e.elem[e.prop] | |
}, | |
set: function(e) { | |
h.fx.step[e.prop] ? h.fx.step[e.prop](e) : e.elem.style && (e.elem.style[h.cssProps[e.prop]] != null || h.cssHooks[e.prop]) ? h.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now | |
} | |
} | |
}, Gt.propHooks.scrollTop = Gt.propHooks.scrollLeft = { | |
set: function(e) { | |
e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) | |
} | |
}, h.easing = { | |
linear: function(e) { | |
return e | |
}, | |
swing: function(e) { | |
return .5 - Math.cos(e * Math.PI) / 2 | |
} | |
}, h.fx = Gt.prototype.init, h.fx.step = {}; | |
var Yt, Zt, en = /^(?:toggle|show|hide)$/, | |
tn = new RegExp("^(?:([+-])=|)(" + W + ")([a-z%]*)$", "i"), | |
nn = /queueHooks$/, | |
rn = [fn], | |
sn = { | |
"*": [ | |
function(e, t) { | |
var n = this.createTween(e, t), | |
r = n.cur(), | |
i = tn.exec(t), | |
s = i && i[3] || (h.cssNumber[e] ? "" : "px"), | |
o = (h.cssNumber[e] || s !== "px" && +r) && tn.exec(h.css(n.elem, e)), | |
u = 1, | |
a = 20; | |
if (o && o[3] !== s) { | |
s = s || o[3], i = i || [], o = +r || 1; | |
do u = u || ".5", o /= u, h.style(n.elem, e, o + s); while (u !== (u = n.cur() / r) && u !== 1 && --a) | |
} | |
return i && (o = n.start = +o || +r || 0, n.unit = s, n.end = i[1] ? o + (i[1] + 1) * i[2] : +i[2]), n | |
} | |
] | |
}; | |
h.Animation = h.extend(cn, { | |
tweener: function(e, t) { | |
h.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" "); | |
var n, r = 0, | |
i = e.length; | |
for (; r < i; r++) n = e[r], sn[n] = sn[n] || [], sn[n].unshift(t) | |
}, | |
prefilter: function(e, t) { | |
t ? rn.unshift(e) : rn.push(e) | |
} | |
}), h.speed = function(e, t, n) { | |
var r = e && typeof e == "object" ? h.extend({}, e) : { | |
complete: n || !n && t || h.isFunction(e) && e, | |
duration: e, | |
easing: n && t || t && !h.isFunction(t) && t | |
}; | |
r.duration = h.fx.off ? 0 : typeof r.duration == "number" ? r.duration : r.duration in h.fx.speeds ? h.fx.speeds[r.duration] : h.fx.speeds._default; | |
if (r.queue == null || r.queue === !0) r.queue = "fx"; | |
return r.old = r.complete, r.complete = function() { | |
h.isFunction(r.old) && r.old.call(this), r.queue && h.dequeue(this, r.queue) | |
}, r | |
}, h.fn.extend({ | |
fadeTo: function(e, t, n, r) { | |
return this.filter(V).css("opacity", 0).show().end().animate({ | |
opacity: t | |
}, e, n, r) | |
}, | |
animate: function(e, t, n, r) { | |
var i = h.isEmptyObject(e), | |
s = h.speed(t, n, r), | |
o = function() { | |
var t = cn(this, h.extend({}, e), s); | |
(i || h._data(this, "finish")) && t.stop(!0) | |
}; | |
return o.finish = o, i || s.queue === !1 ? this.each(o) : this.queue(s.queue, o) | |
}, | |
stop: function(e, t, n) { | |
var r = function(e) { | |
var t = e.stop; | |
delete e.stop, t(n) | |
}; | |
return typeof e != "string" && (n = t, t = e, e = undefined), t && e !== !1 && this.queue(e || "fx", []), this.each(function() { | |
var t = !0, | |
i = e != null && e + "queueHooks", | |
s = h.timers, | |
o = h._data(this); | |
if (i) o[i] && o[i].stop && r(o[i]); | |
else | |
for (i in o) o[i] && o[i].stop && nn.test(i) && r(o[i]); | |
for (i = s.length; i--;) s[i].elem === this && (e == null || s[i].queue === e) && (s[i].anim.stop(n), t = !1, s.splice(i, 1)); | |
(t || !n) && h.dequeue(this, e) | |
}) | |
}, | |
finish: function(e) { | |
return e !== !1 && (e = e || "fx"), this.each(function() { | |
var t, n = h._data(this), | |
r = n[e + "queue"], | |
i = n[e + "queueHooks"], | |
s = h.timers, | |
o = r ? r.length : 0; | |
n.finish = !0, h.queue(this, e, []), i && i.stop && i.stop.call(this, !0); | |
for (t = s.length; t--;) s[t].elem === this && s[t].queue === e && (s[t].anim.stop(!0), s.splice(t, 1)); | |
for (t = 0; t < o; t++) r[t] && r[t].finish && r[t].finish.call(this); | |
delete n.finish | |
}) | |
} | |
}), h.each(["toggle", "show", "hide"], function(e, t) { | |
var n = h.fn[t]; | |
h.fn[t] = function(e, r, i) { | |
return e == null || typeof e == "boolean" ? n.apply(this, arguments) : this.animate(un(t, !0), e, r, i) | |
} | |
}), h.each({ | |
slideDown: un("show"), | |
slideUp: un("hide"), | |
slideToggle: un("toggle"), | |
fadeIn: { | |
opacity: "show" | |
}, | |
fadeOut: { | |
opacity: "hide" | |
}, | |
fadeToggle: { | |
opacity: "toggle" | |
} | |
}, function(e, t) { | |
h.fn[e] = function(e, n, r) { | |
return this.animate(t, e, n, r) | |
} | |
}), h.timers = [], h.fx.tick = function() { | |
var e, t = h.timers, | |
n = 0; | |
Yt = h.now(); | |
for (; n < t.length; n++) e = t[n], !e() && t[n] === e && t.splice(n--, 1); | |
t.length || h.fx.stop(), Yt = undefined | |
}, h.fx.timer = function(e) { | |
h.timers.push(e), e() ? h.fx.start() : h.timers.pop() | |
}, h.fx.interval = 13, h.fx.start = function() { | |
Zt || (Zt = setInterval(h.fx.tick, h.fx.interval)) | |
}, h.fx.stop = function() { | |
clearInterval(Zt), Zt = null | |
}, h.fx.speeds = { | |
slow: 600, | |
fast: 200, | |
_default: 400 | |
}, h.fn.delay = function(e, t) { | |
return e = h.fx ? h.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 = T.createElement("div"), t.setAttribute("className", "t"), t.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", r = t.getElementsByTagName("a")[0], n = T.createElement("select"), i = n.appendChild(T.createElement("option")), e = t.getElementsByTagName("input")[0], r.style.cssText = "top:1px", l.getSetAttribute = t.className !== "t", l.style = /top/.test(r.getAttribute("style")), l.hrefNormalized = r.getAttribute("href") === "/a", l.checkOn = !!e.value, l.optSelected = i.selected, l.enctype = !!T.createElement("form").enctype, n.disabled = !0, l.optDisabled = !i.disabled, e = T.createElement("input"), e.setAttribute("value", ""), l.input = e.getAttribute("value") === "", e.value = "t", e.setAttribute("type", "radio"), l.radioValue = e.value === "t" | |
}(); | |
var hn = /\r/g; | |
h.fn.extend({ | |
val: function(e) { | |
var t, n, r, i = this[0]; | |
if (!arguments.length) { | |
if (i) return t = h.valHooks[i.type] || h.valHooks[i.nodeName.toLowerCase()], t && "get" in t && (n = t.get(i, "value")) !== undefined ? n : (n = i.value, typeof n == "string" ? n.replace(hn, "") : n == null ? "" : n); | |
return | |
} | |
return r = h.isFunction(e), this.each(function(n) { | |
var i; | |
if (this.nodeType !== 1) return; | |
r ? i = e.call(this, n, h(this).val()) : i = e, i == null ? i = "" : typeof i == "number" ? i += "" : h.isArray(i) && (i = h.map(i, function(e) { | |
return e == null ? "" : e + "" | |
})), t = h.valHooks[this.type] || h.valHooks[this.nodeName.toLowerCase()]; | |
if (!t || !("set" in t) || t.set(this, i, "value") === undefined) this.value = i | |
}) | |
} | |
}), h.extend({ | |
valHooks: { | |
option: { | |
get: function(e) { | |
var t = h.find.attr(e, "value"); | |
return t != null ? t : h.trim(h.text(e)) | |
} | |
}, | |
select: { | |
get: function(e) { | |
var t, n, r = e.options, | |
i = e.selectedIndex, | |
s = e.type === "select-one" || i < 0, | |
o = s ? null : [], | |
u = s ? i + 1 : r.length, | |
a = i < 0 ? u : s ? i : 0; | |
for (; a < u; a++) { | |
n = r[a]; | |
if ((n.selected || a === i) && (l.optDisabled ? !n.disabled : n.getAttribute("disabled") === null) && (!n.parentNode.disabled || !h.nodeName(n.parentNode, "optgroup"))) { | |
t = h(n).val(); | |
if (s) return t; | |
o.push(t) | |
} | |
} | |
return o | |
}, | |
set: function(e, t) { | |
var n, r, i = e.options, | |
s = h.makeArray(t), | |
o = i.length; | |
while (o--) { | |
r = i[o]; | |
if (h.inArray(h.valHooks.option.get(r), s) >= 0) try { | |
r.selected = n = !0 | |
} catch (u) { | |
r.scrollHeight | |
} else r.selected = !1 | |
} | |
return n || (e.selectedIndex = -1), i | |
} | |
} | |
} | |
}), h.each(["radio", "checkbox"], function() { | |
h.valHooks[this] = { | |
set: function(e, t) { | |
if (h.isArray(t)) return e.checked = h.inArray(h(e).val(), t) >= 0 | |
} | |
}, l.checkOn || (h.valHooks[this].get = function(e) { | |
return e.getAttribute("value") === null ? "on" : e.value | |
}) | |
}); | |
var pn, dn, vn = h.expr.attrHandle, | |
mn = /^(?:checked|selected)$/i, | |
gn = l.getSetAttribute, | |
yn = l.input; | |
h.fn.extend({ | |
attr: function(e, t) { | |
return $(this, h.attr, e, t, arguments.length > 1) | |
}, | |
removeAttr: function(e) { | |
return this.each(function() { | |
h.removeAttr(this, e) | |
}) | |
} | |
}), h.extend({ | |
attr: function(e, t, n) { | |
var r, i, s = e.nodeType; | |
if (!e || s === 3 || s === 8 || s === 2) return; | |
if (typeof e.getAttribute === B) return h.prop(e, t, n); | |
if (s !== 1 || !h.isXMLDoc(e)) t = t.toLowerCase(), r = h.attrHooks[t] || (h.expr.match.bool.test(t) ? dn : pn); | |
if (n === undefined) return r && "get" in r && (i = r.get(e, t)) !== null ? i : (i = h.find.attr(e, t), i == null ? undefined : i); | |
if (n !== null) return r && "set" in r && (i = r.set(e, n, t)) !== undefined ? i : (e.setAttribute(t, n + ""), n); | |
h.removeAttr(e, t) | |
}, | |
removeAttr: function(e, t) { | |
var n, r, i = 0, | |
s = t && t.match(O); | |
if (s && e.nodeType === 1) | |
while (n = s[i++]) r = h.propFix[n] || n, h.expr.match.bool.test(n) ? yn && gn || !mn.test(n) ? e[r] = !1 : e[h.camelCase("default-" + n)] = e[r] = !1 : h.attr(e, n, ""), e.removeAttribute(gn ? n : r) | |
}, | |
attrHooks: { | |
type: { | |
set: function(e, t) { | |
if (!l.radioValue && t === "radio" && h.nodeName(e, "input")) { | |
var n = e.value; | |
return e.setAttribute("type", t), n && (e.value = n), t | |
} | |
} | |
} | |
} | |
}), dn = { | |
set: function(e, t, n) { | |
return t === !1 ? h.removeAttr(e, n) : yn && gn || !mn.test(n) ? e.setAttribute(!gn && h.propFix[n] || n, n) : e[h.camelCase("default-" + n)] = e[n] = !0, n | |
} | |
}, h.each(h.expr.match.bool.source.match(/\w+/g), function(e, t) { | |
var n = vn[t] || h.find.attr; | |
vn[t] = yn && gn || !mn.test(t) ? function(e, t, r) { | |
var i, s; | |
return r || (s = vn[t], vn[t] = i, i = n(e, t, r) != null ? t.toLowerCase() : null, vn[t] = s), i | |
} : function(e, t, n) { | |
if (!n) return e[h.camelCase("default-" + t)] ? t.toLowerCase() : null | |
} | |
}); | |
if (!yn || !gn) h.attrHooks.value = { | |
set: function(e, t, n) { | |
if (!h.nodeName(e, "input")) return pn && pn.set(e, t, n); | |
e.defaultValue = t | |
} | |
}; | |
gn || (pn = { | |
set: function(e, t, n) { | |
var r = e.getAttributeNode(n); | |
r || e.setAttributeNode(r = e.ownerDocument.createAttribute(n)), r.value = t += ""; | |
if (n === "value" || t === e.getAttribute(n)) return t | |
} | |
}, vn.id = vn.name = vn.coords = function(e, t, n) { | |
var r; | |
if (!n) return (r = e.getAttributeNode(t)) && r.value !== "" ? r.value : null | |
}, h.valHooks.button = { | |
get: function(e, t) { | |
var n = e.getAttributeNode(t); | |
if (n && n.specified) return n.value | |
}, | |
set: pn.set | |
}, h.attrHooks.contenteditable = { | |
set: function(e, t, n) { | |
pn.set(e, t === "" ? !1 : t, n) | |
} | |
}, h.each(["width", "height"], function(e, t) { | |
h.attrHooks[t] = { | |
set: function(e, n) { | |
if (n === "") return e.setAttribute(t, "auto"), n | |
} | |
} | |
})), l.style || (h.attrHooks.style = { | |
get: function(e) { | |
return e.style.cssText || undefined | |
}, | |
set: function(e, t) { | |
return e.style.cssText = t + "" | |
} | |
}); | |
var bn = /^(?:input|select|textarea|button|object)$/i, | |
wn = /^(?:a|area)$/i; | |
h.fn.extend({ | |
prop: function(e, t) { | |
return $(this, h.prop, e, t, arguments.length > 1) | |
}, | |
removeProp: function(e) { | |
return e = h.propFix[e] || e, this.each(function() { | |
try { | |
this[e] = undefined, delete this[e] | |
} catch (t) {} | |
}) | |
} | |
}), h.extend({ | |
propFix: { | |
"for": "htmlFor", | |
"class": "className" | |
}, | |
prop: function(e, t, n) { | |
var r, i, s, o = e.nodeType; | |
if (!e || o === 3 || o === 8 || o === 2) return; | |
return s = o !== 1 || !h.isXMLDoc(e), s && (t = h.propFix[t] || t, i = h.propHooks[t]), n !== undefined ? i && "set" in i && (r = i.set(e, n, t)) !== undefined ? r : e[t] = n : i && "get" in i && (r = i.get(e, t)) !== null ? r : e[t] | |
}, | |
propHooks: { | |
tabIndex: { | |
get: function(e) { | |
var t = h.find.attr(e, "tabindex"); | |
return t ? parseInt(t, 10) : bn.test(e.nodeName) || wn.test(e.nodeName) && e.href ? 0 : -1 | |
} | |
} | |
} | |
}), l.hrefNormalized || h.each(["href", "src"], function(e, t) { | |
h.propHooks[t] = { | |
get: function(e) { | |
return e.getAttribute(t, 4) | |
} | |
} | |
}), l.optSelected || (h.propHooks.selected = { | |
get: function(e) { | |
var t = e.parentNode; | |
return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null | |
} | |
}), h.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() { | |
h.propFix[this.toLowerCase()] = this | |
}), l.enctype || (h.propFix.enctype = "encoding"); | |
var En = /[\t\r\n\f]/g; | |
h.fn.extend({ | |
addClass: function(e) { | |
var t, n, r, i, s, o, u = 0, | |
a = this.length, | |
f = typeof e == "string" && e; | |
if (h.isFunction(e)) return this.each(function(t) { | |
h(this).addClass(e.call(this, t, this.className)) | |
}); | |
if (f) { | |
t = (e || "").match(O) || []; | |
for (; u < a; u++) { | |
n = this[u], r = n.nodeType === 1 && (n.className ? (" " + n.className + " ").replace(En, " ") : " "); | |
if (r) { | |
s = 0; | |
while (i = t[s++]) r.indexOf(" " + i + " ") < 0 && (r += i + " "); | |
o = h.trim(r), n.className !== o && (n.className = o) | |
} | |
} | |
} | |
return this | |
}, | |
removeClass: function(e) { | |
var t, n, r, i, s, o, u = 0, | |
a = this.length, | |
f = arguments.length === 0 || typeof e == "string" && e; | |
if (h.isFunction(e)) return this.each(function(t) { | |
h(this).removeClass(e.call(this, t, this.className)) | |
}); | |
if (f) { | |
t = (e || "").match(O) || []; | |
for (; u < a; u++) { | |
n = this[u], r = n.nodeType === 1 && (n.className ? (" " + n.className + " ").replace(En, " ") : ""); | |
if (r) { | |
s = 0; | |
while (i = t[s++]) | |
while (r.indexOf(" " + i + " ") >= 0) r = r.replace(" " + i + " ", " "); | |
o = e ? h.trim(r) : "", n.className !== o && (n.className = o) | |
} | |
} | |
} | |
return this | |
}, | |
toggleClass: function(e, t) { | |
var n = typeof e; | |
return typeof t == "boolean" && n === "string" ? t ? this.addClass(e) : this.removeClass(e) : h.isFunction(e) ? this.each(function(n) { | |
h(this).toggleClass(e.call(this, n, this.className, t), t) | |
}) : this.each(function() { | |
if (n === "string") { | |
var t, r = 0, | |
i = h(this), | |
s = e.match(O) || []; | |
while (t = s[r++]) i.hasClass(t) ? i.removeClass(t) : i.addClass(t) | |
} else if (n === B || n === "boolean") this.className && h._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : h._data(this, "__className__") || "" | |
}) | |
}, | |
hasClass: function(e) { | |
var t = " " + e + " ", | |
n = 0, | |
r = this.length; | |
for (; n < r; n++) | |
if (this[n].nodeType === 1 && (" " + this[n].className + " ").replace(En, " ").indexOf(t) >= 0) return !0; | |
return !1 | |
} | |
}), h.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) { | |
h.fn[t] = function(e, n) { | |
return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t) | |
} | |
}), h.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 arguments.length === 1 ? this.off(e, "**") : this.off(t, e || "**", n) | |
} | |
}); | |
var Sn = h.now(), | |
xn = /\?/, | |
Tn = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g; | |
h.parseJSON = function(t) { | |
if (e.JSON && e.JSON.parse) return e.JSON.parse(t + ""); | |
var n, r = null, | |
i = h.trim(t + ""); | |
return i && !h.trim(i.replace(Tn, function(e, t, i, s) { | |
return n && t && (r = 0), r === 0 ? e : (n = i || t, r += !s - !i, "") | |
})) ? Function("return " + i)() : h.error("Invalid JSON: " + t) | |
}, h.parseXML = function(t) { | |
var n, r; | |
if (!t || typeof t != "string") 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 = undefined | |
} | |
return (!n || !n.documentElement || n.getElementsByTagName("parsererror").length) && h.error("Invalid XML: " + t), n | |
}; | |
var Nn, Cn, kn = /#.*$/, | |
Ln = /([?&])_=[^&]*/, | |
An = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, | |
On = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, | |
Mn = /^(?:GET|HEAD)$/, | |
_n = /^\/\//, | |
Dn = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, | |
Pn = {}, | |
Hn = {}, | |
Bn = "*/".concat("*"); | |
try { | |
Cn = location.href | |
} catch (jn) { | |
Cn = T.createElement("a"), Cn.href = "", Cn = Cn.href | |
} | |
Nn = Dn.exec(Cn.toLowerCase()) || [], h.extend({ | |
active: 0, | |
lastModified: {}, | |
etag: {}, | |
ajaxSettings: { | |
url: Cn, | |
type: "GET", | |
isLocal: On.test(Nn[1]), | |
global: !0, | |
processData: !0, | |
async: !0, | |
contentType: "application/x-www-form-urlencoded; charset=UTF-8", | |
accepts: { | |
"*": Bn, | |
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": h.parseJSON, | |
"text xml": h.parseXML | |
}, | |
flatOptions: { | |
url: !0, | |
context: !0 | |
} | |
}, | |
ajaxSetup: function(e, t) { | |
return t ? qn(qn(e, h.ajaxSettings), t) : qn(h.ajaxSettings, e) | |
}, | |
ajaxPrefilter: Fn(Pn), | |
ajaxTransport: Fn(Hn), | |
ajax: function(e, t) { | |
function x(e, t, n, r) { | |
var f, g, y, w, S, x = t; | |
if (b === 2) return; | |
b = 2, o && clearTimeout(o), a = undefined, s = r || "", E.readyState = e > 0 ? 4 : 0, f = e >= 200 && e < 300 || e === 304, n && (w = Rn(l, E, n)), w = Un(l, w, E, f); | |
if (f) l.ifModified && (S = E.getResponseHeader("Last-Modified"), S && (h.lastModified[i] = S), S = E.getResponseHeader("etag"), S && (h.etag[i] = S)), e === 204 || l.type === "HEAD" ? x = "nocontent" : e === 304 ? x = "notmodified" : (x = w.state, g = w.data, y = w.error, f = !y); | |
else { | |
y = x; | |
if (e || !x) x = "error", e < 0 && (e = 0) | |
} | |
E.status = e, E.statusText = (t || x) + "", f ? d.resolveWith(c, [g, x, E]) : d.rejectWith(c, [E, x, y]), E.statusCode(m), m = undefined, u && p.trigger(f ? "ajaxSuccess" : "ajaxError", [E, l, f ? g : y]), v.fireWith(c, [E, x]), u && (p.trigger("ajaxComplete", [E, l]), --h.active || h.event.trigger("ajaxStop")) | |
} | |
typeof e == "object" && (t = e, e = undefined), t = t || {}; | |
var n, r, i, s, o, u, a, f, l = h.ajaxSetup({}, t), | |
c = l.context || l, | |
p = l.context && (c.nodeType || c.jquery) ? h(c) : h.event, | |
d = h.Deferred(), | |
v = h.Callbacks("once memory"), | |
m = l.statusCode || {}, | |
g = {}, | |
y = {}, | |
b = 0, | |
w = "canceled", | |
E = { | |
readyState: 0, | |
getResponseHeader: function(e) { | |
var t; | |
if (b === 2) { | |
if (!f) { | |
f = {}; | |
while (t = An.exec(s)) f[t[1].toLowerCase()] = t[2] | |
} | |
t = f[e.toLowerCase()] | |
} | |
return t == null ? null : t | |
}, | |
getAllResponseHeaders: function() { | |
return b === 2 ? s : null | |
}, | |
setRequestHeader: function(e, t) { | |
var n = e.toLowerCase(); | |
return b || (e = y[n] = y[n] || e, g[e] = t), this | |
}, | |
overrideMimeType: function(e) { | |
return b || (l.mimeType = e), this | |
}, | |
statusCode: function(e) { | |
var t; | |
if (e) | |
if (b < 2) | |
for (t in e) m[t] = [m[t], e[t]]; | |
else E.always(e[E.status]); | |
return this | |
}, | |
abort: function(e) { | |
var t = e || w; | |
return a && a.abort(t), x(0, t), this | |
} | |
}; | |
d.promise(E).complete = v.add, E.success = E.done, E.error = E.fail, l.url = ((e || l.url || Cn) + "").replace(kn, "").replace(_n, Nn[1] + "//"), l.type = t.method || t.type || l.method || l.type, l.dataTypes = h.trim(l.dataType || "*").toLowerCase().match(O) || [""], l.crossDomain == null && (n = Dn.exec(l.url.toLowerCase()), l.crossDomain = !(!n || n[1] === Nn[1] && n[2] === Nn[2] && (n[3] || (n[1] === "http:" ? "80" : "443")) === (Nn[3] || (Nn[1] === "http:" ? "80" : "443")))), l.data && l.processData && typeof l.data != "string" && (l.data = h.param(l.data, l.traditional)), In(Pn, l, t, E); | |
if (b === 2) return E; | |
u = h.event && l.global, u && h.active++ === 0 && h.event.trigger("ajaxStart"), l.type = l.type.toUpperCase(), l.hasContent = !Mn.test(l.type), i = l.url, l.hasContent || (l.data && (i = l.url += (xn.test(i) ? "&" : "?") + l.data, delete l.data), l.cache === !1 && (l.url = Ln.test(i) ? i.replace(Ln, "$1_=" + Sn++) : i + (xn.test(i) ? "&" : "?") + "_=" + Sn++)), l.ifModified && (h.lastModified[i] && E.setRequestHeader("If-Modified-Since", h.lastModified[i]), h.etag[i] && E.setRequestHeader("If-None-Match", h.etag[i])), (l.data && l.hasContent && l.contentType !== !1 || t.contentType) && E.setRequestHeader("Content-Type", l.contentType), E.setRequestHeader("Accept", l.dataTypes[0] && l.accepts[l.dataTypes[0]] ? l.accepts[l.dataTypes[0]] + (l.dataTypes[0] !== "*" ? ", " + Bn + "; q=0.01" : "") : l.accepts["*"]); | |
for (r in l.headers) E.setRequestHeader(r, l.headers[r]); | |
if (!l.beforeSend || l.beforeSend.call(c, E, l) !== !1 && b !== 2) { | |
w = "abort"; | |
for (r in { | |
success: 1, | |
error: 1, | |
complete: 1 | |
}) E[r](l[r]); | |
a = In(Hn, l, t, E); | |
if (!a) x(-1, "No Transport"); | |
else { | |
E.readyState = 1, u && p.trigger("ajaxSend", [E, l]), l.async && l.timeout > 0 && (o = setTimeout(function() { | |
E.abort("timeout") | |
}, l.timeout)); | |
try { | |
b = 1, a.send(g, x) | |
} catch (S) { | |
if (!(b < 2)) throw S; | |
x(-1, S) | |
} | |
} | |
return E | |
} | |
return E.abort() | |
}, | |
getJSON: function(e, t, n) { | |
return h.get(e, t, n, "json") | |
}, | |
getScript: function(e, t) { | |
return h.get(e, undefined, t, "script") | |
} | |
}), h.each(["get", "post"], function(e, t) { | |
h[t] = function(e, n, r, i) { | |
return h.isFunction(n) && (i = i || r, r = n, n = undefined), h.ajax({ | |
url: e, | |
type: t, | |
dataType: i, | |
data: n, | |
success: r | |
}) | |
} | |
}), h._evalUrl = function(e) { | |
return h.ajax({ | |
url: e, | |
type: "GET", | |
dataType: "script", | |
async: !1, | |
global: !1, | |
"throws": !0 | |
}) | |
}, h.fn.extend({ | |
wrapAll: function(e) { | |
if (h.isFunction(e)) return this.each(function(t) { | |
h(this).wrapAll(e.call(this, t)) | |
}); | |
if (this[0]) { | |
var t = h(e, this[0].ownerDocument).eq(0).clone(!0); | |
this[0].parentNode && t.insertBefore(this[0]), t.map(function() { | |
var e = this; | |
while (e.firstChild && e.firstChild.nodeType === 1) e = e.firstChild; | |
return e | |
}).append(this) | |
} | |
return this | |
}, | |
wrapInner: function(e) { | |
return h.isFunction(e) ? this.each(function(t) { | |
h(this).wrapInner(e.call(this, t)) | |
}) : this.each(function() { | |
var t = h(this), | |
n = t.contents(); | |
n.length ? n.wrapAll(e) : t.append(e) | |
}) | |
}, | |
wrap: function(e) { | |
var t = h.isFunction(e); | |
return this.each(function(n) { | |
h(this).wrapAll(t ? e.call(this, n) : e) | |
}) | |
}, | |
unwrap: function() { | |
return this.parent().each(function() { | |
h.nodeName(this, "body") || h(this).replaceWith(this.childNodes) | |
}).end() | |
} | |
}), h.expr.filters.hidden = function(e) { | |
return e.offsetWidth <= 0 && e.offsetHeight <= 0 || !l.reliableHiddenOffsets() && (e.style && e.style.display || h.css(e, "display")) === "none" | |
}, h.expr.filters.visible = function(e) { | |
return !h.expr.filters.hidden(e) | |
}; | |
var zn = /%20/g, | |
Wn = /\[\]$/, | |
Xn = /\r?\n/g, | |
Vn = /^(?:submit|button|image|reset|file)$/i, | |
$n = /^(?:input|select|textarea|keygen)/i; | |
h.param = function(e, t) { | |
var n, r = [], | |
i = function(e, t) { | |
t = h.isFunction(t) ? t() : t == null ? "" : t, r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t) | |
}; | |
t === undefined && (t = h.ajaxSettings && h.ajaxSettings.traditional); | |
if (h.isArray(e) || e.jquery && !h.isPlainObject(e)) h.each(e, function() { | |
i(this.name, this.value) | |
}); | |
else | |
for (n in e) Jn(n, e[n], t, i); | |
return r.join("&").replace(zn, "+") | |
}, h.fn.extend({ | |
serialize: function() { | |
return h.param(this.serializeArray()) | |
}, | |
serializeArray: function() { | |
return this.map(function() { | |
var e = h.prop(this, "elements"); | |
return e ? h.makeArray(e) : this | |
}).filter(function() { | |
var e = this.type; | |
return this.name && !h(this).is(":disabled") && $n.test(this.nodeName) && !Vn.test(e) && (this.checked || !J.test(e)) | |
}).map(function(e, t) { | |
var n = h(this).val(); | |
return n == null ? null : h.isArray(n) ? h.map(n, function(e) { | |
return { | |
name: t.name, | |
value: e.replace(Xn, "\r\n") | |
} | |
}) : { | |
name: t.name, | |
value: n.replace(Xn, "\r\n") | |
} | |
}).get() | |
} | |
}), h.ajaxSettings.xhr = e.ActiveXObject !== undefined ? function() { | |
return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && Yn() || Zn() | |
} : Yn; | |
var Kn = 0, | |
Qn = {}, | |
Gn = h.ajaxSettings.xhr(); | |
e.attachEvent && e.attachEvent("onunload", function() { | |
for (var e in Qn) Qn[e](undefined, !0) | |
}), l.cors = !!Gn && "withCredentials" in Gn, Gn = l.ajax = !!Gn, Gn && h.ajaxTransport(function(e) { | |
if (!e.crossDomain || l.cors) { | |
var t; | |
return { | |
send: function(n, r) { | |
var i, s = e.xhr(), | |
o = ++Kn; | |
s.open(e.type, e.url, e.async, e.username, e.password); | |
if (e.xhrFields) | |
for (i in e.xhrFields) s[i] = e.xhrFields[i]; | |
e.mimeType && s.overrideMimeType && s.overrideMimeType(e.mimeType), !e.crossDomain && !n["X-Requested-With"] && (n["X-Requested-With"] = "XMLHttpRequest"); | |
for (i in n) n[i] !== undefined && s.setRequestHeader(i, n[i] + ""); | |
s.send(e.hasContent && e.data || null), t = function(n, i) { | |
var u, a, f; | |
if (t && (i || s.readyState === 4)) { | |
delete Qn[o], t = undefined, s.onreadystatechange = h.noop; | |
if (i) s.readyState !== 4 && s.abort(); | |
else { | |
f = {}, u = s.status, typeof s.responseText == "string" && (f.text = s.responseText); | |
try { | |
a = s.statusText | |
} catch (l) { | |
a = "" | |
}!u && e.isLocal && !e.crossDomain ? u = f.text ? 200 : 404 : u === 1223 && (u = 204) | |
} | |
} | |
f && r(u, a, f, s.getAllResponseHeaders()) | |
}, e.async ? s.readyState === 4 ? setTimeout(t) : s.onreadystatechange = Qn[o] = t : t() | |
}, | |
abort: function() { | |
t && t(undefined, !0) | |
} | |
} | |
} | |
}), h.ajaxSetup({ | |
accepts: { | |
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" | |
}, | |
contents: { | |
script: /(?:java|ecma)script/ | |
}, | |
converters: { | |
"text script": function(e) { | |
return h.globalEval(e), e | |
} | |
} | |
}), h.ajaxPrefilter("script", function(e) { | |
e.cache === undefined && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1) | |
}), h.ajaxTransport("script", function(e) { | |
if (e.crossDomain) { | |
var t, n = T.head || h("head")[0] || T.documentElement; | |
return { | |
send: function(r, i) { | |
t = T.createElement("script"), t.async = !0, e.scriptCharset && (t.charset = e.scriptCharset), t.src = e.url, t.onload = t.onreadystatechange = function(e, n) { | |
if (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(undefined, !0) | |
} | |
} | |
} | |
}); | |
var er = [], | |
tr = /(=)\?(?=&|$)|\?\?/; | |
h.ajaxSetup({ | |
jsonp: "callback", | |
jsonpCallback: function() { | |
var e = er.pop() || h.expando + "_" + Sn++; | |
return this[e] = !0, e | |
} | |
}), h.ajaxPrefilter("json jsonp", function(t, n, r) { | |
var i, s, o, u = t.jsonp !== !1 && (tr.test(t.url) ? "url" : typeof t.data == "string" && !(t.contentType || "").indexOf("application/x-www-form-urlencoded") && tr.test(t.data) && "data"); | |
if (u || t.dataTypes[0] === "jsonp") return i = t.jsonpCallback = h.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, u ? t[u] = t[u].replace(tr, "$1" + i) : t.jsonp !== !1 && (t.url += (xn.test(t.url) ? "&" : "?") + t.jsonp + "=" + i), t.converters["script json"] = function() { | |
return o || h.error(i + " was not called"), o[0] | |
}, t.dataTypes[0] = "json", s = e[i], e[i] = function() { | |
o = arguments | |
}, r.always(function() { | |
e[i] = s, t[i] && (t.jsonpCallback = n.jsonpCallback, er.push(i)), o && h.isFunction(s) && s(o[0]), o = s = undefined | |
}), "script" | |
}), h.parseHTML = function(e, t, n) { | |
if (!e || typeof e != "string") return null; | |
typeof t == "boolean" && (n = t, t = !1), t = t || T; | |
var r = w.exec(e), | |
i = !n && []; | |
return r ? [t.createElement(r[1])] : (r = h.buildFragment([e], t, i), i && i.length && h(i).remove(), h.merge([], r.childNodes)) | |
}; | |
var nr = h.fn.load; | |
h.fn.load = function(e, t, n) { | |
if (typeof e != "string" && nr) return nr.apply(this, arguments); | |
var r, i, s, o = this, | |
u = e.indexOf(" "); | |
return u >= 0 && (r = h.trim(e.slice(u, e.length)), e = e.slice(0, u)), h.isFunction(t) ? (n = t, t = undefined) : t && typeof t == "object" && (s = "POST"), o.length > 0 && h.ajax({ | |
url: e, | |
type: s, | |
dataType: "html", | |
data: t | |
}).done(function(e) { | |
i = arguments, o.html(r ? h("<div>").append(h.parseHTML(e)).find(r) : e) | |
}).complete(n && function(e, t) { | |
o.each(n, i || [e.responseText, t, e]) | |
}), this | |
}, h.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) { | |
h.fn[t] = function(e) { | |
return this.on(t, e) | |
} | |
}), h.expr.filters.animated = function(e) { | |
return h.grep(h.timers, function(t) { | |
return e === t.elem | |
}).length | |
}; | |
var rr = e.document.documentElement; | |
h.offset = { | |
setOffset: function(e, t, n) { | |
var r, i, s, o, u, a, f, l = h.css(e, "position"), | |
c = h(e), | |
p = {}; | |
l === "static" && (e.style.position = "relative"), u = c.offset(), s = h.css(e, "top"), a = h.css(e, "left"), f = (l === "absolute" || l === "fixed") && h.inArray("auto", [s, a]) > -1, f ? (r = c.position(), o = r.top, i = r.left) : (o = parseFloat(s) || 0, i = parseFloat(a) || 0), h.isFunction(t) && (t = t.call(e, n, u)), t.top != null && (p.top = t.top - u.top + o), t.left != null && (p.left = t.left - u.left + i), "using" in t ? t.using.call(e, p) : c.css(p) | |
} | |
}, h.fn.extend({ | |
offset: function(e) { | |
if (arguments.length) return e === undefined ? this : this.each(function(t) { | |
h.offset.setOffset(this, e, t) | |
}); | |
var t, n, r = { | |
top: 0, | |
left: 0 | |
}, | |
i = this[0], | |
s = i && i.ownerDocument; | |
if (!s) return; | |
return t = s.documentElement, h.contains(t, i) ? (typeof i.getBoundingClientRect !== B && (r = i.getBoundingClientRect()), n = ir(s), { | |
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]) return; | |
var e, t, n = { | |
top: 0, | |
left: 0 | |
}, | |
r = this[0]; | |
return h.css(r, "position") === "fixed" ? t = r.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), h.nodeName(e[0], "html") || (n = e.offset()), n.top += h.css(e[0], "borderTopWidth", !0), n.left += h.css(e[0], "borderLeftWidth", !0)), { | |
top: t.top - n.top - h.css(r, "marginTop", !0), | |
left: t.left - n.left - h.css(r, "marginLeft", !0) | |
} | |
}, | |
offsetParent: function() { | |
return this.map(function() { | |
var e = this.offsetParent || rr; | |
while (e && !h.nodeName(e, "html") && h.css(e, "position") === "static") e = e.offsetParent; | |
return e || rr | |
}) | |
} | |
}), h.each({ | |
scrollLeft: "pageXOffset", | |
scrollTop: "pageYOffset" | |
}, function(e, t) { | |
var n = /Y/.test(t); | |
h.fn[e] = function(r) { | |
return $(this, function(e, r, i) { | |
var s = ir(e); | |
if (i === undefined) return s ? t in s ? s[t] : s.document.documentElement[r] : e[r]; | |
s ? s.scrollTo(n ? h(s).scrollLeft() : i, n ? i : h(s).scrollTop()) : e[r] = i | |
}, e, r, arguments.length, null) | |
} | |
}), h.each(["top", "left"], function(e, t) { | |
h.cssHooks[t] = jt(l.pixelPosition, function(e, n) { | |
if (n) return n = Ht(e, t), Dt.test(n) ? h(e).position()[t] + "px" : n | |
}) | |
}), h.each({ | |
Height: "height", | |
Width: "width" | |
}, function(e, t) { | |
h.each({ | |
padding: "inner" + e, | |
content: t, | |
"": "outer" + e | |
}, function(n, r) { | |
h.fn[r] = function(r, i) { | |
var s = arguments.length && (n || typeof r != "boolean"), | |
o = n || (r === !0 || i === !0 ? "margin" : "border"); | |
return $(this, function(t, n, r) { | |
var i; | |
return h.isWindow(t) ? t.document.documentElement["client" + e] : t.nodeType === 9 ? (i = t.documentElement, Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : r === undefined ? h.css(t, n, o) : h.style(t, n, r, o) | |
}, t, s ? r : undefined, s, null) | |
} | |
}) | |
}), h.fn.size = function() { | |
return this.length | |
}, h.fn.andSelf = h.fn.addBack, typeof define == "function" && define.amd && define("jquery", [], function() { | |
return h | |
}); | |
var sr = e.jQuery, | |
or = e.$; | |
return h.noConflict = function(t) { | |
return e.$ === h && (e.$ = or), t && e.jQuery === h && (e.jQuery = sr), h | |
}, typeof t === B && (e.jQuery = e.$ = h), h | |
}); | |
var THREE = { | |
REVISION: "71" | |
}; | |
typeof module == "object" && (module.exports = THREE), Math.sign === undefined && (Math.sign = function(e) { | |
return e < 0 ? -1 : e > 0 ? 1 : +e | |
}), THREE.log = function() { | |
console.log.apply(console, arguments) | |
}, THREE.warn = function() { | |
console.warn.apply(console, arguments) | |
}, THREE.error = function() { | |
console.error.apply(console, arguments) | |
}, THREE.MOUSE = { | |
LEFT: 0, | |
MIDDLE: 1, | |
RIGHT: 2 | |
}, THREE.CullFaceNone = 0, THREE.CullFaceBack = 1, THREE.CullFaceFront = 2, THREE.CullFaceFrontBack = 3, THREE.FrontFaceDirectionCW = 0, THREE.FrontFaceDirectionCCW = 1, THREE.BasicShadowMap = 0, THREE.PCFShadowMap = 1, THREE.PCFSoftShadowMap = 2, THREE.FrontSide = 0, THREE.BackSide = 1, THREE.DoubleSide = 2, THREE.NoShading = 0, THREE.FlatShading = 1, THREE.SmoothShading = 2, THREE.NoColors = 0, THREE.FaceColors = 1, THREE.VertexColors = 2, THREE.NoBlending = 0, THREE.NormalBlending = 1, THREE.AdditiveBlending = 2, THREE.SubtractiveBlending = 3, THREE.MultiplyBlending = 4, THREE.CustomBlending = 5, THREE.AddEquation = 100, THREE.SubtractEquation = 101, THREE.ReverseSubtractEquation = 102, THREE.MinEquation = 103, THREE.MaxEquation = 104, THREE.ZeroFactor = 200, THREE.OneFactor = 201, THREE.SrcColorFactor = 202, THREE.OneMinusSrcColorFactor = 203, THREE.SrcAlphaFactor = 204, THREE.OneMinusSrcAlphaFactor = 205, THREE.DstAlphaFactor = 206, THREE.OneMinusDstAlphaFactor = 207, THREE.DstColorFactor = 208, THREE.OneMinusDstColorFactor = 209, THREE.SrcAlphaSaturateFactor = 210, THREE.MultiplyOperation = 0, THREE.MixOperation = 1, THREE.AddOperation = 2, THREE.UVMapping = 300, THREE.CubeReflectionMapping = 301, THREE.CubeRefractionMapping = 302, THREE.EquirectangularReflectionMapping = 303, THREE.EquirectangularRefractionMapping = 304, THREE.SphericalReflectionMapping = 305, THREE.RepeatWrapping = 1e3, THREE.ClampToEdgeWrapping = 1001, THREE.MirroredRepeatWrapping = 1002, THREE.NearestFilter = 1003, THREE.NearestMipMapNearestFilter = 1004, THREE.NearestMipMapLinearFilter = 1005, THREE.LinearFilter = 1006, THREE.LinearMipMapNearestFilter = 1007, THREE.LinearMipMapLinearFilter = 1008, THREE.UnsignedByteType = 1009, THREE.ByteType = 1010, THREE.ShortType = 1011, THREE.UnsignedShortType = 1012, THREE.IntType = 1013, THREE.UnsignedIntType = 1014, THREE.FloatType = 1015, THREE.HalfFloatType = 1025, THREE.UnsignedShort4444Type = 1016, THREE.UnsignedShort5551Type = 1017, THREE.UnsignedShort565Type = 1018, THREE.AlphaFormat = 1019, THREE.RGBFormat = 1020, THREE.RGBAFormat = 1021, THREE.LuminanceFormat = 1022, THREE.LuminanceAlphaFormat = 1023, THREE.RGBEFormat = THREE.RGBAFormat, THREE.RGB_S3TC_DXT1_Format = 2001, THREE.RGBA_S3TC_DXT1_Format = 2002, THREE.RGBA_S3TC_DXT3_Format = 2003, THREE.RGBA_S3TC_DXT5_Format = 2004, THREE.RGB_PVRTC_4BPPV1_Format = 2100, THREE.RGB_PVRTC_2BPPV1_Format = 2101, THREE.RGBA_PVRTC_4BPPV1_Format = 2102, THREE.RGBA_PVRTC_2BPPV1_Format = 2103, THREE.Projector = function() { | |
THREE.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js."), this.projectVector = function(e, t) { | |
THREE.warn("THREE.Projector: .projectVector() is now vector.project()."), e.project(t) | |
}, this.unprojectVector = function(e, t) { | |
THREE.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."), e.unproject(t) | |
}, this.pickingRay = function(e, t) { | |
THREE.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().") | |
} | |
}, THREE.CanvasRenderer = function() { | |
THREE.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js"), this.domElement = document.createElement("canvas"), this.clear = function() {}, this.render = function() {}, this.setClearColor = function() {}, this.setSize = function() {} | |
}; | |
var empties = ["ImmediateRenderObject", "LineBasicMaterial", "LineDashedMaterial", "MeshLambertMaterial", "MeshPhongMaterial", "MeshDepthMaterial", "MeshNormalMaterial", "MeshFaceMaterial", "PointCloudMaterial", "ShaderMaterial", "RawShaderMaterial", "SpriteMaterial", "CompressedTexture", "DataTexture", "Fog", "FogExp2", "WebGLRenderTargetCube", "Bone", "Skeleton", "SkinnedMesh", "MorphAnimMesh", "LOD", "Sprite", "LensFlare", "Light", "AmbientLight", "AreaLight", "DirectionalLight", "HemisphereLight", "PointLight", "SpotLight", "LensFlarePlugin", "ShadowMapPlugin", "BinaryTextureLoader", "CompressedTextureLoader", "PointCloud", "SpritePlugin", "CubeCamera", "MeshBasicMaterial"]; | |
for (var e = 0; e < empties.length; e++) THREE[empties[e]] = function() {}; | |
THREE.Color = function(e) { | |
return arguments.length === 3 ? this.setRGB(arguments[0], arguments[1], arguments[2]) : this.set(e) | |
}, THREE.Color.prototype = { | |
constructor: THREE.Color, | |
r: 1, | |
g: 1, | |
b: 1, | |
set: function(e) { | |
return e instanceof THREE.Color ? this.copy(e) : typeof e == "number" ? this.setHex(e) : typeof e == "string" && this.setStyle(e), this | |
}, | |
setHex: function(e) { | |
return e = Math.floor(e), this.r = (e >> 16 & 255) / 255, this.g = (e >> 8 & 255) / 255, this.b = (e & 255) / 255, this | |
}, | |
setRGB: function(e, t, n) { | |
return this.r = e, this.g = t, this.b = n, this | |
}, | |
setHSL: function(e, t, n) { | |
if (t === 0) this.r = this.g = this.b = n; | |
else { | |
var r = function(e, t, n) { | |
return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? e + (t - e) * 6 * n : n < .5 ? t : n < 2 / 3 ? e + (t - e) * 6 * (2 / 3 - n) : e | |
}, | |
i = n <= .5 ? n * (1 + t) : n + t - n * t, | |
s = 2 * n - i; | |
this.r = r(s, i, e + 1 / 3), this.g = r(s, i, e), this.b = r(s, i, e - 1 / 3) | |
} | |
return this | |
}, | |
setStyle: function(e) { | |
if (/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.test(e)) { | |
var t = /^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.exec(e); | |
return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, this | |
} | |
if (/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.test(e)) { | |
var t = /^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.exec(e); | |
return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, this | |
} | |
if (/^\#([0-9a-f]{6})$/i.test(e)) { | |
var t = /^\#([0-9a-f]{6})$/i.exec(e); | |
return this.setHex(parseInt(t[1], 16)), this | |
} | |
if (/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(e)) { | |
var t = /^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(e); | |
return this.setHex(parseInt(t[1] + t[1] + t[2] + t[2] + t[3] + t[3], 16)), this | |
} | |
if (/^(\w+)$/i.test(e)) return this.setHex(THREE.ColorKeywords[e]), this | |
}, | |
copy: function(e) { | |
return this.r = e.r, this.g = e.g, this.b = e.b, this | |
}, | |
copyGammaToLinear: function(e, t) { | |
return t === undefined && (t = 2), this.r = Math.pow(e.r, t), this.g = Math.pow(e.g, t), this.b = Math.pow(e.b, t), this | |
}, | |
copyLinearToGamma: function(e, t) { | |
t === undefined && (t = 2); | |
var n = t > 0 ? 1 / t : 1; | |
return this.r = Math.pow(e.r, n), this.g = Math.pow(e.g, n), this.b = Math.pow(e.b, n), this | |
}, | |
convertGammaToLinear: function() { | |
var e = this.r, | |
t = this.g, | |
n = this.b; | |
return this.r = e * e, this.g = t * t, this.b = n * n, this | |
}, | |
convertLinearToGamma: function() { | |
return this.r = Math.sqrt(this.r), this.g = Math.sqrt(this.g), this.b = Math.sqrt(this.b), this | |
}, | |
getHex: function() { | |
return this.r * 255 << 16 ^ this.g * 255 << 8 ^ this.b * 255 << 0 | |
}, | |
getHexString: function() { | |
return ("000000" + this.getHex().toString(16)).slice(-6) | |
}, | |
getHSL: function(e) { | |
var t = e || { | |
h: 0, | |
s: 0, | |
l: 0 | |
}, | |
n = this.r, | |
r = this.g, | |
i = this.b, | |
s = Math.max(n, r, i), | |
o = Math.min(n, r, i), | |
u, a, f = (o + s) / 2; | |
if (o === s) u = 0, a = 0; | |
else { | |
var l = s - o; | |
a = f <= .5 ? l / (s + o) : l / (2 - s - o); | |
switch (s) { | |
case n: | |
u = (r - i) / l + (r < i ? 6 : 0); | |
break; | |
case r: | |
u = (i - n) / l + 2; | |
break; | |
case i: | |
u = (n - r) / l + 4 | |
} | |
u /= 6 | |
} | |
return t.h = u, t.s = a, t.l = f, t | |
}, | |
getStyle: function() { | |
return "rgb(" + (this.r * 255 | 0) + "," + (this.g * 255 | 0) + "," + (this.b * 255 | 0) + ")" | |
}, | |
offsetHSL: function(e, t, n) { | |
var r = this.getHSL(); | |
return r.h += e, r.s += t, r.l += n, this.setHSL(r.h, r.s, r.l), this | |
}, | |
add: function(e) { | |
return this.r += e.r, this.g += e.g, this.b += e.b, this | |
}, | |
addColors: function(e, t) { | |
return this.r = e.r + t.r, this.g = e.g + t.g, this.b = e.b + t.b, this | |
}, | |
addScalar: function(e) { | |
return this.r += e, this.g += e, this.b += e, this | |
}, | |
multiply: function(e) { | |
return this.r *= e.r, this.g *= e.g, this.b *= e.b, this | |
}, | |
multiplyScalar: function(e) { | |
return this.r *= e, this.g *= e, this.b *= e, this | |
}, | |
lerp: function(e, t) { | |
return this.r += (e.r - this.r) * t, this.g += (e.g - this.g) * t, this.b += (e.b - this.b) * t, this | |
}, | |
equals: function(e) { | |
return e.r === this.r && e.g === this.g && e.b === this.b | |
}, | |
fromArray: function(e) { | |
return this.r = e[0], this.g = e[1], this.b = e[2], this | |
}, | |
toArray: function(e, t) { | |
return e === undefined && (e = []), t === undefined && (t = 0), e[t] = this.r, e[t + 1] = this.g, e[t + 2] = this.b, e | |
}, | |
clone: function() { | |
return (new THREE.Color).setRGB(this.r, this.g, this.b) | |
} | |
}, THREE.ColorKeywords = { | |
aliceblue: 15792383, | |
antiquewhite: 16444375, | |
aqua: 65535, | |
aquamarine: 8388564, | |
azure: 15794175, | |
beige: 16119260, | |
bisque: 16770244, | |
black: 0, | |
blanchedalmond: 16772045, | |
blue: 255, | |
blueviolet: 9055202, | |
brown: 10824234, | |
burlywood: 14596231, | |
cadetblue: 6266528, | |
chartreuse: 8388352, | |
chocolate: 13789470, | |
coral: 16744272, | |
cornflowerblue: 6591981, | |
cornsilk: 16775388, | |
crimson: 14423100, | |
cyan: 65535, | |
darkblue: 139, | |
darkcyan: 35723, | |
darkgoldenrod: 12092939, | |
darkgray: 11119017, | |
darkgreen: 25600, | |
darkgrey: 11119017, | |
darkkhaki: 12433259, | |
darkmagenta: 9109643, | |
darkolivegreen: 5597999, | |
darkorange: 16747520, | |
darkorchid: 10040012, | |
darkred: 9109504, | |
darksalmon: 15308410, | |
darkseagreen: 9419919, | |
darkslateblue: 4734347, | |
darkslategray: 3100495, | |
darkslategrey: 3100495, | |
darkturquoise: 52945, | |
darkviolet: 9699539, | |
deeppink: 16716947, | |
deepskyblue: 49151, | |
dimgray: 6908265, | |
dimgrey: 6908265, | |
dodgerblue: 2003199, | |
firebrick: 11674146, | |
floralwhite: 16775920, | |
forestgreen: 2263842, | |
fuchsia: 16711935, | |
gainsboro: 14474460, | |
ghostwhite: 16316671, | |
gold: 16766720, | |
goldenrod: 14329120, | |
gray: 8421504, | |
green: 32768, | |
greenyellow: 11403055, | |
grey: 8421504, | |
honeydew: 15794160, | |
hotpink: 16738740, | |
indianred: 13458524, | |
indigo: 4915330, | |
ivory: 16777200, | |
khaki: 15787660, | |
lavender: 15132410, | |
lavenderblush: 16773365, | |
lawngreen: 8190976, | |
lemonchiffon: 16775885, | |
lightblue: 11393254, | |
lightcoral: 15761536, | |
lightcyan: 14745599, | |
lightgoldenrodyellow: 16448210, | |
lightgray: 13882323, | |
lightgreen: 9498256, | |
lightgrey: 13882323, | |
lightpink: 16758465, | |
lightsalmon: 16752762, | |
lightseagreen: 2142890, | |
lightskyblue: 8900346, | |
lightslategray: 7833753, | |
lightslategrey: 7833753, | |
lightsteelblue: 11584734, | |
lightyellow: 16777184, | |
lime: 65280, | |
limegreen: 3329330, | |
linen: 16445670, | |
magenta: 16711935, | |
maroon: 8388608, | |
mediumaquamarine: 6737322, | |
mediumblue: 205, | |
mediumorchid: 12211667, | |
mediumpurple: 9662683, | |
mediumseagreen: 3978097, | |
mediumslateblue: 8087790, | |
mediumspringgreen: 64154, | |
mediumturquoise: 4772300, | |
mediumvioletred: 13047173, | |
midnightblue: 1644912, | |
mintcream: 16121850, | |
mistyrose: 16770273, | |
moccasin: 16770229, | |
navajowhite: 16768685, | |
navy: 128, | |
oldlace: 16643558, | |
olive: 8421376, | |
olivedrab: 7048739, | |
orange: 16753920, | |
orangered: 16729344, | |
orchid: 14315734, | |
palegoldenrod: 15657130, | |
palegreen: 10025880, | |
paleturquoise: 11529966, | |
palevioletred: 14381203, | |
papayawhip: 16773077, | |
peachpuff: 16767673, | |
peru: 13468991, | |
pink: 16761035, | |
plum: 14524637, | |
powderblue: 11591910, | |
purple: 8388736, | |
red: 16711680, | |
rosybrown: 12357519, | |
royalblue: 4286945, | |
saddlebrown: 9127187, | |
salmon: 16416882, | |
sandybrown: 16032864, | |
seagreen: 3050327, | |
seashell: 16774638, | |
sienna: 10506797, | |
silver: 12632256, | |
skyblue: 8900331, | |
slateblue: 6970061, | |
slategray: 7372944, | |
slategrey: 7372944, | |
snow: 16775930, | |
springgreen: 65407, | |
steelblue: 4620980, | |
tan: 13808780, | |
teal: 32896, | |
thistle: 14204888, | |
tomato: 16737095, | |
turquoise: 4251856, | |
violet: 15631086, | |
wheat: 16113331, | |
white: 16777215, | |
whitesmoke: 16119285, | |
yellow: 16776960, | |
yellowgreen: 10145074 | |
}, THREE.Quaternion = function(e, t, n, r) { | |
this._x = e || 0, this._y = t || 0, this._z = n || 0, this._w = r !== undefined ? r : 1 | |
}, THREE.Quaternion.prototype = { | |
constructor: THREE.Quaternion, | |
_x: 0, | |
_y: 0, | |
_z: 0, | |
_w: 0, | |
get x() { | |
return this._x | |
}, | |
set x(e) { | |
this._x = e, this.onChangeCallback() | |
}, | |
get y() { | |
return this._y | |
}, | |
set y(e) { | |
this._y = e, this.onChangeCallback() | |
}, | |
get z() { | |
return this._z | |
}, | |
set z(e) { | |
this._z = e, this.onChangeCallback() | |
}, | |
get w() { | |
return this._w | |
}, | |
set w(e) { | |
this._w = e, this.onChangeCallback() | |
}, | |
set: function(e, t, n, r) { | |
return this._x = e, this._y = t, this._z = n, this._w = r, this.onChangeCallback(), this | |
}, | |
copy: function(e) { | |
return this._x = e.x, this._y = e.y, this._z = e.z, this._w = e.w, this.onChangeCallback(), this | |
}, | |
setFromEuler: function(e, t) { | |
if (e instanceof THREE.Euler == 0) throw new Error("THREE.Quaternion: .setFromEuler() now expects a Euler rotation rather than a Vector3 and order."); | |
var n = Math.cos(e._x / 2), | |
r = Math.cos(e._y / 2), | |
i = Math.cos(e._z / 2), | |
s = Math.sin(e._x / 2), | |
o = Math.sin(e._y / 2), | |
u = Math.sin(e._z / 2); | |
return e.order === "XYZ" ? (this._x = s * r * i + n * o * u, this._y = n * o * i - s * r * u, this._z = n * r * u + s * o * i, this._w = n * r * i - s * o * u) : e.order === "YXZ" ? (this._x = s * r * i + n * o * u, this._y = n * o * i - s * r * u, this._z = n * r * u - s * o * i, this._w = n * r * i + s * o * u) : e.order === "ZXY" ? (this._x = s * r * i - n * o * u, this._y = n * o * i + s * r * u, this._z = n * r * u + s * o * i, this._w = n * r * i - s * o * u) : e.order === "ZYX" ? (this._x = s * r * i - n * o * u, this._y = n * o * i + s * r * u, this._z = n * r * u - s * o * i, this._w = n * r * i + s * o * u) : e.order === "YZX" ? (this._x = s * r * i + n * o * u, this._y = n * o * i + s * r * u, this._z = n * r * u - s * o * i, this._w = n * r * i - s * o * u) : e.order === "XZY" && (this._x = s * r * i - n * o * u, this._y = n * o * i - s * r * u, this._z = n * r * u + s * o * i, this._w = n * r * i + s * o * u), t !== !1 && this.onChangeCallback(), this | |
}, | |
setFromAxisAngle: function(e, t) { | |
var n = t / 2, | |
r = Math.sin(n); | |
return this._x = e.x * r, this._y = e.y * r, this._z = e.z * r, this._w = Math.cos(n), this.onChangeCallback(), this | |
}, | |
setFromRotationMatrix: function(e) { | |
var t = e.elements, | |
n = t[0], | |
r = t[4], | |
i = t[8], | |
s = t[1], | |
o = t[5], | |
u = t[9], | |
a = t[2], | |
f = t[6], | |
l = t[10], | |
c = n + o + l, | |
h; | |
return c > 0 ? (h = .5 / Math.sqrt(c + 1), this._w = .25 / h, this._x = (f - u) * h, this._y = (i - a) * h, this._z = (s - r) * h) : n > o && n > l ? (h = 2 * Math.sqrt(1 + n - o - l), this._w = (f - u) / h, this._x = .25 * h, this._y = (r + s) / h, this._z = (i + a) / h) : o > l ? (h = 2 * Math.sqrt(1 + o - n - l), this._w = (i - a) / h, this._x = (r + s) / h, this._y = .25 * h, this._z = (u + f) / h) : (h = 2 * Math.sqrt(1 + l - n - o), this._w = (s - r) / h, this._x = (i + a) / h, this._y = (u + f) / h, this._z = .25 * h), this.onChangeCallback(), this | |
}, | |
setFromUnitVectors: function() { | |
var e, t, n = 1e-6; | |
return function(i, s) { | |
return e === undefined && (e = new THREE.Vector3), t = i.dot(s) + 1, t < n ? (t = 0, Math.abs(i.x) > Math.abs(i.z) ? e.set(-i.y, i.x, 0) : e.set(0, -i.z, i.y)) : e.crossVectors(i, s), this._x = e.x, this._y = e.y, this._z = e.z, this._w = t, this.normalize(), this | |
} | |
}(), | |
inverse: function() { | |
return this.conjugate().normalize(), this | |
}, | |
conjugate: function() { | |
return this._x *= -1, this._y *= -1, this._z *= -1, this.onChangeCallback(), this | |
}, | |
dot: function(e) { | |
return this._x * e._x + this._y * e._y + this._z * e._z + this._w * e._w | |
}, | |
lengthSq: function() { | |
return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w | |
}, | |
length: function() { | |
return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) | |
}, | |
normalize: function() { | |
var e = this.length(); | |
return e === 0 ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (e = 1 / e, this._x = this._x * e, this._y = this._y * e, this._z = this._z * e, this._w = this._w * e), this.onChangeCallback(), this | |
}, | |
multiply: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(e, t)) : this.multiplyQuaternions(this, e) | |
}, | |
multiplyQuaternions: function(e, t) { | |
var n = e._x, | |
r = e._y, | |
i = e._z, | |
s = e._w, | |
o = t._x, | |
u = t._y, | |
a = t._z, | |
f = t._w; | |
return this._x = n * f + s * o + r * a - i * u, this._y = r * f + s * u + i * o - n * a, this._z = i * f + s * a + n * u - r * o, this._w = s * f - n * o - r * u - i * a, this.onChangeCallback(), this | |
}, | |
multiplyVector3: function(e) { | |
return THREE.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), e.applyQuaternion(this) | |
}, | |
slerp: function(e, t) { | |
if (t === 0) return this; | |
if (t === 1) return this.copy(e); | |
var n = this._x, | |
r = this._y, | |
i = this._z, | |
s = this._w, | |
o = s * e._w + n * e._x + r * e._y + i * e._z; | |
o < 0 ? (this._w = -e._w, this._x = -e._x, this._y = -e._y, this._z = -e._z, o = -o) : this.copy(e); | |
if (o >= 1) return this._w = s, this._x = n, this._y = r, this._z = i, this; | |
var u = Math.acos(o), | |
a = Math.sqrt(1 - o * o); | |
if (Math.abs(a) < .001) return this._w = .5 * (s + this._w), this._x = .5 * (n + this._x), this._y = .5 * (r + this._y), this._z = .5 * (i + this._z), this; | |
var f = Math.sin((1 - t) * u) / a, | |
l = Math.sin(t * u) / a; | |
return this._w = s * f + this._w * l, this._x = n * f + this._x * l, this._y = r * f + this._y * l, this._z = i * f + this._z * l, this.onChangeCallback(), this | |
}, | |
equals: function(e) { | |
return e._x === this._x && e._y === this._y && e._z === this._z && e._w === this._w | |
}, | |
fromArray: function(e, t) { | |
return t === undefined && (t = 0), this._x = e[t], this._y = e[t + 1], this._z = e[t + 2], this._w = e[t + 3], this.onChangeCallback(), this | |
}, | |
toArray: function(e, t) { | |
return e === undefined && (e = []), t === undefined && (t = 0), e[t] = this._x, e[t + 1] = this._y, e[t + 2] = this._z, e[t + 3] = this._w, e | |
}, | |
onChange: function(e) { | |
return this.onChangeCallback = e, this | |
}, | |
onChangeCallback: function() {}, | |
clone: function() { | |
return new THREE.Quaternion(this._x, this._y, this._z, this._w) | |
} | |
}, THREE.Quaternion.slerp = function(e, t, n, r) { | |
return n.copy(e).slerp(t, r) | |
}, THREE.Vector2 = function(e, t) { | |
this.x = e || 0, this.y = t || 0 | |
}, THREE.Vector2.prototype = { | |
constructor: THREE.Vector2, | |
set: function(e, t) { | |
return this.x = e, this.y = t, this | |
}, | |
setX: function(e) { | |
return this.x = e, this | |
}, | |
setY: function(e) { | |
return this.y = e, this | |
}, | |
setComponent: function(e, t) { | |
switch (e) { | |
case 0: | |
this.x = t; | |
break; | |
case 1: | |
this.y = t; | |
break; | |
default: | |
throw new Error("index is out of range: " + e) | |
} | |
}, | |
getComponent: function(e) { | |
switch (e) { | |
case 0: | |
return this.x; | |
case 1: | |
return this.y; | |
default: | |
throw new Error("index is out of range: " + e) | |
} | |
}, | |
copy: function(e) { | |
return this.x = e.x, this.y = e.y, this | |
}, | |
add: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(e, t)) : (this.x += e.x, this.y += e.y, this) | |
}, | |
addScalar: function(e) { | |
return this.x += e, this.y += e, this | |
}, | |
addVectors: function(e, t) { | |
return this.x = e.x + t.x, this.y = e.y + t.y, this | |
}, | |
sub: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(e, t)) : (this.x -= e.x, this.y -= e.y, this) | |
}, | |
subScalar: function(e) { | |
return this.x -= e, this.y -= e, this | |
}, | |
subVectors: function(e, t) { | |
return this.x = e.x - t.x, this.y = e.y - t.y, this | |
}, | |
multiply: function(e) { | |
return this.x *= e.x, this.y *= e.y, this | |
}, | |
multiplyScalar: function(e) { | |
return this.x *= e, this.y *= e, this | |
}, | |
divide: function(e) { | |
return this.x /= e.x, this.y /= e.y, this | |
}, | |
divideScalar: function(e) { | |
if (e !== 0) { | |
var t = 1 / e; | |
this.x *= t, this.y *= t | |
} else this.x = 0, this.y = 0; | |
return this | |
}, | |
min: function(e) { | |
return this.x > e.x && (this.x = e.x), this.y > e.y && (this.y = e.y), this | |
}, | |
max: function(e) { | |
return this.x < e.x && (this.x = e.x), this.y < e.y && (this.y = e.y), this | |
}, | |
clamp: function(e, t) { | |
return this.x < e.x ? this.x = e.x : this.x > t.x && (this.x = t.x), this.y < e.y ? this.y = e.y : this.y > t.y && (this.y = t.y), this | |
}, | |
clampScalar: function() { | |
var e, t; | |
return function(n, r) { | |
return e === undefined && (e = new THREE.Vector2, t = new THREE.Vector2), e.set(n, n), t.set(r, r), this.clamp(e, t) | |
} | |
}(), | |
floor: function() { | |
return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this | |
}, | |
ceil: function() { | |
return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this | |
}, | |
round: function() { | |
return this.x = Math.round(this.x), this.y = Math.round(this.y), this | |
}, | |
roundToZero: function() { | |
return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this | |
}, | |
negate: function() { | |
return this.x = -this.x, this.y = -this.y, this | |
}, | |
dot: function(e) { | |
return this.x * e.x + this.y * e.y | |
}, | |
lengthSq: function() { | |
return this.x * this.x + this.y * this.y | |
}, | |
length: function() { | |
return Math.sqrt(this.x * this.x + this.y * this.y) | |
}, | |
normalize: function() { | |
return this.divideScalar(this.length()) | |
}, | |
distanceTo: function(e) { | |
return Math.sqrt(this.distanceToSquared(e)) | |
}, | |
distanceToSquared: function(e) { | |
var t = this.x - e.x, | |
n = this.y - e.y; | |
return t * t + n * n | |
}, | |
setLength: function(e) { | |
var t = this.length(); | |
return t !== 0 && e !== t && this.multiplyScalar(e / t), this | |
}, | |
lerp: function(e, t) { | |
return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this | |
}, | |
lerpVectors: function(e, t, n) { | |
return this.subVectors(t, e).multiplyScalar(n).add(e), this | |
}, | |
equals: function(e) { | |
return e.x === this.x && e.y === this.y | |
}, | |
fromArray: function(e, t) { | |
return t === undefined && (t = 0), this.x = e[t], this.y = e[t + 1], this | |
}, | |
toArray: function(e, t) { | |
return e === undefined && (e = []), t === undefined && (t = 0), e[t] = this.x, e[t + 1] = this.y, e | |
}, | |
fromAttribute: function(e, t, n) { | |
return n === undefined && (n = 0), t = t * e.itemSize + n, this.x = e.array[t], this.y = e.array[t + 1], this | |
}, | |
clone: function() { | |
return new THREE.Vector2(this.x, this.y) | |
} | |
}, THREE.Vector3 = function(e, t, n) { | |
this.x = e || 0, this.y = t || 0, this.z = n || 0 | |
}, THREE.Vector3.prototype = { | |
constructor: THREE.Vector3, | |
set: function(e, t, n) { | |
return this.x = e, this.y = t, this.z = n, this | |
}, | |
setX: function(e) { | |
return this.x = e, this | |
}, | |
setY: function(e) { | |
return this.y = e, this | |
}, | |
setZ: function(e) { | |
return this.z = e, this | |
}, | |
setComponent: function(e, t) { | |
switch (e) { | |
case 0: | |
this.x = t; | |
break; | |
case 1: | |
this.y = t; | |
break; | |
case 2: | |
this.z = t; | |
break; | |
default: | |
throw new Error("index is out of range: " + e) | |
} | |
}, | |
getComponent: function(e) { | |
switch (e) { | |
case 0: | |
return this.x; | |
case 1: | |
return this.y; | |
case 2: | |
return this.z; | |
default: | |
throw new Error("index is out of range: " + e) | |
} | |
}, | |
copy: function(e) { | |
return this.x = e.x, this.y = e.y, this.z = e.z, this | |
}, | |
add: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(e, t)) : (this.x += e.x, this.y += e.y, this.z += e.z, this) | |
}, | |
addScalar: function(e) { | |
return this.x += e, this.y += e, this.z += e, this | |
}, | |
addVectors: function(e, t) { | |
return this.x = e.x + t.x, this.y = e.y + t.y, this.z = e.z + t.z, this | |
}, | |
sub: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(e, t)) : (this.x -= e.x, this.y -= e.y, this.z -= e.z, this) | |
}, | |
subScalar: function(e) { | |
return this.x -= e, this.y -= e, this.z -= e, this | |
}, | |
subVectors: function(e, t) { | |
return this.x = e.x - t.x, this.y = e.y - t.y, this.z = e.z - t.z, this | |
}, | |
multiply: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(e, t)) : (this.x *= e.x, this.y *= e.y, this.z *= e.z, this) | |
}, | |
multiplyScalar: function(e) { | |
return this.x *= e, this.y *= e, this.z *= e, this | |
}, | |
multiplyVectors: function(e, t) { | |
return this.x = e.x * t.x, this.y = e.y * t.y, this.z = e.z * t.z, this | |
}, | |
applyEuler: function() { | |
var e; | |
return function(t) { | |
return t instanceof THREE.Euler == 0 && THREE.error("THREE.Vector3: .applyEuler() now expects a Euler rotation rather than a Vector3 and order."), e === undefined && (e = new THREE.Quaternion), this.applyQuaternion(e.setFromEuler(t)), this | |
} | |
}(), | |
applyAxisAngle: function() { | |
var e; | |
return function(t, n) { | |
return e === undefined && (e = new THREE.Quaternion), this.applyQuaternion(e.setFromAxisAngle(t, n)), this | |
} | |
}(), | |
applyMatrix3: function(e) { | |
var t = this.x, | |
n = this.y, | |
r = this.z, | |
i = e.elements; | |
return this.x = i[0] * t + i[3] * n + i[6] * r, this.y = i[1] * t + i[4] * n + i[7] * r, this.z = i[2] * t + i[5] * n + i[8] * r, this | |
}, | |
applyMatrix4: function(e) { | |
var t = this.x, | |
n = this.y, | |
r = this.z, | |
i = e.elements; | |
return this.x = i[0] * t + i[4] * n + i[8] * r + i[12], this.y = i[1] * t + i[5] * n + i[9] * r + i[13], this.z = i[2] * t + i[6] * n + i[10] * r + i[14], this | |
}, | |
applyProjection: function(e) { | |
var t = this.x, | |
n = this.y, | |
r = this.z, | |
i = e.elements, | |
s = 1 / (i[3] * t + i[7] * n + i[11] * r + i[15]); | |
return this.x = (i[0] * t + i[4] * n + i[8] * r + i[12]) * s, this.y = (i[1] * t + i[5] * n + i[9] * r + i[13]) * s, this.z = (i[2] * t + i[6] * n + i[10] * r + i[14]) * s, this | |
}, | |
applyQuaternion: function(e) { | |
var t = this.x, | |
n = this.y, | |
r = this.z, | |
i = e.x, | |
s = e.y, | |
o = e.z, | |
u = e.w, | |
a = u * t + s * r - o * n, | |
f = u * n + o * t - i * r, | |
l = u * r + i * n - s * t, | |
c = -i * t - s * n - o * r; | |
return this.x = a * u + c * -i + f * -o - l * -s, this.y = f * u + c * -s + l * -i - a * -o, this.z = l * u + c * -o + a * -s - f * -i, this | |
}, | |
project: function() { | |
var e; | |
return function(t) { | |
return e === undefined && (e = new THREE.Matrix4), e.multiplyMatrices(t.projectionMatrix, e.getInverse(t.matrixWorld)), this.applyProjection(e) | |
} | |
}(), | |
unproject: function() { | |
var e; | |
return function(t) { | |
return e === undefined && (e = new THREE.Matrix4), e.multiplyMatrices(t.matrixWorld, e.getInverse(t.projectionMatrix)), this.applyProjection(e) | |
} | |
}(), | |
transformDirection: function(e) { | |
var t = this.x, | |
n = this.y, | |
r = this.z, | |
i = e.elements; | |
return this.x = i[0] * t + i[4] * n + i[8] * r, this.y = i[1] * t + i[5] * n + i[9] * r, this.z = i[2] * t + i[6] * n + i[10] * r, this.normalize(), this | |
}, | |
divide: function(e) { | |
return this.x /= e.x, this.y /= e.y, this.z /= e.z, this | |
}, | |
divideScalar: function(e) { | |
if (e !== 0) { | |
var t = 1 / e; | |
this.x *= t, this.y *= t, this.z *= t | |
} else this.x = 0, this.y = 0, this.z = 0; | |
return this | |
}, | |
min: function(e) { | |
return this.x > e.x && (this.x = e.x), this.y > e.y && (this.y = e.y), this.z > e.z && (this.z = e.z), this | |
}, | |
max: function(e) { | |
return this.x < e.x && (this.x = e.x), this.y < e.y && (this.y = e.y), this.z < e.z && (this.z = e.z), this | |
}, | |
clamp: function(e, t) { | |
return this.x < e.x ? this.x = e.x : this.x > t.x && (this.x = t.x), this.y < e.y ? this.y = e.y : this.y > t.y && (this.y = t.y), this.z < e.z ? this.z = e.z : this.z > t.z && (this.z = t.z), this | |
}, | |
clampScalar: function() { | |
var e, t; | |
return function(n, r) { | |
return e === undefined && (e = new THREE.Vector3, t = new THREE.Vector3), e.set(n, n, n), t.set(r, r, r), this.clamp(e, t) | |
} | |
}(), | |
floor: function() { | |
return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this | |
}, | |
ceil: function() { | |
return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this | |
}, | |
round: function() { | |
return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this | |
}, | |
roundToZero: function() { | |
return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this | |
}, | |
negate: function() { | |
return this.x = -this.x, this.y = -this.y, this.z = -this.z, this | |
}, | |
dot: function(e) { | |
return this.x * e.x + this.y * e.y + this.z * e.z | |
}, | |
lengthSq: function() { | |
return this.x * this.x + this.y * this.y + this.z * this.z | |
}, | |
length: function() { | |
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) | |
}, | |
lengthManhattan: function() { | |
return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) | |
}, | |
normalize: function() { | |
return this.divideScalar(this.length()) | |
}, | |
setLength: function(e) { | |
var t = this.length(); | |
return t !== 0 && e !== t && this.multiplyScalar(e / t), this | |
}, | |
lerp: function(e, t) { | |
return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this.z += (e.z - this.z) * t, this | |
}, | |
lerpVectors: function(e, t, n) { | |
return this.subVectors(t, e).multiplyScalar(n).add(e), this | |
}, | |
cross: function(e, t) { | |
if (t !== undefined) return THREE.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(e, t); | |
var n = this.x, | |
r = this.y, | |
i = this.z; | |
return this.x = r * e.z - i * e.y, this.y = i * e.x - n * e.z, this.z = n * e.y - r * e.x, this | |
}, | |
crossVectors: function(e, t) { | |
var n = e.x, | |
r = e.y, | |
i = e.z, | |
s = t.x, | |
o = t.y, | |
u = t.z; | |
return this.x = r * u - i * o, this.y = i * s - n * u, this.z = n * o - r * s, this | |
}, | |
projectOnVector: function() { | |
var e, t; | |
return function(n) { | |
return e === undefined && (e = new THREE.Vector3), e.copy(n).normalize(), t = this.dot(e), this.copy(e).multiplyScalar(t) | |
} | |
}(), | |
projectOnPlane: function() { | |
var e; | |
return function(t) { | |
return e === undefined && (e = new THREE.Vector3), e.copy(this).projectOnVector(t), this.sub(e) | |
} | |
}(), | |
reflect: function() { | |
var e; | |
return function(t) { | |
return e === undefined && (e = new THREE.Vector3), this.sub(e.copy(t).multiplyScalar(2 * this.dot(t))) | |
} | |
}(), | |
angleTo: function(e) { | |
var t = this.dot(e) / (this.length() * e.length()); | |
return Math.acos(THREE.Math.clamp(t, -1, 1)) | |
}, | |
distanceTo: function(e) { | |
return Math.sqrt(this.distanceToSquared(e)) | |
}, | |
distanceToSquared: function(e) { | |
var t = this.x - e.x, | |
n = this.y - e.y, | |
r = this.z - e.z; | |
return t * t + n * n + r * r | |
}, | |
setEulerFromRotationMatrix: function(e, t) { | |
THREE.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.") | |
}, | |
setEulerFromQuaternion: function(e, t) { | |
THREE.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.") | |
}, | |
getPositionFromMatrix: function(e) { | |
return THREE.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), this.setFromMatrixPosition(e) | |
}, | |
getScaleFromMatrix: function(e) { | |
return THREE.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), this.setFromMatrixScale(e) | |
}, | |
getColumnFromMatrix: function(e, t) { | |
return THREE.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), this.setFromMatrixColumn(e, t) | |
}, | |
setFromMatrixPosition: function(e) { | |
return this.x = e.elements[12], this.y = e.elements[13], this.z = e.elements[14], this | |
}, | |
setFromMatrixScale: function(e) { | |
var t = this.set(e.elements[0], e.elements[1], e.elements[2]).length(), | |
n = this.set(e.elements[4], e.elements[5], e.elements[6]).length(), | |
r = this.set(e.elements[8], e.elements[9], e.elements[10]).length(); | |
return this.x = t, this.y = n, this.z = r, this | |
}, | |
setFromMatrixColumn: function(e, t) { | |
var n = e * 4, | |
r = t.elements; | |
return this.x = r[n], this.y = r[n + 1], this.z = r[n + 2], this | |
}, | |
equals: function(e) { | |
return e.x === this.x && e.y === this.y && e.z === this.z | |
}, | |
fromArray: function(e, t) { | |
return t === undefined && (t = 0), this.x = e[t], this.y = e[t + 1], this.z = e[t + 2], this | |
}, | |
toArray: function(e, t) { | |
return e === undefined && (e = []), t === undefined && (t = 0), e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, e | |
}, | |
fromAttribute: function(e, t, n) { | |
return n === undefined && (n = 0), t = t * e.itemSize + n, this.x = e.array[t], this.y = e.array[t + 1], this.z = e.array[t + 2], this | |
}, | |
clone: function() { | |
return new THREE.Vector3(this.x, this.y, this.z) | |
} | |
}, THREE.Vector4 = function(e, t, n, r) { | |
this.x = e || 0, this.y = t || 0, this.z = n || 0, this.w = r !== undefined ? r : 1 | |
}, THREE.Vector4.prototype = { | |
constructor: THREE.Vector4, | |
set: function(e, t, n, r) { | |
return this.x = e, this.y = t, this.z = n, this.w = r, this | |
}, | |
setX: function(e) { | |
return this.x = e, this | |
}, | |
setY: function(e) { | |
return this.y = e, this | |
}, | |
setZ: function(e) { | |
return this.z = e, this | |
}, | |
setW: function(e) { | |
return this.w = e, this | |
}, | |
setComponent: function(e, t) { | |
switch (e) { | |
case 0: | |
this.x = t; | |
break; | |
case 1: | |
this.y = t; | |
break; | |
case 2: | |
this.z = t; | |
break; | |
case 3: | |
this.w = t; | |
break; | |
default: | |
throw new Error("index is out of range: " + e) | |
} | |
}, | |
getComponent: function(e) { | |
switch (e) { | |
case 0: | |
return this.x; | |
case 1: | |
return this.y; | |
case 2: | |
return this.z; | |
case 3: | |
return this.w; | |
default: | |
throw new Error("index is out of range: " + e) | |
} | |
}, | |
copy: function(e) { | |
return this.x = e.x, this.y = e.y, this.z = e.z, this.w = e.w !== undefined ? e.w : 1, this | |
}, | |
add: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(e, t)) : (this.x += e.x, this.y += e.y, this.z += e.z, this.w += e.w, this) | |
}, | |
addScalar: function(e) { | |
return this.x += e, this.y += e, this.z += e, this.w += e, this | |
}, | |
addVectors: function(e, t) { | |
return this.x = e.x + t.x, this.y = e.y + t.y, this.z = e.z + t.z, this.w = e.w + t.w, this | |
}, | |
sub: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(e, t)) : (this.x -= e.x, this.y -= e.y, this.z -= e.z, this.w -= e.w, this) | |
}, | |
subScalar: function(e) { | |
return this.x -= e, this.y -= e, this.z -= e, this.w -= e, this | |
}, | |
subVectors: function(e, t) { | |
return this.x = e.x - t.x, this.y = e.y - t.y, this.z = e.z - t.z, this.w = e.w - t.w, this | |
}, | |
multiplyScalar: function(e) { | |
return this.x *= e, this.y *= e, this.z *= e, this.w *= e, this | |
}, | |
applyMatrix4: function(e) { | |
var t = this.x, | |
n = this.y, | |
r = this.z, | |
i = this.w, | |
s = e.elements; | |
return this.x = s[0] * t + s[4] * n + s[8] * r + s[12] * i, this.y = s[1] * t + s[5] * n + s[9] * r + s[13] * i, this.z = s[2] * t + s[6] * n + s[10] * r + s[14] * i, this.w = s[3] * t + s[7] * n + s[11] * r + s[15] * i, this | |
}, | |
divideScalar: function(e) { | |
if (e !== 0) { | |
var t = 1 / e; | |
this.x *= t, this.y *= t, this.z *= t, this.w *= t | |
} else this.x = 0, this.y = 0, this.z = 0, this.w = 1; | |
return this | |
}, | |
setAxisAngleFromQuaternion: function(e) { | |
this.w = 2 * Math.acos(e.w); | |
var t = Math.sqrt(1 - e.w * e.w); | |
return t < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = e.x / t, this.y = e.y / t, this.z = e.z / t), this | |
}, | |
setAxisAngleFromRotationMatrix: function(e) { | |
var t, n, r, i, s = .01, | |
o = .1, | |
u = e.elements, | |
a = u[0], | |
f = u[4], | |
l = u[8], | |
c = u[1], | |
h = u[5], | |
p = u[9], | |
d = u[2], | |
v = u[6], | |
m = u[10]; | |
if (Math.abs(f - c) < s && Math.abs(l - d) < s && Math.abs(p - v) < s) { | |
if (Math.abs(f + c) < o && Math.abs(l + d) < o && Math.abs(p + v) < o && Math.abs(a + h + m - 3) < o) return this.set(1, 0, 0, 0), this; | |
t = Math.PI; | |
var g = (a + 1) / 2, | |
y = (h + 1) / 2, | |
b = (m + 1) / 2, | |
w = (f + c) / 4, | |
E = (l + d) / 4, | |
S = (p + v) / 4; | |
return g > y && g > b ? g < s ? (n = 0, r = .707106781, i = .707106781) : (n = Math.sqrt(g), r = w / n, i = E / n) : y > b ? y < s ? (n = .707106781, r = 0, i = .707106781) : (r = Math.sqrt(y), n = w / r, i = S / r) : b < s ? (n = .707106781, r = .707106781, i = 0) : (i = Math.sqrt(b), n = E / i, r = S / i), this.set(n, r, i, t), this | |
} | |
var x = Math.sqrt((v - p) * (v - p) + (l - d) * (l - d) + (c - f) * (c - f)); | |
return Math.abs(x) < .001 && (x = 1), this.x = (v - p) / x, this.y = (l - d) / x, this.z = (c - f) / x, this.w = Math.acos((a + h + m - 1) / 2), this | |
}, | |
min: function(e) { | |
return this.x > e.x && (this.x = e.x), this.y > e.y && (this.y = e.y), this.z > e.z && (this.z = e.z), this.w > e.w && (this.w = e.w), this | |
}, | |
max: function(e) { | |
return this.x < e.x && (this.x = e.x), this.y < e.y && (this.y = e.y), this.z < e.z && (this.z = e.z), this.w < e.w && (this.w = e.w), this | |
}, | |
clamp: function(e, t) { | |
return this.x < e.x ? this.x = e.x : this.x > t.x && (this.x = t.x), this.y < e.y ? this.y = e.y : this.y > t.y && (this.y = t.y), this.z < e.z ? this.z = e.z : this.z > t.z && (this.z = t.z), this.w < e.w ? this.w = e.w : this.w > t.w && (this.w = t.w), this | |
}, | |
clampScalar: function() { | |
var e, t; | |
return function(n, r) { | |
return e === undefined && (e = new THREE.Vector4, t = new THREE.Vector4), e.set(n, n, n, n), t.set(r, r, r, r), this.clamp(e, t) | |
} | |
}(), | |
floor: function() { | |
return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this | |
}, | |
ceil: function() { | |
return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this | |
}, | |
round: function() { | |
return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this | |
}, | |
roundToZero: function() { | |
return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w), this | |
}, | |
negate: function() { | |
return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this | |
}, | |
dot: function(e) { | |
return this.x * e.x + this.y * e.y + this.z * e.z + this.w * e.w | |
}, | |
lengthSq: function() { | |
return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w | |
}, | |
length: function() { | |
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) | |
}, | |
lengthManhattan: function() { | |
return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) | |
}, | |
normalize: function() { | |
return this.divideScalar(this.length()) | |
}, | |
setLength: function(e) { | |
var t = this.length(); | |
return t !== 0 && e !== t && this.multiplyScalar(e / t), this | |
}, | |
lerp: function(e, t) { | |
return this.x += (e.x - this.x) * t, this.y += (e.y - this.y) * t, this.z += (e.z - this.z) * t, this.w += (e.w - this.w) * t, this | |
}, | |
lerpVectors: function(e, t, n) { | |
return this.subVectors(t, e).multiplyScalar(n).add(e), this | |
}, | |
equals: function(e) { | |
return e.x === this.x && e.y === this.y && e.z === this.z && e.w === this.w | |
}, | |
fromArray: function(e, t) { | |
return t === undefined && (t = 0), this.x = e[t], this.y = e[t + 1], this.z = e[t + 2], this.w = e[t + 3], this | |
}, | |
toArray: function(e, t) { | |
return e === undefined && (e = []), t === undefined && (t = 0), e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, e[t + 3] = this.w, e | |
}, | |
fromAttribute: function(e, t, n) { | |
return n === undefined && (n = 0), t = t * e.itemSize + n, this.x = e.array[t], this.y = e.array[t + 1], this.z = e.array[t + 2], this.w = e.array[t + 3], this | |
}, | |
clone: function() { | |
return new THREE.Vector4(this.x, this.y, this.z, this.w) | |
} | |
}, THREE.Euler = function(e, t, n, r) { | |
this._x = e || 0, this._y = t || 0, this._z = n || 0, this._order = r || THREE.Euler.DefaultOrder | |
}, THREE.Euler.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"], THREE.Euler.DefaultOrder = "XYZ", THREE.Euler.prototype = { | |
constructor: THREE.Euler, | |
_x: 0, | |
_y: 0, | |
_z: 0, | |
_order: THREE.Euler.DefaultOrder, | |
get x() { | |
return this._x | |
}, | |
set x(e) { | |
this._x = e, this.onChangeCallback() | |
}, | |
get y() { | |
return this._y | |
}, | |
set y(e) { | |
this._y = e, this.onChangeCallback() | |
}, | |
get z() { | |
return this._z | |
}, | |
set z(e) { | |
this._z = e, this.onChangeCallback() | |
}, | |
get order() { | |
return this._order | |
}, | |
set order(e) { | |
this._order = e, this.onChangeCallback() | |
}, | |
set: function(e, t, n, r) { | |
return this._x = e, this._y = t, this._z = n, this._order = r || this._order, this.onChangeCallback(), this | |
}, | |
copy: function(e) { | |
return this._x = e._x, this._y = e._y, this._z = e._z, this._order = e._order, this.onChangeCallback(), this | |
}, | |
setFromRotationMatrix: function(e, t, n) { | |
var r = THREE.Math.clamp, | |
i = e.elements, | |
s = i[0], | |
o = i[4], | |
u = i[8], | |
a = i[1], | |
f = i[5], | |
l = i[9], | |
c = i[2], | |
h = i[6], | |
p = i[10]; | |
return t = t || this._order, t === "XYZ" ? (this._y = Math.asin(r(u, -1, 1)), Math.abs(u) < .99999 ? (this._x = Math.atan2(-l, p), this._z = Math.atan2(-o, s)) : (this._x = Math.atan2(h, f), this._z = 0)) : t === "YXZ" ? (this._x = Math.asin(-r(l, -1, 1)), Math.abs(l) < .99999 ? (this._y = Math.atan2(u, p), this._z = Math.atan2(a, f)) : (this._y = Math.atan2(-c, s), this._z = 0)) : t === "ZXY" ? (this._x = Math.asin(r(h, -1, 1)), Math.abs(h) < .99999 ? (this._y = Math.atan2(-c, p), this._z = Math.atan2(-o, f)) : (this._y = 0, this._z = Math.atan2(a, s))) : t === "ZYX" ? (this._y = Math.asin(-r(c, -1, 1)), Math.abs(c) < .99999 ? (this._x = Math.atan2(h, p), this._z = Math.atan2(a, s)) : (this._x = 0, this._z = Math.atan2(-o, f))) : t === "YZX" ? (this._z = Math.asin(r(a, -1, 1)), Math.abs(a) < .99999 ? (this._x = Math.atan2(-l, f), this._y = Math.atan2(-c, s)) : (this._x = 0, this._y = Math.atan2(u, p))) : t === "XZY" ? (this._z = Math.asin(-r(o, -1, 1)), Math.abs(o) < .99999 ? (this._x = Math.atan2(h, f), this._y = Math.atan2(u, s)) : (this._x = Math.atan2(-l, p), this._y = 0)) : THREE.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: " + t), this._order = t, n !== !1 && this.onChangeCallback(), this | |
}, | |
setFromQuaternion: function() { | |
var e; | |
return function(t, n, r) { | |
return e === undefined && (e = new THREE.Matrix4), e.makeRotationFromQuaternion(t), this.setFromRotationMatrix(e, n, r), this | |
} | |
}(), | |
setFromVector3: function(e, t) { | |
return this.set(e.x, e.y, e.z, t || this._order) | |
}, | |
reorder: function() { | |
var e = new THREE.Quaternion; | |
return function(t) { | |
e.setFromEuler(this), this.setFromQuaternion(e, t) | |
} | |
}(), | |
equals: function(e) { | |
return e._x === this._x && e._y === this._y && e._z === this._z && e._order === this._order | |
}, | |
fromArray: function(e) { | |
return this._x = e[0], this._y = e[1], this._z = e[2], e[3] !== undefined && (this._order = e[3]), this.onChangeCallback(), this | |
}, | |
toArray: function(e, t) { | |
return e === undefined && (e = []), t === undefined && (t = 0), e[t] = this._x, e[t + 1] = this._y, e[t + 2] = this._z, e[t + 3] = this._order, e | |
}, | |
toVector3: function(e) { | |
return e ? e.set(this._x, this._y, this._z) : new THREE.Vector3(this._x, this._y, this._z) | |
}, | |
onChange: function(e) { | |
return this.onChangeCallback = e, this | |
}, | |
onChangeCallback: function() {}, | |
clone: function() { | |
return new THREE.Euler(this._x, this._y, this._z, this._order) | |
} | |
}, THREE.Line3 = function(e, t) { | |
this.start = e !== undefined ? e : new THREE.Vector3, this.end = t !== undefined ? t : new THREE.Vector3 | |
}, THREE.Line3.prototype = { | |
constructor: THREE.Line3, | |
set: function(e, t) { | |
return this.start.copy(e), this.end.copy(t), this | |
}, | |
copy: function(e) { | |
return this.start.copy(e.start), this.end.copy(e.end), this | |
}, | |
center: function(e) { | |
var t = e || new THREE.Vector3; | |
return t.addVectors(this.start, this.end).multiplyScalar(.5) | |
}, | |
delta: function(e) { | |
var t = e || new THREE.Vector3; | |
return t.subVectors(this.end, this.start) | |
}, | |
distanceSq: function() { | |
return this.start.distanceToSquared(this.end) | |
}, | |
distance: function() { | |
return this.start.distanceTo(this.end) | |
}, | |
at: function(e, t) { | |
var n = t || new THREE.Vector3; | |
return this.delta(n).multiplyScalar(e).add(this.start) | |
}, | |
closestPointToPointParameter: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3; | |
return function(n, r) { | |
e.subVectors(n, this.start), t.subVectors(this.end, this.start); | |
var i = t.dot(t), | |
s = t.dot(e), | |
o = s / i; | |
return r && (o = THREE.Math.clamp(o, 0, 1)), o | |
} | |
}(), | |
closestPointToPoint: function(e, t, n) { | |
var r = this.closestPointToPointParameter(e, t), | |
i = n || new THREE.Vector3; | |
return this.delta(i).multiplyScalar(r).add(this.start) | |
}, | |
applyMatrix4: function(e) { | |
return this.start.applyMatrix4(e), this.end.applyMatrix4(e), this | |
}, | |
equals: function(e) { | |
return e.start.equals(this.start) && e.end.equals(this.end) | |
}, | |
clone: function() { | |
return (new THREE.Line3).copy(this) | |
} | |
}, THREE.Box2 = function(e, t) { | |
this.min = e !== undefined ? e : new THREE.Vector2(Infinity, Infinity), this.max = t !== undefined ? t : new THREE.Vector2(-Infinity, -Infinity) | |
}, THREE.Box2.prototype = { | |
constructor: THREE.Box2, | |
set: function(e, t) { | |
return this.min.copy(e), this.max.copy(t), this | |
}, | |
setFromPoints: function(e) { | |
this.makeEmpty(); | |
for (var t = 0, n = e.length; t < n; t++) this.expandByPoint(e[t]); | |
return this | |
}, | |
setFromCenterAndSize: function() { | |
var e = new THREE.Vector2; | |
return function(t, n) { | |
var r = e.copy(n).multiplyScalar(.5); | |
return this.min.copy(t).sub(r), this.max.copy(t).add(r), this | |
} | |
}(), | |
copy: function(e) { | |
return this.min.copy(e.min), this.max.copy(e.max), this | |
}, | |
makeEmpty: function() { | |
return this.min.x = this.min.y = Infinity, this.max.x = this.max.y = -Infinity, this | |
}, | |
empty: function() { | |
return this.max.x < this.min.x || this.max.y < this.min.y | |
}, | |
center: function(e) { | |
var t = e || new THREE.Vector2; | |
return t.addVectors(this.min, this.max).multiplyScalar(.5) | |
}, | |
size: function(e) { | |
var t = e || new THREE.Vector2; | |
return t.subVectors(this.max, this.min) | |
}, | |
expandByPoint: function(e) { | |
return this.min.min(e), this.max.max(e), this | |
}, | |
expandByVector: function(e) { | |
return this.min.sub(e), this.max.add(e), this | |
}, | |
expandByScalar: function(e) { | |
return this.min.addScalar(-e), this.max.addScalar(e), this | |
}, | |
containsPoint: function(e) { | |
return e.x < this.min.x || e.x > this.max.x || e.y < this.min.y || e.y > this.max.y ? !1 : !0 | |
}, | |
containsBox: function(e) { | |
return this.min.x <= e.min.x && e.max.x <= this.max.x && this.min.y <= e.min.y && e.max.y <= this.max.y ? !0 : !1 | |
}, | |
getParameter: function(e, t) { | |
var n = t || new THREE.Vector2; | |
return n.set((e.x - this.min.x) / (this.max.x - this.min.x), (e.y - this.min.y) / (this.max.y - this.min.y)) | |
}, | |
isIntersectionBox: function(e) { | |
return e.max.x < this.min.x || e.min.x > this.max.x || e.max.y < this.min.y || e.min.y > this.max.y ? !1 : !0 | |
}, | |
clampPoint: function(e, t) { | |
var n = t || new THREE.Vector2; | |
return n.copy(e).clamp(this.min, this.max) | |
}, | |
distanceToPoint: function() { | |
var e = new THREE.Vector2; | |
return function(t) { | |
var n = e.copy(t).clamp(this.min, this.max); | |
return n.sub(t).length() | |
} | |
}(), | |
intersect: function(e) { | |
return this.min.max(e.min), this.max.min(e.max), this | |
}, | |
union: function(e) { | |
return this.min.min(e.min), this.max.max(e.max), this | |
}, | |
translate: function(e) { | |
return this.min.add(e), this.max.add(e), this | |
}, | |
equals: function(e) { | |
return e.min.equals(this.min) && e.max.equals(this.max) | |
}, | |
clone: function() { | |
return (new THREE.Box2).copy(this) | |
} | |
}, THREE.Box3 = function(e, t) { | |
this.min = e !== undefined ? e : new THREE.Vector3(Infinity, Infinity, Infinity), this.max = t !== undefined ? t : new THREE.Vector3(-Infinity, -Infinity, -Infinity) | |
}, THREE.Box3.prototype = { | |
constructor: THREE.Box3, | |
set: function(e, t) { | |
return this.min.copy(e), this.max.copy(t), this | |
}, | |
setFromPoints: function(e) { | |
this.makeEmpty(); | |
for (var t = 0, n = e.length; t < n; t++) this.expandByPoint(e[t]); | |
return this | |
}, | |
setFromCenterAndSize: function() { | |
var e = new THREE.Vector3; | |
return function(t, n) { | |
var r = e.copy(n).multiplyScalar(.5); | |
return this.min.copy(t).sub(r), this.max.copy(t).add(r), this | |
} | |
}(), | |
setFromObject: function() { | |
var e = new THREE.Vector3; | |
return function(t) { | |
var n = this; | |
return t.updateMatrixWorld(!0), this.makeEmpty(), t.traverse(function(t) { | |
var r = t.geometry; | |
if (r !== undefined) | |
if (r instanceof THREE.Geometry) { | |
var i = r.vertices; | |
for (var s = 0, o = i.length; s < o; s++) e.copy(i[s]), e.applyMatrix4(t.matrixWorld), n.expandByPoint(e) | |
} else if (r instanceof THREE.BufferGeometry && r.attributes.position !== undefined) { | |
var u = r.attributes.position.array; | |
for (var s = 0, o = u.length; s < o; s += 3) e.set(u[s], u[s + 1], u[s + 2]), e.applyMatrix4(t.matrixWorld), n.expandByPoint(e) | |
} | |
}), this | |
} | |
}(), | |
copy: function(e) { | |
return this.min.copy(e.min), this.max.copy(e.max), this | |
}, | |
makeEmpty: function() { | |
return this.min.x = this.min.y = this.min.z = Infinity, this.max.x = this.max.y = this.max.z = -Infinity, this | |
}, | |
empty: function() { | |
return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z | |
}, | |
center: function(e) { | |
var t = e || new THREE.Vector3; | |
return t.addVectors(this.min, this.max).multiplyScalar(.5) | |
}, | |
size: function(e) { | |
var t = e || new THREE.Vector3; | |
return t.subVectors(this.max, this.min) | |
}, | |
expandByPoint: function(e) { | |
return this.min.min(e), this.max.max(e), this | |
}, | |
expandByVector: function(e) { | |
return this.min.sub(e), this.max.add(e), this | |
}, | |
expandByScalar: function(e) { | |
return this.min.addScalar(-e), this.max.addScalar(e), this | |
}, | |
containsPoint: function(e) { | |
return e.x < this.min.x || e.x > this.max.x || e.y < this.min.y || e.y > this.max.y || e.z < this.min.z || e.z > this.max.z ? !1 : !0 | |
}, | |
containsBox: function(e) { | |
return this.min.x <= e.min.x && e.max.x <= this.max.x && this.min.y <= e.min.y && e.max.y <= this.max.y && this.min.z <= e.min.z && e.max.z <= this.max.z ? !0 : !1 | |
}, | |
getParameter: function(e, t) { | |
var n = t || new THREE.Vector3; | |
return n.set((e.x - this.min.x) / (this.max.x - this.min.x), (e.y - this.min.y) / (this.max.y - this.min.y), (e.z - this.min.z) / (this.max.z - this.min.z)) | |
}, | |
isIntersectionBox: function(e) { | |
return e.max.x < this.min.x || e.min.x > this.max.x || e.max.y < this.min.y || e.min.y > this.max.y || e.max.z < this.min.z || e.min.z > this.max.z ? !1 : !0 | |
}, | |
clampPoint: function(e, t) { | |
var n = t || new THREE.Vector3; | |
return n.copy(e).clamp(this.min, this.max) | |
}, | |
distanceToPoint: function() { | |
var e = new THREE.Vector3; | |
return function(t) { | |
var n = e.copy(t).clamp(this.min, this.max); | |
return n.sub(t).length() | |
} | |
}(), | |
getBoundingSphere: function() { | |
var e = new THREE.Vector3; | |
return function(t) { | |
var n = t || new THREE.Sphere; | |
return n.center = this.center(), n.radius = this.size(e).length() * .5, n | |
} | |
}(), | |
intersect: function(e) { | |
return this.min.max(e.min), this.max.min(e.max), this | |
}, | |
union: function(e) { | |
return this.min.min(e.min), this.max.max(e.max), this | |
}, | |
applyMatrix4: function() { | |
var e = [new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3, new THREE.Vector3]; | |
return function(t) { | |
return e[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), e[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), e[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), e[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), e[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), e[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), e[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), e[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.makeEmpty(), this.setFromPoints(e), this | |
} | |
}(), | |
translate: function(e) { | |
return this.min.add(e), this.max.add(e), this | |
}, | |
equals: function(e) { | |
return e.min.equals(this.min) && e.max.equals(this.max) | |
}, | |
clone: function() { | |
return (new THREE.Box3).copy(this) | |
} | |
}, THREE.Matrix3 = function() { | |
this.elements = new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]), arguments.length > 0 && THREE.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.") | |
}, THREE.Matrix3.prototype = { | |
constructor: THREE.Matrix3, | |
set: function(e, t, n, r, i, s, o, u, a) { | |
var f = this.elements; | |
return f[0] = e, f[3] = t, f[6] = n, f[1] = r, f[4] = i, f[7] = s, f[2] = o, f[5] = u, f[8] = a, this | |
}, | |
identity: function() { | |
return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this | |
}, | |
copy: function(e) { | |
var t = e.elements; | |
return this.set(t[0], t[3], t[6], t[1], t[4], t[7], t[2], t[5], t[8]), this | |
}, | |
multiplyVector3: function(e) { | |
return THREE.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), e.applyMatrix3(this) | |
}, | |
multiplyVector3Array: function(e) { | |
return THREE.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."), this.applyToVector3Array(e) | |
}, | |
applyToVector3Array: function() { | |
var e = new THREE.Vector3; | |
return function(t, n, r) { | |
n === undefined && (n = 0), r === undefined && (r = t.length); | |
for (var i = 0, s = n; i < r; i += 3, s += 3) e.x = t[s], e.y = t[s + 1], e.z = t[s + 2], e.applyMatrix3(this), t[s] = e.x, t[s + 1] = e.y, t[s + 2] = e.z; | |
return t | |
} | |
}(), | |
multiplyScalar: function(e) { | |
var t = this.elements; | |
return t[0] *= e, t[3] *= e, t[6] *= e, t[1] *= e, t[4] *= e, t[7] *= e, t[2] *= e, t[5] *= e, t[8] *= e, this | |
}, | |
determinant: function() { | |
var e = this.elements, | |
t = e[0], | |
n = e[1], | |
r = e[2], | |
i = e[3], | |
s = e[4], | |
o = e[5], | |
u = e[6], | |
a = e[7], | |
f = e[8]; | |
return t * s * f - t * o * a - n * i * f + n * o * u + r * i * a - r * s * u | |
}, | |
getInverse: function(e, t) { | |
var n = e.elements, | |
r = this.elements; | |
r[0] = n[10] * n[5] - n[6] * n[9], r[1] = -n[10] * n[1] + n[2] * n[9], r[2] = n[6] * n[1] - n[2] * n[5], r[3] = -n[10] * n[4] + n[6] * n[8], r[4] = n[10] * n[0] - n[2] * n[8], r[5] = -n[6] * n[0] + n[2] * n[4], r[6] = n[9] * n[4] - n[5] * n[8], r[7] = -n[9] * n[0] + n[1] * n[8], r[8] = n[5] * n[0] - n[1] * n[4]; | |
var i = n[0] * r[0] + n[1] * r[3] + n[2] * r[6]; | |
if (i === 0) { | |
var s = "Matrix3.getInverse(): can't invert matrix, determinant is 0"; | |
if (t || !1) throw new Error(s); | |
return THREE.warn(s), this.identity(), this | |
} | |
return this.multiplyScalar(1 / i), this | |
}, | |
transpose: function() { | |
var e, t = this.elements; | |
return e = t[1], t[1] = t[3], t[3] = e, e = t[2], t[2] = t[6], t[6] = e, e = t[5], t[5] = t[7], t[7] = e, this | |
}, | |
flattenToArrayOffset: function(e, t) { | |
var n = this.elements; | |
return e[t] = n[0], e[t + 1] = n[1], e[t + 2] = n[2], e[t + 3] = n[3], e[t + 4] = n[4], e[t + 5] = n[5], e[t + 6] = n[6], e[t + 7] = n[7], e[t + 8] = n[8], e | |
}, | |
getNormalMatrix: function(e) { | |
return this.getInverse(e).transpose(), this | |
}, | |
transposeIntoArray: function(e) { | |
var t = this.elements; | |
return e[0] = t[0], e[1] = t[3], e[2] = t[6], e[3] = t[1], e[4] = t[4], e[5] = t[7], e[6] = t[2], e[7] = t[5], e[8] = t[8], this | |
}, | |
fromArray: function(e) { | |
return this.elements.set(e), this | |
}, | |
toArray: function() { | |
var e = this.elements; | |
return [e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8]] | |
}, | |
clone: function() { | |
return (new THREE.Matrix3).fromArray(this.elements) | |
} | |
}, THREE.Matrix4 = function() { | |
this.elements = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), arguments.length > 0 && THREE.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.") | |
}, THREE.Matrix4.prototype = { | |
constructor: THREE.Matrix4, | |
set: function(e, t, n, r, i, s, o, u, a, f, l, c, h, p, d, v) { | |
var m = this.elements; | |
return m[0] = e, m[4] = t, m[8] = n, m[12] = r, m[1] = i, m[5] = s, m[9] = o, m[13] = u, m[2] = a, m[6] = f, m[10] = l, m[14] = c, m[3] = h, m[7] = p, m[11] = d, m[15] = v, this | |
}, | |
identity: function() { | |
return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this | |
}, | |
copy: function(e) { | |
return this.elements.set(e.elements), this | |
}, | |
extractPosition: function(e) { | |
return THREE.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), this.copyPosition(e) | |
}, | |
copyPosition: function(e) { | |
var t = this.elements, | |
n = e.elements; | |
return t[12] = n[12], t[13] = n[13], t[14] = n[14], this | |
}, | |
extractBasis: function(e, t, n) { | |
var r = this.elements; | |
return e.set(r[0], r[1], r[2]), t.set(r[4], r[5], r[6]), n.set(r[8], r[9], r[10]), this | |
}, | |
makeBasis: function(e, t, n) { | |
return this.set(e.x, t.x, n.x, 0, e.y, t.y, n.y, 0, e.z, t.z, n.z, 0, 0, 0, 0, 1), this | |
}, | |
extractRotation: function() { | |
var e = new THREE.Vector3; | |
return function(t) { | |
var n = this.elements, | |
r = t.elements, | |
i = 1 / e.set(r[0], r[1], r[2]).length(), | |
s = 1 / e.set(r[4], r[5], r[6]).length(), | |
o = 1 / e.set(r[8], r[9], r[10]).length(); | |
return n[0] = r[0] * i, n[1] = r[1] * i, n[2] = r[2] * i, n[4] = r[4] * s, n[5] = r[5] * s, n[6] = r[6] * s, n[8] = r[8] * o, n[9] = r[9] * o, n[10] = r[10] * o, this | |
} | |
}(), | |
makeRotationFromEuler: function(e) { | |
e instanceof THREE.Euler == 0 && THREE.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); | |
var t = this.elements, | |
n = e.x, | |
r = e.y, | |
i = e.z, | |
s = Math.cos(n), | |
o = Math.sin(n), | |
u = Math.cos(r), | |
a = Math.sin(r), | |
f = Math.cos(i), | |
l = Math.sin(i); | |
if (e.order === "XYZ") { | |
var c = s * f, | |
h = s * l, | |
p = o * f, | |
d = o * l; | |
t[0] = u * f, t[4] = -u * l, t[8] = a, t[1] = h + p * a, t[5] = c - d * a, t[9] = -o * u, t[2] = d - c * a, t[6] = p + h * a, t[10] = s * u | |
} else if (e.order === "YXZ") { | |
var v = u * f, | |
m = u * l, | |
g = a * f, | |
y = a * l; | |
t[0] = v + y * o, t[4] = g * o - m, t[8] = s * a, t[1] = s * l, t[5] = s * f, t[9] = -o, t[2] = m * o - g, t[6] = y + v * o, t[10] = s * u | |
} else if (e.order === "ZXY") { | |
var v = u * f, | |
m = u * l, | |
g = a * f, | |
y = a * l; | |
t[0] = v - y * o, t[4] = -s * l, t[8] = g + m * o, t[1] = m + g * o, t[5] = s * f, t[9] = y - v * o, t[2] = -s * a, t[6] = o, t[10] = s * u | |
} else if (e.order === "ZYX") { | |
var c = s * f, | |
h = s * l, | |
p = o * f, | |
d = o * l; | |
t[0] = u * f, t[4] = p * a - h, t[8] = c * a + d, t[1] = u * l, t[5] = d * a + c, t[9] = h * a - p, t[2] = -a, t[6] = o * u, t[10] = s * u | |
} else if (e.order === "YZX") { | |
var b = s * u, | |
w = s * a, | |
E = o * u, | |
S = o * a; | |
t[0] = u * f, t[4] = S - b * l, t[8] = E * l + w, t[1] = l, t[5] = s * f, t[9] = -o * f, t[2] = -a * f, t[6] = w * l + E, t[10] = b - S * l | |
} else if (e.order === "XZY") { | |
var b = s * u, | |
w = s * a, | |
E = o * u, | |
S = o * a; | |
t[0] = u * f, t[4] = -l, t[8] = a * f, t[1] = b * l + S, t[5] = s * f, t[9] = w * l - E, t[2] = E * l - w, t[6] = o * f, t[10] = S * l + b | |
} | |
return t[3] = 0, t[7] = 0, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, this | |
}, | |
setRotationFromQuaternion: function(e) { | |
return THREE.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), this.makeRotationFromQuaternion(e) | |
}, | |
makeRotationFromQuaternion: function(e) { | |
var t = this.elements, | |
n = e.x, | |
r = e.y, | |
i = e.z, | |
s = e.w, | |
o = n + n, | |
u = r + r, | |
a = i + i, | |
f = n * o, | |
l = n * u, | |
c = n * a, | |
h = r * u, | |
p = r * a, | |
d = i * a, | |
v = s * o, | |
m = s * u, | |
g = s * a; | |
return t[0] = 1 - (h + d), t[4] = l - g, t[8] = c + m, t[1] = l + g, t[5] = 1 - (f + d), t[9] = p - v, t[2] = c - m, t[6] = p + v, t[10] = 1 - (f + h), t[3] = 0, t[7] = 0, t[11] = 0, t[12] = 0, t[13] = 0, t[14] = 0, t[15] = 1, this | |
}, | |
lookAt: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3, | |
n = new THREE.Vector3; | |
return function(r, i, s) { | |
var o = this.elements; | |
return n.subVectors(r, i).normalize(), n.length() === 0 && (n.z = 1), e.crossVectors(s, n).normalize(), e.length() === 0 && (n.x += 1e-4, e.crossVectors(s, n).normalize()), t.crossVectors(n, e), o[0] = e.x, o[4] = t.x, o[8] = n.x, o[1] = e.y, o[5] = t.y, o[9] = n.y, o[2] = e.z, o[6] = t.z, o[10] = n.z, this | |
} | |
}(), | |
multiply: function(e, t) { | |
return t !== undefined ? (THREE.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(e, t)) : this.multiplyMatrices(this, e) | |
}, | |
multiplyMatrices: function(e, t) { | |
var n = e.elements, | |
r = t.elements, | |
i = this.elements, | |
s = n[0], | |
o = n[4], | |
u = n[8], | |
a = n[12], | |
f = n[1], | |
l = n[5], | |
c = n[9], | |
h = n[13], | |
p = n[2], | |
d = n[6], | |
v = n[10], | |
m = n[14], | |
g = n[3], | |
y = n[7], | |
b = n[11], | |
w = n[15], | |
E = r[0], | |
S = r[4], | |
x = r[8], | |
T = r[12], | |
N = r[1], | |
C = r[5], | |
k = r[9], | |
L = r[13], | |
A = r[2], | |
O = r[6], | |
M = r[10], | |
_ = r[14], | |
D = r[3], | |
P = r[7], | |
H = r[11], | |
B = r[15]; | |
return i[0] = s * E + o * N + u * A + a * D, i[4] = s * S + o * C + u * O + a * P, i[8] = s * x + o * k + u * M + a * H, i[12] = s * T + o * L + u * _ + a * B, i[1] = f * E + l * N + c * A + h * D, i[5] = f * S + l * C + c * O + h * P, i[9] = f * x + l * k + c * M + h * H, i[13] = f * T + l * L + c * _ + h * B, i[2] = p * E + d * N + v * A + m * D, i[6] = p * S + d * C + v * O + m * P, i[10] = p * x + d * k + v * M + m * H, i[14] = p * T + d * L + v * _ + m * B, i[3] = g * E + y * N + b * A + w * D, i[7] = g * S + y * C + b * O + w * P, i[11] = g * x + y * k + b * M + w * H, i[15] = g * T + y * L + b * _ + w * B, this | |
}, | |
multiplyToArray: function(e, t, n) { | |
var r = this.elements; | |
return this.multiplyMatrices(e, t), n[0] = r[0], n[1] = r[1], n[2] = r[2], n[3] = r[3], n[4] = r[4], n[5] = r[5], n[6] = r[6], n[7] = r[7], n[8] = r[8], n[9] = r[9], n[10] = r[10], n[11] = r[11], n[12] = r[12], n[13] = r[13], n[14] = r[14], n[15] = r[15], this | |
}, | |
multiplyScalar: function(e) { | |
var t = this.elements; | |
return t[0] *= e, t[4] *= e, t[8] *= e, t[12] *= e, t[1] *= e, t[5] *= e, t[9] *= e, t[13] *= e, t[2] *= e, t[6] *= e, t[10] *= e, t[14] *= e, t[3] *= e, t[7] *= e, t[11] *= e, t[15] *= e, this | |
}, | |
multiplyVector3: function(e) { | |
return THREE.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."), e.applyProjection(this) | |
}, | |
multiplyVector4: function(e) { | |
return THREE.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), e.applyMatrix4(this) | |
}, | |
multiplyVector3Array: function(e) { | |
return THREE.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."), this.applyToVector3Array(e) | |
}, | |
applyToVector3Array: function() { | |
var e = new THREE.Vector3; | |
return function(t, n, r) { | |
n === undefined && (n = 0), r === undefined && (r = t.length); | |
for (var i = 0, s = n; i < r; i += 3, s += 3) e.x = t[s], e.y = t[s + 1], e.z = t[s + 2], e.applyMatrix4(this), t[s] = e.x, t[s + 1] = e.y, t[s + 2] = e.z; | |
return t | |
} | |
}(), | |
rotateAxis: function(e) { | |
THREE.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), e.transformDirection(this) | |
}, | |
crossVector: function(e) { | |
return THREE.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), e.applyMatrix4(this) | |
}, | |
determinant: function() { | |
var e = this.elements, | |
t = e[0], | |
n = e[4], | |
r = e[8], | |
i = e[12], | |
s = e[1], | |
o = e[5], | |
u = e[9], | |
a = e[13], | |
f = e[2], | |
l = e[6], | |
c = e[10], | |
h = e[14], | |
p = e[3], | |
d = e[7], | |
v = e[11], | |
m = e[15]; | |
return p * (+i * u * l - r * a * l - i * o * c + n * a * c + r * o * h - n * u * h) + d * (+t * u * h - t * a * c + i * s * c - r * s * h + r * a * f - i * u * f) + v * (+t * a * l - t * o * h - i * s * l + n * s * h + i * o * f - n * a * f) + m * (-r * o * f - t * u * l + t * o * c + r * s * l - n * s * c + n * u * f) | |
}, | |
transpose: function() { | |
var e = this.elements, | |
t; | |
return t = e[1], e[1] = e[4], e[4] = t, t = e[2], e[2] = e[8], e[8] = t, t = e[6], e[6] = e[9], e[9] = t, t = e[3], e[3] = e[12], e[12] = t, t = e[7], e[7] = e[13], e[13] = t, t = e[11], e[11] = e[14], e[14] = t, this | |
}, | |
flattenToArrayOffset: function(e, t) { | |
var n = this.elements; | |
return e[t] = n[0], e[t + 1] = n[1], e[t + 2] = n[2], e[t + 3] = n[3], e[t + 4] = n[4], e[t + 5] = n[5], e[t + 6] = n[6], e[t + 7] = n[7], e[t + 8] = n[8], e[t + 9] = n[9], e[t + 10] = n[10], e[t + 11] = n[11], e[t + 12] = n[12], e[t + 13] = n[13], e[t + 14] = n[14], e[t + 15] = n[15], e | |
}, | |
getPosition: function() { | |
var e = new THREE.Vector3; | |
return function() { | |
THREE.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."); | |
var t = this.elements; | |
return e.set(t[12], t[13], t[14]) | |
} | |
}(), | |
setPosition: function(e) { | |
var t = this.elements; | |
return t[12] = e.x, t[13] = e.y, t[14] = e.z, this | |
}, | |
getInverse: function(e, t) { | |
var n = this.elements, | |
r = e.elements, | |
i = r[0], | |
s = r[4], | |
o = r[8], | |
u = r[12], | |
a = r[1], | |
f = r[5], | |
l = r[9], | |
c = r[13], | |
h = r[2], | |
p = r[6], | |
d = r[10], | |
v = r[14], | |
m = r[3], | |
g = r[7], | |
y = r[11], | |
b = r[15]; | |
n[0] = l * v * g - c * d * g + c * p * y - f * v * y - l * p * b + f * d * b, n[4] = u * d * g - o * v * g - u * p * y + s * v * y + o * p * b - s * d * b, n[8] = o * c * g - u * l * g + u * f * y - s * c * y - o * f * b + s * l * b, n[12] = u * l * p - o * c * p - u * f * d + s * c * d + o * f * v - s * l * v, n[1] = c * d * m - l * v * m - c * h * y + a * v * y + l * h * b - a * d * b, n[5] = o * v * m - u * d * m + u * h * y - i * v * y - o * h * b + i * d * b, n[9] = u * l * m - o * c * m - u * a * y + i * c * y + o * a * b - i * l * b, n[13] = o * c * h - u * l * h + u * a * d - i * c * d - o * a * v + i * l * v, n[2] = f * v * m - c * p * m + c * h * g - a * v * g - f * h * b + a * p * b, n[6] = u * p * m - s * v * m - u * h * g + i * v * g + s * h * b - i * p * b, n[10] = s * c * m - u * f * m + u * a * g - i * c * g - s * a * b + i * f * b, n[14] = u * f * h - s * c * h - u * a * p + i * c * p + s * a * v - i * f * v, n[3] = l * p * m - f * d * m - l * h * g + a * d * g + f * h * y - a * p * y, n[7] = s * d * m - o * p * m + o * h * g - i * d * g - s * h * y + i * p * y, n[11] = o * f * m - s * l * m - o * a * g + i * l * g + s * a * y - i * f * y, n[15] = s * l * h - o * f * h + o * a * p - i * l * p - s * a * d + i * f * d; | |
var w = i * n[0] + a * n[4] + h * n[8] + m * n[12]; | |
if (w == 0) { | |
var E = "THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0"; | |
if (t || !1) throw new Error(E); | |
return THREE.warn(E), this.identity(), this | |
} | |
return this.multiplyScalar(1 / w), this | |
}, | |
translate: function(e) { | |
THREE.error("THREE.Matrix4: .translate() has been removed.") | |
}, | |
rotateX: function(e) { | |
THREE.error("THREE.Matrix4: .rotateX() has been removed.") | |
}, | |
rotateY: function(e) { | |
THREE.error("THREE.Matrix4: .rotateY() has been removed.") | |
}, | |
rotateZ: function(e) { | |
THREE.error("THREE.Matrix4: .rotateZ() has been removed.") | |
}, | |
rotateByAxis: function(e, t) { | |
THREE.error("THREE.Matrix4: .rotateByAxis() has been removed.") | |
}, | |
scale: function(e) { | |
var t = this.elements, | |
n = e.x, | |
r = e.y, | |
i = e.z; | |
return t[0] *= n, t[4] *= r, t[8] *= i, t[1] *= n, t[5] *= r, t[9] *= i, t[2] *= n, t[6] *= r, t[10] *= i, t[3] *= n, t[7] *= r, t[11] *= i, this | |
}, | |
getMaxScaleOnAxis: function() { | |
var e = this.elements, | |
t = e[0] * e[0] + e[1] * e[1] + e[2] * e[2], | |
n = e[4] * e[4] + e[5] * e[5] + e[6] * e[6], | |
r = e[8] * e[8] + e[9] * e[9] + e[10] * e[10]; | |
return Math.sqrt(Math.max(t, Math.max(n, r))) | |
}, | |
makeTranslation: function(e, t, n) { | |
return this.set(1, 0, 0, e, 0, 1, 0, t, 0, 0, 1, n, 0, 0, 0, 1), this | |
}, | |
makeRotationX: function(e) { | |
var t = Math.cos(e), | |
n = Math.sin(e); | |
return this.set(1, 0, 0, 0, 0, t, -n, 0, 0, n, t, 0, 0, 0, 0, 1), this | |
}, | |
makeRotationY: function(e) { | |
var t = Math.cos(e), | |
n = Math.sin(e); | |
return this.set(t, 0, n, 0, 0, 1, 0, 0, -n, 0, t, 0, 0, 0, 0, 1), this | |
}, | |
makeRotationZ: function(e) { | |
var t = Math.cos(e), | |
n = Math.sin(e); | |
return this.set(t, -n, 0, 0, n, t, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this | |
}, | |
makeRotationAxis: function(e, t) { | |
var n = Math.cos(t), | |
r = Math.sin(t), | |
i = 1 - n, | |
s = e.x, | |
o = e.y, | |
u = e.z, | |
a = i * s, | |
f = i * o; | |
return this.set(a * s + n, a * o - r * u, a * u + r * o, 0, a * o + r * u, f * o + n, f * u - r * s, 0, a * u - r * o, f * u + r * s, i * u * u + n, 0, 0, 0, 0, 1), this | |
}, | |
makeScale: function(e, t, n) { | |
return this.set(e, 0, 0, 0, 0, t, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this | |
}, | |
compose: function(e, t, n) { | |
return this.makeRotationFromQuaternion(t), this.scale(n), this.setPosition(e), this | |
}, | |
decompose: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Matrix4; | |
return function(n, r, i) { | |
var s = this.elements, | |
o = e.set(s[0], s[1], s[2]).length(), | |
u = e.set(s[4], s[5], s[6]).length(), | |
a = e.set(s[8], s[9], s[10]).length(), | |
f = this.determinant(); | |
f < 0 && (o = -o), n.x = s[12], n.y = s[13], n.z = s[14], t.elements.set(this.elements); | |
var l = 1 / o, | |
c = 1 / u, | |
h = 1 / a; | |
return t.elements[0] *= l, t.elements[1] *= l, t.elements[2] *= l, t.elements[4] *= c, t.elements[5] *= c, t.elements[6] *= c, t.elements[8] *= h, t.elements[9] *= h, t.elements[10] *= h, r.setFromRotationMatrix(t), i.x = o, i.y = u, i.z = a, this | |
} | |
}(), | |
makeFrustum: function(e, t, n, r, i, s) { | |
var o = this.elements, | |
u = 2 * i / (t - e), | |
a = 2 * i / (r - n), | |
f = (t + e) / (t - e), | |
l = (r + n) / (r - n), | |
c = -(s + i) / (s - i), | |
h = -2 * s * i / (s - i); | |
return o[0] = u, o[4] = 0, o[8] = f, o[12] = 0, o[1] = 0, o[5] = a, o[9] = l, o[13] = 0, o[2] = 0, o[6] = 0, o[10] = c, o[14] = h, o[3] = 0, o[7] = 0, o[11] = -1, o[15] = 0, this | |
}, | |
makePerspective: function(e, t, n, r) { | |
var i = n * Math.tan(THREE.Math.degToRad(e * .5)), | |
s = -i, | |
o = s * t, | |
u = i * t; | |
return this.makeFrustum(o, u, s, i, n, r) | |
}, | |
makeOrthographic: function(e, t, n, r, i, s) { | |
var o = this.elements, | |
u = t - e, | |
a = n - r, | |
f = s - i, | |
l = (t + e) / u, | |
c = (n + r) / a, | |
h = (s + i) / f; | |
return o[0] = 2 / u, o[4] = 0, o[8] = 0, o[12] = -l, o[1] = 0, o[5] = 2 / a, o[9] = 0, o[13] = -c, o[2] = 0, o[6] = 0, o[10] = -2 / f, o[14] = -h, o[3] = 0, o[7] = 0, o[11] = 0, o[15] = 1, this | |
}, | |
fromArray: function(e) { | |
return this.elements.set(e), this | |
}, | |
toArray: function() { | |
var e = this.elements; | |
return [e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8], e[9], e[10], e[11], e[12], e[13], e[14], e[15]] | |
}, | |
clone: function() { | |
return (new THREE.Matrix4).fromArray(this.elements) | |
} | |
}, THREE.Ray = function(e, t) { | |
this.origin = e !== undefined ? e : new THREE.Vector3, this.direction = t !== undefined ? t : new THREE.Vector3 | |
}, THREE.Ray.prototype = { | |
constructor: THREE.Ray, | |
set: function(e, t) { | |
return this.origin.copy(e), this.direction.copy(t), this | |
}, | |
copy: function(e) { | |
return this.origin.copy(e.origin), this.direction.copy(e.direction), this | |
}, | |
at: function(e, t) { | |
var n = t || new THREE.Vector3; | |
return n.copy(this.direction).multiplyScalar(e).add(this.origin) | |
}, | |
recast: function() { | |
var e = new THREE.Vector3; | |
return function(t) { | |
return this.origin.copy(this.at(t, e)), this | |
} | |
}(), | |
closestPointToPoint: function(e, t) { | |
var n = t || new THREE.Vector3; | |
n.subVectors(e, this.origin); | |
var r = n.dot(this.direction); | |
return r < 0 ? n.copy(this.origin) : n.copy(this.direction).multiplyScalar(r).add(this.origin) | |
}, | |
distanceToPoint: function() { | |
var e = new THREE.Vector3; | |
return function(t) { | |
var n = e.subVectors(t, this.origin).dot(this.direction); | |
return n < 0 ? this.origin.distanceTo(t) : (e.copy(this.direction).multiplyScalar(n).add(this.origin), e.distanceTo(t)) | |
} | |
}(), | |
distanceSqToSegment: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3, | |
n = new THREE.Vector3; | |
return function(r, i, s, o) { | |
e.copy(r).add(i).multiplyScalar(.5), t.copy(i).sub(r).normalize(), n.copy(this.origin).sub(e); | |
var u = r.distanceTo(i) * .5, | |
a = -this.direction.dot(t), | |
f = n.dot(this.direction), | |
l = -n.dot(t), | |
c = n.lengthSq(), | |
h = Math.abs(1 - a * a), | |
p, d, v, m; | |
if (h > 0) { | |
p = a * l - f, d = a * f - l, m = u * h; | |
if (p >= 0) | |
if (d >= -m) | |
if (d <= m) { | |
var g = 1 / h; | |
p *= g, d *= g, v = p * (p + a * d + 2 * f) + d * (a * p + d + 2 * l) + c | |
} else d = u, p = Math.max(0, -(a * d + f)), v = -p * p + d * (d + 2 * l) + c; | |
else d = -u, p = Math.max(0, -(a * d + f)), v = -p * p + d * (d + 2 * l) + c; | |
else d <= -m ? (p = Math.max(0, -(-a * u + f)), d = p > 0 ? -u : Math.min(Math.max(-u, -l), u), v = -p * p + d * (d + 2 * l) + c) : d <= m ? (p = 0, d = Math.min(Math.max(-u, -l), u), v = d * (d + 2 * l) + c) : (p = Math.max(0, -(a * u + f)), d = p > 0 ? u : Math.min(Math.max(-u, -l), u), v = -p * p + d * (d + 2 * l) + c) | |
} else d = a > 0 ? -u : u, p = Math.max(0, -(a * d + f)), v = -p * p + d * (d + 2 * l) + c; | |
return s && s.copy(this.direction).multiplyScalar(p).add(this.origin), o && o.copy(t).multiplyScalar(d).add(e), v | |
} | |
}(), | |
isIntersectionSphere: function(e) { | |
return this.distanceToPoint(e.center) <= e.radius | |
}, | |
intersectSphere: function() { | |
var e = new THREE.Vector3; | |
return function(t, n) { | |
e.subVectors(t.center, this.origin); | |
var r = e.dot(this.direction), | |
i = e.dot(e) - r * r, | |
s = t.radius * t.radius; | |
if (i > s) return null; | |
var o = Math.sqrt(s - i), | |
u = r - o, | |
a = r + o; | |
return u < 0 && a < 0 ? null : u < 0 ? this.at(a, n) : this.at(u, n) | |
} | |
}(), | |
isIntersectionPlane: function(e) { | |
var t = e.distanceToPoint(this.origin); | |
if (t === 0) return !0; | |
var n = e.normal.dot(this.direction); | |
return n * t < 0 ? !0 : !1 | |
}, | |
distanceToPlane: function(e) { | |
var t = e.normal.dot(this.direction); | |
if (t == 0) return e.distanceToPoint(this.origin) == 0 ? 0 : null; | |
var n = -(this.origin.dot(e.normal) + e.constant) / t; | |
return n >= 0 ? n : null | |
}, | |
intersectPlane: function(e, t) { | |
var n = this.distanceToPlane(e); | |
return n === null ? null : this.at(n, t) | |
}, | |
isIntersectionBox: function() { | |
var e = new THREE.Vector3; | |
return function(t) { | |
return this.intersectBox(t, e) !== null | |
} | |
}(), | |
intersectBox: function(e, t) { | |
var n, r, i, s, o, u, a = 1 / this.direction.x, | |
f = 1 / this.direction.y, | |
l = 1 / this.direction.z, | |
c = this.origin; | |
a >= 0 ? (n = (e.min.x - c.x) * a, r = (e.max.x - c.x) * a) : (n = (e.max.x - c.x) * a, r = (e.min.x - c.x) * a), f >= 0 ? (i = (e.min.y - c.y) * f, s = (e.max.y - c.y) * f) : (i = (e.max.y - c.y) * f, s = (e.min.y - c.y) * f); | |
if (n > s || i > r) return null; | |
if (i > n || n !== n) n = i; | |
if (s < r || r !== r) r = s; | |
l >= 0 ? (o = (e.min.z - c.z) * l, u = (e.max.z - c.z) * l) : (o = (e.max.z - c.z) * l, u = (e.min.z - c.z) * l); | |
if (n > u || o > r) return null; | |
if (o > n || n !== n) n = o; | |
if (u < r || r !== r) r = u; | |
return r < 0 ? null : this.at(n >= 0 ? n : r, t) | |
}, | |
intersectTriangle: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3, | |
n = new THREE.Vector3, | |
r = new THREE.Vector3; | |
return function(i, s, o, u, a) { | |
t.subVectors(s, i), n.subVectors(o, i), r.crossVectors(t, n); | |
var f = this.direction.dot(r), | |
l; | |
if (f > 0) { | |
if (u) return null; | |
l = 1 | |
} else { | |
if (!(f < 0)) return null; | |
l = -1, f = -f | |
} | |
e.subVectors(this.origin, i); | |
var c = l * this.direction.dot(n.crossVectors(e, n)); | |
if (c < 0) return null; | |
var h = l * this.direction.dot(t.cross(e)); | |
if (h < 0) return null; | |
if (c + h > f) return null; | |
var p = -l * e.dot(r); | |
return p < 0 ? null : this.at(p / f, a) | |
} | |
}(), | |
applyMatrix4: function(e) { | |
return this.direction.add(this.origin).applyMatrix4(e), this.origin.applyMatrix4(e), this.direction.sub(this.origin), this.direction.normalize(), this | |
}, | |
equals: function(e) { | |
return e.origin.equals(this.origin) && e.direction.equals(this.direction) | |
}, | |
clone: function() { | |
return (new THREE.Ray).copy(this) | |
} | |
}, THREE.Sphere = function(e, t) { | |
this.center = e !== undefined ? e : new THREE.Vector3, this.radius = t !== undefined ? t : 0 | |
}, THREE.Sphere.prototype = { | |
constructor: THREE.Sphere, | |
set: function(e, t) { | |
return this.center.copy(e), this.radius = t, this | |
}, | |
setFromPoints: function() { | |
var e = new THREE.Box3; | |
return function(t, n) { | |
var r = this.center; | |
n !== undefined ? r.copy(n) : e.setFromPoints(t).center(r); | |
var i = 0; | |
for (var s = 0, o = t.length; s < o; s++) i = Math.max(i, r.distanceToSquared(t[s])); | |
return this.radius = Math.sqrt(i), this | |
} | |
}(), | |
copy: function(e) { | |
return this.center.copy(e.center), this.radius = e.radius, this | |
}, | |
empty: function() { | |
return this.radius <= 0 | |
}, | |
containsPoint: function(e) { | |
return e.distanceToSquared(this.center) <= this.radius * this.radius | |
}, | |
distanceToPoint: function(e) { | |
return e.distanceTo(this.center) - this.radius | |
}, | |
intersectsSphere: function(e) { | |
var t = this.radius + e.radius; | |
return e.center.distanceToSquared(this.center) <= t * t | |
}, | |
clampPoint: function(e, t) { | |
var n = this.center.distanceToSquared(e), | |
r = t || new THREE.Vector3; | |
return r.copy(e), n > this.radius * this.radius && (r.sub(this.center).normalize(), r.multiplyScalar(this.radius).add(this.center)), r | |
}, | |
getBoundingBox: function(e) { | |
var t = e || new THREE.Box3; | |
return t.set(this.center, this.center), t.expandByScalar(this.radius), t | |
}, | |
applyMatrix4: function(e) { | |
return this.center.applyMatrix4(e), this.radius = this.radius * e.getMaxScaleOnAxis(), this | |
}, | |
translate: function(e) { | |
return this.center.add(e), this | |
}, | |
equals: function(e) { | |
return e.center.equals(this.center) && e.radius === this.radius | |
}, | |
clone: function() { | |
return (new THREE.Sphere).copy(this) | |
} | |
}, THREE.Frustum = function(e, t, n, r, i, s) { | |
this.planes = [e !== undefined ? e : new THREE.Plane, t !== undefined ? t : new THREE.Plane, n !== undefined ? n : new THREE.Plane, r !== undefined ? r : new THREE.Plane, i !== undefined ? i : new THREE.Plane, s !== undefined ? s : new THREE.Plane] | |
}, THREE.Frustum.prototype = { | |
constructor: THREE.Frustum, | |
set: function(e, t, n, r, i, s) { | |
var o = this.planes; | |
return o[0].copy(e), o[1].copy(t), o[2].copy(n), o[3].copy(r), o[4].copy(i), o[5].copy(s), this | |
}, | |
copy: function(e) { | |
var t = this.planes; | |
for (var n = 0; n < 6; n++) t[n].copy(e.planes[n]); | |
return this | |
}, | |
setFromMatrix: function(e) { | |
var t = this.planes, | |
n = e.elements, | |
r = n[0], | |
i = n[1], | |
s = n[2], | |
o = n[3], | |
u = n[4], | |
a = n[5], | |
f = n[6], | |
l = n[7], | |
c = n[8], | |
h = n[9], | |
p = n[10], | |
d = n[11], | |
v = n[12], | |
m = n[13], | |
g = n[14], | |
y = n[15]; | |
return t[0].setComponents(o - r, l - u, d - c, y - v).normalize(), t[1].setComponents(o + r, l + u, d + c, y + v).normalize(), t[2].setComponents(o + i, l + a, d + h, y + m).normalize(), t[3].setComponents(o - i, l - a, d - h, y - m).normalize(), t[4].setComponents(o - s, l - f, d - p, y - g).normalize(), t[5].setComponents(o + s, l + f, d + p, y + g).normalize(), this | |
}, | |
intersectsObject: function() { | |
var e = new THREE.Sphere; | |
return function(t) { | |
var n = t.geometry; | |
return n.boundingSphere === null && n.computeBoundingSphere(), e.copy(n.boundingSphere), e.applyMatrix4(t.matrixWorld), this.intersectsSphere(e) | |
} | |
}(), | |
intersectsSphere: function(e) { | |
var t = this.planes, | |
n = e.center, | |
r = -e.radius; | |
for (var i = 0; i < 6; i++) { | |
var s = t[i].distanceToPoint(n); | |
if (s < r) return !1 | |
} | |
return !0 | |
}, | |
intersectsBox: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3; | |
return function(n) { | |
var r = this.planes; | |
for (var i = 0; i < 6; i++) { | |
var s = r[i]; | |
e.x = s.normal.x > 0 ? n.min.x : n.max.x, t.x = s.normal.x > 0 ? n.max.x : n.min.x, e.y = s.normal.y > 0 ? n.min.y : n.max.y, t.y = s.normal.y > 0 ? n.max.y : n.min.y, e.z = s.normal.z > 0 ? n.min.z : n.max.z, t.z = s.normal.z > 0 ? n.max.z : n.min.z; | |
var o = s.distanceToPoint(e), | |
u = s.distanceToPoint(t); | |
if (o < 0 && u < 0) return !1 | |
} | |
return !0 | |
} | |
}(), | |
containsPoint: function(e) { | |
var t = this.planes; | |
for (var n = 0; n < 6; n++) | |
if (t[n].distanceToPoint(e) < 0) return !1; | |
return !0 | |
}, | |
clone: function() { | |
return (new THREE.Frustum).copy(this) | |
} | |
}, THREE.Plane = function(e, t) { | |
this.normal = e !== undefined ? e : new THREE.Vector3(1, 0, 0), this.constant = t !== undefined ? t : 0 | |
}, THREE.Plane.prototype = { | |
constructor: THREE.Plane, | |
set: function(e, t) { | |
return this.normal.copy(e), this.constant = t, this | |
}, | |
setComponents: function(e, t, n, r) { | |
return this.normal.set(e, t, n), this.constant = r, this | |
}, | |
setFromNormalAndCoplanarPoint: function(e, t) { | |
return this.normal.copy(e), this.constant = -t.dot(this.normal), this | |
}, | |
setFromCoplanarPoints: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3; | |
return function(n, r, i) { | |
var s = e.subVectors(i, r).cross(t.subVectors(n, r)).normalize(); | |
return this.setFromNormalAndCoplanarPoint(s, n), this | |
} | |
}(), | |
copy: function(e) { | |
return this.normal.copy(e.normal), this.constant = e.constant, this | |
}, | |
normalize: function() { | |
var e = 1 / this.normal.length(); | |
return this.normal.multiplyScalar(e), this.constant *= e, this | |
}, | |
negate: function() { | |
return this.constant *= -1, this.normal.negate(), this | |
}, | |
distanceToPoint: function(e) { | |
return this.normal.dot(e) + this.constant | |
}, | |
distanceToSphere: function(e) { | |
return this.distanceToPoint(e.center) - e.radius | |
}, | |
projectPoint: function(e, t) { | |
return this.orthoPoint(e, t).sub(e).negate() | |
}, | |
orthoPoint: function(e, t) { | |
var n = this.distanceToPoint(e), | |
r = t || new THREE.Vector3; | |
return r.copy(this.normal).multiplyScalar(n) | |
}, | |
isIntersectionLine: function(e) { | |
var t = this.distanceToPoint(e.start), | |
n = this.distanceToPoint(e.end); | |
return t < 0 && n > 0 || n < 0 && t > 0 | |
}, | |
intersectLine: function() { | |
var e = new THREE.Vector3; | |
return function(t, n) { | |
var r = n || new THREE.Vector3, | |
i = t.delta(e), | |
s = this.normal.dot(i); | |
if (s == 0) return this.distanceToPoint(t.start) == 0 ? r.copy(t.start) : undefined; | |
var o = -(t.start.dot(this.normal) + this.constant) / s; | |
return o < 0 || o > 1 ? undefined : r.copy(i).multiplyScalar(o).add(t.start) | |
} | |
}(), | |
coplanarPoint: function(e) { | |
var t = e || new THREE.Vector3; | |
return t.copy(this.normal).multiplyScalar(-this.constant) | |
}, | |
applyMatrix4: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3, | |
n = new THREE.Matrix3; | |
return function(r, i) { | |
var s = i || n.getNormalMatrix(r), | |
o = e.copy(this.normal).applyMatrix3(s), | |
u = this.coplanarPoint(t); | |
return u.applyMatrix4(r), this.setFromNormalAndCoplanarPoint(o, u), this | |
} | |
}(), | |
translate: function(e) { | |
return this.constant = this.constant - e.dot(this.normal), this | |
}, | |
equals: function(e) { | |
return e.normal.equals(this.normal) && e.constant == this.constant | |
}, | |
clone: function() { | |
return (new THREE.Plane).copy(this) | |
} | |
}, THREE.Math = { | |
generateUUID: function() { | |
var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), | |
t = new Array(36), | |
n = 0, | |
r; | |
return function() { | |
for (var i = 0; i < 36; i++) i == 8 || i == 13 || i == 18 || i == 23 ? t[i] = "-" : i == 14 ? t[i] = "4" : (n <= 2 && (n = 33554432 + Math.random() * 16777216 | 0), r = n & 15, n >>= 4, t[i] = e[i == 19 ? r & 3 | 8 : r]); | |
return t.join("") | |
} | |
}(), | |
clamp: function(e, t, n) { | |
return e < t ? t : e > n ? n : e | |
}, | |
clampBottom: function(e, t) { | |
return e < t ? t : e | |
}, | |
mapLinear: function(e, t, n, r, i) { | |
return r + (e - t) * (i - r) / (n - t) | |
}, | |
smoothstep: function(e, t, n) { | |
return e <= t ? 0 : e >= n ? 1 : (e = (e - t) / (n - t), e * e * (3 - 2 * e)) | |
}, | |
smootherstep: function(e, t, n) { | |
return e <= t ? 0 : e >= n ? 1 : (e = (e - t) / (n - t), e * e * e * (e * (e * 6 - 15) + 10)) | |
}, | |
random16: function() { | |
return (65280 * Math.random() + 255 * Math.random()) / 65535 | |
}, | |
randInt: function(e, t) { | |
return Math.floor(this.randFloat(e, t)) | |
}, | |
randFloat: function(e, t) { | |
return e + Math.random() * (t - e) | |
}, | |
randFloatSpread: function(e) { | |
return e * (.5 - Math.random()) | |
}, | |
degToRad: function() { | |
var e = Math.PI / 180; | |
return function(t) { | |
return t * e | |
} | |
}(), | |
radToDeg: function() { | |
var e = 180 / Math.PI; | |
return function(t) { | |
return t * e | |
} | |
}(), | |
isPowerOfTwo: function(e) { | |
return (e & e - 1) === 0 && e !== 0 | |
}, | |
nextPowerOfTwo: function(e) { | |
return e--, e |= e >> 1, e |= e >> 2, e |= e >> 4, e |= e >> 8, e |= e >> 16, e++, e | |
} | |
}, THREE.Spline = function(e) { | |
function h(e, t, n, r, i, s, o) { | |
var u = (n - e) * .5, | |
a = (r - t) * .5; | |
return (2 * (t - n) + u + a) * o + (-3 * (t - n) - 2 * u - a) * s + u * i + t | |
} | |
this.points = e; | |
var t = [], | |
n = { | |
x: 0, | |
y: 0, | |
z: 0 | |
}, | |
r, i, s, o, u, a, f, l, c; | |
this.initFromArray = function(e) { | |
this.points = []; | |
for (var t = 0; t < e.length; t++) this.points[t] = { | |
x: e[t][0], | |
y: e[t][1], | |
z: e[t][2] | |
} | |
}, this.getPoint = function(e) { | |
return r = (this.points.length - 1) * e, i = Math.floor(r), s = r - i, t[0] = i === 0 ? i : i - 1, t[1] = i, t[2] = i > this.points.length - 2 ? this.points.length - 1 : i + 1, t[3] = i > this.points.length - 3 ? this.points.length - 1 : i + 2, a = this.points[t[0]], f = this.points[t[1]], l = this.points[t[2]], c = this.points[t[3]], o = s * s, u = s * o, n.x = h(a.x, f.x, l.x, c.x, s, o, u), n.y = h(a.y, f.y, l.y, c.y, s, o, u), n.z = h(a.z, f.z, l.z, c.z, s, o, u), n | |
}, this.getControlPointsArray = function() { | |
var e, t, n = this.points.length, | |
r = []; | |
for (e = 0; e < n; e++) t = this.points[e], r[e] = [t.x, t.y, t.z]; | |
return r | |
}, this.getLength = function(e) { | |
var t, n, r, i, s = 0, | |
o = 0, | |
u = 0, | |
a = new THREE.Vector3, | |
f = new THREE.Vector3, | |
l = [], | |
c = 0; | |
l[0] = 0, e || (e = 100), r = this.points.length * e, a.copy(this.points[0]); | |
for (t = 1; t < r; t++) n = t / r, i = this.getPoint(n), f.copy(i), c += f.distanceTo(a), a.copy(i), s = (this.points.length - 1) * n, o = Math.floor(s), o != u && (l[o] = c, u = o); | |
return l[l.length] = c, { | |
chunks: l, | |
total: c | |
} | |
}, this.reparametrizeByArcLength = function(e) { | |
var t, n, r, i, s, o, u, a, f = [], | |
l = new THREE.Vector3, | |
c = this.getLength(); | |
f.push(l.copy(this.points[0]).clone()); | |
for (t = 1; t < this.points.length; t++) { | |
o = c.chunks[t] - c.chunks[t - 1], u = Math.ceil(e * o / c.total), i = (t - 1) / (this.points.length - 1), s = t / (this.points.length - 1); | |
for (n = 1; n < u - 1; n++) r = i + n * (1 / u) * (s - i), a = this.getPoint(r), f.push(l.copy(a).clone()); | |
f.push(l.copy(this.points[t]).clone()) | |
} | |
this.points = f | |
} | |
}, THREE.Triangle = function(e, t, n) { | |
this.a = e !== undefined ? e : new THREE.Vector3, this.b = t !== undefined ? t : new THREE.Vector3, this.c = n !== undefined ? n : new THREE.Vector3 | |
}, THREE.Triangle.normal = function() { | |
var e = new THREE.Vector3; | |
return function(t, n, r, i) { | |
var s = i || new THREE.Vector3; | |
s.subVectors(r, n), e.subVectors(t, n), s.cross(e); | |
var o = s.lengthSq(); | |
return o > 0 ? s.multiplyScalar(1 / Math.sqrt(o)) : s.set(0, 0, 0) | |
} | |
}(), THREE.Triangle.barycoordFromPoint = function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3, | |
n = new THREE.Vector3; | |
return function(r, i, s, o, u) { | |
e.subVectors(o, i), t.subVectors(s, i), n.subVectors(r, i); | |
var a = e.dot(e), | |
f = e.dot(t), | |
l = e.dot(n), | |
c = t.dot(t), | |
h = t.dot(n), | |
p = a * c - f * f, | |
d = u || new THREE.Vector3; | |
if (p == 0) return d.set(-2, -1, -1); | |
var v = 1 / p, | |
m = (c * l - f * h) * v, | |
g = (a * h - f * l) * v; | |
return d.set(1 - m - g, g, m) | |
} | |
}(), THREE.Triangle.containsPoint = function() { | |
var e = new THREE.Vector3; | |
return function(t, n, r, i) { | |
var s = THREE.Triangle.barycoordFromPoint(t, n, r, i, e); | |
return s.x >= 0 && s.y >= 0 && s.x + s.y <= 1 | |
} | |
}(), THREE.Triangle.prototype = { | |
constructor: THREE.Triangle, | |
set: function(e, t, n) { | |
return this.a.copy(e), this.b.copy(t), this.c.copy(n), this | |
}, | |
setFromPointsAndIndices: function(e, t, n, r) { | |
return this.a.copy(e[t]), this.b.copy(e[n]), this.c.copy(e[r]), this | |
}, | |
copy: function(e) { | |
return this.a.copy(e.a), this.b.copy(e.b), this.c.copy(e.c), this | |
}, | |
area: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3; | |
return function() { | |
return e.subVectors(this.c, this.b), t.subVectors(this.a, this.b), e.cross(t).length() * .5 | |
} | |
}(), | |
midpoint: function(e) { | |
var t = e || new THREE.Vector3; | |
return t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) | |
}, | |
normal: function(e) { | |
return THREE.Triangle.normal(this.a, this.b, this.c, e) | |
}, | |
plane: function(e) { | |
var t = e || new THREE.Plane; | |
return t.setFromCoplanarPoints(this.a, this.b, this.c) | |
}, | |
barycoordFromPoint: function(e, t) { | |
return THREE.Triangle.barycoordFromPoint(e, this.a, this.b, this.c, t) | |
}, | |
containsPoint: function(e) { | |
return THREE.Triangle.containsPoint(e, this.a, this.b, this.c) | |
}, | |
equals: function(e) { | |
return e.a.equals(this.a) && e.b.equals(this.b) && e.c.equals(this.c) | |
}, | |
clone: function() { | |
return (new THREE.Triangle).copy(this) | |
} | |
}, THREE.Clock = function(e) { | |
this.autoStart = e !== undefined ? e : !0, this.startTime = 0, this.oldTime = 0, this.elapsedTime = 0, this.running = !1 | |
}, THREE.Clock.prototype = { | |
constructor: THREE.Clock, | |
start: function() { | |
this.startTime = self.performance !== undefined && self.performance.now !== undefined ? self.performance.now() : Date.now(), this.oldTime = this.startTime, this.running = !0 | |
}, | |
stop: function() { | |
this.getElapsedTime(), this.running = !1 | |
}, | |
getElapsedTime: function() { | |
return this.getDelta(), this.elapsedTime | |
}, | |
getDelta: function() { | |
var e = 0; | |
this.autoStart && !this.running && this.start(); | |
if (this.running) { | |
var t = self.performance !== undefined && self.performance.now !== undefined ? self.performance.now() : Date.now(); | |
e = .001 * (t - this.oldTime), this.oldTime = t, this.elapsedTime += e | |
} | |
return e | |
} | |
}, THREE.EventDispatcher = function() {}, THREE.EventDispatcher.prototype = { | |
constructor: THREE.EventDispatcher, | |
apply: function(e) { | |
e.addEventListener = THREE.EventDispatcher.prototype.addEventListener, e.hasEventListener = THREE.EventDispatcher.prototype.hasEventListener, e.removeEventListener = THREE.EventDispatcher.prototype.removeEventListener, e.dispatchEvent = THREE.EventDispatcher.prototype.dispatchEvent | |
}, | |
addEventListener: function(e, t) { | |
this._listeners === undefined && (this._listeners = {}); | |
var n = this._listeners; | |
n[e] === undefined && (n[e] = []), n[e].indexOf(t) === -1 && n[e].push(t) | |
}, | |
hasEventListener: function(e, t) { | |
if (this._listeners === undefined) return !1; | |
var n = this._listeners; | |
return n[e] !== undefined && n[e].indexOf(t) !== -1 ? !0 : !1 | |
}, | |
removeEventListener: function(e, t) { | |
if (this._listeners === undefined) return; | |
var n = this._listeners, | |
r = n[e]; | |
if (r !== undefined) { | |
var i = r.indexOf(t); | |
i !== -1 && r.splice(i, 1) | |
} | |
}, | |
dispatchEvent: function(e) { | |
if (this._listeners === undefined) return; | |
var t = this._listeners, | |
n = t[e.type]; | |
if (n !== undefined) { | |
e.target = this; | |
var r = [], | |
i = n.length; | |
for (var s = 0; s < i; s++) r[s] = n[s]; | |
for (var s = 0; s < i; s++) r[s].call(this, e) | |
} | |
} | |
}, | |
function(e) { | |
e.Raycaster = function(t, n, r, i) { | |
this.ray = new e.Ray(t, n), this.near = r || 0, this.far = i || Infinity, this.params = { | |
Sprite: {}, | |
Mesh: {}, | |
PointCloud: { | |
threshold: 1 | |
}, | |
LOD: {}, | |
Line: {} | |
} | |
}; | |
var t = function(e, t) { | |
return e.distance - t.distance | |
}, | |
n = function(e, t, r, i) { | |
e.raycast(t, r); | |
if (i === !0) { | |
var s = e.children; | |
for (var o = 0, u = s.length; o < u; o++) n(s[o], t, r, !0) | |
} | |
}; | |
e.Raycaster.prototype = { | |
constructor: e.Raycaster, | |
precision: 1e-4, | |
linePrecision: 1, | |
set: function(e, t) { | |
this.ray.set(e, t) | |
}, | |
setFromCamera: function(t, n) { | |
n instanceof e.PerspectiveCamera ? (this.ray.origin.copy(n.position), this.ray.direction.set(t.x, t.y, .5).unproject(n).sub(n.position).normalize()) : n instanceof e.OrthographicCamera ? (this.ray.origin.set(t.x, t.y, -1).unproject(n), this.ray.direction.set(0, 0, -1).transformDirection(n.matrixWorld)) : e.error("THREE.Raycaster: Unsupported camera type.") | |
}, | |
intersectObject: function(e, r) { | |
var i = []; | |
return n(e, this, i, r), i.sort(t), i | |
}, | |
intersectObjects: function(r, i) { | |
var s = []; | |
if (r instanceof Array == 0) return e.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), s; | |
for (var o = 0, u = r.length; o < u; o++) n(r[o], this, s, i); | |
return s.sort(t), s | |
} | |
} | |
}(THREE), THREE.Object3D = function() { | |
Object.defineProperty(this, "id", { | |
value: THREE.Object3DIdCount++ | |
}), this.uuid = THREE.Math.generateUUID(), this.name = "", this.type = "Object3D", this.parent = undefined, this.children = [], this.up = THREE.Object3D.DefaultUp.clone(); | |
var e = new THREE.Vector3, | |
t = new THREE.Euler, | |
n = new THREE.Quaternion, | |
r = new THREE.Vector3(1, 1, 1), | |
i = function() { | |
n.setFromEuler(t, !1) | |
}, | |
s = function() { | |
t.setFromQuaternion(n, undefined, !1) | |
}; | |
t.onChange(i), n.onChange(s), Object.defineProperties(this, { | |
position: { | |
enumerable: !0, | |
value: e | |
}, | |
rotation: { | |
enumerable: !0, | |
value: t | |
}, | |
quaternion: { | |
enumerable: !0, | |
value: n | |
}, | |
scale: { | |
enumerable: !0, | |
value: r | |
} | |
}), this.rotationAutoUpdate = !0, this.matrix = new THREE.Matrix4, this.matrixWorld = new THREE.Matrix4, this.matrixAutoUpdate = !0, this.matrixWorldNeedsUpdate = !1, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.userData = {} | |
}, THREE.Object3D.DefaultUp = new THREE.Vector3(0, 1, 0), THREE.Object3D.prototype = { | |
constructor: THREE.Object3D, | |
get eulerOrder() { | |
return THREE.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order."), this.rotation.order | |
}, | |
set eulerOrder(e) { | |
THREE.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order."), this.rotation.order = e | |
}, | |
get useQuaternion() { | |
THREE.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") | |
}, | |
set useQuaternion(e) { | |
THREE.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") | |
}, | |
applyMatrix: function(e) { | |
this.matrix.multiplyMatrices(e, this.matrix), this.matrix.decompose(this.position, this.quaternion, this.scale) | |
}, | |
setRotationFromAxisAngle: function(e, t) { | |
this.quaternion.setFromAxisAngle(e, t) | |
}, | |
setRotationFromEuler: function(e) { | |
this.quaternion.setFromEuler(e, !0) | |
}, | |
setRotationFromMatrix: function(e) { | |
this.quaternion.setFromRotationMatrix(e) | |
}, | |
setRotationFromQuaternion: function(e) { | |
this.quaternion.copy(e) | |
}, | |
rotateOnAxis: function() { | |
var e = new THREE.Quaternion; | |
return function(t, n) { | |
return e.setFromAxisAngle(t, n), this.quaternion.multiply(e), this | |
} | |
}(), | |
rotateX: function() { | |
var e = new THREE.Vector3(1, 0, 0); | |
return function(t) { | |
return this.rotateOnAxis(e, t) | |
} | |
}(), | |
rotateY: function() { | |
var e = new THREE.Vector3(0, 1, 0); | |
return function(t) { | |
return this.rotateOnAxis(e, t) | |
} | |
}(), | |
rotateZ: function() { | |
var e = new THREE.Vector3(0, 0, 1); | |
return function(t) { | |
return this.rotateOnAxis(e, t) | |
} | |
}(), | |
translateOnAxis: function() { | |
var e = new THREE.Vector3; | |
return function(t, n) { | |
return e.copy(t).applyQuaternion(this.quaternion), this.position.add(e.multiplyScalar(n)), this | |
} | |
}(), | |
translate: function(e, t) { | |
return THREE.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), this.translateOnAxis(t, e) | |
}, | |
translateX: function() { | |
var e = new THREE.Vector3(1, 0, 0); | |
return function(t) { | |
return this.translateOnAxis(e, t) | |
} | |
}(), | |
translateY: function() { | |
var e = new THREE.Vector3(0, 1, 0); | |
return function(t) { | |
return this.translateOnAxis(e, t) | |
} | |
}(), | |
translateZ: function() { | |
var e = new THREE.Vector3(0, 0, 1); | |
return function(t) { | |
return this.translateOnAxis(e, t) | |
} | |
}(), | |
localToWorld: function(e) { | |
return e.applyMatrix4(this.matrixWorld) | |
}, | |
worldToLocal: function() { | |
var e = new THREE.Matrix4; | |
return function(t) { | |
return t.applyMatrix4(e.getInverse(this.matrixWorld)) | |
} | |
}(), | |
lookAt: function() { | |
var e = new THREE.Matrix4; | |
return function(t) { | |
e.lookAt(t, this.position, this.up), this.quaternion.setFromRotationMatrix(e) | |
} | |
}(), | |
add: function(e) { | |
if (arguments.length > 1) { | |
for (var t = 0; t < arguments.length; t++) this.add(arguments[t]); | |
return this | |
} | |
return e === this ? (THREE.error("THREE.Object3D.add: object can't be added as a child of itself.", e), this) : (e instanceof THREE.Object3D ? (e.parent !== undefined && e.parent.remove(e), e.parent = this, e.dispatchEvent({ | |
type: "added" | |
}), this.children.push(e)) : THREE.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", e), this) | |
}, | |
remove: function(e) { | |
if (arguments.length > 1) | |
for (var t = 0; t < arguments.length; t++) this.remove(arguments[t]); | |
var n = this.children.indexOf(e); | |
n !== -1 && (e.parent = undefined, e.dispatchEvent({ | |
type: "removed" | |
}), this.children.splice(n, 1)) | |
}, | |
getChildByName: function(e) { | |
return THREE.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), this.getObjectByName(e) | |
}, | |
getObjectById: function(e) { | |
return this.getObjectByProperty("id", e) | |
}, | |
getObjectByName: function(e) { | |
return this.getObjectByProperty("name", e) | |
}, | |
getObjectByProperty: function(e, t) { | |
if (this[e] === t) return this; | |
for (var n = 0, r = this.children.length; n < r; n++) { | |
var i = this.children[n], | |
s = i.getObjectByProperty(e, t); | |
if (s !== undefined) return s | |
} | |
return undefined | |
}, | |
getWorldPosition: function(e) { | |
var t = e || new THREE.Vector3; | |
return this.updateMatrixWorld(!0), t.setFromMatrixPosition(this.matrixWorld) | |
}, | |
getWorldQuaternion: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3; | |
return function(n) { | |
var r = n || new THREE.Quaternion; | |
return this.updateMatrixWorld(!0), this.matrixWorld.decompose(e, r, t), r | |
} | |
}(), | |
getWorldRotation: function() { | |
var e = new THREE.Quaternion; | |
return function(t) { | |
var n = t || new THREE.Euler; | |
return this.getWorldQuaternion(e), n.setFromQuaternion(e, this.rotation.order, !1) | |
} | |
}(), | |
getWorldScale: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Quaternion; | |
return function(n) { | |
var r = n || new THREE.Vector3; | |
return this.updateMatrixWorld(!0), this.matrixWorld.decompose(e, t, r), r | |
} | |
}(), | |
getWorldDirection: function() { | |
var e = new THREE.Quaternion; | |
return function(t) { | |
var n = t || new THREE.Vector3; | |
return this.getWorldQuaternion(e), n.set(0, 0, 1).applyQuaternion(e) | |
} | |
}(), | |
raycast: function() {}, | |
traverse: function(e) { | |
e(this); | |
for (var t = 0, n = this.children.length; t < n; t++) this.children[t].traverse(e) | |
}, | |
traverseVisible: function(e) { | |
if (this.visible === !1) return; | |
e(this); | |
for (var t = 0, n = this.children.length; t < n; t++) this.children[t].traverseVisible(e) | |
}, | |
traverseAncestors: function(e) { | |
this.parent && (e(this.parent), this.parent.traverseAncestors(e)) | |
}, | |
updateMatrix: function() { | |
this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0 | |
}, | |
updateMatrixWorld: function(e) { | |
this.matrixAutoUpdate === !0 && this.updateMatrix(); | |
if (this.matrixWorldNeedsUpdate === !0 || e === !0) this.parent === undefined ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, e = !0; | |
for (var t = 0, n = this.children.length; t < n; t++) this.children[t].updateMatrixWorld(e) | |
}, | |
toJSON: function() { | |
var e = { | |
metadata: { | |
version: 4.3, | |
type: "Object", | |
generator: "ObjectExporter" | |
} | |
}, | |
t = {}, | |
n = function(n) { | |
e.geometries === undefined && (e.geometries = []); | |
if (t[n.uuid] === undefined) { | |
var r = n.toJSON(); | |
delete r.metadata, t[n.uuid] = r, e.geometries.push(r) | |
} | |
return n.uuid | |
}, | |
r = {}, | |
i = function(t) { | |
e.materials === undefined && (e.materials = []); | |
if (r[t.uuid] === undefined) { | |
var n = t.toJSON(); | |
delete n.metadata, r[t.uuid] = n, e.materials.push(n) | |
} | |
return t.uuid | |
}, | |
s = function(e) { | |
var t = {}; | |
t.uuid = e.uuid, t.type = e.type, e.name !== "" && (t.name = e.name), JSON.stringify(e.userData) !== "{}" && (t.userData = e.userData), e.visible !== !0 && (t.visible = e.visible), e instanceof THREE.PerspectiveCamera ? (t.fov = e.fov, t.aspect = e.aspect, t.near = e.near, t.far = e.far) : e instanceof THREE.OrthographicCamera ? (t.left = e.left, t.right = e.right, t.top = e.top, t.bottom = e.bottom, t.near = e.near, t.far = e.far) : e instanceof THREE.AmbientLight ? t.color = e.color.getHex() : e instanceof THREE.DirectionalLight ? (t.color = e.color.getHex(), t.intensity = e.intensity) : e instanceof THREE.PointLight ? (t.color = e.color.getHex(), t.intensity = e.intensity, t.distance = e.distance, t.decay = e.decay) : e instanceof THREE.SpotLight ? (t.color = e.color.getHex(), t.intensity = e.intensity, t.distance = e.distance, t.angle = e.angle, t.exponent = e.exponent, t.decay = e.decay) : e instanceof THREE.HemisphereLight ? (t.color = e.color.getHex(), t.groundColor = e.groundColor.getHex()) : e instanceof THREE.Mesh || e instanceof THREE.Line || e instanceof THREE.PointCloud ? (t.geometry = n(e.geometry), t.material = i(e.material), e instanceof THREE.Line && (t.mode = e.mode)) : e instanceof THREE.Sprite && (t.material = i(e.material)), t.matrix = e.matrix.toArray(); | |
if (e.children.length > 0) { | |
t.children = []; | |
for (var r = 0; r < e.children.length; r++) t.children.push(s(e.children[r])) | |
} | |
return t | |
}; | |
return e.object = s(this), e | |
}, | |
clone: function(e, t) { | |
e === undefined && (e = new THREE.Object3D), t === undefined && (t = !0), e.name = this.name, e.up.copy(this.up), e.position.copy(this.position), e.quaternion.copy(this.quaternion), e.scale.copy(this.scale), e.rotationAutoUpdate = this.rotationAutoUpdate, e.matrix.copy(this.matrix), e.matrixWorld.copy(this.matrixWorld), e.matrixAutoUpdate = this.matrixAutoUpdate, e.matrixWorldNeedsUpdate = this.matrixWorldNeedsUpdate, e.visible = this.visible, e.castShadow = this.castShadow, e.receiveShadow = this.receiveShadow, e.frustumCulled = this.frustumCulled, e.userData = JSON.parse(JSON.stringify(this.userData)); | |
if (t === !0) | |
for (var n = 0; n < this.children.length; n++) { | |
var r = this.children[n]; | |
e.add(r.clone()) | |
} | |
return e | |
} | |
}, THREE.EventDispatcher.prototype.apply(THREE.Object3D.prototype), THREE.Object3DIdCount = 0, THREE.Face3 = function(e, t, n, r, i, s) { | |
this.a = e, this.b = t, this.c = n, this.normal = r instanceof THREE.Vector3 ? r : new THREE.Vector3, this.vertexNormals = r instanceof Array ? r : [], this.color = i instanceof THREE.Color ? i : new THREE.Color, this.vertexColors = i instanceof Array ? i : [], this.vertexTangents = [], this.materialIndex = s !== undefined ? s : 0 | |
}, THREE.Face3.prototype = { | |
constructor: THREE.Face3, | |
clone: function() { | |
var e = new THREE.Face3(this.a, this.b, this.c); | |
e.normal.copy(this.normal), e.color.copy(this.color), e.materialIndex = this.materialIndex; | |
for (var t = 0, n = this.vertexNormals.length; t < n; t++) e.vertexNormals[t] = this.vertexNormals[t].clone(); | |
for (var t = 0, n = this.vertexColors.length; t < n; t++) e.vertexColors[t] = this.vertexColors[t].clone(); | |
for (var t = 0, n = this.vertexTangents.length; t < n; t++) e.vertexTangents[t] = this.vertexTangents[t].clone(); | |
return e | |
} | |
}, THREE.Face4 = function(e, t, n, r, i, s, o) { | |
return THREE.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."), new THREE.Face3(e, t, n, i, s, o) | |
}, THREE.BufferAttribute = function(e, t) { | |
this.array = e, this.itemSize = t, this.needsUpdate = !1 | |
}, THREE.BufferAttribute.prototype = { | |
constructor: THREE.BufferAttribute, | |
get length() { | |
return this.array.length | |
}, | |
copyAt: function(e, t, n) { | |
e *= this.itemSize, n *= t.itemSize; | |
for (var r = 0, i = this.itemSize; r < i; r++) this.array[e + r] = t.array[n + r]; | |
return this | |
}, | |
set: function(e, t) { | |
return t === undefined && (t = 0), this.array.set(e, t), this | |
}, | |
setX: function(e, t) { | |
return this.array[e * this.itemSize] = t, this | |
}, | |
setY: function(e, t) { | |
return this.array[e * this.itemSize + 1] = t, this | |
}, | |
setZ: function(e, t) { | |
return this.array[e * this.itemSize + 2] = t, this | |
}, | |
setXY: function(e, t, n) { | |
return e *= this.itemSize, this.array[e] = t, this.array[e + 1] = n, this | |
}, | |
setXYZ: function(e, t, n, r) { | |
return e *= this.itemSize, this.array[e] = t, this.array[e + 1] = n, this.array[e + 2] = r, this | |
}, | |
setXYZW: function(e, t, n, r, i) { | |
return e *= this.itemSize, this.array[e] = t, this.array[e + 1] = n, this.array[e + 2] = r, this.array[e + 3] = i, this | |
}, | |
clone: function() { | |
return new THREE.BufferAttribute(new this.array.constructor(this.array), this.itemSize) | |
} | |
}, THREE.Int8Attribute = function(e, t) { | |
return THREE.warn("THREE.Int8Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Uint8Attribute = function(e, t) { | |
return THREE.warn("THREE.Uint8Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Uint8ClampedAttribute = function(e, t) { | |
return THREE.warn("THREE.Uint8ClampedAttribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Int16Attribute = function(e, t) { | |
return THREE.warn("THREE.Int16Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Uint16Attribute = function(e, t) { | |
return THREE.warn("THREE.Uint16Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Int32Attribute = function(e, t) { | |
return THREE.warn("THREE.Int32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Uint32Attribute = function(e, t) { | |
return THREE.warn("THREE.Uint32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Float32Attribute = function(e, t) { | |
return THREE.warn("THREE.Float32Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.Float64Attribute = function(e, t) { | |
return THREE.warn("THREE.Float64Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead."), new THREE.BufferAttribute(e, t) | |
}, THREE.DynamicBufferAttribute = function(e, t) { | |
THREE.BufferAttribute.call(this, e, t), this.updateRange = { | |
offset: 0, | |
count: -1 | |
} | |
}, THREE.DynamicBufferAttribute.prototype = Object.create(THREE.BufferAttribute.prototype), THREE.DynamicBufferAttribute.prototype.constructor = THREE.DynamicBufferAttribute, THREE.DynamicBufferAttribute.prototype.clone = function() { | |
return new THREE.DynamicBufferAttribute(new this.array.constructor(this.array), this.itemSize) | |
}, THREE.BufferGeometry = function() { | |
Object.defineProperty(this, "id", { | |
value: THREE.GeometryIdCount++ | |
}), this.uuid = THREE.Math.generateUUID(), this.name = "", this.type = "BufferGeometry", this.attributes = {}, this.attributesKeys = [], this.drawcalls = [], this.offsets = this.drawcalls, this.boundingBox = null, this.boundingSphere = null | |
}, THREE.BufferGeometry.prototype = { | |
constructor: THREE.BufferGeometry, | |
addAttribute: function(e, t) { | |
if (t instanceof THREE.BufferAttribute == 0) { | |
THREE.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.attributes[e] = { | |
array: arguments[1], | |
itemSize: arguments[2] | |
}; | |
return | |
} | |
this.attributes[e] = t, this.attributesKeys = Object.keys(this.attributes) | |
}, | |
getAttribute: function(e) { | |
return this.attributes[e] | |
}, | |
addDrawCall: function(e, t, n) { | |
this.drawcalls.push({ | |
start: e, | |
count: t, | |
index: n !== undefined ? n : 0 | |
}) | |
}, | |
applyMatrix: function(e) { | |
var t = this.attributes.position; | |
t !== undefined && (e.applyToVector3Array(t.array), t.needsUpdate = !0); | |
var n = this.attributes.normal; | |
if (n !== undefined) { | |
var r = (new THREE.Matrix3).getNormalMatrix(e); | |
r.applyToVector3Array(n.array), n.needsUpdate = !0 | |
} | |
this.boundingBox !== null && this.computeBoundingBox(), this.boundingSphere !== null && this.computeBoundingSphere() | |
}, | |
center: function() { | |
this.computeBoundingBox(); | |
var e = this.boundingBox.center().negate(); | |
return this.applyMatrix((new THREE.Matrix4).setPosition(e)), e | |
}, | |
fromGeometry: function(e, t) { | |
t = t || { | |
vertexColors: THREE.NoColors | |
}; | |
var n = e.vertices, | |
r = e.faces, | |
i = e.faceVertexUvs, | |
s = t.vertexColors, | |
o = i[0].length > 0, | |
u = r[0].vertexNormals.length == 3, | |
a = new Float32Array(r.length * 3 * 3); | |
this.addAttribute("position", new THREE.BufferAttribute(a, 3)); | |
var f = new Float32Array(r.length * 3 * 3); | |
this.addAttribute("normal", new THREE.BufferAttribute(f, 3)); | |
if (s !== THREE.NoColors) { | |
var l = new Float32Array(r.length * 3 * 3); | |
this.addAttribute("color", new THREE.BufferAttribute(l, 3)) | |
} | |
if (o === !0) { | |
var c = new Float32Array(r.length * 3 * 2); | |
this.addAttribute("uv", new THREE.BufferAttribute(c, 2)) | |
} | |
for (var h = 0, p = 0, d = 0; h < r.length; h++, p += 6, d += 9) { | |
var v = r[h], | |
m = n[v.a], | |
g = n[v.b], | |
y = n[v.c]; | |
a[d] = m.x, a[d + 1] = m.y, a[d + 2] = m.z, a[d + 3] = g.x, a[d + 4] = g.y, a[d + 5] = g.z, a[d + 6] = y.x, a[d + 7] = y.y, a[d + 8] = y.z; | |
if (u === !0) { | |
var b = v.vertexNormals[0], | |
w = v.vertexNormals[1], | |
E = v.vertexNormals[2]; | |
f[d] = b.x, f[d + 1] = b.y, f[d + 2] = b.z, f[d + 3] = w.x, f[d + 4] = w.y, f[d + 5] = w.z, f[d + 6] = E.x, f[d + 7] = E.y, f[d + 8] = E.z | |
} else { | |
var S = v.normal; | |
f[d] = S.x, f[d + 1] = S.y, f[d + 2] = S.z, f[d + 3] = S.x, f[d + 4] = S.y, f[d + 5] = S.z, f[d + 6] = S.x, f[d + 7] = S.y, f[d + 8] = S.z | |
} | |
if (s === THREE.FaceColors) { | |
var x = v.color; | |
l[d] = x.r, l[d + 1] = x.g, l[d + 2] = x.b, l[d + 3] = x.r, l[d + 4] = x.g, l[d + 5] = x.b, l[d + 6] = x.r, l[d + 7] = x.g, l[d + 8] = x.b | |
} else if (s === THREE.VertexColors) { | |
var T = v.vertexColors[0], | |
N = v.vertexColors[1], | |
C = v.vertexColors[2]; | |
l[d] = T.r, l[d + 1] = T.g, l[d + 2] = T.b, l[d + 3] = N.r, l[d + 4] = N.g, l[d + 5] = N.b, l[d + 6] = C.r, l[d + 7] = C.g, l[d + 8] = C.b | |
} | |
if (o === !0) { | |
var k = i[0][h][0], | |
L = i[0][h][1], | |
A = i[0][h][2]; | |
c[p] = k.x, c[p + 1] = k.y, c[p + 2] = L.x, c[p + 3] = L.y, c[p + 4] = A.x, c[p + 5] = A.y | |
} | |
} | |
return this.computeBoundingSphere(), this | |
}, | |
computeBoundingBox: function() { | |
var e = new THREE.Vector3; | |
return function() { | |
this.boundingBox === null && (this.boundingBox = new THREE.Box3); | |
var t = this.attributes.position.array; | |
if (t) { | |
var n = this.boundingBox; | |
n.makeEmpty(); | |
for (var r = 0, i = t.length; r < i; r += 3) e.set(t[r], t[r + 1], t[r + 2]), n.expandByPoint(e) | |
} | |
if (t === undefined || t.length === 0) this.boundingBox.min.set(0, 0, 0), this.boundingBox.max.set(0, 0, 0); | |
(isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && THREE.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.') | |
} | |
}(), | |
computeBoundingSphere: function() { | |
var e = new THREE.Box3, | |
t = new THREE.Vector3; | |
return function() { | |
this.boundingSphere === null && (this.boundingSphere = new THREE.Sphere); | |
var n = this.attributes.position.array; | |
if (n) { | |
e.makeEmpty(); | |
var r = this.boundingSphere.center; | |
for (var i = 0, s = n.length; i < s; i += 3) t.set(n[i], n[i + 1], n[i + 2]), e.expandByPoint(t); | |
e.center(r); | |
var o = 0; | |
for (var i = 0, s = n.length; i < s; i += 3) t.set(n[i], n[i + 1], n[i + 2]), o = Math.max(o, r.distanceToSquared(t)); | |
this.boundingSphere.radius = Math.sqrt(o), isNaN(this.boundingSphere.radius) && THREE.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.') | |
} | |
} | |
}(), | |
computeFaceNormals: function() {}, | |
computeVertexNormals: function() { | |
var e = this.attributes; | |
if (e.position) { | |
var t = e.position.array; | |
if (e.normal === undefined) this.addAttribute("normal", new THREE.BufferAttribute(new Float32Array(t.length), 3)); | |
else { | |
var n = e.normal.array; | |
for (var r = 0, i = n.length; r < i; r++) n[r] = 0 | |
} | |
var n = e.normal.array, | |
s, o, u, a = new THREE.Vector3, | |
f = new THREE.Vector3, | |
l = new THREE.Vector3, | |
c = new THREE.Vector3, | |
h = new THREE.Vector3; | |
if (e.index) { | |
var p = e.index.array, | |
d = this.offsets.length > 0 ? this.offsets : [{ | |
start: 0, | |
count: p.length, | |
index: 0 | |
}]; | |
for (var v = 0, m = d.length; v < m; ++v) { | |
var g = d[v].start, | |
y = d[v].count, | |
b = d[v].index; | |
for (var r = g, i = g + y; r < i; r += 3) s = (b + p[r]) * 3, o = (b + p[r + 1]) * 3, u = (b + p[r + 2]) * 3, a.fromArray(t, s), f.fromArray(t, o), l.fromArray(t, u), c.subVectors(l, f), h.subVectors(a, f), c.cross(h), n[s] += c.x, n[s + 1] += c.y, n[s + 2] += c.z, n[o] += c.x, n[o + 1] += c.y, n[o + 2] += c.z, n[u] += c.x, n[u + 1] += c.y, n[u + 2] += c.z | |
} | |
} else | |
for (var r = 0, i = t.length; r < i; r += 9) a.fromArray(t, r), f.fromArray(t, r + 3), l.fromArray(t, r + 6), c.subVectors(l, f), h.subVectors(a, f), c.cross(h), n[r] = c.x, n[r + 1] = c.y, n[r + 2] = c.z, n[r + 3] = c.x, n[r + 4] = c.y, n[r + 5] = c.z, n[r + 6] = c.x, n[r + 7] = c.y, n[r + 8] = c.z; | |
this.normalizeNormals(), e.normal.needsUpdate = !0 | |
} | |
}, | |
computeTangents: function() { | |
function L(e, n, i) { | |
f.fromArray(t, e * 3), l.fromArray(t, n * 3), c.fromArray(t, i * 3), h.fromArray(r, e * 2), p.fromArray(r, n * 2), d.fromArray(r, i * 2), v = l.x - f.x, m = c.x - f.x, g = l.y - f.y, y = c.y - f.y, b = l.z - f.z, w = c.z - f.z, E = p.x - h.x, S = d.x - h.x, x = p.y - h.y, T = d.y - h.y, N = 1 / (E * T - S * x), C.set((T * v - x * m) * N, (T * g - x * y) * N, (T * b - x * w) * N), k.set((E * m - S * v) * N, (E * y - S * g) * N, (E * w - S * b) * N), o[e].add(C), o[n].add(C), o[i].add(C), u[e].add(k), u[n].add(k), u[i].add(k) | |
} | |
function $(e) { | |
U.fromArray(n, e * 3), z.copy(U), X = o[e], q.copy(X), q.sub(U.multiplyScalar(U.dot(X))).normalize(), R.crossVectors(z, X), V = R.dot(u[e]), W = V < 0 ? -1 : 1, s[e * 4] = q.x, s[e * 4 + 1] = q.y, s[e * 4 + 2] = q.z, s[e * 4 + 3] = W | |
} | |
if (this.attributes.index === undefined || this.attributes.position === undefined || this.attributes.normal === undefined || this.attributes.uv === undefined) { | |
THREE.warn("THREE.BufferGeometry: Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()"); | |
return | |
} | |
var e = this.attributes.index.array, | |
t = this.attributes.position.array, | |
n = this.attributes.normal.array, | |
r = this.attributes.uv.array, | |
i = t.length / 3; | |
this.attributes.tangent === undefined && this.addAttribute("tangent", new THREE.BufferAttribute(new Float32Array(4 * i), 4)); | |
var s = this.attributes.tangent.array, | |
o = [], | |
u = []; | |
for (var a = 0; a < i; a++) o[a] = new THREE.Vector3, u[a] = new THREE.Vector3; | |
var f = new THREE.Vector3, | |
l = new THREE.Vector3, | |
c = new THREE.Vector3, | |
h = new THREE.Vector2, | |
p = new THREE.Vector2, | |
d = new THREE.Vector2, | |
v, m, g, y, b, w, E, S, x, T, N, C = new THREE.Vector3, | |
k = new THREE.Vector3, | |
A, O, M, _, D, P, H; | |
this.drawcalls.length === 0 && this.addDrawCall(0, e.length, 0); | |
var B = this.drawcalls; | |
for (M = 0, _ = B.length; M < _; ++M) { | |
var j = B[M].start, | |
F = B[M].count, | |
I = B[M].index; | |
for (A = j, O = j + F; A < O; A += 3) D = I + e[A], P = I + e[A + 1], H = I + e[A + 2], L(D, P, H) | |
} | |
var q = new THREE.Vector3, | |
R = new THREE.Vector3, | |
U = new THREE.Vector3, | |
z = new THREE.Vector3, | |
W, X, V; | |
for (M = 0, _ = B.length; M < _; ++M) { | |
var j = B[M].start, | |
F = B[M].count, | |
I = B[M].index; | |
for (A = j, O = j + F; A < O; A += 3) D = I + e[A], P = I + e[A + 1], H = I + e[A + 2], $(D), $(P), $(H) | |
} | |
}, | |
computeOffsets: function(e) { | |
e === undefined && (e = 65535); | |
var t = this.attributes.index.array, | |
n = this.attributes.position.array, | |
r = t.length / 3, | |
i = new Uint16Array(t.length), | |
s = 0, | |
o = 0, | |
u = [{ | |
start: 0, | |
count: 0, | |
index: 0 | |
}], | |
a = u[0], | |
f = 0, | |
l = 0, | |
c = new Int32Array(6), | |
h = new Int32Array(n.length), | |
p = new Int32Array(n.length); | |
for (var d = 0; d < n.length; d++) h[d] = -1, p[d] = -1; | |
for (var v = 0; v < r; v++) { | |
l = 0; | |
for (var m = 0; m < 3; m++) { | |
var g = t[v * 3 + m]; | |
h[g] == -1 ? (c[m * 2] = g, c[m * 2 + 1] = -1, l++) : h[g] < a.index ? (c[m * 2] = g, c[m * 2 + 1] = -1, f++) : (c[m * 2] = g, c[m * 2 + 1] = h[g]) | |
} | |
var y = o + l; | |
if (y > a.index + e) { | |
var b = { | |
start: s, | |
count: 0, | |
index: o | |
}; | |
u.push(b), a = b; | |
for (var w = 0; w < 6; w += 2) { | |
var E = c[w + 1]; | |
E > -1 && E < a.index && (c[w + 1] = -1) | |
} | |
} | |
for (var w = 0; w < 6; w += 2) { | |
var g = c[w], | |
E = c[w + 1]; | |
E === -1 && (E = o++), h[g] = E, p[E] = g, i[s++] = E - a.index, a.count++ | |
} | |
} | |
return this.reorderBuffers(i, p, o), this.offsets = u, this.drawcalls = u, u | |
}, | |
merge: function(e, t) { | |
if (e instanceof THREE.BufferGeometry == 0) { | |
THREE.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", e); | |
return | |
} | |
t === undefined && (t = 0); | |
var n = this.attributes; | |
for (var r in n) { | |
if (e.attributes[r] === undefined) continue; | |
var i = n[r], | |
s = i.array, | |
o = e.attributes[r], | |
u = o.array, | |
a = o.itemSize; | |
for (var f = 0, l = a * t; f < u.length; f++, l++) s[l] = u[f] | |
} | |
return this | |
}, | |
normalizeNormals: function() { | |
var e = this.attributes.normal.array, | |
t, n, r, i; | |
for (var s = 0, o = e.length; s < o; s += 3) t = e[s], n = e[s + 1], r = e[s + 2], i = 1 / Math.sqrt(t * t + n * n + r * r), e[s] *= i, e[s + 1] *= i, e[s + 2] *= i | |
}, | |
reorderBuffers: function(e, t, n) { | |
var r = {}; | |
for (var i in this.attributes) { | |
if (i == "index") continue; | |
var s = this.attributes[i].array; | |
r[i] = new s.constructor(this.attributes[i].itemSize * n) | |
} | |
for (var o = 0; o < n; o++) { | |
var u = t[o]; | |
for (var i in this.attributes) { | |
if (i == "index") continue; | |
var a = this.attributes[i].array, | |
f = this.attributes[i].itemSize, | |
l = r[i]; | |
for (var c = 0; c < f; c++) l[o * f + c] = a[u * f + c] | |
} | |
} | |
this.attributes.index.array = e; | |
for (var i in this.attributes) { | |
if (i == "index") continue; | |
this.attributes[i].array = r[i], this.attributes[i].numItems = this.attributes[i].itemSize * n | |
} | |
}, | |
toJSON: function() { | |
var e = { | |
metadata: { | |
version: 4, | |
type: "BufferGeometry", | |
generator: "BufferGeometryExporter" | |
}, | |
uuid: this.uuid, | |
type: this.type, | |
data: { | |
attributes: {} | |
} | |
}, | |
t = this.attributes, | |
n = this.offsets, | |
r = this.boundingSphere; | |
for (var i in t) { | |
var s = t[i], | |
o = Array.prototype.slice.call(s.array); | |
e.data.attributes[i] = { | |
itemSize: s.itemSize, | |
type: s.array.constructor.name, | |
array: o | |
} | |
} | |
return n.length > 0 && (e.data.offsets = JSON.parse(JSON.stringify(n))), r !== null && (e.data.boundingSphere = { | |
center: r.center.toArray(), | |
radius: r.radius | |
}), e | |
}, | |
clone: function() { | |
var e = new THREE.BufferGeometry; | |
for (var t in this.attributes) { | |
var n = this.attributes[t]; | |
e.addAttribute(t, n.clone()) | |
} | |
for (var r = 0, i = this.offsets.length; r < i; r++) { | |
var s = this.offsets[r]; | |
e.offsets.push({ | |
start: s.start, | |
index: s.index, | |
count: s.count | |
}) | |
} | |
return e | |
}, | |
dispose: function() { | |
this.dispatchEvent({ | |
type: "dispose" | |
}) | |
} | |
}, THREE.EventDispatcher.prototype.apply(THREE.BufferGeometry.prototype), THREE.Geometry = function() { | |
Object.defineProperty(this, "id", { | |
value: THREE.GeometryIdCount++ | |
}), this.uuid = THREE.Math.generateUUID(), this.name = "", this.type = "Geometry", this.vertices = [], this.colors = [], this.faces = [], this.faceVertexUvs = [ | |
[] | |
], this.morphTargets = [], this.morphColors = [], this.morphNormals = [], this.skinWeights = [], this.skinIndices = [], this.lineDistances = [], this.boundingBox = null, this.boundingSphere = null, this.hasTangents = !1, this.dynamic = !0, this.verticesNeedUpdate = !1, this.elementsNeedUpdate = !1, this.uvsNeedUpdate = !1, this.normalsNeedUpdate = !1, this.tangentsNeedUpdate = !1, this.colorsNeedUpdate = !1, this.lineDistancesNeedUpdate = !1, this.groupsNeedUpdate = !1 | |
}, THREE.Geometry.prototype = { | |
constructor: THREE.Geometry, | |
applyMatrix: function(e) { | |
var t = (new THREE.Matrix3).getNormalMatrix(e); | |
for (var n = 0, r = this.vertices.length; n < r; n++) { | |
var i = this.vertices[n]; | |
i.applyMatrix4(e) | |
} | |
for (var n = 0, r = this.faces.length; n < r; n++) { | |
var s = this.faces[n]; | |
s.normal.applyMatrix3(t).normalize(); | |
for (var o = 0, u = s.vertexNormals.length; o < u; o++) s.vertexNormals[o].applyMatrix3(t).normalize() | |
} | |
this.boundingBox !== null && this.computeBoundingBox(), this.boundingSphere !== null && this.computeBoundingSphere(), this.verticesNeedUpdate = !0, this.normalsNeedUpdate = !0 | |
}, | |
fromBufferGeometry: function(e) { | |
var t = this, | |
n = e.attributes, | |
r = n.position.array, | |
i = n.index !== undefined ? n.index.array : undefined, | |
s = n.normal !== undefined ? n.normal.array : undefined, | |
o = n.color !== undefined ? n.color.array : undefined, | |
u = n.uv !== undefined ? n.uv.array : undefined, | |
a = [], | |
f = []; | |
for (var l = 0, c = 0; l < r.length; l += 3, c += 2) t.vertices.push(new THREE.Vector3(r[l], r[l + 1], r[l + 2])), s !== undefined && a.push(new THREE.Vector3(s[l], s[l + 1], s[l + 2])), o !== undefined && t.colors.push(new THREE.Color(o[l], o[l + 1], o[l + 2])), u !== undefined && f.push(new THREE.Vector2(u[c], u[c + 1])); | |
var h = function(e, n, r) { | |
var i = s !== undefined ? [a[e].clone(), a[n].clone(), a[r].clone()] : [], | |
l = o !== undefined ? [t.colors[e].clone(), t.colors[n].clone(), t.colors[r].clone()] : []; | |
t.faces.push(new THREE.Face3(e, n, r, i, l)), u !== undefined && t.faceVertexUvs[0].push([f[e].clone(), f[n].clone(), f[r].clone()]) | |
}; | |
if (i !== undefined) { | |
var p = e.drawcalls; | |
if (p.length > 0) | |
for (var l = 0; l < p.length; l++) { | |
var d = p[l], | |
v = d.start, | |
m = d.count, | |
g = d.index; | |
for (var c = v, y = v + m; c < y; c += 3) h(g + i[c], g + i[c + 1], g + i[c + 2]) | |
} else | |
for (var l = 0; l < i.length; l += 3) h(i[l], i[l + 1], i[l + 2]) | |
} else | |
for (var l = 0; l < r.length / 3; l += 3) h(l, l + 1, l + 2); | |
return this.computeFaceNormals(), e.boundingBox !== null && (this.boundingBox = e.boundingBox.clone()), e.boundingSphere !== null && (this.boundingSphere = e.boundingSphere.clone()), this | |
}, | |
center: function() { | |
this.computeBoundingBox(); | |
var e = this.boundingBox.center().negate(); | |
return this.applyMatrix((new THREE.Matrix4).setPosition(e)), e | |
}, | |
computeFaceNormals: function() { | |
var e = new THREE.Vector3, | |
t = new THREE.Vector3; | |
for (var n = 0, r = this.faces.length; n < r; n++) { | |
var i = this.faces[n], | |
s = this.vertices[i.a], | |
o = this.vertices[i.b], | |
u = this.vertices[i.c]; | |
e.subVectors(u, o), t.subVectors(s, o), e.cross(t), e.normalize(), i.normal.copy(e) | |
} | |
}, | |
computeVertexNormals: function(e) { | |
var t, n, r, i, s, o; | |
o = new Array(this.vertices.length); | |
for (t = 0, n = this.vertices.length; t < n; t++) o[t] = new THREE.Vector3; | |
if (e) { | |
var u, a, f, l = new THREE.Vector3, | |
c = new THREE.Vector3; | |
for (r = 0, i = this.faces.length; r < i; r++) s = this.faces[r], u = this.vertices[s.a], a = this.vertices[s.b], f = this.vertices[s.c], l.subVectors(f, a), c.subVectors(u, a), l.cross(c), o[s.a].add(l), o[s.b].add(l), o[s.c].add(l) | |
} else | |
for (r = 0, i = this.faces.length; r < i; r++) s = this.faces[r], o[s.a].add(s.normal), o[s.b].add(s.normal), o[s.c].add(s.normal); | |
for (t = 0, n = this.vertices.length; t < n; t++) o[t].normalize(); | |
for (r = 0, i = this.faces.length; r < i; r++) s = this.faces[r], s.vertexNormals[0] = o[s.a].clone(), s.vertexNormals[1] = o[s.b].clone(), s.vertexNormals[2] = o[s.c].clone() | |
}, | |
computeMorphNormals: function() { | |
var e, t, n, r, i; | |
for (n = 0, r = this.faces.length; n < r; n++) { | |
i = this.faces[n], i.__originalFaceNormal ? i.__originalFaceNormal.copy(i.normal) : i.__originalFaceNormal = i.normal.clone(), i.__originalVertexNormals || (i.__originalVertexNormals = []); | |
for (e = 0, t = i.vertexNormals.length; e < t; e++) i.__originalVertexNormals[e] ? i.__originalVertexNormals[e].copy(i.vertexNormals[e]) : i.__originalVertexNormals[e] = i.vertexNormals[e].clone() | |
} | |
var s = new THREE.Geometry; | |
s.faces = this.faces; | |
for (e = 0, t = this.morphTargets.length; e < t; e++) { | |
if (!this.morphNormals[e]) { | |
this.morphNormals[e] = {}, this.morphNormals[e].faceNormals = [], this.morphNormals[e].vertexNormals = []; | |
var o = this.morphNormals[e].faceNormals, | |
u = this.morphNormals[e].vertexNormals, | |
a, f; | |
for (n = 0, r = this.faces.length; n < r; n++) a = new THREE.Vector3, f = { | |
a: new THREE.Vector3, | |
b: new THREE.Vector3, | |
c: new THREE.Vector3 | |
}, o.push(a), u.push(f) | |
} | |
var l = this.morphNormals[e]; | |
s.vertices = this.morphTargets[e].vertices, s.computeFaceNormals(), s.computeVertexNormals(); | |
var a, f; | |
for (n = 0, r = this.faces.length; n < r; n++) i = this.faces[n], a = l.faceNormals[n], f = l.vertexNormals[n], a.copy(i.normal), f.a.copy(i.vertexNormals[0]), f.b.copy(i.vertexNormals[1]), f.c.copy(i.vertexNormals[2]) | |
} | |
for (n = 0, r = this.faces.length; n < r; n++) i = this.faces[n], i.normal = i.__originalFaceNormal, i.vertexNormals = i.__originalVertexNormals | |
}, | |
computeTangents: function() { | |
function H(e, t, n, r, i, s, o) { | |
a = e.vertices[t], f = e.vertices[n], l = e.vertices[r], c = u[i], h = u[s], p = u[o], d = f.x - a.x, v = l.x - a.x, m = f.y - a.y, g = l.y - a.y, y = f.z - a.z, b = l.z - a.z, w = h.x - c.x, E = p.x - c.x, S = h.y - c.y, x = p.y - c.y, T = 1 / (w * x - E * S), A.set((x * d - S * v) * T, (x * m - S * g) * T, (x * y - S * b) * T), O.set((w * v - E * d) * T, (w * g - E * m) * T, (w * b - E * y) * T), k[t].add(A), k[n].add(A), k[r].add(A), L[t].add(O), L[n].add(O), L[r].add(O) | |
} | |
var e, t, n, r, i, s, o, u, a, f, l, c, h, p, d, v, m, g, y, b, w, E, S, x, T, N, C, k = [], | |
L = [], | |
A = new THREE.Vector3, | |
O = new THREE.Vector3, | |
M = new THREE.Vector3, | |
_ = new THREE.Vector3, | |
D = new THREE.Vector3, | |
P; | |
for (n = 0, r = this.vertices.length; n < r; n++) k[n] = new THREE.Vector3, L[n] = new THREE.Vector3; | |
for (e = 0, t = this.faces.length; e < t; e++) o = this.faces[e], u = this.faceVertexUvs[0][e], H(this, o.a, o.b, o.c, 0, 1, 2); | |
var B = ["a", "b", "c", "d"]; | |
for (e = 0, t = this.faces.length; e < t; e++) { | |
o = this.faces[e]; | |
for (i = 0; i < Math.min(o.vertexNormals.length, 3); i++) D.copy(o.vertexNormals[i]), s = o[B[i]], N = k[s], M.copy(N), M.sub(D.multiplyScalar(D.dot(N))).normalize(), _.crossVectors(o.vertexNormals[i], N), C = _.dot(L[s]), P = C < 0 ? -1 : 1, o.vertexTangents[i] = new THREE.Vector4(M.x, M.y, M.z, P) | |
} | |
this.hasTangents = !0 | |
}, | |
computeLineDistances: function() { | |
var e = 0, | |
t = this.vertices; | |
for (var n = 0, r = t.length; n < r; n++) n > 0 && (e += t[n].distanceTo(t[n - 1])), this.lineDistances[n] = e | |
}, | |
computeBoundingBox: function() { | |
this.boundingBox === null && (this.boundingBox = new THREE.Box3), this.boundingBox.setFromPoints(this.vertices) | |
}, | |
computeBoundingSphere: function() { | |
this.boundingSphere === null && (this.boundingSphere = new THREE.Sphere), this.boundingSphere.setFromPoints(this.vertices) | |
}, | |
merge: function(e, t, n) { | |
if (e instanceof THREE.Geometry == 0) { | |
THREE.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.", e); | |
return | |
} | |
var r, i = this.vertices.length, | |
s = this.vertices, | |
o = e.vertices, | |
u = this.faces, | |
a = e.faces, | |
f = this.faceVertexUvs[0], | |
l = e.faceVertexUvs[0]; | |
n === undefined && (n = 0), t !== undefined && (r = (new THREE.Matrix3).getNormalMatrix(t)); | |
for (var c = 0, h = o.length; c < h; c++) { | |
var p = o[c], | |
d = p.clone(); | |
t !== undefined && d.applyMatrix4(t), s.push(d) | |
} | |
for (c = 0, h = a.length; c < h; c++) { | |
var v = a[c], | |
m, g, y, b = v.vertexNormals, | |
w = v.vertexColors; | |
m = new THREE.Face3(v.a + i, v.b + i, v.c + i), m.normal.copy(v.normal), r !== undefined && m.normal.applyMatrix3(r).normalize(); | |
for (var E = 0, S = b.length; E < S; E++) g = b[E].clone(), r !== undefined && g.applyMatrix3(r).normalize(), m.vertexNormals.push(g); | |
m.color.copy(v.color); | |
for (var E = 0, S = w.length; E < S; E++) y = w[E], m.vertexColors.push(y.clone()); | |
m.materialIndex = v.materialIndex + n, u.push(m) | |
} | |
for (c = 0, h = l.length; c < h; c++) { | |
var x = l[c], | |
T = []; | |
if (x === undefined) continue; | |
for (var E = 0, S = x.length; E < S; E++) T.push(x[E].clone()); | |
f.push(T) | |
} | |
}, | |
mergeMesh: function(e) { | |
if (e instanceof THREE.Mesh == 0) { | |
THREE.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.", e); | |
return | |
} | |
e.matrixAutoUpdate && e.updateMatrix(), this.merge(e.geometry, e.matrix) | |
}, | |
mergeVertices: function() { | |
var e = {}, | |
t = [], | |
n = [], | |
r, i, s = 4, | |
o = Math.pow(10, s), | |
u, a, f, l, c, h; | |
for (u = 0, a = this.vertices.length; u < a; u++) r = this.vertices[u], i = Math.round(r.x * o) + "_" + Math.round(r.y * o) + "_" + Math.round(r.z * o), e[i] === undefined ? (e[i] = u, t.push(this.vertices[u]), n[u] = t.length - 1) : n[u] = n[e[i]]; | |
var p = []; | |
for (u = 0, a = this.faces.length; u < a; u++) { | |
f = this.faces[u], f.a = n[f.a], f.b = n[f.b], f.c = n[f.c], l = [f.a, f.b, f.c]; | |
var d = -1; | |
for (var v = 0; v < 3; v++) | |
if (l[v] == l[(v + 1) % 3]) { | |
d = v, p.push(u); | |
break | |
} | |
} | |
for (u = p.length - 1; u >= 0; u--) { | |
var m = p[u]; | |
this.faces.splice(m, 1); | |
for (c = 0, h = this.faceVertexUvs.length; c < h; c++) this.faceVertexUvs[c].splice(m, 1) | |
} | |
var g = this.vertices.length - t.length; | |
return this.vertices = t, g | |
}, | |
toJSON: function() { | |
function N(e, t, n) { | |
return n ? e | 1 << t : e & ~(1 << t) | |
} | |
function C(e) { | |
var t = e.x.toString() + e.y.toString() + e.z.toString(); | |
return a[t] !== undefined ? a[t] : (a[t] = u.length / 3, u.push(e.x, e.y, e.z), a[t]) | |
} | |
function k(e) { | |
var t = e.r.toString() + e.g.toString() + e.b.toString(); | |
return l[t] !== undefined ? l[t] : (l[t] = f.length, f.push(e.getHex()), l[t]) | |
} | |
function L(e) { | |
var t = e.x.toString() + e.y.toString(); | |
return h[t] !== undefined ? h[t] : (h[t] = c.length / 2, c.push(e.x, e.y), h[t]) | |
} | |
var e = { | |
metadata: { | |
version: 4, | |
type: "BufferGeometry", | |
generator: "BufferGeometryExporter" | |
}, | |
uuid: this.uuid, | |
type: this.type | |
}; | |
this.name !== "" && (e.name = this.name); | |
if (this.parameters !== undefined) { | |
var t = this.parameters; | |
for (var n in t) t[n] !== undefined && (e[n] = t[n]); | |
return e | |
} | |
var r = []; | |
for (var i = 0; i < this.vertices.length; i++) { | |
var s = this.vertices[i]; | |
r.push(s.x, s.y, s.z) | |
} | |
var o = [], | |
u = [], | |
a = {}, | |
f = [], | |
l = {}, | |
c = [], | |
h = {}; | |
for (var i = 0; i < this.faces.length; i++) { | |
var p = this.faces[i], | |
d = !1, | |
v = !1, | |
m = this.faceVertexUvs[0][i] !== undefined, | |
g = p.normal.length() > 0, | |
y = p.vertexNormals.length > 0, | |
b = p.color.r !== 1 || p.color.g !== 1 || p.color.b !== 1, | |
w = p.vertexColors.length > 0, | |
E = 0; | |
E = N(E, 0, 0), E = N(E, 1, d), E = N(E, 2, v), E = N(E, 3, m), E = N(E, 4, g), E = N(E, 5, y), E = N(E, 6, b), E = N(E, 7, w), o.push(E), o.push(p.a, p.b, p.c); | |
if (m) { | |
var S = this.faceVertexUvs[0][i]; | |
o.push(L(S[0]), L(S[1]), L(S[2])) | |
} | |
g && o.push(C(p.normal)); | |
if (y) { | |
var x = p.vertexNormals; | |
o.push(C(x[0]), C(x[1]), C(x[2])) | |
} | |
b && o.push(k(p.color)); | |
if (w) { | |
var T = p.vertexColors; | |
o.push(k(T[0]), k(T[1]), k(T[2])) | |
} | |
} | |
return e.data = {}, e.data.vertices = r, e.data.normals = u, f.length > 0 && (e.data.colors = f), c.length > 0 && (e.data.uvs = [c]), e.data.faces = o, e | |
}, | |
clone: function() { | |
var e = new THREE.Geometry, | |
t = this.vertices; | |
for (var n = 0, r = t.length; n < r; n++) e.vertices.push(t[n].clone()); | |
var i = this.faces; | |
for (var n = 0, r = i.length; n < r; n++) e.faces.push(i[n].clone()); | |
for (var n = 0, r = this.faceVertexUvs.length; n < r; n++) { | |
var s = this.faceVertexUvs[n]; | |
e.faceVertexUvs[n] === undefined && (e.faceVertexUvs[n] = []); | |
for (var o = 0, u = s.length; o < u; o++) { | |
var a = s[o], | |
f = []; | |
for (var l = 0, c = a.length; l < c; l++) { | |
var h = a[l]; | |
f.push(h.clone()) | |
} | |
e.faceVertexUvs[n].push(f) | |
} | |
} | |
return e | |
}, | |
dispose: function() { | |
this.dispatchEvent({ | |
type: "dispose" | |
}) | |
} | |
}, THREE.EventDispatcher.prototype.apply(THREE.Geometry.prototype), THREE.GeometryIdCount = 0, THREE.Camera = function() { | |
THREE.Object3D.call(this), this.type = "Camera", this.matrixWorldInverse = new THREE.Matrix4, this.projectionMatrix = new THREE.Matrix4 | |
}, THREE.Camera.prototype = Object.create(THREE.Object3D.prototype), THREE.Camera.prototype.constructor = THREE.Camera, THREE.Camera.prototype.getWorldDirection = function() { | |
var e = new THREE.Quaternion; | |
return function(t) { | |
var n = t || new THREE.Vector3; | |
return this.getWorldQuaternion(e), n.set(0, 0, -1).applyQuaternion(e) | |
} | |
}(), THREE.Camera.prototype.lookAt = function() { | |
var e = new THREE.Matrix4; | |
return function(t) { | |
e.lookAt(this.position, t, this.up), this.quaternion.setFromRotationMatrix(e) | |
} | |
}(), THREE.Camera.prototype.clone = function(e) { | |
return e === undefined && (e = new THREE.Camera), THREE.Object3D.prototype.clone.call(this, e), e.matrixWorldInverse.copy(this.matrixWorldInverse), e.projectionMatrix.copy(this.projectionMatrix), e | |
}, THREE.OrthographicCamera = function(e, t, n, r, i, s) { | |
THREE.Camera.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.left = e, this.right = t, this.top = n, this.bottom = r, this.near = i !== undefined ? i : .1, this.far = s !== undefined ? s : 2e3, this.updateProjectionMatrix() | |
}, THREE.OrthographicCamera.prototype = Object.create(THREE.Camera.prototype), THREE.OrthographicCamera.prototype.constructor = THREE.OrthographicCamera, THREE.OrthographicCamera.prototype.updateProjectionMatrix = function() { | |
var e = (this.right - this.left) / (2 * this.zoom), | |
t = (this.top - this.bottom) / (2 * this.zoom), | |
n = (this.right + this.left) / 2, | |
r = (this.top + this.bottom) / 2; | |
this.projectionMatrix.makeOrthographic(n - e, n + e, r + t, r - t, this.near, this.far) | |
}, THREE.OrthographicCamera.prototype.clone = function() { | |
var e = new THREE.OrthographicCamera; | |
return THREE.Camera.prototype.clone.call(this, e), e.zoom = this.zoom, e.left = this.left, e.right = this.right, e.top = this.top, e.bottom = this.bottom, e.near = this.near, e.far = this.far, e.projectionMatrix.copy(this.projectionMatrix), e | |
}, THREE.PerspectiveCamera = function(e, t, n, r) { | |
THREE.Camera.call(this), this.type = "PerspectiveCamera", this.zoom = 1, this.fov = e !== undefined ? e : 50, this.aspect = t !== undefined ? t : 1, this.near = n !== undefined ? n : .1, this.far = r !== undefined ? r : 2e3, this.updateProjectionMatrix() | |
}, THREE.PerspectiveCamera.prototype = Object.create(THREE.Camera.prototype), THREE.PerspectiveCamera.prototype.constructor = THREE.PerspectiveCamera, THREE.PerspectiveCamera.prototype.setLens = function(e, t) { | |
t === undefined && (t = 24), this.fov = 2 * THREE.Math.radToDeg(Math.atan(t / (e * 2))), this.updateProjectionMatrix() | |
}, THREE.PerspectiveCamera.prototype.setViewOffset = function(e, t, n, r, i, s) { | |
this.fullWidth = e, this.fullHeight = t, this.x = n, this.y = r, this.width = i, this.height = s, this.updateProjectionMatrix() | |
}, THREE.PerspectiveCamera.prototype.updateProjectionMatrix = function() { | |
var e = THREE.Math.radToDeg(2 * Math.atan(Math.tan(THREE.Math.degToRad(this.fov) * .5) / this.zoom)); | |
if (this.fullWidth) { | |
var t = this.fullWidth / this.fullHeight, | |
n = Math.tan(THREE.Math.degToRad(e * .5)) * this.near, | |
r = -n, | |
i = t * r, | |
s = t * n, | |
o = Math.abs(s - i), | |
u = Math.abs(n - r); | |
this.projectionMatrix.makeFrustum(i + this.x * o / this.fullWidth, i + (this.x + this.width) * o / this.fullWidth, n - (this.y + this.height) * u / this.fullHeight, n - this.y * u / this.fullHeight, this.near, this.far) | |
} else this.projectionMatrix.makePerspective(e, this.aspect, this.near, this.far) | |
}, THREE.PerspectiveCamera.prototype.clone = function() { | |
var e = new THREE.PerspectiveCamera; | |
return THREE.Camera.prototype.clone.call(this, e), e.zoom = this.zoom, e.fov = this.fov, e.aspect = this.aspect, e.near = this.near, e.far = this.far, e.projectionMatrix.copy(this.projectionMatrix), e | |
}, THREE.Cache = { | |
files: {}, | |
add: function(e, t) { | |
this.files[e] = t | |
}, | |
get: function(e) { | |
return this.files[e] | |
}, | |
remove: function(e) { | |
delete this.files[e] | |
}, | |
clear: function() { | |
this.files = {} | |
} | |
}, THREE.Loader = function(e) { | |
this.showStatus = e, this.statusDomElement = e ? THREE.Loader.prototype.addStatusElement() : null, this.imageLoader = new THREE.ImageLoader, this.onLoadStart = function() {}, this.onLoadProgress = function() {}, this.onLoadComplete = function() {} | |
}, THREE.Loader.prototype = { | |
constructor: THREE.Loader, | |
crossOrigin: undefined, | |
addStatusElement: function() { | |
var e = document.createElement("div"); | |
return e.style.position = "absolute", e.style.right = "0px", e.style.top = "0px", e.style.fontSize = "0.8em", e.style.textAlign = "left", e.style.background = "rgba(0,0,0,0.25)", e.style.color = "#fff", e.style.width = "120px", e.style.padding = "0.5em 0.5em 0.5em 0.5em", e.style.zIndex = 1e3, e.innerHTML = "Loading ...", e | |
}, | |
updateProgress: function(e) { | |
var t = "Loaded "; | |
e.total ? t += (100 * e.loaded / e.total).toFixed(0) + "%" : t += (e.loaded / 1024).toFixed(2) + " KB", this.statusDomElement.innerHTML = t | |
}, | |
extractUrlBase: function(e) { | |
var t = e.split("/"); | |
return t.length === 1 ? "./" : (t.pop(), t.join("/") + "/") | |
}, | |
initMaterials: function(e, t) { | |
var n = []; | |
for (var r = 0; r < e.length; ++r) n[r] = this.createMaterial(e[r], t); | |
return n | |
}, | |
needsTangents: function(e) { | |
for (var t = 0, n = e.length; t < n; t++) { | |
var r = e[t]; | |
if (r instanceof THREE.ShaderMaterial) return !0 | |
} | |
return !1 | |
}, | |
createMaterial: function(e, t) { | |
function r(e) { | |
var t = Math.log(e) / Math.LN2; | |
return Math.pow(2, Math.round(t)) | |
} | |
function i(e, i, s, o, u, a, f) { | |
var l = t + s, | |
c, h = THREE.Loader.Handlers.get(l); | |
h !== null ? c = h.load(l) : (c = new THREE.Texture, h = n.imageLoader, h.crossOrigin = n.crossOrigin, h.load(l, function(e) { | |
if (THREE.Math.isPowerOfTwo(e.width) === !1 || THREE.Math.isPowerOfTwo(e.height) === !1) { | |
var t = r(e.width), | |
n = r(e.height), | |
i = document.createElement("canvas"); | |
i.width = t, i.height = n; | |
var s = i.getContext("2d"); | |
s.drawImage(e, 0, 0, t, n), c.image = i | |
} else c.image = e; | |
c.needsUpdate = !0 | |
})), c.sourceFile = s, o && (c.repeat.set(o[0], o[1]), o[0] !== 1 && (c.wrapS = THREE.RepeatWrapping), o[1] !== 1 && (c.wrapT = THREE.RepeatWrapping)), u && c.offset.set(u[0], u[1]); | |
if (a) { | |
var p = { | |
repeat: THREE.RepeatWrapping, | |
mirror: THREE.MirroredRepeatWrapping | |
}; | |
p[a[0]] !== undefined && (c.wrapS = p[a[0]]), p[a[1]] !== undefined && (c.wrapT = p[a[1]]) | |
} | |
f && (c.anisotropy = f), e[i] = c | |
} | |
function s(e) { | |
return (e[0] * 255 << 16) + (e[1] * 255 << 8) + e[2] * 255 | |
} | |
var n = this, | |
o = "MeshLambertMaterial", | |
u = { | |
color: 15658734, | |
opacity: 1, | |
map: null, | |
lightMap: null, | |
normalMap: null, | |
bumpMap: null, | |
wireframe: !1 | |
}; | |
if (e.shading) { | |
var a = e.shading.toLowerCase(); | |
a === "phong" ? o = "MeshPhongMaterial" : a === "basic" && (o = "MeshBasicMaterial") | |
} | |
e.blending !== undefined && THREE[e.blending] !== undefined && (u.blending = THREE[e.blending]), e.transparent !== undefined && (u.transparent = e.transparent), e.opacity !== undefined && e.opacity < 1 && (u.transparent = !0), e.depthTest !== undefined && (u.depthTest = e.depthTest), e.depthWrite !== undefined && (u.depthWrite = e.depthWrite), e.visible !== undefined && (u.visible = e.visible), e.flipSided !== undefined && (u.side = THREE.BackSide), e.doubleSided !== undefined && (u.side = THREE.DoubleSide), e.wireframe !== undefined && (u.wireframe = e.wireframe), e.vertexColors !== undefined && (e.vertexColors === "face" ? u.vertexColors = THREE.FaceColors : e.vertexColors && (u.vertexColors = THREE.VertexColors)), e.colorDiffuse ? u.color = s(e.colorDiffuse) : e.DbgColor && (u.color = e.DbgColor), e.colorSpecular && (u.specular = s(e.colorSpecular)), e.colorEmissive && (u.emissive = s(e.colorEmissive)), e.transparency !== undefined && (console.warn("THREE.Loader: transparency has been renamed to opacity"), e.opacity = e.transparency), e.opacity !== undefined && (u.opacity = e.opacity), e.specularCoef && (u.shininess = e.specularCoef), e.mapDiffuse && t && i(u, "map", e.mapDiffuse, e.mapDiffuseRepeat, e.mapDiffuseOffset, e.mapDiffuseWrap, e.mapDiffuseAnisotropy), e.mapLight && t && i(u, "lightMap", e.mapLight, e.mapLightRepeat, e.mapLightOffset, e.mapLightWrap, e.mapLightAnisotropy), e.mapBump && t && i(u, "bumpMap", e.mapBump, e.mapBumpRepeat, e.mapBumpOffset, e.mapBumpWrap, e.mapBumpAnisotropy), e.mapNormal && t && i(u, "normalMap", e.mapNormal, e.mapNormalRepeat, e.mapNormalOffset, e.mapNormalWrap, e.mapNormalAnisotropy), e.mapSpecular && t && i(u, "specularMap", e.mapSpecular, e.mapSpecularRepeat, e.mapSpecularOffset, e.mapSpecularWrap, e.mapSpecularAnisotropy), e.mapAlpha && t && i(u, "alphaMap", e.mapAlpha, e.mapAlphaRepeat, e.mapAlphaOffset, e.mapAlphaWrap, e.mapAlphaAnisotropy), e.mapBumpScale && (u.bumpScale = e.mapBumpScale), e.mapNormalFactor && (u.normalScale = new THREE.Vector2(e.mapNormalFactor, e.mapNormalFactor)); | |
var f = new THREE[o](u); | |
return e.DbgName !== undefined && (f.name = e.DbgName), f | |
} | |
}, THREE.Loader.Handlers = { | |
handlers: [], | |
add: function(e, t) { | |
this.handlers.push(e, t) | |
}, | |
get: function(e) { | |
for (var t = 0, n = this.handlers.length; t < n; t += 2) { | |
var r = this.handlers[t], | |
i = this.handlers[t + 1]; | |
if (r.test(e)) return i | |
} | |
return null | |
} | |
}, THREE.ImageLoader = function(e) { | |
this.manager = e !== undefined ? e : THREE.DefaultLoadingManager | |
}, THREE.ImageLoader.prototype = { | |
constructor: THREE.ImageLoader, | |
load: function(e, t, n, r) { | |
var i = this, | |
s = THREE.Cache.get(e); | |
if (s !== undefined) { | |
t(s); | |
return | |
} | |
var o = document.createElement("img"); | |
return o.addEventListener("load", function(n) { | |
THREE.Cache.add(e, this), t && t(this), i.manager.itemEnd(e) | |
}, !1), n !== undefined && o.addEventListener("progress", function(e) { | |
n(e) | |
}, !1), r !== undefined && o.addEventListener("error", function(e) { | |
r(e) | |
}, !1), this.crossOrigin !== undefined && (o.crossOrigin = this.crossOrigin), o.src = e, i.manager.itemStart(e), o | |
}, | |
setCrossOrigin: function(e) { | |
this.crossOrigin = e | |
} | |
}, THREE.LoadingManager = function(e, t, n) { | |
var r = this, | |
i = 0, | |
s = 0; | |
this.onLoad = e, this.onProgress = t, this.onError = n, this.itemStart = function(e) { | |
s++ | |
}, this.itemEnd = function(e) { | |
i++, r.onProgress !== undefined && r.onProgress(e, i, s), i === s && r.onLoad !== undefined && r.onLoad() | |
} | |
}, THREE.DefaultLoadingManager = new THREE.LoadingManager, THREE.Material = function() { | |
Object.defineProperty(this, "id", { | |
value: THREE.MaterialIdCount++ | |
}), this.uuid = THREE.Math.generateUUID(), this.name = "", this.type = "Material", this.side = THREE.FrontSide, this.opacity = 1, this.transparent = !1, this.blending = THREE.NormalBlending, this.blendSrc = THREE.SrcAlphaFactor, this.blendDst = THREE.OneMinusSrcAlphaFactor, this.blendEquation = THREE.AddEquation, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthTest = !0, this.depthWrite = !0, this.colorWrite = !0, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.alphaTest = 0, this.overdraw = 0, this.visible = !0, this._needsUpdate = !0 | |
}, THREE.Material.prototype = { | |
constructor: THREE.Material, | |
get needsUpdate() { | |
return this._needsUpdate | |
}, | |
set needsUpdate(e) { | |
e === !0 && this.update(), this._needsUpdate = e | |
}, | |
setValues: function(e) { | |
if (e === undefined) return; | |
for (var t in e) { | |
var n = e[t]; | |
if (n === undefined) { | |
THREE.warn("THREE.Material: '" + t + "' parameter is undefined."); | |
continue | |
} | |
if (t in this) { | |
var r = this[t]; | |
r instanceof THREE.Color ? r.set(n) : r instanceof THREE.Vector3 && n instanceof THREE.Vector3 ? r.copy(n) : t == "overdraw" ? this[t] = Number(n) : this[t] = n | |
} | |
} | |
}, | |
toJSON: function() { | |
var e = { | |
metadata: { | |
version: 4.2, | |
type: "material", | |
generator: "MaterialExporter" | |
}, | |
uuid: this.uuid, | |
type: this.type | |
}; | |
return this.name !== "" && (e.name = this.name), this instanceof THREE.MeshBasicMaterial ? (e.color = this.color.getHex(), this.vertexColors !== THREE.NoColors && (e.vertexColors = this.vertexColors), this.blending !== THREE.NormalBlending && (e.blending = this.blending), this.side !== THREE.FrontSide && (e.side = this.side)) : this instanceof THREE.MeshLambertMaterial ? (e.color = this.color.getHex(), e.emissive = this.emissive.getHex(), this.vertexColors !== THREE.NoColors && (e.vertexColors = this.vertexColors), this.shading !== THREE.SmoothShading && (e.shading = this.shading), this.blending !== THREE.NormalBlending && (e.blending = this.blending), this.side !== THREE.FrontSide && (e.side = this.side)) : this instanceof THREE.MeshPhongMaterial ? (e.color = this.color.getHex(), e.emissive = this.emissive.getHex(), e.specular = this.specular.getHex(), e.shininess = this.shininess, this.vertexColors !== THREE.NoColors && (e.vertexColors = this.vertexColors), this.shading !== THREE.SmoothShading && (e.shading = this.shading), this.blending !== THREE.NormalBlending && (e.blending = this.blending), this.side !== THREE.FrontSide && (e.side = this.side)) : this instanceof THREE.MeshNormalMaterial ? (this.blending !== THREE.NormalBlending && (e.blending = this.blending), this.side !== THREE.FrontSide && (e.side = this.side)) : this instanceof THREE.MeshDepthMaterial ? (this.blending !== THREE.NormalBlending && (e.blending = this.blending), this.side !== THREE.FrontSide && (e.side = this.side)) : this instanceof THREE.PointCloudMaterial ? (e.size = this.size, e.sizeAttenuation = this.sizeAttenuation, e.color = this.color.getHex(), this.vertexColors !== THREE.NoColors && (e.vertexColors = this.vertexColors), this.blending !== THREE.NormalBlending && (e.blending = this.blending)) : this instanceof THREE.ShaderMaterial ? (e.uniforms = this.uniforms, e.vertexShader = this.vertexShader, e.fragmentShader = this.fragmentShader) : this instanceof THREE.SpriteMaterial && (e.color = this.color.getHex()), this.opacity < 1 && (e.opacity = this.opacity), this.transparent !== !1 && (e.transparent = this.transparent), this.wireframe !== !1 && (e.wireframe = this.wireframe), e | |
}, | |
clone: function(e) { | |
return e === undefined && (e = new THREE.Material), e.name = this.name, e.side = this.side, e.opacity = this.opacity, e.transparent = this.transparent, e.blending = this.blending, e.blendSrc = this.blendSrc, e.blendDst = this.blendDst, e.blendEquation = this.blendEquation, e.blendSrcAlpha = this.blendSrcAlpha, e.blendDstAlpha = this.blendDstAlpha, e.blendEquationAlpha = this.blendEquationAlpha, e.depthTest = this.depthTest, e.depthWrite = this.depthWrite, e.polygonOffset = this.polygonOffset, e.polygonOffsetFactor = this.polygonOffsetFactor, e.polygonOffsetUnits = this.polygonOffsetUnits, e.alphaTest = this.alphaTest, e.overdraw = this.overdraw, e.visible = this.visible, e | |
}, | |
update: function() { | |
this.dispatchEvent({ | |
type: "update" | |
}) | |
}, | |
dispose: function() { | |
this.dispatchEvent({ | |
type: "dispose" | |
}) | |
} | |
}, THREE.EventDispatcher.prototype.apply(THREE.Material.prototype), THREE.MaterialIdCount = 0, THREE.ShaderMaterial = function(e) { | |
THREE.Material.call(this), this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.attributes = null, this.vertexShader = "void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", this.fragmentShader = "void main() {\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", this.shading = THREE.SmoothShading, this.linewidth = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.lights = !1, this.vertexColors = THREE.NoColors, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.defaultAttributeValues = { | |
color: [1, 1, 1], | |
uv: [0, 0], | |
uv2: [0, 0] | |
}, this.index0AttributeName = undefined, this.setValues(e) | |
}, THREE.ShaderMaterial.prototype = Object.create(THREE.Material.prototype), THREE.ShaderMaterial.prototype.constructor = THREE.ShaderMaterial, THREE.ShaderMaterial.prototype.clone = function(e) { | |
return e === undefined && (e = new THREE.ShaderMaterial), THREE.Material.prototype.clone.call(this, e), e.fragmentShader = this.fragmentShader, e.vertexShader = this.vertexShader, e.uniforms = THREE.UniformsUtils.clone(this.uniforms), e.attributes = this.attributes, e.defines = this.defines, e.shading = this.shading, e.wireframe = this.wireframe, e.wireframeLinewidth = this.wireframeLinewidth, e.fog = this.fog, e.lights = this.lights, e.vertexColors = this.vertexColors, e.skinning = this.skinning, e.morphTargets = this.morphTargets, e.morphNormals = this.morphNormals, e | |
}, THREE.RawShaderMaterial = function(e) { | |
THREE.ShaderMaterial.call(this, e), this.type = "RawShaderMaterial" | |
}, THREE.RawShaderMaterial.prototype = Object.create(THREE.ShaderMaterial.prototype), THREE.RawShaderMaterial.prototype.constructor = THREE.RawShaderMaterial, THREE.RawShaderMaterial.prototype.clone = function() { | |
var e = new THREE.RawShaderMaterial; | |
return THREE.ShaderMaterial.prototype.clone.call(this, e), e | |
}, THREE.Texture = function(e, t, n, r, i, s, o, u, a) { | |
Object.defineProperty(this, "id", { | |
value: THREE.TextureIdCount++ | |
}), this.uuid = THREE.Math.generateUUID(), this.name = "", this.sourceFile = "", this.image = e !== undefined ? e : THREE.Texture.DEFAULT_IMAGE, this.mipmaps = [], this.mapping = t !== undefined ? t : THREE.Texture.DEFAULT_MAPPING, this.wrapS = n !== undefined ? n : THREE.ClampToEdgeWrapping, this.wrapT = r !== undefined ? r : THREE.ClampToEdgeWrapping, this.magFilter = i !== undefined ? i : THREE.LinearFilter, this.minFilter = s !== undefined ? s : THREE.LinearMipMapLinearFilter, this.anisotropy = a !== undefined ? a : 1, this.format = o !== undefined ? o : THREE.RGBAFormat, this.type = u !== undefined ? u : THREE.UnsignedByteType, this.offset = new THREE.Vector2(0, 0), this.repeat = new THREE.Vector2(1, 1), this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this._needsUpdate = !1, this.onUpdate = null | |
}, THREE.Texture.DEFAULT_IMAGE = undefined, THREE.Texture.DEFAULT_MAPPING = THREE.UVMapping, THREE.Texture.prototype = { | |
constructor: THREE.Texture, | |
get needsUpdate() { | |
return this._needsUpdate | |
}, | |
set needsUpdate(e) { | |
e === !0 && this.update(), this._needsUpdate = e | |
}, | |
clone: function(e) { | |
return e === undefined && (e = new THREE.Texture), e.image = this.image, e.mipmaps = this.mipmaps.slice(0), e.mapping = this.mapping, e.wrapS = this.wrapS, e.wrapT = this.wrapT, e.magFilter = this.magFilter, e.minFilter = this.minFilter, e.anisotropy = this.anisotropy, e.format = this.format, e.type = this.type, e.offset.copy(this.offset), e.repeat.copy(this.repeat), e.generateMipmaps = this.generateMipmaps, e.premultiplyAlpha = this.premultiplyAlpha, e.flipY = this.flipY, e.unpackAlignment = this.unpackAlignment, e | |
}, | |
update: function() { | |
this.dispatchEvent({ | |
type: "update" | |
}) | |
}, | |
dispose: function() { | |
this.dispatchEvent({ | |
type: "dispose" | |
}) | |
} | |
}, THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype), THREE.TextureIdCount = 0, THREE.CubeTexture = function(e, t, n, r, i, s, o, u, a) { | |
t = t !== undefined ? t : THREE.CubeReflectionMapping, THREE.Texture.call(this, e, t, n, r, i, s, o, u, a), this.images = e | |
}, THREE.CubeTexture.prototype = Object.create(THREE.Texture.prototype), THREE.CubeTexture.prototype.constructor = THREE.CubeTexture, THREE.CubeTexture.clone = function(e) { | |
return e === undefined && (e = new THREE.CubeTexture), THREE.Texture.prototype.clone.call(this, e), e.images = this.images, e | |
}, THREE.VideoTexture = function(e, t, n, r, i, s, o, u, a) { | |
THREE.Texture.call(this, e, t, n, r, i, s, o, u, a), this.generateMipmaps = !1; | |
var f = this, | |
l = function() { | |
requestAnimationFrame(l), e.readyState === e.HAVE_ENOUGH_DATA && (f.needsUpdate = !0) | |
}; | |
l() | |
}, THREE.VideoTexture.prototype = Object.create(THREE.Texture.prototype), THREE.VideoTexture.prototype.constructor = THREE.VideoTexture, THREE.Group = function() { | |
THREE.Object3D.call(this), this.type = "Group" | |
}, THREE.Group.prototype = Object.create(THREE.Object3D.prototype), THREE.Group.prototype.constructor = THREE.Group, THREE.Line = function(e, t, n) { | |
THREE.Object3D.call(this), this.type = "Line", this.geometry = e !== undefined ? e : new THREE.Geometry, this.material = t !== undefined ? t : new THREE.LineBasicMaterial({ | |
color: Math.random() * 16777215 | |
}), this.mode = n !== undefined ? n : THREE.LineStrip | |
}, THREE.LineStrip = 0, THREE.LinePieces = 1, THREE.Line.prototype = Object.create(THREE.Object3D.prototype), THREE.Line.prototype.constructor = THREE.Line, THREE.Line.prototype.raycast = function() { | |
var e = new THREE.Matrix4, | |
t = new THREE.Ray, | |
n = new THREE.Sphere; | |
return function(r, i) { | |
var s = r.linePrecision, | |
o = s * s, | |
u = this.geometry; | |
u.boundingSphere === null && u.computeBoundingSphere(), n.copy(u.boundingSphere), n.applyMatrix4(this.matrixWorld); | |
if (r.ray.isIntersectionSphere(n) === !1) return; | |
e.getInverse(this.matrixWorld), t.copy(r.ray).applyMatrix4(e); | |
var a = new THREE.Vector3, | |
f = new THREE.Vector3, | |
l = new THREE.Vector3, | |
c = new THREE.Vector3, | |
h = this.mode === THREE.LineStrip ? 1 : 2; | |
if (u instanceof THREE.BufferGeometry) { | |
var p = u.attributes; | |
if (p.index !== undefined) { | |
var d = p.index.array, | |
v = p.position.array, | |
m = u.offsets; | |
m.length === 0 && (m = [{ | |
start: 0, | |
count: d.length, | |
index: 0 | |
}]); | |
for (var g = 0; g < m.length; g++) { | |
var y = m[g].start, | |
b = m[g].count, | |
w = m[g].index; | |
for (var E = y; E < y + b - 1; E += h) { | |
var S = w + d[E], | |
x = w + d[E + 1]; | |
a.fromArray(v, S * 3), f.fromArray(v, x * 3); | |
var T = t.distanceSqToSegment(a, f, c, l); | |
if (T > o) continue; | |
var N = t.origin.distanceTo(c); | |
if (N < r.near || N > r.far) continue; | |
i.push({ | |
distance: N, | |
point: l.clone().applyMatrix4(this.matrixWorld), | |
index: E, | |
offsetIndex: g, | |
face: null, | |
faceIndex: null, | |
object: this | |
}) | |
} | |
} | |
} else { | |
var v = p.position.array; | |
for (var E = 0; E < v.length / 3 - 1; E += h) { | |
a.fromArray(v, 3 * E), f.fromArray(v, 3 * E + 3); | |
var T = t.distanceSqToSegment(a, f, c, l); | |
if (T > o) continue; | |
var N = t.origin.distanceTo(c); | |
if (N < r.near || N > r.far) continue; | |
i.push({ | |
distance: N, | |
point: l.clone().applyMatrix4(this.matrixWorld), | |
index: E, | |
face: null, | |
faceIndex: null, | |
object: this | |
}) | |
} | |
} | |
} else if (u instanceof THREE.Geometry) { | |
var C = u.vertices, | |
k = C.length; | |
for (var E = 0; E < k - 1; E += h) { | |
var T = t.distanceSqToSegment(C[E], C[E + 1], c, l); | |
if (T > o) continue; | |
var N = t.origin.distanceTo(c); | |
if (N < r.near || N > r.far) continue; | |
i.push({ | |
distance: N, | |
point: l.clone().applyMatrix4(this.matrixWorld), | |
index: E, | |
face: null, | |
faceIndex: null, | |
object: this | |
}) | |
} | |
} | |
} | |
}(), THREE.Line.prototype.clone = function(e) { | |
return e === undefined && (e = new THREE.Line(this.geometry, this.material, this.mode)), THREE.Object3D.prototype.clone.call(this, e), e | |
}, THREE.Mesh = function(e, t) { | |
THREE.Object3D.call(this), this.type = "Mesh", this.geometry = e !== undefined ? e : new THREE.Geometry, this.material = t !== undefined ? t : new THREE.MeshBasicMaterial({ | |
color: Math.random() * 16777215 | |
}), this.updateMorphTargets() | |
}, THREE.Mesh.prototype = Object.create(THREE.Object3D.prototype), THREE.Mesh.prototype.constructor = THREE.Mesh, THREE.Mesh.prototype.updateMorphTargets = function() { | |
if (this.geometry.morphTargets !== undefined && this.geometry.morphTargets.length > 0) { | |
this.morphTargetBase = -1, this.morphTargetForcedOrder = [], this.morphTargetInfluences = [], this.morphTargetDictionary = {}; | |
for (var e = 0, t = this.geometry.morphTargets.length; e < t; e++) this.morphTargetInfluences.push(0), this.morphTargetDictionary[this.geometry.morphTargets[e].name] = e | |
} | |
}, THREE.Mesh.prototype.getMorphTargetIndexByName = function(e) { | |
return this.morphTargetDictionary[e] !== undefined ? this.morphTargetDictionary[e] : (THREE.warn("THREE.Mesh.getMorphTargetIndexByName: morph target " + e + " does not exist. Returning 0."), 0) | |
}, THREE.Mesh.prototype.raycast = function() { | |
var e = new THREE.Matrix4, | |
t = new THREE.Ray, | |
n = new THREE.Sphere, | |
r = new THREE.Vector3, | |
i = new THREE.Vector3, | |
s = new THREE.Vector3; | |
return function(o, u) { | |
var a = this.geometry; | |
a.boundingSphere === null && a.computeBoundingSphere(), n.copy(a.boundingSphere), n.applyMatrix4(this.matrixWorld); | |
if (o.ray.isIntersectionSphere(n) === !1) return; | |
e.getInverse(this.matrixWorld), t.copy(o.ray).applyMatrix4(e); | |
if (a.boundingBox !== null && t.isIntersectionBox(a.boundingBox) === !1) return; | |
if (a instanceof THREE.BufferGeometry) { | |
var f = this.material; | |
if (f === undefined) return; | |
var l = a.attributes, | |
c, h, p, d = o.precision; | |
if (l.index !== undefined) { | |
var v = l.index.array, | |
m = l.position.array, | |
g = a.offsets; | |
g.length === 0 && (g = [{ | |
start: 0, | |
count: v.length, | |
index: 0 | |
}]); | |
for (var y = 0, b = g.length; y < b; ++y) { | |
var w = g[y].start, | |
E = g[y].count, | |
S = g[y].index; | |
for (var x = w, T = w + E; x < T; x += 3) { | |
c = S + v[x], h = S + v[x + 1], p = S + v[x + 2], r.fromArray(m, c * 3), i.fromArray(m, h * 3), s.fromArray(m, p * 3); | |
if (f.side === THREE.BackSide) var N = t.intersectTriangle(s, i, r, !0); | |
else var N = t.intersectTriangle(r, i, s, f.side !== THREE.DoubleSide); | |
if (N === null) continue; | |
N.applyMatrix4(this.matrixWorld); | |
var C = o.ray.origin.distanceTo(N); | |
if (C < d || C < o.near || C > o.far) continue; | |
u.push({ | |
distance: C, | |
point: N, | |
face: new THREE.Face3(c, h, p, THREE.Triangle.normal(r, i, s)), | |
faceIndex: null, | |
object: this | |
}) | |
} | |
} | |
} else { | |
var m = l.position.array; | |
for (var x = 0, k = 0, T = m.length; x < T; x += 3, k += 9) { | |
c = x, h = x + 1, p = x + 2, r.fromArray(m, k), i.fromArray(m, k + 3), s.fromArray(m, k + 6); | |
if (f.side === THREE.BackSide) var N = t.intersectTriangle(s, i, r, !0); | |
else var N = t.intersectTriangle(r, i, s, f.side !== THREE.DoubleSide); | |
if (N === null) continue; | |
N.applyMatrix4(this.matrixWorld); | |
var C = o.ray.origin.distanceTo(N); | |
if (C < d || C < o.near || C > o.far) continue; | |
u.push({ | |
distance: C, | |
point: N, | |
face: new THREE.Face3(c, h, p, THREE.Triangle.normal(r, i, s)), | |
faceIndex: null, | |
object: this | |
}) | |
} | |
} | |
} else if (a instanceof THREE.Geometry) { | |
var L = this.material instanceof THREE.MeshFaceMaterial, | |
A = L === !0 ? this.material.materials : null, | |
c, h, p, d = o.precision, | |
O = a.vertices; | |
for (var M = 0, _ = a.faces.length; M < _; M++) { | |
var D = a.faces[M], | |
f = L === !0 ? A[D.materialIndex] : this.material; | |
if (f === undefined) continue; | |
c = O[D.a], h = O[D.b], p = O[D.c]; | |
if (f.morphTargets === !0) { | |
var P = a.morphTargets, | |
H = this.morphTargetInfluences; | |
r.set(0, 0, 0), i.set(0, 0, 0), s.set(0, 0, 0); | |
for (var B = 0, j = P.length; B < j; B++) { | |
var F = H[B]; | |
if (F === 0) continue; | |
var I = P[B].vertices; | |
r.x += (I[D.a].x - c.x) * F, r.y += (I[D.a].y - c.y) * F, r.z += (I[D.a].z - c.z) * F, i.x += (I[D.b].x - h.x) * F, i.y += (I[D.b].y - h.y) * F, i.z += (I[D.b].z - h.z) * F, s.x += (I[D.c].x - p.x) * F, s.y += (I[D.c].y - p.y) * F, s.z += (I[D.c].z - p.z) * F | |
} | |
r.add(c), i.add(h), s.add(p), c = r, h = i, p = s | |
} | |
if (f.side === THREE.BackSide) var N = t.intersectTriangle(p, h, c, !0); | |
else var N = t.intersectTriangle(c, h, p, f.side !== THREE.DoubleSide); | |
if (N === null) continue; | |
N.applyMatrix4(this.matrixWorld); | |
var C = o.ray.origin.distanceTo(N); | |
if (C < d || C < o.near || C > o.far) continue; | |
u.push({ | |
distance: C, | |
point: N, | |
face: D, | |
faceIndex: M, | |
object: this | |
}) | |
} | |
} | |
} | |
}(), THREE.Mesh.prototype.clone = function(e, t) { | |
return e === undefined && (e = new THREE.Mesh(this.geometry, this.material)), THREE.Object3D.prototype.clone.call(this, e, t), e | |
}, THREE.Scene = function() { | |
THREE.Object3D.call(this), this.type = "Scene", this.fog = null, this.overrideMaterial = null, this.autoUpdate = !0 | |
}, THREE.Scene.prototype = Object.create(THREE.Object3D.prototype), THREE.Scene.prototype.constructor = THREE.Scene, THREE.Scene.prototype.clone = function(e) { | |
return e === undefined && (e = new THREE.Scene), THREE.Object3D.prototype.clone.call(this, e), this.fog !== null && (e.fog = this.fog.clone()), this.overrideMaterial !== null && (e.overrideMaterial = this.overrideMaterial.clone()), e.autoUpdate = this.autoUpdate, e.matrixAutoUpdate = this.matrixAutoUpdate, e | |
}, THREE.ShaderChunk = {}, THREE.ShaderChunk.common = "#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n\nfloat square( in float a ) { return a*a; }\nvec2 square( in vec2 a ) { return vec2( a.x*a.x, a.y*a.y ); }\nvec3 square( in vec3 a ) { return vec3( a.x*a.x, a.y*a.y, a.z*a.z ); }\nvec4 square( in vec4 a ) { return vec4( a.x*a.x, a.y*a.y, a.z*a.z, a.w*a.w ); }\nfloat saturate( in float a ) { return clamp( a, 0.0, 1.0 ); }\nvec2 saturate( in vec2 a ) { return clamp( a, 0.0, 1.0 ); }\nvec3 saturate( in vec3 a ) { return clamp( a, 0.0, 1.0 ); }\nvec4 saturate( in vec4 a ) { return clamp( a, 0.0, 1.0 ); }\nfloat average( in float a ) { return a; }\nfloat average( in vec2 a ) { return ( a.x + a.y) * 0.5; }\nfloat average( in vec3 a ) { return ( a.x + a.y + a.z) / 3.0; }\nfloat average( in vec4 a ) { return ( a.x + a.y + a.z + a.w) * 0.25; }\nfloat whiteCompliment( in float a ) { return saturate( 1.0 - a ); }\nvec2 whiteCompliment( in vec2 a ) { return saturate( vec2(1.0) - a ); }\nvec3 whiteCompliment( in vec3 a ) { return saturate( vec3(1.0) - a ); }\nvec4 whiteCompliment( in vec4 a ) { return saturate( vec4(1.0) - a ); }\nvec3 transformDirection( in vec3 normal, in mat4 matrix ) {\n return normalize( ( matrix * vec4( normal, 0.0 ) ).xyz );\n}\n// http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\nvec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\n return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal) {\n float distance = dot( planeNormal, point-pointOnPlane );\n return point - distance * planeNormal;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n return pointOnLine + lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) );\n}\nfloat calcLightAttenuation( float lightDistance, float cutoffDistance, float decayExponent ) {\n if ( decayExponent > 0.0 ) {\n return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );\n }\n return 1.0;\n}\n\nvec3 inputToLinear( in vec3 a ) {\n#ifdef GAMMA_INPUT\n return pow( a, vec3( float( GAMMA_FACTOR ) ) );\n#else\n return a;\n#endif\n}\nvec3 linearToOutput( in vec3 a ) {\n#ifdef GAMMA_OUTPUT\n return pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );\n#else\n return a;\n#endif\n}\n", THREE.UniformsUtils = { | |
merge: function(e) { | |
var t = {}; | |
for (var n = 0; n < e.length; n++) { | |
var r = this.clone(e[n]); | |
for (var i in r) t[i] = r[i] | |
} | |
return t | |
}, | |
clone: function(e) { | |
var t = {}; | |
for (var n in e) { | |
t[n] = {}; | |
for (var r in e[n]) { | |
var i = e[n][r]; | |
i instanceof THREE.Color || i instanceof THREE.Vector2 || i instanceof THREE.Vector3 || i instanceof THREE.Vector4 || i instanceof THREE.Matrix3 || i instanceof THREE.Matrix4 || i instanceof THREE.Texture ? t[n][r] = i.clone() : i instanceof Array ? t[n][r] = i.slice() : t[n][r] = i | |
} | |
} | |
return t | |
} | |
}, THREE.UniformsLib = { | |
common: { | |
diffuse: { | |
type: "c", | |
value: new THREE.Color(15658734) | |
}, | |
opacity: { | |
type: "f", | |
value: 1 | |
}, | |
map: { | |
type: "t", | |
value: null | |
}, | |
offsetRepeat: { | |
type: "v4", | |
value: new THREE.Vector4(0, 0, 1, 1) | |
}, | |
lightMap: { | |
type: "t", | |
value: null | |
}, | |
specularMap: { | |
type: "t", | |
value: null | |
}, | |
alphaMap: { | |
type: "t", | |
value: null | |
}, | |
envMap: { | |
type: "t", | |
value: null | |
}, | |
flipEnvMap: { | |
type: "f", | |
value: -1 | |
}, | |
reflectivity: { | |
type: "f", | |
value: 1 | |
}, | |
refractionRatio: { | |
type: "f", | |
value: .98 | |
}, | |
morphTargetInfluences: { | |
type: "f", | |
value: 0 | |
} | |
}, | |
bump: { | |
bumpMap: { | |
type: "t", | |
value: null | |
}, | |
bumpScale: { | |
type: "f", | |
value: 1 | |
} | |
}, | |
normalmap: { | |
normalMap: { | |
type: "t", | |
value: null | |
}, | |
normalScale: { | |
type: "v2", | |
value: new THREE.Vector2(1, 1) | |
} | |
}, | |
fog: { | |
fogDensity: { | |
type: "f", | |
value: 25e-5 | |
}, | |
fogNear: { | |
type: "f", | |
value: 1 | |
}, | |
fogFar: { | |
type: "f", | |
value: 2e3 | |
}, | |
fogColor: { | |
type: "c", | |
value: new THREE.Color(16777215) | |
} | |
}, | |
lights: { | |
ambientLightColor: { | |
type: "fv", | |
value: [] | |
}, | |
directionalLightDirection: { | |
type: "fv", | |
value: [] | |
}, | |
directionalLightColor: { | |
type: "fv", | |
value: [] | |
}, | |
hemisphereLightDirection: { | |
type: "fv", | |
value: [] | |
}, | |
hemisphereLightSkyColor: { | |
type: "fv", | |
value: [] | |
}, | |
hemisphereLightGroundColor: { | |
type: "fv", | |
value: [] | |
}, | |
pointLightColor: { | |
type: "fv", | |
value: [] | |
}, | |
pointLightPosition: { | |
type: "fv", | |
value: [] | |
}, | |
pointLightDistance: { | |
type: "fv1", | |
value: [] | |
}, | |
pointLightDecay: { | |
type: "fv1", | |
value: [] | |
}, | |
spotLightColor: { | |
type: "fv", | |
value: [] | |
}, | |
spotLightPosition: { | |
type: "fv", | |
value: [] | |
}, | |
spotLightDirection: { | |
type: "fv", | |
value: [] | |
}, | |
spotLightDistance: { | |
type: "fv1", | |
value: [] | |
}, | |
spotLightAngleCos: { | |
type: "fv1", | |
value: [] | |
}, | |
spotLightExponent: { | |
type: "fv1", | |
value: [] | |
}, | |
spotLightDecay: { | |
type: "fv1", | |
value: [] | |
} | |
}, | |
particle: { | |
psColor: { | |
type: "c", | |
value: new THREE.Color(15658734) | |
}, | |
opacity: { | |
type: "f", | |
value: 1 | |
}, | |
size: { | |
type: "f", | |
value: 1 | |
}, | |
scale: { | |
type: "f", | |
value: 1 | |
}, | |
map: { | |
type: "t", | |
value: null | |
}, | |
offsetRepeat: { | |
type: "v4", | |
value: new THREE.Vector4(0, 0, 1, 1) | |
}, | |
fogDensity: { | |
type: "f", | |
value: 25e-5 | |
}, | |
fogNear: { | |
type: "f", | |
value: 1 | |
}, | |
fogFar: { | |
type: "f", | |
value: 2e3 | |
}, | |
fogColor: { | |
type: "c", | |
value: new THREE.Color(16777215) | |
} | |
}, | |
shadowmap: { | |
shadowMap: { | |
type: "tv", | |
value: [] | |
}, | |
shadowMapSize: { | |
type: "v2v", | |
value: [] | |
}, | |
shadowBias: { | |
type: "fv1", | |
value: [] | |
}, | |
shadowDarkness: { | |
type: "fv1", | |
value: [] | |
}, | |
shadowMatrix: { | |
type: "m4v", | |
value: [] | |
} | |
} | |
}, THREE.ShaderLib = { | |
basic: { | |
uniforms: THREE.UniformsUtils.merge([THREE.UniformsLib.common, THREE.UniformsLib.fog, THREE.UniformsLib.shadowmap]), | |
vertexShader: [THREE.ShaderChunk.common, THREE.ShaderChunk.map_pars_vertex, THREE.ShaderChunk.lightmap_pars_vertex, THREE.ShaderChunk.envmap_pars_vertex, THREE.ShaderChunk.color_pars_vertex, THREE.ShaderChunk.morphtarget_pars_vertex, THREE.ShaderChunk.skinning_pars_vertex, THREE.ShaderChunk.shadowmap_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", THREE.ShaderChunk.map_vertex, THREE.ShaderChunk.lightmap_vertex, THREE.ShaderChunk.color_vertex, THREE.ShaderChunk.skinbase_vertex, " #ifdef USE_ENVMAP", THREE.ShaderChunk.morphnormal_vertex, THREE.ShaderChunk.skinnormal_vertex, THREE.ShaderChunk.defaultnormal_vertex, " #endif", THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.default_vertex, THREE.ShaderChunk.logdepthbuf_vertex, THREE.ShaderChunk.worldpos_vertex, THREE.ShaderChunk.envmap_vertex, THREE.ShaderChunk.shadowmap_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform vec3 diffuse;", "uniform float opacity;", THREE.ShaderChunk.common, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.map_pars_fragment, THREE.ShaderChunk.alphamap_pars_fragment, THREE.ShaderChunk.lightmap_pars_fragment, THREE.ShaderChunk.envmap_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", " vec3 outgoingLight = vec3( 0.0 );", " vec4 diffuseColor = vec4( diffuse, opacity );", THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphamap_fragment, THREE.ShaderChunk.alphatest_fragment, THREE.ShaderChunk.specularmap_fragment, " outgoingLight = diffuseColor.rgb;", THREE.ShaderChunk.lightmap_fragment, THREE.ShaderChunk.envmap_fragment, THREE.ShaderChunk.shadowmap_fragment, THREE.ShaderChunk.linear_to_gamma_fragment, THREE.ShaderChunk.fog_fragment, " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "}"].join("\n") | |
}, | |
lambert: { | |
uniforms: THREE.UniformsUtils.merge([THREE.UniformsLib.common, THREE.UniformsLib.fog, THREE.UniformsLib.lights, THREE.UniformsLib.shadowmap, { | |
emissive: { | |
type: "c", | |
value: new THREE.Color(0) | |
}, | |
wrapRGB: { | |
type: "v3", | |
value: new THREE.Vector3(1, 1, 1) | |
} | |
}]), | |
vertexShader: ["#define LAMBERT", "varying vec3 vLightFront;", "#ifdef DOUBLE_SIDED", " varying vec3 vLightBack;", "#endif", THREE.ShaderChunk.common, THREE.ShaderChunk.map_pars_vertex, THREE.ShaderChunk.lightmap_pars_vertex, THREE.ShaderChunk.envmap_pars_vertex, THREE.ShaderChunk.lights_lambert_pars_vertex, THREE.ShaderChunk.color_pars_vertex, THREE.ShaderChunk.morphtarget_pars_vertex, THREE.ShaderChunk.skinning_pars_vertex, THREE.ShaderChunk.shadowmap_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", THREE.ShaderChunk.map_vertex, THREE.ShaderChunk.lightmap_vertex, THREE.ShaderChunk.color_vertex, THREE.ShaderChunk.morphnormal_vertex, THREE.ShaderChunk.skinbase_vertex, THREE.ShaderChunk.skinnormal_vertex, THREE.ShaderChunk.defaultnormal_vertex, THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.default_vertex, THREE.ShaderChunk.logdepthbuf_vertex, THREE.ShaderChunk.worldpos_vertex, THREE.ShaderChunk.envmap_vertex, THREE.ShaderChunk.lights_lambert_vertex, THREE.ShaderChunk.shadowmap_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform float opacity;", "varying vec3 vLightFront;", "#ifdef DOUBLE_SIDED", " varying vec3 vLightBack;", "#endif", THREE.ShaderChunk.common, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.map_pars_fragment, THREE.ShaderChunk.alphamap_pars_fragment, THREE.ShaderChunk.lightmap_pars_fragment, THREE.ShaderChunk.envmap_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", " vec3 outgoingLight = vec3( 0.0 );", " vec4 diffuseColor = vec4( diffuse, opacity );", THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphamap_fragment, THREE.ShaderChunk.alphatest_fragment, THREE.ShaderChunk.specularmap_fragment, " #ifdef DOUBLE_SIDED", " if ( gl_FrontFacing )", " outgoingLight += diffuseColor.rgb * vLightFront + emissive;", " else", " outgoingLight += diffuseColor.rgb * vLightBack + emissive;", " #else", " outgoingLight += diffuseColor.rgb * vLightFront + emissive;", " #endif", THREE.ShaderChunk.lightmap_fragment, THREE.ShaderChunk.envmap_fragment, THREE.ShaderChunk.shadowmap_fragment, THREE.ShaderChunk.linear_to_gamma_fragment, THREE.ShaderChunk.fog_fragment, " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "}"].join("\n") | |
}, | |
phong: { | |
uniforms: THREE.UniformsUtils.merge([THREE.UniformsLib.common, THREE.UniformsLib.bump, THREE.UniformsLib.normalmap, THREE.UniformsLib.fog, THREE.UniformsLib.lights, THREE.UniformsLib.shadowmap, { | |
emissive: { | |
type: "c", | |
value: new THREE.Color(0) | |
}, | |
specular: { | |
type: "c", | |
value: new THREE.Color(1118481) | |
}, | |
shininess: { | |
type: "f", | |
value: 30 | |
}, | |
wrapRGB: { | |
type: "v3", | |
value: new THREE.Vector3(1, 1, 1) | |
} | |
}]), | |
vertexShader: ["#define PHONG", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", " varying vec3 vNormal;", "#endif", THREE.ShaderChunk.common, THREE.ShaderChunk.map_pars_vertex, THREE.ShaderChunk.lightmap_pars_vertex, THREE.ShaderChunk.envmap_pars_vertex, THREE.ShaderChunk.lights_phong_pars_vertex, THREE.ShaderChunk.color_pars_vertex, THREE.ShaderChunk.morphtarget_pars_vertex, THREE.ShaderChunk.skinning_pars_vertex, THREE.ShaderChunk.shadowmap_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", THREE.ShaderChunk.map_vertex, THREE.ShaderChunk.lightmap_vertex, THREE.ShaderChunk.color_vertex, THREE.ShaderChunk.morphnormal_vertex, THREE.ShaderChunk.skinbase_vertex, THREE.ShaderChunk.skinnormal_vertex, THREE.ShaderChunk.defaultnormal_vertex, "#ifndef FLAT_SHADED", " vNormal = normalize( transformedNormal );", "#endif", THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.default_vertex, THREE.ShaderChunk.logdepthbuf_vertex, " vViewPosition = -mvPosition.xyz;", THREE.ShaderChunk.worldpos_vertex, THREE.ShaderChunk.envmap_vertex, THREE.ShaderChunk.lights_phong_vertex, THREE.ShaderChunk.shadowmap_vertex, "}"].join("\n"), | |
fragmentShader: ["#define PHONG", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform vec3 specular;", "uniform float shininess;", "uniform float opacity;", THREE.ShaderChunk.common, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.map_pars_fragment, THREE.ShaderChunk.alphamap_pars_fragment, THREE.ShaderChunk.lightmap_pars_fragment, THREE.ShaderChunk.envmap_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.lights_phong_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.bumpmap_pars_fragment, THREE.ShaderChunk.normalmap_pars_fragment, THREE.ShaderChunk.specularmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", " vec3 outgoingLight = vec3( 0.0 );", " vec4 diffuseColor = vec4( diffuse, opacity );", THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphamap_fragment, THREE.ShaderChunk.alphatest_fragment, THREE.ShaderChunk.specularmap_fragment, THREE.ShaderChunk.lights_phong_fragment, THREE.ShaderChunk.lightmap_fragment, THREE.ShaderChunk.envmap_fragment, THREE.ShaderChunk.shadowmap_fragment, THREE.ShaderChunk.linear_to_gamma_fragment, THREE.ShaderChunk.fog_fragment, " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "}"].join("\n") | |
}, | |
particle_basic: { | |
uniforms: THREE.UniformsUtils.merge([THREE.UniformsLib.particle, THREE.UniformsLib.shadowmap]), | |
vertexShader: ["uniform float size;", "uniform float scale;", THREE.ShaderChunk.common, THREE.ShaderChunk.color_pars_vertex, THREE.ShaderChunk.shadowmap_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", THREE.ShaderChunk.color_vertex, " vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", " #ifdef USE_SIZEATTENUATION", " gl_PointSize = size * ( scale / length( mvPosition.xyz ) );", " #else", " gl_PointSize = size;", " #endif", " gl_Position = projectionMatrix * mvPosition;", THREE.ShaderChunk.logdepthbuf_vertex, THREE.ShaderChunk.worldpos_vertex, THREE.ShaderChunk.shadowmap_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform vec3 psColor;", "uniform float opacity;", THREE.ShaderChunk.common, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.map_particle_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.shadowmap_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", " vec3 outgoingLight = vec3( 0.0 );", " vec4 diffuseColor = vec4( psColor, opacity );", THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.map_particle_fragment, THREE.ShaderChunk.color_fragment, THREE.ShaderChunk.alphatest_fragment, " outgoingLight = diffuseColor.rgb;", THREE.ShaderChunk.shadowmap_fragment, THREE.ShaderChunk.fog_fragment, " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "}"].join("\n") | |
}, | |
dashed: { | |
uniforms: THREE.UniformsUtils.merge([THREE.UniformsLib.common, THREE.UniformsLib.fog, { | |
scale: { | |
type: "f", | |
value: 1 | |
}, | |
dashSize: { | |
type: "f", | |
value: 1 | |
}, | |
totalSize: { | |
type: "f", | |
value: 2 | |
} | |
}]), | |
vertexShader: ["uniform float scale;", "attribute float lineDistance;", "varying float vLineDistance;", THREE.ShaderChunk.common, THREE.ShaderChunk.color_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", THREE.ShaderChunk.color_vertex, " vLineDistance = scale * lineDistance;", " vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * mvPosition;", THREE.ShaderChunk.logdepthbuf_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform vec3 diffuse;", "uniform float opacity;", "uniform float dashSize;", "uniform float totalSize;", "varying float vLineDistance;", THREE.ShaderChunk.common, THREE.ShaderChunk.color_pars_fragment, THREE.ShaderChunk.fog_pars_fragment, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", " if ( mod( vLineDistance, totalSize ) > dashSize ) {", " discard;", " }", " vec3 outgoingLight = vec3( 0.0 );", " vec4 diffuseColor = vec4( diffuse, opacity );", THREE.ShaderChunk.logdepthbuf_fragment, THREE.ShaderChunk.color_fragment, " outgoingLight = diffuseColor.rgb;", THREE.ShaderChunk.fog_fragment, " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "}"].join("\n") | |
}, | |
depth: { | |
uniforms: { | |
mNear: { | |
type: "f", | |
value: 1 | |
}, | |
mFar: { | |
type: "f", | |
value: 2e3 | |
}, | |
opacity: { | |
type: "f", | |
value: 1 | |
} | |
}, | |
vertexShader: [THREE.ShaderChunk.common, THREE.ShaderChunk.morphtarget_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.default_vertex, THREE.ShaderChunk.logdepthbuf_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform float mNear;", "uniform float mFar;", "uniform float opacity;", THREE.ShaderChunk.common, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", THREE.ShaderChunk.logdepthbuf_fragment, " #ifdef USE_LOGDEPTHBUF_EXT", " float depth = gl_FragDepthEXT / gl_FragCoord.w;", " #else", " float depth = gl_FragCoord.z / gl_FragCoord.w;", " #endif", " float color = 1.0 - smoothstep( mNear, mFar, depth );", " gl_FragColor = vec4( vec3( color ), opacity );", "}"].join("\n") | |
}, | |
normal: { | |
uniforms: { | |
opacity: { | |
type: "f", | |
value: 1 | |
} | |
}, | |
vertexShader: ["varying vec3 vNormal;", THREE.ShaderChunk.common, THREE.ShaderChunk.morphtarget_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", " vNormal = normalize( normalMatrix * normal );", THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.default_vertex, THREE.ShaderChunk.logdepthbuf_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform float opacity;", "varying vec3 vNormal;", THREE.ShaderChunk.common, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", " gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );", THREE.ShaderChunk.logdepthbuf_fragment, "}"].join("\n") | |
}, | |
cube: { | |
uniforms: { | |
tCube: { | |
type: "t", | |
value: null | |
}, | |
tFlip: { | |
type: "f", | |
value: -1 | |
} | |
}, | |
vertexShader: ["varying vec3 vWorldPosition;", THREE.ShaderChunk.common, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", " vWorldPosition = transformDirection( position, modelMatrix );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", THREE.ShaderChunk.logdepthbuf_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform samplerCube tCube;", "uniform float tFlip;", "varying vec3 vWorldPosition;", THREE.ShaderChunk.common, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", " gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );", THREE.ShaderChunk.logdepthbuf_fragment, "}"].join("\n") | |
}, | |
equirect: { | |
uniforms: { | |
tEquirect: { | |
type: "t", | |
value: null | |
}, | |
tFlip: { | |
type: "f", | |
value: -1 | |
} | |
}, | |
vertexShader: ["varying vec3 vWorldPosition;", THREE.ShaderChunk.common, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", " vWorldPosition = transformDirection( position, modelMatrix );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", THREE.ShaderChunk.logdepthbuf_vertex, "}"].join("\n"), | |
fragmentShader: ["uniform sampler2D tEquirect;", "uniform float tFlip;", "varying vec3 vWorldPosition;", THREE.ShaderChunk.common, THREE.ShaderChunk.logdepthbuf_pars_fragment, "void main() {", "vec3 direction = normalize( vWorldPosition );", "vec2 sampleUV;", "sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );", "sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;", "gl_FragColor = texture2D( tEquirect, sampleUV );", THREE.ShaderChunk.logdepthbuf_fragment, "}"].join("\n") | |
}, | |
depthRGBA: { | |
uniforms: {}, | |
vertexShader: [THREE.ShaderChunk.common, THREE.ShaderChunk.morphtarget_pars_vertex, THREE.ShaderChunk.skinning_pars_vertex, THREE.ShaderChunk.logdepthbuf_pars_vertex, "void main() {", THREE.ShaderChunk.skinbase_vertex, THREE.ShaderChunk.morphtarget_vertex, THREE.ShaderChunk.skinning_vertex, THREE.ShaderChunk.default_vertex, THREE.ShaderChunk.logdepthbuf_vertex, "}"].join("\n"), | |
fragmentShader: [THREE.ShaderChunk.common, THREE.ShaderChunk.logdepthbuf_pars_fragment, "vec4 pack_depth( const in float depth ) {", " const vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );", " const vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );", " vec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );", " res -= res.xxyz * bit_mask;", " return res;", "}", "void main() {", THREE.ShaderChunk.logdepthbuf_fragment, " #ifdef USE_LOGDEPTHBUF_EXT", " gl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );", " #else", " gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );", " #endif", "}"].join("\n") | |
} | |
}, THREE.WebGLRenderer = function(e) { | |
function ct(e) { | |
e.__webglVertexBuffer = R.createBuffer(), e.__webglNormalBuffer = R.createBuffer(), e.__webglTangentBuffer = R.createBuffer(), e.__webglColorBuffer = R.createBuffer(), e.__webglUVBuffer = R.createBuffer(), e.__webglUV2Buffer = R.createBuffer(), e.__webglSkinIndicesBuffer = R.createBuffer(), e.__webglSkinWeightsBuffer = R.createBuffer(), e.__webglFaceBuffer = R.createBuffer(), e.__webglLineBuffer = R.createBuffer(); | |
var t = e.numMorphTargets; | |
if (t) { | |
e.__webglMorphTargetsBuffers = []; | |
for (var n = 0, r = t; n < r; n++) e.__webglMorphTargetsBuffers.push(R.createBuffer()) | |
} | |
var i = e.numMorphNormals; | |
if (i) { | |
e.__webglMorphNormalsBuffers = []; | |
for (var n = 0, r = i; n < r; n++) e.__webglMorphNormalsBuffers.push(R.createBuffer()) | |
} | |
E.info.memory.geometries++ | |
} | |
function St(e) { | |
var t = e.geometry, | |
n = e.material, | |
r = t.vertices.length; | |
if (n.attributes) { | |
t.__webglCustomAttributesList === undefined && (t.__webglCustomAttributesList = []); | |
for (var i in n.attributes) { | |
var s = n.attributes[i]; | |
if (!s.__webglInitialized || s.createUniqueBuffers) { | |
s.__webglInitialized = !0; | |
var o = 1; | |
s.type === "v2" ? o = 2 : s.type === "v3" ? o = 3 : s.type === "v4" ? o = 4 : s.type === "c" && (o = 3), s.size = o, s.array = new Float32Array(r * o), s.buffer = R.createBuffer(), s.buffer.belongsToAttribute = i, s.needsUpdate = !0 | |
} | |
t.__webglCustomAttributesList.push(s) | |
} | |
} | |
} | |
function xt(e, t) { | |
var n = t.geometry, | |
r = e.faces3, | |
i = r.length * 3, | |
s = r.length * 1, | |
o = r.length * 3, | |
u = Tt(t, e); | |
e.__vertexArray = new Float32Array(i * 3), e.__normalArray = new Float32Array(i * 3), e.__colorArray = new Float32Array(i * 3), e.__uvArray = new Float32Array(i * 2), n.faceVertexUvs.length > 1 && (e.__uv2Array = new Float32Array(i * 2)), n.hasTangents && (e.__tangentArray = new Float32Array(i * 4)), t.geometry.skinWeights.length && t.geometry.skinIndices.length && (e.__skinIndexArray = new Float32Array(i * 4), e.__skinWeightArray = new Float32Array(i * 4)); | |
var a = X.get("OES_element_index_uint") !== null && s > 21845 ? Uint32Array : Uint16Array; | |
e.__typeArray = a, e.__faceArray = new a(s * 3), e.__lineArray = new a(o * 2); | |
var f = e.numMorphTargets; | |
if (f) { | |
e.__morphTargetsArrays = []; | |
for (var l = 0, c = f; l < c; l++) e.__morphTargetsArrays.push(new Float32Array(i * 3)) | |
} | |
var h = e.numMorphNormals; | |
if (h) { | |
e.__morphNormalsArrays = []; | |
for (var l = 0, c = h; l < c; l++) e.__morphNormalsArrays.push(new Float32Array(i * 3)) | |
} | |
e.__webglFaceCount = s * 3, e.__webglLineCount = o * 2; | |
if (u.attributes) { | |
e.__webglCustomAttributesList === undefined && (e.__webglCustomAttributesList = []); | |
for (var p in u.attributes) { | |
var d = u.attributes[p], | |
v = {}; | |
for (var m in d) v[m] = d[m]; | |
if (!v.__webglInitialized || v.createUniqueBuffers) { | |
v.__webglInitialized = !0; | |
var g = 1; | |
v.type === "v2" ? g = 2 : v.type === "v3" ? g = 3 : v.type === "v4" ? g = 4 : v.type === "c" && (g = 3), v.size = g, v.array = new Float32Array(i * g), v.buffer = R.createBuffer(), v.buffer.belongsToAttribute = p, d.needsUpdate = !0, v.__original = d | |
} | |
e.__webglCustomAttributesList.push(v) | |
} | |
} | |
e.__inittedArrays = !0 | |
} | |
function Tt(e, t) { | |
return e.material instanceof THREE.MeshFaceMaterial ? e.material.materials[t.materialIndex] : e.material | |
} | |
function Nt(e) { | |
return e instanceof THREE.MeshPhongMaterial == 0 && e.shading === THREE.FlatShading | |
} | |
function Ct(e, t, n, r, i) { | |
if (!e.__inittedArrays) return; | |
var s = Nt(i), | |
o, u, a, f, l, c, h, p, d, v, m, g, y, b, w, E, S, x, T, N, C, k, L, A, O, M, _, D, P, H, B, j, F, I, q, U, z, W, X, V, $ = 0, | |
J = 0, | |
K = 0, | |
Q = 0, | |
G = 0, | |
Y = 0, | |
Z = 0, | |
et = 0, | |
tt = 0, | |
nt = 0, | |
rt = 0, | |
it = 0, | |
st, ot = e.__vertexArray, | |
ut = e.__uvArray, | |
at = e.__uv2Array, | |
ft = e.__normalArray, | |
lt = e.__tangentArray, | |
ct = e.__colorArray, | |
ht = e.__skinIndexArray, | |
pt = e.__skinWeightArray, | |
dt = e.__morphTargetsArrays, | |
vt = e.__morphNormalsArrays, | |
mt = e.__webglCustomAttributesList, | |
gt, yt = e.__faceArray, | |
bt = e.__lineArray, | |
wt = t.geometry, | |
Et = wt.verticesNeedUpdate, | |
St = wt.elementsNeedUpdate, | |
xt = wt.uvsNeedUpdate, | |
Tt = wt.normalsNeedUpdate, | |
Ct = wt.tangentsNeedUpdate, | |
kt = wt.colorsNeedUpdate, | |
Lt = wt.morphTargetsNeedUpdate, | |
At = wt.vertices, | |
Ot = e.faces3, | |
Mt = wt.faces, | |
_t = wt.faceVertexUvs[0], | |
Dt = wt.faceVertexUvs[1], | |
Pt = wt.skinIndices, | |
Ht = wt.skinWeights, | |
Bt = wt.morphTargets, | |
jt = wt.morphNormals; | |
if (Et) { | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], g = At[f.a], y = At[f.b], b = At[f.c], ot[J] = g.x, ot[J + 1] = g.y, ot[J + 2] = g.z, ot[J + 3] = y.x, ot[J + 4] = y.y, ot[J + 5] = y.z, ot[J + 6] = b.x, ot[J + 7] = b.y, ot[J + 8] = b.z, J += 9; | |
R.bindBuffer(R.ARRAY_BUFFER, e.__webglVertexBuffer), R.bufferData(R.ARRAY_BUFFER, ot, n) | |
} | |
if (Lt) | |
for (q = 0, U = Bt.length; q < U; q++) { | |
rt = 0; | |
for (o = 0, u = Ot.length; o < u; o++) X = Ot[o], f = Mt[X], g = Bt[q].vertices[f.a], y = Bt[q].vertices[f.b], b = Bt[q].vertices[f.c], z = dt[q], z[rt] = g.x, z[rt + 1] = g.y, z[rt + 2] = g.z, z[rt + 3] = y.x, z[rt + 4] = y.y, z[rt + 5] = y.z, z[rt + 6] = b.x, z[rt + 7] = b.y, z[rt + 8] = b.z, i.morphNormals && (s ? (x = jt[q].faceNormals[X], T = x, N = x) : (V = jt[q].vertexNormals[X], x = V.a, T = V.b, N = V.c), W = vt[q], W[rt] = x.x, W[rt + 1] = x.y, W[rt + 2] = x.z, W[rt + 3] = T.x, W[rt + 4] = T.y, W[rt + 5] = T.z, W[rt + 6] = N.x, W[rt + 7] = N.y, W[rt + 8] = N.z), rt += 9; | |
R.bindBuffer(R.ARRAY_BUFFER, e.__webglMorphTargetsBuffers[q]), R.bufferData(R.ARRAY_BUFFER, dt[q], n), i.morphNormals && (R.bindBuffer(R.ARRAY_BUFFER, e.__webglMorphNormalsBuffers[q]), R.bufferData(R.ARRAY_BUFFER, vt[q], n)) | |
} | |
if (Ht.length) { | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], A = Ht[f.a], O = Ht[f.b], M = Ht[f.c], pt[nt] = A.x, pt[nt + 1] = A.y, pt[nt + 2] = A.z, pt[nt + 3] = A.w, pt[nt + 4] = O.x, pt[nt + 5] = O.y, pt[nt + 6] = O.z, pt[nt + 7] = O.w, pt[nt + 8] = M.x, pt[nt + 9] = M.y, pt[nt + 10] = M.z, pt[nt + 11] = M.w, _ = Pt[f.a], D = Pt[f.b], P = Pt[f.c], ht[nt] = _.x, ht[nt + 1] = _.y, ht[nt + 2] = _.z, ht[nt + 3] = _.w, ht[nt + 4] = D.x, ht[nt + 5] = D.y, ht[nt + 6] = D.z, ht[nt + 7] = D.w, ht[nt + 8] = P.x, ht[nt + 9] = P.y, ht[nt + 10] = P.z, ht[nt + 11] = P.w, nt += 12; | |
nt > 0 && (R.bindBuffer(R.ARRAY_BUFFER, e.__webglSkinIndicesBuffer), R.bufferData(R.ARRAY_BUFFER, ht, n), R.bindBuffer(R.ARRAY_BUFFER, e.__webglSkinWeightsBuffer), R.bufferData(R.ARRAY_BUFFER, pt, n)) | |
} | |
if (kt) { | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], h = f.vertexColors, p = f.color, h.length === 3 && i.vertexColors === THREE.VertexColors ? (C = h[0], k = h[1], L = h[2]) : (C = p, k = p, L = p), ct[tt] = C.r, ct[tt + 1] = C.g, ct[tt + 2] = C.b, ct[tt + 3] = k.r, ct[tt + 4] = k.g, ct[tt + 5] = k.b, ct[tt + 6] = L.r, ct[tt + 7] = L.g, ct[tt + 8] = L.b, tt += 9; | |
tt > 0 && (R.bindBuffer(R.ARRAY_BUFFER, e.__webglColorBuffer), R.bufferData(R.ARRAY_BUFFER, ct, n)) | |
} | |
if (Ct && wt.hasTangents) { | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], d = f.vertexTangents, w = d[0], E = d[1], S = d[2], lt[Z] = w.x, lt[Z + 1] = w.y, lt[Z + 2] = w.z, lt[Z + 3] = w.w, lt[Z + 4] = E.x, lt[Z + 5] = E.y, lt[Z + 6] = E.z, lt[Z + 7] = E.w, lt[Z + 8] = S.x, lt[Z + 9] = S.y, lt[Z + 10] = S.z, lt[Z + 11] = S.w, Z += 12; | |
R.bindBuffer(R.ARRAY_BUFFER, e.__webglTangentBuffer), R.bufferData(R.ARRAY_BUFFER, lt, n) | |
} | |
if (Tt) { | |
for (o = 0, u = Ot.length; o < u; o++) { | |
f = Mt[Ot[o]], l = f.vertexNormals, c = f.normal; | |
if (l.length === 3 && s === !1) | |
for (H = 0; H < 3; H++) j = l[H], ft[Y] = j.x, ft[Y + 1] = j.y, ft[Y + 2] = j.z, Y += 3; | |
else | |
for (H = 0; H < 3; H++) ft[Y] = c.x, ft[Y + 1] = c.y, ft[Y + 2] = c.z, Y += 3 | |
} | |
R.bindBuffer(R.ARRAY_BUFFER, e.__webglNormalBuffer), R.bufferData(R.ARRAY_BUFFER, ft, n) | |
} | |
if (xt && _t) { | |
for (o = 0, u = Ot.length; o < u; o++) { | |
a = Ot[o], v = _t[a]; | |
if (v === undefined) continue; | |
for (H = 0; H < 3; H++) F = v[H], ut[K] = F.x, ut[K + 1] = F.y, K += 2 | |
} | |
K > 0 && (R.bindBuffer(R.ARRAY_BUFFER, e.__webglUVBuffer), R.bufferData(R.ARRAY_BUFFER, ut, n)) | |
} | |
if (xt && Dt) { | |
for (o = 0, u = Ot.length; o < u; o++) { | |
a = Ot[o], m = Dt[a]; | |
if (m === undefined) continue; | |
for (H = 0; H < 3; H++) I = m[H], at[Q] = I.x, at[Q + 1] = I.y, Q += 2 | |
} | |
Q > 0 && (R.bindBuffer(R.ARRAY_BUFFER, e.__webglUV2Buffer), R.bufferData(R.ARRAY_BUFFER, at, n)) | |
} | |
if (St) { | |
for (o = 0, u = Ot.length; o < u; o++) yt[G] = $, yt[G + 1] = $ + 1, yt[G + 2] = $ + 2, G += 3, bt[et] = $, bt[et + 1] = $ + 1, bt[et + 2] = $, bt[et + 3] = $ + 2, bt[et + 4] = $ + 1, bt[et + 5] = $ + 2, et += 6, $ += 3; | |
R.bindBuffer(R.ELEMENT_ARRAY_BUFFER, e.__webglFaceBuffer), R.bufferData(R.ELEMENT_ARRAY_BUFFER, yt, n), R.bindBuffer(R.ELEMENT_ARRAY_BUFFER, e.__webglLineBuffer), R.bufferData(R.ELEMENT_ARRAY_BUFFER, bt, n) | |
} | |
if (mt) | |
for (H = 0, B = mt.length; H < B; H++) { | |
gt = mt[H]; | |
if (!gt.__original.needsUpdate) continue; | |
it = 0; | |
if (gt.size === 1) { | |
if (gt.boundTo === undefined || gt.boundTo === "vertices") | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], gt.array[it] = gt.value[f.a], gt.array[it + 1] = gt.value[f.b], gt.array[it + 2] = gt.value[f.c], it += 3; | |
else if (gt.boundTo === "faces") | |
for (o = 0, u = Ot.length; o < u; o++) st = gt.value[Ot[o]], gt.array[it] = st, gt.array[it + 1] = st, gt.array[it + 2] = st, it += 3 | |
} else if (gt.size === 2) { | |
if (gt.boundTo === undefined || gt.boundTo === "vertices") | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], g = gt.value[f.a], y = gt.value[f.b], b = gt.value[f.c], gt.array[it] = g.x, gt.array[it + 1] = g.y, gt.array[it + 2] = y.x, gt.array[it + 3] = y.y, gt.array[it + 4] = b.x, gt.array[it + 5] = b.y, it += 6; | |
else if (gt.boundTo === "faces") | |
for (o = 0, u = Ot.length; o < u; o++) st = gt.value[Ot[o]], g = st, y = st, b = st, gt.array[it] = g.x, gt.array[it + 1] = g.y, gt.array[it + 2] = y.x, gt.array[it + 3] = y.y, gt.array[it + 4] = b.x, gt.array[it + 5] = b.y, it += 6 | |
} else if (gt.size === 3) { | |
var Ft; | |
gt.type === "c" ? Ft = ["r", "g", "b"] : Ft = ["x", "y", "z"]; | |
if (gt.boundTo === undefined || gt.boundTo === "vertices") | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], g = gt.value[f.a], y = gt.value[f.b], b = gt.value[f.c], gt.array[it] = g[Ft[0]], gt.array[it + 1] = g[Ft[1]], gt.array[it + 2] = g[Ft[2]], gt.array[it + 3] = y[Ft[0]], gt.array[it + 4] = y[Ft[1]], gt.array[it + 5] = y[Ft[2]], gt.array[it + 6] = b[Ft[0]], gt.array[it + 7] = b[Ft[1]], gt.array[it + 8] = b[Ft[2]], it += 9; | |
else if (gt.boundTo === "faces") | |
for (o = 0, u = Ot.length; o < u; o++) st = gt.value[Ot[o]], g = st, y = st, b = st, gt.array[it] = g[Ft[0]], gt.array[it + 1] = g[Ft[1]], gt.array[it + 2] = g[Ft[2]], gt.array[it + 3] = y[Ft[0]], gt.array[it + 4] = y[Ft[1]], gt.array[it + 5] = y[Ft[2]], gt.array[it + 6] = b[Ft[0]], gt.array[it + 7] = b[Ft[1]], gt.array[it + 8] = b[Ft[2]], it += 9; | |
else if (gt.boundTo === "faceVertices") | |
for (o = 0, u = Ot.length; o < u; o++) st = gt.value[Ot[o]], g = st[0], y = st[1], b = st[2], gt.array[it] = g[Ft[0]], gt.array[it + 1] = g[Ft[1]], gt.array[it + 2] = g[Ft[2]], gt.array[it + 3] = y[Ft[0]], gt.array[it + 4] = y[Ft[1]], gt.array[it + 5] = y[Ft[2]], gt.array[it + 6] = b[Ft[0]], gt.array[it + 7] = b[Ft[1]], gt.array[it + 8] = b[Ft[2]], it += 9 | |
} else if (gt.size === 4) | |
if (gt.boundTo === undefined || gt.boundTo === "vertices") | |
for (o = 0, u = Ot.length; o < u; o++) f = Mt[Ot[o]], g = gt.value[f.a], y = gt.value[f.b], b = gt.value[f.c], gt.array[it] = g.x, gt.array[it + 1] = g.y, gt.array[it + 2] = g.z, gt.array[it + 3] = g.w, gt.array[it + 4] = y.x, gt.array[it + 5] = y.y, gt.array[it + 6] = y.z, gt.array[it + 7] = y.w, gt.array[it + 8] = b.x, gt.array[it + 9] = b.y, gt.array[it + 10] = b.z, gt.array[it + 11] = b.w, it += 12; | |
else if (gt.boundTo === "faces") | |
for (o = 0, u = Ot.length; o < u; o++) st = gt.value[Ot[o]], g = st, y = st, b = st, gt.array[it] = g.x, gt.array[it + 1] = g.y, gt.array[it + 2] = g.z, gt.array[it + 3] = g.w, gt.array[it + 4] = y.x, gt.array[it + 5] = y.y, gt.array[it + 6] = y.z, gt.array[it + 7] = y.w, gt.array[it + 8] = b.x, gt.array[it + 9] = b.y, gt.array[it + 10] = b.z, gt.array[it + 11] = b.w, it += 12; | |
else if (gt.boundTo === "faceVertices") | |
for (o = 0, u = Ot.length; o < u; o++) st = gt.value[Ot[o]], g = st[0], y = st[1], b = st[2], gt.array[it] = g.x, gt.array[it + 1] = g.y, gt.array[it + 2] = g.z, gt.array[it + 3] = g.w, gt.array[it + 4] = y.x, gt.array[it + 5] = y.y, gt.array[it + 6] = y.z, gt.array[it + 7] = y.w, gt.array[it + 8] = b.x, gt.array[it + 9] = b.y, gt.array[it + 10] = b.z, gt.array[it + 11] = b.w, it += 12; | |
R.bindBuffer(R.ARRAY_BUFFER, gt.buffer), R.bufferData(R.ARRAY_BUFFER, gt.array, n) | |
} | |
r && (delete e.__inittedArrays, delete e.__colorArray, delete e.__normalArray, delete e.__tangentArray, delete e.__uvArray, delete e.__uv2Array, delete e.__faceArray, delete e.__vertexArray, delete e.__lineArray, delete e.__skinIndexArray, delete e.__skinWeightArray) | |
} | |
function kt(e, t, n, r) { | |
var i = n.attributes, | |
s = t.attributes, | |
o = t.attributesKeys; | |
for (var u = 0, a = o.length; u < a; u++) { | |
var f = o[u], | |
l = s[f]; | |
if (l >= 0) { | |
var c = i[f]; | |
if (c !== undefined) { | |
var h = c.itemSize; | |
R.bindBuffer(R.ARRAY_BUFFER, c.buffer), W.enableAttribute(l), R.vertexAttribPointer(l, h, R.FLOAT, !1, 0, r * h * 4) | |
} else e.defaultAttributeValues !== undefined && (e.defaultAttributeValues[f].length === 2 ? R.vertexAttrib2fv(l, e.defaultAttributeValues[f]) : e.defaultAttributeValues[f].length === 3 && R.vertexAttrib3fv(l, e.defaultAttributeValues[f])) | |
} | |
} | |
W.disableUnusedAttributes() | |
} | |
function Lt(e, t, n) { | |
var r = e.program.attributes; | |
n.morphTargetBase !== -1 && r.position >= 0 ? (R.bindBuffer(R.ARRAY_BUFFER, t.__webglMorphTargetsBuffers[n.morphTargetBase]), W.enableAttribute(r.position), R.vertexAttribPointer(r.position, 3, R.FLOAT, !1, 0, 0)) : r.position >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, t.__webglVertexBuffer), W.enableAttribute(r.position), R.vertexAttribPointer(r.position, 3, R.FLOAT, !1, 0, 0)); | |
if (n.morphTargetForcedOrder.length) { | |
var i = 0, | |
s = n.morphTargetForcedOrder, | |
o = n.morphTargetInfluences, | |
u; | |
while (i < e.numSupportedMorphTargets && i < s.length) u = r["morphTarget" + i], u >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, t.__webglMorphTargetsBuffers[s[i]]), W.enableAttribute(u), R.vertexAttribPointer(u, 3, R.FLOAT, !1, 0, 0)), u = r["morphNormal" + i], u >= 0 && e.morphNormals && (R.bindBuffer(R.ARRAY_BUFFER, t.__webglMorphNormalsBuffers[s[i]]), W.enableAttribute(u), R.vertexAttribPointer(u, 3, R.FLOAT, !1, 0, 0)), n.__webglMorphTargetInfluences[i] = o[s[i]], i++ | |
} else { | |
var a = [], | |
o = n.morphTargetInfluences, | |
f = n.geometry.morphTargets; | |
o.length > f.length && (console.warn("THREE.WebGLRenderer: Influences array is bigger than morphTargets array."), o.length = f.length); | |
for (var l = 0, c = o.length; l < c; l++) { | |
var h = o[l]; | |
a.push([h, l]) | |
} | |
a.length > e.numSupportedMorphTargets ? (a.sort(Mt), a.length = e.numSupportedMorphTargets) : a.length > e.numSupportedMorphNormals ? a.sort(Mt) : a.length === 0 && a.push([0, 0]); | |
var u; | |
for (var i = 0, p = e.numSupportedMorphTargets; i < p; i++) | |
if (a[i]) { | |
var d = a[i][1]; | |
u = r["morphTarget" + i], u >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, t.__webglMorphTargetsBuffers[d]), W.enableAttribute(u), R.vertexAttribPointer(u, 3, R.FLOAT, !1, 0, 0)), u = r["morphNormal" + i], u >= 0 && e.morphNormals && (R.bindBuffer(R.ARRAY_BUFFER, t.__webglMorphNormalsBuffers[d]), W.enableAttribute(u), R.vertexAttribPointer(u, 3, R.FLOAT, !1, 0, 0)), n.__webglMorphTargetInfluences[i] = o[d] | |
} else n.__webglMorphTargetInfluences[i] = 0 | |
} | |
e.program.uniforms.morphTargetInfluences !== null && R.uniform1fv(e.program.uniforms.morphTargetInfluences, n.__webglMorphTargetInfluences) | |
} | |
function At(e, t) { | |
return e.object.renderOrder !== t.object.renderOrder ? e.object.renderOrder - t.object.renderOrder : e.material.id !== t.material.id ? e.material.id - t.material.id : e.z !== t.z ? e.z - t.z : e.id - t.id | |
} | |
function Ot(e, t) { | |
return e.object.renderOrder !== t.object.renderOrder ? e.object.renderOrder - t.object.renderOrder : e.z !== t.z ? t.z - e.z : e.id - t.id | |
} | |
function Mt(e, t) { | |
return t[0] - e[0] | |
} | |
function _t(e) { | |
if (e.visible === !1) return; | |
if (!(e instanceof THREE.Scene || e instanceof THREE.Group)) { | |
Ht(e); | |
var t = v[e.id]; | |
if (t && (e.frustumCulled === !1 || H.intersectsObject(e) === !0)) | |
for (var n = 0, r = t.length; n < r; n++) { | |
var i = t[n]; | |
Pt(i), i.render = !0, E.sortObjects === !0 && (j.setFromMatrixPosition(e.matrixWorld), j.applyProjection(B), i.z = j.z) | |
} | |
} | |
for (var n = 0, r = e.children.length; n < r; n++) _t(e.children[n]) | |
} | |
function Dt(e, t, n, r, i) { | |
var s; | |
for (var o = 0, u = e.length; o < u; o++) { | |
var a = e[o], | |
f = a.object, | |
l = a.buffer; | |
an(f, t); | |
if (i) s = i; | |
else { | |
s = a.material; | |
if (!s) continue; | |
Jt(s) | |
} | |
E.setMaterialFaces(s), l instanceof THREE.BufferGeometry ? E.renderBufferDirect(t, n, r, s, l, f) : E.renderBuffer(t, n, r, s, l, f) | |
} | |
} | |
function Pt(e) { | |
var t = e.object, | |
n = e.buffer, | |
r = t.geometry, | |
i = t.material; | |
if (i instanceof THREE.MeshFaceMaterial) { | |
var s = r instanceof THREE.BufferGeometry ? 0 : n.materialIndex; | |
i = i.materials[s], e.material = i, i.transparent ? y.push(e) : g.push(e) | |
} else i && (e.material = i, i.transparent ? y.push(e) : g.push(e)) | |
} | |
function Ht(e) { | |
e.__webglInit === undefined && (e.__webglInit = !0, e._modelViewMatrix = new THREE.Matrix4, e._normalMatrix = new THREE.Matrix3, e.addEventListener("removed", ht)); | |
var t = e.geometry; | |
t !== undefined && t.__webglInit === undefined && (t.__webglInit = !0, t.addEventListener("dispose", pt), t instanceof THREE.BufferGeometry ? E.info.memory.geometries++ : e instanceof THREE.Mesh && It(e, t)); | |
if (e.__webglActive === undefined) { | |
e.__webglActive = !0; | |
if (e instanceof THREE.Mesh) | |
if (t instanceof THREE.BufferGeometry) qt(v, t, e); | |
else if (t instanceof THREE.Geometry) { | |
var n = Bt[t.id]; | |
for (var r = 0, i = n.length; r < i; r++) qt(v, n[r], e) | |
} | |
} | |
} | |
function Ft(e, t) { | |
var n = X.get("OES_element_index_uint") ? 4294967296 : 65535, | |
r, i = {}, | |
s = e.morphTargets.length, | |
o = e.morphNormals.length, | |
u, a = {}, | |
f = []; | |
for (var l = 0, c = e.faces.length; l < c; l++) { | |
var h = e.faces[l], | |
p = t ? h.materialIndex : 0; | |
p in i || (i[p] = { | |
hash: p, | |
counter: 0 | |
}), r = i[p].hash + "_" + i[p].counter, r in a || (u = { | |
id: jt++, | |
faces3: [], | |
materialIndex: p, | |
vertices: 0, | |
numMorphTargets: s, | |
numMorphNormals: o | |
}, a[r] = u, f.push(u)), a[r].vertices + 3 > n && (i[p].counter += 1, r = i[p].hash + "_" + i[p].counter, r in a || (u = { | |
id: jt++, | |
faces3: [], | |
materialIndex: p, | |
vertices: 0, | |
numMorphTargets: s, | |
numMorphNormals: o | |
}, a[r] = u, f.push(u))), a[r].faces3.push(l), a[r].vertices += 3 | |
} | |
return f | |
} | |
function It(e, t) { | |
var n = e.material, | |
r = !1; | |
if (Bt[t.id] === undefined || t.groupsNeedUpdate === !0) delete v[e.id], Bt[t.id] = Ft(t, n instanceof THREE.MeshFaceMaterial), t.groupsNeedUpdate = !1; | |
var i = Bt[t.id]; | |
for (var s = 0, o = i.length; s < o; s++) { | |
var u = i[s]; | |
u.__webglVertexBuffer === undefined ? (ct(u), xt(u, e), t.verticesNeedUpdate = !0, t.morphTargetsNeedUpdate = !0, t.elementsNeedUpdate = !0, t.uvsNeedUpdate = !0, t.normalsNeedUpdate = !0, t.tangentsNeedUpdate = !0, t.colorsNeedUpdate = !0, r = !0) : r = !1, (r || e.__webglActive === undefined) && qt(v, u, e) | |
} | |
e.__webglActive = !0 | |
} | |
function qt(e, t, n) { | |
var r = n.id; | |
e[r] = e[r] || [], e[r].push({ | |
id: r, | |
buffer: t, | |
object: n, | |
material: null, | |
z: 0 | |
}) | |
} | |
function Rt(e) { | |
var t = e.geometry; | |
if (t instanceof THREE.BufferGeometry) { | |
var n = t.attributes, | |
r = t.attributesKeys; | |
for (var i = 0, s = r.length; i < s; i++) { | |
var o = r[i], | |
u = n[o], | |
a = o === "index" ? R.ELEMENT_ARRAY_BUFFER : R.ARRAY_BUFFER; | |
u.buffer === undefined ? (u.buffer = R.createBuffer(), R.bindBuffer(a, u.buffer), R.bufferData(a, u.array, u instanceof THREE.DynamicBufferAttribute ? R.DYNAMIC_DRAW : R.STATIC_DRAW), u.needsUpdate = !1) : u.needsUpdate === !0 && (R.bindBuffer(a, u.buffer), u.updateRange === undefined || u.updateRange.count === -1 ? R.bufferSubData(a, 0, u.array) : u.updateRange.count === 0 ? console.error("THREE.WebGLRenderer.updateObject: using updateRange for THREE.DynamicBufferAttribute and marked as needsUpdate but count is 0, ensure you are using set methods or updating manually.") : (R.bufferSubData(a, u.updateRange.offset * u.array.BYTES_PER_ELEMENT, u.array.subarray(u.updateRange.offset, u.updateRange.offset + u.updateRange.count)), u.updateRange.count = 0), u.needsUpdate = !1) | |
} | |
} else if (e instanceof THREE.Mesh) { | |
t.groupsNeedUpdate === !0 && It(e, t); | |
var f = Bt[t.id]; | |
for (var i = 0, l = f.length; i < l; i++) { | |
var c = f[i], | |
h = Tt(e, c), | |
p = h.attributes && Ut(h); | |
(t.verticesNeedUpdate || t.morphTargetsNeedUpdate || t.elementsNeedUpdate || t.uvsNeedUpdate || t.normalsNeedUpdate || t.colorsNeedUpdate || t.tangentsNeedUpdate || p) && Ct(c, e, R.DYNAMIC_DRAW, !t.dynamic, h) | |
} | |
t.verticesNeedUpdate = !1, t.morphTargetsNeedUpdate = !1, t.elementsNeedUpdate = !1, t.uvsNeedUpdate = !1, t.normalsNeedUpdate = !1, t.colorsNeedUpdate = !1, t.tangentsNeedUpdate = !1, h.attributes && zt(h) | |
} | |
} | |
function Ut(e) { | |
for (var t in e.attributes) | |
if (e.attributes[t].needsUpdate) return !0; | |
return !1 | |
} | |
function zt(e) { | |
for (var t in e.attributes) e.attributes[t].needsUpdate = !1 | |
} | |
function Wt(e) { | |
(e instanceof THREE.Mesh || e instanceof THREE.PointCloud || e instanceof THREE.Line) && delete v[e.id], delete e.__webglInit, delete e._modelViewMatrix, delete e._normalMatrix, delete e.__webglActive | |
} | |
function Xt(e, t) { | |
for (var n = e.length - 1; n >= 0; n--) e[n].object === t && e.splice(n, 1) | |
} | |
function $t(e, t, n, r) { | |
e.addEventListener("dispose", mt); | |
var s = Vt[e.type]; | |
if (s) { | |
var o = THREE.ShaderLib[s]; | |
e.__webglShader = { | |
uniforms: THREE.UniformsUtils.clone(o.uniforms), | |
vertexShader: o.vertexShader, | |
fragmentShader: o.fragmentShader | |
} | |
} else e.__webglShader = { | |
uniforms: e.uniforms, | |
vertexShader: e.vertexShader, | |
fragmentShader: e.fragmentShader | |
}; | |
var u = 0, | |
a = 0, | |
f = 0, | |
l = { | |
precision: i, | |
supportsVertexTextures: Z, | |
map: !!e.map, | |
envMap: !!e.envMap, | |
envMapMode: e.envMap && e.envMap.mapping, | |
lightMap: !!e.lightMap, | |
bumpMap: !!e.bumpMap, | |
normalMap: !!e.normalMap, | |
specularMap: !!e.specularMap, | |
alphaMap: !!e.alphaMap, | |
combine: e.combine, | |
vertexColors: e.vertexColors, | |
fog: n, | |
useFog: e.fog, | |
fogExp: n instanceof THREE.FogExp2, | |
flatShading: e.shading === THREE.FlatShading, | |
sizeAttenuation: e.sizeAttenuation, | |
logarithmicDepthBuffer: c, | |
skinning: e.skinning, | |
maxBones: f, | |
useVertexTexture: et && r && r.skeleton && r.skeleton.useVertexTexture, | |
morphTargets: e.morphTargets, | |
morphNormals: e.morphNormals, | |
maxMorphTargets: E.maxMorphTargets, | |
maxMorphNormals: E.maxMorphNormals, | |
maxDirLights: u.directional, | |
maxPointLights: u.point, | |
maxSpotLights: u.spot, | |
maxHemiLights: u.hemi, | |
maxShadows: a, | |
shadowMapEnabled: E.shadowMapEnabled && r.receiveShadow && a > 0, | |
shadowMapType: E.shadowMapType, | |
shadowMapDebug: E.shadowMapDebug, | |
shadowMapCascade: E.shadowMapCascade, | |
alphaTest: e.alphaTest, | |
metal: e.metal, | |
wrapAround: e.wrapAround, | |
doubleSided: e.side === THREE.DoubleSide, | |
flipSided: e.side === THREE.BackSide | |
}, | |
h = []; | |
s ? h.push(s) : (h.push(e.fragmentShader), h.push(e.vertexShader)); | |
if (e.defines !== undefined) | |
for (var p in e.defines) h.push(p), h.push(e.defines[p]); | |
for (var p in l) h.push(p), h.push(l[p]); | |
var d = h.join(), | |
v; | |
for (var m = 0, g = S.length; m < g; m++) { | |
var y = S[m]; | |
if (y.code === d) { | |
v = y, v.usedTimes++; | |
break | |
} | |
} | |
v === undefined && (v = new THREE.WebGLProgram(E, d, e, l), S.push(v), E.info.memory.programs = S.length), e.program = v; | |
var b = v.attributes; | |
if (e.morphTargets) { | |
e.numSupportedMorphTargets = 0; | |
var w, x = "morphTarget"; | |
for (var T = 0; T < E.maxMorphTargets; T++) w = x + T, b[w] >= 0 && e.numSupportedMorphTargets++ | |
} | |
if (e.morphNormals) { | |
e.numSupportedMorphNormals = 0; | |
var w, x = "morphNormal"; | |
for (T = 0; T < E.maxMorphNormals; T++) w = x + T, b[w] >= 0 && e.numSupportedMorphNormals++ | |
} | |
e.uniformsList = []; | |
for (var N in e.__webglShader.uniforms) { | |
var C = e.program.uniforms[N]; | |
C && e.uniformsList.push([e.__webglShader.uniforms[N], C]) | |
} | |
} | |
function Jt(e) { | |
e.transparent === !0 ? W.setBlending(e.blending, e.blendEquation, e.blendSrc, e.blendDst, e.blendEquationAlpha, e.blendSrcAlpha, e.blendDstAlpha) : W.setBlending(THREE.NoBlending), W.setDepthTest(e.depthTest), W.setDepthWrite(e.depthWrite), W.setColorWrite(e.colorWrite), W.setPolygonOffset(e.polygonOffset, e.polygonOffsetFactor, e.polygonOffsetUnits) | |
} | |
function Kt(e, t, n, r, i) { | |
L = 0, r.needsUpdate && (r.program && Et(r), $t(r, t, n, i), r.needsUpdate = !1); | |
var s = !1, | |
o = !1, | |
u = !1, | |
a = r.program, | |
f = a.uniforms, | |
l = r.__webglShader.uniforms; | |
a.id !== x && (R.useProgram(a.program), x = a.id, s = !0, o = !0, u = !0), r.id !== N && (N === -1 && (u = !0), N = r.id, o = !0); | |
if (s || e !== k) R.uniformMatrix4fv(f.projectionMatrix, !1, e.projectionMatrix.elements), c && R.uniform1f(f.logDepthBufFC, 2 / (Math.log(e.far + 1) / Math.LN2)), e !== k && (k = e), (r instanceof THREE.ShaderMaterial || r instanceof THREE.MeshPhongMaterial || r.envMap) && f.cameraPosition !== null && (j.setFromMatrixPosition(e.matrixWorld), R.uniform3f(f.cameraPosition, j.x, j.y, j.z)), (r instanceof THREE.MeshPhongMaterial || r instanceof THREE.MeshLambertMaterial || r instanceof THREE.MeshBasicMaterial || r instanceof THREE.ShaderMaterial || r.skinning) && f.viewMatrix !== null && R.uniformMatrix4fv(f.viewMatrix, !1, e.matrixWorldInverse.elements); | |
return o && un(r.uniformsList), sn(f, i), f.modelMatrix !== null && R.uniformMatrix4fv(f.modelMatrix, !1, i.matrixWorld.elements), a | |
} | |
function Qt(e, t) { | |
e.opacity.value = t.opacity, e.diffuse.value = t.color, e.map.value = t.map, e.lightMap.value = t.lightMap, e.specularMap.value = t.specularMap, e.alphaMap.value = t.alphaMap, t.bumpMap && (e.bumpMap.value = t.bumpMap, e.bumpScale.value = t.bumpScale), t.normalMap && (e.normalMap.value = t.normalMap, e.normalScale.value.copy(t.normalScale)); | |
var n; | |
t.map ? n = t.map : t.specularMap ? n = t.specularMap : t.normalMap ? n = t.normalMap : t.bumpMap ? n = t.bumpMap : t.alphaMap && (n = t.alphaMap); | |
if (n !== undefined) { | |
var r = n.offset, | |
i = n.repeat; | |
e.offsetRepeat.value.set(r.x, r.y, i.x, i.y) | |
} | |
e.envMap.value = t.envMap, e.flipEnvMap.value = t.envMap instanceof THREE.WebGLRenderTargetCube ? 1 : -1, e.reflectivity.value = t.reflectivity, e.refractionRatio.value = t.refractionRatio | |
} | |
function Gt(e, t) { | |
e.diffuse.value = t.color, e.opacity.value = t.opacity | |
} | |
function Yt(e, t) { | |
e.dashSize.value = t.dashSize, e.totalSize.value = t.dashSize + t.gapSize, e.scale.value = t.scale | |
} | |
function Zt(e, t) { | |
e.shininess.value = t.shininess, e.emissive.value = t.emissive, e.specular.value = t.specular, t.wrapAround && e.wrapRGB.value.copy(t.wrapRGB) | |
} | |
function en(e, t) { | |
e.emissive.value = t.emissive, t.wrapAround && e.wrapRGB.value.copy(t.wrapRGB) | |
} | |
function tn(e, t) { | |
e.ambientLightColor.value = t.ambient, e.directionalLightColor.value = t.directional.colors, e.directionalLightDirection.value = t.directional.positions, e.pointLightColor.value = t.point.colors, e.pointLightPosition.value = t.point.positions, e.pointLightDistance.value = t.point.distances, e.pointLightDecay.value = t.point.decays, e.spotLightColor.value = t.spot.colors, e.spotLightPosition.value = t.spot.positions, e.spotLightDistance.value = t.spot.distances, e.spotLightDirection.value = t.spot.directions, e.spotLightAngleCos.value = t.spot.anglesCos, e.spotLightExponent.value = t.spot.exponents, e.spotLightDecay.value = t.spot.decays, e.hemisphereLightSkyColor.value = t.hemi.skyColors, e.hemisphereLightGroundColor.value = t.hemi.groundColors, e.hemisphereLightDirection.value = t.hemi.positions | |
} | |
function nn(e, t) { | |
e.ambientLightColor.needsUpdate = t, e.directionalLightColor.needsUpdate = t, e.directionalLightDirection.needsUpdate = t, e.pointLightColor.needsUpdate = t, e.pointLightPosition.needsUpdate = t, e.pointLightDistance.needsUpdate = t, e.pointLightDecay.needsUpdate = t, e.spotLightColor.needsUpdate = t, e.spotLightPosition.needsUpdate = t, e.spotLightDistance.needsUpdate = t, e.spotLightDirection.needsUpdate = t, e.spotLightAngleCos.needsUpdate = t, e.spotLightExponent.needsUpdate = t, e.spotLightDecay.needsUpdate = t, e.hemisphereLightSkyColor.needsUpdate = t, e.hemisphereLightGroundColor.needsUpdate = t, e.hemisphereLightDirection.needsUpdate = t | |
} | |
function rn(e, t) { | |
if (e.shadowMatrix) { | |
var n = 0; | |
for (var r = 0, i = t.length; r < i; r++) { | |
var s = t[r]; | |
if (!s.castShadow) continue; | |
if (s instanceof THREE.SpotLight || s instanceof THREE.DirectionalLight && !s.shadowCascade) e.shadowMap.value[n] = s.shadowMap, e.shadowMapSize.value[n] = s.shadowMapSize, e.shadowMatrix.value[n] = s.shadowMatrix, e.shadowDarkness.value[n] = s.shadowDarkness, e.shadowBias.value[n] = s.shadowBias, n++ | |
} | |
} | |
} | |
function sn(e, t) { | |
R.uniformMatrix4fv(e.modelViewMatrix, !1, t._modelViewMatrix.elements), e.normalMatrix && R.uniformMatrix3fv(e.normalMatrix, !1, t._normalMatrix.elements) | |
} | |
function on() { | |
var e = L; | |
return e >= K && THREE.warn("WebGLRenderer: trying to use " + e + " texture units while this GPU supports only " + K), L += 1, e | |
} | |
function un(e) { | |
var t, n, r; | |
for (var i = 0, s = e.length; i < s; i++) { | |
var o = e[i][0]; | |
if (o.needsUpdate === !1) continue; | |
var u = o.type, | |
a = o.value, | |
f = e[i][1]; | |
switch (u) { | |
case "1i": | |
R.uniform1i(f, a); | |
break; | |
case "1f": | |
R.uniform1f(f, a); | |
break; | |
case "2f": | |
R.uniform2f(f, a[0], a[1]); | |
break; | |
case "3f": | |
R.uniform3f(f, a[0], a[1], a[2]); | |
break; | |
case "4f": | |
R.uniform4f(f, a[0], a[1], a[2], a[3]); | |
break; | |
case "1iv": | |
R.uniform1iv(f, a); | |
break; | |
case "3iv": | |
R.uniform3iv(f, a); | |
break; | |
case "1fv": | |
R.uniform1fv(f, a); | |
break; | |
case "2fv": | |
R.uniform2fv(f, a); | |
break; | |
case "3fv": | |
R.uniform3fv(f, a); | |
break; | |
case "4fv": | |
R.uniform4fv(f, a); | |
break; | |
case "Matrix3fv": | |
R.uniformMatrix3fv(f, !1, a); | |
break; | |
case "Matrix4fv": | |
R.uniformMatrix4fv(f, !1, a); | |
break; | |
case "i": | |
R.uniform1i(f, a); | |
break; | |
case "f": | |
R.uniform1f(f, a); | |
break; | |
case "v2": | |
R.uniform2f(f, a.x, a.y); | |
break; | |
case "v3": | |
R.uniform3f(f, a.x, a.y, a.z); | |
break; | |
case "v4": | |
R.uniform4f(f, a.x, a.y, a.z, a.w); | |
break; | |
case "c": | |
R.uniform3f(f, a.r, a.g, a.b); | |
break; | |
case "iv1": | |
R.uniform1iv(f, a); | |
break; | |
case "iv": | |
R.uniform3iv(f, a); | |
break; | |
case "fv1": | |
R.uniform1fv(f, a); | |
break; | |
case "fv": | |
R.uniform3fv(f, a); | |
break; | |
case "v2v": | |
o._array === undefined && (o._array = new Float32Array(2 * a.length)); | |
for (var l = 0, c = a.length; l < c; l++) r = l * 2, o._array[r] = a[l].x, o._array[r + 1] = a[l].y; | |
R.uniform2fv(f, o._array); | |
break; | |
case "v3v": | |
o._array === undefined && (o._array = new Float32Array(3 * a.length)); | |
for (var l = 0, c = a.length; l < c; l++) r = l * 3, o._array[r] = a[l].x, o._array[r + 1] = a[l].y, o._array[r + 2] = a[l].z; | |
R.uniform3fv(f, o._array); | |
break; | |
case "v4v": | |
o._array === undefined && (o._array = new Float32Array(4 * a.length)); | |
for (var l = 0, c = a.length; l < c; l++) r = l * 4, o._array[r] = a[l].x, o._array[r + 1] = a[l].y, o._array[r + 2] = a[l].z, o._array[r + 3] = a[l].w; | |
R.uniform4fv(f, o._array); | |
break; | |
case "m3": | |
R.uniformMatrix3fv(f, !1, a.elements); | |
break; | |
case "m3v": | |
o._array === undefined && (o._array = new Float32Array(9 * a.length)); | |
for (var l = 0, c = a.length; l < c; l++) a[l].flattenToArrayOffset(o._array, l * 9); | |
R.uniformMatrix3fv(f, !1, o._array); | |
break; | |
case "m4": | |
R.uniformMatrix4fv(f, !1, a.elements); | |
break; | |
case "m4v": | |
o._array === undefined && (o._array = new Float32Array(16 * a.length)); | |
for (var l = 0, c = a.length; l < c; l++) a[l].flattenToArrayOffset(o._array, l * 16); | |
R.uniformMatrix4fv(f, !1, o._array); | |
break; | |
case "t": | |
t = a, n = on(), R.uniform1i(f, n); | |
if (!t) continue; | |
t instanceof THREE.CubeTexture || t.image instanceof Array && t.image.length === 6 ? hn(t, n) : t instanceof THREE.WebGLRenderTargetCube ? pn(t, n) : E.setTexture(t, n); | |
break; | |
case "tv": | |
o._array === undefined && (o._array = []); | |
for (var l = 0, c = o.value.length; l < c; l++) o._array[l] = on(); | |
R.uniform1iv(f, o._array); | |
for (var l = 0, c = o.value.length; l < c; l++) { | |
t = o.value[l], n = o._array[l]; | |
if (!t) continue; | |
E.setTexture(t, n) | |
} | |
break; | |
default: | |
THREE.warn("THREE.WebGLRenderer: Unknown uniform type: " + u) | |
} | |
} | |
} | |
function an(e, t) { | |
e._modelViewMatrix.multiplyMatrices(t.matrixWorldInverse, e.matrixWorld), e._normalMatrix.getNormalMatrix(e._modelViewMatrix) | |
} | |
function fn(e, t, n, r) { | |
e[t] = n.r * r, e[t + 1] = n.g * r, e[t + 2] = n.b * r | |
} | |
function ln(e, t, n) { | |
var r; | |
n ? (R.texParameteri(e, R.TEXTURE_WRAP_S, yn(t.wrapS)), R.texParameteri(e, R.TEXTURE_WRAP_T, yn(t.wrapT)), R.texParameteri(e, R.TEXTURE_MAG_FILTER, yn(t.magFilter)), R.texParameteri(e, R.TEXTURE_MIN_FILTER, yn(t.minFilter))) : (R.texParameteri(e, R.TEXTURE_WRAP_S, R.CLAMP_TO_EDGE), R.texParameteri(e, R.TEXTURE_WRAP_T, R.CLAMP_TO_EDGE), (t.wrapS !== THREE.ClampToEdgeWrapping || t.wrapT !== THREE.ClampToEdgeWrapping) && THREE.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping. ( " + t.sourceFile + " )"), R.texParameteri(e, R.TEXTURE_MAG_FILTER, gn(t.magFilter)), R.texParameteri(e, R.TEXTURE_MIN_FILTER, gn(t.minFilter)), t.minFilter !== THREE.NearestFilter && t.minFilter !== THREE.LinearFilter && THREE.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter. ( " + t.sourceFile + " )")), r = X.get("EXT_texture_filter_anisotropic"), r && t.type !== THREE.FloatType && t.type !== THREE.HalfFloatType && (t.anisotropy > 1 || t.__currentAnisotropy) && (R.texParameterf(e, r.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(t.anisotropy, E.getMaxAnisotropy())), t.__currentAnisotropy = t.anisotropy) | |
} | |
function cn(e, t) { | |
if (e.width > t || e.height > t) { | |
var n = t / Math.max(e.width, e.height), | |
r = document.createElement("canvas"); | |
r.width = Math.floor(e.width * n), r.height = Math.floor(e.height * n); | |
var i = r.getContext("2d"); | |
return i.drawImage(e, 0, 0, e.width, e.height, 0, 0, r.width, r.height), THREE.warn("THREE.WebGLRenderer: image is too big (" + e.width + "x" + e.height + "). Resized to " + r.width + "x" + r.height, e), r | |
} | |
return e | |
} | |
function hn(e, t) { | |
if (e.image.length === 6) | |
if (e.needsUpdate) { | |
e.image.__webglTextureCube || (e.addEventListener("dispose", dt), e.image.__webglTextureCube = R.createTexture(), E.info.memory.textures++), R.activeTexture(R.TEXTURE0 + t), R.bindTexture(R.TEXTURE_CUBE_MAP, e.image.__webglTextureCube), R.pixelStorei(R.UNPACK_FLIP_Y_WEBGL, e.flipY); | |
var n = e instanceof THREE.CompressedTexture, | |
r = e.image[0] instanceof THREE.DataTexture, | |
i = []; | |
for (var s = 0; s < 6; s++) E.autoScaleCubemaps && !n && !r ? i[s] = cn(e.image[s], Y) : i[s] = r ? e.image[s].image : e.image[s]; | |
var o = i[0], | |
u = THREE.Math.isPowerOfTwo(o.width) && THREE.Math.isPowerOfTwo(o.height), | |
a = yn(e.format), | |
f = yn(e.type); | |
ln(R.TEXTURE_CUBE_MAP, e, u); | |
for (var s = 0; s < 6; s++) | |
if (!n) r ? R.texImage2D(R.TEXTURE_CUBE_MAP_POSITIVE_X + s, 0, a, i[s].width, i[s].height, 0, a, f, i[s].data) : R.texImage2D(R.TEXTURE_CUBE_MAP_POSITIVE_X + s, 0, a, a, f, i[s]); | |
else { | |
var l, c = i[s].mipmaps; | |
for (var h = 0, p = c.length; h < p; h++) l = c[h], e.format !== THREE.RGBAFormat && e.format !== THREE.RGBFormat ? st().indexOf(a) > -1 ? R.compressedTexImage2D(R.TEXTURE_CUBE_MAP_POSITIVE_X + s, h, a, l.width, l.height, 0, l.data) : THREE.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()") : R.texImage2D(R.TEXTURE_CUBE_MAP_POSITIVE_X + s, h, a, l.width, l.height, 0, a, f, l.data) | |
} | |
e.generateMipmaps && u && R.generateMipmap(R.TEXTURE_CUBE_MAP), e.needsUpdate = !1, e.onUpdate && e.onUpdate() | |
} else R.activeTexture(R.TEXTURE0 + t), R.bindTexture(R.TEXTURE_CUBE_MAP, e.image.__webglTextureCube) | |
} | |
function pn(e, t) { | |
R.activeTexture(R.TEXTURE0 + t), R.bindTexture(R.TEXTURE_CUBE_MAP, e.__webglTexture) | |
} | |
function dn(e, t, n) { | |
R.bindFramebuffer(R.FRAMEBUFFER, e), R.framebufferTexture2D(R.FRAMEBUFFER, R.COLOR_ATTACHMENT0, n, t.__webglTexture, 0) | |
} | |
function vn(e, t) { | |
R.bindRenderbuffer(R.RENDERBUFFER, e), t.depthBuffer && !t.stencilBuffer ? (R.renderbufferStorage(R.RENDERBUFFER, R.DEPTH_COMPONENT16, t.width, t.height), R.framebufferRenderbuffer(R.FRAMEBUFFER, R.DEPTH_ATTACHMENT, R.RENDERBUFFER, e)) : t.depthBuffer && t.stencilBuffer ? (R.renderbufferStorage(R.RENDERBUFFER, R.DEPTH_STENCIL, t.width, t.height), R.framebufferRenderbuffer(R.FRAMEBUFFER, R.DEPTH_STENCIL_ATTACHMENT, R.RENDERBUFFER, e)) : R.renderbufferStorage(R.RENDERBUFFER, R.RGBA4, t.width, t.height) | |
} | |
function mn(e) { | |
e instanceof THREE.WebGLRenderTargetCube ? (R.bindTexture(R.TEXTURE_CUBE_MAP, e.__webglTexture), R.generateMipmap(R.TEXTURE_CUBE_MAP), R.bindTexture(R.TEXTURE_CUBE_MAP, null)) : (R.bindTexture(R.TEXTURE_2D, e.__webglTexture), R.generateMipmap(R.TEXTURE_2D), R.bindTexture(R.TEXTURE_2D, null)) | |
} | |
function gn(e) { | |
return e === THREE.NearestFilter || e === THREE.NearestMipMapNearestFilter || e === THREE.NearestMipMapLinearFilter ? R.NEAREST : R.LINEAR | |
} | |
function yn(e) { | |
var t; | |
if (e === THREE.RepeatWrapping) return R.REPEAT; | |
if (e === THREE.ClampToEdgeWrapping) return R.CLAMP_TO_EDGE; | |
if (e === THREE.MirroredRepeatWrapping) return R.MIRRORED_REPEAT; | |
if (e === THREE.NearestFilter) return R.NEAREST; | |
if (e === THREE.NearestMipMapNearestFilter) return R.NEAREST_MIPMAP_NEAREST; | |
if (e === THREE.NearestMipMapLinearFilter) return R.NEAREST_MIPMAP_LINEAR; | |
if (e === THREE.LinearFilter) return R.LINEAR; | |
if (e === THREE.LinearMipMapNearestFilter) return R.LINEAR_MIPMAP_NEAREST; | |
if (e === THREE.LinearMipMapLinearFilter) return R.LINEAR_MIPMAP_LINEAR; | |
if (e === THREE.UnsignedByteType) return R.UNSIGNED_BYTE; | |
if (e === THREE.UnsignedShort4444Type) return R.UNSIGNED_SHORT_4_4_4_4; | |
if (e === THREE.UnsignedShort5551Type) return R.UNSIGNED_SHORT_5_5_5_1; | |
if (e === THREE.UnsignedShort565Type) return R.UNSIGNED_SHORT_5_6_5; | |
if (e === THREE.ByteType) return R.BYTE; | |
if (e === THREE.ShortType) return R.SHORT; | |
if (e === THREE.UnsignedShortType) return R.UNSIGNED_SHORT; | |
if (e === THREE.IntType) return R.INT; | |
if (e === THREE.UnsignedIntType) return R.UNSIGNED_INT; | |
if (e === THREE.FloatType) return R.FLOAT; | |
t = X.get("OES_texture_half_float"); | |
if (t !== null && e === THREE.HalfFloatType) return t.HALF_FLOAT_OES; | |
if (e === THREE.AlphaFormat) return R.ALPHA; | |
if (e === THREE.RGBFormat) return R.RGB; | |
if (e === THREE.RGBAFormat) return R.RGBA; | |
if (e === THREE.LuminanceFormat) return R.LUMINANCE; | |
if (e === THREE.LuminanceAlphaFormat) return R.LUMINANCE_ALPHA; | |
if (e === THREE.AddEquation) return R.FUNC_ADD; | |
if (e === THREE.SubtractEquation) return R.FUNC_SUBTRACT; | |
if (e === THREE.ReverseSubtractEquation) return R.FUNC_REVERSE_SUBTRACT; | |
if (e === THREE.ZeroFactor) return R.ZERO; | |
if (e === THREE.OneFactor) return R.ONE; | |
if (e === THREE.SrcColorFactor) return R.SRC_COLOR; | |
if (e === THREE.OneMinusSrcColorFactor) return R.ONE_MINUS_SRC_COLOR; | |
if (e === THREE.SrcAlphaFactor) return R.SRC_ALPHA; | |
if (e === THREE.OneMinusSrcAlphaFactor) return R.ONE_MINUS_SRC_ALPHA; | |
if (e === THREE.DstAlphaFactor) return R.DST_ALPHA; | |
if (e === THREE.OneMinusDstAlphaFactor) return R.ONE_MINUS_DST_ALPHA; | |
if (e === THREE.DstColorFactor) return R.DST_COLOR; | |
if (e === THREE.OneMinusDstColorFactor) return R.ONE_MINUS_DST_COLOR; | |
if (e === THREE.SrcAlphaSaturateFactor) return R.SRC_ALPHA_SATURATE; | |
t = X.get("WEBGL_compressed_texture_s3tc"); | |
if (t !== null) { | |
if (e === THREE.RGB_S3TC_DXT1_Format) return t.COMPRESSED_RGB_S3TC_DXT1_EXT; | |
if (e === THREE.RGBA_S3TC_DXT1_Format) return t.COMPRESSED_RGBA_S3TC_DXT1_EXT; | |
if (e === THREE.RGBA_S3TC_DXT3_Format) return t.COMPRESSED_RGBA_S3TC_DXT3_EXT; | |
if (e === THREE.RGBA_S3TC_DXT5_Format) return t.COMPRESSED_RGBA_S3TC_DXT5_EXT | |
} | |
t = X.get("WEBGL_compressed_texture_pvrtc"); | |
if (t !== null) { | |
if (e === THREE.RGB_PVRTC_4BPPV1_Format) return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; | |
if (e === THREE.RGB_PVRTC_2BPPV1_Format) return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; | |
if (e === THREE.RGBA_PVRTC_4BPPV1_Format) return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; | |
if (e === THREE.RGBA_PVRTC_2BPPV1_Format) return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG | |
} | |
t = X.get("EXT_blend_minmax"); | |
if (t !== null) { | |
if (e === THREE.MinEquation) return t.MIN_EXT; | |
if (e === THREE.MaxEquation) return t.MAX_EXT | |
} | |
return 0 | |
} | |
console.log("THREE.WebGLRenderer", THREE.REVISION), e = e || {}; | |
var t = e.canvas !== undefined ? e.canvas : document.createElement("canvas"), | |
n = e.context !== undefined ? e.context : null, | |
r = 1, | |
i = e.precision !== undefined ? e.precision : "highp", | |
s = e.alpha !== undefined ? e.alpha : !1, | |
o = e.depth !== undefined ? e.depth : !0, | |
u = e.stencil !== undefined ? e.stencil : !0, | |
a = e.antialias !== undefined ? e.antialias : !1, | |
f = e.premultipliedAlpha !== undefined ? e.premultipliedAlpha : !0, | |
l = e.preserveDrawingBuffer !== undefined ? e.preserveDrawingBuffer : !1, | |
c = e.logarithmicDepthBuffer !== undefined ? e.logarithmicDepthBuffer : !1, | |
h = new THREE.Color(0), | |
p = 0, | |
d = [], | |
v = {}, | |
m = [], | |
g = [], | |
y = [], | |
b = [], | |
w = []; | |
this.domElement = t, this.context = null, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.gammaFactor = 2, this.gammaInput = !1, this.gammaOutput = !1, this.shadowMapEnabled = !1, this.shadowMapType = THREE.PCFShadowMap, this.shadowMapCullFace = THREE.CullFaceFront, this.shadowMapDebug = !1, this.shadowMapCascade = !1, this.maxMorphTargets = 8, this.maxMorphNormals = 4, this.autoScaleCubemaps = !0, this.info = { | |
memory: { | |
programs: 0, | |
geometries: 0, | |
textures: 0 | |
}, | |
render: { | |
calls: 0, | |
vertices: 0, | |
faces: 0, | |
points: 0 | |
} | |
}; | |
var E = this, | |
S = [], | |
x = null, | |
T = null, | |
N = -1, | |
C = "", | |
k = null, | |
L = 0, | |
A = 0, | |
O = 0, | |
M = t.width, | |
_ = t.height, | |
D = 0, | |
P = 0, | |
H = new THREE.Frustum, | |
B = new THREE.Matrix4, | |
j = new THREE.Vector3, | |
F = new THREE.Vector3, | |
I = !0, | |
q = { | |
ambient: [0, 0, 0], | |
directional: { | |
length: 0, | |
colors: [], | |
positions: [] | |
}, | |
point: { | |
length: 0, | |
colors: [], | |
positions: [], | |
distances: [], | |
decays: [] | |
}, | |
spot: { | |
length: 0, | |
colors: [], | |
positions: [], | |
distances: [], | |
directions: [], | |
anglesCos: [], | |
exponents: [], | |
decays: [] | |
}, | |
hemi: { | |
length: 0, | |
skyColors: [], | |
groundColors: [], | |
positions: [] | |
} | |
}, | |
R; | |
try { | |
var U = { | |
alpha: s, | |
depth: o, | |
stencil: u, | |
antialias: a, | |
premultipliedAlpha: f, | |
preserveDrawingBuffer: l | |
}; | |
R = n || t.getContext("webgl", U) || t.getContext("experimental-webgl", U); | |
if (R === null) throw t.getContext("webgl") !== null ? "Error creating WebGL context with your selected attributes." : "Error creating WebGL context."; | |
t.addEventListener("webglcontextlost", function(e) { | |
e.preventDefault(), J(), $(), v = {} | |
}, !1) | |
} catch (z) { | |
THREE.error("THREE.WebGLRenderer: " + z) | |
} | |
var W = new THREE.WebGLState(R, yn); | |
R.getShaderPrecisionFormat === undefined && (R.getShaderPrecisionFormat = function() { | |
return { | |
rangeMin: 1, | |
rangeMax: 1, | |
precision: 1 | |
} | |
}); | |
var X = new THREE.WebGLExtensions(R); | |
X.get("OES_texture_float"), X.get("OES_texture_float_linear"), X.get("OES_texture_half_float"), X.get("OES_texture_half_float_linear"), X.get("OES_standard_derivatives"), c && X.get("EXT_frag_depth"); | |
var V = function(e, t, n, r) { | |
f === !0 && (e *= r, t *= r, n *= r), R.clearColor(e, t, n, r) | |
}, | |
$ = function() { | |
R.clearColor(0, 0, 0, 1), R.clearDepth(1), R.clearStencil(0), R.enable(R.DEPTH_TEST), R.depthFunc(R.LEQUAL), R.frontFace(R.CCW), R.cullFace(R.BACK), R.enable(R.CULL_FACE), R.enable(R.BLEND), R.blendEquation(R.FUNC_ADD), R.blendFunc(R.SRC_ALPHA, R.ONE_MINUS_SRC_ALPHA), R.viewport(A, O, M, _), V(h.r, h.g, h.b, p) | |
}, | |
J = function() { | |
x = null, k = null, C = "", N = -1, I = !0, W.reset() | |
}; | |
$(), this.context = R, this.state = W; | |
var K = R.getParameter(R.MAX_TEXTURE_IMAGE_UNITS), | |
Q = R.getParameter(R.MAX_VERTEX_TEXTURE_IMAGE_UNITS), | |
G = R.getParameter(R.MAX_TEXTURE_SIZE), | |
Y = R.getParameter(R.MAX_CUBE_MAP_TEXTURE_SIZE), | |
Z = Q > 0, | |
et = Z && X.get("OES_texture_float"), | |
tt = R.getShaderPrecisionFormat(R.VERTEX_SHADER, R.HIGH_FLOAT), | |
nt = R.getShaderPrecisionFormat(R.VERTEX_SHADER, R.MEDIUM_FLOAT), | |
rt = R.getShaderPrecisionFormat(R.FRAGMENT_SHADER, R.HIGH_FLOAT), | |
it = R.getShaderPrecisionFormat(R.FRAGMENT_SHADER, R.MEDIUM_FLOAT), | |
st = function() { | |
var e; | |
return function() { | |
if (e !== undefined) return e; | |
e = []; | |
if (X.get("WEBGL_compressed_texture_pvrtc") || X.get("WEBGL_compressed_texture_s3tc")) { | |
var t = R.getParameter(R.COMPRESSED_TEXTURE_FORMATS); | |
for (var n = 0; n < t.length; n++) e.push(t[n]) | |
} | |
return e | |
} | |
}(), | |
ot = tt.precision > 0 && rt.precision > 0, | |
ut = nt.precision > 0 && it.precision > 0; | |
i === "highp" && !ot && (ut ? (i = "mediump", THREE.warn("THREE.WebGLRenderer: highp not supported, using mediump.")) : (i = "lowp", THREE.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp."))), i === "mediump" && !ut && (i = "lowp", THREE.warn("THREE.WebGLRenderer: mediump not supported, using lowp.")); | |
var at = new THREE.ShadowMapPlugin(this, d, v, m), | |
ft = new THREE.SpritePlugin(this, b), | |
lt = new THREE.LensFlarePlugin(this, w); | |
this.getContext = function() { | |
return R | |
}, this.forceContextLoss = function() { | |
X.get("WEBGL_lose_context").loseContext() | |
}, this.supportsVertexTextures = function() { | |
return Z | |
}, this.supportsFloatTextures = function() { | |
return X.get("OES_texture_float") | |
}, this.supportsHalfFloatTextures = function() { | |
return X.get("OES_texture_half_float") | |
}, this.supportsStandardDerivatives = function() { | |
return X.get("OES_standard_derivatives") | |
}, this.supportsCompressedTextureS3TC = function() { | |
return X.get("WEBGL_compressed_texture_s3tc") | |
}, this.supportsCompressedTexturePVRTC = function() { | |
return X.get("WEBGL_compressed_texture_pvrtc") | |
}, this.supportsBlendMinMax = function() { | |
return X.get("EXT_blend_minmax") | |
}, this.getMaxAnisotropy = function() { | |
var e; | |
return function() { | |
if (e !== undefined) return e; | |
var t = X.get("EXT_texture_filter_anisotropic"); | |
return e = t !== null ? R.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0, e | |
} | |
}(), this.getPrecision = function() { | |
return i | |
}, this.getPixelRatio = function() { | |
return r | |
}, this.setPixelRatio = function(e) { | |
r = e | |
}, this.setSize = function(e, n, i) { | |
t.width = e * r, t.height = n * r, i !== !1 && (t.style.width = e + "px", t.style.height = n + "px"), this.setViewport(0, 0, e, n) | |
}, this.setViewport = function(e, t, n, i) { | |
A = e * r, O = t * r, M = n * r, _ = i * r, R.viewport(A, O, M, _) | |
}, this.setScissor = function(e, t, n, i) { | |
R.scissor(e * r, t * r, n * r, i * r) | |
}, this.enableScissorTest = function(e) { | |
e ? R.enable(R.SCISSOR_TEST) : R.disable(R.SCISSOR_TEST) | |
}, this.getClearColor = function() { | |
return h | |
}, this.setClearColor = function(e, t) { | |
h.set(e), p = t !== undefined ? t : 1, V(h.r, h.g, h.b, p) | |
}, this.getClearAlpha = function() { | |
return p | |
}, this.setClearAlpha = function(e) { | |
p = e, V(h.r, h.g, h.b, p) | |
}, this.clear = function(e, t, n) { | |
var r = 0; | |
if (e === undefined || e) r |= R.COLOR_BUFFER_BIT; | |
if (t === undefined || t) r |= R.DEPTH_BUFFER_BIT; | |
if (n === undefined || n) r |= R.STENCIL_BUFFER_BIT; | |
R.clear(r) | |
}, this.clearColor = function() { | |
R.clear(R.COLOR_BUFFER_BIT) | |
}, this.clearDepth = function() { | |
R.clear(R.DEPTH_BUFFER_BIT) | |
}, this.clearStencil = function() { | |
R.clear(R.STENCIL_BUFFER_BIT) | |
}, this.clearTarget = function(e, t, n, r) { | |
this.setRenderTarget(e), this.clear(t, n, r) | |
}, this.resetGLState = J; | |
var ht = function(e) { | |
var t = e.target; | |
t.traverse(function(e) { | |
e.removeEventListener("remove", ht), Wt(e) | |
}) | |
}, | |
pt = function(e) { | |
var t = e.target; | |
t.removeEventListener("dispose", pt), yt(t) | |
}, | |
dt = function(e) { | |
var t = e.target; | |
t.removeEventListener("dispose", dt), bt(t), E.info.memory.textures-- | |
}, | |
vt = function(e) { | |
var t = e.target; | |
t.removeEventListener("dispose", vt), wt(t), E.info.memory.textures-- | |
}, | |
mt = function(e) { | |
var t = e.target; | |
t.removeEventListener("dispose", mt), Et(t) | |
}, | |
gt = function(e) { | |
var t = ["__webglVertexBuffer", "__webglNormalBuffer", "__webglTangentBuffer", "__webglColorBuffer", "__webglUVBuffer", "__webglUV2Buffer", "__webglSkinIndicesBuffer", "__webglSkinWeightsBuffer", "__webglFaceBuffer", "__webglLineBuffer", "__webglLineDistanceBuffer"]; | |
for (var n = 0, r = t.length; n < r; n++) { | |
var i = t[n]; | |
e[i] !== undefined && (R.deleteBuffer(e[i]), delete e[i]) | |
} | |
if (e.__webglCustomAttributesList !== undefined) { | |
for (var i in e.__webglCustomAttributesList) R.deleteBuffer(e.__webglCustomAttributesList[i].buffer); | |
delete e.__webglCustomAttributesList | |
} | |
E.info.memory.geometries-- | |
}, | |
yt = function(e) { | |
delete e.__webglInit; | |
if (e instanceof THREE.BufferGeometry) { | |
for (var t in e.attributes) { | |
var n = e.attributes[t]; | |
n.buffer !== undefined && (R.deleteBuffer(n.buffer), delete n.buffer) | |
} | |
E.info.memory.geometries-- | |
} else { | |
var r = Bt[e.id]; | |
if (r !== undefined) { | |
for (var i = 0, s = r.length; i < s; i++) { | |
var o = r[i]; | |
if (o.numMorphTargets !== undefined) { | |
for (var u = 0, a = o.numMorphTargets; u < a; u++) R.deleteBuffer(o.__webglMorphTargetsBuffers[u]); | |
delete o.__webglMorphTargetsBuffers | |
} | |
if (o.numMorphNormals !== undefined) { | |
for (var u = 0, a = o.numMorphNormals; u < a; u++) R.deleteBuffer(o.__webglMorphNormalsBuffers[u]); | |
delete o.__webglMorphNormalsBuffers | |
} | |
gt(o) | |
} | |
delete Bt[e.id] | |
} else gt(e) | |
} | |
C = "" | |
}, | |
bt = function(e) { | |
if (e.image && e.image.__webglTextureCube) R.deleteTexture(e.image.__webglTextureCube), delete e.image.__webglTextureCube; | |
else { | |
if (e.__webglInit === undefined) return; | |
R.deleteTexture(e.__webglTexture), delete e.__webglTexture, delete e.__webglInit | |
} | |
}, | |
wt = function(e) { | |
if (!e || e.__webglTexture === undefined) return; | |
R.deleteTexture(e.__webglTexture), delete e.__webglTexture; | |
if (e instanceof THREE.WebGLRenderTargetCube) | |
for (var t = 0; t < 6; t++) R.deleteFramebuffer(e.__webglFramebuffer[t]), R.deleteRenderbuffer(e.__webglRenderbuffer[t]); | |
else R.deleteFramebuffer(e.__webglFramebuffer), R.deleteRenderbuffer(e.__webglRenderbuffer); | |
delete e.__webglFramebuffer, delete e.__webglRenderbuffer | |
}, | |
Et = function(e) { | |
var t = e.program.program; | |
if (t === undefined) return; | |
e.program = undefined; | |
var n, r, i, s = !1; | |
for (n = 0, r = S.length; n < r; n++) { | |
i = S[n]; | |
if (i.program === t) { | |
i.usedTimes--, i.usedTimes === 0 && (s = !0); | |
break | |
} | |
} | |
if (s === !0) { | |
var o = []; | |
for (n = 0, r = S.length; n < r; n++) i = S[n], i.program !== t && o.push(i); | |
S = o, R.deleteProgram(t), E.info.memory.programs-- | |
} | |
}; | |
this.renderBufferDirect = function(e, t, n, r, i, s) { | |
if (r.visible === !1) return; | |
Rt(s); | |
var o = Kt(e, t, n, r, s), | |
u = !1, | |
a = r.wireframe ? 1 : 0, | |
f = "direct_" + i.id + "_" + o.id + "_" + a; | |
f !== C && (C = f, u = !0), u && W.initAttributes(); | |
if (s instanceof THREE.Mesh) { | |
var l = r.wireframe === !0 ? R.LINES : R.TRIANGLES, | |
c = i.attributes.index; | |
if (i.drawRange) { | |
u && kt(r, o, i, 0); | |
var h = i.attributes.position; | |
R.drawArrays(l, 0, i.drawRange.count), E.info.render.calls++, E.info.render.vertices += h.array.length / h.itemSize, E.info.render.faces += h.array.length / (3 * h.itemSize) | |
} else if (c) { | |
var p, d; | |
c.array instanceof Uint32Array && X.get("OES_element_index_uint") ? (p = R.UNSIGNED_INT, d = 4) : (p = R.UNSIGNED_SHORT, d = 2); | |
var v = i.offsets; | |
if (v.length === 0) u && (kt(r, o, i, 0), R.bindBuffer(R.ELEMENT_ARRAY_BUFFER, c.buffer)), R.drawElements(l, c.array.length, p, 0), E.info.render.calls++, E.info.render.vertices += c.array.length, E.info.render.faces += c.array.length / 3; | |
else { | |
u = !0; | |
for (var m = 0, g = v.length; m < g; m++) { | |
var y = v[m].index; | |
u && (kt(r, o, i, y), R.bindBuffer(R.ELEMENT_ARRAY_BUFFER, c.buffer)), R.drawElements(l, v[m].count, p, v[m].start * d), E.info.render.calls++, E.info.render.vertices += v[m].count, E.info.render.faces += v[m].count / 3 | |
} | |
} | |
} else { | |
u && kt(r, o, i, 0); | |
var h = i.attributes.position; | |
R.drawArrays(l, 0, h.array.length / h.itemSize), E.info.render.calls++, E.info.render.vertices += h.array.length / h.itemSize, E.info.render.faces += h.array.length / (3 * h.itemSize) | |
} | |
} | |
}, this.renderBuffer = function(e, t, n, i, s, o) { | |
if (i.visible === !1) return; | |
Rt(o); | |
var u = Kt(e, t, n, i, o), | |
a = u.attributes, | |
f = !1, | |
l = i.wireframe ? 1 : 0, | |
c = s.id + "_" + u.id + "_" + l; | |
c !== C && (C = c, f = !0), f && W.initAttributes(), !i.morphTargets && a.position >= 0 ? f && (R.bindBuffer(R.ARRAY_BUFFER, s.__webglVertexBuffer), W.enableAttribute(a.position), R.vertexAttribPointer(a.position, 3, R.FLOAT, !1, 0, 0)) : o.morphTargetBase && Lt(i, s, o); | |
if (f) { | |
if (s.__webglCustomAttributesList) | |
for (var h = 0, p = s.__webglCustomAttributesList.length; h < p; h++) { | |
var d = s.__webglCustomAttributesList[h]; | |
a[d.buffer.belongsToAttribute] >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, d.buffer), W.enableAttribute(a[d.buffer.belongsToAttribute]), R.vertexAttribPointer(a[d.buffer.belongsToAttribute], d.size, R.FLOAT, !1, 0, 0)) | |
} | |
a.color >= 0 && (o.geometry.colors.length > 0 || o.geometry.faces.length > 0 ? (R.bindBuffer(R.ARRAY_BUFFER, s.__webglColorBuffer), W.enableAttribute(a.color), R.vertexAttribPointer(a.color, 3, R.FLOAT, !1, 0, 0)) : i.defaultAttributeValues !== undefined && R.vertexAttrib3fv(a.color, i.defaultAttributeValues.color)), a.normal >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, s.__webglNormalBuffer), W.enableAttribute(a.normal), R.vertexAttribPointer(a.normal, 3, R.FLOAT, !1, 0, 0)), a.tangent >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, s.__webglTangentBuffer), W.enableAttribute(a.tangent), R.vertexAttribPointer(a.tangent, 4, R.FLOAT, !1, 0, 0)), a.uv >= 0 && (o.geometry.faceVertexUvs[0] ? (R.bindBuffer(R.ARRAY_BUFFER, s.__webglUVBuffer), W.enableAttribute(a.uv), R.vertexAttribPointer(a.uv, 2, R.FLOAT, !1, 0, 0)) : i.defaultAttributeValues !== undefined && R.vertexAttrib2fv(a.uv, i.defaultAttributeValues.uv)), a.uv2 >= 0 && (o.geometry.faceVertexUvs[1] ? (R.bindBuffer(R.ARRAY_BUFFER, s.__webglUV2Buffer), W.enableAttribute(a.uv2), R.vertexAttribPointer(a.uv2, 2, R.FLOAT, !1, 0, 0)) : i.defaultAttributeValues !== undefined && R.vertexAttrib2fv(a.uv2, i.defaultAttributeValues.uv2)), i.skinning && a.skinIndex >= 0 && a.skinWeight >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, s.__webglSkinIndicesBuffer), W.enableAttribute(a.skinIndex), R.vertexAttribPointer(a.skinIndex, 4, R.FLOAT, !1, 0, 0), R.bindBuffer(R.ARRAY_BUFFER, s.__webglSkinWeightsBuffer), W.enableAttribute(a.skinWeight), R.vertexAttribPointer(a.skinWeight, 4, R.FLOAT, !1, 0, 0)), a.lineDistance >= 0 && (R.bindBuffer(R.ARRAY_BUFFER, s.__webglLineDistanceBuffer), W.enableAttribute(a.lineDistance), R.vertexAttribPointer(a.lineDistance, 1, R.FLOAT, !1, 0, 0)) | |
} | |
W.disableUnusedAttributes(); | |
if (o instanceof THREE.Mesh) { | |
var v = s.__typeArray === Uint32Array ? R.UNSIGNED_INT : R.UNSIGNED_SHORT; | |
i.wireframe ? (W.setLineWidth(i.wireframeLinewidth * r), f && R.bindBuffer(R.ELEMENT_ARRAY_BUFFER, s.__webglLineBuffer), R.drawElements(R.LINES, s.__webglLineCount, v, 0)) : (f && R.bindBuffer(R.ELEMENT_ARRAY_BUFFER, s.__webglFaceBuffer), R.drawElements(R.TRIANGLES, s.__webglFaceCount, v, 0)), E.info.render.calls++, E.info.render.vertices += s.__webglFaceCount, E.info.render.faces += s.__webglFaceCount / 3 | |
} | |
}, this.render = function(e, t, n, r) { | |
if (t instanceof THREE.Camera == 0) { | |
THREE.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera."); | |
return | |
} | |
var i = e.fog; | |
C = "", N = -1, k = null, I = !0, e.autoUpdate === !0 && e.updateMatrixWorld(), t.parent === undefined && t.updateMatrixWorld(), e.traverse(function(e) { | |
e instanceof THREE.SkinnedMesh && e.skeleton.update() | |
}), t.matrixWorldInverse.getInverse(t.matrixWorld), B.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), H.setFromMatrix(B), d.length = 0, g.length = 0, y.length = 0, b.length = 0, w.length = 0, _t(e), E.sortObjects === !0 && (g.sort(At), y.sort(Ot)), E.info.render.calls = 0, E.info.render.vertices = 0, E.info.render.faces = 0, E.info.render.points = 0, this.setRenderTarget(n), (this.autoClear || r) && this.clear(this.autoClearColor, this.autoClearDepth, this.autoClearStencil), W.setBlending(THREE.NoBlending), Dt(g, t, d, i, null), Dt(y, t, d, i, null), n && n.generateMipmaps && n.minFilter !== THREE.NearestFilter && n.minFilter !== THREE.LinearFilter && mn(n), W.setDepthTest(!0), W.setDepthWrite(!0), W.setColorWrite(!0) | |
}; | |
var Bt = {}, | |
jt = 0, | |
Vt = { | |
MeshDepthMaterial: "depth", | |
MeshNormalMaterial: "normal", | |
MeshBasicMaterial: "basic", | |
MeshLambertMaterial: "lambert", | |
MeshPhongMaterial: "phong", | |
LineBasicMaterial: "basic", | |
LineDashedMaterial: "dashed", | |
PointCloudMaterial: "particle_basic" | |
}; | |
this.setFaceCulling = function(e, t) { | |
e === THREE.CullFaceNone ? R.disable(R.CULL_FACE) : (t === THREE.FrontFaceDirectionCW ? R.frontFace(R.CW) : R.frontFace(R.CCW), e === THREE.CullFaceBack ? R.cullFace(R.BACK) : e === THREE.CullFaceFront ? R.cullFace(R.FRONT) : R.cullFace(R.FRONT_AND_BACK), R.enable(R.CULL_FACE)) | |
}, this.setMaterialFaces = function(e) { | |
W.setDoubleSided(e.side === THREE.DoubleSide), W.setFlipSided(e.side === THREE.BackSide) | |
}, this.uploadTexture = function(e) { | |
e.__webglInit === undefined && (e.__webglInit = !0, e.addEventListener("dispose", dt), e.__webglTexture = R.createTexture(), E.info.memory.textures++), R.bindTexture(R.TEXTURE_2D, e.__webglTexture), R.pixelStorei(R.UNPACK_FLIP_Y_WEBGL, e.flipY), R.pixelStorei(R.UNPACK_PREMULTIPLY_ALPHA_WEBGL, e.premultiplyAlpha), R.pixelStorei(R.UNPACK_ALIGNMENT, e.unpackAlignment), e.image = cn(e.image, G); | |
var t = e.image, | |
n = THREE.Math.isPowerOfTwo(t.width) && THREE.Math.isPowerOfTwo(t.height), | |
r = yn(e.format), | |
i = yn(e.type); | |
ln(R.TEXTURE_2D, e, n); | |
var s, o = e.mipmaps; | |
if (e instanceof THREE.DataTexture) | |
if (o.length > 0 && n) { | |
for (var u = 0, a = o.length; u < a; u++) s = o[u], R.texImage2D(R.TEXTURE_2D, u, r, s.width, s.height, 0, r, i, s.data); | |
e.generateMipmaps = !1 | |
} else R.texImage2D(R.TEXTURE_2D, 0, r, t.width, t.height, 0, r, i, t.data); | |
else if (e instanceof THREE.CompressedTexture) | |
for (var u = 0, a = o.length; u < a; u++) s = o[u], e.format !== THREE.RGBAFormat && e.format !== THREE.RGBFormat ? st().indexOf(r) > -1 ? R.compressedTexImage2D(R.TEXTURE_2D, u, r, s.width, s.height, 0, s.data) : THREE.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : R.texImage2D(R.TEXTURE_2D, u, r, s.width, s.height, 0, r, i, s.data); | |
else if (o.length > 0 && n) { | |
for (var u = 0, a = o.length; u < a; u++) s = o[u], R.texImage2D(R.TEXTURE_2D, u, r, r, i, s); | |
e.generateMipmaps = !1 | |
} else R.texImage2D(R.TEXTURE_2D, 0, r, r, i, e.image); | |
e.generateMipmaps && n && R.generateMipmap(R.TEXTURE_2D), e.needsUpdate = !1, e.onUpdate && e.onUpdate() | |
}, this.setTexture = function(e, t) { | |
R.activeTexture(R.TEXTURE0 + t), e.needsUpdate ? E.uploadTexture(e) : R.bindTexture(R.TEXTURE_2D, e.__webglTexture) | |
}, this.setRenderTarget = function(e) { | |
var t = e instanceof THREE.WebGLRenderTargetCube; | |
if (e && e.__webglFramebuffer === undefined) { | |
e.depthBuffer === undefined && (e.depthBuffer = !0), e.stencilBuffer === undefined && (e.stencilBuffer = !0), e.addEventListener("dispose", vt), e.__webglTexture = R.createTexture(), E.info.memory.textures++; | |
var n = THREE.Math.isPowerOfTwo(e.width) && THREE.Math.isPowerOfTwo(e.height), | |
r = yn(e.format), | |
i = yn(e.type); | |
if (t) { | |
e.__webglFramebuffer = [], e.__webglRenderbuffer = [], R.bindTexture(R.TEXTURE_CUBE_MAP, e.__webglTexture), ln(R.TEXTURE_CUBE_MAP, e, n); | |
for (var s = 0; s < 6; s++) e.__webglFramebuffer[s] = R.createFramebuffer(), e.__webglRenderbuffer[s] = R.createRenderbuffer(), R.texImage2D(R.TEXTURE_CUBE_MAP_POSITIVE_X + s, 0, r, e.width, e.height, 0, r, i, null), dn(e.__webglFramebuffer[s], e, R.TEXTURE_CUBE_MAP_POSITIVE_X + s), vn(e.__webglRenderbuffer[s], e); | |
n && R.generateMipmap(R.TEXTURE_CUBE_MAP) | |
} else e.__webglFramebuffer = R.createFramebuffer(), e.shareDepthFrom ? e.__webglRenderbuffer = e.shareDepthFrom.__webglRenderbuffer : e.__webglRenderbuffer = R.createRenderbuffer(), R.bindTexture(R.TEXTURE_2D, e.__webglTexture), ln(R.TEXTURE_2D, e, n), R.texImage2D(R.TEXTURE_2D, 0, r, e.width, e.height, 0, r, i, null), dn(e.__webglFramebuffer, e, R.TEXTURE_2D), e.shareDepthFrom ? e.depthBuffer && !e.stencilBuffer ? R.framebufferRenderbuffer(R.FRAMEBUFFER, R.DEPTH_ATTACHMENT, R.RENDERBUFFER, e.__webglRenderbuffer) : e.depthBuffer && e.stencilBuffer && R.framebufferRenderbuffer(R.FRAMEBUFFER, R.DEPTH_STENCIL_ATTACHMENT, R.RENDERBUFFER, e.__webglRenderbuffer) : vn(e.__webglRenderbuffer, e), n && R.generateMipmap(R.TEXTURE_2D); | |
t ? R.bindTexture(R.TEXTURE_CUBE_MAP, null) : R.bindTexture(R.TEXTURE_2D, null), R.bindRenderbuffer(R.RENDERBUFFER, null), R.bindFramebuffer(R.FRAMEBUFFER, null) | |
} | |
var o, u, a, f, l; | |
e ? (t ? o = e.__webglFramebuffer[e.activeCubeFace] : o = e.__webglFramebuffer, u = e.width, a = e.height, f = 0, l = 0) : (o = null, u = M, a = _, f = A, l = O), o !== T && (R.bindFramebuffer(R.FRAMEBUFFER, o), R.viewport(f, l, u, a), T = o), D = u, P = a | |
}, this.readRenderTargetPixels = function(e, t, n, r, i, s) { | |
if (!(e instanceof THREE.WebGLRenderTarget)) { | |
console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget."); | |
return | |
} | |
if (e.__webglFramebuffer) { | |
if (e.format !== THREE.RGBAFormat) { | |
console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA format. readPixels can read only RGBA format."); | |
return | |
} | |
var o = !1; | |
e.__webglFramebuffer !== T && (R.bindFramebuffer(R.FRAMEBUFFER, e.__webglFramebuffer), o = !0), R.checkFramebufferStatus(R.FRAMEBUFFER) === R.FRAMEBUFFER_COMPLETE ? R.readPixels(t, n, r, i, R.RGBA, R.UNSIGNED_BYTE, s) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."), o && R.bindFramebuffer(R.FRAMEBUFFER, T) | |
} | |
}, this.initMaterial = function() { | |
THREE.warn("THREE.WebGLRenderer: .initMaterial() has been removed.") | |
}, this.addPrePlugin = function() { | |
THREE.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.") | |
}, this.addPostPlugin = function() { | |
THREE.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.") | |
}, this.updateShadowMap = function() { | |
THREE.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.") | |
} | |
}, THREE.WebGLRenderTarget = function(e, t, n) { | |
this.width = e, this.height = t, n = n || {}, this.wrapS = n.wrapS !== undefined ? n.wrapS : THREE.ClampToEdgeWrapping, this.wrapT = n.wrapT !== undefined ? n.wrapT : THREE.ClampToEdgeWrapping, this.magFilter = n.magFilter !== undefined ? n.magFilter : THREE.LinearFilter, this.minFilter = n.minFilter !== undefined ? n.minFilter : THREE.LinearMipMapLinearFilter, this.anisotropy = n.anisotropy !== undefined ? n.anisotropy : 1, this.offset = new THREE.Vector2(0, 0), this.repeat = new THREE.Vector2(1, 1), this.format = n.format !== undefined ? n.format : THREE.RGBAFormat, this.type = n.type !== undefined ? n.type : THREE.UnsignedByteType, this.depthBuffer = n.depthBuffer !== undefined ? n.depthBuffer : !0, this.stencilBuffer = n.stencilBuffer !== undefined ? n.stencilBuffer : !0, this.generateMipmaps = !0, this.shareDepthFrom = n.shareDepthFrom !== undefined ? n.shareDepthFrom : null | |
}, THREE.WebGLRenderTarget.prototype = { | |
constructor: THREE.WebGLRenderTarget, | |
setSize: function(e, t) { | |
this.width = e, this.height = t | |
}, | |
clone: function() { | |
var e = new THREE.WebGLRenderTarget(this.width, this.height); | |
return e.wrapS = this.wrapS, e.wrapT = this.wrapT, e.magFilter = this.magFilter, e.minFilter = this.minFilter, e.anisotropy = this.anisotropy, e.offset.copy(this.offset), e.repeat.copy(this.repeat), e.format = this.format, e.type = this.type, e.depthBuffer = this.depthBuffer, e.stencilBuffer = this.stencilBuffer, e.generateMipmaps = this.generateMipmaps, e.shareDepthFrom = this.shareDepthFrom, e | |
}, | |
dispose: function() { | |
this.dispatchEvent({ | |
type: "dispose" | |
}) | |
} | |
}, THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype), THREE.WebGLExtensions = function(e) { | |
var t = {}; | |
this.get = function(n) { | |
if (t[n] !== undefined) return t[n]; | |
var r; | |
switch (n) { | |
case "EXT_texture_filter_anisotropic": | |
r = e.getExtension("EXT_texture_filter_anisotropic") || e.getExtension("MOZ_EXT_texture_filter_anisotropic") || e.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); | |
break; | |
case "WEBGL_compressed_texture_s3tc": | |
r = e.getExtension("WEBGL_compressed_texture_s3tc") || e.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || e.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); | |
break; | |
case "WEBGL_compressed_texture_pvrtc": | |
r = e.getExtension("WEBGL_compressed_texture_pvrtc") || e.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); | |
break; | |
default: | |
r = e.getExtension(n) | |
} | |
return r === null && THREE.warn("THREE.WebGLRenderer: " + n + " extension not supported."), t[n] = r, r | |
} | |
}, THREE.WebGLProgram = function() { | |
var e = 0, | |
t = function(e) { | |
var t, n, r = []; | |
for (var i in e) { | |
t = e[i]; | |
if (t === !1) continue; | |
n = "#define " + i + " " + t, r.push(n) | |
} | |
return r.join("\n") | |
}, | |
n = function(e, t, n) { | |
var r = {}; | |
for (var i = 0, s = n.length; i < s; i++) { | |
var o = n[i]; | |
r[o] = e.getUniformLocation(t, o) | |
} | |
return r | |
}, | |
r = function(e, t, n) { | |
var r = {}; | |
for (var i = 0, s = n.length; i < s; i++) { | |
var o = n[i]; | |
r[o] = e.getAttribLocation(t, o) | |
} | |
return r | |
}; | |
return function(i, s, o, u) { | |
var a = i, | |
f = a.context, | |
l = o.defines, | |
c = o.__webglShader.uniforms, | |
h = o.attributes, | |
p = o.__webglShader.vertexShader, | |
d = o.__webglShader.fragmentShader, | |
v = o.index0AttributeName; | |
v === undefined && u.morphTargets === !0 && (v = "position"); | |
var m = "SHADOWMAP_TYPE_BASIC"; | |
u.shadowMapType === THREE.PCFShadowMap ? m = "SHADOWMAP_TYPE_PCF" : u.shadowMapType === THREE.PCFSoftShadowMap && (m = "SHADOWMAP_TYPE_PCF_SOFT"); | |
var g = "ENVMAP_TYPE_CUBE", | |
y = "ENVMAP_MODE_REFLECTION", | |
b = "ENVMAP_BLENDING_MULTIPLY"; | |
if (u.envMap) { | |
switch (o.envMap.mapping) { | |
case THREE.CubeReflectionMapping: | |
case THREE.CubeRefractionMapping: | |
g = "ENVMAP_TYPE_CUBE"; | |
break; | |
case THREE.EquirectangularReflectionMapping: | |
case THREE.EquirectangularRefractionMapping: | |
g = "ENVMAP_TYPE_EQUIREC"; | |
break; | |
case THREE.SphericalReflectionMapping: | |
g = "ENVMAP_TYPE_SPHERE" | |
} | |
switch (o.envMap.mapping) { | |
case THREE.CubeRefractionMapping: | |
case THREE.EquirectangularRefractionMapping: | |
y = "ENVMAP_MODE_REFRACTION" | |
} | |
switch (o.combine) { | |
case THREE.MultiplyOperation: | |
b = "ENVMAP_BLENDING_MULTIPLY"; | |
break; | |
case THREE.MixOperation: | |
b = "ENVMAP_BLENDING_MIX"; | |
break; | |
case THREE.AddOperation: | |
b = "ENVMAP_BLENDING_ADD" | |
} | |
} | |
var w = i.gammaFactor > 0 ? i.gammaFactor : 1, | |
E = t(l), | |
S = f.createProgram(), | |
x, T; | |
o instanceof THREE.RawShaderMaterial ? (x = "", T = "") : (x = ["precision " + u.precision + " float;", "precision " + u.precision + " int;", E, u.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", a.gammaInput ? "#define GAMMA_INPUT" : "", a.gammaOutput ? "#define GAMMA_OUTPUT" : "", "#define GAMMA_FACTOR " + w, "#define MAX_DIR_LIGHTS " + u.maxDirLights, "#define MAX_POINT_LIGHTS " + u.maxPointLights, "#define MAX_SPOT_LIGHTS " + u.maxSpotLights, "#define MAX_HEMI_LIGHTS " + u.maxHemiLights, "#define MAX_SHADOWS " + u.maxShadows, "#define MAX_BONES " + u.maxBones, u.map ? "#define USE_MAP" : "", u.envMap ? "#define USE_ENVMAP" : "", u.envMap ? "#define " + y : "", u.lightMap ? "#define USE_LIGHTMAP" : "", u.bumpMap ? "#define USE_BUMPMAP" : "", u.normalMap ? "#define USE_NORMALMAP" : "", u.specularMap ? "#define USE_SPECULARMAP" : "", u.alphaMap ? "#define USE_ALPHAMAP" : "", u.vertexColors ? "#define USE_COLOR" : "", u.flatShading ? "#define FLAT_SHADED" : "", u.skinning ? "#define USE_SKINNING" : "", u.useVertexTexture ? "#define BONE_TEXTURE" : "", u.morphTargets ? "#define USE_MORPHTARGETS" : "", u.morphNormals ? "#define USE_MORPHNORMALS" : "", u.wrapAround ? "#define WRAP_AROUND" : "", u.doubleSided ? "#define DOUBLE_SIDED" : "", u.flipSided ? "#define FLIP_SIDED" : "", u.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", u.shadowMapEnabled ? "#define " + m : "", u.shadowMapDebug ? "#define SHADOWMAP_DEBUG" : "", u.shadowMapCascade ? "#define SHADOWMAP_CASCADE" : "", u.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", u.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "attribute vec2 uv2;", "#ifdef USE_COLOR", " attribute vec3 color;", "#endif", "#ifdef USE_MORPHTARGETS", " attribute vec3 morphTarget0;", " attribute vec3 morphTarget1;", " attribute vec3 morphTarget2;", " attribute vec3 morphTarget3;", " #ifdef USE_MORPHNORMALS", " attribute vec3 morphNormal0;", " attribute vec3 morphNormal1;", " attribute vec3 morphNormal2;", " attribute vec3 morphNormal3;", " #else", " attribute vec3 morphTarget4;", " attribute vec3 morphTarget5;", " attribute vec3 morphTarget6;", " attribute vec3 morphTarget7;", " #endif", "#endif", "#ifdef USE_SKINNING", " attribute vec4 skinIndex;", " attribute vec4 skinWeight;", "#endif", ""].join("\n"), T = ["precision " + u.precision + " float;", "precision " + u.precision + " int;", u.bumpMap || u.normalMap || u.flatShading ? "#extension GL_OES_standard_derivatives : enable" : "", E, "#define MAX_DIR_LIGHTS " + u.maxDirLights, "#define MAX_POINT_LIGHTS " + u.maxPointLights, "#define MAX_SPOT_LIGHTS " + u.maxSpotLights, "#define MAX_HEMI_LIGHTS " + u.maxHemiLights, "#define MAX_SHADOWS " + u.maxShadows, u.alphaTest ? "#define ALPHATEST " + u.alphaTest : "", a.gammaInput ? "#define GAMMA_INPUT" : "", a.gammaOutput ? "#define GAMMA_OUTPUT" : "", "#define GAMMA_FACTOR " + w, u.useFog && u.fog ? "#define USE_FOG" : "", u.useFog && u.fogExp ? "#define FOG_EXP2" : "", u.map ? "#define USE_MAP" : "", u.envMap ? "#define USE_ENVMAP" : "", u.envMap ? "#define " + g : "", u.envMap ? "#define " + y : "", u.envMap ? "#define " + b : "", u.lightMap ? "#define USE_LIGHTMAP" : "", u.bumpMap ? "#define USE_BUMPMAP" : "", u.normalMap ? "#define USE_NORMALMAP" : "", u.specularMap ? "#define USE_SPECULARMAP" : "", u.alphaMap ? "#define USE_ALPHAMAP" : "", u.vertexColors ? "#define USE_COLOR" : "", u.flatShading ? "#define FLAT_SHADED" : "", u.metal ? "#define METAL" : "", u.wrapAround ? "#define WRAP_AROUND" : "", u.doubleSided ? "#define DOUBLE_SIDED" : "", u.flipSided ? "#define FLIP_SIDED" : "", u.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", u.shadowMapEnabled ? "#define " + m : "", u.shadowMapDebug ? "#define SHADOWMAP_DEBUG" : "", u.shadowMapCascade ? "#define SHADOWMAP_CASCADE" : "", u.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", ""].join("\n")); | |
var N = new THREE.WebGLShader(f, f.VERTEX_SHADER, x + p), | |
C = new THREE.WebGLShader(f, f.FRAGMENT_SHADER, T + d); | |
f.attachShader(S, N), f.attachShader(S, C), v !== undefined && f.bindAttribLocation(S, 0, v), f.linkProgram(S); | |
var k = f.getProgramInfoLog(S); | |
f.getProgramParameter(S, f.LINK_STATUS) === !1 && THREE.error("THREE.WebGLProgram: shader error: " + f.getError(), "gl.VALIDATE_STATUS", f.getProgramParameter(S, f.VALIDATE_STATUS), "gl.getPRogramInfoLog", k), k !== "" && THREE.warn("THREE.WebGLProgram: gl.getProgramInfoLog()" + k), f.deleteShader(N), f.deleteShader(C); | |
var L = ["viewMatrix", "modelViewMatrix", "projectionMatrix", "normalMatrix", "modelMatrix", "cameraPosition", "morphTargetInfluences", "bindMatrix", "bindMatrixInverse"]; | |
u.useVertexTexture ? (L.push("boneTexture"), L.push("boneTextureWidth"), L.push("boneTextureHeight")) : L.push("boneGlobalMatrices"), u.logarithmicDepthBuffer && L.push("logDepthBufFC"); | |
for (var A in c) L.push(A); | |
this.uniforms = n(f, S, L), L = ["position", "normal", "uv", "uv2", "tangent", "color", "skinIndex", "skinWeight", "lineDistance"]; | |
for (var O = 0; O < u.maxMorphTargets; O++) L.push("morphTarget" + O); | |
for (var O = 0; O < u.maxMorphNormals; O++) L.push("morphNormal" + O); | |
for (var M in h) L.push(M); | |
return this.attributes = r(f, S, L), this.attributesKeys = Object.keys(this.attributes), this.id = e++, this.code = s, this.usedTimes = 1, this.program = S, this.vertexShader = N, this.fragmentShader = C, this | |
} | |
}(), THREE.WebGLShader = function() { | |
var e = function(e) { | |
var t = e.split("\n"); | |
for (var n = 0; n < t.length; n++) t[n] = n + 1 + ": " + t[n]; | |
return t.join("\n") | |
}; | |
return function(t, n, r) { | |
var i = t.createShader(n); | |
return t.shaderSource(i, r), t.compileShader(i), t.getShaderParameter(i, t.COMPILE_STATUS) === !1 && THREE.error("THREE.WebGLShader: Shader couldn't compile."), t.getShaderInfoLog(i) !== "" && THREE.warn("THREE.WebGLShader: gl.getShaderInfoLog()", t.getShaderInfoLog(i), e(r)), i | |
} | |
}(), THREE.WebGLState = function(e, t) { | |
var n = new Uint8Array(16), | |
r = new Uint8Array(16), | |
i = null, | |
s = null, | |
o = null, | |
u = null, | |
a = null, | |
f = null, | |
l = null, | |
c = null, | |
h = null, | |
p = null, | |
d = null, | |
v = null, | |
m = null, | |
g = null, | |
y = null, | |
b = null; | |
this.initAttributes = function() { | |
for (var e = 0, t = n.length; e < t; e++) n[e] = 0 | |
}, this.enableAttribute = function(t) { | |
n[t] = 1, r[t] === 0 && (e.enableVertexAttribArray(t), r[t] = 1) | |
}, this.disableUnusedAttributes = function() { | |
for (var t = 0, i = r.length; t < i; t++) r[t] !== n[t] && (e.disableVertexAttribArray(t), r[t] = 0) | |
}, this.setBlending = function(n, r, c, h, p, d, v) { | |
n !== i && (n === THREE.NoBlending ? e.disable(e.BLEND) : n === THREE.AdditiveBlending ? (e.enable(e.BLEND), e.blendEquation(e.FUNC_ADD), e.blendFunc(e.SRC_ALPHA, e.ONE)) : n === THREE.SubtractiveBlending ? (e.enable(e.BLEND), e.blendEquation(e.FUNC_ADD), e.blendFunc(e.ZERO, e.ONE_MINUS_SRC_COLOR)) : n === THREE.MultiplyBlending ? (e.enable(e.BLEND), e.blendEquation(e.FUNC_ADD), e.blendFunc(e.ZERO, e.SRC_COLOR)) : n === THREE.CustomBlending ? e.enable(e.BLEND) : (e.enable(e.BLEND), e.blendEquationSeparate(e.FUNC_ADD, e.FUNC_ADD), e.blendFuncSeparate(e.SRC_ALPHA, e.ONE_MINUS_SRC_ALPHA, e.ONE, e.ONE_MINUS_SRC_ALPHA)), i = n); | |
if (n === THREE.CustomBlending) { | |
p = p || r, d = d || c, v = v || h; | |
if (r !== s || p !== a) e.blendEquationSeparate(t(r), t(p)), s = r, a = p; | |
if (c !== o || h !== u || d !== f || v !== l) e.blendFuncSeparate(t(c), t(h), t(d), t(v)), o = c, u = h, f = d, l = v | |
} else s = null, o = null, u = null, a = null, f = null, l = null | |
}, this.setDepthTest = function(t) { | |
c !== t && (t ? e.enable(e.DEPTH_TEST) : e.disable(e.DEPTH_TEST), c = t) | |
}, this.setDepthWrite = function(t) { | |
h !== t && (e.depthMask(t), h = t) | |
}, this.setColorWrite = function(t) { | |
p !== t && (e.colorMask(t, t, t, t), p = t) | |
}, this.setDoubleSided = function(t) { | |
d !== t && (t ? e.disable(e.CULL_FACE) : e.enable(e.CULL_FACE), d = t) | |
}, this.setFlipSided = function(t) { | |
v !== t && (t ? e.frontFace(e.CW) : e.frontFace(e.CCW), v = t) | |
}, this.setLineWidth = function(t) { | |
t !== m && (e.lineWidth(t), m = t) | |
}, this.setPolygonOffset = function(t, n, r) { | |
g !== t && (t ? e.enable(e.POLYGON_OFFSET_FILL) : e.disable(e.POLYGON_OFFSET_FILL), g = t), t && (y !== n || b !== r) && (e.polygonOffset(n, r), y = n, b = r) | |
}, this.reset = function() { | |
for (var e = 0; e < r.length; e++) r[e] = 0; | |
i = null, c = null, h = null, p = null, d = null, v = null | |
} | |
}, THREE.ImageUtils = { | |
crossOrigin: undefined, | |
loadTexture: function(e, t, n, r) { | |
var i = new THREE.ImageLoader; | |
i.crossOrigin = this.crossOrigin; | |
var s = new THREE.Texture(undefined, t); | |
return i.load(e, function(e) { | |
s.image = e, s.needsUpdate = !0, n && n(s) | |
}, undefined, function(e) { | |
r && r(e) | |
}), s.sourceFile = e, s | |
}, | |
loadTextureCube: function(e, t, n, r) { | |
var i = [], | |
s = new THREE.ImageLoader; | |
s.crossOrigin = this.crossOrigin; | |
var o = new THREE.CubeTexture(i, t); | |
o.flipY = !1; | |
var u = 0, | |
a = function(t) { | |
s.load(e[t], function(e) { | |
o.images[t] = e, u += 1, u === 6 && (o.needsUpdate = !0, n && n(o)) | |
}, undefined, r) | |
}; | |
for (var f = 0, l = e.length; f < l; ++f) a(f); | |
return o | |
}, | |
loadCompressedTexture: function() { | |
THREE.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") | |
}, | |
loadCompressedTextureCube: function() { | |
THREE.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") | |
}, | |
getNormalMap: function(e, t) { | |
var n = function(e, t) { | |
return [e[1] * t[2] - e[2] * t[1], e[2] * t[0] - e[0] * t[2], e[0] * t[1] - e[1] * t[0]] | |
}, | |
r = function(e, t) { | |
return [e[0] - t[0], e[1] - t[1], e[2] - t[2]] | |
}, | |
i = function(e) { | |
var t = Math.sqrt(e[0] * e[0] + e[1] * e[1] + e[2] * e[2]); | |
return [e[0] / t, e[1] / t, e[2] / t] | |
}; | |
t |= 1; | |
var s = e.width, | |
o = e.height, | |
u = document.createElement("canvas"); | |
u.width = s, u.height = o; | |
var a = u.getContext("2d"); | |
a.drawImage(e, 0, 0); | |
var f = a.getImageData(0, 0, s, o).data, | |
l = a.createImageData(s, o), | |
c = l.data; | |
for (var h = 0; h < s; h++) | |
for (var p = 0; p < o; p++) { | |
var d = p - 1 < 0 ? 0 : p - 1, | |
v = p + 1 > o - 1 ? o - 1 : p + 1, | |
m = h - 1 < 0 ? 0 : h - 1, | |
g = h + 1 > s - 1 ? s - 1 : h + 1, | |
y = [], | |
b = [0, 0, f[(p * s + h) * 4] / 255 * t]; | |
y.push([-1, 0, f[(p * s + m) * 4] / 255 * t]), y.push([-1, -1, f[(d * s + m) * 4] / 255 * t]), y.push([0, -1, f[(d * s + h) * 4] / 255 * t]), y.push([1, -1, f[(d * s + g) * 4] / 255 * t]), y.push([1, 0, f[(p * s + g) * 4] / 255 * t]), y.push([1, 1, f[(v * s + g) * 4] / 255 * t]), y.push([0, 1, f[(v * s + h) * 4] / 255 * t]), y.push([-1, 1, f[(v * s + m) * 4] / 255 * t]); | |
var w = [], | |
E = y.length; | |
for (var S = 0; S < E; S++) { | |
var x = y[S], | |
T = y[(S + 1) % E]; | |
x = r(x, b), T = r(T, b), w.push(i(n(x, T))) | |
} | |
var N = [0, 0, 0]; | |
for (var S = 0; S < w.length; S++) N[0] += w[S][0], N[1] += w[S][1], N[2] += w[S][2]; | |
N[0] /= w.length, N[1] /= w.length, N[2] /= w.length; | |
var C = (p * s + h) * 4; | |
c[C] = (N[0] + 1) / 2 * 255 | 0, c[C + 1] = (N[1] + 1) / 2 * 255 | 0, c[C + 2] = N[2] * 255 | 0, c[C + 3] = 255 | |
} | |
return a.putImageData(l, 0, 0), u | |
}, | |
generateDataTexture: function(e, t, n) { | |
var r = e * t, | |
i = new Uint8Array(3 * r), | |
s = Math.floor(n.r * 255), | |
o = Math.floor(n.g * 255), | |
u = Math.floor(n.b * 255); | |
for (var a = 0; a < r; a++) i[a * 3] = s, i[a * 3 + 1] = o, i[a * 3 + 2] = u; | |
var f = new THREE.DataTexture(i, e, t, THREE.RGBFormat); | |
return f.needsUpdate = !0, f | |
} | |
}, THREE.BoxGeometry = function(e, t, n, r, i, s) { | |
function l(e, t, n, r, i, s, u, a) { | |
var f, l, c, h = o.widthSegments, | |
p = o.heightSegments, | |
d = i / 2, | |
v = s / 2, | |
m = o.vertices.length; | |
if (e === "x" && t === "y" || e === "y" && t === "x") f = "z"; | |
else if (e === "x" && t === "z" || e === "z" && t === "x") f = "y", p = o.depthSegments; | |
else if (e === "z" && t === "y" || e === "y" && t === "z") f = "x", h = o.depthSegments; | |
var g = h + 1, | |
y = p + 1, | |
b = i / h, | |
w = s / p, | |
E = new THREE.Vector3; | |
E[f] = u > 0 ? 1 : -1; | |
for (c = 0; c < y; c++) | |
for (l = 0; l < g; l++) { | |
var S = new THREE.Vector3; | |
S[e] = (l * b - d) * n, S[t] = (c * w - v) * r, S[f] = u, o.vertices.push(S) | |
} | |
for (c = 0; c < p; c++) | |
for (l = 0; l < h; l++) { | |
var x = l + g * c, | |
T = l + g * (c + 1), | |
N = l + 1 + g * (c + 1), | |
C = l + 1 + g * c, | |
k = new THREE.Vector2(l / h, 1 - c / p), | |
L = new THREE.Vector2(l / h, 1 - (c + 1) / p), | |
A = new THREE.Vector2((l + 1) / h, 1 - (c + 1) / p), | |
O = new THREE.Vector2((l + 1) / h, 1 - c / p), | |
M = new THREE.Face3(x + m, T + m, C + m); | |
M.normal.copy(E), M.vertexNormals.push(E.clone(), E.clone(), E.clone()), M.materialIndex = a, o.faces.push(M), o.faceVertexUvs[0].push([k, L, O]), M = new THREE.Face3(T + m, N + m, C + m), M.normal.copy(E), M.vertexNormals.push(E.clone(), E.clone(), E.clone()), M.materialIndex = a, o.faces.push(M), o.faceVertexUvs[0].push([L.clone(), A, O.clone()]) | |
} | |
} | |
THREE.Geometry.call(this), this.type = "BoxGeometry", this.parameters = { | |
width: e, | |
height: t, | |
depth: n, | |
widthSegments: r, | |
heightSegments: i, | |
depthSegments: s | |
}, this.widthSegments = r || 1, this.heightSegments = i || 1, this.depthSegments = s || 1; | |
var o = this, | |
u = e / 2, | |
a = t / 2, | |
f = n / 2; | |
l("z", "y", -1, -1, n, t, u, 0), l("z", "y", 1, -1, n, t, -u, 1), l("x", "z", 1, 1, e, n, a, 2), l("x", "z", 1, -1, e, n, -a, 3), l("x", "y", 1, -1, e, t, f, 4), l("x", "y", -1, -1, e, t, -f, 5), this.mergeVertices() | |
}, THREE.BoxGeometry.prototype = Object.create(THREE.Geometry.prototype), THREE.BoxGeometry.prototype.constructor = THREE.BoxGeometry, THREE.PlaneGeometry = function(e, t, n, r) { | |
console.info("THREE.PlaneGeometry: Consider using THREE.PlaneBufferGeometry for lower memory footprint."), THREE.Geometry.call(this), this.type = "PlaneGeometry", this.parameters = { | |
width: e, | |
height: t, | |
widthSegments: n, | |
heightSegments: r | |
}, this.fromBufferGeometry(new THREE.PlaneBufferGeometry(e, t, n, r)) | |
}, THREE.PlaneGeometry.prototype = Object.create(THREE.Geometry.prototype), THREE.PlaneGeometry.prototype.constructor = THREE.PlaneGeometry, THREE.PlaneBufferGeometry = function(e, t, n, r) { | |
THREE.BufferGeometry.call(this), this.type = "PlaneBufferGeometry", this.parameters = { | |
width: e, | |
height: t, | |
widthSegments: n, | |
heightSegments: r | |
}; | |
var i = e / 2, | |
s = t / 2, | |
o = n || 1, | |
u = r || 1, | |
a = o + 1, | |
f = u + 1, | |
l = e / o, | |
c = t / u, | |
h = new Float32Array(a * f * 3), | |
p = new Float32Array(a * f * 3), | |
d = new Float32Array(a * f * 2), | |
v = 0, | |
m = 0; | |
for (var g = 0; g < f; g++) { | |
var y = g * c - s; | |
for (var b = 0; b < a; b++) { | |
var w = b * l - i; | |
h[v] = w, h[v + 1] = -y, p[v + 2] = 1, d[m] = b / o, d[m + 1] = 1 - g / u, v += 3, m += 2 | |
} | |
} | |
v = 0; | |
var E = new(h.length / 3 > 65535 ? Uint32Array : Uint16Array)(o * u * 6); | |
for (var g = 0; g < u; g++) | |
for (var b = 0; b < o; b++) { | |
var S = b + a * g, | |
x = b + a * (g + 1), | |
T = b + 1 + a * (g + 1), | |
N = b + 1 + a * g; | |
E[v] = S, E[v + 1] = x, E[v + 2] = N, E[v + 3] = x, E[v + 4] = T, E[v + 5] = N, v += 6 | |
} | |
this.addAttribute("index", new THREE.BufferAttribute(E, 1)), this.addAttribute("position", new THREE.BufferAttribute(h, 3)), this.addAttribute("normal", new THREE.BufferAttribute(p, 3)), this.addAttribute("uv", new THREE.BufferAttribute(d, 2)) | |
}, THREE.PlaneBufferGeometry.prototype = Object.create(THREE.BufferGeometry.prototype), THREE.PlaneBufferGeometry.prototype.constructor = THREE.PlaneBufferGeometry, define("three", function(e) { | |
return function() { | |
var t, n; | |
return t || e.THREE | |
} | |
}(this)), define("FLOCK/utils/Polyfills", [], function() { | |
Function.prototype.bind || (Function.prototype.bind = function(t) { | |
var n = this; | |
if (typeof n != "function") throw new TypeError; | |
var r = slice.call(arguments, 1), | |
i = function() { | |
if (this instanceof i) { | |
var e = function() {}; | |
e.prototype = n.prototype; | |
var s = new e, | |
o = n.apply(s, r.concat(slice.call(arguments))); | |
return Object(o) === o ? o : s | |
} | |
return n.apply(t, r.concat(slice.call(arguments))) | |
}; | |
return i | |
}), | |
function() { | |
Array.prototype.indexOf || (Array.prototype.indexOf = function(e, t) { | |
if (this === undefined || this === null) throw new TypeError('"this" is null or not defined'); | |
var n = this.length >>> 0; | |
t = +t || 0, Math.abs(t) === Infinity && (t = 0), t < 0 && (t += n, t < 0 && (t = 0)); | |
for (; t < n; t++) | |
if (this[t] === e) return t; | |
return -1 | |
}) | |
}(), | |
function() { | |
if (!document.getElementsByClassName) { | |
var e = [].indexOf || function(e) { | |
for (var t = 0; t < this.length; t++) | |
if (this[t] === e) return t; | |
return -1 | |
}; | |
getElementsByClassName = function(t, n) { | |
var r = document.querySelectorAll ? n.querySelectorAll("." + t) : function() { | |
var r = n.getElementsByTagName("*"), | |
i = [], | |
s = 0; | |
for (; s < r.length; s++) r[s].className && (" " + r[s].className + " ").indexOf(" " + t + " ") > -1 && e.call(i, r[s]) === -1 && i.push(r[s]); | |
return i | |
}(); | |
return r | |
}, document.getElementsByClassName = function(e) { | |
return getElementsByClassName(e, document) | |
}, Element.prototype.getElementsByClassName = function(e) { | |
return getElementsByClassName(e, this) | |
} | |
} | |
}(), | |
function() { | |
typeof document != "undefined" && !("classList" in document.documentElement) && function(e) { | |
if (!("HTMLElement" in e || "Element" in e)) return; | |
var t = "classList", | |
n = "prototype", | |
r = (e.HTMLElement || e.Element)[n], | |
i = Object, | |
s = String[n].trim || function() { | |
return this.replace(/^\s+|\s+$/g, "") | |
}, | |
o = Array[n].indexOf || function(e) { | |
var t = 0, | |
n = this.length; | |
for (; t < n; t++) | |
if (t in this && this[t] === e) return t; | |
return -1 | |
}, | |
u = function(e, t) { | |
this.name = e, this.code = DOMException[e], this.message = t | |
}, | |
a = function(e, t) { | |
if (t === "") throw new u("SYNTAX_ERR", "An invalid or illegal string was specified"); | |
if (/\s/.test(t)) throw new u("INVALID_CHARACTER_ERR", "String contains an invalid character"); | |
return o.call(e, t) | |
}, | |
f = function(e) { | |
var t = s.call(e.className), | |
n = t ? t.split(/\s+/) : [], | |
r = 0, | |
i = n.length; | |
for (; r < i; r++) this.push(n[r]); | |
this._updateClassName = function() { | |
e.className = this.toString() | |
} | |
}, | |
l = f[n] = [], | |
c = function() { | |
return new f(this) | |
}; | |
u[n] = Error[n], l.item = function(e) { | |
return this[e] || null | |
}, l.contains = function(e) { | |
return e += "", a(this, e) !== -1 | |
}, l.add = function() { | |
var e = arguments, | |
t = 0, | |
n = e.length, | |
r, i = !1; | |
do r = e[t] + "", a(this, r) === -1 && (this.push(r), i = !0); while (++t < n); | |
i && this._updateClassName() | |
}, l.remove = function() { | |
var e = arguments, | |
t = 0, | |
n = e.length, | |
r, i = !1; | |
do { | |
r = e[t] + ""; | |
var s = a(this, r); | |
s !== -1 && (this.splice(s, 1), i = !0) | |
} while (++t < n); | |
i && this._updateClassName() | |
}, l.toggle = function(e, t) { | |
e += ""; | |
var n = this.contains(e), | |
r = n ? t !== !0 && "remove" : t !== !1 && "add"; | |
return r && this[r](e), !n | |
}, l.toString = function() { | |
return this.join(" ") | |
}; | |
if (i.defineProperty) { | |
var h = { | |
get: c, | |
enumerable: !0, | |
configurable: !0 | |
}; | |
try { | |
i.defineProperty(r, t, h) | |
} catch (p) { | |
p.number === -2146823252 && (h.enumerable = !1, i.defineProperty(r, t, h)) | |
} | |
} else i[n].__defineGetter__ && r.__defineGetter__(t, c) | |
}(self) | |
}(), | |
function(e, t) { | |
function o(t, i, o, u) { | |
t[r](n + i, s == "wheel" ? o : function(t) { | |
!t && (t = e.event); | |
var n = { | |
originalEvent: t, | |
target: t.target || t.srcElement, | |
type: "wheel", | |
deltaMode: t.type == "MozMousePixelScroll" ? 0 : 1, | |
deltaX: 0, | |
delatZ: 0, | |
preventDefault: function() { | |
t.preventDefault ? t.preventDefault() : t.returnValue = !1 | |
} | |
}; | |
return s == "mousewheel" ? (n.deltaY = -1 / 40 * t.wheelDelta, t.wheelDeltaX && (n.deltaX = -1 / 40 * t.wheelDeltaX)) : n.deltaY = t.detail, o(n) | |
}, u || !1) | |
} | |
var n = "", | |
r, i, s; | |
e.addEventListener ? r = "addEventListener" : (r = "attachEvent", n = "on"), s = "onwheel" in t.createElement("div") ? "wheel" : t.onmousewheel !== undefined ? "mousewheel" : "DOMMouseScroll", e.addWheelListener = function(e, t, n) { | |
o(e, s, t, n), s == "DOMMouseScroll" && o(e, "MozMousePixelScroll", t, n) | |
} | |
}(window, document), | |
function() { | |
var e, t = function() {}, | |
n = ["assert", "clear", "count", "debug", "dir", "dirxml", "error", "exception", "group", "groupCollapsed", "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd", "table", "time", "timeEnd", "timeStamp", "trace", "warn"], | |
r = n.length, | |
i = window.console = window.console || {}; | |
while (r--) { | |
e = n[r]; | |
if (!i[e] || env === "prod") i[e] = t | |
} | |
}(), | |
function() { | |
var e = 0, | |
t = ["webkit", "moz"]; | |
for (var n = 0; n < t.length && !window.requestAnimationFrame; ++n) window.requestAnimationFrame = window[t[n] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[t[n] + "CancelAnimationFrame"] || window[t[n] + "CancelRequestAnimationFrame"]; | |
window.requestAnimationFrame || (window.requestAnimationFrame = function(t, n) { | |
var r = (new Date).getTime(), | |
i = Math.max(0, 16 - (r - e)), | |
s = window.setTimeout(function() { | |
t(r + i) | |
}, i); | |
return e = r + i, s | |
}), window.cancelAnimationFrame || (window.cancelAnimationFrame = function(e) { | |
clearTimeout(e) | |
}) | |
}() | |
}), | |
function(e, t) { | |
e.utils = e.utils || {}, typeof define == "function" && define.amd ? define("FLOCK/utils/DeviceDetect", [], function() { | |
return e.utils.DeviceDetect = t() | |
}) : e.utils.DeviceDetect = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
var e = {}, | |
t = { | |
isMobile: function() { | |
var e = navigator.platform.toLowerCase(), | |
t = /(iphone|ipod|android|palm|windows\sphone|blackberry)/g; | |
return e.match(t) === null ? !1 : !0 | |
}, | |
searchString: function(e) { | |
for (var t = 0; t < e.length; t++) { | |
var n = e[t].string; | |
this.versionSearchString = e[t].subString; | |
if (n.indexOf(e[t].subString) != -1) return e[t].identity | |
} | |
}, | |
searchVersion: function(e) { | |
var t = e.indexOf(this.versionSearchString); | |
if (t == -1) return; | |
return parseFloat(e.substring(t + this.versionSearchString.length + 1)) | |
}, | |
dataBrowser: [{ | |
string: navigator.userAgent, | |
subString: "Android", | |
identity: "Android" | |
}, { | |
string: navigator.userAgent, | |
subString: "Chrome", | |
identity: "Chrome" | |
}, { | |
string: navigator.userAgent, | |
subString: "MSIE", | |
identity: "Explorer" | |
}, { | |
string: navigator.userAgent, | |
subString: "Trident", | |
identity: "Explorer" | |
}, { | |
string: navigator.userAgent, | |
subString: "Firefox", | |
identity: "Firefox" | |
}, { | |
string: navigator.userAgent, | |
subString: "Opera", | |
identity: "Opera" | |
}, { | |
string: navigator.userAgent, | |
subString: "iPod", | |
identity: "iPod" | |
}, { | |
string: navigator.userAgent, | |
subString: "iPad", | |
identity: "iPad" | |
}, { | |
string: navigator.userAgent, | |
subString: "iPhone", | |
identity: "iPhone" | |
}, { | |
string: navigator.userAgent, | |
subString: "Safari", | |
identity: "Safari" | |
}] | |
}; | |
return e.browser = t.searchString(t.dataBrowser) || "Other", e.version = t.searchVersion(navigator.userAgent) || t.searchVersion(navigator.appVersion) || "Unknown", e.isIphone = e.browser === "iPhone", e.isIpod = e.browser === "iPod", e.isIpad = e.browser === "iPad", e.isIOS = e.browser === "iPhone" || e.browser === "iPad" || e.browser === "iPod", e.isAndroid = e.browser === "Android", e.isMobile = t.isMobile(), e.isMac = navigator.appVersion.indexOf("Mac") != -1 ? !0 : !1, e.isIE = e.browser === "Explorer" ? !0 : !1, e.isIETouch = e.browser === "Explorer" && navigator.userAgent.indexOf("Touch") >= 0 ? !0 : !1, e.isEarlyIE = navigator.userAgent.indexOf("MSIE 8.0") >= 0 ? !0 : !1, e | |
}), | |
function(e, t) { | |
e.utils = e.utils || {}, typeof define == "function" && define.amd ? define("FLOCK/utils/ArrayExecuter", [], function() { | |
return e.utils.ArrayExecuter = t() | |
}) : e.utils.ArrayExecuter = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
function t(e) { | |
for (var t in e) e.hasOwnProperty(t) && (e[t] = null); | |
e = null | |
} | |
var e = function(e, t) { | |
this.task_arr = [], this.defaultScope = e || this, this.id = t || "", this.verbose = !1 | |
}; | |
return e.prototype = { | |
execute: function(e) { | |
this.verbose && console.log("ArrayExecuter | " + this.id + " | execute"), this.addNext(e), this.runStep("") | |
}, | |
addNext: function(e) { | |
this.verbose && console.log("ArrayExecuter | " + this.id + " | addNext"); | |
if (typeof e == "function") this.task_arr.unshift({ | |
fn: e, | |
vars: null | |
}); | |
else { | |
e.reverse(); | |
for (var t = 0; t < e.length; t++) e[t] && this.task_arr.unshift(e[t]) | |
} | |
}, | |
tackOn: function(e) { | |
this.verbose && console.log("ArrayExecuter | " + this.id + " | tackOn"); | |
for (var t = 0; t < e.length; t++) this.task_arr.push(e[t]); | |
this.runStep("") | |
}, | |
runFunctionInScope: function(e) { | |
var t = e[0], | |
n = e[1], | |
r = e.length > 2 ? e[2] : null; | |
e.length > 2 ? t[n](e[2]) : t[n]() | |
}, | |
runStep: function(e) { | |
this.verbose && console.log("ArrayExecuter | " + this.id + " | runStep"); | |
if (this.task_arr.length == 0) return; | |
var n = this.task_arr.shift(), | |
r = n.fn; | |
n.scope = n.scope || this.defaultScope, n.vars = n.vars || [], typeof n.vars == "string" && (n.vars = [n.vars]), r.apply(n.scope, n.vars), t(n) | |
}, | |
stepComplete: function(e) { | |
this.verbose && console.log("ArrayExecuter | " + this.id + " | stepComplete"), this.task_arr.length > 0 && window.requestAnimationFrame(this.runStep.bind(this)) | |
}, | |
stepComplete_instant: function(e) { | |
this.verbose && console.log("ArrayExecuter | " + this.id + " | stepComplete_instant"), this.task_arr.length > 0 && this.runStep() | |
}, | |
clearArrayExecuter: function() { | |
this.verbose && console.log("ArrayExecuter | " + this.id + " | clearArrayExecuter"), this.task_arr = [] | |
}, | |
destroy: function() { | |
for (var e = 0; e < this.task_arr.length; e++) t(this.task_arr[e]); | |
this.task_arr = [], this.defaultScope = null | |
} | |
}, e | |
}), | |
function(e, t) { | |
e.utils = e.utils || {}, typeof define == "function" && define.amd ? define("FLOCK/utils/SectionLoader", ["jquery", "FLOCK/utils/DeviceDetect", "FLOCK/utils/ArrayExecuter"], function(n) { | |
return e.utils.SectionLoader = t(n) | |
}) : e.utils.SectionLoader = t($) | |
}(window.FLOCK = window.FLOCK || {}, function(e) { | |
function i(t, n) { | |
e.ajax({ | |
dataType: "text", | |
url: t, | |
success: function(t) { | |
t = t.replace(/(\r\n|\n|\r)/gm, ""), t = t.replace(/\t/g, ""), FLOCK.app.dataSrc = this.localizationJSON = e.parseJSON(String(t)), this.setupSections.call(this), n && n() | |
}.bind(this) | |
}) | |
} | |
function s() { | |
var e, t; | |
for (e in FLOCK.app.dataSrc.sections) | |
if (FLOCK.app.dataSrc.sections.hasOwnProperty(e)) { | |
t = FLOCK.app.dataSrc.sections[e]; | |
if (t.visible === "false") continue; | |
t.data.base = FLOCK.settings.base_url || "", this.addSection(e, t) | |
} | |
} | |
function a(e) { | |
this.verbose && console.log("SectionLoader | addLoaderUI: " + e), o.loader = e | |
} | |
function f(e, t) { | |
var n = P(e); | |
n.files = n.files || {}; | |
if (typeof t == "String") n.addFiles.push(t); | |
else | |
for (var r = t.length - 1; r >= 0; r--) n.addFiles.push(t[r]) | |
} | |
function l(e, t) { | |
this.verbose && console.log("SectionLoader | addSection: " + e); | |
var n = o.sections.length, | |
r = t.files || {}, | |
i = r.templatePath || !1, | |
s = r.partials || {}, | |
u = r.images || !1, | |
a = r.htmlPath || !1, | |
f = r.cssPath || !1, | |
l = r.jsPath || !1, | |
h = r.addFiles || []; | |
if (c(e)) { | |
this.verbose && console.log("SectionLoader | addSection: section id " + e + " already exists"); | |
return | |
} | |
o.sections.push({ | |
id: e, | |
images: u, | |
data: t.data, | |
templatePath: i, | |
partials: s, | |
htmlPath: a, | |
htmlData: null, | |
cssPath: f, | |
cssData: null, | |
jsPath: l, | |
jsAttached: !0, | |
jsData: null, | |
addFiles: h, | |
loaded: !1 | |
}), e === "work" | |
} | |
function c(e) { | |
var t = o.sections.length; | |
while (t--) | |
if (o.sections[t].id === e) return !0; | |
return !1 | |
} | |
function h() { | |
this.verbose && (console.log("////////////////////////////////////////////"), console.log("////////////////////////////////////////////"), console.log("////////////////////////////////////////////")); | |
var e = [], | |
n = Array.prototype.slice.call(arguments), | |
r; | |
if (n.length === 1 && n[0] === "all") { | |
n = []; | |
for (var i = o.sections.length - 1; i >= 0; i--) n.push(o.sections[i].id) | |
} | |
if (n !== undefined && n !== null) | |
for (var i = n.length - 1; i >= 0; i--) typeof n[i] == "function" ? r = n[i] : c(n[i]) ? (this.verbose && console.log("SectionLoader | loadSection: " + n[i]), e.push({ | |
scope: this, | |
fn: this.initScrape, | |
vars: n[i] | |
})) : console.log("SECTION LOADER ERROR! section: " + n[i] + " does not exist"); | |
else this.verbose && console.log("SectionLoader | this.loadSection: input not valid"); | |
e.push({ | |
scope: this, | |
fn: this.loadFiles, | |
vars: null | |
}), r && e.push({ | |
fn: r, | |
vars: null | |
}), t.execute(e) | |
} | |
function p() { | |
var e = Array.prototype.slice.call(arguments), | |
n = e.pop(), | |
r, i, s = this.returnSectionOBJ(n); | |
if (s === undefined) { | |
this.verbose && console.log("SectionLoader | this.loadSection: section id " + n + " not found"), t.stepComplete_instant(); | |
return | |
} | |
if (s.loaded === !0) { | |
this.verbose && console.log("SectionLoader | this.loadSection: " + n + " is already loaded"), t.stepComplete_instant(); | |
return | |
} | |
o.currentlyLoadingIDs.push(s.id); | |
for (var u in s.partials) s.partials.hasOwnProperty(u) && o.templatesToLoad.push({ | |
template_name: u, | |
template_path: s.partials[u] | |
}); | |
r = s.addFiles.length; | |
while (r--) { | |
var a = s.addFiles[r]; | |
a.indexOf(".gif") > 0 || a.indexOf(".jpg") > 0 || a.indexOf(".jpeg") > 0 || a.indexOf(".png") > 0 ? T.call(this, a) : C.call(this, a) | |
} | |
i = s.images.length; | |
while (i--) { | |
var a = s.images[i]; | |
a.indexOf(".gif") > 0 || a.indexOf(".jpg") > 0 || a.indexOf(".jpeg") > 0 || a.indexOf(".png") > 0 ? T.call(this, a) : this.verbose && console.log("SectionLoader | not a supported fileType: " + a) | |
} | |
var f = []; | |
s.htmlPath && f.push({ | |
scope: this, | |
fn: this.loadHTML, | |
vars: [s] | |
}), s.templatePath && f.push({ | |
scope: this, | |
fn: this.loadTemplate, | |
vars: [s, s.templatePath] | |
}); | |
for (var l = o.templatesToLoad.length - 1; l >= 0; l--) f.push({ | |
scope: this, | |
fn: this.loadTemplate, | |
vars: [s, o.templatesToLoad[l]] | |
}); | |
s.cssPath && f.push({ | |
scope: this, | |
fn: this.loadCSS, | |
vars: [s] | |
}), t.execute(f) | |
} | |
function d(t) { | |
var n = this; | |
this.verbose && console.log("SectionLoader | loadHTML: " + t.htmlPath), e.get(t.htmlPath, function(e) { | |
n.htmlLoaded(t, e) | |
}) | |
} | |
function v(n, r) { | |
this.verbose && console.log("SectionLoader | htmlLoaded: "), n.htmlData = r; | |
var i = n.id; | |
if (H.localizationJSON && H.localizationJSON.sections) { | |
var s, o, u, a, f, l, c; | |
if (H.localizationJSON.sections.shared && H.localizationJSON.sections.shared.html) { | |
s = H.localizationJSON.sections.shared.html, o = s.length; | |
while (o--) c = s[o], n.htmlData = m(n.htmlData, c) | |
} | |
if (H.localizationJSON.sections[i] && H.localizationJSON.sections[i].html) { | |
s = H.localizationJSON.sections[i].html, o = s.length; | |
while (o--) c = s[o], n.htmlData = m(n.htmlData, c) | |
} | |
var h = document.createElement("div"); | |
h.innerHTML = n.htmlData; | |
var p = h.getElementsByClassName("styleholder"); | |
for (var d = p.length - 1; d >= 0; d--) p[d].parentNode.setAttribute("style", p[d].getAttribute("data-style")), p[d].parentNode.removeChild(p[d]); | |
n.htmlData = h.innerHTML | |
} | |
var v = /<img [^>]*src="([^"]+)"[^>]*>/g, | |
g; | |
e(n.htmlData).data("backplate") && T.call(this, e(n.htmlData).data("backplate")); | |
while ((g = v.exec(n.htmlData)) !== null) T.call(this, g[1]); | |
t.stepComplete_instant() | |
} | |
function m(e, t) { | |
var n = String(e), | |
r, i, s, o; | |
while (n.indexOf(String(t.ID)) > 0) { | |
r = "", i = t.css ? t.css.length : 0; | |
while (i--) o = t.css[i], o.VAL && (r += o.ID + ":" + o.VAL + ";"); | |
s = r == "" ? String(t.VAL) : '<span class="styleholder" data-style="' + r + '"></span>' + String(t.VAL), t.visible && String(t["visible"]).toLowerCase() == "false" && (s = ""), n = n.replace(String(t.ID), s) | |
} | |
return n | |
} | |
function g(t) { | |
var n = this; | |
this.verbose && console.log("SectionLoader | loadCSS: " + t.cssPath), e.get(t.cssPath, function(e) { | |
n.cssLoaded(t, e) | |
}, "text") | |
} | |
function y(e, n) { | |
this.verbose && console.log("SectionLoader | this.cssLoaded: " + e.id), e.cssData = String(n); | |
var r = e.id; | |
if (H.localizationJSON && H.localizationJSON.sections && H.localizationJSON.sections[r] && H.localizationJSON.sections[r].css) { | |
var i = H.localizationJSON.sections[r].css, | |
s = i.length; | |
while (s--) | |
while (String(e.cssData).indexOf(String(i[s].ID)) > 0) e.cssData = e.cssData.replace(String(i[s].ID), String(i[s].VAL)) | |
} | |
var o = e.cssData.match(/[^\(]+\.(gif|jpg|jpeg|png)/g); | |
if (o) { | |
var u = o.length; | |
while (u--) { | |
var a = o[u].replace("../", ""); | |
this.verbose && console.log("SectionLoader | cssLoaded: adding: " + a), T.call(this, a) | |
} | |
} | |
t.stepComplete() | |
} | |
function b(e) { | |
var t = this; | |
this.verbose && console.log("SectionLoader | loadJS: " + e.jsPath), e.jsPath && t.jsLoaded(e, null) | |
} | |
function w(e, n) { | |
this.verbose && console.log("SectionLoader | loadJS: success"), e.jsAttached = !0, t.stepComplete() | |
} | |
function E(e) { | |
var t = o.imagesToLoad.length; | |
while (t--) | |
if (o.imagesToLoad[t].url === e) return !0; | |
var n = o.miscToLoad.length; | |
while (n--) | |
if (o.miscToLoad[n].url === e) return !0; | |
return !1 | |
} | |
function S(n, i) { | |
var s = this, | |
o = typeof i == "string" ? i : i.template_path; | |
e.get(r + o, function(e) { | |
typeof i == "string" ? n.template = e : n.partials[i.template_name] = e, Mustache.compile(e), t.stepComplete_instant() | |
}) | |
} | |
function x() { | |
var e = o.imagesToLoad.length, | |
t = o.miscToLoad.length, | |
n, r, i = this; | |
if (e + t < 1) { | |
this.complete(); | |
return | |
} | |
o.loader && o.loader.bringIn(); | |
while (e--) N.call(this, o.imagesToLoad[e]); | |
while (t--) k.call(this, o.miscToLoad[t]) | |
} | |
function T(e) { | |
if (!this.isDuplicate(e)) { | |
var t = o.imagesToLoad.length; | |
o.imagesToLoad.push({ | |
url: e, | |
index: t | |
}) | |
} | |
} | |
function N(t) { | |
this.verbose && console.log("SectionLoader | load image: " + t.url); | |
var n = t.url; | |
t.done = !1, t.size = this.getFileSize(n), newImage = new Image, newImage.alt = String(t.index), e(newImage).load(function() { | |
this.verbose && console.log("SectionLoader | image Loaded: " + t.url), t.done = !0, o.imagesLoaded++, H.checkComplete() | |
}.bind(this)).error("error", this.fileError), newImage.src = r + n | |
} | |
function C(e) { | |
this.isDuplicate(e) || o.miscToLoad.push({ | |
url: e | |
}) | |
} | |
function k(t) { | |
this.verbose && console.log("SectionLoader | xhr load: " + t.url); | |
var n = t.url; | |
t.perc = 0, t.done = !1, t.size = this.getFileSize(n), e.ajax({ | |
xhr: function() { | |
var e = new window.XMLHttpRequest; | |
return e.addEventListener("progress", function(e) { | |
e.lengthComputable ? t.perc = e.loaded / e.total : t.perc = 0 | |
}.bind(this), !1), e | |
}.bind(this), | |
type: "GET", | |
url: n, | |
success: function() { | |
t.done = !0, o.miscLoaded++, H.checkComplete() | |
}.bind(this) | |
}) | |
} | |
function L(e, t) { | |
this.filesizes.push({ | |
url: e, | |
size: t | |
}) | |
} | |
function A(e) { | |
for (var t = 0; t < this.filesizes.length; t++) | |
if (e == this.filesizes[t].url) return this.filesizes[t].size; | |
return this.defaultSize | |
} | |
function O() { | |
var e = 0, | |
t = 0; | |
for (var n = 0; n < o.miscToLoad.length; n++) t += o.miscToLoad[n].size, o.miscToLoad[n].done ? e += o.miscToLoad[n].size : e += o.miscToLoad[n].size * o.miscToLoad[n].perc; | |
for (var r = 0; r < o.imagesToLoad.length; r++) t += o.imagesToLoad[r].size, o.imagesToLoad[r].done && (e += o.imagesToLoad[r].size); | |
return e / t | |
} | |
function M(e) { | |
this.verbose && (console.log("SectionLoader | fileError"), console.log(e)) | |
} | |
function _() { | |
o.imagesLoaded >= o.imagesToLoad.length && o.miscLoaded >= o.miscToLoad.length && this.complete() | |
} | |
function D() { | |
this.verbose && (console.log("SectionLoader | complete: "), console.log("******************************************* "), console.log("******************************************* "), console.log("******************************************* ")); | |
var n = o.currentlyLoadingIDs.length; | |
while (n--) { | |
var r = o.currentlyLoadingIDs[n], | |
i = this.returnSectionOBJ(r); | |
i.loaded = !0; | |
if (i.cssPath) { | |
this.verbose && console.log("SectionLoader | attachCSS: " + i.cssPath); | |
if (H.localizationJSON && H.localizationJSON.sections && H.localizationJSON.sections[r] && H.localizationJSON.sections[r].css) e('<style type="text/css">' + i.cssData + "</style>").appendTo("head"); | |
else { | |
var s = document.createElement("link"); | |
s.setAttribute("rel", "stylesheet"), s.setAttribute("type", "text/css"), s.setAttribute("href", i.cssPath), document.getElementsByTagName("head")[0].appendChild(s) | |
} | |
} | |
} | |
o.currentlyLoadingIDs = [], o.imagesToLoad = [], o.imagesLoaded = 0, o.miscToLoad = [], o.miscLoaded = 0, o.loader && !o.loader.finished ? o.loader.complete(t.stepComplete_instant.bind(t)) : t.stepComplete_instant() | |
} | |
function P(e) { | |
var t, n = o.sections.length; | |
while (n--) o.sections[n].id === e && (t = o.sections[n]); | |
return t | |
} | |
var t = new FLOCK.utils.ArrayExecuter, | |
n = FLOCK.utils.DeviceDetect, | |
r = ""; | |
FLOCK.settings && (r = FLOCK.settings.base_url || ""); | |
var o = { | |
sections: [], | |
currentlyLoadingIDs: [], | |
templatesToLoad: [], | |
imagesToLoad: [], | |
imagesLoaded: 0, | |
miscToLoad: [], | |
miscLoaded: 0, | |
loader: null | |
}, | |
u = n.isMobile, | |
H = { | |
verbose: !1, | |
loadJSON: i, | |
setupSections: s, | |
localizationJSON: {}, | |
addLoaderUI: a, | |
addSection: l, | |
sectionExists: c, | |
addFiles: f, | |
loadSection: h, | |
initScrape: p, | |
loadHTML: d, | |
loadTemplate: S, | |
htmlLoaded: v, | |
loadCSS: g, | |
cssLoaded: y, | |
loadJS: b, | |
jsLoaded: w, | |
isDuplicate: E, | |
loadFiles: x, | |
filesizes: [], | |
defaultSize: 100, | |
setFileSize: L, | |
getFileSize: A, | |
getPerc: O, | |
fileError: M, | |
checkComplete: _, | |
complete: D, | |
returnSectionOBJ: P | |
}; | |
return H | |
}); | |
var _gsScope = "undefined" != typeof module && module.exports && "undefined" != typeof global ? global : this || window; | |
(_gsScope._gsQueue || (_gsScope._gsQueue = [])).push(function() { | |
_gsScope._gsDefine("TweenMax", ["core.Animation", "core.SimpleTimeline", "TweenLite"], function(e, t, n) { | |
var r = function(e) { | |
var t, n = [], | |
r = e.length; | |
for (t = 0; t !== r; n.push(e[t++])); | |
return n | |
}, | |
i = function(e, t, r) { | |
n.call(this, e, t, r), this._cycle = 0, this._yoyo = this.vars.yoyo === !0, this._repeat = this.vars.repeat || 0, this._repeatDelay = this.vars.repeatDelay || 0, this._dirty = !0, this.render = i.prototype.render | |
}, | |
s = 1e-10, | |
o = n._internals, | |
u = o.isSelector, | |
a = o.isArray, | |
f = i.prototype = n.to({}, .1, {}), | |
l = []; | |
i.version = "1.15.1", f.constructor = i, f.kill()._gc = !1, i.killTweensOf = i.killDelayedCallsTo = n.killTweensOf, i.getTweensOf = n.getTweensOf, i.lagSmoothing = n.lagSmoothing, i.ticker = n.ticker, i.render = n.render, f.invalidate = function() { | |
return this._yoyo = this.vars.yoyo === !0, this._repeat = this.vars.repeat || 0, this._repeatDelay = this.vars.repeatDelay || 0, this._uncache(!0), n.prototype.invalidate.call(this) | |
}, f.updateTo = function(e, t) { | |
var r, i = this.ratio, | |
s = this.vars.immediateRender || e.immediateRender; | |
t && this._startTime < this._timeline._time && (this._startTime = this._timeline._time, this._uncache(!1), this._gc ? this._enabled(!0, !1) : this._timeline.insert(this, this._startTime - this._delay)); | |
for (r in e) this.vars[r] = e[r]; | |
if (this._initted || s) | |
if (t) this._initted = !1, s && this.render(0, !0, !0); | |
else if (this._gc && this._enabled(!0, !1), this._notifyPluginsOfEnabled && this._firstPT && n._onPluginEvent("_onDisable", this), this._time / this._duration > .998) { | |
var o = this._time; | |
this.render(0, !0, !1), this._initted = !1, this.render(o, !0, !1) | |
} else if (this._time > 0 || s) { | |
this._initted = !1, this._init(); | |
for (var u, a = 1 / (1 - i), f = this._firstPT; f;) u = f.s + f.c, f.c *= a, f.s = u - f.c, f = f._next | |
} | |
return this | |
}, f.render = function(e, t, n) { | |
this._initted || 0 === this._duration && this.vars.repeat && this.invalidate(); | |
var r, i, u, a, f, c, h, p, d = this._dirty ? this.totalDuration() : this._totalDuration, | |
v = this._time, | |
m = this._totalTime, | |
g = this._cycle, | |
y = this._duration, | |
b = this._rawPrevTime; | |
if (e >= d ? (this._totalTime = d, this._cycle = this._repeat, this._yoyo && 0 !== (1 & this._cycle) ? (this._time = 0, this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0) : (this._time = y, this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1), this._reversed || (r = !0, i = "onComplete"), 0 === y && (this._initted || !this.vars.lazy || n) && (this._startTime === this._timeline._duration && (e = 0), (0 === e || 0 > b || b === s) && b !== e && (n = !0, b > s && (i = "onReverseComplete")), this._rawPrevTime = p = !t || e || b === e ? e : s)) : 1e-7 > e ? (this._totalTime = this._time = this._cycle = 0, this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0, (0 !== m || 0 === y && b > 0 && b !== s) && (i = "onReverseComplete", r = this._reversed), 0 > e && (this._active = !1, 0 === y && (this._initted || !this.vars.lazy || n) && (b >= 0 && (n = !0), this._rawPrevTime = p = !t || e || b === e ? e : s)), this._initted || (n = !0)) : (this._totalTime = this._time = e, 0 !== this._repeat && (a = y + this._repeatDelay, this._cycle = this._totalTime / a >> 0, 0 !== this._cycle && this._cycle === this._totalTime / a && this._cycle--, this._time = this._totalTime - this._cycle * a, this._yoyo && 0 !== (1 & this._cycle) && (this._time = y - this._time), this._time > y ? this._time = y : 0 > this._time && (this._time = 0)), this._easeType ? (f = this._time / y, c = this._easeType, h = this._easePower, (1 === c || 3 === c && f >= .5) && (f = 1 - f), 3 === c && (f *= 2), 1 === h ? f *= f : 2 === h ? f *= f * f : 3 === h ? f *= f * f * f : 4 === h && (f *= f * f * f * f), this.ratio = 1 === c ? 1 - f : 2 === c ? f : .5 > this._time / y ? f / 2 : 1 - f / 2) : this.ratio = this._ease.getRatio(this._time / y)), v === this._time && !n && g === this._cycle) return m !== this._totalTime && this._onUpdate && (t || this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || l)), void 0; | |
if (!this._initted) { | |
if (this._init(), !this._initted || this._gc) return; | |
if (!n && this._firstPT && (this.vars.lazy !== !1 && this._duration || this.vars.lazy && !this._duration)) return this._time = v, this._totalTime = m, this._rawPrevTime = b, this._cycle = g, o.lazyTweens.push(this), this._lazy = [e, t], void 0; | |
this._time && !r ? this.ratio = this._ease.getRatio(this._time / y) : r && this._ease._calcEnd && (this.ratio = this._ease.getRatio(0 === this._time ? 0 : 1)) | |
} | |
for (this._lazy !== !1 && (this._lazy = !1), this._active || !this._paused && this._time !== v && e >= 0 && (this._active = !0), 0 === m && (2 === this._initted && e > 0 && this._init(), this._startAt && (e >= 0 ? this._startAt.render(e, t, n) : i || (i = "_dummyGS")), this.vars.onStart && (0 !== this._totalTime || 0 === y) && (t || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || l))), u = this._firstPT; u;) u.f ? u.t[u.p](u.c * this.ratio + u.s) : u.t[u.p] = u.c * this.ratio + u.s, u = u._next; | |
this._onUpdate && (0 > e && this._startAt && this._startTime && this._startAt.render(e, t, n), t || (this._totalTime !== m || r) && this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || l)), this._cycle !== g && (t || this._gc || this.vars.onRepeat && this.vars.onRepeat.apply(this.vars.onRepeatScope || this, this.vars.onRepeatParams || l)), i && (!this._gc || n) && (0 > e && this._startAt && !this._onUpdate && this._startTime && this._startAt.render(e, t, n), r && (this._timeline.autoRemoveChildren && this._enabled(!1, !1), this._active = !1), !t && this.vars[i] && this.vars[i].apply(this.vars[i + "Scope"] || this, this.vars[i + "Params"] || l), 0 === y && this._rawPrevTime === s && p !== s && (this._rawPrevTime = 0)) | |
}, i.to = function(e, t, n) { | |
return new i(e, t, n) | |
}, i.from = function(e, t, n) { | |
return n.runBackwards = !0, n.immediateRender = 0 != n.immediateRender, new i(e, t, n) | |
}, i.fromTo = function(e, t, n, r) { | |
return r.startAt = n, r.immediateRender = 0 != r.immediateRender && 0 != n.immediateRender, new i(e, t, r) | |
}, i.staggerTo = i.allTo = function(e, t, s, o, f, c, h) { | |
o = o || 0; | |
var p, d, v, m, g = s.delay || 0, | |
y = [], | |
b = function() { | |
s.onComplete && s.onComplete.apply(s.onCompleteScope || this, arguments), f.apply(h || this, c || l) | |
}; | |
for (a(e) || ("string" == typeof e && (e = n.selector(e) || e), u(e) && (e = r(e))), e = e || [], 0 > o && (e = r(e), e.reverse(), o *= -1), p = e.length - 1, v = 0; p >= v; v++) { | |
d = {}; | |
for (m in s) d[m] = s[m]; | |
d.delay = g, v === p && f && (d.onComplete = b), y[v] = new i(e[v], t, d), g += o | |
} | |
return y | |
}, i.staggerFrom = i.allFrom = function(e, t, n, r, s, o, u) { | |
return n.runBackwards = !0, n.immediateRender = 0 != n.immediateRender, i.staggerTo(e, t, n, r, s, o, u) | |
}, i.staggerFromTo = i.allFromTo = function(e, t, n, r, s, o, u, a) { | |
return r.startAt = n, r.immediateRender = 0 != r.immediateRender && 0 != n.immediateRender, i.staggerTo(e, t, r, s, o, u, a) | |
}, i.delayedCall = function(e, t, n, r, s) { | |
return new i(t, 0, { | |
delay: e, | |
onComplete: t, | |
onCompleteParams: n, | |
onCompleteScope: r, | |
onReverseComplete: t, | |
onReverseCompleteParams: n, | |
onReverseCompleteScope: r, | |
immediateRender: !1, | |
useFrames: s, | |
overwrite: 0 | |
}) | |
}, i.set = function(e, t) { | |
return new i(e, 0, t) | |
}, i.isTweening = function(e) { | |
return n.getTweensOf(e, !0).length > 0 | |
}; | |
var c = function(e, t) { | |
for (var r = [], i = 0, s = e._first; s;) s instanceof n ? r[i++] = s : (t && (r[i++] = s), r = r.concat(c(s, t)), i = r.length), s = s._next; | |
return r | |
}, | |
h = i.getAllTweens = function(t) { | |
return c(e._rootTimeline, t).concat(c(e._rootFramesTimeline, t)) | |
}; | |
i.killAll = function(e, n, r, i) { | |
null == n && (n = !0), null == r && (r = !0); | |
var s, o, u, a = h(0 != i), | |
f = a.length, | |
l = n && r && i; | |
for (u = 0; f > u; u++) o = a[u], (l || o instanceof t || (s = o.target === o.vars.onComplete) && r || n && !s) && (e ? o.totalTime(o._reversed ? 0 : o.totalDuration()) : o._enabled(!1, !1)) | |
}, i.killChildTweensOf = function(e, t) { | |
if (null != e) { | |
var s, f, l, c, h, p = o.tweenLookup; | |
if ("string" == typeof e && (e = n.selector(e) || e), u(e) && (e = r(e)), a(e)) | |
for (c = e.length; --c > -1;) i.killChildTweensOf(e[c], t); | |
else { | |
s = []; | |
for (l in p) | |
for (f = p[l].target.parentNode; f;) f === e && (s = s.concat(p[l].tweens)), f = f.parentNode; | |
for (h = s.length, c = 0; h > c; c++) t && s[c].totalTime(s[c].totalDuration()), s[c]._enabled(!1, !1) | |
} | |
} | |
}; | |
var p = function(e, n, r, i) { | |
n = n !== !1, r = r !== !1, i = i !== !1; | |
for (var s, o, u = h(i), a = n && r && i, f = u.length; --f > -1;) o = u[f], (a || o instanceof t || (s = o.target === o.vars.onComplete) && r || n && !s) && o.paused(e) | |
}; | |
return i.pauseAll = function(e, t, n) { | |
p(!0, e, t, n) | |
}, i.resumeAll = function(e, t, n) { | |
p(!1, e, t, n) | |
}, i.globalTimeScale = function(t) { | |
var r = e._rootTimeline, | |
i = n.ticker.time; | |
return arguments.length ? (t = t || s, r._startTime = i - (i - r._startTime) * r._timeScale / t, r = e._rootFramesTimeline, i = n.ticker.frame, r._startTime = i - (i - r._startTime) * r._timeScale / t, r._timeScale = e._rootTimeline._timeScale = t, t) : r._timeScale | |
}, f.progress = function(e) { | |
return arguments.length ? this.totalTime(this.duration() * (this._yoyo && 0 !== (1 & this._cycle) ? 1 - e : e) + this._cycle * (this._duration + this._repeatDelay), !1) : this._time / this.duration() | |
}, f.totalProgress = function(e) { | |
return arguments.length ? this.totalTime(this.totalDuration() * e, !1) : this._totalTime / this.totalDuration() | |
}, f.time = function(e, t) { | |
return arguments.length ? (this._dirty && this.totalDuration(), e > this._duration && (e = this._duration), this._yoyo && 0 !== (1 & this._cycle) ? e = this._duration - e + this._cycle * (this._duration + this._repeatDelay) : 0 !== this._repeat && (e += this._cycle * (this._duration + this._repeatDelay)), this.totalTime(e, t)) : this._time | |
}, f.duration = function(t) { | |
return arguments.length ? e.prototype.duration.call(this, t) : this._duration | |
}, f.totalDuration = function(e) { | |
return arguments.length ? -1 === this._repeat ? this : this.duration((e - this._repeat * this._repeatDelay) / (this._repeat + 1)) : (this._dirty && (this._totalDuration = -1 === this._repeat ? 999999999999 : this._duration * (this._repeat + 1) + this._repeatDelay * this._repeat, this._dirty = !1), this._totalDuration) | |
}, f.repeat = function(e) { | |
return arguments.length ? (this._repeat = e, this._uncache(!0)) : this._repeat | |
}, f.repeatDelay = function(e) { | |
return arguments.length ? (this._repeatDelay = e, this._uncache(!0)) : this._repeatDelay | |
}, f.yoyo = function(e) { | |
return arguments.length ? (this._yoyo = e, this) : this._yoyo | |
}, i | |
}, !0), _gsScope._gsDefine("TimelineLite", ["core.Animation", "core.SimpleTimeline", "TweenLite"], function(e, t, n) { | |
var r = function(e) { | |
t.call(this, e), this._labels = {}, this.autoRemoveChildren = this.vars.autoRemoveChildren === !0, this.smoothChildTiming = this.vars.smoothChildTiming === !0, this._sortChildren = !0, this._onUpdate = this.vars.onUpdate; | |
var n, r, i = this.vars; | |
for (r in i) n = i[r], a(n) && -1 !== n.join("").indexOf("{self}") && (i[r] = this._swapSelfInParams(n)); | |
a(i.tweens) && this.add(i.tweens, 0, i.align, i.stagger) | |
}, | |
i = 1e-10, | |
s = n._internals, | |
o = r._internals = {}, | |
u = s.isSelector, | |
a = s.isArray, | |
f = s.lazyTweens, | |
l = s.lazyRender, | |
c = [], | |
h = _gsScope._gsDefine.globals, | |
p = function(e) { | |
var t, n = {}; | |
for (t in e) n[t] = e[t]; | |
return n | |
}, | |
d = o.pauseCallback = function(e, t, n, r) { | |
var i = e._timeline, | |
s = i._totalTime; | |
!t && this._forcingPlayhead || i._rawPrevTime === e._startTime || (i.pause(e._startTime), t && t.apply(r || i, n || c), this._forcingPlayhead && i.seek(s)) | |
}, | |
v = function(e) { | |
var t, n = [], | |
r = e.length; | |
for (t = 0; t !== r; n.push(e[t++])); | |
return n | |
}, | |
m = r.prototype = new t; | |
return r.version = "1.15.1", m.constructor = r, m.kill()._gc = m._forcingPlayhead = !1, m.to = function(e, t, r, i) { | |
var s = r.repeat && h.TweenMax || n; | |
return t ? this.add(new s(e, t, r), i) : this.set(e, r, i) | |
}, m.from = function(e, t, r, i) { | |
return this.add((r.repeat && h.TweenMax || n).from(e, t, r), i) | |
}, m.fromTo = function(e, t, r, i, s) { | |
var o = i.repeat && h.TweenMax || n; | |
return t ? this.add(o.fromTo(e, t, r, i), s) : this.set(e, i, s) | |
}, m.staggerTo = function(e, t, i, s, o, a, f, l) { | |
var c, h = new r({ | |
onComplete: a, | |
onCompleteParams: f, | |
onCompleteScope: l, | |
smoothChildTiming: this.smoothChildTiming | |
}); | |
for ("string" == typeof e && (e = n.selector(e) || e), e = e || [], u(e) && (e = v(e)), s = s || 0, 0 > s && (e = v(e), e.reverse(), s *= -1), c = 0; e.length > c; c++) i.startAt && (i.startAt = p(i.startAt)), h.to(e[c], t, p(i), c * s); | |
return this.add(h, o) | |
}, m.staggerFrom = function(e, t, n, r, i, s, o, u) { | |
return n.immediateRender = 0 != n.immediateRender, n.runBackwards = !0, this.staggerTo(e, t, n, r, i, s, o, u) | |
}, m.staggerFromTo = function(e, t, n, r, i, s, o, u, a) { | |
return r.startAt = n, r.immediateRender = 0 != r.immediateRender && 0 != n.immediateRender, this.staggerTo(e, t, r, i, s, o, u, a) | |
}, m.call = function(e, t, r, i) { | |
return this.add(n.delayedCall(0, e, t, r), i) | |
}, m.set = function(e, t, r) { | |
return r = this._parseTimeOrLabel(r, 0, !0), null == t.immediateRender && (t.immediateRender = r === this._time && !this._paused), this.add(new n(e, 0, t), r) | |
}, r.exportRoot = function(e, t) { | |
e = e || {}, null == e.smoothChildTiming && (e.smoothChildTiming = !0); | |
var i, s, o = new r(e), | |
u = o._timeline; | |
for (null == t && (t = !0), u._remove(o, !0), o._startTime = 0, o._rawPrevTime = o._time = o._totalTime = u._time, i = u._first; i;) s = i._next, t && i instanceof n && i.target === i.vars.onComplete || o.add(i, i._startTime - i._delay), i = s; | |
return u.add(o, 0), o | |
}, m.add = function(i, s, o, u) { | |
var f, l, c, h, p, d; | |
if ("number" != typeof s && (s = this._parseTimeOrLabel(s, 0, !0, i)), !(i instanceof e)) { | |
if (i instanceof Array || i && i.push && a(i)) { | |
for (o = o || "normal", u = u || 0, f = s, l = i.length, c = 0; l > c; c++) a(h = i[c]) && (h = new r({ | |
tweens: h | |
})), this.add(h, f), "string" != typeof h && "function" != typeof h && ("sequence" === o ? f = h._startTime + h.totalDuration() / h._timeScale : "start" === o && (h._startTime -= h.delay())), f += u; | |
return this._uncache(!0) | |
} | |
if ("string" == typeof i) return this.addLabel(i, s); | |
if ("function" != typeof i) throw "Cannot add " + i + " into the timeline; it is not a tween, timeline, function, or string."; | |
i = n.delayedCall(0, i) | |
} | |
if (t.prototype.add.call(this, i, s), (this._gc || this._time === this._duration) && !this._paused && this._duration < this.duration()) | |
for (p = this, d = p.rawTime() > i._startTime; p._timeline;) d && p._timeline.smoothChildTiming ? p.totalTime(p._totalTime, !0) : p._gc && p._enabled(!0, !1), p = p._timeline; | |
return this | |
}, m.remove = function(t) { | |
if (t instanceof e) return this._remove(t, !1); | |
if (t instanceof Array || t && t.push && a(t)) { | |
for (var n = t.length; --n > -1;) this.remove(t[n]); | |
return this | |
} | |
return "string" == typeof t ? this.removeLabel(t) : this.kill(null, t) | |
}, m._remove = function(e, n) { | |
t.prototype._remove.call(this, e, n); | |
var r = this._last; | |
return r ? this._time > r._startTime + r._totalDuration / r._timeScale && (this._time = this.duration(), this._totalTime = this._totalDuration) : this._time = this._totalTime = this._duration = this._totalDuration = 0, this | |
}, m.append = function(e, t) { | |
return this.add(e, this._parseTimeOrLabel(null, t, !0, e)) | |
}, m.insert = m.insertMultiple = function(e, t, n, r) { | |
return this.add(e, t || 0, n, r) | |
}, m.appendMultiple = function(e, t, n, r) { | |
return this.add(e, this._parseTimeOrLabel(null, t, !0, e), n, r) | |
}, m.addLabel = function(e, t) { | |
return this._labels[e] = this._parseTimeOrLabel(t), this | |
}, m.addPause = function(e, t, r, i) { | |
var s = n.delayedCall(0, d, ["{self}", t, r, i], this); | |
return s.data = "isPause", this.add(s, e) | |
}, m.removeLabel = function(e) { | |
return delete this._labels[e], this | |
}, m.getLabelTime = function(e) { | |
return null != this._labels[e] ? this._labels[e] : -1 | |
}, m._parseTimeOrLabel = function(t, n, r, i) { | |
var s; | |
if (i instanceof e && i.timeline === this) this.remove(i); | |
else if (i && (i instanceof Array || i.push && a(i))) | |
for (s = i.length; --s > -1;) i[s] instanceof e && i[s].timeline === this && this.remove(i[s]); | |
if ("string" == typeof n) return this._parseTimeOrLabel(n, r && "number" == typeof t && null == this._labels[n] ? t - this.duration() : 0, r); | |
if (n = n || 0, "string" != typeof t || !isNaN(t) && null == this._labels[t]) null == t && (t = this.duration()); | |
else { | |
if (s = t.indexOf("="), -1 === s) return null == this._labels[t] ? r ? this._labels[t] = this.duration() + n : n : this._labels[t] + n; | |
n = parseInt(t.charAt(s - 1) + "1", 10) * Number(t.substr(s + 1)), t = s > 1 ? this._parseTimeOrLabel(t.substr(0, s - 1), 0, r) : this.duration() | |
} | |
return Number(t) + n | |
}, m.seek = function(e, t) { | |
return this.totalTime("number" == typeof e ? e : this._parseTimeOrLabel(e), t !== !1) | |
}, m.stop = function() { | |
return this.paused(!0) | |
}, m.gotoAndPlay = function(e, t) { | |
return this.play(e, t) | |
}, m.gotoAndStop = function(e, t) { | |
return this.pause(e, t) | |
}, m.render = function(e, t, n) { | |
this._gc && this._enabled(!0, !1); | |
var r, s, o, u, a, h = this._dirty ? this.totalDuration() : this._totalDuration, | |
p = this._time, | |
d = this._startTime, | |
v = this._timeScale, | |
m = this._paused; | |
if (e >= h ? (this._totalTime = this._time = h, this._reversed || this._hasPausedChild() || (s = !0, u = "onComplete", 0 === this._duration && (0 === e || 0 > this._rawPrevTime || this._rawPrevTime === i) && this._rawPrevTime !== e && this._first && (a = !0, this._rawPrevTime > i && (u = "onReverseComplete"))), this._rawPrevTime = this._duration || !t || e || this._rawPrevTime === e ? e : i, e = h + 1e-4) : 1e-7 > e ? (this._totalTime = this._time = 0, (0 !== p || 0 === this._duration && this._rawPrevTime !== i && (this._rawPrevTime > 0 || 0 > e && this._rawPrevTime >= 0)) && (u = "onReverseComplete", s = this._reversed), 0 > e ? (this._active = !1, this._rawPrevTime >= 0 && this._first && (a = !0), this._rawPrevTime = e) : (this._rawPrevTime = this._duration || !t || e || this._rawPrevTime === e ? e : i, e = 0, this._initted || (a = !0))) : this._totalTime = this._time = this._rawPrevTime = e, this._time !== p && this._first || n || a) { | |
if (this._initted || (this._initted = !0), this._active || !this._paused && this._time !== p && e > 0 && (this._active = !0), 0 === p && this.vars.onStart && 0 !== this._time && (t || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || c)), this._time >= p) | |
for (r = this._first; r && (o = r._next, !this._paused || m);)(r._active || r._startTime <= this._time && !r._paused && !r._gc) && (r._reversed ? r.render((r._dirty ? r.totalDuration() : r._totalDuration) - (e - r._startTime) * r._timeScale, t, n) : r.render((e - r._startTime) * r._timeScale, t, n)), r = o; | |
else | |
for (r = this._last; r && (o = r._prev, !this._paused || m);)(r._active || p >= r._startTime && !r._paused && !r._gc) && (r._reversed ? r.render((r._dirty ? r.totalDuration() : r._totalDuration) - (e - r._startTime) * r._timeScale, t, n) : r.render((e - r._startTime) * r._timeScale, t, n)), r = o; | |
this._onUpdate && (t || (f.length && l(), this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || c))), u && (this._gc || (d === this._startTime || v !== this._timeScale) && (0 === this._time || h >= this.totalDuration()) && (s && (f.length && l(), this._timeline.autoRemoveChildren && this._enabled(!1, !1), this._active = !1), !t && this.vars[u] && this.vars[u].apply(this.vars[u + "Scope"] || this, this.vars[u + "Params"] || c))) | |
} | |
}, m._hasPausedChild = function() { | |
for (var e = this._first; e;) { | |
if (e._paused || e instanceof r && e._hasPausedChild()) return !0; | |
e = e._next | |
} | |
return !1 | |
}, m.getChildren = function(e, t, r, i) { | |
i = i || -9999999999; | |
for (var s = [], o = this._first, u = 0; o;) i > o._startTime || (o instanceof n ? t !== !1 && (s[u++] = o) : (r !== !1 && (s[u++] = o), e !== !1 && (s = s.concat(o.getChildren(!0, t, r)), u = s.length))), o = o._next; | |
return s | |
}, m.getTweensOf = function(e, t) { | |
var r, i, s = this._gc, | |
o = [], | |
u = 0; | |
for (s && this._enabled(!0, !0), r = n.getTweensOf(e), i = r.length; --i > -1;)(r[i].timeline === this || t && this._contains(r[i])) && (o[u++] = r[i]); | |
return s && this._enabled(!1, !0), o | |
}, m.recent = function() { | |
return this._recent | |
}, m._contains = function(e) { | |
for (var t = e.timeline; t;) { | |
if (t === this) return !0; | |
t = t.timeline | |
} | |
return !1 | |
}, m.shiftChildren = function(e, t, n) { | |
n = n || 0; | |
for (var r, i = this._first, s = this._labels; i;) i._startTime >= n && (i._startTime += e), i = i._next; | |
if (t) | |
for (r in s) s[r] >= n && (s[r] += e); | |
return this._uncache(!0) | |
}, m._kill = function(e, t) { | |
if (!e && !t) return this._enabled(!1, !1); | |
for (var n = t ? this.getTweensOf(t) : this.getChildren(!0, !0, !1), r = n.length, i = !1; --r > -1;) n[r]._kill(e, t) && (i = !0); | |
return i | |
}, m.clear = function(e) { | |
var t = this.getChildren(!1, !0, !0), | |
n = t.length; | |
for (this._time = this._totalTime = 0; --n > -1;) t[n]._enabled(!1, !1); | |
return e !== !1 && (this._labels = {}), this._uncache(!0) | |
}, m.invalidate = function() { | |
for (var t = this._first; t;) t.invalidate(), t = t._next; | |
return e.prototype.invalidate.call(this) | |
}, m._enabled = function(e, n) { | |
if (e === this._gc) | |
for (var r = this._first; r;) r._enabled(e, !0), r = r._next; | |
return t.prototype._enabled.call(this, e, n) | |
}, m.totalTime = function() { | |
this._forcingPlayhead = !0; | |
var t = e.prototype.totalTime.apply(this, arguments); | |
return this._forcingPlayhead = !1, t | |
}, m.duration = function(e) { | |
return arguments.length ? (0 !== this.duration() && 0 !== e && this.timeScale(this._duration / e), this) : (this._dirty && this.totalDuration(), this._duration) | |
}, m.totalDuration = function(e) { | |
if (!arguments.length) { | |
if (this._dirty) { | |
for (var t, n, r = 0, i = this._last, s = 999999999999; i;) t = i._prev, i._dirty && i.totalDuration(), i._startTime > s && this._sortChildren && !i._paused ? this.add(i, i._startTime - i._delay) : s = i._startTime, 0 > i._startTime && !i._paused && (r -= i._startTime, this._timeline.smoothChildTiming && (this._startTime += i._startTime / this._timeScale), this.shiftChildren(-i._startTime, !1, -9999999999), s = 0), n = i._startTime + i._totalDuration / i._timeScale, n > r && (r = n), i = t; | |
this._duration = this._totalDuration = r, this._dirty = !1 | |
} | |
return this._totalDuration | |
} | |
return 0 !== this.totalDuration() && 0 !== e && this.timeScale(this._totalDuration / e), this | |
}, m.usesFrames = function() { | |
for (var t = this._timeline; t._timeline;) t = t._timeline; | |
return t === e._rootFramesTimeline | |
}, m.rawTime = function() { | |
return this._paused ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale | |
}, r | |
}, !0), _gsScope._gsDefine("TimelineMax", ["TimelineLite", "TweenLite", "easing.Ease"], function(e, t, n) { | |
var r = function(t) { | |
e.call(this, t), this._repeat = this.vars.repeat || 0, this._repeatDelay = this.vars.repeatDelay || 0, this._cycle = 0, this._yoyo = this.vars.yoyo === !0, this._dirty = !0 | |
}, | |
i = 1e-10, | |
s = [], | |
o = t._internals, | |
u = o.lazyTweens, | |
a = o.lazyRender, | |
f = new n(null, null, 1, 0), | |
l = r.prototype = new e; | |
return l.constructor = r, l.kill()._gc = !1, r.version = "1.15.1", l.invalidate = function() { | |
return this._yoyo = this.vars.yoyo === !0, this._repeat = this.vars.repeat || 0, this._repeatDelay = this.vars.repeatDelay || 0, this._uncache(!0), e.prototype.invalidate.call(this) | |
}, l.addCallback = function(e, n, r, i) { | |
return this.add(t.delayedCall(0, e, r, i), n) | |
}, l.removeCallback = function(e, t) { | |
if (e) | |
if (null == t) this._kill(null, e); | |
else | |
for (var n = this.getTweensOf(e, !1), r = n.length, i = this._parseTimeOrLabel(t); --r > -1;) n[r]._startTime === i && n[r]._enabled(!1, !1); | |
return this | |
}, l.removePause = function(t) { | |
return this.removeCallback(e._internals.pauseCallback, t) | |
}, l.tweenTo = function(e, n) { | |
n = n || {}; | |
var r, i, o, u = { | |
ease: f, | |
useFrames: this.usesFrames(), | |
immediateRender: !1 | |
}; | |
for (i in n) u[i] = n[i]; | |
return u.time = this._parseTimeOrLabel(e), r = Math.abs(Number(u.time) - this._time) / this._timeScale || .001, o = new t(this, r, u), u.onStart = function() { | |
o.target.paused(!0), o.vars.time !== o.target.time() && r === o.duration() && o.duration(Math.abs(o.vars.time - o.target.time()) / o.target._timeScale), n.onStart && n.onStart.apply(n.onStartScope || o, n.onStartParams || s) | |
}, o | |
}, l.tweenFromTo = function(e, t, n) { | |
n = n || {}, e = this._parseTimeOrLabel(e), n.startAt = { | |
onComplete: this.seek, | |
onCompleteParams: [e], | |
onCompleteScope: this | |
}, n.immediateRender = n.immediateRender !== !1; | |
var r = this.tweenTo(t, n); | |
return r.duration(Math.abs(r.vars.time - e) / this._timeScale || .001) | |
}, l.render = function(e, t, n) { | |
this._gc && this._enabled(!0, !1); | |
var r, o, f, l, c, p, d = this._dirty ? this.totalDuration() : this._totalDuration, | |
v = this._duration, | |
m = this._time, | |
g = this._totalTime, | |
y = this._startTime, | |
b = this._timeScale, | |
w = this._rawPrevTime, | |
E = this._paused, | |
S = this._cycle; | |
if (e >= d ? (this._locked || (this._totalTime = d, this._cycle = this._repeat), this._reversed || this._hasPausedChild() || (o = !0, l = "onComplete", 0 === this._duration && (0 === e || 0 > w || w === i) && w !== e && this._first && (c = !0, w > i && (l = "onReverseComplete"))), this._rawPrevTime = this._duration || !t || e || this._rawPrevTime === e ? e : i, this._yoyo && 0 !== (1 & this._cycle) ? this._time = e = 0 : (this._time = v, e = v + 1e-4)) : 1e-7 > e ? (this._locked || (this._totalTime = this._cycle = 0), this._time = 0, (0 !== m || 0 === v && w !== i && (w > 0 || 0 > e && w >= 0) && !this._locked) && (l = "onReverseComplete", o = this._reversed), 0 > e ? (this._active = !1, w >= 0 && this._first && (c = !0), this._rawPrevTime = e) : (this._rawPrevTime = v || !t || e || this._rawPrevTime === e ? e : i, e = 0, this._initted || (c = !0))) : (0 === v && 0 > w && (c = !0), this._time = this._rawPrevTime = e, this._locked || (this._totalTime = e, 0 !== this._repeat && (p = v + this._repeatDelay, this._cycle = this._totalTime / p >> 0, 0 !== this._cycle && this._cycle === this._totalTime / p && this._cycle--, this._time = this._totalTime - this._cycle * p, this._yoyo && 0 !== (1 & this._cycle) && (this._time = v - this._time), this._time > v ? (this._time = v, e = v + 1e-4) : 0 > this._time ? this._time = e = 0 : e = this._time))), this._cycle !== S && !this._locked) { | |
var x = this._yoyo && 0 !== (1 & S), | |
T = x === (this._yoyo && 0 !== (1 & this._cycle)), | |
N = this._totalTime, | |
C = this._cycle, | |
k = this._rawPrevTime, | |
L = this._time; | |
if (this._totalTime = S * v, S > this._cycle ? x = !x : this._totalTime += v, this._time = m, this._rawPrevTime = 0 === v ? w - 1e-4 : w, this._cycle = S, this._locked = !0, m = x ? 0 : v, this.render(m, t, 0 === v), t || this._gc || this.vars.onRepeat && this.vars.onRepeat.apply(this.vars.onRepeatScope || this, this.vars.onRepeatParams || s), T && (m = x ? v + 1e-4 : -0.0001, this.render(m, !0, !1)), this._locked = !1, this._paused && !E) return; | |
this._time = L, this._totalTime = N, this._cycle = C, this._rawPrevTime = k | |
} | |
if (!(this._time !== m && this._first || n || c)) return g !== this._totalTime && this._onUpdate && (t || this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || s)), void 0; | |
if (this._initted || (this._initted = !0), this._active || !this._paused && this._totalTime !== g && e > 0 && (this._active = !0), 0 === g && this.vars.onStart && 0 !== this._totalTime && (t || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || s)), this._time >= m) | |
for (r = this._first; r && (f = r._next, !this._paused || E);)(r._active || r._startTime <= this._time && !r._paused && !r._gc) && (r._reversed ? r.render((r._dirty ? r.totalDuration() : r._totalDuration) - (e - r._startTime) * r._timeScale, t, n) : r.render((e - r._startTime) * r._timeScale, t, n)), r = f; | |
else | |
for (r = this._last; r && (f = r._prev, !this._paused || E);)(r._active || m >= r._startTime && !r._paused && !r._gc) && (r._reversed ? r.render((r._dirty ? r.totalDuration() : r._totalDuration) - (e - r._startTime) * r._timeScale, t, n) : r.render((e - r._startTime) * r._timeScale, t, n)), r = f; | |
this._onUpdate && (t || (u.length && a(), this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || s))), l && (this._locked || this._gc || (y === this._startTime || b !== this._timeScale) && (0 === this._time || d >= this.totalDuration()) && (o && (u.length && a(), this._timeline.autoRemoveChildren && this._enabled(!1, !1), this._active = !1), !t && this.vars[l] && this.vars[l].apply(this.vars[l + "Scope"] || this, this.vars[l + "Params"] || s))) | |
}, l.getActive = function(e, t, n) { | |
null == e && (e = !0), null == t && (t = !0), null == n && (n = !1); | |
var r, i, s = [], | |
o = this.getChildren(e, t, n), | |
u = 0, | |
a = o.length; | |
for (r = 0; a > r; r++) i = o[r], i.isActive() && (s[u++] = i); | |
return s | |
}, l.getLabelAfter = function(e) { | |
e || 0 !== e && (e = this._time); | |
var t, n = this.getLabelsArray(), | |
r = n.length; | |
for (t = 0; r > t; t++) | |
if (n[t].time > e) return n[t].name; | |
return null | |
}, l.getLabelBefore = function(e) { | |
null == e && (e = this._time); | |
for (var t = this.getLabelsArray(), n = t.length; --n > -1;) | |
if (e > t[n].time) return t[n].name; | |
return null | |
}, l.getLabelsArray = function() { | |
var e, t = [], | |
n = 0; | |
for (e in this._labels) t[n++] = { | |
time: this._labels[e], | |
name: e | |
}; | |
return t.sort(function(e, t) { | |
return e.time - t.time | |
}), t | |
}, l.progress = function(e, t) { | |
return arguments.length ? this.totalTime(this.duration() * (this._yoyo && 0 !== (1 & this._cycle) ? 1 - e : e) + this._cycle * (this._duration + this._repeatDelay), t) : this._time / this.duration() | |
}, l.totalProgress = function(e, t) { | |
return arguments.length ? this.totalTime(this.totalDuration() * e, t) : this._totalTime / this.totalDuration() | |
}, l.totalDuration = function(t) { | |
return arguments.length ? -1 === this._repeat ? this : this.duration((t - this._repeat * this._repeatDelay) / (this._repeat + 1)) : (this._dirty && (e.prototype.totalDuration.call(this), this._totalDuration = -1 === this._repeat ? 999999999999 : this._duration * (this._repeat + 1) + this._repeatDelay * this._repeat), this._totalDuration) | |
}, l.time = function(e, t) { | |
return arguments.length ? (this._dirty && this.totalDuration(), e > this._duration && (e = this._duration), this._yoyo && 0 !== (1 & this._cycle) ? e = this._duration - e + this._cycle * (this._duration + this._repeatDelay) : 0 !== this._repeat && (e += this._cycle * (this._duration + this._repeatDelay)), this.totalTime(e, t)) : this._time | |
}, l.repeat = function(e) { | |
return arguments.length ? (this._repeat = e, this._uncache(!0)) : this._repeat | |
}, l.repeatDelay = function(e) { | |
return arguments.length ? (this._repeatDelay = e, this._uncache(!0)) : this._repeatDelay | |
}, l.yoyo = function(e) { | |
return arguments.length ? (this._yoyo = e, this) : this._yoyo | |
}, l.currentLabel = function(e) { | |
return arguments.length ? this.seek(e, !0) : this.getLabelBefore(this._time + 1e-8) | |
}, r | |
}, !0), | |
function() { | |
var e = 180 / Math.PI, | |
t = [], | |
n = [], | |
r = [], | |
i = {}, | |
s = _gsScope._gsDefine.globals, | |
o = function(e, t, n, r) { | |
this.a = e, this.b = t, this.c = n, this.d = r, this.da = r - e, this.ca = n - e, this.ba = t - e | |
}, | |
u = ",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,", | |
a = function(e, t, n, r) { | |
var i = { | |
a: e | |
}, | |
s = {}, | |
o = {}, | |
u = { | |
c: r | |
}, | |
a = (e + t) / 2, | |
f = (t + n) / 2, | |
l = (n + r) / 2, | |
c = (a + f) / 2, | |
h = (f + l) / 2, | |
p = (h - c) / 8; | |
return i.b = a + (e - a) / 4, s.b = c + p, i.c = s.a = (i.b + s.b) / 2, s.c = o.a = (c + h) / 2, o.b = h - p, u.b = l + (r - l) / 4, o.c = u.a = (o.b + u.b) / 2, [i, s, o, u] | |
}, | |
f = function(e, i, s, o, u) { | |
var f, l, c, h, p, d, v, m, g, y, b, w, E, S = e.length - 1, | |
x = 0, | |
T = e[0].a; | |
for (f = 0; S > f; f++) p = e[x], l = p.a, c = p.d, h = e[x + 1].d, u ? (b = t[f], w = n[f], E = .25 * (w + b) * i / (o ? .5 : r[f] || .5), d = c - (c - l) * (o ? .5 * i : 0 !== b ? E / b : 0), v = c + (h - c) * (o ? .5 * i : 0 !== w ? E / w : 0), m = c - (d + ((v - d) * (3 * b / (b + w) + .5) / 4 || 0))) : (d = c - .5 * (c - l) * i, v = c + .5 * (h - c) * i, m = c - (d + v) / 2), d += m, v += m, p.c = g = d, p.b = 0 !== f ? T : T = p.a + .6 * (p.c - p.a), p.da = c - l, p.ca = g - l, p.ba = T - l, s ? (y = a(l, T, g, c), e.splice(x, 1, y[0], y[1], y[2], y[3]), x += 4) : x++, T = v; | |
p = e[x], p.b = T, p.c = T + .4 * (p.d - T), p.da = p.d - p.a, p.ca = p.c - p.a, p.ba = T - p.a, s && (y = a(p.a, T, p.c, p.d), e.splice(x, 1, y[0], y[1], y[2], y[3])) | |
}, | |
l = function(e, r, i, s) { | |
var u, a, f, l, c, h, p = []; | |
if (s) | |
for (e = [s].concat(e), a = e.length; --a > -1;) "string" == typeof(h = e[a][r]) && "=" === h.charAt(1) && (e[a][r] = s[r] + Number(h.charAt(0) + h.substr(2))); | |
if (u = e.length - 2, 0 > u) return p[0] = new o(e[0][r], 0, 0, e[-1 > u ? 0 : 1][r]), p; | |
for (a = 0; u > a; a++) f = e[a][r], l = e[a + 1][r], p[a] = new o(f, 0, 0, l), i && (c = e[a + 2][r], t[a] = (t[a] || 0) + (l - f) * (l - f), n[a] = (n[a] || 0) + (c - l) * (c - l)); | |
return p[a] = new o(e[a][r], 0, 0, e[a + 1][r]), p | |
}, | |
c = function(e, s, o, a, c, h) { | |
var p, d, v, m, g, y, b, w, E = {}, | |
S = [], | |
x = h || e[0]; | |
c = "string" == typeof c ? "," + c + "," : u, null == s && (s = 1); | |
for (d in e[0]) S.push(d); | |
if (e.length > 1) { | |
for (w = e[e.length - 1], b = !0, p = S.length; --p > -1;) | |
if (d = S[p], Math.abs(x[d] - w[d]) > .05) { | |
b = !1; | |
break | |
} | |
b && (e = e.concat(), h && e.unshift(h), e.push(e[1]), h = e[e.length - 3]) | |
} | |
for (t.length = n.length = r.length = 0, p = S.length; --p > -1;) d = S[p], i[d] = -1 !== c.indexOf("," + d + ","), E[d] = l(e, d, i[d], h); | |
for (p = t.length; --p > -1;) t[p] = Math.sqrt(t[p]), n[p] = Math.sqrt(n[p]); | |
if (!a) { | |
for (p = S.length; --p > -1;) | |
if (i[d]) | |
for (v = E[S[p]], y = v.length - 1, m = 0; y > m; m++) g = v[m + 1].da / n[m] + v[m].da / t[m], r[m] = (r[m] || 0) + g * g; | |
for (p = r.length; --p > -1;) r[p] = Math.sqrt(r[p]) | |
} | |
for (p = S.length, m = o ? 4 : 1; --p > -1;) d = S[p], v = E[d], f(v, s, o, a, i[d]), b && (v.splice(0, m), v.splice(v.length - m, m)); | |
return E | |
}, | |
h = function(e, t, n) { | |
t = t || "soft"; | |
var r, i, s, u, a, f, l, c, h, p, d, v = {}, | |
m = "cubic" === t ? 3 : 2, | |
g = "soft" === t, | |
y = []; | |
if (g && n && (e = [n].concat(e)), null == e || m + 1 > e.length) throw "invalid Bezier data"; | |
for (h in e[0]) y.push(h); | |
for (f = y.length; --f > -1;) { | |
for (h = y[f], v[h] = a = [], p = 0, c = e.length, l = 0; c > l; l++) r = null == n ? e[l][h] : "string" == typeof(d = e[l][h]) && "=" === d.charAt(1) ? n[h] + Number(d.charAt(0) + d.substr(2)) : Number(d), g && l > 1 && c - 1 > l && (a[p++] = (r + a[p - 2]) / 2), a[p++] = r; | |
for (c = p - m + 1, p = 0, l = 0; c > l; l += m) r = a[l], i = a[l + 1], s = a[l + 2], u = 2 === m ? 0 : a[l + 3], a[p++] = d = 3 === m ? new o(r, i, s, u) : new o(r, (2 * i + r) / 3, (2 * i + s) / 3, s); | |
a.length = p | |
} | |
return v | |
}, | |
p = function(e, t, n) { | |
for (var r, i, s, o, u, a, f, l, c, h, p, d = 1 / n, v = e.length; --v > -1;) | |
for (h = e[v], s = h.a, o = h.d - s, u = h.c - s, a = h.b - s, r = i = 0, l = 1; n >= l; l++) f = d * l, c = 1 - f, r = i - (i = (f * f * o + 3 * c * (f * u + c * a)) * f), p = v * n + l - 1, t[p] = (t[p] || 0) + r * r | |
}, | |
d = function(e, t) { | |
t = t >> 0 || 6; | |
var n, r, i, s, o = [], | |
u = [], | |
a = 0, | |
f = 0, | |
l = t - 1, | |
c = [], | |
h = []; | |
for (n in e) p(e[n], o, t); | |
for (i = o.length, r = 0; i > r; r++) a += Math.sqrt(o[r]), s = r % t, h[s] = a, s === l && (f += a, s = r / t >> 0, c[s] = h, u[s] = f, a = 0, h = []); | |
return { | |
length: f, | |
lengths: u, | |
segments: c | |
} | |
}, | |
v = _gsScope._gsDefine.plugin({ | |
propName: "bezier", | |
priority: -1, | |
version: "1.3.4", | |
API: 2, | |
global: !0, | |
init: function(e, t, n) { | |
this._target = e, t instanceof Array && (t = { | |
values: t | |
}), this._func = {}, this._round = {}, this._props = [], this._timeRes = null == t.timeResolution ? 6 : parseInt(t.timeResolution, 10); | |
var r, i, s, o, u, a = t.values || [], | |
f = {}, | |
l = a[0], | |
p = t.autoRotate || n.vars.orientToBezier; | |
this._autoRotate = p ? p instanceof Array ? p : [ | |
["x", "y", "rotation", p === !0 ? 0 : Number(p) || 0] | |
] : null; | |
for (r in l) this._props.push(r); | |
for (s = this._props.length; --s > -1;) r = this._props[s], this._overwriteProps.push(r), i = this._func[r] = "function" == typeof e[r], f[r] = i ? e[r.indexOf("set") || "function" != typeof e["get" + r.substr(3)] ? r : "get" + r.substr(3)]() : parseFloat(e[r]), u || f[r] !== a[0][r] && (u = f); | |
if (this._beziers = "cubic" !== t.type && "quadratic" !== t.type && "soft" !== t.type ? c(a, isNaN(t.curviness) ? 1 : t.curviness, !1, "thruBasic" === t.type, t.correlate, u) : h(a, t.type, f), this._segCount = this._beziers[r].length, this._timeRes) { | |
var v = d(this._beziers, this._timeRes); | |
this._length = v.length, this._lengths = v.lengths, this._segments = v.segments, this._l1 = this._li = this._s1 = this._si = 0, this._l2 = this._lengths[0], this._curSeg = this._segments[0], this._s2 = this._curSeg[0], this._prec = 1 / this._curSeg.length | |
} | |
if (p = this._autoRotate) | |
for (this._initialRotations = [], p[0] instanceof Array || (this._autoRotate = p = [p]), s = p.length; --s > -1;) { | |
for (o = 0; 3 > o; o++) r = p[s][o], this._func[r] = "function" == typeof e[r] ? e[r.indexOf("set") || "function" != typeof e["get" + r.substr(3)] ? r : "get" + r.substr(3)] : !1; | |
r = p[s][2], this._initialRotations[s] = this._func[r] ? this._func[r].call(this._target) : this._target[r] | |
} | |
return this._startRatio = n.vars.runBackwards ? 1 : 0, !0 | |
}, | |
set: function(t) { | |
var n, r, i, s, o, u, a, f, l, c, h = this._segCount, | |
p = this._func, | |
d = this._target, | |
v = t !== this._startRatio; | |
if (this._timeRes) { | |
if (l = this._lengths, c = this._curSeg, t *= this._length, i = this._li, t > this._l2 && h - 1 > i) { | |
for (f = h - 1; f > i && t >= (this._l2 = l[++i]);); | |
this._l1 = l[i - 1], this._li = i, this._curSeg = c = this._segments[i], this._s2 = c[this._s1 = this._si = 0] | |
} else if (this._l1 > t && i > 0) { | |
for (; i > 0 && (this._l1 = l[--i]) >= t;); | |
0 === i && this._l1 > t ? this._l1 = 0 : i++, this._l2 = l[i], this._li = i, this._curSeg = c = this._segments[i], this._s1 = c[(this._si = c.length - 1) - 1] || 0, this._s2 = c[this._si] | |
} | |
if (n = i, t -= this._l1, i = this._si, t > this._s2 && c.length - 1 > i) { | |
for (f = c.length - 1; f > i && t >= (this._s2 = c[++i]);); | |
this._s1 = c[i - 1], this._si = i | |
} else if (this._s1 > t && i > 0) { | |
for (; i > 0 && (this._s1 = c[--i]) >= t;); | |
0 === i && this._s1 > t ? this._s1 = 0 : i++, this._s2 = c[i], this._si = i | |
} | |
u = (i + (t - this._s1) / (this._s2 - this._s1)) * this._prec | |
} else n = 0 > t ? 0 : t >= 1 ? h - 1 : h * t >> 0, u = (t - n * (1 / h)) * h; | |
for (r = 1 - u, i = this._props.length; --i > -1;) s = this._props[i], o = this._beziers[s][n], a = (u * u * o.da + 3 * r * (u * o.ca + r * o.ba)) * u + o.a, this._round[s] && (a = Math.round(a)), p[s] ? d[s](a) : d[s] = a; | |
if (this._autoRotate) { | |
var m, g, y, b, w, E, S, x = this._autoRotate; | |
for (i = x.length; --i > -1;) s = x[i][2], E = x[i][3] || 0, S = x[i][4] === !0 ? 1 : e, o = this._beziers[x[i][0]], m = this._beziers[x[i][1]], o && m && (o = o[n], m = m[n], g = o.a + (o.b - o.a) * u, b = o.b + (o.c - o.b) * u, g += (b - g) * u, b += (o.c + (o.d - o.c) * u - b) * u, y = m.a + (m.b - m.a) * u, w = m.b + (m.c - m.b) * u, y += (w - y) * u, w += (m.c + (m.d - m.c) * u - w) * u, a = v ? Math.atan2(w - y, b - g) * S + E : this._initialRotations[i], p[s] ? d[s](a) : d[s] = a) | |
} | |
} | |
}), | |
m = v.prototype; | |
v.bezierThrough = c, v.cubicToQuadratic = a, v._autoCSS = !0, v.quadraticToCubic = function(e, t, n) { | |
return new o(e, (2 * t + e) / 3, (2 * t + n) / 3, n) | |
}, v._cssRegister = function() { | |
var e = s.CSSPlugin; | |
if (e) { | |
var t = e._internals, | |
n = t._parseToProxy, | |
r = t._setPluginRatio, | |
i = t.CSSPropTween; | |
t._registerComplexSpecialProp("bezier", { | |
parser: function(e, t, s, o, u, a) { | |
t instanceof Array && (t = { | |
values: t | |
}), a = new v; | |
var f, l, c, h = t.values, | |
p = h.length - 1, | |
d = [], | |
m = {}; | |
if (0 > p) return u; | |
for (f = 0; p >= f; f++) c = n(e, h[f], o, u, a, p !== f), d[f] = c.end; | |
for (l in t) m[l] = t[l]; | |
return m.values = d, u = new i(e, "bezier", 0, 0, c.pt, 2), u.data = c, u.plugin = a, u.setRatio = r, 0 === m.autoRotate && (m.autoRotate = !0), !m.autoRotate || m.autoRotate instanceof Array || (f = m.autoRotate === !0 ? 0 : Number(m.autoRotate), m.autoRotate = null != c.end.left ? [ | |
["left", "top", "rotation", f, !1] | |
] : null != c.end.x ? [ | |
["x", "y", "rotation", f, !1] | |
] : !1), m.autoRotate && (o._transform || o._enableTransforms(!1), c.autoRotate = o._target._gsTransform), a._onInitTween(c.proxy, m, o._tween), u | |
} | |
}) | |
} | |
}, m._roundProps = function(e, t) { | |
for (var n = this._overwriteProps, r = n.length; --r > -1;)(e[n[r]] || e.bezier || e.bezierThrough) && (this._round[n[r]] = t) | |
}, m._kill = function(e) { | |
var t, n, r = this._props; | |
for (t in this._beziers) | |
if (t in e) | |
for (delete this._beziers[t], delete this._func[t], n = r.length; --n > -1;) r[n] === t && r.splice(n, 1); | |
return this._super._kill.call(this, e) | |
} | |
}(), _gsScope._gsDefine("plugins.CSSPlugin", ["plugins.TweenPlugin", "TweenLite"], function(e, t) { | |
var n, r, i, s, o = function() { | |
e.call(this, "css"), this._overwriteProps.length = 0, this.setRatio = o.prototype.setRatio | |
}, | |
u = _gsScope._gsDefine.globals, | |
a = {}, | |
f = o.prototype = new e("css"); | |
f.constructor = o, o.version = "1.15.1", o.API = 2, o.defaultTransformPerspective = 0, o.defaultSkewType = "compensated", f = "px", o.suffixMap = { | |
top: f, | |
right: f, | |
bottom: f, | |
left: f, | |
width: f, | |
height: f, | |
fontSize: f, | |
padding: f, | |
margin: f, | |
perspective: f, | |
lineHeight: "" | |
}; | |
var l, c, h, p, d, v, m = /(?:\d|\-\d|\.\d|\-\.\d)+/g, | |
g = /(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g, | |
y = /(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi, | |
b = /(?![+-]?\d*\.?\d+|[+-]|e[+-]\d+)[^0-9]/g, | |
w = /(?:\d|\-|\+|=|#|\.)*/g, | |
E = /opacity *= *([^)]*)/i, | |
S = /opacity:([^;]*)/i, | |
x = /alpha\(opacity *=.+?\)/i, | |
T = /^(rgb|hsl)/, | |
N = /([A-Z])/g, | |
C = /-([a-z])/gi, | |
k = /(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi, | |
L = function(e, t) { | |
return t.toUpperCase() | |
}, | |
A = /(?:Left|Right|Width)/i, | |
O = /(M11|M12|M21|M22)=[\d\-\.e]+/gi, | |
M = /progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i, | |
_ = /,(?=[^\)]*(?:\(|$))/gi, | |
D = Math.PI / 180, | |
P = 180 / Math.PI, | |
H = {}, | |
B = document, | |
j = function(e) { | |
return B.createElementNS ? B.createElementNS("http://www.w3.org/1999/xhtml", e) : B.createElement(e) | |
}, | |
F = j("div"), | |
I = j("img"), | |
q = o._internals = { | |
_specialProps: a | |
}, | |
R = navigator.userAgent, | |
U = function() { | |
var e = R.indexOf("Android"), | |
t = j("a"); | |
return h = -1 !== R.indexOf("Safari") && -1 === R.indexOf("Chrome") && (-1 === e || Number(R.substr(e + 8, 1)) > 3), d = h && 6 > Number(R.substr(R.indexOf("Version/") + 8, 1)), p = -1 !== R.indexOf("Firefox"), (/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(R) || /Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(R)) && (v = parseFloat(RegExp.$1)), t ? (t.style.cssText = "top:1px;opacity:.55;", /^0.55/.test(t.style.opacity)) : !1 | |
}(), | |
z = function(e) { | |
return E.test("string" == typeof e ? e : (e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? parseFloat(RegExp.$1) / 100 : 1 | |
}, | |
W = function(e) { | |
window.console && console.log(e) | |
}, | |
X = "", | |
V = "", | |
$ = function(e, t) { | |
t = t || F; | |
var n, r, i = t.style; | |
if (void 0 !== i[e]) return e; | |
for (e = e.charAt(0).toUpperCase() + e.substr(1), n = ["O", "Moz", "ms", "Ms", "Webkit"], r = 5; --r > -1 && void 0 === i[n[r] + e];); | |
return r >= 0 ? (V = 3 === r ? "ms" : n[r], X = "-" + V.toLowerCase() + "-", V + e) : null | |
}, | |
J = B.defaultView ? B.defaultView.getComputedStyle : function() {}, | |
K = o.getStyle = function(e, t, n, r, i) { | |
var s; | |
return U || "opacity" !== t ? (!r && e.style[t] ? s = e.style[t] : (n = n || J(e)) ? s = n[t] || n.getPropertyValue(t) || n.getPropertyValue(t.replace(N, "-$1").toLowerCase()) : e.currentStyle && (s = e.currentStyle[t]), null == i || s && "none" !== s && "auto" !== s && "auto auto" !== s ? s : i) : z(e) | |
}, | |
Q = q.convertToPixels = function(e, n, r, i, s) { | |
if ("px" === i || !i) return r; | |
if ("auto" === i || !r) return 0; | |
var u, a, f, l = A.test(n), | |
c = e, | |
h = F.style, | |
p = 0 > r; | |
if (p && (r = -r), "%" === i && -1 !== n.indexOf("border")) u = r / 100 * (l ? e.clientWidth : e.clientHeight); | |
else { | |
if (h.cssText = "border:0 solid red;position:" + K(e, "position") + ";line-height:0;", "%" !== i && c.appendChild) h[l ? "borderLeftWidth" : "borderTopWidth"] = r + i; | |
else { | |
if (c = e.parentNode || B.body, a = c._gsCache, f = t.ticker.frame, a && l && a.time === f) return a.width * r / 100; | |
h[l ? "width" : "height"] = r + i | |
} | |
c.appendChild(F), u = parseFloat(F[l ? "offsetWidth" : "offsetHeight"]), c.removeChild(F), l && "%" === i && o.cacheWidths !== !1 && (a = c._gsCache = c._gsCache || {}, a.time = f, a.width = 100 * (u / r)), 0 !== u || s || (u = Q(e, n, r, i, !0)) | |
} | |
return p ? -u : u | |
}, | |
G = q.calculateOffset = function(e, t, n) { | |
if ("absolute" !== K(e, "position", n)) return 0; | |
var r = "left" === t ? "Left" : "Top", | |
i = K(e, "margin" + r, n); | |
return e["offset" + r] - (Q(e, t, parseFloat(i), i.replace(w, "")) || 0) | |
}, | |
Y = function(e, t) { | |
var n, r, i = {}; | |
if (t = t || J(e, null)) | |
for (n in t)(-1 === n.indexOf("Transform") || St === n) && (i[n] = t[n]); | |
else if (t = e.currentStyle || e.style) | |
for (n in t) "string" == typeof n && void 0 === i[n] && (i[n.replace(C, L)] = t[n]); | |
return U || (i.opacity = z(e)), r = _t(e, t, !1), i.rotation = r.rotation, i.skewX = r.skewX, i.scaleX = r.scaleX, i.scaleY = r.scaleY, i.x = r.x, i.y = r.y, Nt && (i.z = r.z, i.rotationX = r.rotationX, i.rotationY = r.rotationY, i.scaleZ = r.scaleZ), i.filters && delete i.filters, i | |
}, | |
Z = function(e, t, n, r, i) { | |
var s, o, u, a = {}, | |
f = e.style; | |
for (o in n) "cssText" !== o && "length" !== o && isNaN(o) && (t[o] !== (s = n[o]) || i && i[o]) && -1 === o.indexOf("Origin") && ("number" == typeof s || "string" == typeof s) && (a[o] = "auto" !== s || "left" !== o && "top" !== o ? "" !== s && "auto" !== s && "none" !== s || "string" != typeof t[o] || "" === t[o].replace(b, "") ? s : 0 : G(e, o), void 0 !== f[o] && (u = new pt(f, o, f[o], u))); | |
if (r) | |
for (o in r) "className" !== o && (a[o] = r[o]); | |
return { | |
difs: a, | |
firstMPT: u | |
} | |
}, | |
et = { | |
width: ["Left", "Right"], | |
height: ["Top", "Bottom"] | |
}, | |
tt = ["marginLeft", "marginRight", "marginTop", "marginBottom"], | |
nt = function(e, t, n) { | |
var r = parseFloat("width" === t ? e.offsetWidth : e.offsetHeight), | |
i = et[t], | |
s = i.length; | |
for (n = n || J(e, null); --s > -1;) r -= parseFloat(K(e, "padding" + i[s], n, !0)) || 0, r -= parseFloat(K(e, "border" + i[s] + "Width", n, !0)) || 0; | |
return r | |
}, | |
rt = function(e, t) { | |
(null == e || "" === e || "auto" === e || "auto auto" === e) && (e = "0 0"); | |
var n = e.split(" "), | |
r = -1 !== e.indexOf("left") ? "0%" : -1 !== e.indexOf("right") ? "100%" : n[0], | |
i = -1 !== e.indexOf("top") ? "0%" : -1 !== e.indexOf("bottom") ? "100%" : n[1]; | |
return null == i ? i = "center" === r ? "50%" : "0" : "center" === i && (i = "50%"), ("center" === r || isNaN(parseFloat(r)) && -1 === (r + "").indexOf("=")) && (r = "50%"), t && (t.oxp = -1 !== r.indexOf("%"), t.oyp = -1 !== i.indexOf("%"), t.oxr = "=" === r.charAt(1), t.oyr = "=" === i.charAt(1), t.ox = parseFloat(r.replace(b, "")), t.oy = parseFloat(i.replace(b, ""))), r + " " + i + (n.length > 2 ? " " + n[2] : "") | |
}, | |
it = function(e, t) { | |
return "string" == typeof e && "=" === e.charAt(1) ? parseInt(e.charAt(0) + "1", 10) * parseFloat(e.substr(2)) : parseFloat(e) - parseFloat(t) | |
}, | |
st = function(e, t) { | |
return null == e ? t : "string" == typeof e && "=" === e.charAt(1) ? parseInt(e.charAt(0) + "1", 10) * parseFloat(e.substr(2)) + t : parseFloat(e) | |
}, | |
ot = function(e, t, n, r) { | |
var i, s, o, u, a, f = 1e-6; | |
return null == e ? u = t : "number" == typeof e ? u = e : (i = 360, s = e.split("_"), a = "=" === e.charAt(1), o = (a ? parseInt(e.charAt(0) + "1", 10) * parseFloat(s[0].substr(2)) : parseFloat(s[0])) * (-1 === e.indexOf("rad") ? 1 : P) - (a ? 0 : t), s.length && (r && (r[n] = t + o), -1 !== e.indexOf("short") && (o %= i, o !== o % (i / 2) && (o = 0 > o ? o + i : o - i)), -1 !== e.indexOf("_cw") && 0 > o ? o = (o + 9999999999 * i) % i - (0 | o / i) * i : -1 !== e.indexOf("ccw") && o > 0 && (o = (o - 9999999999 * i) % i - (0 | o / i) * i)), u = t + o), f > u && u > -f && (u = 0), u | |
}, | |
ut = { | |
aqua: [0, 255, 255], | |
lime: [0, 255, 0], | |
silver: [192, 192, 192], | |
black: [0, 0, 0], | |
maroon: [128, 0, 0], | |
teal: [0, 128, 128], | |
blue: [0, 0, 255], | |
navy: [0, 0, 128], | |
white: [255, 255, 255], | |
fuchsia: [255, 0, 255], | |
olive: [128, 128, 0], | |
yellow: [255, 255, 0], | |
orange: [255, 165, 0], | |
gray: [128, 128, 128], | |
purple: [128, 0, 128], | |
green: [0, 128, 0], | |
red: [255, 0, 0], | |
pink: [255, 192, 203], | |
cyan: [0, 255, 255], | |
transparent: [255, 255, 255, 0] | |
}, | |
at = function(e, t, n) { | |
return e = 0 > e ? e + 1 : e > 1 ? e - 1 : e, 0 | 255 * (1 > 6 * e ? t + 6 * (n - t) * e : .5 > e ? n : 2 > 3 * e ? t + 6 * (n - t) * (2 / 3 - e) : t) + .5 | |
}, | |
ft = o.parseColor = function(e) { | |
var t, n, r, i, s, o; | |
return e && "" !== e ? "number" == typeof e ? [e >> 16, 255 & e >> 8, 255 & e] : ("," === e.charAt(e.length - 1) && (e = e.substr(0, e.length - 1)), ut[e] ? ut[e] : "#" === e.charAt(0) ? (4 === e.length && (t = e.charAt(1), n = e.charAt(2), r = e.charAt(3), e = "#" + t + t + n + n + r + r), e = parseInt(e.substr(1), 16), [e >> 16, 255 & e >> 8, 255 & e]) : "hsl" === e.substr(0, 3) ? (e = e.match(m), i = Number(e[0]) % 360 / 360, s = Number(e[1]) / 100, o = Number(e[2]) / 100, n = .5 >= o ? o * (s + 1) : o + s - o * s, t = 2 * o - n, e.length > 3 && (e[3] = Number(e[3])), e[0] = at(i + 1 / 3, t, n), e[1] = at(i, t, n), e[2] = at(i - 1 / 3, t, n), e) : (e = e.match(m) || ut.transparent, e[0] = Number(e[0]), e[1] = Number(e[1]), e[2] = Number(e[2]), e.length > 3 && (e[3] = Number(e[3])), e)) : ut.black | |
}, | |
lt = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b"; | |
for (f in ut) lt += "|" + f + "\\b"; | |
lt = RegExp(lt + ")", "gi"); | |
var ct = function(e, t, n, r) { | |
if (null == e) return function(e) { | |
return e | |
}; | |
var i, s = t ? (e.match(lt) || [""])[0] : "", | |
o = e.split(s).join("").match(y) || [], | |
u = e.substr(0, e.indexOf(o[0])), | |
a = ")" === e.charAt(e.length - 1) ? ")" : "", | |
f = -1 !== e.indexOf(" ") ? " " : ",", | |
l = o.length, | |
c = l > 0 ? o[0].replace(m, "") : ""; | |
return l ? i = t ? function(e) { | |
var t, h, p, d; | |
if ("number" == typeof e) e += c; | |
else if (r && _.test(e)) { | |
for (d = e.replace(_, "|").split("|"), p = 0; d.length > p; p++) d[p] = i(d[p]); | |
return d.join(",") | |
} | |
if (t = (e.match(lt) || [s])[0], h = e.split(t).join("").match(y) || [], p = h.length, l > p--) | |
for (; l > ++p;) h[p] = n ? h[0 | (p - 1) / 2] : o[p]; | |
return u + h.join(f) + f + t + a + (-1 !== e.indexOf("inset") ? " inset" : "") | |
} : function(e) { | |
var t, s, h; | |
if ("number" == typeof e) e += c; | |
else if (r && _.test(e)) { | |
for (s = e.replace(_, "|").split("|"), h = 0; s.length > h; h++) s[h] = i(s[h]); | |
return s.join(",") | |
} | |
if (t = e.match(y) || [], h = t.length, l > h--) | |
for (; l > ++h;) t[h] = n ? t[0 | (h - 1) / 2] : o[h]; | |
return u + t.join(f) + a | |
} : function(e) { | |
return e | |
} | |
}, | |
ht = function(e) { | |
return e = e.split(","), | |
function(t, n, r, i, s, o, u) { | |
var a, f = (n + "").split(" "); | |
for (u = {}, a = 0; 4 > a; a++) u[e[a]] = f[a] = f[a] || f[(a - 1) / 2 >> 0]; | |
return i.parse(t, u, s, o) | |
} | |
}, | |
pt = (q._setPluginRatio = function(e) { | |
this.plugin.setRatio(e); | |
for (var t, n, r, i, s = this.data, o = s.proxy, u = s.firstMPT, a = 1e-6; u;) t = o[u.v], u.r ? t = Math.round(t) : a > t && t > -a && (t = 0), u.t[u.p] = t, u = u._next; | |
if (s.autoRotate && (s.autoRotate.rotation = o.rotation), 1 === e) | |
for (u = s.firstMPT; u;) { | |
if (n = u.t, n.type) { | |
if (1 === n.type) { | |
for (i = n.xs0 + n.s + n.xs1, r = 1; n.l > r; r++) i += n["xn" + r] + n["xs" + (r + 1)]; | |
n.e = i | |
} | |
} else n.e = n.s + n.xs0; | |
u = u._next | |
} | |
}, function(e, t, n, r, i) { | |
this.t = e, this.p = t, this.v = n, this.r = i, r && (r._prev = this, this._next = r) | |
}), | |
dt = (q._parseToProxy = function(e, t, n, r, i, s) { | |
var o, u, a, f, l, c = r, | |
h = {}, | |
p = {}, | |
d = n._transform, | |
v = H; | |
for (n._transform = null, H = t, r = l = n.parse(e, t, r, i), H = v, s && (n._transform = d, c && (c._prev = null, c._prev && (c._prev._next = null))); r && r !== c;) { | |
if (1 >= r.type && (u = r.p, p[u] = r.s + r.c, h[u] = r.s, s || (f = new pt(r, "s", u, f, r.r), r.c = 0), 1 === r.type)) | |
for (o = r.l; --o > 0;) a = "xn" + o, u = r.p + "_" + a, p[u] = r.data[a], h[u] = r[a], s || (f = new pt(r, a, u, f, r.rxp[a])); | |
r = r._next | |
} | |
return { | |
proxy: h, | |
end: p, | |
firstMPT: f, | |
pt: l | |
} | |
}, q.CSSPropTween = function(e, t, r, i, o, u, a, f, l, c, h) { | |
this.t = e, this.p = t, this.s = r, this.c = i, this.n = a || t, e instanceof dt || s.push(this.n), this.r = f, this.type = u || 0, l && (this.pr = l, n = !0), this.b = void 0 === c ? r : c, this.e = void 0 === h ? r + i : h, o && (this._next = o, o._prev = this) | |
}), | |
vt = o.parseComplex = function(e, t, n, r, i, s, o, u, a, f) { | |
n = n || s || "", o = new dt(e, t, 0, 0, o, f ? 2 : 1, null, !1, u, n, r), r += ""; | |
var c, h, p, d, v, y, b, w, E, S, x, N, C = n.split(", ").join(",").split(" "), | |
k = r.split(", ").join(",").split(" "), | |
L = C.length, | |
A = l !== !1; | |
for ((-1 !== r.indexOf(",") || -1 !== n.indexOf(",")) && (C = C.join(" ").replace(_, ", ").split(" "), k = k.join(" ").replace(_, ", ").split(" "), L = C.length), L !== k.length && (C = (s || "").split(" "), L = C.length), o.plugin = a, o.setRatio = f, c = 0; L > c; c++) | |
if (d = C[c], v = k[c], w = parseFloat(d), w || 0 === w) o.appendXtra("", w, it(v, w), v.replace(g, ""), A && -1 !== v.indexOf("px"), !0); | |
else if (i && ("#" === d.charAt(0) || ut[d] || T.test(d))) N = "," === v.charAt(v.length - 1) ? ")," : ")", d = ft(d), v = ft(v), E = d.length + v.length > 6, E && !U && 0 === v[3] ? (o["xs" + o.l] += o.l ? " transparent" : "transparent", o.e = o.e.split(k[c]).join("transparent")) : (U || (E = !1), o.appendXtra(E ? "rgba(" : "rgb(", d[0], v[0] - d[0], ",", !0, !0).appendXtra("", d[1], v[1] - d[1], ",", !0).appendXtra("", d[2], v[2] - d[2], E ? "," : N, !0), E && (d = 4 > d.length ? 1 : d[3], o.appendXtra("", d, (4 > v.length ? 1 : v[3]) - d, N, !1))); | |
else if (y = d.match(m)) { | |
if (b = v.match(g), !b || b.length !== y.length) return o; | |
for (p = 0, h = 0; y.length > h; h++) x = y[h], S = d.indexOf(x, p), o.appendXtra(d.substr(p, S - p), Number(x), it(b[h], x), "", A && "px" === d.substr(S + x.length, 2), 0 === h), p = S + x.length; | |
o["xs" + o.l] += d.substr(p) | |
} else o["xs" + o.l] += o.l ? " " + d : d; | |
if (-1 !== r.indexOf("=") && o.data) { | |
for (N = o.xs0 + o.data.s, c = 1; o.l > c; c++) N += o["xs" + c] + o.data["xn" + c]; | |
o.e = N + o["xs" + c] | |
} | |
return o.l || (o.type = -1, o.xs0 = o.e), o.xfirst || o | |
}, | |
mt = 9; | |
for (f = dt.prototype, f.l = f.pr = 0; --mt > 0;) f["xn" + mt] = 0, f["xs" + mt] = ""; | |
f.xs0 = "", f._next = f._prev = f.xfirst = f.data = f.plugin = f.setRatio = f.rxp = null, f.appendXtra = function(e, t, n, r, i, s) { | |
var o = this, | |
u = o.l; | |
return o["xs" + u] += s && u ? " " + e : e || "", n || 0 === u || o.plugin ? (o.l++, o.type = o.setRatio ? 2 : 1, o["xs" + o.l] = r || "", u > 0 ? (o.data["xn" + u] = t + n, o.rxp["xn" + u] = i, o["xn" + u] = t, o.plugin || (o.xfirst = new dt(o, "xn" + u, t, n, o.xfirst || o, 0, o.n, i, o.pr), o.xfirst.xs0 = 0), o) : (o.data = { | |
s: t + n | |
}, o.rxp = {}, o.s = t, o.c = n, o.r = i, o)) : (o["xs" + u] += t + (r || ""), o) | |
}; | |
var gt = function(e, t) { | |
t = t || {}, this.p = t.prefix ? $(e) || e : e, a[e] = a[this.p] = this, this.format = t.formatter || ct(t.defaultValue, t.color, t.collapsible, t.multi), t.parser && (this.parse = t.parser), this.clrs = t.color, this.multi = t.multi, this.keyword = t.keyword, this.dflt = t.defaultValue, this.pr = t.priority || 0 | |
}, | |
yt = q._registerComplexSpecialProp = function(e, t, n) { | |
"object" != typeof t && (t = { | |
parser: n | |
}); | |
var r, i, s = e.split(","), | |
o = t.defaultValue; | |
for (n = n || [o], r = 0; s.length > r; r++) t.prefix = 0 === r && t.prefix, t.defaultValue = n[r] || o, i = new gt(s[r], t) | |
}, | |
bt = function(e) { | |
if (!a[e]) { | |
var t = e.charAt(0).toUpperCase() + e.substr(1) + "Plugin"; | |
yt(e, { | |
parser: function(e, n, r, i, s, o, f) { | |
var l = u.com.greensock.plugins[t]; | |
return l ? (l._cssRegister(), a[r].parse(e, n, r, i, s, o, f)) : (W("Error: " + t + " js file not loaded."), s) | |
} | |
}) | |
} | |
}; | |
f = gt.prototype, f.parseComplex = function(e, t, n, r, i, s) { | |
var o, u, a, f, l, c, h = this.keyword; | |
if (this.multi && (_.test(n) || _.test(t) ? (u = t.replace(_, "|").split("|"), a = n.replace(_, "|").split("|")) : h && (u = [t], a = [n])), a) { | |
for (f = a.length > u.length ? a.length : u.length, o = 0; f > o; o++) t = u[o] = u[o] || this.dflt, n = a[o] = a[o] || this.dflt, h && (l = t.indexOf(h), c = n.indexOf(h), l !== c && (n = -1 === c ? a : u, n[o] += " " + h)); | |
t = u.join(", "), n = a.join(", ") | |
} | |
return vt(e, this.p, t, n, this.clrs, this.dflt, r, this.pr, i, s) | |
}, f.parse = function(e, t, n, r, s, o) { | |
return this.parseComplex(e.style, this.format(K(e, this.p, i, !1, this.dflt)), this.format(t), s, o) | |
}, o.registerSpecialProp = function(e, t, n) { | |
yt(e, { | |
parser: function(e, r, i, s, o, u) { | |
var a = new dt(e, i, 0, 0, o, 2, i, !1, n); | |
return a.plugin = u, a.setRatio = t(e, r, s._tween, i), a | |
}, | |
priority: n | |
}) | |
}; | |
var wt, Et = "scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent".split(","), | |
St = $("transform"), | |
xt = X + "transform", | |
Tt = $("transformOrigin"), | |
Nt = null !== $("perspective"), | |
Ct = q.Transform = function() { | |
this.perspective = parseFloat(o.defaultTransformPerspective) || 0, this.force3D = o.defaultForce3D !== !1 && Nt ? o.defaultForce3D || "auto" : !1 | |
}, | |
kt = window.SVGElement, | |
Lt = function(e, t, n) { | |
var r, i = B.createElementNS("http://www.w3.org/2000/svg", e), | |
s = /([a-z])([A-Z])/g; | |
for (r in n) i.setAttributeNS(null, r.replace(s, "$1-$2").toLowerCase(), n[r]); | |
return t.appendChild(i), i | |
}, | |
At = document.documentElement, | |
Ot = function() { | |
var e, t, n, r = v || /Android/i.test(R) && !window.chrome; | |
return B.createElementNS && !r && (e = Lt("svg", At), t = Lt("rect", e, { | |
width: 100, | |
height: 50, | |
x: 100 | |
}), n = t.getBoundingClientRect().width, t.style[Tt] = "50% 50%", t.style[St] = "scaleX(0.5)", r = n === t.getBoundingClientRect().width && (!p || !Nt), At.removeChild(e)), r | |
}(), | |
Mt = function(e, t, n) { | |
var r = e.getBBox(); | |
t = rt(t).split(" "), n.xOrigin = (-1 !== t[0].indexOf("%") ? parseFloat(t[0]) / 100 * r.width : parseFloat(t[0])) + r.x, n.yOrigin = (-1 !== t[1].indexOf("%") ? parseFloat(t[1]) / 100 * r.height : parseFloat(t[1])) + r.y | |
}, | |
_t = q.getTransform = function(e, t, n, r) { | |
if (e._gsTransform && n && !r) return e._gsTransform; | |
var s, u, a, f, l, c, h, p, d, v, m = n ? e._gsTransform || new Ct : new Ct, | |
g = 0 > m.scaleX, | |
y = 2e-5, | |
b = 1e5, | |
w = Nt ? parseFloat(K(e, Tt, t, !1, "0 0 0").split(" ")[2]) || m.zOrigin || 0 : 0, | |
E = parseFloat(o.defaultTransformPerspective) || 0; | |
if (St ? u = K(e, xt, t, !0) : e.currentStyle && (u = e.currentStyle.filter.match(O), u = u && 4 === u.length ? [u[0].substr(4), Number(u[2].substr(4)), Number(u[1].substr(4)), u[3].substr(4), m.x || 0, m.y || 0].join(",") : ""), s = !u || "none" === u || "matrix(1, 0, 0, 1, 0, 0)" === u, m.svg = !!(kt && "function" == typeof e.getBBox && e.getCTM && (!e.parentNode || e.parentNode.getBBox && e.parentNode.getCTM)), m.svg && (Mt(e, K(e, Tt, i, !1, "50% 50%") + "", m), wt = o.useSVGTransformAttr || Ot, a = e.getAttribute("transform"), s && a && -1 !== a.indexOf("matrix") && (u = a, s = 0)), !s) { | |
for (a = (u || "").match(/(?:\-|\b)[\d\-\.e]+\b/gi) || [], f = a.length; --f > -1;) l = Number(a[f]), a[f] = (c = l - (l |= 0)) ? (0 | c * b + (0 > c ? -0.5 : .5)) / b + l : l; | |
if (16 === a.length) { | |
var S, x, T, N, C, k = a[0], | |
L = a[1], | |
A = a[2], | |
M = a[3], | |
_ = a[4], | |
D = a[5], | |
H = a[6], | |
B = a[7], | |
j = a[8], | |
F = a[9], | |
I = a[10], | |
q = a[12], | |
R = a[13], | |
U = a[14], | |
z = a[11], | |
W = Math.atan2(H, I); | |
m.zOrigin && (U = -m.zOrigin, q = j * U - a[12], R = F * U - a[13], U = I * U + m.zOrigin - a[14]), m.rotationX = W * P, W && (N = Math.cos(-W), C = Math.sin(-W), S = _ * N + j * C, x = D * N + F * C, T = H * N + I * C, j = _ * -C + j * N, F = D * -C + F * N, I = H * -C + I * N, z = B * -C + z * N, _ = S, D = x, H = T), W = Math.atan2(j, I), m.rotationY = W * P, W && (N = Math.cos(-W), C = Math.sin(-W), S = k * N - j * C, x = L * N - F * C, T = A * N - I * C, F = L * C + F * N, I = A * C + I * N, z = M * C + z * N, k = S, L = x, A = T), W = Math.atan2(L, k), m.rotation = W * P, W && (N = Math.cos(-W), C = Math.sin(-W), k = k * N + _ * C, x = L * N + D * C, D = L * -C + D * N, H = A * -C + H * N, L = x), m.rotationX && Math.abs(m.rotationX) + Math.abs(m.rotation) > 359.9 && (m.rotationX = m.rotation = 0, m.rotationY += 180), m.scaleX = (0 | Math.sqrt(k * k + L * L) * b + .5) / b, m.scaleY = (0 | Math.sqrt(D * D + F * F) * b + .5) / b, m.scaleZ = (0 | Math.sqrt(H * H + I * I) * b + .5) / b, m.skewX = 0, m.perspective = z ? 1 / (0 > z ? -z : z) : 0, m.x = q, m.y = R, m.z = U | |
} else if (!(Nt && !r && a.length && m.x === a[4] && m.y === a[5] && (m.rotationX || m.rotationY) || void 0 !== m.x && "none" === K(e, "display", t))) { | |
var X = a.length >= 6, | |
V = X ? a[0] : 1, | |
$ = a[1] || 0, | |
J = a[2] || 0, | |
Q = X ? a[3] : 1; | |
m.x = a[4] || 0, m.y = a[5] || 0, h = Math.sqrt(V * V + $ * $), p = Math.sqrt(Q * Q + J * J), d = V || $ ? Math.atan2($, V) * P : m.rotation || 0, v = J || Q ? Math.atan2(J, Q) * P + d : m.skewX || 0, Math.abs(v) > 90 && 270 > Math.abs(v) && (g ? (h *= -1, v += 0 >= d ? 180 : -180, d += 0 >= d ? 180 : -180) : (p *= -1, v += 0 >= v ? 180 : -180)), m.scaleX = h, m.scaleY = p, m.rotation = d, m.skewX = v, Nt && (m.rotationX = m.rotationY = m.z = 0, m.perspective = E, m.scaleZ = 1) | |
} | |
m.zOrigin = w; | |
for (f in m) y > m[f] && m[f] > -y && (m[f] = 0) | |
} | |
return n && (e._gsTransform = m), m | |
}, | |
Dt = function(e) { | |
var t, n, r = this.data, | |
i = -r.rotation * D, | |
s = i + r.skewX * D, | |
o = 1e5, | |
u = (0 | Math.cos(i) * r.scaleX * o) / o, | |
a = (0 | Math.sin(i) * r.scaleX * o) / o, | |
f = (0 | Math.sin(s) * -r.scaleY * o) / o, | |
l = (0 | Math.cos(s) * r.scaleY * o) / o, | |
c = this.t.style, | |
h = this.t.currentStyle; | |
if (h) { | |
n = a, a = -f, f = -n, t = h.filter, c.filter = ""; | |
var p, d, m = this.t.offsetWidth, | |
g = this.t.offsetHeight, | |
y = "absolute" !== h.position, | |
b = "progid:DXImageTransform.Microsoft.Matrix(M11=" + u + ", M12=" + a + ", M21=" + f + ", M22=" + l, | |
S = r.x + m * r.xPercent / 100, | |
x = r.y + g * r.yPercent / 100; | |
if (null != r.ox && (p = (r.oxp ? .01 * m * r.ox : r.ox) - m / 2, d = (r.oyp ? .01 * g * r.oy : r.oy) - g / 2, S += p - (p * u + d * a), x += d - (p * f + d * l)), y ? (p = m / 2, d = g / 2, b += ", Dx=" + (p - (p * u + d * a) + S) + ", Dy=" + (d - (p * f + d * l) + x) + ")") : b += ", sizingMethod='auto expand')", c.filter = -1 !== t.indexOf("DXImageTransform.Microsoft.Matrix(") ? t.replace(M, b) : b + " " + t, (0 === e || 1 === e) && 1 === u && 0 === a && 0 === f && 1 === l && (y && -1 === b.indexOf("Dx=0, Dy=0") || E.test(t) && 100 !== parseFloat(RegExp.$1) || -1 === t.indexOf(t.indexOf("Alpha")) && c.removeAttribute("filter")), !y) { | |
var T, N, C, k = 8 > v ? 1 : -1; | |
for (p = r.ieOffsetX || 0, d = r.ieOffsetY || 0, r.ieOffsetX = Math.round((m - ((0 > u ? -u : u) * m + (0 > a ? -a : a) * g)) / 2 + S), r.ieOffsetY = Math.round((g - ((0 > l ? -l : l) * g + (0 > f ? -f : f) * m)) / 2 + x), mt = 0; 4 > mt; mt++) N = tt[mt], T = h[N], n = -1 !== T.indexOf("px") ? parseFloat(T) : Q(this.t, N, parseFloat(T), T.replace(w, "")) || 0, C = n !== r[N] ? 2 > mt ? -r.ieOffsetX : -r.ieOffsetY : 2 > mt ? p - r.ieOffsetX : d - r.ieOffsetY, c[N] = (r[N] = Math.round(n - C * (0 === mt || 2 === mt ? 1 : k))) + "px" | |
} | |
} | |
}, | |
Pt = q.set3DTransformRatio = function(e) { | |
var t, n, r, i, s, o, u, a, f, l, c, h, d, v, m, g, y, b, w, E, S, x = this.data, | |
T = this.t.style, | |
N = x.rotation * D, | |
C = x.scaleX, | |
k = x.scaleY, | |
L = x.scaleZ, | |
A = x.x, | |
O = x.y, | |
M = x.z, | |
_ = x.perspective; | |
if (!(1 !== e && 0 !== e && x.force3D || x.force3D === !0 || x.rotationY || x.rotationX || 1 !== L || _ || M)) return Ht.call(this, e), void 0; | |
if (p && (v = 1e-4, v > C && C > -v && (C = L = 2e-5), v > k && k > -v && (k = L = 2e-5), !_ || x.z || x.rotationX || x.rotationY || (_ = 0)), N || x.skewX) m = t = Math.cos(N), g = i = Math.sin(N), x.skewX && (N -= x.skewX * D, m = Math.cos(N), g = Math.sin(N), "simple" === x.skewType && (y = Math.tan(x.skewX * D), y = Math.sqrt(1 + y * y), m *= y, g *= y)), n = -g, s = m; | |
else { | |
if (!(x.rotationY || x.rotationX || 1 !== L || _ || x.svg)) return T[St] = (x.xPercent || x.yPercent ? "translate(" + x.xPercent + "%," + x.yPercent + "%) translate3d(" : "translate3d(") + A + "px," + O + "px," + M + "px)" + (1 !== C || 1 !== k ? " scale(" + C + "," + k + ")" : ""), void 0; | |
t = s = 1, n = i = 0 | |
} | |
f = 1, r = o = u = a = l = c = 0, h = _ ? -1 / _ : 0, d = x.zOrigin, v = 1e-6, E = ",", S = "0", N = x.rotationY * D, N && (m = Math.cos(N), g = Math.sin(N), u = -g, l = h * -g, r = t * g, o = i * g, f = m, h *= m, t *= m, i *= m), N = x.rotationX * D, N && (m = Math.cos(N), g = Math.sin(N), y = n * m + r * g, b = s * m + o * g, a = f * g, c = h * g, r = n * -g + r * m, o = s * -g + o * m, f *= m, h *= m, n = y, s = b), 1 !== L && (r *= L, o *= L, f *= L, h *= L), 1 !== k && (n *= k, s *= k, a *= k, c *= k), 1 !== C && (t *= C, i *= C, u *= C, l *= C), (d || x.svg) && (d && (A += r * -d, O += o * -d, M += f * -d + d), x.svg && (A += x.xOrigin - (x.xOrigin * t + x.yOrigin * n), O += x.yOrigin - (x.xOrigin * i + x.yOrigin * s)), v > A && A > -v && (A = S), v > O && O > -v && (O = S), v > M && M > -v && (M = 0)), w = x.xPercent || x.yPercent ? "translate(" + x.xPercent + "%," + x.yPercent + "%) matrix3d(" : "matrix3d(", w += (v > t && t > -v ? S : t) + E + (v > i && i > -v ? S : i) + E + (v > u && u > -v ? S : u), w += E + (v > l && l > -v ? S : l) + E + (v > n && n > -v ? S : n) + E + (v > s && s > -v ? S : s), x.rotationX || x.rotationY ? (w += E + (v > a && a > -v ? S : a) + E + (v > c && c > -v ? S : c) + E + (v > r && r > -v ? S : r), w += E + (v > o && o > -v ? S : o) + E + (v > f && f > -v ? S : f) + E + (v > h && h > -v ? S : h) + E) : w += ",0,0,0,0,1,0,", w += A + E + O + E + M + E + (_ ? 1 + -M / _ : 1) + ")", T[St] = w | |
}, | |
Ht = q.set2DTransformRatio = function(e) { | |
var t, n, r, i, s, o, u, a, f, l, c, h = this.data, | |
p = this.t, | |
d = p.style, | |
v = h.x, | |
m = h.y; | |
return !(h.rotationX || h.rotationY || h.z || h.force3D === !0 || "auto" === h.force3D && 1 !== e && 0 !== e) || h.svg && wt || !Nt ? (i = h.scaleX, s = h.scaleY, h.rotation || h.skewX || h.svg ? (t = h.rotation * D, n = t - h.skewX * D, r = 1e5, o = Math.cos(t) * i, u = Math.sin(t) * i, a = Math.sin(n) * -s, f = Math.cos(n) * s, h.svg && (v += h.xOrigin - (h.xOrigin * o + h.yOrigin * a), m += h.yOrigin - (h.xOrigin * u + h.yOrigin * f), c = 1e-6, c > v && v > -c && (v = 0), c > m && m > -c && (m = 0)), l = (0 | o * r) / r + "," + (0 | u * r) / r + "," + (0 | a * r) / r + "," + (0 | f * r) / r + "," + v + "," + m + ")", h.svg && wt ? p.setAttribute("transform", "matrix(" + l) : d[St] = (h.xPercent || h.yPercent ? "translate(" + h.xPercent + "%," + h.yPercent + "%) matrix(" : "matrix(") + l) : d[St] = (h.xPercent || h.yPercent ? "translate(" + h.xPercent + "%," + h.yPercent + "%) matrix(" : "matrix(") + i + ",0,0," + s + "," + v + "," + m + ")", void 0) : (this.setRatio = Pt, Pt.call(this, e), void 0) | |
}; | |
f = Ct.prototype, f.x = f.y = f.z = f.skewX = f.skewY = f.rotation = f.rotationX = f.rotationY = f.zOrigin = f.xPercent = f.yPercent = 0, f.scaleX = f.scaleY = f.scaleZ = 1, yt("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent", { | |
parser: function(e, t, n, r, s, u, a) { | |
if (r._lastParsedTransform === a) return s; | |
r._lastParsedTransform = a; | |
var f, l, c, h, p, d, v, m = r._transform = _t(e, i, !0, a.parseTransform), | |
g = e.style, | |
y = 1e-6, | |
b = Et.length, | |
w = a, | |
E = {}; | |
if ("string" == typeof w.transform && St) c = F.style, c[St] = w.transform, c.display = "block", c.position = "absolute", B.body.appendChild(F), f = _t(F, null, !1), B.body.removeChild(F); | |
else if ("object" == typeof w) { | |
if (f = { | |
scaleX: st(null != w.scaleX ? w.scaleX : w.scale, m.scaleX), | |
scaleY: st(null != w.scaleY ? w.scaleY : w.scale, m.scaleY), | |
scaleZ: st(w.scaleZ, m.scaleZ), | |
x: st(w.x, m.x), | |
y: st(w.y, m.y), | |
z: st(w.z, m.z), | |
xPercent: st(w.xPercent, m.xPercent), | |
yPercent: st(w.yPercent, m.yPercent), | |
perspective: st(w.transformPerspective, m.perspective) | |
}, v = w.directionalRotation, null != v) | |
if ("object" == typeof v) | |
for (c in v) w[c] = v[c]; | |
else w.rotation = v; | |
"string" == typeof w.x && -1 !== w.x.indexOf("%") && (f.x = 0, f.xPercent = st(w.x, m.xPercent)), "string" == typeof w.y && -1 !== w.y.indexOf("%") && (f.y = 0, f.yPercent = st(w.y, m.yPercent)), f.rotation = ot("rotation" in w ? w.rotation : "shortRotation" in w ? w.shortRotation + "_short" : "rotationZ" in w ? w.rotationZ : m.rotation, m.rotation, "rotation", E), Nt && (f.rotationX = ot("rotationX" in w ? w.rotationX : "shortRotationX" in w ? w.shortRotationX + "_short" : m.rotationX || 0, m.rotationX, "rotationX", E), f.rotationY = ot("rotationY" in w ? w.rotationY : "shortRotationY" in w ? w.shortRotationY + "_short" : m.rotationY || 0, m.rotationY, "rotationY", E)), f.skewX = null == w.skewX ? m.skewX : ot(w.skewX, m.skewX), f.skewY = null == w.skewY ? m.skewY : ot(w.skewY, m.skewY), (l = f.skewY - m.skewY) && (f.skewX += l, f.rotation += l) | |
} | |
for (Nt && null != w.force3D && (m.force3D = w.force3D, d = !0), m.skewType = w.skewType || m.skewType || o.defaultSkewType, p = m.force3D || m.z || m.rotationX || m.rotationY || f.z || f.rotationX || f.rotationY || f.perspective, p || null == w.scale || (f.scaleZ = 1); --b > -1;) n = Et[b], h = f[n] - m[n], (h > y || -y > h || null != w[n] || null != H[n]) && (d = !0, s = new dt(m, n, m[n], h, s), n in E && (s.e = E[n]), s.xs0 = 0, s.plugin = u, r._overwriteProps.push(s.n)); | |
return h = w.transformOrigin, h && m.svg && (Mt(e, rt(h), f), s = new dt(m, "xOrigin", m.xOrigin, f.xOrigin - m.xOrigin, s, -1, "transformOrigin"), s.b = m.xOrigin, s.e = s.xs0 = f.xOrigin, s = new dt(m, "yOrigin", m.yOrigin, f.yOrigin - m.yOrigin, s, -1, "transformOrigin"), s.b = m.yOrigin, s.e = s.xs0 = f.yOrigin, h = "0px 0px"), (h || Nt && p && m.zOrigin) && (St ? (d = !0, n = Tt, h = (h || K(e, n, i, !1, "50% 50%")) + "", s = new dt(g, n, 0, 0, s, -1, "transformOrigin"), s.b = g[n], s.plugin = u, Nt ? (c = m.zOrigin, h = h.split(" "), m.zOrigin = (h.length > 2 && (0 === c || "0px" !== h[2]) ? parseFloat(h[2]) : c) || 0, s.xs0 = s.e = h[0] + " " + (h[1] || "50%") + " 0px", s = new dt(m, "zOrigin", 0, 0, s, -1, s.n), s.b = c, s.xs0 = s.e = m.zOrigin) : s.xs0 = s.e = h) : rt(h + "", m)), d && (r._transformType = m.svg && wt || !p && 3 !== this._transformType ? 2 : 3), s | |
}, | |
prefix: !0 | |
}), yt("boxShadow", { | |
defaultValue: "0px 0px 0px 0px #999", | |
prefix: !0, | |
color: !0, | |
multi: !0, | |
keyword: "inset" | |
}), yt("borderRadius", { | |
defaultValue: "0px", | |
parser: function(e, t, n, s, o) { | |
t = this.format(t); | |
var u, a, f, l, c, h, p, d, v, m, g, y, b, w, E, S, x = ["borderTopLeftRadius", "borderTopRightRadius", "borderBottomRightRadius", "borderBottomLeftRadius"], | |
T = e.style; | |
for (v = parseFloat(e.offsetWidth), m = parseFloat(e.offsetHeight), u = t.split(" "), a = 0; x.length > a; a++) this.p.indexOf("border") && (x[a] = $(x[a])), c = l = K(e, x[a], i, !1, "0px"), -1 !== c.indexOf(" ") && (l = c.split(" "), c = l[0], l = l[1]), h = f = u[a], p = parseFloat(c), y = c.substr((p + "").length), b = "=" === h.charAt(1), b ? (d = parseInt(h.charAt(0) + "1", 10), h = h.substr(2), d *= parseFloat(h), g = h.substr((d + "").length - (0 > d ? 1 : 0)) || "") : (d = parseFloat(h), g = h.substr((d + "").length)), "" === g && (g = r[n] || y), g !== y && (w = Q(e, "borderLeft", p, y), E = Q(e, "borderTop", p, y), "%" === g ? (c = 100 * (w / v) + "%", l = 100 * (E / m) + "%") : "em" === g ? (S = Q(e, "borderLeft", 1, "em"), c = w / S + "em", l = E / S + "em") : (c = w + "px", l = E + "px"), b && (h = parseFloat(c) + d + g, f = parseFloat(l) + d + g)), o = vt(T, x[a], c + " " + l, h + " " + f, !1, "0px", o); | |
return o | |
}, | |
prefix: !0, | |
formatter: ct("0px 0px 0px 0px", !1, !0) | |
}), yt("backgroundPosition", { | |
defaultValue: "0 0", | |
parser: function(e, t, n, r, s, o) { | |
var u, a, f, l, c, h, p = "background-position", | |
d = i || J(e, null), | |
m = this.format((d ? v ? d.getPropertyValue(p + "-x") + " " + d.getPropertyValue(p + "-y") : d.getPropertyValue(p) : e.currentStyle.backgroundPositionX + " " + e.currentStyle.backgroundPositionY) || "0 0"), | |
g = this.format(t); | |
if (-1 !== m.indexOf("%") != (-1 !== g.indexOf("%")) && (h = K(e, "backgroundImage").replace(k, ""), h && "none" !== h)) { | |
for (u = m.split(" "), a = g.split(" "), I.setAttribute("src", h), f = 2; --f > -1;) m = u[f], l = -1 !== m.indexOf("%"), l !== (-1 !== a[f].indexOf("%")) && (c = 0 === f ? e.offsetWidth - I.width : e.offsetHeight - I.height, u[f] = l ? parseFloat(m) / 100 * c + "px" : 100 * (parseFloat(m) / c) + "%"); | |
m = u.join(" ") | |
} | |
return this.parseComplex(e.style, m, g, s, o) | |
}, | |
formatter: rt | |
}), yt("backgroundSize", { | |
defaultValue: "0 0", | |
formatter: rt | |
}), yt("perspective", { | |
defaultValue: "0px", | |
prefix: !0 | |
}), yt("perspectiveOrigin", { | |
defaultValue: "50% 50%", | |
prefix: !0 | |
}), yt("transformStyle", { | |
prefix: !0 | |
}), yt("backfaceVisibility", { | |
prefix: !0 | |
}), yt("userSelect", { | |
prefix: !0 | |
}), yt("margin", { | |
parser: ht("marginTop,marginRight,marginBottom,marginLeft") | |
}), yt("padding", { | |
parser: ht("paddingTop,paddingRight,paddingBottom,paddingLeft") | |
}), yt("clip", { | |
defaultValue: "rect(0px,0px,0px,0px)", | |
parser: function(e, t, n, r, s, o) { | |
var u, a, f; | |
return 9 > v ? (a = e.currentStyle, f = 8 > v ? " " : ",", u = "rect(" + a.clipTop + f + a.clipRight + f + a.clipBottom + f + a.clipLeft + ")", t = this.format(t).split(",").join(f)) : (u = this.format(K(e, this.p, i, !1, this.dflt)), t = this.format(t)), this.parseComplex(e.style, u, t, s, o) | |
} | |
}), yt("textShadow", { | |
defaultValue: "0px 0px 0px #999", | |
color: !0, | |
multi: !0 | |
}), yt("autoRound,strictUnits", { | |
parser: function(e, t, n, r, i) { | |
return i | |
} | |
}), yt("border", { | |
defaultValue: "0px solid #000", | |
parser: function(e, t, n, r, s, o) { | |
return this.parseComplex(e.style, this.format(K(e, "borderTopWidth", i, !1, "0px") + " " + K(e, "borderTopStyle", i, !1, "solid") + " " + K(e, "borderTopColor", i, !1, "#000")), this.format(t), s, o) | |
}, | |
color: !0, | |
formatter: function(e) { | |
var t = e.split(" "); | |
return t[0] + " " + (t[1] || "solid") + " " + (e.match(lt) || ["#000"])[0] | |
} | |
}), yt("borderWidth", { | |
parser: ht("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth") | |
}), yt("float,cssFloat,styleFloat", { | |
parser: function(e, t, n, r, i) { | |
var s = e.style, | |
o = "cssFloat" in s ? "cssFloat" : "styleFloat"; | |
return new dt(s, o, 0, 0, i, -1, n, !1, 0, s[o], t) | |
} | |
}); | |
var Bt = function(e) { | |
var t, n = this.t, | |
r = n.filter || K(this.data, "filter") || "", | |
i = 0 | this.s + this.c * e; | |
100 === i && (-1 === r.indexOf("atrix(") && -1 === r.indexOf("radient(") && -1 === r.indexOf("oader(") ? (n.removeAttribute("filter"), t = !K(this.data, "filter")) : (n.filter = r.replace(x, ""), t = !0)), t || (this.xn1 && (n.filter = r = r || "alpha(opacity=" + i + ")"), -1 === r.indexOf("pacity") ? 0 === i && this.xn1 || (n.filter = r + " alpha(opacity=" + i + ")") : n.filter = r.replace(E, "opacity=" + i)) | |
}; | |
yt("opacity,alpha,autoAlpha", { | |
defaultValue: "1", | |
parser: function(e, t, n, r, s, o) { | |
var u = parseFloat(K(e, "opacity", i, !1, "1")), | |
a = e.style, | |
f = "autoAlpha" === n; | |
return "string" == typeof t && "=" === t.charAt(1) && (t = ("-" === t.charAt(0) ? -1 : 1) * parseFloat(t.substr(2)) + u), f && 1 === u && "hidden" === K(e, "visibility", i) && 0 !== t && (u = 0), U ? s = new dt(a, "opacity", u, t - u, s) : (s = new dt(a, "opacity", 100 * u, 100 * (t - u), s), s.xn1 = f ? 1 : 0, a.zoom = 1, s.type = 2, s.b = "alpha(opacity=" + s.s + ")", s.e = "alpha(opacity=" + (s.s + s.c) + ")", s.data = e, s.plugin = o, s.setRatio = Bt), f && (s = new dt(a, "visibility", 0, 0, s, -1, null, !1, 0, 0 !== u ? "inherit" : "hidden", 0 === t ? "hidden" : "inherit"), s.xs0 = "inherit", r._overwriteProps.push(s.n), r._overwriteProps.push(n)), s | |
} | |
}); | |
var jt = function(e, t) { | |
t && (e.removeProperty ? ("ms" === t.substr(0, 2) && (t = "M" + t.substr(1)), e.removeProperty(t.replace(N, "-$1").toLowerCase())) : e.removeAttribute(t)) | |
}, | |
Ft = function(e) { | |
if (this.t._gsClassPT = this, 1 === e || 0 === e) { | |
this.t.setAttribute("class", 0 === e ? this.b : this.e); | |
for (var t = this.data, n = this.t.style; t;) t.v ? n[t.p] = t.v : jt(n, t.p), t = t._next; | |
1 === e && this.t._gsClassPT === this && (this.t._gsClassPT = null) | |
} else this.t.getAttribute("class") !== this.e && this.t.setAttribute("class", this.e) | |
}; | |
yt("className", { | |
parser: function(e, t, r, s, o, u, a) { | |
var f, l, c, h, p, d = e.getAttribute("class") || "", | |
v = e.style.cssText; | |
if (o = s._classNamePT = new dt(e, r, 0, 0, o, 2), o.setRatio = Ft, o.pr = -11, n = !0, o.b = d, l = Y(e, i), c = e._gsClassPT) { | |
for (h = {}, p = c.data; p;) h[p.p] = 1, p = p._next; | |
c.setRatio(1) | |
} | |
return e._gsClassPT = o, o.e = "=" !== t.charAt(1) ? t : d.replace(RegExp("\\s*\\b" + t.substr(2) + "\\b"), "") + ("+" === t.charAt(0) ? " " + t.substr(2) : ""), s._tween._duration && (e.setAttribute("class", o.e), f = Z(e, l, Y(e), a, h), e.setAttribute("class", d), o.data = f.firstMPT, e.style.cssText = v, o = o.xfirst = s.parse(e, f.difs, o, u)), o | |
} | |
}); | |
var It = function(e) { | |
if ((1 === e || 0 === e) && this.data._totalTime === this.data._totalDuration && "isFromStart" !== this.data.data) { | |
var t, n, r, i, s = this.t.style, | |
o = a.transform.parse; | |
if ("all" === this.e) s.cssText = "", i = !0; | |
else | |
for (t = this.e.split(" ").join("").split(","), r = t.length; --r > -1;) n = t[r], a[n] && (a[n].parse === o ? i = !0 : n = "transformOrigin" === n ? Tt : a[n].p), jt(s, n); | |
i && (jt(s, St), this.t._gsTransform && delete this.t._gsTransform) | |
} | |
}; | |
for (yt("clearProps", { | |
parser: function(e, t, r, i, s) { | |
return s = new dt(e, r, 0, 0, s, 2), s.setRatio = It, s.e = t, s.pr = -10, s.data = i._tween, n = !0, s | |
} | |
}), f = "bezier,throwProps,physicsProps,physics2D".split(","), mt = f.length; mt--;) bt(f[mt]); | |
f = o.prototype, f._firstPT = f._lastParsedTransform = f._transform = null, f._onInitTween = function(e, t, u) { | |
if (!e.nodeType) return !1; | |
this._target = e, this._tween = u, this._vars = t, l = t.autoRound, n = !1, r = t.suffixMap || o.suffixMap, i = J(e, ""), s = this._overwriteProps; | |
var a, f, p, v, m, g, y, b, w, E = e.style; | |
if (c && "" === E.zIndex && (a = K(e, "zIndex", i), ("auto" === a || "" === a) && this._addLazySet(E, "zIndex", 0)), "string" == typeof t && (v = E.cssText, a = Y(e, i), E.cssText = v + ";" + t, a = Z(e, a, Y(e)).difs, !U && S.test(t) && (a.opacity = parseFloat(RegExp.$1)), t = a, E.cssText = v), this._firstPT = f = this.parse(e, t, null), this._transformType) { | |
for (w = 3 === this._transformType, St ? h && (c = !0, "" === E.zIndex && (y = K(e, "zIndex", i), ("auto" === y || "" === y) && this._addLazySet(E, "zIndex", 0)), d && this._addLazySet(E, "WebkitBackfaceVisibility", this._vars.WebkitBackfaceVisibility || (w ? "visible" : "hidden"))) : E.zoom = 1, p = f; p && p._next;) p = p._next; | |
b = new dt(e, "transform", 0, 0, null, 2), this._linkCSSP(b, null, p), b.setRatio = w && Nt ? Pt : St ? Ht : Dt, b.data = this._transform || _t(e, i, !0), s.pop() | |
} | |
if (n) { | |
for (; f;) { | |
for (g = f._next, p = v; p && p.pr > f.pr;) p = p._next; | |
(f._prev = p ? p._prev : m) ? f._prev._next = f: v = f, (f._next = p) ? p._prev = f : m = f, f = g | |
} | |
this._firstPT = v | |
} | |
return !0 | |
}, f.parse = function(e, t, n, s) { | |
var o, u, f, c, h, p, d, v, m, g, y = e.style; | |
for (o in t) p = t[o], u = a[o], u ? n = u.parse(e, p, o, this, n, s, t) : (h = K(e, o, i) + "", m = "string" == typeof p, "color" === o || "fill" === o || "stroke" === o || -1 !== o.indexOf("Color") || m && T.test(p) ? (m || (p = ft(p), p = (p.length > 3 ? "rgba(" : "rgb(") + p.join(",") + ")"), n = vt(y, o, h, p, !0, "transparent", n, 0, s)) : !m || -1 === p.indexOf(" ") && -1 === p.indexOf(",") ? (f = parseFloat(h), d = f || 0 === f ? h.substr((f + "").length) : "", ("" === h || "auto" === h) && ("width" === o || "height" === o ? (f = nt(e, o, i), d = "px") : "left" === o || "top" === o ? (f = G(e, o, i), d = "px") : (f = "opacity" !== o ? 0 : 1, d = "")), g = m && "=" === p.charAt(1), g ? (c = parseInt(p.charAt(0) + "1", 10), p = p.substr(2), c *= parseFloat(p), v = p.replace(w, "")) : (c = parseFloat(p), v = m ? p.replace(w, "") : ""), "" === v && (v = o in r ? r[o] : d), p = c || 0 === c ? (g ? c + f : c) + v : t[o], d !== v && "" !== v && (c || 0 === c) && f && (f = Q(e, o, f, d), "%" === v ? (f /= Q(e, o, 100, "%") / 100, t.strictUnits !== !0 && (h = f + "%")) : "em" === v ? f /= Q(e, o, 1, "em") : "px" !== v && (c = Q(e, o, c, v), v = "px"), g && (c || 0 === c) && (p = c + f + v)), g && (c += f), !f && 0 !== f || !c && 0 !== c ? void 0 !== y[o] && (p || "NaN" != p + "" && null != p) ? (n = new dt(y, o, c || f || 0, 0, n, -1, o, !1, 0, h, p), n.xs0 = "none" !== p || "display" !== o && -1 === o.indexOf("Style") ? p : h) : W("invalid " + o + " tween value: " + t[o]) : (n = new dt(y, o, f, c - f, n, 0, o, l !== !1 && ("px" === v || "zIndex" === o), 0, h, p), n.xs0 = v)) : n = vt(y, o, h, p, !0, null, n, 0, s)), s && n && !n.plugin && (n.plugin = s); | |
return n | |
}, f.setRatio = function(e) { | |
var t, n, r, i = this._firstPT, | |
s = 1e-6; | |
if (1 !== e || this._tween._time !== this._tween._duration && 0 !== this._tween._time) | |
if (e || this._tween._time !== this._tween._duration && 0 !== this._tween._time || this._tween._rawPrevTime === -0.000001) | |
for (; i;) { | |
if (t = i.c * e + i.s, i.r ? t = Math.round(t) : s > t && t > -s && (t = 0), i.type) | |
if (1 === i.type) | |
if (r = i.l, 2 === r) i.t[i.p] = i.xs0 + t + i.xs1 + i.xn1 + i.xs2; | |
else if (3 === r) i.t[i.p] = i.xs0 + t + i.xs1 + i.xn1 + i.xs2 + i.xn2 + i.xs3; | |
else if (4 === r) i.t[i.p] = i.xs0 + t + i.xs1 + i.xn1 + i.xs2 + i.xn2 + i.xs3 + i.xn3 + i.xs4; | |
else if (5 === r) i.t[i.p] = i.xs0 + t + i.xs1 + i.xn1 + i.xs2 + i.xn2 + i.xs3 + i.xn3 + i.xs4 + i.xn4 + i.xs5; | |
else { | |
for (n = i.xs0 + t + i.xs1, r = 1; i.l > r; r++) n += i["xn" + r] + i["xs" + (r + 1)]; | |
i.t[i.p] = n | |
} else -1 === i.type ? i.t[i.p] = i.xs0 : i.setRatio && i.setRatio(e); | |
else i.t[i.p] = t + i.xs0; | |
i = i._next | |
} else | |
for (; i;) 2 !== i.type ? i.t[i.p] = i.b : i.setRatio(e), i = i._next; | |
else | |
for (; i;) 2 !== i.type ? i.t[i.p] = i.e : i.setRatio(e), i = i._next | |
}, f._enableTransforms = function(e) { | |
this._transform = this._transform || _t(this._target, i, !0), this._transformType = this._transform.svg && wt || !e && 3 !== this._transformType ? 2 : 3 | |
}; | |
var qt = function() { | |
this.t[this.p] = this.e, this.data._linkCSSP(this, this._next, null, !0) | |
}; | |
f._addLazySet = function(e, t, n) { | |
var r = this._firstPT = new dt(e, t, 0, 0, this._firstPT, 2); | |
r.e = n, r.setRatio = qt, r.data = this | |
}, f._linkCSSP = function(e, t, n, r) { | |
return e && (t && (t._prev = e), e._next && (e._next._prev = e._prev), e._prev ? e._prev._next = e._next : this._firstPT === e && (this._firstPT = e._next, r = !0), n ? n._next = e : r || null !== this._firstPT || (this._firstPT = e), e._next = t, e._prev = n), e | |
}, f._kill = function(t) { | |
var n, r, i, s = t; | |
if (t.autoAlpha || t.alpha) { | |
s = {}; | |
for (r in t) s[r] = t[r]; | |
s.opacity = 1, s.autoAlpha && (s.visibility = 1) | |
} | |
return t.className && (n = this._classNamePT) && (i = n.xfirst, i && i._prev ? this._linkCSSP(i._prev, n._next, i._prev._prev) : i === this._firstPT && (this._firstPT = n._next), n._next && this._linkCSSP(n._next, n._next._next, i._prev), this._classNamePT = null), e.prototype._kill.call(this, s) | |
}; | |
var Rt = function(e, t, n) { | |
var r, i, s, o; | |
if (e.slice) | |
for (i = e.length; --i > -1;) Rt(e[i], t, n); | |
else | |
for (r = e.childNodes, i = r.length; --i > -1;) s = r[i], o = s.type, s.style && (t.push(Y(s)), n && n.push(s)), 1 !== o && 9 !== o && 11 !== o || !s.childNodes.length || Rt(s, t, n) | |
}; | |
return o.cascadeTo = function(e, n, r) { | |
var i, s, o, u = t.to(e, n, r), | |
a = [u], | |
f = [], | |
l = [], | |
c = [], | |
h = t._internals.reservedProps; | |
for (e = u._targets || u.target, Rt(e, f, c), u.render(n, !0), Rt(e, l), u.render(0, !0), u._enabled(!0), i = c.length; --i > -1;) | |
if (s = Z(c[i], f[i], l[i]), s.firstMPT) { | |
s = s.difs; | |
for (o in r) h[o] && (s[o] = r[o]); | |
a.push(t.to(c[i], n, s)) | |
} | |
return a | |
}, e.activate([o]), o | |
}, !0), | |
function() { | |
var e = _gsScope._gsDefine.plugin({ | |
propName: "roundProps", | |
priority: -1, | |
API: 2, | |
init: function(e, t, n) { | |
return this._tween = n, !0 | |
} | |
}), | |
t = e.prototype; | |
t._onInitAllProps = function() { | |
for (var e, t, n, r = this._tween, i = r.vars.roundProps instanceof Array ? r.vars.roundProps : r.vars.roundProps.split(","), s = i.length, o = {}, u = r._propLookup.roundProps; --s > -1;) o[i[s]] = 1; | |
for (s = i.length; --s > -1;) | |
for (e = i[s], t = r._firstPT; t;) n = t._next, t.pg ? t.t._roundProps(o, !0) : t.n === e && (this._add(t.t, e, t.s, t.c), n && (n._prev = t._prev), t._prev ? t._prev._next = n : r._firstPT === t && (r._firstPT = n), t._next = t._prev = null, r._propLookup[e] = u), t = n; | |
return !1 | |
}, t._add = function(e, t, n, r) { | |
this._addTween(e, t, n, n + r, t, !0), this._overwriteProps.push(t) | |
} | |
}(), _gsScope._gsDefine.plugin({ | |
propName: "attr", | |
API: 2, | |
version: "0.3.3", | |
init: function(e, t) { | |
var n, r, i; | |
if ("function" != typeof e.setAttribute) return !1; | |
this._target = e, this._proxy = {}, this._start = {}, this._end = {}; | |
for (n in t) this._start[n] = this._proxy[n] = r = e.getAttribute(n), i = this._addTween(this._proxy, n, parseFloat(r), t[n], n), this._end[n] = i ? i.s + i.c : t[n], this._overwriteProps.push(n); | |
return !0 | |
}, | |
set: function(e) { | |
this._super.setRatio.call(this, e); | |
for (var t, n = this._overwriteProps, r = n.length, i = 1 === e ? this._end : e ? this._proxy : this._start; --r > -1;) t = n[r], this._target.setAttribute(t, i[t] + "") | |
} | |
}), _gsScope._gsDefine.plugin({ | |
propName: "directionalRotation", | |
version: "0.2.1", | |
API: 2, | |
init: function(e, t) { | |
"object" != typeof t && (t = { | |
rotation: t | |
}), this.finals = {}; | |
var n, r, i, s, o, u, a = t.useRadians === !0 ? 2 * Math.PI : 360, | |
f = 1e-6; | |
for (n in t) "useRadians" !== n && (u = (t[n] + "").split("_"), r = u[0], i = parseFloat("function" != typeof e[n] ? e[n] : e[n.indexOf("set") || "function" != typeof e["get" + n.substr(3)] ? n : "get" + n.substr(3)]()), s = this.finals[n] = "string" == typeof r && "=" === r.charAt(1) ? i + parseInt(r.charAt(0) + "1", 10) * Number(r.substr(2)) : Number(r) || 0, o = s - i, u.length && (r = u.join("_"), -1 !== r.indexOf("short") && (o %= a, o !== o % (a / 2) && (o = 0 > o ? o + a : o - a)), -1 !== r.indexOf("_cw") && 0 > o ? o = (o + 9999999999 * a) % a - (0 | o / a) * a : -1 !== r.indexOf("ccw") && o > 0 && (o = (o - 9999999999 * a) % a - (0 | o / a) * a)), (o > f || -f > o) && (this._addTween(e, n, i, i + o, n), this._overwriteProps.push(n))); | |
return !0 | |
}, | |
set: function(e) { | |
var t; | |
if (1 !== e) this._super.setRatio.call(this, e); | |
else | |
for (t = this._firstPT; t;) t.f ? t.t[t.p](this.finals[t.p]) : t.t[t.p] = this.finals[t.p], t = t._next | |
} | |
})._autoCSS = !0, _gsScope._gsDefine("easing.Back", ["easing.Ease"], function(e) { | |
var t, n, r, i = _gsScope.GreenSockGlobals || _gsScope, | |
s = i.com.greensock, | |
o = 2 * Math.PI, | |
u = Math.PI / 2, | |
a = s._class, | |
f = function(t, n) { | |
var r = a("easing." + t, function() {}, !0), | |
i = r.prototype = new e; | |
return i.constructor = r, i.getRatio = n, r | |
}, | |
l = e.register || function() {}, | |
c = function(e, t, n, r) { | |
var i = a("easing." + e, { | |
easeOut: new t, | |
easeIn: new n, | |
easeInOut: new r | |
}, !0); | |
return l(i, e), i | |
}, | |
h = function(e, t, n) { | |
this.t = e, this.v = t, n && (this.next = n, n.prev = this, this.c = n.v - t, this.gap = n.t - e) | |
}, | |
p = function(t, n) { | |
var r = a("easing." + t, function(e) { | |
this._p1 = e || 0 === e ? e : 1.70158, this._p2 = 1.525 * this._p1 | |
}, !0), | |
i = r.prototype = new e; | |
return i.constructor = r, i.getRatio = n, i.config = function(e) { | |
return new r(e) | |
}, r | |
}, | |
d = c("Back", p("BackOut", function(e) { | |
return (e -= 1) * e * ((this._p1 + 1) * e + this._p1) + 1 | |
}), p("BackIn", function(e) { | |
return e * e * ((this._p1 + 1) * e - this._p1) | |
}), p("BackInOut", function(e) { | |
return 1 > (e *= 2) ? .5 * e * e * ((this._p2 + 1) * e - this._p2) : .5 * ((e -= 2) * e * ((this._p2 + 1) * e + this._p2) + 2) | |
})), | |
v = a("easing.SlowMo", function(e, t, n) { | |
t = t || 0 === t ? t : .7, null == e ? e = .7 : e > 1 && (e = 1), this._p = 1 !== e ? t : 0, this._p1 = (1 - e) / 2, this._p2 = e, this._p3 = this._p1 + this._p2, this._calcEnd = n === !0 | |
}, !0), | |
m = v.prototype = new e; | |
return m.constructor = v, m.getRatio = function(e) { | |
var t = e + (.5 - e) * this._p; | |
return this._p1 > e ? this._calcEnd ? 1 - (e = 1 - e / this._p1) * e : t - (e = 1 - e / this._p1) * e * e * e * t : e > this._p3 ? this._calcEnd ? 1 - (e = (e - this._p3) / this._p1) * e : t + (e - t) * (e = (e - this._p3) / this._p1) * e * e * e : this._calcEnd ? 1 : t | |
}, v.ease = new v(.7, .7), m.config = v.config = function(e, t, n) { | |
return new v(e, t, n) | |
}, t = a("easing.SteppedEase", function(e) { | |
e = e || 1, this._p1 = 1 / e, this._p2 = e + 1 | |
}, !0), m = t.prototype = new e, m.constructor = t, m.getRatio = function(e) { | |
return 0 > e ? e = 0 : e >= 1 && (e = .999999999), (this._p2 * e >> 0) * this._p1 | |
}, m.config = t.config = function(e) { | |
return new t(e) | |
}, n = a("easing.RoughEase", function(t) { | |
t = t || {}; | |
for (var n, r, i, s, o, u, a = t.taper || "none", f = [], l = 0, c = 0 | (t.points || 20), p = c, d = t.randomize !== !1, v = t.clamp === !0, m = t.template instanceof e ? t.template : null, g = "number" == typeof t.strength ? .4 * t.strength : .4; --p > -1;) n = d ? Math.random() : 1 / c * p, r = m ? m.getRatio(n) : n, "none" === a ? i = g : "out" === a ? (s = 1 - n, i = s * s * g) : "in" === a ? i = n * n * g : .5 > n ? (s = 2 * n, i = .5 * s * s * g) : (s = 2 * (1 - n), i = .5 * s * s * g), d ? r += Math.random() * i - .5 * i : p % 2 ? r += .5 * i : r -= .5 * i, v && (r > 1 ? r = 1 : 0 > r && (r = 0)), f[l++] = { | |
x: n, | |
y: r | |
}; | |
for (f.sort(function(e, t) { | |
return e.x - t.x | |
}), u = new h(1, 1, null), p = c; --p > -1;) o = f[p], u = new h(o.x, o.y, u); | |
this._prev = new h(0, 0, 0 !== u.t ? u : u.next) | |
}, !0), m = n.prototype = new e, m.constructor = n, m.getRatio = function(e) { | |
var t = this._prev; | |
if (e > t.t) { | |
for (; t.next && e >= t.t;) t = t.next; | |
t = t.prev | |
} else | |
for (; t.prev && t.t >= e;) t = t.prev; | |
return this._prev = t, t.v + (e - t.t) / t.gap * t.c | |
}, m.config = function(e) { | |
return new n(e) | |
}, n.ease = new n, c("Bounce", f("BounceOut", function(e) { | |
return 1 / 2.75 > e ? 7.5625 * e * e : 2 / 2.75 > e ? 7.5625 * (e -= 1.5 / 2.75) * e + .75 : 2.5 / 2.75 > e ? 7.5625 * (e -= 2.25 / 2.75) * e + .9375 : 7.5625 * (e -= 2.625 / 2.75) * e + .984375 | |
}), f("BounceIn", function(e) { | |
return 1 / 2.75 > (e = 1 - e) ? 1 - 7.5625 * e * e : 2 / 2.75 > e ? 1 - (7.5625 * (e -= 1.5 / 2.75) * e + .75) : 2.5 / 2.75 > e ? 1 - (7.5625 * (e -= 2.25 / 2.75) * e + .9375) : 1 - (7.5625 * (e -= 2.625 / 2.75) * e + .984375) | |
}), f("BounceInOut", function(e) { | |
var t = .5 > e; | |
return e = t ? 1 - 2 * e : 2 * e - 1, e = 1 / 2.75 > e ? 7.5625 * e * e : 2 / 2.75 > e ? 7.5625 * (e -= 1.5 / 2.75) * e + .75 : 2.5 / 2.75 > e ? 7.5625 * (e -= 2.25 / 2.75) * e + .9375 : 7.5625 * (e -= 2.625 / 2.75) * e + .984375, t ? .5 * (1 - e) : .5 * e + .5 | |
})), c("Circ", f("CircOut", function(e) { | |
return Math.sqrt(1 - (e -= 1) * e) | |
}), f("CircIn", function(e) { | |
return -(Math.sqrt(1 - e * e) - 1) | |
}), f("CircInOut", function(e) { | |
return 1 > (e *= 2) ? -0.5 * (Math.sqrt(1 - e * e) - 1) : .5 * (Math.sqrt(1 - (e -= 2) * e) + 1) | |
})), r = function(t, n, r) { | |
var i = a("easing." + t, function(e, t) { | |
this._p1 = e || 1, this._p2 = t || r, this._p3 = this._p2 / o * (Math.asin(1 / this._p1) || 0) | |
}, !0), | |
s = i.prototype = new e; | |
return s.constructor = i, s.getRatio = n, s.config = function(e, t) { | |
return new i(e, t) | |
}, i | |
}, c("Elastic", r("ElasticOut", function(e) { | |
return this._p1 * Math.pow(2, -10 * e) * Math.sin((e - this._p3) * o / this._p2) + 1 | |
}, .3), r("ElasticIn", function(e) { | |
return -(this._p1 * Math.pow(2, 10 * (e -= 1)) * Math.sin((e - this._p3) * o / this._p2)) | |
}, .3), r("ElasticInOut", function(e) { | |
return 1 > (e *= 2) ? -0.5 * this._p1 * Math.pow(2, 10 * (e -= 1)) * Math.sin((e - this._p3) * o / this._p2) : .5 * this._p1 * Math.pow(2, -10 * (e -= 1)) * Math.sin((e - this._p3) * o / this._p2) + 1 | |
}, .45)), c("Expo", f("ExpoOut", function(e) { | |
return 1 - Math.pow(2, -10 * e) | |
}), f("ExpoIn", function(e) { | |
return Math.pow(2, 10 * (e - 1)) - .001 | |
}), f("ExpoInOut", function(e) { | |
return 1 > (e *= 2) ? .5 * Math.pow(2, 10 * (e - 1)) : .5 * (2 - Math.pow(2, -10 * (e - 1))) | |
})), c("Sine", f("SineOut", function(e) { | |
return Math.sin(e * u) | |
}), f("SineIn", function(e) { | |
return -Math.cos(e * u) + 1 | |
}), f("SineInOut", function(e) { | |
return -0.5 * (Math.cos(Math.PI * e) - 1) | |
})), a("easing.EaseLookup", { | |
find: function(t) { | |
return e.map[t] | |
} | |
}, !0), l(i.SlowMo, "SlowMo", "ease,"), l(n, "RoughEase", "ease,"), l(t, "SteppedEase", "ease,"), d | |
}, !0) | |
}), _gsScope._gsDefine && _gsScope._gsQueue.pop()(), | |
function(e, t) { | |
var n = e.GreenSockGlobals = e.GreenSockGlobals || e; | |
if (!n.TweenLite) { | |
var r, i, s, o, u, a = function(e) { | |
var t, r = e.split("."), | |
i = n; | |
for (t = 0; r.length > t; t++) i[r[t]] = i = i[r[t]] || {}; | |
return i | |
}, | |
f = a("com.greensock"), | |
l = 1e-10, | |
c = function(e) { | |
var t, n = [], | |
r = e.length; | |
for (t = 0; t !== r; n.push(e[t++])); | |
return n | |
}, | |
h = function() {}, | |
p = function() { | |
var e = Object.prototype.toString, | |
t = e.call([]); | |
return function(n) { | |
return null != n && (n instanceof Array || "object" == typeof n && !!n.push && e.call(n) === t) | |
} | |
}(), | |
d = {}, | |
v = function(r, i, s, o) { | |
this.sc = d[r] ? d[r].sc : [], d[r] = this, this.gsClass = null, this.func = s; | |
var u = []; | |
this.check = function(f) { | |
for (var l, c, h, p, m = i.length, g = m; --m > -1;)(l = d[i[m]] || new v(i[m], [])).gsClass ? (u[m] = l.gsClass, g--) : f && l.sc.push(this); | |
if (0 === g && s) | |
for (c = ("com.greensock." + r).split("."), h = c.pop(), p = a(c.join("."))[h] = this.gsClass = s.apply(s, u), o && (n[h] = p, "function" == typeof define && define.amd ? define((e.GreenSockAMDPath ? e.GreenSockAMDPath + "/" : "") + r.split(".").pop(), [], function() { | |
return p | |
}) : r === t && "undefined" != typeof module && module.exports && (module.exports = p)), m = 0; this.sc.length > m; m++) this.sc[m].check() | |
}, this.check(!0) | |
}, | |
m = e._gsDefine = function(e, t, n, r) { | |
return new v(e, t, n, r) | |
}, | |
g = f._class = function(e, t, n) { | |
return t = t || function() {}, m(e, [], function() { | |
return t | |
}, n), t | |
}; | |
m.globals = n; | |
var y = [0, 0, 1, 1], | |
b = [], | |
w = g("easing.Ease", function(e, t, n, r) { | |
this._func = e, this._type = n || 0, this._power = r || 0, this._params = t ? y.concat(t) : y | |
}, !0), | |
E = w.map = {}, | |
S = w.register = function(e, t, n, r) { | |
for (var i, s, o, u, a = t.split(","), l = a.length, c = (n || "easeIn,easeOut,easeInOut").split(","); --l > -1;) | |
for (s = a[l], i = r ? g("easing." + s, null, !0) : f.easing[s] || {}, o = c.length; --o > -1;) u = c[o], E[s + "." + u] = E[u + s] = i[u] = e.getRatio ? e : e[u] || new e | |
}; | |
for (s = w.prototype, s._calcEnd = !1, s.getRatio = function(e) { | |
if (this._func) return this._params[0] = e, this._func.apply(null, this._params); | |
var t = this._type, | |
n = this._power, | |
r = 1 === t ? 1 - e : 2 === t ? e : .5 > e ? 2 * e : 2 * (1 - e); | |
return 1 === n ? r *= r : 2 === n ? r *= r * r : 3 === n ? r *= r * r * r : 4 === n && (r *= r * r * r * r), 1 === t ? 1 - r : 2 === t ? r : .5 > e ? r / 2 : 1 - r / 2 | |
}, r = ["Linear", "Quad", "Cubic", "Quart", "Quint,Strong"], i = r.length; --i > -1;) s = r[i] + ",Power" + i, S(new w(null, null, 1, i), s, "easeOut", !0), S(new w(null, null, 2, i), s, "easeIn" + (0 === i ? ",easeNone" : "")), S(new w(null, null, 3, i), s, "easeInOut"); | |
E.linear = f.easing.Linear.easeIn, E.swing = f.easing.Quad.easeInOut; | |
var x = g("events.EventDispatcher", function(e) { | |
this._listeners = {}, this._eventTarget = e || this | |
}); | |
s = x.prototype, s.addEventListener = function(e, t, n, r, i) { | |
i = i || 0; | |
var s, a, f = this._listeners[e], | |
l = 0; | |
for (null == f && (this._listeners[e] = f = []), a = f.length; --a > -1;) s = f[a], s.c === t && s.s === n ? f.splice(a, 1) : 0 === l && i > s.pr && (l = a + 1); | |
f.splice(l, 0, { | |
c: t, | |
s: n, | |
up: r, | |
pr: i | |
}), this !== o || u || o.wake() | |
}, s.removeEventListener = function(e, t) { | |
var n, r = this._listeners[e]; | |
if (r) | |
for (n = r.length; --n > -1;) | |
if (r[n].c === t) return r.splice(n, 1), void 0 | |
}, s.dispatchEvent = function(e) { | |
var t, n, r, i = this._listeners[e]; | |
if (i) | |
for (t = i.length, n = this._eventTarget; --t > -1;) r = i[t], r && (r.up ? r.c.call(r.s || n, { | |
type: e, | |
target: n | |
}) : r.c.call(r.s || n)) | |
}; | |
var T = e.requestAnimationFrame, | |
N = e.cancelAnimationFrame, | |
C = Date.now || function() { | |
return (new Date).getTime() | |
}, | |
k = C(); | |
for (r = ["ms", "moz", "webkit", "o"], i = r.length; --i > -1 && !T;) T = e[r[i] + "RequestAnimationFrame"], N = e[r[i] + "CancelAnimationFrame"] || e[r[i] + "CancelRequestAnimationFrame"]; | |
g("Ticker", function(e, t) { | |
var n, r, i, s, a, f = this, | |
c = C(), | |
p = t !== !1 && T, | |
d = 500, | |
v = 33, | |
m = "tick", | |
g = function(e) { | |
var t, o, u = C() - k; | |
u > d && (c += u - v), k += u, f.time = (k - c) / 1e3, t = f.time - a, (!n || t > 0 || e === !0) && (f.frame++, a += t + (t >= s ? .004 : s - t), o = !0), e !== !0 && (i = r(g)), o && f.dispatchEvent(m) | |
}; | |
x.call(f), f.time = f.frame = 0, f.tick = function() { | |
g(!0) | |
}, f.lagSmoothing = function(e, t) { | |
d = e || 1 / l, v = Math.min(t, d, 0) | |
}, f.sleep = function() { | |
null != i && (p && N ? N(i) : clearTimeout(i), r = h, i = null, f === o && (u = !1)) | |
}, f.wake = function() { | |
null !== i ? f.sleep() : f.frame > 10 && (k = C() - d + 5), r = 0 === n ? h : p && T ? T : function(e) { | |
return setTimeout(e, 0 | 1e3 * (a - f.time) + 1) | |
}, f === o && (u = !0), g(2) | |
}, f.fps = function(e) { | |
return arguments.length ? (n = e, s = 1 / (n || 60), a = this.time + s, f.wake(), void 0) : n | |
}, f.useRAF = function(e) { | |
return arguments.length ? (f.sleep(), p = e, f.fps(n), void 0) : p | |
}, f.fps(e), setTimeout(function() { | |
p && (!i || 5 > f.frame) && f.useRAF(!1) | |
}, 1500) | |
}), s = f.Ticker.prototype = new f.events.EventDispatcher, s.constructor = f.Ticker; | |
var L = g("core.Animation", function(e, t) { | |
if (this.vars = t = t || {}, this._duration = this._totalDuration = e || 0, this._delay = Number(t.delay) || 0, this._timeScale = 1, this._active = t.immediateRender === !0, this.data = t.data, this._reversed = t.reversed === !0, z) { | |
u || o.wake(); | |
var n = this.vars.useFrames ? U : z; | |
n.add(this, n._time), this.vars.paused && this.paused(!0) | |
} | |
}); | |
o = L.ticker = new f.Ticker, s = L.prototype, s._dirty = s._gc = s._initted = s._paused = !1, s._totalTime = s._time = 0, s._rawPrevTime = -1, s._next = s._last = s._onUpdate = s._timeline = s.timeline = null, s._paused = !1; | |
var A = function() { | |
u && C() - k > 2e3 && o.wake(), setTimeout(A, 2e3) | |
}; | |
A(), s.play = function(e, t) { | |
return null != e && this.seek(e, t), this.reversed(!1).paused(!1) | |
}, s.pause = function(e, t) { | |
return null != e && this.seek(e, t), this.paused(!0) | |
}, s.resume = function(e, t) { | |
return null != e && this.seek(e, t), this.paused(!1) | |
}, s.seek = function(e, t) { | |
return this.totalTime(Number(e), t !== !1) | |
}, s.restart = function(e, t) { | |
return this.reversed(!1).paused(!1).totalTime(e ? -this._delay : 0, t !== !1, !0) | |
}, s.reverse = function(e, t) { | |
return null != e && this.seek(e || this.totalDuration(), t), this.reversed(!0).paused(!1) | |
}, s.render = function() {}, s.invalidate = function() { | |
return this._time = this._totalTime = 0, this._initted = this._gc = !1, this._rawPrevTime = -1, (this._gc || !this.timeline) && this._enabled(!0), this | |
}, s.isActive = function() { | |
var e, t = this._timeline, | |
n = this._startTime; | |
return !t || !this._gc && !this._paused && t.isActive() && (e = t.rawTime()) >= n && n + this.totalDuration() / this._timeScale > e | |
}, s._enabled = function(e, t) { | |
return u || o.wake(), this._gc = !e, this._active = this.isActive(), t !== !0 && (e && !this.timeline ? this._timeline.add(this, this._startTime - this._delay) : !e && this.timeline && this._timeline._remove(this, !0)), !1 | |
}, s._kill = function() { | |
return this._enabled(!1, !1) | |
}, s.kill = function(e, t) { | |
return this._kill(e, t), this | |
}, s._uncache = function(e) { | |
for (var t = e ? this : this.timeline; t;) t._dirty = !0, t = t.timeline; | |
return this | |
}, s._swapSelfInParams = function(e) { | |
for (var t = e.length, n = e.concat(); --t > -1;) "{self}" === e[t] && (n[t] = this); | |
return n | |
}, s.eventCallback = function(e, t, n, r) { | |
if ("on" === (e || "").substr(0, 2)) { | |
var i = this.vars; | |
if (1 === arguments.length) return i[e]; | |
null == t ? delete i[e] : (i[e] = t, i[e + "Params"] = p(n) && -1 !== n.join("").indexOf("{self}") ? this._swapSelfInParams(n) : n, i[e + "Scope"] = r), "onUpdate" === e && (this._onUpdate = t) | |
} | |
return this | |
}, s.delay = function(e) { | |
return arguments.length ? (this._timeline.smoothChildTiming && this.startTime(this._startTime + e - this._delay), this._delay = e, this) : this._delay | |
}, s.duration = function(e) { | |
return arguments.length ? (this._duration = this._totalDuration = e, this._uncache(!0), this._timeline.smoothChildTiming && this._time > 0 && this._time < this._duration && 0 !== e && this.totalTime(this._totalTime * (e / this._duration), !0), this) : (this._dirty = !1, this._duration) | |
}, s.totalDuration = function(e) { | |
return this._dirty = !1, arguments.length ? this.duration(e) : this._totalDuration | |
}, s.time = function(e, t) { | |
return arguments.length ? (this._dirty && this.totalDuration(), this.totalTime(e > this._duration ? this._duration : e, t)) : this._time | |
}, s.totalTime = function(e, t, n) { | |
if (u || o.wake(), !arguments.length) return this._totalTime; | |
if (this._timeline) { | |
if (0 > e && !n && (e += this.totalDuration()), this._timeline.smoothChildTiming) { | |
this._dirty && this.totalDuration(); | |
var r = this._totalDuration, | |
i = this._timeline; | |
if (e > r && !n && (e = r), this._startTime = (this._paused ? this._pauseTime : i._time) - (this._reversed ? r - e : e) / this._timeScale, i._dirty || this._uncache(!1), i._timeline) | |
for (; i._timeline;) i._timeline._time !== (i._startTime + i._totalTime) / i._timeScale && i.totalTime(i._totalTime, !0), i = i._timeline | |
} | |
this._gc && this._enabled(!0, !1), (this._totalTime !== e || 0 === this._duration) && (this.render(e, t, !1), P.length && W()) | |
} | |
return this | |
}, s.progress = s.totalProgress = function(e, t) { | |
return arguments.length ? this.totalTime(this.duration() * e, t) : this._time / this.duration() | |
}, s.startTime = function(e) { | |
return arguments.length ? (e !== this._startTime && (this._startTime = e, this.timeline && this.timeline._sortChildren && this.timeline.add(this, e - this._delay)), this) : this._startTime | |
}, s.endTime = function(e) { | |
return this._startTime + (0 != e ? this.totalDuration() : this.duration()) / this._timeScale | |
}, s.timeScale = function(e) { | |
if (!arguments.length) return this._timeScale; | |
if (e = e || l, this._timeline && this._timeline.smoothChildTiming) { | |
var t = this._pauseTime, | |
n = t || 0 === t ? t : this._timeline.totalTime(); | |
this._startTime = n - (n - this._startTime) * this._timeScale / e | |
} | |
return this._timeScale = e, this._uncache(!1) | |
}, s.reversed = function(e) { | |
return arguments.length ? (e != this._reversed && (this._reversed = e, this.totalTime(this._timeline && !this._timeline.smoothChildTiming ? this.totalDuration() - this._totalTime : this._totalTime, !0)), this) : this._reversed | |
}, s.paused = function(e) { | |
if (!arguments.length) return this._paused; | |
if (e != this._paused && this._timeline) { | |
u || e || o.wake(); | |
var t = this._timeline, | |
n = t.rawTime(), | |
r = n - this._pauseTime; | |
!e && t.smoothChildTiming && (this._startTime += r, this._uncache(!1)), this._pauseTime = e ? n : null, this._paused = e, this._active = this.isActive(), !e && 0 !== r && this._initted && this.duration() && this.render(t.smoothChildTiming ? this._totalTime : (n - this._startTime) / this._timeScale, !0, !0) | |
} | |
return this._gc && !e && this._enabled(!0, !1), this | |
}; | |
var O = g("core.SimpleTimeline", function(e) { | |
L.call(this, 0, e), this.autoRemoveChildren = this.smoothChildTiming = !0 | |
}); | |
s = O.prototype = new L, s.constructor = O, s.kill()._gc = !1, s._first = s._last = s._recent = null, s._sortChildren = !1, s.add = s.insert = function(e, t) { | |
var n, r; | |
if (e._startTime = Number(t || 0) + e._delay, e._paused && this !== e._timeline && (e._pauseTime = e._startTime + (this.rawTime() - e._startTime) / e._timeScale), e.timeline && e.timeline._remove(e, !0), e.timeline = e._timeline = this, e._gc && e._enabled(!0, !0), n = this._last, this._sortChildren) | |
for (r = e._startTime; n && n._startTime > r;) n = n._prev; | |
return n ? (e._next = n._next, n._next = e) : (e._next = this._first, this._first = e), e._next ? e._next._prev = e : this._last = e, e._prev = n, this._recent = e, this._timeline && this._uncache(!0), this | |
}, s._remove = function(e, t) { | |
return e.timeline === this && (t || e._enabled(!1, !0), e._prev ? e._prev._next = e._next : this._first === e && (this._first = e._next), e._next ? e._next._prev = e._prev : this._last === e && (this._last = e._prev), e._next = e._prev = e.timeline = null, e === this._recent && (this._recent = this._last), this._timeline && this._uncache(!0)), this | |
}, s.render = function(e, t, n) { | |
var r, i = this._first; | |
for (this._totalTime = this._time = this._rawPrevTime = e; i;) r = i._next, (i._active || e >= i._startTime && !i._paused) && (i._reversed ? i.render((i._dirty ? i.totalDuration() : i._totalDuration) - (e - i._startTime) * i._timeScale, t, n) : i.render((e - i._startTime) * i._timeScale, t, n)), i = r | |
}, s.rawTime = function() { | |
return u || o.wake(), this._totalTime | |
}; | |
var M = g("TweenLite", function(t, n, r) { | |
if (L.call(this, n, r), this.render = M.prototype.render, null == t) throw "Cannot tween a null target."; | |
this.target = t = "string" != typeof t ? t : M.selector(t) || t; | |
var i, s, o, u = t.jquery || t.length && t !== e && t[0] && (t[0] === e || t[0].nodeType && t[0].style && !t.nodeType), | |
a = this.vars.overwrite; | |
if (this._overwrite = a = null == a ? R[M.defaultOverwrite] : "number" == typeof a ? a >> 0 : R[a], (u || t instanceof Array || t.push && p(t)) && "number" != typeof t[0]) | |
for (this._targets = o = c(t), this._propLookup = [], this._siblings = [], i = 0; o.length > i; i++) s = o[i], s ? "string" != typeof s ? s.length && s !== e && s[0] && (s[0] === e || s[0].nodeType && s[0].style && !s.nodeType) ? (o.splice(i--, 1), this._targets = o = o.concat(c(s))) : (this._siblings[i] = X(s, this, !1), 1 === a && this._siblings[i].length > 1 && $(s, this, null, 1, this._siblings[i])) : (s = o[i--] = M.selector(s), "string" == typeof s && o.splice(i + 1, 1)) : o.splice(i--, 1); | |
else this._propLookup = {}, this._siblings = X(t, this, !1), 1 === a && this._siblings.length > 1 && $(t, this, null, 1, this._siblings); | |
(this.vars.immediateRender || 0 === n && 0 === this._delay && this.vars.immediateRender !== !1) && (this._time = -l, this.render(-this._delay)) | |
}, !0), | |
_ = function(t) { | |
return t && t.length && t !== e && t[0] && (t[0] === e || t[0].nodeType && t[0].style && !t.nodeType) | |
}, | |
D = function(e, t) { | |
var n, r = {}; | |
for (n in e) q[n] || n in t && "transform" !== n && "x" !== n && "y" !== n && "width" !== n && "height" !== n && "className" !== n && "border" !== n || !(!j[n] || j[n] && j[n]._autoCSS) || (r[n] = e[n], delete e[n]); | |
e.css = r | |
}; | |
s = M.prototype = new L, s.constructor = M, s.kill()._gc = !1, s.ratio = 0, s._firstPT = s._targets = s._overwrittenProps = s._startAt = null, s._notifyPluginsOfEnabled = s._lazy = !1, M.version = "1.15.1", M.defaultEase = s._ease = new w(null, null, 1, 1), M.defaultOverwrite = "auto", M.ticker = o, M.autoSleep = !0, M.lagSmoothing = function(e, t) { | |
o.lagSmoothing(e, t) | |
}, M.selector = e.$ || e.jQuery || function(t) { | |
var n = e.$ || e.jQuery; | |
return n ? (M.selector = n, n(t)) : "undefined" == typeof document ? t : document.querySelectorAll ? document.querySelectorAll(t) : document.getElementById("#" === t.charAt(0) ? t.substr(1) : t) | |
}; | |
var P = [], | |
H = {}, | |
B = M._internals = { | |
isArray: p, | |
isSelector: _, | |
lazyTweens: P | |
}, | |
j = M._plugins = {}, | |
F = B.tweenLookup = {}, | |
I = 0, | |
q = B.reservedProps = { | |
ease: 1, | |
delay: 1, | |
overwrite: 1, | |
onComplete: 1, | |
onCompleteParams: 1, | |
onCompleteScope: 1, | |
useFrames: 1, | |
runBackwards: 1, | |
startAt: 1, | |
onUpdate: 1, | |
onUpdateParams: 1, | |
onUpdateScope: 1, | |
onStart: 1, | |
onStartParams: 1, | |
onStartScope: 1, | |
onReverseComplete: 1, | |
onReverseCompleteParams: 1, | |
onReverseCompleteScope: 1, | |
onRepeat: 1, | |
onRepeatParams: 1, | |
onRepeatScope: 1, | |
easeParams: 1, | |
yoyo: 1, | |
immediateRender: 1, | |
repeat: 1, | |
repeatDelay: 1, | |
data: 1, | |
paused: 1, | |
reversed: 1, | |
autoCSS: 1, | |
lazy: 1, | |
onOverwrite: 1 | |
}, | |
R = { | |
none: 0, | |
all: 1, | |
auto: 2, | |
concurrent: 3, | |
allOnStart: 4, | |
preexisting: 5, | |
"true": 1, | |
"false": 0 | |
}, | |
U = L._rootFramesTimeline = new O, | |
z = L._rootTimeline = new O, | |
W = B.lazyRender = function() { | |
var e, t = P.length; | |
for (H = {}; --t > -1;) e = P[t], e && e._lazy !== !1 && (e.render(e._lazy[0], e._lazy[1], !0), e._lazy = !1); | |
P.length = 0 | |
}; | |
z._startTime = o.time, U._startTime = o.frame, z._active = U._active = !0, setTimeout(W, 1), L._updateRoot = M.render = function() { | |
var e, t, n; | |
if (P.length && W(), z.render((o.time - z._startTime) * z._timeScale, !1, !1), U.render((o.frame - U._startTime) * U._timeScale, !1, !1), P.length && W(), !(o.frame % 120)) { | |
for (n in F) { | |
for (t = F[n].tweens, e = t.length; --e > -1;) t[e]._gc && t.splice(e, 1); | |
0 === t.length && delete F[n] | |
} | |
if (n = z._first, (!n || n._paused) && M.autoSleep && !U._first && 1 === o._listeners.tick.length) { | |
for (; n && n._paused;) n = n._next; | |
n || o.sleep() | |
} | |
} | |
}, o.addEventListener("tick", L._updateRoot); | |
var X = function(e, t, n) { | |
var r, i, s = e._gsTweenID; | |
if (F[s || (e._gsTweenID = s = "t" + I++)] || (F[s] = { | |
target: e, | |
tweens: [] | |
}), t && (r = F[s].tweens, r[i = r.length] = t, n)) | |
for (; --i > -1;) r[i] === t && r.splice(i, 1); | |
return F[s].tweens | |
}, | |
V = function(e, t, n, r) { | |
var i, s, o = e.vars.onOverwrite; | |
return o && (i = o(e, t, n, r)), o = M.onOverwrite, o && (s = o(e, t, n, r)), i !== !1 && s !== !1 | |
}, | |
$ = function(e, t, n, r, i) { | |
var s, o, u, a; | |
if (1 === r || r >= 4) { | |
for (a = i.length, s = 0; a > s; s++) | |
if ((u = i[s]) !== t) u._gc || V(u, t) && u._enabled(!1, !1) && (o = !0); | |
else if (5 === r) break; | |
return o | |
} | |
var f, c = t._startTime + l, | |
h = [], | |
p = 0, | |
d = 0 === t._duration; | |
for (s = i.length; --s > -1;)(u = i[s]) === t || u._gc || u._paused || (u._timeline !== t._timeline ? (f = f || J(t, 0, d), 0 === J(u, f, d) && (h[p++] = u)) : c >= u._startTime && u._startTime + u.totalDuration() / u._timeScale > c && ((d || !u._initted) && 2e-10 >= c - u._startTime || (h[p++] = u))); | |
for (s = p; --s > -1;) | |
if (u = h[s], 2 === r && u._kill(n, e, t) && (o = !0), 2 !== r || !u._firstPT && u._initted) { | |
if (2 !== r && !V(u, t)) continue; | |
u._enabled(!1, !1) && (o = !0) | |
} | |
return o | |
}, | |
J = function(e, t, n) { | |
for (var r = e._timeline, i = r._timeScale, s = e._startTime; r._timeline;) { | |
if (s += r._startTime, i *= r._timeScale, r._paused) return -100; | |
r = r._timeline | |
} | |
return s /= i, s > t ? s - t : n && s === t || !e._initted && 2 * l > s - t ? l : (s += e.totalDuration() / e._timeScale / i) > t + l ? 0 : s - t - l | |
}; | |
s._init = function() { | |
var e, t, n, r, i, s = this.vars, | |
o = this._overwrittenProps, | |
u = this._duration, | |
a = !!s.immediateRender, | |
f = s.ease; | |
if (s.startAt) { | |
this._startAt && (this._startAt.render(-1, !0), this._startAt.kill()), i = {}; | |
for (r in s.startAt) i[r] = s.startAt[r]; | |
if (i.overwrite = !1, i.immediateRender = !0, i.lazy = a && s.lazy !== !1, i.startAt = i.delay = null, this._startAt = M.to(this.target, 0, i), a) | |
if (this._time > 0) this._startAt = null; | |
else if (0 !== u) return | |
} else if (s.runBackwards && 0 !== u) | |
if (this._startAt) this._startAt.render(-1, !0), this._startAt.kill(), this._startAt = null; | |
else { | |
0 !== this._time && (a = !1), n = {}; | |
for (r in s) q[r] && "autoCSS" !== r || (n[r] = s[r]); | |
if (n.overwrite = 0, n.data = "isFromStart", n.lazy = a && s.lazy !== !1, n.immediateRender = a, this._startAt = M.to(this.target, 0, n), a) { | |
if (0 === this._time) return | |
} else this._startAt._init(), this._startAt._enabled(!1), this.vars.immediateRender && (this._startAt = null) | |
} | |
if (this._ease = f = f ? f instanceof w ? f : "function" == typeof f ? new w(f, s.easeParams) : E[f] || M.defaultEase : M.defaultEase, s.easeParams instanceof Array && f.config && (this._ease = f.config.apply(f, s.easeParams)), this._easeType = this._ease._type, this._easePower = this._ease._power, this._firstPT = null, this._targets) | |
for (e = this._targets.length; --e > -1;) this._initProps(this._targets[e], this._propLookup[e] = {}, this._siblings[e], o ? o[e] : null) && (t = !0); | |
else t = this._initProps(this.target, this._propLookup, this._siblings, o); | |
if (t && M._onPluginEvent("_onInitAllProps", this), o && (this._firstPT || "function" != typeof this.target && this._enabled(!1, !1)), s.runBackwards) | |
for (n = this._firstPT; n;) n.s += n.c, n.c = -n.c, n = n._next; | |
this._onUpdate = s.onUpdate, this._initted = !0 | |
}, s._initProps = function(t, n, r, i) { | |
var s, o, u, a, f, l; | |
if (null == t) return !1; | |
H[t._gsTweenID] && W(), this.vars.css || t.style && t !== e && t.nodeType && j.css && this.vars.autoCSS !== !1 && D(this.vars, t); | |
for (s in this.vars) { | |
if (l = this.vars[s], q[s]) l && (l instanceof Array || l.push && p(l)) && -1 !== l.join("").indexOf("{self}") && (this.vars[s] = l = this._swapSelfInParams(l, this)); | |
else if (j[s] && (a = new j[s])._onInitTween(t, this.vars[s], this)) { | |
for (this._firstPT = f = { | |
_next: this._firstPT, | |
t: a, | |
p: "setRatio", | |
s: 0, | |
c: 1, | |
f: !0, | |
n: s, | |
pg: !0, | |
pr: a._priority | |
}, o = a._overwriteProps.length; --o > -1;) n[a._overwriteProps[o]] = this._firstPT; | |
(a._priority || a._onInitAllProps) && (u = !0), (a._onDisable || a._onEnable) && (this._notifyPluginsOfEnabled = !0) | |
} else this._firstPT = n[s] = f = { | |
_next: this._firstPT, | |
t: t, | |
p: s, | |
f: "function" == typeof t[s], | |
n: s, | |
pg: !1, | |
pr: 0 | |
}, f.s = f.f ? t[s.indexOf("set") || "function" != typeof t["get" + s.substr(3)] ? s : "get" + s.substr(3)]() : parseFloat(t[s]), f.c = "string" == typeof l && "=" === l.charAt(1) ? parseInt(l.charAt(0) + "1", 10) * Number(l.substr(2)) : Number(l) - f.s || 0; | |
f && f._next && (f._next._prev = f) | |
} | |
return i && this._kill(i, t) ? this._initProps(t, n, r, i) : this._overwrite > 1 && this._firstPT && r.length > 1 && $(t, this, n, this._overwrite, r) ? (this._kill(n, t), this._initProps(t, n, r, i)) : (this._firstPT && (this.vars.lazy !== !1 && this._duration || this.vars.lazy && !this._duration) && (H[t._gsTweenID] = !0), u) | |
}, s.render = function(e, t, n) { | |
var r, i, s, o, u = this._time, | |
a = this._duration, | |
f = this._rawPrevTime; | |
if (e >= a) this._totalTime = this._time = a, this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1, this._reversed || (r = !0, i = "onComplete"), 0 === a && (this._initted || !this.vars.lazy || n) && (this._startTime === this._timeline._duration && (e = 0), (0 === e || 0 > f || f === l && "isPause" !== this.data) && f !== e && (n = !0, f > l && (i = "onReverseComplete")), this._rawPrevTime = o = !t || e || f === e ? e : l); | |
else if (1e-7 > e) this._totalTime = this._time = 0, this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0, (0 !== u || 0 === a && f > 0 && f !== l) && (i = "onReverseComplete", r = this._reversed), 0 > e && (this._active = !1, 0 === a && (this._initted || !this.vars.lazy || n) && (f >= 0 && (f !== l || "isPause" !== this.data) && (n = !0), this._rawPrevTime = o = !t || e || f === e ? e : l)), this._initted || (n = !0); | |
else if (this._totalTime = this._time = e, this._easeType) { | |
var c = e / a, | |
h = this._easeType, | |
p = this._easePower; | |
(1 === h || 3 === h && c >= .5) && (c = 1 - c), 3 === h && (c *= 2), 1 === p ? c *= c : 2 === p ? c *= c * c : 3 === p ? c *= c * c * c : 4 === p && (c *= c * c * c * c), this.ratio = 1 === h ? 1 - c : 2 === h ? c : .5 > e / a ? c / 2 : 1 - c / 2 | |
} else this.ratio = this._ease.getRatio(e / a); | |
if (this._time !== u || n) { | |
if (!this._initted) { | |
if (this._init(), !this._initted || this._gc) return; | |
if (!n && this._firstPT && (this.vars.lazy !== !1 && this._duration || this.vars.lazy && !this._duration)) return this._time = this._totalTime = u, this._rawPrevTime = f, P.push(this), this._lazy = [e, t], void 0; | |
this._time && !r ? this.ratio = this._ease.getRatio(this._time / a) : r && this._ease._calcEnd && (this.ratio = this._ease.getRatio(0 === this._time ? 0 : 1)) | |
} | |
for (this._lazy !== !1 && (this._lazy = !1), this._active || !this._paused && this._time !== u && e >= 0 && (this._active = !0), 0 === u && (this._startAt && (e >= 0 ? this._startAt.render(e, t, n) : i || (i = "_dummyGS")), this.vars.onStart && (0 !== this._time || 0 === a) && (t || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || b))), s = this._firstPT; s;) s.f ? s.t[s.p](s.c * this.ratio + s.s) : s.t[s.p] = s.c * this.ratio + s.s, s = s._next; | |
this._onUpdate && (0 > e && this._startAt && e !== -0.0001 && this._startAt.render(e, t, n), t || (this._time !== u || r) && this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || b)), i && (!this._gc || n) && (0 > e && this._startAt && !this._onUpdate && e !== -0.0001 && this._startAt.render(e, t, n), r && (this._timeline.autoRemoveChildren && this._enabled(!1, !1), this._active = !1), !t && this.vars[i] && this.vars[i].apply(this.vars[i + "Scope"] || this, this.vars[i + "Params"] || b), 0 === a && this._rawPrevTime === l && o !== l && (this._rawPrevTime = 0)) | |
} | |
}, s._kill = function(e, t, n) { | |
if ("all" === e && (e = null), null != e || null != t && t !== this.target) { | |
t = "string" != typeof t ? t || this._targets || this.target : M.selector(t) || t; | |
var r, i, s, o, u, a, f, l, c; | |
if ((p(t) || _(t)) && "number" != typeof t[0]) | |
for (r = t.length; --r > -1;) this._kill(e, t[r]) && (a = !0); | |
else { | |
if (this._targets) { | |
for (r = this._targets.length; --r > -1;) | |
if (t === this._targets[r]) { | |
u = this._propLookup[r] || {}, this._overwrittenProps = this._overwrittenProps || [], i = this._overwrittenProps[r] = e ? this._overwrittenProps[r] || {} : "all"; | |
break | |
} | |
} else { | |
if (t !== this.target) return !1; | |
u = this._propLookup, i = this._overwrittenProps = e ? this._overwrittenProps || {} : "all" | |
} | |
if (u) { | |
if (f = e || u, l = e !== i && "all" !== i && e !== u && ("object" != typeof e || !e._tempKill), n && (M.onOverwrite || this.vars.onOverwrite)) { | |
for (s in f) u[s] && (c || (c = []), c.push(s)); | |
if (!V(this, n, t, c)) return !1 | |
} | |
for (s in f)(o = u[s]) && (o.pg && o.t._kill(f) && (a = !0), o.pg && 0 !== o.t._overwriteProps.length || (o._prev ? o._prev._next = o._next : o === this._firstPT && (this._firstPT = o._next), o._next && (o._next._prev = o._prev), o._next = o._prev = null), delete u[s]), l && (i[s] = 1); | |
!this._firstPT && this._initted && this._enabled(!1, !1) | |
} | |
} | |
return a | |
} | |
return this._lazy = !1, this._enabled(!1, !1) | |
}, s.invalidate = function() { | |
return this._notifyPluginsOfEnabled && M._onPluginEvent("_onDisable", this), this._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null, this._notifyPluginsOfEnabled = this._active = this._lazy = !1, this._propLookup = this._targets ? {} : [], L.prototype.invalidate.call(this), this.vars.immediateRender && (this._time = -l, this.render(-this._delay)), this | |
}, s._enabled = function(e, t) { | |
if (u || o.wake(), e && this._gc) { | |
var n, r = this._targets; | |
if (r) | |
for (n = r.length; --n > -1;) this._siblings[n] = X(r[n], this, !0); | |
else this._siblings = X(this.target, this, !0) | |
} | |
return L.prototype._enabled.call(this, e, t), this._notifyPluginsOfEnabled && this._firstPT ? M._onPluginEvent(e ? "_onEnable" : "_onDisable", this) : !1 | |
}, M.to = function(e, t, n) { | |
return new M(e, t, n) | |
}, M.from = function(e, t, n) { | |
return n.runBackwards = !0, n.immediateRender = 0 != n.immediateRender, new M(e, t, n) | |
}, M.fromTo = function(e, t, n, r) { | |
return r.startAt = n, r.immediateRender = 0 != r.immediateRender && 0 != n.immediateRender, new M(e, t, r) | |
}, M.delayedCall = function(e, t, n, r, i) { | |
return new M(t, 0, { | |
delay: e, | |
onComplete: t, | |
onCompleteParams: n, | |
onCompleteScope: r, | |
onReverseComplete: t, | |
onReverseCompleteParams: n, | |
onReverseCompleteScope: r, | |
immediateRender: !1, | |
lazy: !1, | |
useFrames: i, | |
overwrite: 0 | |
}) | |
}, M.set = function(e, t) { | |
return new M(e, 0, t) | |
}, M.getTweensOf = function(e, t) { | |
if (null == e) return []; | |
e = "string" != typeof e ? e : M.selector(e) || e; | |
var n, r, i, s; | |
if ((p(e) || _(e)) && "number" != typeof e[0]) { | |
for (n = e.length, r = []; --n > -1;) r = r.concat(M.getTweensOf(e[n], t)); | |
for (n = r.length; --n > -1;) | |
for (s = r[n], i = n; --i > -1;) s === r[i] && r.splice(n, 1) | |
} else | |
for (r = X(e).concat(), n = r.length; --n > -1;)(r[n]._gc || t && !r[n].isActive()) && r.splice(n, 1); | |
return r | |
}, M.killTweensOf = M.killDelayedCallsTo = function(e, t, n) { | |
"object" == typeof t && (n = t, t = !1); | |
for (var r = M.getTweensOf(e, t), i = r.length; --i > -1;) r[i]._kill(n, e) | |
}; | |
var K = g("plugins.TweenPlugin", function(e, t) { | |
this._overwriteProps = (e || "").split(","), this._propName = this._overwriteProps[0], this._priority = t || 0, this._super = K.prototype | |
}, !0); | |
if (s = K.prototype, K.version = "1.10.1", K.API = 2, s._firstPT = null, s._addTween = function(e, t, n, r, i, s) { | |
var o, u; | |
return null != r && (o = "number" == typeof r || "=" !== r.charAt(1) ? Number(r) - n : parseInt(r.charAt(0) + "1", 10) * Number(r.substr(2))) ? (this._firstPT = u = { | |
_next: this._firstPT, | |
t: e, | |
p: t, | |
s: n, | |
c: o, | |
f: "function" == typeof e[t], | |
n: i || t, | |
r: s | |
}, u._next && (u._next._prev = u), u) : void 0 | |
}, s.setRatio = function(e) { | |
for (var t, n = this._firstPT, r = 1e-6; n;) t = n.c * e + n.s, n.r ? t = Math.round(t) : r > t && t > -r && (t = 0), n.f ? n.t[n.p](t) : n.t[n.p] = t, n = n._next | |
}, s._kill = function(e) { | |
var t, n = this._overwriteProps, | |
r = this._firstPT; | |
if (null != e[this._propName]) this._overwriteProps = []; | |
else | |
for (t = n.length; --t > -1;) null != e[n[t]] && n.splice(t, 1); | |
for (; r;) null != e[r.n] && (r._next && (r._next._prev = r._prev), r._prev ? (r._prev._next = r._next, r._prev = null) : this._firstPT === r && (this._firstPT = r._next)), r = r._next; | |
return !1 | |
}, s._roundProps = function(e, t) { | |
for (var n = this._firstPT; n;)(e[this._propName] || null != n.n && e[n.n.split(this._propName + "_").join("")]) && (n.r = t), n = n._next | |
}, M._onPluginEvent = function(e, t) { | |
var n, r, i, s, o, u = t._firstPT; | |
if ("_onInitAllProps" === e) { | |
for (; u;) { | |
for (o = u._next, r = i; r && r.pr > u.pr;) r = r._next; | |
(u._prev = r ? r._prev : s) ? u._prev._next = u: i = u, (u._next = r) ? r._prev = u : s = u, u = o | |
} | |
u = t._firstPT = i | |
} | |
for (; u;) u.pg && "function" == typeof u.t[e] && u.t[e]() && (n = !0), u = u._next; | |
return n | |
}, K.activate = function(e) { | |
for (var t = e.length; --t > -1;) e[t].API === K.API && (j[(new e[t])._propName] = e[t]); | |
return !0 | |
}, m.plugin = function(e) { | |
if (!(e && e.propName && e.init && e.API)) throw "illegal plugin definition."; | |
var t, n = e.propName, | |
r = e.priority || 0, | |
i = e.overwriteProps, | |
s = { | |
init: "_onInitTween", | |
set: "setRatio", | |
kill: "_kill", | |
round: "_roundProps", | |
initAll: "_onInitAllProps" | |
}, | |
o = g("plugins." + n.charAt(0).toUpperCase() + n.substr(1) + "Plugin", function() { | |
K.call(this, n, r), this._overwriteProps = i || [] | |
}, e.global === !0), | |
u = o.prototype = new K(n); | |
u.constructor = o, o.API = e.API; | |
for (t in s) "function" == typeof e[t] && (u[s[t]] = e[t]); | |
return o.version = e.version, K.activate([o]), o | |
}, r = e._gsQueue) { | |
for (i = 0; r.length > i; i++) r[i](); | |
for (s in d) d[s].func || e.console.log("GSAP encountered missing dependency: com.greensock." + s) | |
} | |
u = !1 | |
} | |
}("undefined" != typeof module && module.exports && "undefined" != typeof global ? global : this || window, "TweenMax"), define("greensock/TweenMax.min", function() {}), | |
function(e, t) { | |
e.utils = e.utils || {}, typeof define == "function" && define.amd ? define("FLOCK/utils/Preloader", ["jquery", "greensock/TweenLite.min", "FLOCK/utils/SectionLoader"], function(n) { | |
return e.utils.Preloader = t(n) | |
}) : e.utils.Preloader = t($) | |
}(window.FLOCK = window.FLOCK || {}, function(e) { | |
function a(e) { | |
r[e] ? n = e : console.log("preloader.js : switchLoader : no loader found with ID: " + e) | |
} | |
function f(e, t) { | |
r[e.id] = e, n || (n = e.id), t && t() | |
} | |
function l() { | |
console.log("preloader bringIn"); | |
if (!n) return; | |
this.finished = !1, i = 0, n && r[n].bringIn !== undefined ? r[n].bringIn(c.bind(this)) : n && r[n].elem !== undefined ? (TweenLite.to(r[n].elem, .5, { | |
autoAlpha: 1, | |
onComplete: c.bind(this) | |
}), p.apply(this)) : c() | |
} | |
function c() { | |
console.log("preloader isIn"), h.apply(this) | |
} | |
function h(e) { | |
s = p.bind(this), TweenLite.ticker.addEventListener("tick", s) | |
} | |
function p(e) { | |
var o = t.getPerc(); | |
o || (o = 1), o = i + Math.ceil(10 * (o - i) / .2) / 1e3, i = Math.max(i, o); | |
if (n && r[n].onProgress !== undefined) { | |
var u = r[n].onProgress(i); | |
i >= 1 && this.finished && u === !0 && (TweenLite.ticker.removeEventListener("tick", s), d()) | |
} else { | |
n && r[n].updateBar !== undefined ? r[n].updateBar(i) : n && r[n].progressBar !== undefined && (r[n].progressBar.style.width = i * 100 + "%"); | |
if (n && r[n].updateLabel !== undefined) r[n].updateText(i); | |
else if (n && r[n].loaderText !== undefined) { | |
var a = ""; | |
n && r[n].loaderText_before !== undefined && (a += r[n].loaderText_before), a += Math.round(i * 100), n && r[n].loaderText_after !== undefined && (a += r[n].loaderText_after), r[n].loaderText.innerHTML = a | |
} | |
i >= 1 && this.finished && (TweenLite.ticker.removeEventListener("tick", s), d()) | |
} | |
} | |
function d() { | |
console.log("preloader goOut"), n && r[n].goOut !== undefined ? r[n].goOut(v.bind(this)) : n && r[n].elem !== undefined ? TweenLite.to(r[n].elem, .5, { | |
autoAlpha: 0, | |
onComplete: v.bind(this) | |
}) : v() | |
} | |
function v(e) { | |
console.log("Preloader isOut"), o && o() | |
} | |
function m(e) { | |
o = e || !1, n || v(), this.finished = !0 | |
} | |
var t = FLOCK.utils.SectionLoader, | |
n = !1, | |
r = {}, | |
i = 0, | |
s, o = !1, | |
u = function() { | |
FLOCK.settings.instaLoad || t.addLoaderUI(this), this.finished = !0 | |
}; | |
return u.prototype.switchLoader = a, u.prototype.addLoader = f, u.prototype.bringIn = l, u.prototype.complete = m, new u | |
}), define("FLOCK/utils/PageVisibility", ["jquery"], function() { | |
(function() { | |
function t(t) { | |
var n = "visible", | |
r = "hidden", | |
i = { | |
focus: n, | |
focusin: n, | |
pageshow: n, | |
blur: r, | |
focusout: r, | |
pagehide: r | |
}, | |
s; | |
t = t || window.event, t.type in i ? s = i[t.type] : s = this[e] ? "hidden" : "visible", $(window).trigger("onPageVisibilityChange", s) | |
} | |
var e = "hidden"; | |
e in document ? document.addEventListener("visibilitychange", t) : (e = "mozHidden") in document ? document.addEventListener("mozvisibilitychange", t) : (e = "webkitHidden") in document ? document.addEventListener("webkitvisibilitychange", t) : (e = "msHidden") in document ? document.addEventListener("msvisibilitychange", t) : "onfocusin" in document ? document.onfocusin = document.onfocusout = t : window.onpageshow = window.onpagehide = window.onfocus = window.onblur = t, document[e] !== undefined && t({ | |
type: document[e] ? "blur" : "focus" | |
}) | |
})() | |
}), | |
function(e, t) { | |
if (typeof exports == "object" && exports) t(exports); | |
else { | |
var n = {}; | |
t(n), typeof define == "function" && define.amd ? define("mustache", n) : e.Mustache = n | |
} | |
}(this, function(e) { | |
function n(e, n) { | |
return t.call(e, n) | |
} | |
function i(e) { | |
return !n(r, e) | |
} | |
function u(e) { | |
return typeof e == "function" | |
} | |
function a(e) { | |
return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&") | |
} | |
function l(e) { | |
return String(e).replace(/[&<>"'\/]/g, function(e) { | |
return f[e] | |
}) | |
} | |
function c(e) { | |
if (!o(e) || e.length !== 2) throw new Error("Invalid tags: " + e); | |
return [new RegExp(a(e[0]) + "\\s*"), new RegExp("\\s*" + a(e[1]))] | |
} | |
function g(t, n) { | |
function E() { | |
if (l && !g) | |
while (f.length) delete u[f.pop()]; | |
else f = []; | |
l = !1, g = !1 | |
} | |
n = n || e.tags, t = t || "", typeof n == "string" && (n = n.split(p)); | |
var r = c(n), | |
s = new w(t), | |
o = [], | |
u = [], | |
f = [], | |
l = !1, | |
g = !1, | |
S, x, T, N, C, k; | |
while (!s.eos()) { | |
S = s.pos, T = s.scanUntil(r[0]); | |
if (T) | |
for (var L = 0, A = T.length; L < A; ++L) N = T.charAt(L), i(N) ? f.push(u.length) : g = !0, u.push(["text", N, S, S + 1]), S += 1, N === "\n" && E(); | |
if (!s.scan(r[0])) break; | |
l = !0, x = s.scan(m) || "name", s.scan(h), x === "=" ? (T = s.scanUntil(d), s.scan(d), s.scanUntil(r[1])) : x === "{" ? (T = s.scanUntil(new RegExp("\\s*" + a("}" + n[1]))), s.scan(v), s.scanUntil(r[1]), x = "&") : T = s.scanUntil(r[1]); | |
if (!s.scan(r[1])) throw new Error("Unclosed tag at " + s.pos); | |
C = [x, T, S, s.pos], u.push(C); | |
if (x === "#" || x === "^") o.push(C); | |
else if (x === "/") { | |
k = o.pop(); | |
if (!k) throw new Error('Unopened section "' + T + '" at ' + S); | |
if (k[1] !== T) throw new Error('Unclosed section "' + k[1] + '" at ' + S) | |
} else x === "name" || x === "{" || x === "&" ? g = !0 : x === "=" && (r = c(n = T.split(p))) | |
} | |
k = o.pop(); | |
if (k) throw new Error('Unclosed section "' + k[1] + '" at ' + s.pos); | |
return b(y(u)) | |
} | |
function y(e) { | |
var t = [], | |
n, r; | |
for (var i = 0, s = e.length; i < s; ++i) n = e[i], n && (n[0] === "text" && r && r[0] === "text" ? (r[1] += n[1], r[3] = n[3]) : (t.push(n), r = n)); | |
return t | |
} | |
function b(e) { | |
var t = [], | |
n = t, | |
r = [], | |
i, s; | |
for (var o = 0, u = e.length; o < u; ++o) { | |
i = e[o]; | |
switch (i[0]) { | |
case "#": | |
case "^": | |
n.push(i), r.push(i), n = i[4] = []; | |
break; | |
case "/": | |
s = r.pop(), s[5] = i[2], n = r.length > 0 ? r[r.length - 1][4] : t; | |
break; | |
default: | |
n.push(i) | |
} | |
} | |
return t | |
} | |
function w(e) { | |
this.string = e, this.tail = e, this.pos = 0 | |
} | |
function E(e, t) { | |
this.view = e == null ? {} : e, this.cache = { | |
".": this.view | |
}, this.parent = t | |
} | |
function S() { | |
this.cache = {} | |
} | |
var t = RegExp.prototype.test, | |
r = /\S/, | |
s = Object.prototype.toString, | |
o = Array.isArray || function(e) { | |
return s.call(e) === "[object Array]" | |
}, | |
f = { | |
"&": "&", | |
"<": "<", | |
">": ">", | |
'"': """, | |
"'": "'", | |
"/": "/" | |
}, | |
h = /\s*/, | |
p = /\s+/, | |
d = /\s*=/, | |
v = /\s*\}/, | |
m = /#|\^|\/|>|\{|&|=|!/; | |
w.prototype.eos = function() { | |
return this.tail === "" | |
}, w.prototype.scan = function(e) { | |
var t = this.tail.match(e); | |
if (t && t.index === 0) { | |
var n = t[0]; | |
return this.tail = this.tail.substring(n.length), this.pos += n.length, n | |
} | |
return "" | |
}, w.prototype.scanUntil = function(e) { | |
var t = this.tail.search(e), | |
n; | |
switch (t) { | |
case -1: | |
n = this.tail, this.tail = ""; | |
break; | |
case 0: | |
n = ""; | |
break; | |
default: | |
n = this.tail.substring(0, t), this.tail = this.tail.substring(t) | |
} | |
return this.pos += n.length, n | |
}, E.prototype.push = function(e) { | |
return new E(e, this) | |
}, E.prototype.lookup = function(e) { | |
var t; | |
if (e in this.cache) t = this.cache[e]; | |
else { | |
var n = this; | |
while (n) { | |
if (e.indexOf(".") > 0) { | |
t = n.view; | |
var r = e.split("."), | |
i = 0; | |
while (t != null && i < r.length) t = t[r[i++]] | |
} else t = n.view[e]; | |
if (t != null) break; | |
n = n.parent | |
} | |
this.cache[e] = t | |
} | |
return u(t) && (t = t.call(this.view)), t | |
}, S.prototype.clearCache = function() { | |
this.cache = {} | |
}, S.prototype.parse = function(e, t) { | |
var n = this.cache, | |
r = n[e]; | |
return r == null && (r = n[e] = g(e, t)), r | |
}, S.prototype.render = function(e, t, n) { | |
var r = this.parse(e), | |
i = t instanceof E ? t : new E(t); | |
return this.renderTokens(r, i, n, e) | |
}, S.prototype.renderTokens = function(t, n, r, i) { | |
function f(e) { | |
return a.render(e, n, r) | |
} | |
var s = "", | |
a = this, | |
l, c; | |
for (var h = 0, p = t.length; h < p; ++h) { | |
l = t[h]; | |
switch (l[0]) { | |
case "#": | |
c = n.lookup(l[1]); | |
if (!c) continue; | |
if (o(c)) | |
for (var d = 0, v = c.length; d < v; ++d) s += this.renderTokens(l[4], n.push(c[d]), r, i); | |
else if (typeof c == "object" || typeof c == "string") s += this.renderTokens(l[4], n.push(c), r, i); | |
else if (u(c)) { | |
if (typeof i != "string") throw new Error("Cannot use higher-order sections without the original template"); | |
c = c.call(n.view, i.slice(l[3], l[5]), f), c != null && (s += c) | |
} else s += this.renderTokens(l[4], n, r, i); | |
break; | |
case "^": | |
c = n.lookup(l[1]); | |
if (!c || o(c) && c.length === 0) s += this.renderTokens(l[4], n, r, i); | |
break; | |
case ">": | |
if (!r) continue; | |
c = u(r) ? r(l[1]) : r[l[1]], c != null && (s += this.renderTokens(this.parse(c), n, r, c)); | |
break; | |
case "&": | |
c = n.lookup(l[1]), c != null && (s += c); | |
break; | |
case "name": | |
c = n.lookup(l[1]), c != null && (s += e.escape(c)); | |
break; | |
case "text": | |
s += l[1] | |
} | |
} | |
return s | |
}, e.name = "mustache.js", e.version = "0.8.1", e.tags = ["{{", "}}"]; | |
var x = new S; | |
e.clearCache = function() { | |
return x.clearCache() | |
}, e.parse = function(e, t) { | |
return x.parse(e, t) | |
}, e.render = function(e, t, n) { | |
return x.render(e, t, n) | |
}, e.to_html = function(t, n, r, i) { | |
var s = e.render(t, n, r); | |
if (!u(i)) return s; | |
i(s) | |
}, e.escape = l, e.Scanner = w, e.Context = E, e.Writer = S | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/MenuPaginator", ["jquery", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function() { | |
return e.classes.MenuPaginator = t() | |
}) : e.classes.MenuPaginator = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
var e = function(e) { | |
var t = 0, | |
n = this; | |
this.elements = { | |
wrapper: e.wrapper, | |
masker: $(e.wrapper).find(".paginatorMasker"), | |
list: $(e.wrapper).find("ul"), | |
prev: $('<p class="prev"></p>').appendTo(e.wrapper), | |
next: $('<p class="next"></p>').appendTo(e.wrapper) | |
}, this.elements.list.children("li").each(function() { | |
this.style.display !== "none" && (t += $(this).outerWidth(!0) + 1) | |
}), this.listWidth = t, this.elements.list[0].style.width = t + "px", $(this.elements.wrapper).on("click", ".prev, .next", function(e) { | |
e.preventDefault(); | |
switch (this.className) { | |
case "prev on": | |
n.previous(); | |
break; | |
case "next on": | |
n.next(); | |
break; | |
default: | |
} | |
}), this.paginated = !1, this.currentPage = 1, this.numPages = 1, this.resize() | |
}; | |
return e.prototype = { | |
paginate: function() { | |
this.paginated === !1 && (this.currentPage = 1, this.elements.prev[0].className = "prev off", this.elements.next[0].className = "next on", this.paginated = !0) | |
}, | |
unpaginate: function() { | |
this.paginated === !0 && (this.currentPage = 1, this.elements.prev[0].className = "prev off", this.elements.next[0].className = "next off", this.elements.list[0].style.left = "0px", this.paginated = !1) | |
}, | |
next: function() { | |
var e, t; | |
if (this.currentPage + 1 <= this.numPages) { | |
this.currentPage += 1; | |
if (this.currentPage === this.numPages) this.elements.next[0].className = "next off", t = this.elements.masker.width() - this.listWidth + "px", TweenLite.to(this.elements.list, 1, { | |
left: t, | |
ease: Power4.easeInOut | |
}); | |
else { | |
e = -(this.elements.masker.width() - this.listWidth) - this.elements.masker.width() * (this.currentPage - 1); | |
if (e < 100) { | |
this.next(); | |
return | |
} | |
t = -(this.elements.masker.width() * (this.currentPage - 1)) + "px", TweenLite.to(this.elements.list, 1, { | |
left: t, | |
ease: Power4.easeInOut | |
}) | |
} | |
} | |
this.elements.prev[0].className = "prev on" | |
}, | |
previous: function() { | |
var e; | |
if (this.currentPage - 1 >= 1) { | |
this.currentPage -= 1; | |
if (this.currentPage === 1) this.elements.prev[0].className = "prev off", TweenLite.to(this.elements.list, 1, { | |
left: "0px", | |
ease: Power4.easeInOut | |
}); | |
else { | |
e = -parseInt(this.elements.list[0].style.left) - this.elements.masker.width() * (this.currentPage - 1); | |
if (e < 100) { | |
this.previous(); | |
return | |
} | |
newleft = -(this.elements.masker.width() * (this.currentPage - 1)) + "px", TweenLite.to(this.elements.list, 1, { | |
left: newleft, | |
ease: Power4.easeInOut | |
}) | |
} | |
} | |
this.elements.next[0].className = "next on" | |
}, | |
resize: function() { | |
var e = this.elements.masker.width(), | |
t = -parseInt(this.elements.list[0].style.left) + this.elements.masker.width(); | |
e < this.listWidth ? (this.numPages = Math.ceil(this.listWidth / e), isNaN(t) || (this.listWidth > t ? (this.currentPage = parseInt(this.elements.list[0].style.left) === 0 ? 1 : Math.ceil(-parseInt(this.elements.list[0].style.left) / this.elements.masker.width()) + 1, this.elements.next[0].className = "next on") : (this.elements.next[0].className = "next off", this.currentPage = this.numPages, this.elements.list[0].style.left = -(this.listWidth - this.elements.masker.width()) + "px")), this.paginate()) : this.unpaginate() | |
} | |
}, e | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/Menu", ["jquery", "mustache", "FLOCK/utils/DeviceDetect", "FLOCK/classes/MenuPaginator", "greensock/TweenLite.min", "greensock/TimelineLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function(n, r) { | |
return e.classes.Menu = t(n, r) | |
}) : e.classes.Menu = t($, Mustache) | |
}(window.FLOCK = window.FLOCK || {}, function(e, t) { | |
function s(t) { | |
this.verbose && console.log("Main Menu | " + this.menuID + " | init"), this.isHidden = !1, this.elements.listItems = this.elements.el.getElementsByTagName("li"), this.elements.selected = e('#menu a[data-section="' + t + '"]').addClass("selected"), this.selectMenuItem(this.elements.selected.data("section"), !1), this.hide(!0), this.resize() | |
} | |
function o() { | |
this.verbose && console.log("Main Menu | " + this.menuID + " | buildMenu"); | |
switch (this.menuStyle) { | |
case "vertical": | |
u.call(this, this.menuList); | |
break; | |
case "horizontal": | |
this.menuStyle = "horizontal", a.call(this, this.menuList); | |
break; | |
default: | |
u.call(this, this.menuList) | |
} | |
} | |
function u(n) { | |
for (var r = 0; r < n.length; r++) { | |
var i = n[r]; | |
if (String(i.visible).toLowerCase() == "false" || i.comingSoon == "true") continue; | |
var s = {}, | |
o = !1; | |
i.className = "mainMenuBtn", i.type === "external" ? i.target = "_blank" : i.type === "popup" && (o = !0, i.rel = i.link + "," + i.dimensions[0] + "," + i.dimensions[1]); | |
for (var u = 0; u < FLOCK.app.dataSrc.sections.main.html.length; u++) FLOCK.app.dataSrc.sections.main.html[u].ID === i.label && (i.label = FLOCK.app.dataSrc.sections.main.html[u].VAL); | |
var a = e(t.render(this.template, i)); | |
o && a.click(this.openPopUp); | |
var f = document.createElement("li"); | |
f.appendChild(a.get()[0]), this.elements.el.appendChild(f) | |
} | |
} | |
function a(t) { | |
this.elements.wrapper.className = "horizontal paginatorWrapper " + this.elements.wrapper.className, this.elements.el.className = "centeredMenu", this.elements.paginatorEl.className = "paginatorMasker"; | |
var n = !0; | |
for (var r = 0; r < t.length; r++) { | |
if (t[r].visible === !1) continue; | |
!n || (n = !1); | |
var i = document.createElement("li"), | |
s = document.createElement("a"); | |
s.innerHTML = t[r].label, s.setAttribute("data-type", t[r].type), t[r].type === "external" && s.setAttribute("target", "_blank"), s.setAttribute("data-section", t[r].link), s.setAttribute("href", t[r].link), s.style.fontSize = t[r]["font-size"], t[r].type === "external" ? s.target = "_blank" : t[r].type === "popup" && (s.rel = t[r].link + "," + t[r].dimensions[0] + "," + t[r].dimensions[1], e(s).click(this.openPopUp)), i.appendChild(s), this.elements.el.appendChild(i) | |
} | |
var o = this; | |
window.setTimeout(function() { | |
o.menuPaginator = new FLOCK.classes.MenuPaginator({ | |
wrapper: o.elements.wrapper | |
}) | |
}, 50) | |
} | |
function f(t, r) { | |
this.verbose && console.log("Main Menu | " + this.menuID + " | selectMenuItem: " + t); | |
var i = e(this.elements.el).find('a[data-section="' + t + '"]'); | |
if (i.length === 0) return; | |
this.elements.selected[0] && (this.elements.selected[0].className = ""), r = !0, n, this.elements.selectedID = t, this.elements.selected = i, this.elements.selected[0].className = "selected" | |
} | |
function l(e) { | |
this.verbose && console.log("Main Menu | " + this.menuID + " | hide"); | |
if (this.isHidden === !0) return; | |
var t = .5; | |
e && (t = 0), this.isHidden = !0; | |
switch (this.menuStyle) { | |
case "horizontal": | |
TweenLite.to(this.elements.wrapper, t, { | |
y: -this.elements.wrapper.offsetHeight + "px", | |
ease: Power4.easeInOut | |
}); | |
break; | |
case "vertical": | |
TweenLite.to(this.elements.wrapper, t, { | |
x: -this.elements.wrapper.offsetWidth + "px", | |
ease: Power4.easeInOut | |
}); | |
break; | |
default: | |
console.log("invalid menustyle") | |
} | |
} | |
function c(e) { | |
e.preventDefault(); | |
var t = String(e.target.rel).split(","); | |
return window.open(t[0], "_blank", "width=" + t[1] + ", height=" + t[2]), !1 | |
} | |
function h(e) { | |
this.verbose && console.log("Main Menu | " + this.menuID + " | show"); | |
if (this.isHidden === !1) return; | |
var t = .5; | |
e && (t = 0), this.isHidden = !1, document.getElementById("mainHeader").style.visibility = "visible"; | |
switch (this.menuStyle) { | |
case "horizontal": | |
TweenLite.to(this.elements.wrapper, t, { | |
y: "0px", | |
ease: Power4.easeInOut | |
}); | |
break; | |
case "vertical": | |
TweenLite.to(this.elements.wrapper, t, { | |
x: "0px", | |
ease: Power4.easeInOut | |
}); | |
break; | |
default: | |
console.log("invalid menustyle") | |
} | |
} | |
function p() { | |
this.menuPaginator && this.menuPaginator.resize(FLOCK.settings.window_dimensions.width, FLOCK.settings.window_dimensions.height); | |
if (this.elements === undefined) return | |
} | |
var n = FLOCK.utils.DeviceDetect.isMobile, | |
r, i = function(e) { | |
this.menuID = e.menuID || "", this.verbose = !1, r = this, this.template = e.template ? e.template : '<a rel="{{{rel}}}" class="{{{className}}}" data-type="{{{type}}}" data-section="{{{link}}}" href="{{{link}}}" target="{{{target}}}" style="position: {{{position}}}; font-size: {{{font-size}}};">{{{label}}}</a>', this.elements = { | |
el: document.getElementById(e.menuID), | |
wrapper: document.getElementById(e.wrapperID), | |
paginatorEl: document.getElementById(e.paginatorElID) | |
}, this.menuList = e.menuList, this.menuStyle = e.menuStyle, e.menuList && this.buildMenu() | |
}; | |
return i.prototype.init = s, i.prototype.openPopUp = c, i.prototype.hide = l, i.prototype.show = h, i.prototype.buildMenu = o, i.prototype.resize = p, i.prototype.selectMenuItem = f, i | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/EventHandlers", ["jquery", "FLOCK/utils/DeviceDetect", "FLOCK/classes/Menu", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function() { | |
return e.classes.EventHandlers = t() | |
}) : e.classes.EventHandlers = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
function t(e) { | |
FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].mousemoveHandler && FLOCK.sections[FLOCK.app.navigation.current_section].mousemoveHandler(e) | |
} | |
function n(e) { | |
FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].mousewheelHandler && FLOCK.sections[FLOCK.app.navigation.current_section].mousewheelHandler(e) | |
} | |
function r(e) { | |
FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].scrollHandler && FLOCK.sections[FLOCK.app.navigation.current_section].scrollHandler(e) | |
} | |
function i(e) { | |
FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].keyHandler && FLOCK.sections[FLOCK.app.navigation.current_section].keyHandler(e) | |
} | |
function s(e) { | |
FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].touchStartHandler && FLOCK.sections[FLOCK.app.navigation.current_section].touchStartHandler(e) | |
} | |
function o(e) { | |
FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].touchMoveHandler && FLOCK.sections[FLOCK.app.navigation.current_section].touchMoveHandler(e) | |
} | |
function u(e) { | |
FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].touchEndHandler && FLOCK.sections[FLOCK.app.navigation.current_section].touchEndHandler(e) | |
} | |
var e = function(e) {}; | |
return e.prototype.init = function(e) { | |
var a = $(window), | |
f = $(document); | |
f.on("keydown", i), a.on("scroll", r), window.addWheelListener(document, n), Modernizr.touch ? (f.on("touchstart", s), f.on("touchmove", o), f.on("touchend", u)) : a.on("mousemove", t) | |
}, new e | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/Navigation", ["jquery", "FLOCK/utils/SectionLoader", "FLOCK/utils/ArrayExecuter", "FLOCK/classes/Menu"], function() { | |
return e.classes.Navigation = t() | |
}) : e.classes.Navigation = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
function t(e) { | |
this.current_section = typeof e == "undefined" || e === "" ? "home" : e.split("/")[0] | |
} | |
function n(e, t, n) { | |
this.verbose && console.log("Navigation | changeSection: " + e + " | " + t); | |
if (!this.active) return; | |
if (this.current_section === e && !this.forceChange) { | |
t && FLOCK.sections[e].enterSubSection && FLOCK.sections[e].enterSubSection(t); | |
return | |
} | |
FLOCK.app.mainMenu && FLOCK.app.mainMenu.selectMenuItem(e), this.current_section != e && (this.previous_section = this.current_section), this.current_section = e, FLOCK.settings.deepLinking !== !1 && window.history && window.history.pushState && this.previous_section != "" && window.innerHeight != screen.height && history.pushState("data", "", this.current_section == "home" ? FLOCK.settings.base_path : FLOCK.settings.base_path + this.current_section + ".php"), this.load_queue(e), this.arrayExecuter.execute(this.assembleChangeFunction(n)), this.forceChange = !1 | |
} | |
function r(e) { | |
var t = [{ | |
fn: this.disable, | |
vars: [this.stepComplete] | |
}]; | |
for (var n = 0; n < this.changeOrder.length; n++) switch (this.changeOrder[n]) { | |
case "load": | |
t.push({ | |
fn: this.load, | |
vars: [this.stepComplete] | |
}); | |
break; | |
case "section_add_next": | |
t.push({ | |
fn: this.section_add, | |
vars: [this.current_section, this.stepComplete] | |
}); | |
break; | |
case "section_init_next": | |
t.push({ | |
fn: this.section_init, | |
vars: [this.current_section, this.stepComplete] | |
}); | |
break; | |
case "section_startup_next": | |
t.push({ | |
fn: this.section_startup, | |
vars: [this.current_section, this.stepComplete] | |
}); | |
break; | |
case "section_show_next": | |
t.push({ | |
fn: this.section_show, | |
vars: [this.current_section, this.stepComplete] | |
}); | |
break; | |
case "section_hide_prev": | |
t.push({ | |
fn: this.section_hide, | |
vars: [this.previous_section, this.stepComplete] | |
}); | |
break; | |
case "section_shutdown_prev": | |
t.push({ | |
fn: this.section_shutdown, | |
vars: [this.previous_section, this.stepComplete] | |
}); | |
break; | |
case "section_remove_prev": | |
t.push({ | |
fn: this.section_remove, | |
vars: [this.previous_section, this.stepComplete] | |
}); | |
break; | |
default: | |
typeof this.changeOrder[n] == "function" ? t.push({ | |
fn: this.changeOrder[n], | |
vars: [this.current_section, this.previous_section, this.stepComplete] | |
}) : console.log("assembleChangeFunction cannot add: " + this.changeOrder[n]) | |
} | |
return t.push({ | |
fn: this.enable, | |
vars: [this.stepComplete] | |
}), e && t.push({ | |
fn: e, | |
vars: null | |
}), t | |
} | |
function i(e) { | |
var t = Array.prototype.slice.call(arguments); | |
for (var n = 0; n < t.length; n++) this.verbose && console.log("Navigation | load_queue: " + t[n]), FLOCK.utils.SectionLoader.sectionExists(t[n]) && this.loadlist.push(t[n]), FLOCK.sections[t[n]] && this.section_prepareLoad(t[n]) | |
} | |
function s(e, t) { | |
this.verbose && console.log("Navigation | load"); | |
var n = Array.prototype.slice.call(arguments); | |
n.shift(), n.length && this.load_queue(n); | |
for (var r = 0; r < n.length; r++) FLOCK.sections[sectionID].prepare && FLOCK.sections[sectionID].prepare(); | |
this.loadlist.push(this.stepComplete); | |
var i = [{ | |
fn: FLOCK.utils.SectionLoader.loadSection, | |
scope: FLOCK.utils.SectionLoader, | |
vars: this.loadlist | |
}, { | |
fn: this.load_done, | |
vars: null | |
}, { | |
fn: e, | |
vars: null | |
}]; | |
this.arrayExecuter.execute(i) | |
} | |
function o() { | |
this.verbose && console.log("Navigation | load_done"), this.loadlist = [], this.stepComplete() | |
} | |
function u(e) { | |
this.verbose && console.log("Navigation | section_prepareLoad: " + e), FLOCK.sections[e].prepare && console.log("section " + e + " has prepare function"), FLOCK.sections[e].prepared || (FLOCK.sections[e].prepareLoad && FLOCK.sections[e].prepareLoad(), FLOCK.sections[e].prepared = !0) | |
} | |
function a(e, t) { | |
this.verbose && console.log("Navigation | section_add: " + e); | |
var n = FLOCK.sections[e] && FLOCK.sections[e].shell ? FLOCK.sections[e].shell : "#" + this.shell; | |
FLOCK.sections[e] && !FLOCK.sections[e].added && (FLOCK.sections[e].added = !0, FLOCK.sections[e].htmlElem = $(FLOCK.utils.SectionLoader.returnSectionOBJ(e).htmlData), $(n).append(FLOCK.sections[e].htmlElem)), t() | |
} | |
function f(e, t) { | |
this.verbose && console.log("Navigation | section_init: " + e); | |
if (!FLOCK.sections[e].initialized) { | |
FLOCK.sections[e].initialized = !0; | |
if (FLOCK.sections[e].init) { | |
FLOCK.sections[e].init(t); | |
return | |
} | |
} | |
t() | |
} | |
function l(e, t) { | |
this.verbose && console.log("Navigation | section_startup: " + e); | |
if (FLOCK.sections[e]) | |
if (FLOCK.sections[e].startup) FLOCK.sections[e].startup(t); | |
else { | |
var n = document.getElementById(e); | |
n && (n.style.display = "block"), t() | |
} else t() | |
} | |
function c(e, t) { | |
this.verbose && console.log("Navigation | section_show: " + e), FLOCK.sections[e] && FLOCK.sections[e].show ? FLOCK.sections[e].show(t) : t() | |
} | |
function h(e, t) { | |
this.verbose && console.log("Navigation | section_hide " + e); | |
if (FLOCK.sections[e]) | |
if (FLOCK.sections[e].hide) FLOCK.sections[e].hide(t); | |
else { | |
var n = document.getElementById(e); | |
n && (n.style.display = "none"), t() | |
} else t() | |
} | |
function p(e, t) { | |
this.verbose && console.log("Navigation | section_shutdown: " + e), FLOCK.sections[e] && FLOCK.sections[e].shutdown ? FLOCK.sections[e].shutdown(t) : t() | |
} | |
function d(e, t) { | |
this.verbose && console.log("Navigation | section_remove " + e); | |
if (!FLOCK.sections[e]) { | |
t(); | |
return | |
} | |
var n = FLOCK.sections[e] && FLOCK.sections[e].shell ? FLOCK.sections[e].shell : "#" + this.shell; | |
FLOCK.sections[e].destroy && (FLOCK.sections[e].destroy(), FLOCK.sections[e].initialized = !1), FLOCK.sections[e].added && (FLOCK.sections[e].added = !1, $(FLOCK.sections[e].htmlElem).remove(), FLOCK.sections[e].htmlElem = null), t() | |
} | |
function v(e) { | |
this.verbose && console.log("/////// navigation_enable /////////"), this.active = !0, this.cover && (this.cover.style.display = "none"), e && e() | |
} | |
function m(e) { | |
this.verbose && console.log("/////// navigation_disable /////////"), this.active = !1, this.cover && (this.cover.style.display = "block"), e && e() | |
} | |
function g() { | |
this.verbose && console.log("navigation_freezeSite"), FLOCK.sections[sectionID].freeze && FLOCK.sections[sectionID].freeze() | |
} | |
function y() { | |
this.verbose && console.log("navigation_unFreezeSite"), FLOCK.sections[sectionID].unfreeze && FLOCK.sections[sectionID].unfreeze() | |
} | |
function b() { | |
this.verbose && console.log("navigation_unFreezeSiteDone") | |
} | |
var e = function(e) { | |
this.shell = e || "shell", this.verbose = !1, this.current_section = "", this.previous_section = "", this.forceChange = !1, this.loadlist = [], this.arrayExecuter = new FLOCK.utils.ArrayExecuter(this, "navigation"), this.stepComplete = this.arrayExecuter.stepComplete.bind(this.arrayExecuter), this.active = !0, this.changeOrder = ["load", "section_add_next", "section_init_next", "section_hide_prev", "section_shutdown_prev", "section_startup_next", "section_show_next"] | |
}; | |
return e.prototype.parseDeepLink = t, e.prototype.changeSection = n, e.prototype.assembleChangeFunction = r, e.prototype.load_queue = i, e.prototype.load = s, e.prototype.load_done = o, e.prototype.section_prepareLoad = u, e.prototype.section_add = a, e.prototype.section_init = f, e.prototype.section_startup = l, e.prototype.section_show = c, e.prototype.section_hide = h, e.prototype.section_shutdown = p, e.prototype.section_remove = d, e.prototype.enable = v, e.prototype.disable = m, e | |
}), | |
function(e, t) { | |
e.app = e.app || {}, typeof define == "function" && define.amd ? define("app/LandingLoader", ["greensock/TweenMax.min"], function() { | |
return e.app.LandingLoader = t() | |
}) : e.app.LandingLoader = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
function n() { | |
var e = document.createElement("div"); | |
return e.id = "default_loader", e | |
} | |
function r() { | |
var e = document.createElement("div"); | |
return e.id = "loader_bar", e | |
} | |
function i(e) { | |
return this.progressBar.style.width = e * 100 + "%", this.loaderText.style.left = e * 100 + "%", this.animComplete | |
} | |
function s(e) { | |
var t = this; | |
TweenLite.to(this.elem, .5, { | |
autoAlpha: 1 | |
}), $(".blurred").removeClass("blur-out"), document.getElementById("loaderLogo").style.visibility = "visible", TweenMax.to($("#loaderBg"), 1, { | |
autoAlpha: 1, | |
delay: .5, | |
onComplete: e | |
}), TweenMax.fromTo($("#i1"), 1, { | |
autoAlpha: 0 | |
}, { | |
autoAlpha: 1 | |
}), TweenMax.fromTo($("#i2"), 1, { | |
autoAlpha: 0 | |
}, { | |
autoAlpha: 1, | |
delay: .5 | |
}), TweenMax.fromTo($("#i3"), 1, { | |
autoAlpha: 0 | |
}, { | |
autoAlpha: 1, | |
delay: 1 | |
}), TweenMax.fromTo($("#i1"), 1, { | |
x: 100 | |
}, { | |
x: 0, | |
ease: Expo.easeOut, | |
delay: 1.5 | |
}), TweenMax.fromTo($("#i2"), 1, { | |
x: 33 | |
}, { | |
x: 0, | |
ease: Expo.easeOut, | |
delay: 1.5 | |
}), TweenMax.staggerFromTo($(".blurred"), .5, { | |
autoAlpha: 0 | |
}, { | |
autoAlpha: 1, | |
delay: 2, | |
onStart: function() { | |
$(".blurred").addClass("blur-out") | |
} | |
}, .1), TweenMax.fromTo($("#i4"), 2, { | |
x: -25, | |
autoAlpha: 0 | |
}, { | |
x: 0, | |
autoAlpha: 1, | |
ease: Expo.easeOut, | |
delay: 2.5, | |
onComplete: function() { | |
t.animComplete = !0 | |
} | |
}) | |
} | |
function o(e) { | |
TweenLite.to(this.elem, .5, { | |
autoAlpha: 0, | |
onComplete: function() { | |
u.apply(this), e() | |
} | |
}) | |
} | |
function u() { | |
console.log("RESET LOADER") | |
} | |
function a() {} | |
var e = "LandingLoader", | |
t = function() { | |
this.id = "LandingLoader", this.animComplete = !1, this.elem = document.getElementById("insidiousLoader"), this.progressBar = document.getElementById("loaderBar"), this.loaderText_before = "", this.loaderText_after = "%", this.loaderText = document.createElement("h2"), this.loaderText.id = "loaderText", this.elem.appendChild(this.loaderText), FLOCK.settings.instaLoad ? this.elem.style.display = "none" : this.elem.style.display = "block" | |
}; | |
return t.prototype.resize = a, t.prototype.onProgress = i, t.prototype.bringIn = s, t.prototype.goOut = o, t | |
}), | |
function(e, t) { | |
e.app = e.app || {}, typeof define == "function" && define.amd ? define("app/RoomLoader", [], function() { | |
return e.app.RoomLoader = t() | |
}) : e.app.RoomLoader = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
function n() { | |
var e = document.createElement("div"); | |
return e.id = "default_loader", e.style.position = "absolute", e.style.zIndex = 200, e.style.width = "100%", e.style.height = "4px", e | |
} | |
function r() { | |
var e = document.createElement("div"); | |
return e.id = "loader_bar", e.style.position = "absolute", e.style.top = "0px", e.style.left = "0px", e.style.height = "100%", e.style.width = "0%", e.style.background = "#FF0000", e | |
} | |
function i() {} | |
var e = "RoomLoader", | |
t = function() { | |
this.id = "RoomLoader", this.elem = n(), $("body").append($(this.elem)), this.progressBar = r(), this.elem.appendChild(this.progressBar), this.loaderText_before = "LOADING: ", this.loaderText_after = "% COMPLETE", this.loaderText = document.createElement("h2"), this.loaderText.id = "loaderText", this.elem.appendChild(this.loaderText), this.elem.style.display = "block", this.elem.style.visibility = "hidden" | |
}; | |
return t.prototype.resize = i, t | |
}), FLOCK = FLOCK || {}, FLOCK.utils = FLOCK.utils || {}, FLOCK.utils.inherit = function() { | |
var e = function() {}; | |
return function(t, n) { | |
e.prototype = n.prototype, t.prototype = new e, t.prototype._super = n, t.prototype.constructor = t | |
} | |
}(), define("FLOCK/utils/Inherit", function() {}), | |
function(e, t) { | |
e.app = e.app || {}, typeof define == "function" && define.amd ? define("app/Menu", ["FLOCK/classes/Menu", "FLOCK/utils/Inherit"], function() { | |
return e.app.Menu = t() | |
}) : e.app.Menu = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
var e, t = FLOCK.utils.DeviceDetect.isMobile, | |
n, r, i = function(t) { | |
console.log("main menu"), e = this, this.elements = { | |
el: document.getElementById(t.menuID), | |
wrapper: document.getElementById(t.wrapperID), | |
paginatorEl: document.getElementById(t.paginatorElID) | |
}, this.elements.listItems = this.elements.el.getElementsByTagName("li"), this.menuList = t.menuList, this.menuStyle = t.menuStyle, t.menuList && this.buildMenu() | |
}; | |
return FLOCK.utils.inherit(i, FLOCK.classes.Menu), i | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/Footer", ["jquery", "mustache", "FLOCK/utils/DeviceDetect", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function(n, r) { | |
return e.classes.Footer = t(n, r) | |
}) : e.classes.Footer = t($, Mustache) | |
}(window.FLOCK = window.FLOCK || {}, function(e, t) { | |
function u(n) { | |
s = FLOCK.app.dataSrc.sections.main.data; | |
var r = '{{#links}}{{#VISIBLE}}<li><a class="footer-btn" {{#font-size}}style="font-size:{{font-size}}"{{/font-size}} href="{{URL}}" target="_blank" >{{LABEL}}</a></li>{{/VISIBLE}}{{/links}}'; | |
t.parse(r), this.elements = { | |
el: n | |
}; | |
var i = s.footerLinks || [], | |
o, u; | |
for (var a = 0; a < i.length; a++) u = t.render(r, { | |
links: i[a].links | |
}), o = document.getElementById(i[a].id), o.innerHTML = u; | |
e("#credits-button").on("click", this.toggleCredits.bind(this)), document.getElementById("creditsbox-close") && e("#creditsbox-close").on("click", l), this.initFollow(s), this.initShare(s), this.init_extend && this.init_extend(s) | |
} | |
function a() { | |
var t = FLOCK.app.dataSrc.sections.main.data, | |
n = t.MPAA_requirements, | |
r = e("#MPAA_requirements"); | |
if (!n.VISIBLE || n.VISIBLE === "false") return; | |
FLOCK.settings.mpaaShown = !0, TweenLite.to(r, 1, { | |
css: { | |
bottom: 0 | |
}, | |
ease: Power4.easeInOut | |
}); | |
var i = this; | |
window.setTimeout(function() { | |
i.hideMPAARequirements() | |
}, 6e3) | |
} | |
function f() { | |
var t = e("#MPAA_requirements"); | |
TweenLite.to(t, 1, { | |
css: { | |
bottom: -200 | |
}, | |
ease: Power4.easeInOut | |
}) | |
} | |
function l(t) { | |
var n = document.getElementById("credits"), | |
r = document.getElementById("credits-button"), | |
i = e(n).outerHeight(); | |
r.className.match("active") !== null || t === "close" ? (r.className = r.className.replace("active", ""), TweenLite.to(n, .5, { | |
bottom: -i + "px", | |
ease: Power4.easeInOut, | |
onUpdate: function() { | |
r.style.top = Math.min(0, Math.abs(parseInt(n.style.bottom)) - (i - 30)) + "px" | |
}, | |
onComplete: function() { | |
r.style.zIndex = 1, n.style.zIndex = 0 | |
} | |
})) : (r.className = r.className + " active", r.style.zIndex = 10, n.style.zIndex = 9, TweenLite.to(n, .5, { | |
bottom: "0px", | |
ease: Power4.easeInOut, | |
onUpdate: function() { | |
r.style.top = Math.min(0, Math.abs(parseInt(n.style.bottom)) - (i - 30)) + "px" | |
} | |
}), document.getElementById("sharelabel").className.match("active") && this.toggleShare()); | |
if (t) return !1 | |
} | |
function c(e) { | |
var t = e.footerFollowUs; | |
if (t) { | |
var n = document.getElementById("follow"); | |
if (String(t["VISIBLE"]).toLowerCase() == "false") n.style.display = "none"; | |
else | |
for (var r = 0; r < t.links.length; r++) | |
if (String(t.links[r]["VISIBLE"]).toLowerCase() == "true") { | |
var i = document.createElement("a"); | |
i.className = "icon-" + t.links[r].CLASS + " social-icon", i.target = "_blank", i.href = t.links[r].URL, n.appendChild(i) | |
} | |
} | |
} | |
function h(t) { | |
var n = t.footerShare; | |
if (n) | |
if (String(n["VISIBLE"]).toLowerCase() == "false") e("#share").css("display", "none"); | |
else { | |
var r = [{ | |
JSON_ID: "getGlue", | |
HTML_ID: "getGlueBtn" | |
}, { | |
JSON_ID: "googlePlus", | |
HTML_ID: "gPlusBtn" | |
}, { | |
JSON_ID: "tweet", | |
HTML_ID: "tweetBtn" | |
}, { | |
JSON_ID: "facebook_like", | |
HTML_ID: "fbLikeBtn" | |
}, { | |
JSON_ID: "facebook_share", | |
HTML_ID: "share-facebook" | |
}]; | |
for (var s = 0; s < r.length; s++) { | |
var o = r[s], | |
u = n["show_buttons"][o["JSON_ID"]].toLowerCase() == "true" ? "inherit" : "none"; | |
e("#" + o.HTML_ID).css("display", u) | |
} | |
} | |
e("#share-facebook").on("click", function(t) { | |
window.open("http://www.facebook.com/share.php?u=" + encodeURIComponent(e(this).attr("href")), "_blank"), t.preventDefault() | |
}), e("#sharelabel").on("click", this.toggleShare.bind(this)), e("#shareShelf").css("top", FLOCK.settings.footer_height + "px"), e("#shareShelfContents").css("width", "auto"), i = e("#shareShelfContents").width() + 10, e("#shareShelfContents").css("width", i + "px") | |
} | |
function p(t) { | |
var n = e("#shareShelf"), | |
r = document.getElementById("sharelabel"), | |
i = e("#shareShelfContents"), | |
s = n.outerHeight(); | |
n[0].className.match("active") !== null || t === "close" ? (n[0].className = n[0].className.replace("active", ""), r.className = r.className.replace("active", ""), TweenLite.to(n, .5, { | |
top: FLOCK.settings.footer_height + "px", | |
ease: Power4.easeInOut | |
}), TweenLite.to(r, .5, { | |
top: "0px", | |
ease: Power4.easeInOut, | |
onComplete: function() { | |
n[0].style.zIndex = 0, r.style.zIndex = 1, document.getElementById("share").style.zIndex = 0 | |
} | |
})) : (n[0].className = n[0].className + " active", r.className = r.className + " active", n[0].style.zIndex = 10, r.style.zIndex = 11, document.getElementById("share").style.zIndex = 9, TweenLite.to(n, .5, { | |
top: -(s - FLOCK.settings.footer_height) + "px", | |
ease: Power4.easeInOut | |
}), TweenLite.to(r, .5, { | |
top: -(s - FLOCK.settings.footer_height) + "px", | |
ease: Power4.easeInOut | |
}), document.getElementById("credits-button").className.match("active") && this.toggleCredits()); | |
if (t) return !1 | |
} | |
function d(e) { | |
console.log("FOOTER | attachSocialScripts"), v(), m(), g(), e && e() | |
} | |
function v() { | |
var e = document.createElement("script"); | |
e.src = "//widgets.getglue.com/checkin.js"; | |
var t = document.getElementsByTagName("script")[0]; | |
t.parentNode.insertBefore(e, t) | |
} | |
function m() { | |
window.twttr = function(e, t, n) { | |
var r, i, s = e.getElementsByTagName(t)[0]; | |
if (e.getElementById(n)) return; | |
return i = e.createElement(t), i.id = n, i.src = "https://platform.twitter.com/widgets.js", s.parentNode.insertBefore(i, s), window.twttr || (r = { | |
_e: [], | |
ready: function(e) { | |
r._e.push(e) | |
} | |
}) | |
}(document, "script", "twitter-wjs"), twttr.ready(function(e) { | |
e.events.bind("click", function() { | |
videos_pause() | |
}) | |
}) | |
} | |
function g() { | |
var e, t = document.getElementById("gPlusBtn"); | |
if (t) { | |
e = document.createElement("g:plusone"), e.setAttribute("size", "medium"), e.setAttribute("annotation", "none"), e.setAttribute("href", FLOCK.settings.base_url), t.appendChild(e); | |
var n = document.createElement("script"); | |
n.type = "text/javascript", n.async = !0, n.src = "https://apis.google.com/js/plusone.js"; | |
var r = document.getElementsByTagName("script")[0]; | |
r.parentNode.insertBefore(n, r) | |
} | |
} | |
function y(e, t) { | |
console.log("resize footer") | |
} | |
function b() { | |
this.toggleShare("close"), this.toggleCredits("close") | |
} | |
function w() { | |
TweenLite.to(this.elements.el, .25, { | |
bottom: -FLOCK.settings.footer_height + "px", | |
ease: Power2.easeInOut, | |
onComplete: function() {} | |
}) | |
} | |
function E() { | |
TweenLite.to(this.elements.el, .25, { | |
bottom: "0px", | |
ease: Power2.easeInOut | |
}) | |
} | |
var n, r = FLOCK.utils.DeviceDetect.isMobile, | |
i, s, o = function(e) { | |
n = this | |
}; | |
return o.prototype.initFollow = c, o.prototype.initShare = h, o.prototype.toggleShare = p, o.prototype.toggleCredits = l, o.prototype.attachSocialScripts = d, o.prototype.closeMenus = b, o.prototype.init = u, o.prototype.hide = w, o.prototype.show = E, o.prototype.resize = y, o.prototype.showMPAARequirements = a, o.prototype.hideMPAARequirements = f, o | |
}), define("app/FacebookConnect", ["jquery", "FLOCK/utils/ArrayExecuter"], function(e) { | |
function t() { | |
this.initialized = !1, this.loggedIn = !1, this.ready = !1, this.arrayExecuter = new FLOCK.utils.ArrayExecuter | |
} | |
function o() { | |
this.initialized || (FB.init({ | |
appId: s, | |
photo_upload: !0, | |
cookie: !0, | |
xfbml: !0, | |
version: "v2.1" | |
}), this.initialized = !0) | |
} | |
function u(e) { | |
o.apply(this); | |
var t = this; | |
FB.login(function(n) { | |
n.status === "connected" ? t.loggedIn = !0 : n.status === "not_authorized", e && e(t.loggedIn) | |
}, { | |
scope: "public_profile,user_likes,user_relationships,user_photos", | |
auth_type: "rerequest" | |
}) | |
} | |
function a(t) { | |
if (this.share_img) return this.share_img; | |
var n = function() { | |
var e = this.share_canvas.getContext("2d"), | |
n = this.share_canvas.width - (this.share_tt.width + 84), | |
r = this.share_canvas.height - (this.share_tt.height + 84); | |
e.drawImage(this.share_tt, n, r), this.share_img = new Image, this.share_img.src = this.share_canvas.toDataURL(), t(this.share_img) | |
}, | |
r = new Image, | |
i = room.crack.canvas, | |
s = room.crack.drawArea; | |
s.w *= FLOCK.app.name.scale, s.h *= FLOCK.app.name.scale; | |
var o = new Image; | |
e(o).on("load", function() { | |
this.share_tt = o, this.share_canvas && n.apply(this) | |
}.bind(this)), o.src = FLOCK.app.dataSrc.sections.endscreen.data.share_tt_src, e(r).on("load", function() { | |
this.share_canvas = document.createElement("canvas"); | |
var e = this.share_canvas.getContext("2d"); | |
this.share_canvas.width = 2067, this.share_canvas.height = 1163, e.drawImage(r, 0, 0); | |
var t = 0, | |
o = .4552083333 * s.h, | |
u = s.w, | |
a = .5447916667 * s.h, | |
f = .2380261248 * this.share_canvas.width, | |
l = .2837489252 * this.share_canvas.height, | |
c = .4179970972 * this.share_canvas.width, | |
h = .4041272571 * this.share_canvas.height; | |
e.drawImage(i, t, o, u, a, f, l, c, h), this.share_tt && n.apply(this) | |
}.bind(this)), r.src = FLOCK.app.dataSrc.sections.endscreen.data.share_img | |
} | |
function f() { | |
if (this.blob) return this.blob; | |
var e, t, n; | |
return e = this.share_canvas.toDataURL("image/png"), t = c(e), t | |
} | |
function l() { | |
blob = this.getBlob(); | |
var t = new FormData, | |
n = FB.getAuthResponse().accessToken; | |
t.append("source", blob), t.append("access_token", n), e.ajax({ | |
url: "https://graph.facebook.com/me/photos?access_token=" + n, | |
type: "POST", | |
data: t, | |
processData: !1, | |
contentType: !1, | |
cache: !1, | |
success: function(e) { | |
console.log("success " + e) | |
}, | |
error: function(e, t, n) { | |
console.log("error " + n + " Status " + e.status) | |
}, | |
complete: function() { | |
console.log("Posted to facebook") | |
} | |
}) | |
} | |
function c(e) { | |
var t; | |
e.split(",")[0].indexOf("base64") >= 0 ? t = atob(e.split(",")[1]) : t = unescape(e.split(",")[1]); | |
var n = e.split(",")[0].split(":")[1].split(";")[0], | |
r = new Uint8Array(t.length); | |
for (var i = 0; i < t.length; i++) r[i] = t.charCodeAt(i); | |
return new Blob([r], { | |
type: n | |
}) | |
} | |
function h(e) { | |
if (this.ready) { | |
e && e(); | |
return | |
} | |
console.log("Welcome! Fetching your information.... "); | |
var t = [{ | |
fn: d, | |
scope: this, | |
vars: [this.arrayExecuter.stepComplete.bind(this.arrayExecuter)] | |
}, { | |
fn: m, | |
scope: this, | |
vars: [this.arrayExecuter.stepComplete.bind(this.arrayExecuter)] | |
}, { | |
fn: v, | |
scope: this, | |
vars: [this.arrayExecuter.stepComplete.bind(this.arrayExecuter)] | |
}, { | |
fn: g, | |
scope: this, | |
vars: [this.arrayExecuter.stepComplete.bind(this.arrayExecuter)] | |
}, { | |
fn: p, | |
scope: this, | |
vars: [e] | |
}]; | |
this.arrayExecuter.execute(t) | |
} | |
function p(e) { | |
this.ready = !0, e && e() | |
} | |
function d(e) { | |
if (this.profile) return this.profile; | |
var t = this; | |
FB.api("/me", function(n) { | |
t.profile = n, e && e() | |
}) | |
} | |
function v(e) { | |
var t = this; | |
this.famPics = [], this.bedsidePhoto = [], FB.api("/me/photos", function(n) { | |
var r = n.data, | |
i, s, o = t.profile.id, | |
u = !1, | |
a = !1, | |
f, l = [], | |
c = []; | |
if (r.length === 0) { | |
e && e(); | |
return | |
} | |
t.profile.significant_other ? s = t.profile.significant_other.id : s = t.familyIds; | |
for (var h = 0; h < r.length; h++) { | |
if (!r[h].tags) continue; | |
i = r[h].tags.data; | |
if (i.length <= 1 || i.length > 5) continue; | |
for (var p = 0; p < i.length; p++) i[p].id === o && (a = !0), typeof s == "string" ? i[p].id === s && (u = !0) : s.indexOf(i[p].id) > -1 && (u = !0), a && (u && i.length === 2 ? l.push(r[h]) : c.push(r[h]), a = !1, u = !1) | |
} | |
l.length > 0 && (l.sort(b), t.bedsidePhoto.push(E(300, 300, l.shift().images))), c = c.concat(l); | |
if (c.length > 0) { | |
c.sort(b); | |
for (var h = 0; h < c.length; h++) t.famPics.push(E(300, 300, c[h].images)) | |
} | |
e && e() | |
}) | |
} | |
function m(e) { | |
var t = this, | |
n = ["mother", "father", "sister", "brother", "son", "daughter", "wife", "husband"]; | |
t.familyIds = [], FB.api("/me/family", function(r) { | |
for (var i = 0; i < r.data.length; i++) n.indexOf(r.data[i].relationship) > -1 && t.familyIds.push(r.data[i].id); | |
e && e() | |
}) | |
} | |
function g(e) { | |
var t = this, | |
n = [], | |
r = 0; | |
t.bandPosters = [], FB.api("/me/music", function(i) { | |
r = i.data.length, postersLoaded = 0, r === 0 && e && e(); | |
for (var s = 0; s < r; s++) FB.api("/" + i.data[s].id, function(i) { | |
n.push(i); | |
if (n.length === r) { | |
n.sort(w); | |
for (var s = 0; s < n.length; s++) y(n[s].id, 300, 300, function(r) { | |
this.poster = r, postersLoaded++; | |
if (postersLoaded === n.length - 1) { | |
for (var i = 0; i < n.length; i++) n[i].poster && t.bandPosters.push(n[i].poster); | |
e && e() | |
} | |
}.bind(n[s]), i) | |
} | |
}) | |
}) | |
} | |
function y(e, t, n, r, i) { | |
var s; | |
FB.api(e + "/picture?width=" + t + "&type=normal", function(e) { | |
r && (e.data.is_silhouette ? r(!1) : r(e.data.url)) | |
}) | |
} | |
function b(e, t) { | |
return e.likes ? t.likes ? e.likes.data.length > t.likes.data.length ? -1 : e.likes.data.length < t.likes.data.length ? 1 : 0 : -1 : -1 | |
} | |
function w(e, t) { | |
return e.likes > t.likes ? -1 : e.likes < t.likes ? 1 : 0 | |
} | |
function E(e, t, n) { | |
var r = { | |
width: 0, | |
height: 0 | |
}; | |
for (var i = 0; i < n.length; i++) n[i].width < e && n[i].height < t && n[i].width * n[i].height > r.width * r.height && (r = n[i]); | |
return r.source | |
} | |
window.FLOCK = window.FLOCK || {}, FLOCK.utils = FLOCK.utils || {}; | |
var n = "833816713349434", | |
r = "874106459320459", | |
i = "878004795597292", | |
s; | |
window.location.href.match("legacy.theflock.com") ? s = n : window.location.href.match("localhost") ? s = i : s = n, t.prototype.login = u, t.prototype.connect = h, t.prototype.init = o, t.prototype.postCrack = l, t.prototype.getShareImg = a, t.prototype.getBlob = f, window.fbAsyncInit = function() {}, FLOCK.app.FacebookConnect = new t, | |
function(e, t, n) { | |
var r, i = e.getElementsByTagName(t)[0]; | |
if (e.getElementById(n)) return; | |
r = e.createElement(t), r.id = n, r.src = "//connect.facebook.net/en_US/sdk.js", i.parentNode.insertBefore(r, i) | |
}(document, "script", "facebook-jssdk") | |
}), | |
function(e, t) { | |
e.app = e.app || {}, typeof define == "function" && define.amd ? define("app/Footer", ["jquery", "mustache", "FLOCK/classes/Footer", "FLOCK/utils/Inherit", "app/FacebookConnect", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function(n, r) { | |
return e.app.Footer = t(n, r) | |
}) : e.app.Footer = t($, Mustache) | |
}(window.FLOCK = window.FLOCK || {}, function(e, t) { | |
function l(e) { | |
this.initLogos(e), FLOCK.app.FacebookConnect.init() | |
} | |
function c(e) { | |
var n = '{{#logos}}{{#VISIBLE}}<li>{{#URL}}<a href="{{URL}}" target="_blank" >{{/URL}}<img src="{{LOGO}}" alt="Logo" />{{#URL}}</a>{{/URL}}</li>{{/VISIBLE}}{{/logos}}'; | |
t.parse(n); | |
var r = e.footerLogos, | |
i; | |
if (r) { | |
var s = document.getElementById("footer"), | |
o; | |
String(r.VISIBLE).toLowerCase() !== "false" && (o = document.createElement("ul"), o.id = "footerLogos", i = t.render(n, { | |
logos: r.logos | |
}), o.innerHTML = i, s.appendChild(o)) | |
} | |
} | |
function h(e) { | |
var n = '{{#links}}{{#VISIBLE}}<a class="icon-{{CLASS}} social-icon" href="{{URL}}" target="_blank" ></a>{{/VISIBLE}}{{/links}}'; | |
t.parse(n); | |
var r = e.footerFollowUs; | |
if (r) { | |
var i = document.getElementById("follow_icons"); | |
if (String(r["VISIBLE"]).toLowerCase() == "false") document.getElementById("follow").style.display = "none"; | |
else | |
for (var s = 0; s < r.links.length; s++) String(r.links[s]["VISIBLE"]).toLowerCase() == "true" && (i.innerHTML = t.render(n, { | |
links: r.links | |
})) | |
} | |
} | |
function p(t) { | |
var n = t.footerShare; | |
if (n) | |
if (String(n["VISIBLE"]).toLowerCase() == "false") e("#share").css("display", "none"); | |
else { | |
var r = [{ | |
JSON_ID: "getGlue", | |
HTML_ID: "getGlueBtn" | |
}, { | |
JSON_ID: "googlePlus", | |
HTML_ID: "gPlusBtn" | |
}, { | |
JSON_ID: "tweet", | |
HTML_ID: "tweetBtn" | |
}, { | |
JSON_ID: "facebook_like", | |
HTML_ID: "fbLikeBtn" | |
}, { | |
JSON_ID: "facebook_share", | |
HTML_ID: "share-facebook" | |
}]; | |
for (var i = 0; i < r.length; i++) { | |
var s = r[i]; | |
n.show_buttons[s.JSON_ID].toLowerCase() === "false" && e("#" + s.HTML_ID).css("display", "none") | |
} | |
} | |
e("#sharelabel").on("click touchend", this.toggleShare.bind(this)), e("#sharelabel").on("mouseenter", function() { | |
room.cursor && room.cursor.over() | |
}), e("#sharelabel").on("mouseleave", function() { | |
room.cursor && room.cursor.out() | |
}), e("#share").on("mouseenter", function() { | |
u = !1 | |
}), e("#share").on("mouseleave", function() { | |
o = Date.now() + 500, u = !0, v() | |
}), e("#follow").on("mouseenter", function() { | |
a = !1 | |
}), e("#follow").on("mouseleave", function() { | |
o = Date.now() + 500, a = !0, y() | |
}), e("#follow_label").on("click touchend", this.toggleFollow.bind(this)), e("#follow_label").on("mouseenter", function() { | |
room.cursor && room.cursor.over() | |
}), e("#follow_label").on("mouseleave", function() { | |
room.cursor && room.cursor.out() | |
}); | |
if (FLOCK.utils.DeviceDetect.isIOS || FLOCK.utils.DeviceDetect.isAndroid) e("#follow_icons a").on("touchend", function() { | |
var t = e(this).attr("href"); | |
return t && window.open(t, "_blank"), !1 | |
}), e("#centerLinks a").on("touchend", function() { | |
var t = e(this).attr("href"); | |
return t && window.open(t, "_blank"), !1 | |
}) | |
} | |
function d() { | |
e("#share").addClass("open") | |
} | |
function v() { | |
if (!u) return; | |
if (o > Date.now()) { | |
window.requestAnimationFrame(v); | |
return | |
} | |
e("#share").removeClass("open") | |
} | |
function m(t) { | |
o = 0, e("#share").hasClass("open") ? (u = !0, v()) : (d(), y()), t && t.preventDefault() | |
} | |
function g() { | |
e("#follow").addClass("open") | |
} | |
function y() { | |
if (!a) return; | |
if (o > Date.now()) { | |
window.requestAnimationFrame(y); | |
return | |
} | |
e("#follow").removeClass("open") | |
} | |
function b(t) { | |
o = 0, e("#follow").hasClass("open") ? (a = !0, y()) : (g(), v()), t && t.preventDefault() | |
} | |
function w() { | |
TweenLite.set(this.elements.el, { | |
autoAlpha: 0, | |
bottom: "-20px" | |
}), TweenLite.to(this.elements.el, 1.25, { | |
autoAlpha: 1, | |
bottom: "0px", | |
ease: Power2.easeInOut | |
}) | |
} | |
var n, r = FLOCK.utils.DeviceDetect.isMobile, | |
i, s, o = 0, | |
u = !0, | |
a = !0, | |
f = function(e) { | |
n = this | |
}; | |
return FLOCK.utils.inherit(f, FLOCK.classes.Footer), f.prototype.show = w, f.prototype.initLogos = c, f.prototype.initShare = p, f.prototype.initFollow = h, f.prototype.toggleShare = m, f.prototype.toggleFollow = b, f.prototype.init_extend = l, new f | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/Shell", ["jquery", "FLOCK/utils/DeviceDetect", "FLOCK/classes/Menu", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function() { | |
return e.classes.Shell = t() | |
}) : e.classes.Shell = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
function t(e) { | |
console.log("Shell Init"); | |
var t = FLOCK.utils.SectionLoader.returnSectionOBJ("main"); | |
$("#shell").append($(t.htmlData)), window.requestAnimationFrame(function() { | |
this.ready(e) | |
}.bind(this)) | |
} | |
function n(e) { | |
console.log("Shell ready"), this.initialized = !0, FLOCK.app.Footer.init(document.getElementById("footer")), FLOCK.app.navigation.current_section !== "videos" && FLOCK.app.Footer.show(), this.setupMenu(), this.resize(), e() | |
} | |
function r() { | |
var e = { | |
menuID: "menu", | |
wrapperID: "mainHeader", | |
paginatorElID: "mainNav", | |
menuStyle: FLOCK.app.dataSrc.sections.main.data.menu.menuStyle, | |
menuList: FLOCK.app.dataSrc.sections.main.data.menu.links | |
}, | |
t = document.getElementById("menuTemplate"); | |
t && (e.template = t.innerHTML), FLOCK.app.mainMenu = new FLOCK.classes.Menu(e), FLOCK.app.mainMenu.init(FLOCK.app.navigation.current_section), $("#menu").on("click", "a", function(e) { | |
if (this.getAttribute("target") === "_blank") return; | |
var t = $(this).data("section"); | |
return this.getAttribute("data-type") === "overlay" ? FLOCK.functions.showOverlay(t) : FLOCK.app.navigation.changeSection(t), !1 | |
}) | |
} | |
function i() { | |
if (!this.initialized) return; | |
var e, t; | |
FLOCK.settings.window_dimensions = { | |
width: this.elements.window.width(), | |
height: this.elements.window.height() | |
}, e = Math.max(FLOCK.settings.min_width, FLOCK.settings.window_dimensions.width), t = Math.max(FLOCK.settings.min_height, FLOCK.settings.window_dimensions.height), this.elements.shell[0].style.width = e + "px", document.documentElement.className.match(/^(?=.*\bipad\b)(?=.*\bios7\b)/) || (this.elements.shell[0].style.height = t + "px"), FLOCK.app.mainMenu && FLOCK.app.mainMenu.elements && (FLOCK.settings.menu_width = FLOCK.app.mainMenu.elements.el.offsetWidth); | |
if (FLOCK.settings.isAndroid || FLOCK.settings.isMobile || FLOCK.settings.isIOS) { | |
var n = e > t ? !0 : !1, | |
r = document.getElementById("portraitTest"); | |
r && (n ? (r.style.display = "none", FLOCK.settings.isIpad && (t = FLOCK.settings.window_dimensions.height = 672)) : r.style.display = "block"), e != 1e3 && (t *= 1e3 / e, e = 1e3) | |
} | |
FLOCK.settings.sectionWidth = e, FLOCK.app.BGRenderer && FLOCK.app.BGRenderer.resize(), FLOCK.sections[FLOCK.app.navigation.current_section] && FLOCK.sections[FLOCK.app.navigation.current_section].initialized && FLOCK.sections[FLOCK.app.navigation.current_section].resize(e, t), FLOCK.app.mainMenu && (FLOCK.settings.menu_width = FLOCK.app.mainMenu.resize()), FLOCK.settings.window_dimensions.width < FLOCK.settings.min_width || FLOCK.settings.window_dimensions.height < FLOCK.settings.min_height ? this.elements.shell[0].style.position = "absolute" : this.elements.shell[0].style.position = "fixed" | |
} | |
var e = function(e) { | |
this.elements = { | |
shell: $("#shell"), | |
window: $(window) | |
} | |
}; | |
return e.prototype.init = t, e.prototype.ready = n, e.prototype.setupMenu = r, e.prototype.resize = i, e | |
}), | |
function(e, t) { | |
e.app = e.app || {}, typeof define == "function" && define.amd ? define("app/Shell", ["jquery", "FLOCK/classes/Shell", "FLOCK/utils/Inherit", "FLOCK/utils/DeviceDetect"], function(n) { | |
return e.app.Shell = t(n) | |
}) : e.app.Shell = t($) | |
}(window.FLOCK = window.FLOCK || {}, function(e) { | |
function n(e) { | |
console.log("Shell ready"), this.initialized = !0, FLOCK.app.Footer.init(document.getElementById("footer")), this.resize(), e() | |
} | |
var t = function(e) { | |
this._super() | |
}; | |
return FLOCK.utils.inherit(t, FLOCK.classes.Shell), t.prototype.ready = n, new t | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/BGRenderer", ["jquery", "FLOCK/utils/DeviceDetect", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function(n) { | |
return e.classes.BGRenderer = t(n) | |
}) : e.classes.BGRenderer = t($) | |
}(window.FLOCK = window.FLOCK || {}, function(e) { | |
function n() { | |
this.verbose && console.log("BGRenderer | init"), this.initialized = !0, this.container = document.getElementById(this.container), this.image1.outer = this.addStyles(document.createElement("div")), this.image1.inner = this.addStyles(document.createElement("div")), this.image1.outer.appendChild(this.image1.inner), this.container.appendChild(this.image1.outer), this.image2.outer = this.addStyles(document.createElement("div")), this.image2.inner = this.addStyles(document.createElement("div")), this.image2.outer.appendChild(this.image2.inner), this.container.appendChild(this.image2.outer), this.image1.outer.style.overflow = this.image2.outer.style.overflow = "hidden", FLOCK.app.Shell.resize() | |
} | |
function r(e) { | |
return e.style.position = "absolute", e.style.top = e.style.left = "0px", e.style.width = e.style.height = "100%", e | |
} | |
function i(e, t, n) { | |
this.initialized || this.init(); | |
var r, i; | |
this.nextContainer == 0 ? (r = this.image1, i = this.image2, this.image1.obj = e, e.place && (this.image1.image = this.image1.obj.place(this.image1.inner), this.currentBG = this.image1)) : (r = this.image2, i = this.image1, this.image2.obj = e, e.place && (this.image2.image = this.image2.obj.place(this.image2.inner), this.currentBG = this.image2)), this.resize(), this.transition(r, i, t, n) | |
} | |
function s(e, t, n, r) { | |
var i = this, | |
s = new TimelineLite({ | |
onComplete: function() { | |
i.changeComplete(r) | |
}.bind(this) | |
}); | |
s.pause(); | |
var o = n ? 0 : 8 / 3; | |
s.to(e.outer, 0, { | |
x: this.width + "px" | |
}), s.to(t.outer, o * 3.5 / 8, { | |
x: -this.width + "px", | |
ease: Expo.easeInOut | |
}, 0), s.to(e.outer, o * 3.5 / 8, { | |
x: "0px", | |
ease: Expo.easeInOut | |
}, 0), s.play() | |
} | |
function o(e) { | |
this.nextContainer == 0 ? (this.image2.inner.innerHTML = "", this.image2.image = null, this.image2.obj = null) : (this.image1.inner.innerHTML = "", this.image1.image = null, this.image1.obj = null), this.nextContainer = (this.nextContainer + 1) % 2, e && e() | |
} | |
function u() { | |
this.image1.inner.innerHTML = "", this.image1.image = null, this.image1.obj = null, this.image2.inner.innerHTML = "", this.image2.image = null, this.image2.obj = null | |
} | |
function a(e, t) { | |
if (!this.image1.inner) return; | |
e || (e = this.container.offsetWidth), t || (t = this.container.offsetHeight), this.width = e, this.height = t; | |
var n, r, i, s; | |
this.image1.obj && (this.image1.obj.dimensions ? (n = this.image1.obj.dimensions.width, r = this.image1.obj.dimensions.height) : (n = this.image1.image ? this.image1.image.offsetWidth : 0, r = this.image1.image ? this.image1.image.offsetHeight : 0)), this.image2.obj && (this.image2.obj.dimensions ? (i = this.image2.obj.dimensions.width, s = this.image2.obj.dimensions.height) : (i = this.image2.image ? this.image2.image.offsetWidth : 0, s = this.image2.image ? this.image2.image.offsetHeight : 0)); | |
var o = { | |
w: n, | |
h: r | |
}, | |
u = Math.max(e / o.w, t / o.h), | |
a = o.w * u, | |
f = o.h * u, | |
l = { | |
w: i, | |
h: s | |
}, | |
c = Math.max(e / l.w, t / l.h), | |
h = l.w * c, | |
p = l.h * c, | |
d = 0, | |
v = 0, | |
m = -d / 2, | |
g = e - a + d / 2 - m, | |
y = e - h + d / 2 - m, | |
b = -v / 2, | |
w = t - f + v / 2 - b, | |
E = t - p + v / 2 - b; | |
this.image1.image && (this.image1.image.style.top = (b + w * this.image1.obj.v).toFixed() + "px", this.image1.image.style.left = (m + g * this.image1.obj.h).toFixed() + "px", this.image1.image.style.width = a + "px", this.image1.image.style.height = f + "px"), this.image2.image && (this.image2.image.style.top = (b + E * this.image2.obj.v).toFixed() + "px", this.image2.image.style.left = (m + y * this.image2.obj.h).toFixed() + "px", this.image2.image.style.width = h + "px", this.image2.image.style.height = p + "px") | |
} | |
var t = function(e) { | |
this.container = e, this.initialized = !1, this.image1 = { | |
image: null, | |
outer: null, | |
inner: null, | |
obj: null | |
}, this.image2 = { | |
image: null, | |
outer: null, | |
inner: null, | |
obj: null | |
}, this.nextContainer = 0, this.verbose = !1, this.width = 0, this.height = 0 | |
}; | |
return t.prototype.init = n, t.prototype.addStyles = r, t.prototype.changeBg = i, t.prototype.changeComplete = o, t.prototype.transition = s, t.prototype.clear = u, t.prototype.resize = a, t | |
}), | |
function(e, t) { | |
e.app = e.app || {}, typeof define == "function" && define.amd ? define("app/BGRenderer", ["FLOCK/classes/BGRenderer", "FLOCK/utils/Inherit"], function() { | |
return e.app.BGRenderer = t() | |
}) : e.app.BGRenderer = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
function t(e, t, n, r) { | |
var i = this, | |
s = new TimelineLite({ | |
onComplete: function() { | |
i.changeComplete(r) | |
}.bind(this) | |
}); | |
s.pause(); | |
var o = n ? 0 : 3; | |
s.to(e.outer, 0, { | |
alpha: 0 | |
}), s.to(t.outer, o, { | |
alpha: 0, | |
ease: Power4.easeOut | |
}, 0), s.to(e.outer, o, { | |
alpha: 1, | |
ease: Power4.easeOut | |
}, 0), s.play() | |
} | |
var e = function(e) { | |
this._super(e) | |
}; | |
return FLOCK.utils.inherit(e, FLOCK.classes.BGRenderer), e.prototype.transition = t, e | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/BG_Image", ["jquery"], function(n) { | |
return e.classes.BG_Image = t(n) | |
}) : e.classes.BG_Image = t($) | |
}(window.FLOCK = window.FLOCK || {}, function(e) { | |
function n(e) { | |
return e.appendChild(this.img), this.img | |
} | |
var t = function(t, n) { | |
for (var r in t) t.hasOwnProperty(r) && (this[r] = t[r]); | |
this.img = new Image, this.el = this.img, this.img.style.position = "absolute", this.img.alt = "Background", e(this.img).on("load", function() { | |
n() | |
}), this.img.src = t.url | |
}; | |
return t.prototype.place = n, t | |
}), | |
function(e, t) { | |
e.classes = e.classes || {}, typeof define == "function" && define.amd ? define("FLOCK/classes/BGManager", ["jquery", "FLOCK/utils/DeviceDetect", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min", "FLOCK/classes/BG_Image"], function(n) { | |
return e.classes.BGManager = t(n) | |
}) : e.classes.BGManager = t($) | |
}(window.FLOCK = window.FLOCK || {}, function(e) { | |
function n() { | |
this.verbose && console.log("BGManager | init"), this.initialized = !0, this.currBgObj = null; | |
var e = this.sections.length; | |
while (e--) { | |
var t = this.sections[e]; | |
t.imgIDs && String(t.randomize).toLowerCase() != "false" && (t.imgIDs = f(t.imgIDs)) | |
} | |
for (var n in this.images) this.images[n].img = null, this.images[n].type === "image" && FLOCK.utils.SectionLoader.addSection("background_" + n, { | |
files: { | |
images: [this.images[n].url] | |
} | |
}) | |
} | |
function r(e) { | |
this.verbose && console.log("BGManager | returnSectionObj: " + e); | |
var t = null, | |
n = this.sections.length; | |
while (n--) | |
if (this.sections[n].id == e) { | |
t = this.sections[n]; | |
break | |
} | |
return t | |
} | |
function i(e) { | |
this.verbose && console.log("BGManager | deprioritize: " + e); | |
var t = this.sections.length, | |
n; | |
while (t--) { | |
n = this.sections[t].imgIDs ? this.sections[t].imgIDs.length : 0; | |
while (n--) this.sections[t].imgIDs[n] == e && this.sections[t].imgIDs.push(this.sections[t].imgIDs.splice(n, 1)[0]) | |
} | |
} | |
function s(e, t, n) { | |
this.verbose && console.log("BGManager | getBg: " + e), this.initialized || this.init(); | |
var r = this.returnSectionObj(e), | |
i; | |
return !r || !r.imgIDs || r.imgIDs.length <= 0 ? !1 : (i = r.imgIDs[0], n || this.deprioritize(i), t ? "background_" + i : i) | |
} | |
function o(e, t, n) { | |
var r = this.getBg(e, !1, !1), | |
i = this.images[r], | |
s = !1, | |
o = this; | |
r === !1 && (i = { | |
img: !1 | |
}); | |
if (i == this.currBgObj) { | |
n && n(); | |
return | |
} | |
this.currBgObj = i, i.img === !1 || i.img && i.loaded ? this.renderer.changeBg(i, t, n) : i.type === "image" ? i = new FLOCK.classes.BG_Image(this.images[r], function() { | |
if (s) return; | |
s = !0, i.loaded = !0, o.verbose && console.log("BGManager | image loaded: " + i.url), o.renderer.changeBg(i, t, n) | |
}) : FLOCK.utils.DeviceDetect.isMobile || FLOCK.utils.DeviceDetect.isAndroid || FLOCK.utils.DeviceDetect.isIpad || !document.createElement("video").canPlayType ? (this.images[r].url = this.images[r].fallback, i = new FLOCK.classes.BG_Image(this.images[r], function() { | |
if (s) return; | |
s = !0, i.loaded = !0, o.verbose && console.log("BGManager | image loaded: " + i.url), o.renderer.changeBg(i, t, n) | |
})) : i = new FLOCK.classes.BG_Video(this.images[r], function() { | |
if (s) return; | |
s = !0, this.loaded = !0, o.verbose && console.log("BGManager | image loaded: ", this), o.renderer.changeBg(this, t, n) | |
}, this.renderer.resize) | |
} | |
function u(t, n) { | |
var r = this.getBg(t, !1, !0); | |
if (!r) return; | |
var i = this.images[r]; | |
i.img || (i.img = new Image, i.img.alt = "Background", e(i.img).bind("load readystatechange", function() { | |
i.loaded = !0, n && n() | |
}.bind(this)), i.img.src = i.url) | |
} | |
function a() { | |
this.renderer.clear() | |
} | |
function f(e) { | |
var t = [], | |
n = e.length; | |
while (n--) { | |
var r = Math.floor(Math.random() * e.length), | |
i = e.splice(r, 1)[0]; | |
t.unshift(i) | |
} | |
return t | |
} | |
var t = function(e, t) { | |
console.log("BGManager | " + t), this.initialized = !1, this.verbose = !1, this.renderer = e, this.sections = t.sections, this.images = t.images | |
}; | |
return t.prototype.init = n, t.prototype.returnSectionObj = r, t.prototype.deprioritize = i, t.prototype.getBg = s, t.prototype.preloadNextBg = u, t.prototype.clear = a, t.prototype.changeBg = o, t | |
}), | |
function(e, t) { | |
e.app = e.app || {}, typeof define == "function" && define.amd ? define("app/BGManager", ["FLOCK/classes/BGManager", "FLOCK/utils/Inherit"], function() { | |
return e.app.BGManager = t() | |
}) : e.app.BGManager = t() | |
}(window.FLOCK = window.FLOCK || {}, function() { | |
var e = function(e, t) { | |
this._super(e, t) | |
}; | |
return FLOCK.utils.inherit(e, FLOCK.classes.BGManager), e | |
}), define("app/Button", ["jquery", "greensock/TimelineLite.min", "greensock/TweenLite.min", "greensock/easing/EasePack.min", "greensock/plugins/CSSPlugin.min"], function(e) { | |
function n() { | |
if (this.haltEvent) return; | |
FLOCK.app.Sound.sendEventToKlang("hotspot_rollover"), TweenLite.set(this.circle, { | |
alpha: 1, | |
scaleX: 0, | |
scaleY: 0, | |
transformOrigin: "center center" | |
}), TweenLite.to(this.circle, .5, { | |
scaleX: 1, | |
scaleY: 1, | |
alpha: 0 | |
}), window.room && room.cursor && room.cursor.over() | |
} | |
function r() { | |
window.room && !this.haltEvent && room.cursor && room.cursor.out() | |
} | |
function i() { | |
e(this.el).on("mouseenter", this.overHandler), e(this.el).on("mouseleave", this.outHandler) | |
} | |
function s(e) { | |
typeof e == "boolean" && (this.haltEvent = e) | |
} | |
var t = function(e) { | |
var t = 35; | |
this.hotspotOpen = !1, this.haltEvent = !1, this.el = typeof e == "string" ? document.getElementById(e) : e, this.circle = document.createElement("p"), this.circle.className = "circleOvers", TweenLite.set(this.circle, { | |
scaleX: 0, | |
scaleY: 0, | |
transformOrigin: "center center" | |
}), this.el.appendChild(this.circle), this.overHandler = n.bind(this), this.outHandler = r.bind(this), i.apply(this) | |
}; | |
t.prototype.haltEvents = s, FLOCK.ui = FLOCK.ui || {}, FLOCK.ui.Button = t | |
}), | |
function(e, t) { | |
e.Klang = t(), typeof define == "function" && define.amd ? define("packages/klang", [], function() { | |
return e.Klang | |
}) : typeof exports == "object" && (module.exports = e.Klang) | |
}(window, function() { | |
if (navigator.userAgent.indexOf("MSIE") != -1) { | |
var e = !0, | |
t = navigator.userAgent, | |
n = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})"), | |
r; | |
n.exec(t) != null && (r = parseInt(RegExp.$1)), r < 9 && (Object.oldDefineProperty = Object.defineProperty, Object.defineProperty = function() {}) | |
}(function() { | |
function t(e) { | |
if (!e) return; | |
e.setTargetValueAtTime || (e.setTargetValueAtTime = e.setTargetAtTime) | |
} | |
var e = window.AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext; | |
if (e) { | |
(function() { | |
if (navigator.userAgent.indexOf("Chrome/42") !== -1) { | |
var e = window.AudioBufferSourceNode.prototype; | |
e.internal_start || (e.internal_start = e.start, e.start = function(t, n, r) { | |
this.loop ? e.internal_start.call(this, t) : e.internal_start.apply(this, arguments) | |
}) | |
} | |
})(); | |
var n = e.prototype, | |
r = new e; | |
n.hasOwnProperty("createGain") || (n.createGain = n.createGainNode), n.hasOwnProperty("internal_createBiquadFilter") || (n.internal_createBiquadFilter = n.createBiquadFilter, n.createBiquadFilter = function() { | |
var e = this.internal_createBiquadFilter(); | |
t(e.frequency), t(e.detune), t(e.Q), t(e.gain); | |
var n = ["LOWPASS", "HIGHPASS", "BANDPASS", "LOWSHELF", "HIGHSHELF", "PEAKING", "NOTCH", "ALLPASS"]; | |
for (var r = 0; r < n.length; ++r) { | |
var i = n[r], | |
s = i.toLowerCase(); | |
e.hasOwnProperty(i) && (!Object.isFrozen || !Object.isFrozen(e)) && (e[i] = s) | |
} | |
return e | |
}), n.hasOwnProperty("createDelay") || (n.createDelay = n.createDelayNode); | |
var i = function(e, t) { | |
return e === undefined && t !== undefined | |
}, | |
s = r.createBufferSource().constructor.prototype; | |
if (i(s.start, s.noteOn) || i(s.stop, s.noteOff)) { | |
var o = n.createBufferSource; | |
n.createBufferSource = function() { | |
var t = o.call(this); | |
return t.start = t.start || t.noteOn, t.stop = t.stop || t.noteOff, t | |
} | |
} | |
if (typeof r.createOscillator == "function") { | |
var u = r.createOscillator().constructor.prototype; | |
if (i(u.start, u.noteOn) || i(u.stop, u.noteOff)) { | |
var a = n.createOscillator; | |
n.createOscillator = function() { | |
var t = a.call(this); | |
return t.start = t.start || function() { | |
t.noteOn && (arguments.length > 1 ? t.noteGrainOn.apply(t, arguments) : t.noteOn.apply(t, arguments)) | |
}, t.stop = t.stop || t.noteOff, t | |
} | |
} | |
} | |
n.createGain === undefined && n.createGainNode !== undefined && (n.createGain = n.createGainNode), n.createDelay === undefined && n.createDelayNode !== undefined && (n.createDelay = n.createDelayNode), n.createScriptProcessor === undefined && n.createJavaScriptNode !== undefined && (n.createScriptProcessor = n.createJavaScriptNode); | |
var f = window.AudioParam = window.AudioParam || window.webkitAudioParam; | |
if (f) { | |
var l = window.AudioParam.prototype; | |
l.setTargetAtTime = l.setTargetAtTime || l.setTargetValueAtTime | |
} else e.prototype.internal_createGain || (e.prototype.internal_createGain = e.prototype.createGain, e.prototype.createGain = function() { | |
var e = this.internal_createGain(); | |
return t(e.gain), e | |
}) | |
} | |
})(); | |
var i = this.__extends || function(e, t) { | |
function n() { | |
this.constructor = e | |
} | |
n.prototype = t.prototype, e.prototype = new n | |
}, | |
s; | |
return function(e) { | |
function o(e) { | |
s = s || {}, s[e] = arguments | |
} | |
function u(t) { | |
var n = []; | |
for (var i = 0; i < arguments.length - 1; i++) n[i] = arguments[i + 1]; | |
if (!r.isInited) return; | |
try { | |
if (e.version === "webaudio") { | |
if (!e.context) return; | |
r.instance.triggerEvent(t, n) | |
} else e.version === "audiotag" && e.audioTagHandler && e.audioTagHandler.triggerEvent(t, n) | |
} catch (s) { | |
e.err("Klang exception: unable to trigger event: '" + t + "': " + s.name + ": " + s.message) | |
} | |
} | |
function a(t) { | |
var n = r.instance.findInstance(e.getEvents()[t]); | |
return n ? n.destination() : null | |
} | |
function f() { | |
if (s) { | |
for (var t in s) s.hasOwnProperty(t) && e.triggerEvent.apply(e, s[t]); | |
s = null | |
} | |
} | |
function l(t, n, i, s, o) { | |
navigator.userAgent.indexOf("Firefox") != -1 ? e.browser = "Firefox" : navigator.userAgent.indexOf("Chrome") != -1 ? e.browser = "Chrome" : navigator.userAgent.indexOf("Safari") != -1 ? e.browser = "Safari" : navigator.userAgent.indexOf("Opera") != -1 ? e.browser = "Opera" : navigator.userAgent.indexOf("MSIE") != -1 && (e.browser = "IE"), e.initOptions = o = o || {}, e.isMobile = j.checkMobile(), e.isIOS = j.checkIOS(), e.useMonoBuffers = e.isIOS, typeof t == "object" && t.settings && t.settings.force_logging && (e.loggingEnabled = !0); | |
if (e.klangInited) { | |
e.warn("Klang already initialized"); | |
return | |
} | |
e.klangInited = !0, e.readyState = e.READY_STATE_NOT_INITIATED; | |
if (window.AudioContext === undefined || !!o.noWebAudio) { | |
e.version = "audiotag"; | |
try { | |
e.audioTagHandler = new AudioTagHandler(t, function(t) { | |
e.readyState = e.READY_STATE_LOADED, n && n(t), f() | |
}, i) | |
} catch (u) { | |
return e.err("Klang exception: unable to initialize audio tag fallback"), e.version = "failed audiotag", n(!1), !1 | |
} | |
return !0 | |
} | |
e.context || (e.context = new AudioContext); | |
try { | |
return e.version = "webaudio", r.isInited() && e.warn("Klang already initialized"), r.instance.loadJSON(t, function(t) { | |
e.readyState = e.READY_STATE_LOADED, n && n(t), f() | |
}, i), !0 | |
} catch (u) { | |
return e.err("Klang exception: unable to parse config file: '" + t + "': " + u.name + ": " + u.message), e.version = "failed web audio", n(!1), !1 | |
} | |
} | |
function c() { | |
if (e.version == "webaudio") try { | |
r.instance.initIOS() | |
} catch (t) { | |
e.err("Klang exception: unable to init iOS: " + t.name + ": " + t.message) | |
} else e.version == "audiotag" && e.isMobile && e.audioTagHandler.initIOS() | |
} | |
function h() { | |
var t = [], | |
n; | |
if (e.version === "webaudio") n = B.FileHandler.instance; | |
else { | |
if (e.version !== "audiotag") return []; | |
n = e.audioTagHandler | |
} | |
t = n.getLoadGroups(); | |
var r = t.indexOf("auto"); | |
return r !== -1 && t.splice(r, 1), t | |
} | |
function p() { | |
return r.instance | |
} | |
function d() { | |
return B.FileHandler.instance | |
} | |
function v() { | |
return j | |
} | |
function m() { | |
return B | |
} | |
function g(t, n) { | |
return e.version !== "webaudio" ? (e.err("Schedule only availible in WebAudio version"), this) : (typeof t == "number" && typeof n == "function" ? r.instance.scheduler.at(t, n) : e.err(".schedule requires arg0 - time in seconds and arg1 - a callback function"), this) | |
} | |
function y(e, t) { | |
if (!B[e]) throw new Error("No such object"); | |
return new B[e](t) | |
} | |
function b(e, t) { | |
r.debugSettings[e] = t | |
} | |
function w(t, n, i, s) { | |
try { | |
e.logc("Klang: Loading: '" + t + "'", j.LOG_LOAD_COLOR), e.version == "webaudio" ? r.instance.loadSoundFiles(t, n, i, s) : e.version == "audiotag" ? e.audioTagHandler.loadSoundFiles(t, n, i, s) : (i && i(1), n && n(!1)) | |
} catch (o) { | |
e.err("Klang exception: unable to load file group: '" + t + "': " + o.name + ": " + o.message) | |
} | |
} | |
function E(t) { | |
try { | |
e.logc("Klang: Freeing: '" + t + "'", j.LOG_LOAD_COLOR), e.version == "webaudio" ? r.instance.freeSoundFiles(t) : e.version == "audiotag" | |
} catch (n) { | |
e.err("Klang exception: unable to free file group: '" + t + "': " + n.name + ": " + n.message) | |
} | |
} | |
function S() { | |
return B.FileHandler.instance.progress | |
} | |
function x() { | |
e.version == "webaudio" ? r.isInited() && r.instance.stopAll() : e.version == "audiotag" && e.audioTagHandler.stopAll() | |
} | |
function T(t, n) { | |
if (e.version == "webaudio") { | |
if (r.isInited()) { | |
if (t.indexOf(".") === 0) { | |
var i = t.substring(1), | |
s = [], | |
o = e.getCoreInstance()._objectTable; | |
for (var u in o) | |
if (o.hasOwnProperty(u)) { | |
var a = o[u]; | |
a._type === i && s.push(a) | |
} | |
return s | |
} | |
var f = r.instance.getSymbolId(t); | |
return r.instance.findInstance(f) | |
} | |
} else e.version == "audiotag" | |
} | |
function N() { | |
var t = []; | |
for (var n = 0; n < arguments.length - 0; n++) t[n] = arguments[n + 0]; | |
e.loggingEnabled && (e.browser == "Chrome" ? console.log("%c[" + M() + "] " + t.join(), "color:" + j.LOG_TIME_COLOR) : console.log.apply(console, t)) | |
} | |
function C(t, n) { | |
e.loggingEnabled && (e.browser == "Chrome" ? (n || (n = "gray"), console.log("%c[" + M() + "] " + t, "color:" + n)) : console.log(t)) | |
} | |
function k() { | |
var t = []; | |
for (var n = 0; n < arguments.length - 0; n++) t[n] = arguments[n + 0]; | |
e.loggingEnabled && (e.browser == "Chrome" ? console.warn("%c[" + e.getTimeString() + "] " + t.join(), "color:" + j.LOG_WARN_COLOR) : console.warn.apply(console, t)) | |
} | |
function L() { | |
var t = []; | |
for (var n = 0; n < arguments.length - 0; n++) t[n] = arguments[n + 0]; | |
e.loggingEnabled && (e.browser == "Chrome" ? console.warn("%c[" + e.getTimeString() + "] " + t.join(), "color:" + j.LOG_ERROR_COLOR) : console.warn.apply(console, t)) | |
} | |
function A(e, t) { | |
var n = e.toString(); | |
while (n.length < t) n = "0" + n; | |
return n | |
} | |
function O(e) { | |
return A(e.getUTCMinutes(), 2) + ":" + A(e.getUTCSeconds(), 2) + "." + A(e.getUTCMilliseconds(), 3) | |
} | |
function M(t) { | |
t == undefined && (t = e.context.currentTime); | |
var n = Math.round(t * 1e3), | |
r = Math.floor(n / 1e3 % 60), | |
i = Math.floor(n / 6e4 % 60), | |
s = Math.floor(n / 36e5 % 24); | |
return A(s, 2) + ":" + A(i, 2) + ":" + A(r, 2) + "." + A(n % 1e3, 3) | |
} | |
function _() { | |
return e.version === "flash" ? null : e.version == "audiotag" ? e.audioTagHandler._events : r.instance._eventTable | |
} | |
function D(e) { | |
r.instance.setCallbacks(e) | |
} | |
function P(t) { | |
var n = 0, | |
r = setInterval(function() { | |
var i = e.context.currentTime, | |
s = t[n]; | |
while (s.time < i) { | |
u(s.name, s.args), n++; | |
if (n == t.length) { | |
clearInterval(r); | |
break | |
} | |
s = t[n] | |
} | |
}, 10) | |
} | |
function H(t, n) { | |
e.klangInited = !1, e.version == "webaudio" ? r.isInited() && (r.instance.stopAll(), r.deinit()) : e.version == "audiotag" && e.audioTagHandler.stopAll(), e.version = "n/a" | |
}(function(e) { | |
function n() { | |
var e = window.document.createElement("audio"); | |
if (!e.canPlayType) return !1; | |
var t = []; | |
return e.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, "") && t.push(".ogg"), e.canPlayType("audio/aac").replace(/no/, "") && t.push(".m4a"), e.canPlayType("audio/mpeg;").replace(/no/, "") && t.push(".mp3"), t | |
} | |
function r(e) { | |
t = t || n(); | |
for (var r = 0; r < t.length; r++) | |
if (t[r] === e) return !0; | |
return !1 | |
} | |
function i() { | |
var e = navigator.userAgent, | |
t, n = e.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; | |
if (/trident/i.test(n[1])) return t = /\brv[ :]+(\d+)/g.exec(e) || [], { | |
name: "IE", | |
version: t[1] || "unknown" | |
}; | |
if (n[1] === "Chrome") { | |
t = e.match(/\bOPR\/(\d+)/); | |
if (t !== null) return { | |
name: "Opera", | |
version: t[1] | |
} | |
} | |
return n = n[2] ? [n[1], n[2]] : [navigator.appName, navigator.appVersion, "-?"], (t = e.match(/version\/(\d+)/i)) !== null && n.splice(1, 1, t[1]), { | |
name: n[0], | |
version: n[1] | |
} | |
} | |
var t; | |
e.canPlayAudioSuffix = r, e.browser = i() | |
})(e.detector || (e.detector = {})); | |
var t = e.detector; | |
(function(e) { | |
function t(e) { | |
var t = document.createElement("a"); | |
t.href = e; | |
var n = document.createElement("a"); | |
n.href = location.href; | |
var r = t.hostname != "" && (t.port != n.port || t.protocol != n.protocol || t.hostname != n.hostname); | |
return r | |
} | |
function n(e, n, r, i) { | |
var s; | |
e.type = e.type || "GET"; | |
if (window.XDomainRequest && t(e.url)) s = new window.XDomainRequest, s.onload = function() { | |
n && n(s.responseText) | |
}, s.onprogress = r || function() {}, s.onerror = i || function() {}, s.open(e.type, e.url, !0); | |
else { | |
if (!window.XMLHttpRequest) throw "Error - browser does not support XDomain/XMLHttp Requests"; | |
s = new XMLHttpRequest, s.open(e.type, e.url, !0), s.onreadystatechange = function() { | |
try { | |
if (s.readyState == 4 && s.status == 200) { | |
if (n) { | |
var e = s.responseText; | |
n(e) | |
} | |
} else s.status != 0 && s.status != 200 && i && i({ | |
status: s.status | |
}) | |
} catch (t) { | |
throw t | |
} | |
} | |
} | |
s && s.send(null) | |
} | |
e.isCrossDomain = t, e.request = n | |
})(e.network || (e.network = {})); | |
var n = e.network; | |
e.versionNumber = 1, e.context, e.version, e.progressCallback, e.readyCallback, e.browser, e.os, e.isMobile, e.isIOS, e.fallback, e.loggingEnabled = !1, e.useMonoBuffers = !1, e.Panner, e.safari = !1, e.initOptions; | |
var r = function() { | |
function t() { | |
this._initComplete = !1, this._blurFadeOut = !1, this._masterBusId = null, this._preLoadInitStack = [], this._postLoadInitStack = [], this._connectStack = [], this._superMasterOutput = e.context ? e.context.createGain() : null, e.Panner = B.Panner, this._eventHistory = [], this.scheduler = new B.Scheduler, j.getParameterByName("klang_log") && (e.loggingEnabled = !0) | |
} | |
return t.debugSettings = {}, t.inst = null, t.isInited = function() { | |
return t.inst == null ? !1 : t.inst._initComplete | |
}, Object.defineProperty(t.prototype, "initComplete", { | |
get: function() { | |
return this._initComplete | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t, "instance", { | |
get: function() { | |
return t.inst == null && (t.inst = new t), t.inst | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t.prototype.setCallbacks = function(e) { | |
this._callbacks = e | |
}, Object.defineProperty(t, "callbacks", { | |
get: function() { | |
return t.instance._callbacks | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t.deinit = function() { | |
t.inst = null | |
}, t.prototype.stopAll = function() { | |
window.KlangVisual && KlangVisual.stop(); | |
for (var e in this._objectTable) | |
if (this._objectTable[e].stop) try { | |
this._objectTable[e].stop() | |
} catch (t) {} | |
}, t.prototype.loadJSON = function(n, r, i) { | |
this._readyCallback = r, this._progressCallback = i || function() {}; | |
if (typeof n == "object") { | |
e.log("Loading config (editor)"); | |
var s = this.createConfigNode(n); | |
t.settings = s.settings, t.instance.initContent(s), window.KlangVisual && KlangVisual.init(n) | |
} else { | |
if (typeof n != "string") throw "Klang exception: unrecognized options: '" + n + "'"; | |
e.log("Loading config (client)"); | |
var o = new XMLHttpRequest; | |
o.open("GET", n, !0); | |
var u = this; | |
o.onreadystatechange = function() { | |
if (o.readyState == 4 && o.status == 200) { | |
var e = o.responseText, | |
r = u.parseConfigJSON(e); | |
t.settings = r.settings, t.instance.initContent(r, null, n), window.KlangVisual && KlangVisual.init(JSON.parse(e)) | |
} else { | |
if (o.status == 404) throw "Klang exception: config file not found: '" + n + "'"; | |
if (o.status != 200) throw "Klang exception: unable to load config file: '" + n + "'" | |
} | |
}, o.send(null) | |
} | |
}, t.prototype.parseConfigJSON = function(t) { | |
return JSON.parse(t, function(t, n) { | |
return n && typeof n == "object" && typeof n.type == "string" ? (B[n.type] || e.warn("Core: Type not found: " + n.type), new B[n.type](n, t)) : n | |
}) | |
}, t.prototype.createConfigNode = function(t) { | |
if (typeof t == "object") | |
for (var n in t) { | |
var r = t[n]; | |
typeof r == "object" && typeof r.type == "string" ? (B[r.type] || e.warn("Core: Type not found: " + r.type), t[n] = this.createConfigNode(r), t[n] = new B[r.type](r, n)) : t[n] = this.createConfigNode(r) | |
} | |
return t | |
}, t.prototype.createObject = function(t, n, r) { | |
r || (r = {}), B[n.type] || e.warn("Core: Type not found: " + n.type), !r.excludeFromTable && this._objectTable[t] && e.warn("Core: Duplicate object: " + t); | |
var i = new B[n.type](n, t); | |
r.excludeFromTable || (this._objectTable[t] = i), !r.noInit && i.init && i.init(); | |
if (!r.noConnect && i.destinationName && i.connect) | |
if (i.destinationName == "$OUT") i.connect(this._superMasterOutput); | |
else { | |
var s = this.findInstance(i.destinationName); | |
s || e.warn("Core: Destination not found: " + i.destinationName), s._type != "Bus" && e.warn("Core: Destination is not a bus: " + i.destinationName), i.connect(s.input) | |
} | |
return i | |
}, t.prototype.updateObject = function(e, t) { | |
var n = typeof e == "string" ? this._objectTable[e] : e; | |
if (n._type == "SimpleProcess" && t.type == "AdvancedProcess") { | |
var r = new B.AdvancedProcess(t, e); | |
r.init(), this._objectTable[e] = r | |
} else if (n._type == "AdvancedProcess" && t.type == "SimpleProcess") { | |
var i = new B.SimpleProcess(t, e); | |
i.init(), this._objectTable[e] = i | |
} else n.setData && n.setData(t) | |
}, t.prototype.createEvent = function(t, n) { | |
this._eventTable[t] && e.warn("Core: Duplicate event: " + t), this._eventTable[t] = n | |
}, t.prototype.initContent = function(n, r, i) { | |
var s = n.settings.relative_path, | |
o, u = n.settings.file_path || ""; | |
s ? i.lastIndexOf("/") != -1 ? (o = i.substring(0, i.lastIndexOf("/")), o.charAt(o.length - 1) !== "/" && (o += "/"), o += u) : o = u : o = u, e.log("Initializing core"); | |
var a = e.context.currentTime; | |
if (n.settings.blur_fade_time != -1) { | |
this._blurFadeOut = !0; | |
var f = n.settings.blur_fade_time || .5; | |
f < 0 && f != -1 && e.warn("Core: Invalid blur_fade_time value. Must be -1 or >= 0."); | |
var l = this; | |
function c() { | |
l.isHidden() ? l._blurFadeOut && j.curveParamLin(l._superMasterOutput.gain, 0, f) : j.curveParamLin(l._superMasterOutput.gain, 1, f) | |
} | |
var h = this.getHiddenProp(); | |
if (h) { | |
var p = "visibilitychange"; | |
document.addEventListener(p, c) | |
} | |
} | |
B.FileHandler.instance.fileInfo = (r != undefined ? r : n.files) || [], this._eventTable = n.events || {}, this._objectTable = {}; | |
for (var d in n.audio) this._objectTable[d] = n.audio[d]; | |
for (var d in n.busses) this._objectTable[d] = n.busses[d]; | |
for (var d in n.sequencers) this._objectTable[d] = n.sequencers[d]; | |
for (var d in n.processes) this._objectTable[d] = n.processes[d]; | |
for (var d in n.synths) this._objectTable[d] = n.synths[d]; | |
for (var d in n.lfos) this._objectTable[d] = n.lfos[d]; | |
for (var d in n.automations) this._objectTable[d] = n.automations[d]; | |
this.setVars(n.vars), this._masterBusId = n.masterBus, this._exportedSymbols = n.exportedSymbols || {}, this._logIgnore = n.debug.log_ignore || n.log_ignore || {}, B.Panner.setListenerData(n.settings.listener), j.createCurves(n.curves), this._loadStartTimestamp = (new Date).getTime(), n.debug && (e.debugData.ignoredEvents = n.debug.ignored_events || e.debugData.ignoredEvents, e.debugData.logToConsole = n.debug.log_to_console || e.debugData.logToConsole), e.log("Pre load initialization started"); | |
for (var v = 0, m = this._preLoadInitStack.length; v < m; v++) { | |
var g = this._preLoadInitStack[v]; | |
g.init && g.init() | |
} | |
e.log("Pre load initialization finished"), e.log("Connecting nodes"), this._superMasterOutput.connect(e.context.destination); | |
for (var v = 0, m = this._connectStack.length; v < m; v++) { | |
var g = this._connectStack[v]; | |
switch (g.destinationName) { | |
case "$OUT": | |
g.connect(this._superMasterOutput); | |
break; | |
case "$PARENT": | |
break; | |
default: | |
var y = this.findInstance(g.destinationName); | |
y || e.warn("Core: Destination not found: " + g.destinationName), y._type != "Bus" && e.warn("Core: Destination is not a bus: " + g.destinationName), g.connect(y.input) | |
} | |
} | |
e.log("Nodes connected"), this._preLoadInitStack = null, this._connectStack = null, this._timeHandler = new B.TimeHandler, this._initComplete = !0, e.log("Core initialized"), B.FileHandler.instance.baseURL = o, (!e.initOptions || e.initOptions && !e.initOptions.noAutoLoad) && B.FileHandler.instance.loadFiles("auto", t.soundsLoaded, this._progressCallback) | |
}, t.prototype.isHidden = function() { | |
var e = this.getHiddenProp(); | |
return e ? document[e] : !1 | |
}, t.prototype.getHiddenProp = function() { | |
var e = ["webkit", "moz", "ms", "o"]; | |
if ("hidden" in document) return "hidden"; | |
for (var t = 0; t < e.length; t++) | |
if (e[t] + "Hidden" in document) return e[t] + "Hidden"; | |
return null | |
}, t.prototype.setVars = function(e) { | |
if (e) { | |
for (var t in e) | |
if (typeof e[t] == "string" && e[t].indexOf("me.") > -1) e[t] = this.findInstance(e[t].split("me.")[1]); | |
else if (typeof e[t] == "object") { | |
var n = e[t]; | |
for (var r in n) n.hasOwnProperty(r) && typeof n[r] == "string" && n[r].indexOf("me.") > -1 && (n[r] = this.findInstance(n[r].split("me.")[1])) | |
} | |
j.vars = e | |
} | |
}, t.prototype.loadSoundFiles = function(e, t, n, r) { | |
n && (this._progressCallback = n); | |
var i = this; | |
B.FileHandler.instance.loadFiles(e, function(e, n) { | |
for (var r = 0; r < n.length; r++) { | |
var s = n[r].id; | |
for (var o in i._objectTable) | |
if (i._objectTable.hasOwnProperty(o)) { | |
var u = i._objectTable[o]; | |
u._type === "AudioSource" && u._fileId === s && u.init() | |
} | |
} | |
t && t(!0) | |
}, this._progressCallback, r) | |
}, t.prototype.freeSoundFiles = function(e) { | |
B.FileHandler.instance.freeSoundFiles(e); | |
for (var t in this._objectTable) { | |
var n = this._objectTable[t]; | |
if (n._type == "AudioSource") { | |
var r = B.FileHandler.instance.getFileInfo(n._fileId); | |
r && r.load_group == e && n.freeBuffer() | |
} | |
} | |
}, t.soundsLoaded = function() { | |
e.log("Post load initialization started"); | |
var r = t.instance; | |
for (var i = 0, s = r._postLoadInitStack.length; i < s; i++) r._postLoadInitStack[i].init(); | |
e.log("Post load initialization finished"), r._postLoadInitStack = null, r._readyCallback && r._readyCallback(!0) | |
}, t.prototype.pushToPreLoadInitStack = function(e) { | |
return this._preLoadInitStack ? (this._preLoadInitStack.push(e), !0) : !1 | |
}, t.prototype.pushToPostLoadInitStack = function(e) { | |
return this._postLoadInitStack ? (this._postLoadInitStack.push(e), !0) : !1 | |
}, t.prototype.pushToConnectStack = function(e) { | |
return this._connectStack ? (this._connectStack.push(e), !0) : !1 | |
}, t.prototype.findInstance = function(t) { | |
var n = this._objectTable[t]; | |
return n || e.warn("Core: Unknown reference: '" + t + "'"), n | |
}, t.prototype.triggerEvent = function(t) { | |
var n = []; | |
for (var r = 0; r < arguments.length - 1; r++) n[r] = arguments[r + 1]; | |
j.lastEvent = t; | |
if (e.debugData.ignoredEvents[t]) return; | |
this._eventTable[t] ? e.debugData.logToConsole && !this._logIgnore[t] && e.logc("Klang Core: Incoming sound event: '" + t + "'" + ", " + n, j.LOG_EVENT_COLOR) : e.debugData.logToConsole && !this._logIgnore[t] && e.logc("Klang Core: Incoming sound event: '" + t + "'" + ", " + n, j.LOG_UNIMPLEMENTED_EVENT_COLOR); | |
var i = this._eventTable[t]; | |
if (typeof i == "string") this._objectTable[i] || e.warn("Core: Unknown process: '" + i + "'"), this._objectTable[i]._type != "SimpleProcess" && this._objectTable[i]._type != "AdvancedProcess" && e.warn("Core: Object is not a process: '" + i + "'"), this._objectTable[i].start(n[0]); | |
else if (i instanceof Array) | |
for (var s = 0, o = i.length; s < o; s++) this._objectTable[i[s]] || e.warn("Core: Unknown process: '" + i[s] + "'"), this._objectTable[i[s]]._type != "SimpleProcess" && this._objectTable[i[s]]._type != "AdvancedProcess" && e.warn("Core: Object is not a process: '" + i + "'"), this._objectTable[i[s]].start(n[0]) | |
}, t.prototype.getSymbolId = function(e) { | |
return this._exportedSymbols[e] | |
}, t.prototype.initIOS = function() { | |
var t = e.context.createBufferSource(); | |
t.start(0) | |
}, Object.defineProperty(t.prototype, "timeHandler", { | |
get: function() { | |
return this._timeHandler | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "output", { | |
get: function() { | |
return this._superMasterOutput | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "blurFadeOut", { | |
get: function() { | |
return this._blurFadeOut | |
}, | |
set: function(e) { | |
this._blurFadeOut = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t | |
}(); | |
e.READY_STATE_NOT_INITIATED = 0, e.READY_STATE_INITIATED = 1, e.READY_STATE_LOADED = 2, e.klangInited = !1, e.readyState = e.READY_STATE_NOT_INITIATED; | |
var s; | |
e.pushToEventQue = o, e.triggerEvent = u, e.getDestinationForEvent = a, e.init = l, e.initIOS = c, e.getLoadGroups = h, e.getCoreInstance = p, e.getFileHandlerInstance = d, e.getUtil = v, e.getModel = m, e.schedule = g, e.createObject = y, e.setDebugFlag = b, e.load = w, e.free = E, e.getLoadProgress = S, e.stopAll = x, e.$ = T, e.log = N, e.logc = C, e.warn = k, e.err = L, e.zeropad = A, e.getTimeStamp = O, e.getTimeString = M, e.getEvents = _, e.debugData = { | |
ignoredEvents: {}, | |
logToConsole: !0 | |
}, e.visualWindow, e.setCallbacks = D, e.schedulePredefinedEvents = P, e.deinit = H; | |
var B; | |
(function(t) { | |
function a(e, t, n, r, i) { | |
typeof i == "undefined" && (i = "linear"); | |
var s, o; | |
if (i == "linear") s = function(e) { | |
return 1 - e | |
}, o = function(e) { | |
return e | |
}; | |
else { | |
if (i != "equalpower") return; | |
s = function(e) { | |
return Math.pow(1 - e, .5) | |
}, o = function(e) { | |
return Math.pow(e, .5) | |
} | |
} | |
n = Math.min(n, e.length), r = Math.min(r, t); | |
for (var u = 0; u < e.numberOfChannels; u++) { | |
var a = e.getChannelData(u), | |
f = n - 1, | |
l = t - 1; | |
for (var c = r - 1; c >= 0; c--) { | |
var h = (c + 1) / (r + 1); | |
a[f] = a[f] * s(h) + a[l] * o(h), f--, l-- | |
} | |
var p = n, | |
d = t; | |
while (p < e.length) a[p++] = a[d++] | |
} | |
} | |
var n = function() { | |
function e() {} | |
return e.prototype.on = function(e, t, n) { | |
this._events = this._events || {}; | |
var r = this._events[e] || (this._events[e] = []); | |
return r.push({ | |
callback: t, | |
ctxArg: n, | |
context: n || this | |
}), this | |
}, e.prototype.off = function(e, t, n) { | |
var r, i, s, o; | |
if (!this._events || !this._events[e]) return this; | |
!e && !t && !n && (this._events = {}); | |
var u = this._events[e]; | |
if (u) { | |
o = []; | |
if (t && n) | |
for (r = 0, i = u.length; r < i; r++) s = u[r], t !== s.callback && n !== s.ctxArg && o.push(u[r]); | |
else if (t) | |
for (r = 0, i = u.length; r < i; r++) s = u[r], t !== s.callback && o.push(u[r]); | |
else if (n) | |
for (r = 0, i = u.length; r < i; r++) s = u[r], n !== s.ctxArg && o.push(u[r]); | |
this._events[e] = o | |
} | |
return this._events[e].length || delete this._events[e], this | |
}, e.prototype.trigger = function(e) { | |
var t = []; | |
for (var n = 0; n < arguments.length - 1; n++) t[n] = arguments[n + 1]; | |
if (!this._events || !this._events[e]) return this; | |
var r, i, s; | |
s = this._events[e], t = [].splice.call(arguments, 1); | |
for (r = s.length - 1; r >= 0; r--) i = s[r], i.callback.apply(i.context, t); | |
return this | |
}, e | |
}(); | |
t.EventEmitter = n; | |
var s = function() { | |
function t() { | |
this.memUsage = 0, this._decoding = !1, this._files = {}, this._bufferQue = [], this._groups = {}, this._lastSentPercent = -1 | |
} | |
return t.inst = null, Object.defineProperty(t, "instance", { | |
get: function() { | |
return t.inst == null && (t.inst = new t), t.inst | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t.prototype.sendProgressCallback = function(e) { | |
var t = this._groups[e]; | |
if (t.progressCallback && !t.loadInterrupted) { | |
var n = 0; | |
t.progress.readyAudioFiles >= t.progress.totalAudioFiles && (n = Math.floor((t.progress.loadedBytes + t.progress.bufferedFiles) / (t.progress.totalBytes + t.progress.totalFiles) * (100 - (t.progress.totalFiles - t.progress.convertedFiles)))), this._lastSentPercent !== n && t.progressCallback(n), this._lastSentPercent = n | |
} | |
}, t.prototype.updateProgress = function(e, t) { | |
var n = e.load_group; | |
if (!e.sizeReceived) { | |
e.sizeReceived = !0; | |
var r = 1; | |
t.lengthComputable && (r = t.total, e.loadedBytes = 0), e.totalBytes = r, this._groups[n].progress.totalBytes += r, this._groups[n].progress.readyAudioFiles++ | |
} | |
if (e["loadedBytes"] != undefined) { | |
var i = t.loaded - e.loadedBytes; | |
e.loadedBytes = t.loaded, this._groups[n].progress.loadedBytes += i, this.sendProgressCallback(n) | |
} | |
}, t.prototype.decodeBufferQue = function() { | |
var t = this; | |
if (this._bufferQue.length && !this._decoding) { | |
var n = this._bufferQue.pop(), | |
r = n.data, | |
i = n.info, | |
s = n.callback; | |
this._decoding = !0, e.context.decodeAudioData(r, function(r) { | |
var o = t._groups[i.load_group]; | |
t._decoding = !1; | |
if (e.useMonoBuffers) { | |
var u = r.length, | |
a = e.context.createBuffer(1, u, e.context.sampleRate), | |
f = r.getChannelData(0), | |
l = a.getChannelData(0); | |
for (var c = 0; c < u; c++) l[c] = f[c]; | |
r = a | |
} | |
t.memUsage += r.length * r.numberOfChannels * Float32Array.BYTES_PER_ELEMENT; | |
var h = t.memUsage, | |
p = h / 1e6; | |
t.addFile(i, r), o.progress.convertedFiles++, n.data = null, t._bufferQue.length ? t.decodeBufferQue() : s && s() | |
}, function(t) { | |
e.log("Klang warning: unable to load file '" + (this._baseURL || "") + i.url + "'") | |
}) | |
} | |
}, t.prototype.loadAudioBuffer = function(t, n) { | |
var r = this, | |
i = new XMLHttpRequest, | |
s = ".ogg"; | |
if (e.browser === "Safari" || e.detector.browser["name"] == "Netscape") s = ".mp3"; | |
var o = (t.external ? "" : this._baseURL) + t.url + s; | |
i.open("GET", o, !0), i.responseType = "arraybuffer", i.sizeReceived = !1, i.load_group = t.load_group, i.onprogress = function(e) { | |
r.updateProgress(i, e) | |
}, i.onload = function(e) { | |
var s = r._groups[t.load_group]; | |
r._bufferQue.push({ | |
data: i.response, | |
load_group: s, | |
info: t, | |
callback: n | |
}); | |
if (i.loadedBytes) { | |
var o = i.totalBytes - i.loadedBytes; | |
s.progress.loadedBytes += o | |
} else s.progress.loadedBytes += 1; | |
r.updateProgress(i, e), r.decodeBufferQue(), i.response = null, i = null | |
}, i.onreadystatechange = function() { | |
(i.readyState != 4 || i.status != 200) && i.status != 200 && (r._groups[t.load_group].loadInterrupted = !0, r._groups[t.load_group].loadFailedCallback && r._groups[t.load_group].loadFailedCallback()) | |
}, i.send(), this._groups[t.load_group].progress.totalAudioFiles++ | |
}, t.prototype.loadMidiFile = function(e, t) { | |
var n = this; | |
loadRemote(this._baseURL + e.url, function(e, t) { | |
n.updateProgress(e, t) | |
}, function(r) { | |
n.addFile(e, readMidiFile(r)), t && t() | |
}) | |
}, t.prototype.loadMidiString = function(e) { | |
var t = this, | |
n = new XMLHttpRequest; | |
n.open("GET", this._baseURL + e.url), n.onprogress = function(e) { | |
t.updateProgress(n, e) | |
}, n.onreadystatechange = function() { | |
this.readyState == 4 && this.status == 200 && t.addFile(e, readMidiString(n.response)) | |
}, n.send() | |
}, t.prototype.loadFiles = function(e, t, n, r) { | |
typeof e == "string" && (e = [e]); | |
for (var i = 0, s = e.length; i < s; i++) this._groups[e[i]] = {}, this._groups[e[i]]._loadedFiles = [], this._groups[e[i]].filesLoadedCallback = t, this._groups[e[i]].progressCallback = n, this._groups[e[i]].loadFailedCallback = r, this._groups[e[i]].loadInterrupted = !1, this._groups[e[i]].progress = { | |
totalBytes: 0, | |
loadedBytes: 0, | |
totalFiles: 0, | |
totalAudioFiles: 0, | |
readyAudioFiles: 0, | |
bufferedFiles: 0, | |
convertedFiles: 0 | |
}; | |
for (var i = 0, s = this._fileInfo.length; i < s; i++) { | |
var o = this._fileInfo[i], | |
u = e.indexOf(o.load_group); | |
if (u != -1 && !this._files[o.id] && !o.only_audio_tag) { | |
switch (o.file_type) { | |
case "audio": | |
this.loadAudioBuffer(o); | |
break; | |
case "midi": | |
this.loadMidiFile(o); | |
break; | |
case "midistring": | |
this.loadMidiString(o) | |
} | |
this._groups[e[u]].progress.totalFiles++ | |
} | |
} | |
for (var i = 0, s = e.length; i < s; i++) this._groups[e[i]].progress.totalFiles == 0 && this._groups[e[i]].filesLoadedCallback && !this._groups[e[i]]._loadInterrupted && this._groups[e[i]].filesLoadedCallback(!0, this._groups[e[i]]._loadedFiles) | |
}, t.prototype.prepareFile = function(e) { | |
this._fileInfo.push(e) | |
}, t.prototype.prepareFiles = function(e) { | |
var t, n; | |
for (t = 0, n = e.length; t < n; t++) this.prepareFile(e[t]) | |
}, t.prototype.addFile = function(e, t) { | |
this._files[e.id] = t, this._groups[e.load_group].progress.bufferedFiles++, this._groups[e.load_group]._loadedFiles = this._groups[e.load_group]._loadedFiles || [], this._groups[e.load_group]._loadedFiles.push(e), this.sendProgressCallback(e.load_group), this._groups[e.load_group].progress.bufferedFiles == this._groups[e.load_group].progress.totalFiles && !this._groups[e.load_group].loadInterrupted && this._groups[e.load_group].filesLoadedCallback && this._groups[e.load_group].filesLoadedCallback(!0, this._groups[e.load_group]._loadedFiles || []) | |
}, t.prototype.freeSoundFiles = function(e) { | |
typeof e == "string" && (e = [e]); | |
for (var t = 0, n = this._fileInfo.length; t < n; t++) { | |
var r = this._fileInfo[t]; | |
e.indexOf(r.load_group) != -1 && (this._files[r.id] = null) | |
} | |
}, t.prototype.getLoadGroups = function() { | |
var e, t = this._fileInfo || [], | |
n = {}, | |
r = []; | |
for (e = 0; e < t.length; e++) { | |
var i = t[e]; | |
n[i.load_group] = i.load_group | |
} | |
for (e in n) r.push(e); | |
return r | |
}, t.prototype.getFile = function(e) { | |
return this._files[e] || null | |
}, t.prototype.getFilesForLoadgroup = function(e) { | |
var t = []; | |
for (var n = 0, r = this._fileInfo.length; n < r; n++) this._fileInfo[n].load_group == e && t.push(this._fileInfo[n]); | |
return t | |
}, t.prototype.getFileInfo = function(e) { | |
for (var t = 0, n = this._fileInfo.length; t < n; t++) | |
if (this._fileInfo[t].id == e) return this._fileInfo[t]; | |
return undefined | |
}, Object.defineProperty(t.prototype, "progress", { | |
get: function() { | |
return this._groups | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "baseURL", { | |
set: function(e) { | |
this._baseURL = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "fileInfo", { | |
set: function(e) { | |
this._fileInfo = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t | |
}(); | |
t.FileHandler = s; | |
var o = function() { | |
function t(t, n) { | |
this._name = n, this._type = t.type, this._output = e.context.createGain(), this._volume = t.volume != undefined ? t.volume : 1, this._output.gain.value = this._volume, t.destination_name && (this.destinationName = t.destination_name, r.instance.initComplete || r.instance.pushToConnectStack(this)) | |
} | |
return t.prototype.connect = function(t) { | |
return e.warn("Audio: Invocation of abstract method: Audio.connect in", this), this | |
}, t.prototype.disconnect = function() { | |
return e.warn("Audio: Invocation of abstract method: Audio.disconnect in", this), this | |
}, t.prototype.play = function(t, n) { | |
return e.warn("Audio: Invocation of abstract method: Audio.play in", this), this | |
}, t.prototype.stop = function(t) { | |
return e.warn("Audio: Invocation of abstract method: Audio.stop in", this), this | |
}, t.prototype.pause = function() { | |
return e.warn("Audio: Invocation of abstract method: Audio.pause in", this), this | |
}, t.prototype.unpause = function() { | |
return e.warn("Audio: Invocation of abstract method: Audio.unpause in", this), this | |
}, t.prototype.curvePlaybackRate = function(t, n) { | |
return e.warn("Audio: Invocation of abstract method: Audio.curvePlaybackRate in", this), this | |
}, t.prototype.fadeInAndPlay = function(e, t) { | |
return console.warn("Audio: Invocation of abstract method: Audio.fadeInAndPlay in", this), this | |
}, t.prototype.fadeOutAndStop = function(e, t) { | |
return console.warn("Audio: Invocation of abstract method: Audio.fadeOutAndStop in", this), this | |
}, t.prototype.deschedule = function() { | |
return console.warn("Audio: Invocation of abstract method: Audio.deschedule in", this), this | |
}, Object.defineProperty(t.prototype, "playbackRate", { | |
set: function(t) { | |
return e.warn("Audio: Invocation of abstract property: Audio.playbackRate in", this), this | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "playing", { | |
get: function() { | |
return e.warn("Audio: Invocation of abstract property: Audio.playing in", this), !1 | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "duration", { | |
get: function() { | |
return e.warn("Audio: Invocation of abstract property: Audio.duration in", this), 0 | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "output", { | |
get: function() { | |
return this._output | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "playbackState", { | |
get: function() { | |
return e.warn("Audio: Invocation of abstract property: Audio.playbackState in", this), 0 | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t.prototype.setData = function(e) { | |
this._volume = e.volume == undefined ? 1 : e.volume, this._output.gain.value = this._volume, this.destinationName != e.destination_name && (this.destinationName = e.destination_name, this.disconnect(), this.connect(r.instance.findInstance(this.destinationName).input)) | |
}, t | |
}(); | |
t.Audio = o; | |
var u = function(n) { | |
function o(e, t) { | |
n.call(this, e, t), this._sources = [], this._startTime = 0, this._loopStartTime = 0, this._scheduleAhead = .2, this._stopping = !1, this._fading = !1, this._paused = !1, this._pauseTime = -1, this._pauseStartTime = -1, this.data = e, this.editorName = e.editorName, this._fileId = e.file_id, this._playbackRate = e.playback_rate || 1, this._endTime = 0, this._loop = e.loop != undefined ? e.loop : !1, this._loopStart = e.loop_start, this._loopEnd = e.loop_end, this._offset = e.offset || 0, this._duration = e.duration || 0, this._reverse = e.reverse, this._retrig = e.retrig != undefined ? e.retrig : !0, this._lockPlaybackrate = e.lock_playback_rate != undefined ? e.lock_playback_rate : !1, this._volumeStartRange = e.volume_start_range, this._volumeEndRange = e.volume_end_range, this._pitchStartRange = e.pitch_start_range, this._pitchEndRange = e.pitch_end_range, e.panner && (this._panner = e.panner); | |
if (e.granular) { | |
this._granular = { | |
bufferDuration: 0, | |
speed: e.granular.speed || .3333, | |
pitch: e.granular.pitch || 0, | |
pitchRandomization: e.granular.pitch_randomization || 0, | |
timeRandomization: e.granular.time_randomization || 0, | |
realTime: 0, | |
grainTime: 0, | |
grainDuration: e.granular.grain_duration || .09, | |
grainSpacing: e.granular.grain_spacing || .045, | |
grainWindow: null | |
}; | |
var i = 16384; | |
this._granular.grainWindow = new Float32Array(i); | |
for (var s = 0; s < i; ++s) this._granular.grainWindow[s] = Math.sin(Math.PI * s / i) | |
} | |
r.instance.pushToPostLoadInitStack(this) || this.init() | |
} | |
return i(o, n), o.prototype.init = function() { | |
this._fileId && (typeof this._fileId == "string" ? this._buffer = s.instance.getFile(this._fileId) : this._fileId.sampleRate && (this._buffer = this._fileId)); | |
if (!this._buffer) return; | |
this._duration || (this._duration = this._buffer.duration), this._granular && (this._granular.bufferDuration = this._buffer.duration - .05); | |
if (this._reverse) { | |
var t = e.context.createBuffer(this._buffer.numberOfChannels, this._buffer.length, e.context.sampleRate); | |
for (var n = 0; n < this._buffer.numberOfChannels; n++) { | |
var r = this._buffer.getChannelData(n), | |
i = t.getChannelData(n); | |
for (var o = r.length, u = o - 1; u >= 0; u--) i[o - u] = r[u] | |
} | |
this._buffer = t | |
} | |
if (this.data.xfade) { | |
var f = e.context.createBuffer(this._buffer.numberOfChannels, this._buffer.length, e.context.sampleRate); | |
for (var n = 0; n < this._buffer.numberOfChannels; n++) { | |
var r = this._buffer.getChannelData(n), | |
l = f.getChannelData(n); | |
for (var o = r.length, u = o - 1; u >= 0; u--) l[u] = r[u] | |
} | |
this._buffer = f; | |
var c = e.context.sampleRate, | |
h = this.data.xfade === !0 ? 11025 : this.data.xfade * c, | |
p = this._loopStart == undefined ? h : Math.round(this._loopStart * c), | |
d = this._loopEnd == undefined ? this._buffer.length : Math.round(this._loopEnd * c); | |
a(this._buffer, p, d, h) | |
} | |
}, o.prototype.setLoopRegion = function(e, t) { | |
this._loopStart = e || this._loopStart, this._loopEnd = t || this._loopEnd; | |
for (var n = 0, r = this._sources.length; n < r; n++) { | |
var i = this._sources[n]; | |
i.loopStart = this._loopStart, i.loopEnd = this._loopEnd | |
} | |
return this | |
}, o.prototype.connect = function(e, t) { | |
if (!this._destination || t) this._destination = e, this._panner ? (this._output.connect(this._panner.input), this._panner.output.connect(e)) : this._output.connect(e); | |
return this | |
}, o.prototype.disconnect = function() { | |
return this._output.disconnect(), this._destination = null, this._panner && this._panner.output.disconnect(), this | |
}, o.prototype.scheduleGrain = function() { | |
if (!this._buffer) return; | |
var t = this._granular, | |
n = e.context.createBufferSource(); | |
n.buffer = this._buffer; | |
var r = Math.random(), | |
i = Math.random(), | |
s = Math.random(), | |
o = Math.random(), | |
u = Math.random(); | |
r = (r - .5) * 2, i = (i - .5) * 2, s = (s - .5) * 2, o = (o - .5) * 2; | |
var a = e.context.createGain(); | |
n.connect(a), a.connect(this._output); | |
var f = this._granular.pitch + r * t.pitchRandomization, | |
l = Math.pow(2, f / 1200); | |
n.playbackRate.value = l; | |
var c = i * t.timeRandomization; | |
n.start(t.realTime, t.grainTime + c, t.grainDuration); | |
var h = t.grainDuration / l; | |
a.gain.value = 0, a.gain.setValueCurveAtTime(t.grainWindow, t.realTime, h); | |
var p = t.grainTime; | |
t.realTime += t.grainSpacing, t.grainTime += t.speed * t.grainSpacing, t.grainTime > t.bufferDuration && (t.grainTime = 0, this._loop || this.stop()), t.grainTime < 0 && (t.grainTime += t.bufferDuration, this._loop || this.stop()) | |
}, o.prototype.granularSchedule = function(t) { | |
while (this._granular.realTime < t + .1) this.scheduleGrain(); | |
var n = this; | |
this._granular.scheduleId = setTimeout(function() { | |
n.granularSchedule(e.context.currentTime) | |
}, 20) | |
}, o.prototype.play = function(t, n, i) { | |
typeof t == "undefined" && (t = 0), typeof n == "undefined" && (n = 0), typeof i == "undefined" && (i = !1), this.removeUnusedSources(); | |
if (!this._buffer) { | |
this.init(); | |
if (!this._buffer) { | |
e.warn("AudioSource: Buffer not found!", this._name); | |
return | |
} | |
} | |
t = t || 0; | |
if (this._granular) this.granularSchedule(t); | |
else { | |
if (t != 0 && t + .01 <= e.context.currentTime) return e.warn("AudioSource: Returned, playTime < currentTime", this._name), this; | |
t == 0 && (t = e.context.currentTime), this.output.gain.cancelScheduledValues(t), this._volumeStartRange != undefined ? this.output.gain.setValueAtTime(this._volume * (Math.random() * (this._volumeEndRange - this._volumeStartRange) + this._volumeStartRange), t) : this.output.gain.setValueAtTime(this._volume, t), this.paused || (this._pauseStartTime = t), i || (this._pauseTime = 0), this._startTime = t, this._loopStartTime = t + this.duration, this._paused = !1; | |
if (this._stopping && !this._retrig) { | |
this.output.gain.cancelScheduledValues(t), this.output.gain.setValueAtTime(this.output.gain.value, t), this.output.gain.linearRampToValueAtTime(this._volume, t + .25), clearTimeout(this._stoppingId), this._stopping = !1; | |
return | |
}!this._fading, this._fading = !1; | |
if (!this._retrig && !this.loop) { | |
if (t < this._endTime) return | |
} else if (this.loop && !this._retrig) { | |
if (this._endTime == -1 || t < this._endTime) return | |
} else { | |
if (this.loop && this._retrig && this.playing && !this._stopping) return; | |
if (this._stopping) this._stopping = !1; | |
else if (Math.round(this._endTime * 1e3) / 1e3 == Math.round((t + this._buffer.duration) * 1e3) / 1e3) return e.warn("AudioSource: Returned, Doubletrig", this._name), this | |
} | |
this._endTime = this.loop ? -1 : t + this._buffer.duration; | |
var s = this.createBufferSource(); | |
s.buffer = this._buffer, this._loop && (s.loop = !0, s.loopStart = this._loopStart ? this._loopStart : 0, s.loopEnd = this._loopEnd ? this._loopEnd : this._buffer.duration), this._destination || e.warn("AudioSource: no destination node"), typeof this._destination != "object" && e.warn("AudioSource: destination is not an object", this._name), s.connect(this._output), n > this._duration && (n %= this._duration), this._startOffset = this._offset + n; | |
var o = this._duration; | |
this._pitchStartRange != undefined && (s.playbackRate.value = this._playbackRate * (Math.random() * (this._pitchEndRange - this._pitchStartRange) + this._pitchStartRange)), s.startTime = t, s.start(t, this._startOffset, o || s.buffer.duration), r.callbacks && r.callbacks.scheduleAudioSource && r.callbacks.scheduleAudioSource({ | |
audio: this, | |
startTime: t | |
}) | |
} | |
return this | |
}, o.prototype.getNumberOfSamples = function() { | |
return this._buffer.length | |
}, o.prototype.stop = function(e) { | |
typeof e == "undefined" && (e = 0); | |
if (this._granular) clearTimeout(this._granular.scheduleId); | |
else { | |
this._stopping && (this._stopping = !1, clearTimeout(this._stoppingId)); | |
var t = this._sources.length; | |
if (t > 0) { | |
e = e || j.now(), this._loop && (this._loopPlaying = !1), this._endTime = e; | |
if (this._retrig) this._sources[this._sources.length - 1].stop(e), this._sources.splice(this._sources.length - 1, 1); | |
else { | |
for (var n = 0; n < t; n++) { | |
var r = this._sources[n]; | |
r.stop(e), this._endTime = j.now() | |
} | |
this._sources = [] | |
} | |
} else this._loopPlaying = !1 | |
} | |
return this | |
}, o.prototype.deschedule = function() { | |
for (var t = 0; t < this._sources.length; t++) { | |
var n = this._sources[t]; | |
n.startTime > e.context.currentTime && (n.stop(0), this._sources[t].disconnect(), n.disconnect(), this._sources.splice(t, 1), t--) | |
} | |
return this | |
}, o.prototype.pause = function() { | |
if (this._endTime > j.now()) { | |
this._paused = !0; | |
var e = j.now() - this._startTime; | |
this._pauseTime += e, this.stop() | |
} | |
return this | |
}, o.prototype.unpause = function() { | |
if (this.paused) { | |
var e = this._offset; | |
this._offset += this._pauseTime, this.play(0, 0, !0), this._offset = e, this._paused = !1 | |
} | |
return this | |
}, o.prototype.createBufferSource = function() { | |
var t = e.context.createBufferSource(); | |
return t.playbackRate.value = this._playbackRate, this._sources.push(t), t | |
}, o.prototype.fadeInAndPlay = function(t, n, r) { | |
typeof r == "undefined" && (r = 0); | |
var i = e.context.currentTime; | |
n || (n = i); | |
if (this.loop && !this._retrig && (this._endTime == -1 || n < this._endTime) && !this._stopping) return; | |
if (this.loop && this._retrig && this.playing && !this._stopping) return; | |
this.output.gain.cancelScheduledValues(n); | |
if (this._stopping && !this._retrig) clearTimeout(this._stoppingId), this.output.gain.setValueAtTime(this.output.gain.value, n); | |
else { | |
if (this._stopping && this._retrig) { | |
this._fading = !0, this.play(n == i ? 0 : n, r); | |
var s = e.context.createGain(); | |
this._sources[this._sources.length - 1].disconnect(), this._sources[this._sources.length - 1].connect(s), s.connect(this.output), s.gain.setValueAtTime(0, n), s.gain.linearRampToValueAtTime(1, n + t), this._stopping = !1; | |
return | |
} | |
this._fading = !0, this.play(n == i ? 0 : n, r), this.output.gain.setValueAtTime(0, n) | |
} | |
return this._stopping = !1, this.output.gain.linearRampToValueAtTime(this._volume, n + t), this | |
}, o.prototype.fadeOutAndStop = function(t, n) { | |
if (!this.playing) return; | |
n == undefined && (n = e.context.currentTime), this._stopping && clearTimeout(this._stoppingId); | |
if (this._retrig && !this._stopping) { | |
var r = e.context.createGain(); | |
this._sources[this._sources.length - 1].disconnect(), this._sources[this._sources.length - 1].connect(r); | |
var i = this; | |
this._sources[this._sources.length - 1].hasOwnProperty("onended") ? this._sources[this._sources.length - 1].onended = function() { | |
i._stopping = !1 | |
} : this._stoppingId = setTimeout(function() { | |
i._stopping = !1 | |
}, (t + (n - j.now()) - i._scheduleAhead) * 1e4), r.connect(this.output), r.gain.setValueAtTime(1, n), r.gain.linearRampToValueAtTime(0, n + t), this.stop(n + t) | |
} else if (!this._retrig) { | |
this.output.gain.cancelScheduledValues(n), this.output.gain.setValueAtTime(this.output.gain.value || this._volume, n), this.output.gain.linearRampToValueAtTime(0, n + t); | |
var i = this; | |
this._stoppingId = setTimeout(function() { | |
if (!i._stopping) return; | |
i._stopping = !1, i.loop && (i._loopPlaying = !1), i.stop(n + t) | |
}, (t + (n - j.now()) - i._scheduleAhead) / .001) | |
} | |
return this._stopping = !0, this | |
}, o.prototype.removeUnusedSources = function() { | |
for (var t = 0; t < this._sources.length; t++) { | |
var n = this._sources[t]; | |
if (!n.buffer || !this.loop && n.startTime + n.buffer.duration < e.context.currentTime) this._sources[t].disconnect(), this._sources.splice(t, 1), t-- | |
} | |
}, o.prototype.curvePlaybackRate = function(e, t) { | |
if (this._lockPlaybackrate) return; | |
var n = this.playbackRateNode; | |
return n && (n.cancelScheduledValues(j.now()), n.setValueAtTime(n.value == 0 ? j.EXP_MIN_VALUE : n.value, j.now()), n.exponentialRampToValueAtTime(e, j.now() + t)), this._playbackRate = e, this | |
}, Object.defineProperty(o.prototype, "lastSource", { | |
get: function() { | |
var e = this._sources.length; | |
return e == 0 ? null : this._sources[e - 1] | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "loop", { | |
get: function() { | |
return this._loop | |
}, | |
set: function(e) { | |
this._loop = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "offset", { | |
get: function() { | |
return this._offset | |
}, | |
set: function(e) { | |
typeof e == "string" && e.indexOf("%") !== -1 && (e = this._duration * parseFloat(e)), this._offset = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "position", { | |
get: function() { | |
if (!this.playing || !this._duration) return 0; | |
var e = this._duration; | |
if (this._loopStart || this._loopEnd) e = (this._loopEnd || e) - (this._loopStart || 0); | |
var t = j.now() - this._startTime, | |
n = j.now() + this._startOffset - this._loopStartTime; | |
return this._startOffset + t > this._duration ? this._loopStart + n % e : this._startOffset + t | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "duration", { | |
get: function() { | |
return this._duration | |
}, | |
set: function(e) { | |
this._duration = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "paused", { | |
get: function() { | |
return this._paused | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "playbackRate", { | |
get: function() { | |
return this._playbackRate | |
}, | |
set: function(e) { | |
if (this._lockPlaybackrate) return; | |
var t = this.playbackRateNode; | |
t && t.cancelScheduledValues(j.now()), this._playbackRate = e; | |
for (var n = 0, r = this._sources.length; n < r; n++) this._sources[n].playbackRate.value = this._playbackRate | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "nextPlaybackRate", { | |
set: function(e) { | |
if (this._lockPlaybackrate) return; | |
this._playbackRate = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "playbackRateNode", { | |
get: function() { | |
var e = this.lastSource; | |
return e && e.playbackRate | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "buffer", { | |
get: function() { | |
return this._buffer || (this._buffer = s.instance.getFile(this._fileId)), this._buffer | |
}, | |
set: function(e) { | |
this._buffer = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "playing", { | |
get: function() { | |
return this._endTime == -1 || this._endTime > j.now() | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "playbackState", { | |
get: function() { | |
var e = this.lastSource; | |
return e ? e.playbackState : 0 | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "output", { | |
get: function() { | |
return this._panner ? this._panner.output : this._output | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(o.prototype, "panner", { | |
get: function() { | |
return this._panner | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), o.prototype.freeBuffer = function() { | |
this._buffer = null; | |
for (var e = 0, t = this._sources.length; e < t; e++) { | |
try { | |
this._sources[e].stop(0) | |
} catch (n) {} | |
this._sources[e].disconnect(), this._sources[e] = null | |
} | |
this._sources = [] | |
}, o.prototype.setData = function(e) { | |
n.prototype.setData.call(this, e); | |
var r = !1; | |
this._volumeStartRange = e.volume_start_range, this._volumeEndRange = e.volume_end_range, this._pitchEndRange = e.pitch_end_range, this._pitchStartRange = e.pitch_start_range, e.file_id != undefined && this._fileId != e.file_id && (this._fileId = e.file_id, r = !0), this._playbackRate = e.playback_rate == undefined ? 1 : e.playback_rate, this.playbackRateNode && (this.playbackRateNode.value = this._playbackRate), this._loop = e.loop == undefined ? !1 : e.loop, this.lastSource && (this.lastSource.loop = this._loop), this._loop || (this._loopPlaying = !1), this._loopStart = e.loop_start == undefined ? 0 : e.loop_start, this.lastSource && (this.lastSource.loopStart = this._loopStart), this._loopEnd = e.loop_end == undefined ? 0 : e.loop_end, this.lastSource && (this.lastSource.loopEnd = this._loopEnd); | |
var i = e.offset == undefined ? 0 : e.offset; | |
this._offset != i && (this._offset = i, r = !0); | |
var s = e.duration == undefined ? 0 : e.duration; | |
this._duration != s && (this._duration = s, r = !0), this._retrig = e.retrig == undefined ? !0 : e.retrig, e.reverse == undefined && (e.reverse = !1), this._reverse != e.reverse && (this._reverse = e.reverse, r = !0), e.xfade == undefined && (e.xfade = !1), this.data.xfade != e.xfade && (r = !0), this.data = e, r && this.init(); | |
if (e.granular) | |
if (this._granular) e.granular.speed != undefined && (this._granular.speed = e.granular.speed), e.granular.pitch != undefined && (this._granular.pitch = e.granular.pitch), e.granular.pitch_randomization != undefined && (this._granular.pitchRandomization = e.granular.pitch_randomization), e.granular.time_randomization != undefined && (this._granular.timeRandomization = e.granular.time_randomization), e.granular.grain_duration != undefined && (this._granular.grainDuration = e.granular.grain_duration), e.granular.grain_spacing != undefined && (this._granular.grainSpacing = e.granular.grain_spacing); | |
else { | |
this._granular = { | |
bufferDuration: this._buffer.duration - .05, | |
speed: e.granular.speed || .3333, | |
pitch: e.granular.pitch || 0, | |
pitchRandomization: e.granular.pitch_randomization || 0, | |
timeRandomization: e.granular.time_randomization || 0, | |
realTime: 0, | |
grainTime: 0, | |
grainDuration: e.granular.grain_duration || .09, | |
grainSpacing: e.granular.grain_spacing || .045, | |
grainWindow: null | |
}; | |
var o = 16384, | |
u = new Float32Array(o); | |
for (var a = 0; a < o; ++a) u[a] = Math.sin(Math.PI * a / o); | |
this._granular.grainWindow = u | |
} else this._granular && (clearTimeout(this._granular.scheduleId), this._granular = null); | |
if (e.panner) | |
if (!this._panner) { | |
var f = this._destination; | |
this.disconnect(), this._panner = new t.Panner(e.panner), this.connect(f) | |
} else this._panner.setData(e.panner); | |
else if (!e.panner && this._panner) { | |
var f = this._destination; | |
this.disconnect(), this._panner = null, this.connect(f) | |
} | |
}, o | |
}(o); | |
t.AudioSource = u, t.crossfade = a; | |
var f = { | |
CONCURRENT: 0, | |
STEP: 1, | |
RANDOM: 2, | |
SHUFFLE: 3, | |
BACKWARDS: 4 | |
}, | |
l = { | |
NONE: 0, | |
ONE: 1, | |
INFINITE: 2 | |
}, | |
c = function(t) { | |
function n(e, n) { | |
t.call(this, e, n), this._adder = 0, this._currentId = 0, this._paused = !1, this._groupType = e.group_type != undefined ? e.group_type : f.STEP, this._retrig = e.retrig != undefined ? e.retrig : !0, this._queue = e.queue != undefined ? e.queue : l.NONE, this._content = e.content || [], r.instance.pushToPreLoadInitStack(this) | |
} | |
return i(n, t), n.prototype.init = function() { | |
var e = []; | |
for (var t = 0, n = this._content.length; t < n; t++) e.push(r.instance.findInstance(this._content[t])); | |
this._content = e | |
}, n.prototype.connect = function(e) { | |
for (var t = 0, n = this._content.length; t < n; t++) { | |
var r = this._content[t]; | |
r.disconnect(), r.connect(this._output) | |
} | |
return this._output.connect(e), this | |
}, n.prototype.disconnect = function() { | |
return this._output.disconnect(), this | |
}, n.prototype.play = function(t, n, r) { | |
if (!this._content.length) return; | |
var i = this.latestPlayed ? this.latestPlayed.playing : !1; | |
if (!r && !this._retrig && i) return this._queue != l.NONE && (this._queue == l.ONE && this._latestStartTime > e.context.currentTime ? (this.latestPlayed.stop(), this.play(this._latestStartTime, n, !0)) : this.play(this._latestStartTime + this.latestPlayed.duration, n, !0)), this; | |
this._paused = !1; | |
if (n != undefined) { | |
var s; | |
typeof n == "number" ? s = n : typeof n == "string" ? s = this.getIdFromString(n) : n._name && (s = this.getIdFromString(n._name)), this._content[s].play(t), this._latestPlayed = this._content[s] | |
} else { | |
if (this._groupType == f.CONCURRENT) | |
for (var o = 0, u = this._content.length; o < u; o++) this._content[o].play(t); | |
else this._currentId = this.getIdToPlay(), this._content[this._currentId].play(t); | |
this._groupType === f.CONCURRENT ? this._latestPlayed = this._content[0] : this._latestPlayed = this._content[this._currentId] | |
} | |
return this._latestStartTime = t || e.context.currentTime, this | |
}, n.prototype.getIdToPlay = function() { | |
var e; | |
if (this._groupType == f.STEP) this._adder < 0 ? e = this._content.length - 1 + this._adder % this._content.length : e = this._adder % this._content.length, this._adder++; | |
else if (this._groupType == f.RANDOM) { | |
var t = Math.floor(Math.random() * (this._content.length - 1)); | |
this._content.length > 1 && t == this._adder && (t = (t + 1) % this._content.length), e = this._adder = t | |
} else this._groupType == f.SHUFFLE ? (this._adder % this._content.length == 0 && j.shuffle(this._content), e = this._adder % this._content.length, this._adder++) : this._groupType == f.BACKWARDS && (this._adder < 0 ? e = this._content.length - 1 + this._adder % this._content.length : e = this._adder % this._content.length, this._adder--); | |
return e | |
}, n.prototype.stop = function(e) { | |
return this._content[this._currentId].stop(e), this | |
}, n.prototype.pause = function() { | |
return this._paused = !0, this._latestPlayed && this._latestPlayed.pause(), this | |
}, n.prototype.unpause = function() { | |
return this._paused = !1, this._latestPlayed && this._latestPlayed.unpause(), this | |
}, n.prototype.fadeInAndPlay = function(e, t) { | |
var n = this.latestPlayed ? this.latestPlayed.playing : !1; | |
if (!this._retrig && n) return; | |
return this._currentId = this.getIdToPlay(), this._latestPlayed = this._content[this._currentId], this._content[this._currentId].fadeInAndPlay(e, t), this | |
}, n.prototype.fadeOutAndStop = function(t, n) { | |
return n == undefined && (n = e.context.currentTime), this._latestPlayed && this._latestPlayed.fadeOutAndStop(t, n), this | |
}, n.prototype.curvePlaybackRate = function(e, t) { | |
for (var n = 0, r = this._content.length; n < r; n++) this._content[n].curvePlaybackRate(e, t); | |
return this | |
}, n.prototype.deschedule = function() { | |
for (var e = 0, t = this._content.length; e < t; e++) this._content[e].deschedule(); | |
return this | |
}, n.prototype.getIdFromString = function(e) { | |
for (var t = 0, n = this._content.length; t < n; t++) | |
if (this._content[t]._name == e) return t | |
}, Object.defineProperty(n.prototype, "playbackRate", { | |
set: function(e) { | |
for (var t = 0, n = this._content.length; t < n; t++) this._content[t].playbackRate = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(n.prototype, "groupType", { | |
get: function() { | |
return this._groupType | |
}, | |
set: function(e) { | |
this._groupType = e | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(n.prototype, "content", { | |
get: function() { | |
return this._content | |
}, | |
set: function(e) { | |
this._content = e, this.init() | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), n.prototype.addContent = function(e) { | |
this._content.push(e) | |
}, n.prototype.removeContent = function(e) { | |
for (var t = 0; t < this._content.length; t++) this._content[t]._name === e && this._content.splice(t, 1) | |
}, Object.defineProperty(n.prototype, "playing", { | |
get: function() { | |
return this._latestPlayed ? this._latestPlayed.playing : !1 | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(n.prototype, "duration", { | |
get: function() { | |
return this._latestPlayed ? this._latestPlayed.duration : this._content[0].duration | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(n.prototype, "playbackState", { | |
get: function() { | |
return this._content[this._currentId].playbackState | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(n.prototype, "latestPlayed", { | |
get: function() { | |
return this._latestPlayed | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), n.prototype.setData = function(e) { | |
t.prototype.setData.call(this, e), this._groupType = e.group_type == undefined ? f.STEP : e.group_type, this._retrig = e.retrig == undefined ? !0 : e.retrig, this._queue = e.queue == undefined ? l.NONE : e.queue, e.content && (this._content = e.content, this.init()) | |
}, n | |
}(o); | |
t.AudioGroup = c; | |
var h = function() { | |
function t(e) { | |
this._startValue = e.start_value || 0, this._points = e.points || [] | |
} | |
return t.prototype.automate = function(t, n) { | |
n = n || e.context.currentTime, t.cancelScheduledValues(n), t.setValueAtTime(this._startValue, n); | |
var r = 0; | |
for (var i = 0, s = this._points.length; i < s; i++) { | |
var o = this._points[i]; | |
switch (o.curve) { | |
case "lin": | |
t.linearRampToValueAtTime(o.value, n + o.time); | |
break; | |
case "exp": | |
t.exponentialRampToValueAtTime(o.value, n + o.time); | |
break; | |
default: | |
if (!j.CUSTOM_CURVES[o.curve]) { | |
e.warn("Automation: Invalid curve type: " + o.curve); | |
break | |
} | |
t.setValueCurveAtTime(j.CUSTOM_CURVES[o.curve], n + r, o.time - r) | |
} | |
r = o.time | |
} | |
}, t | |
}(); | |
t.Automation = h; | |
var p = function() { | |
function t(t, n) { | |
this._name = n, this._type = t.type, this._input = e.context.createGain(), this._output = e.context.createGain(), this._effects = t.effects || []; | |
for (var i = 0, s = this._effects.length; i < s; i++) t.effects[i].active === !1 && this._effects[i].setActive(!1); | |
this._input.gain.value = t.input_vol !== undefined ? t.input_vol : 1, this._output.gain.value = t.output_vol !== undefined ? t.output_vol : 1, t.destination_name && (this.destinationName = t.destination_name, r.instance.pushToConnectStack(this)), r.instance.pushToPreLoadInitStack(this) | |
} | |
return t.prototype.init = function() { | |
var e = this._input; | |
for (var t = 0, n = this._effects.length; t < n; t++) e.disconnect(), e.connect(this._effects[t].input), e = this._effects[t]; | |
e.connect(this._output) | |
}, t.prototype.connect = function(e) { | |
return this._output.connect(e), this | |
}, t.prototype.disconnect = function() { | |
return this._output.disconnect(), this | |
}, t.prototype.insertEffect = function(e, t) { | |
var n = r.instance.createObject(undefined, e, { | |
excludeFromTable: !0 | |
}); | |
return t == undefined ? this._effects.push(n) : this._effects.splice(t, 0, n), this.init(), this | |
}, t.prototype.moveEffect = function(e, t) { | |
for (var n = 0, r = this._effects.length; n < r; n++) this._effects[n].disconnect(); | |
var i = this._effects[e]; | |
return this._effects.splice(e, 1), this._effects.splice(t, 0, i), this.init(), this | |
}, Object.defineProperty(t.prototype, "input", { | |
get: function() { | |
return this._input | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "output", { | |
get: function() { | |
return this._output | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "effects", { | |
get: function() { | |
return this._effects | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t.prototype.setData = function(e) { | |
this._input.gain.value = e.input_vol == undefined ? 1 : e.input_vol, this._output.gain.value = e.output_vol == undefined ? 1 : e.output_vol; | |
if (e.effects.length < this.effects.length) { | |
this.input.disconnect(); | |
var t = !1; | |
for (var n = 0; n < this._effects.length; n++) this._effects[n].disconnect(), t || (e.effects[n] == undefined ? (this._effects.splice(n, 1), t = !0) : this._effects[n]._type != e.effects[n].type && (this._effects.splice(n, 1), n--, t = !0)); | |
this.init() | |
} else if (e.effects.length > this.effects.length) this.insertEffect(e.effects[e.effects.length - 1]); | |
else | |
for (var n = 0, i = this._effects.length; n < i; n++) this._effects[n].setData(e.effects[n]); | |
this.destinationName != e.destination_name && (this.destinationName = e.destination_name, this.disconnect(), this.destinationName == "$OUT" ? this.connect(r.instance._superMasterOutput) : this.connect(r.instance.findInstance(this.destinationName).input)) | |
}, t | |
}(); | |
t.Bus = p; | |
var d = function() { | |
function t(t) { | |
this.active = !0, this._type = t.type, this._input = e.context.createGain != undefined ? e.context.createGain() : e.context.createGainNode(), this._output = e.context.createGain != undefined ? e.context.createGain() : e.context.createGainNode(), t.active === !1 && (this.active = !1) | |
} | |
return t.prototype.connect = function(e) { | |
return this._output.connect(e), this | |
}, t.prototype.disconnect = function() { | |
return this._output.disconnect(), this | |
}, t.prototype.setActive = function(t) { | |
return e.warn("Effect: Invocation of abstract method: Effect.setActive in", this), this | |
}, Object.defineProperty(t.prototype, "input", { | |
get: function() { | |
return this._input | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), Object.defineProperty(t.prototype, "output", { | |
get: function() { | |
return this._output | |
}, | |
enumerable: !0, | |
configurable: !0 | |
}), t | |
}(); | |
t.Effect = d; | |
var v = function(t) { | |
function n(r) { | |
t.call(this, r), this._name = r.name, this._panner = e.context.createPanner(), this._input.connect(this._panner), this._panner.connect(this._output), r.panning_model != undefined && (this._panner.panningModel = r.panning_model), r.distance_model != undefined && (this._panner.distanceModel = |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment