var dom = {
getOffset: function (e, t, i) {
for (left = "left" == e ? t.offsetLeft : t.offsetTop, i = i || $("body")[0];
(t = t.offsetParent) && t != i;) left += "left" == e ? t.offsetLeft : t.offsetTop;
return left
}
};
if (function () {
"use strict";
function o(e, t) {
return typeof e === t
}
function a(e, t) {
return e instanceof t
}
function s(e) {
return e && e.nodeType
}
function l(e) {
return s(e) ? e : a(e, y) ? e[0] : void 0
}
function e(e, i, n) {
return y.each(e, function (e, t) {
n = i.call(t, n, e, t)
}), n
}
function t(e, t, i) {
var n, r, o;
if (e === t) return !0;
if (!e || !t || e.constructor !== t.constructor) return !1;
for (n = 0, r = i.length; n < r; n += 1) {
if (e[o = i[n]] && E(e[o].equals) && !e[o].equals(t[o])) return !1;
if (e[o] !== t[o]) return !1
}
return !0
}
function c(e, t, i, n) {
this.left = w(e), this.top = w(t), this.width = w(i), this.height = w(n), this.right = this.left + this.width, this.bottom = this.top + this.height
}
function h(e, t, i, n) {
this.visible = e || 0, this.viewport = t || 0, this.possible = i || 0, this.rects = n && I({}, n) || null
}
function r(e, t) {
this.els = e, this.viewport = t
}
function n(e, t) {
return e.val - t.val
}
function u(e, t) {
return t.val - e.val
}
function d(e) {
var t = c.ofContent(e, !0),
i = c.ofViewport(e, !0),
n = t.width - i.width,
r = t.height - i.height;
this.content = t, this.viewport = i, this.width = n <= 0 ? null : i.left / n, this.height = r <= 0 ? null : i.top / r, this.left = i.left, this.top = i.top, this.right = t.right - i.right, this.bottom = t.bottom - i.bottom
}
function p(e) {
this.el = e || window
}
function f(e, t) {
this.context = e, this.viewport = t, this.init()
}
function g(e, t, i, n) {
this.context = new r(e, t), this.property = i, this.descending = n, this.init()
}
function m(e) {
e && e !== window && e !== document ? (this.context = e, this.$autoTarget = y(e)) : this.context = window, this.init()
}
var i, v, y = jQuery,
A = y(window),
C = y(document),
I = y.extend,
E = y.isFunction,
_ = Math.max,
b = Math.min,
w = Math.round,
T = (i = {}, v = 1, function (e) {
return e ? (i[e] || (i[e] = v, v += 1), i[e]) : 0
});
I(c.prototype, {
equals: function (e) {
return t(this, e, ["left", "top", "width", "height"])
},
area: function () {
return this.width * this.height
},
relativeTo: function (e) {
return new c(this.left - e.left, this.top - e.top, this.width, this.height)
},
intersection: function (e) {
if (!a(e, c)) return null;
var t = _(this.left, e.left),
i = b(this.right, e.right),
n = _(this.top, e.top),
r = i - t,
o = b(this.bottom, e.bottom) - n;
return 0 <= r && 0 <= o ? new c(t, n, r, o) : null
},
envelope: function (e) {
if (!a(e, c)) return this;
var t = b(this.left, e.left),
i = _(this.right, e.right),
n = b(this.top, e.top);
return new c(t, n, i - t, _(this.bottom, e.bottom) - n)
}
}), I(c, {
ofContent: function (e, t) {
return e && e !== document && e !== window ? t ? new c(0, 0, e.scrollWidth, e.scrollHeight) : new c(e.offsetLeft - e.scrollLeft, e.offsetTop - e.scrollTop, e.scrollWidth, e.scrollHeight) : new c(0, 0, C.width(), C.height())
},
ofViewport: function (e, t) {
return e && e !== document && e !== window ? t ? new c(e.scrollLeft, e.scrollTop, e.clientWidth, e.clientHeight) : new c(e.offsetLeft, e.offsetTop, e.clientWidth, e.clientHeight) : new c(A.scrollLeft(), A.scrollTop(), A.width(), A.height())
},
ofElement: function (e) {
var t = y(e);
if (!t.is(":visible")) return null;
var i = t.offset();
return new c(i.left, i.top, t.outerWidth(), t.outerHeight())
}
}), I(h.prototype, {
equals: function (e) {
return this.fracsEqual(e) && this.rectsEqual(e)
},
fracsEqual: function (e) {
return t(this, e, ["visible", "viewport", "possible"])
},
rectsEqual: function (e) {
return t(this.rects, e.rects, ["document", "element", "viewport"])
}
}), I(h, {
of: function (e, t) {
var i, n, r;
return e = s(e) && c.ofElement(e) || e, t = s(t) && c.ofViewport(t) || t || c.ofViewport(), e instanceof c && (i = e.intersection(t)) ? (n = i.area(), r = b(e.width, t.width) * b(e.height, t.height), new h(n / e.area(), n / t.area(), n / r, {
document: i,
element: i.relativeTo(e),
viewport: i.relativeTo(t)
})) : new h
}
});
var x = ["width", "height", "left", "right", "top", "bottom"],
S = ["possible", "visible", "viewport"];
I(r.prototype, {
sorted: function (t, e) {
var i = this.viewport;
return y.map(this.els, function (e) {
return {
el: e,
val: function (e, t, i) {
var n;
return 0 <= y.inArray(i, x) ? n = c.ofElement(e) : 0 <= y.inArray(i, S) && (n = h.of(e, t)), n ? n[i] : 0
}(e, i, t)
}
}).sort(e ? u : n)
},
best: function (e, t) {
return this.els.length ? this.sorted(e, t)[0] : null
}
}), I(d.prototype, {
equals: function (e) {
return t(this, e, ["width", "height", "left", "top", "right", "bottom", "content", "viewport"])
}
}), I(p.prototype, {
equals: function (e) {
return t(this, e, ["el"])
},
scrollState: function () {
return new d(this.el)
},
scrollTo: function (e, t, i) {
var n = y(this.el === window ? "html,body" : this.el);
e = e || 0, t = t || 0, i = isNaN(i) ? 1e3 : i, n.stop(!0).animate({
scrollLeft: e,
scrollTop: t
}, i)
},
scroll: function (e, t, i) {
var n = this.el === window ? A : y(this.el);
e = e || 0, t = t || 0, this.scrollTo(n.scrollLeft() + e, n.scrollTop() + t, i)
},
scrollToRect: function (e, t, i, n) {
t = t || 0, i = i || 0, this.scrollTo(e.left - t, e.top - i, n)
},
scrollToElement: function (e, t, i, n) {
var r = c.ofElement(e).relativeTo(c.ofContent(this.el));
this.scrollToRect(r, t, i, n)
}
});
var M = {
init: function () {
this.callbacks = y.Callbacks("memory unique"), this.currVal = null, this.prevVal = null, this.checkProxy = y.proxy(this.check, this), this.autoCheck()
},
bind: function (e) {
this.callbacks.add(e)
},
unbind: function (e) {
e ? this.callbacks.remove(e) : this.callbacks.empty()
},
trigger: function () {
this.callbacks.fireWith(this.context, [this.currVal, this.prevVal])
},
check: function (e) {
var t = this.updatedValue(e);
return void 0 !== t && (this.prevVal = this.currVal, this.currVal = t, this.trigger(), !0)
},
$autoTarget: A,
autoEvents: "load resize scroll",
autoCheck: function (e) {
this.$autoTarget[!1 === e ? "off" : "on"](this.autoEvents, this.checkProxy)
}
};
I(f.prototype, M, {
updatedValue: function () {
var e = h.of(this.context, this.viewport);
return this.currVal && this.currVal.equals(e) ? void 0 : e
}
}), I(g.prototype, M, {
updatedValue: function () {
var e = this.context.best(this.property, this.descending);
return e && (e = 0 < e.val ? e.el : null, this.currVal !== e) ? e : void 0
}
}), I(m.prototype, M, {
updatedValue: function () {
var e = new d(this.context);
return this.currVal && this.currVal.equals(e) ? void 0 : e
}
});
var R, P, O, L, D, N, F, B, V, k, U = "fracs";
function H(e, t, i, n) {
return i = N(i) ? i.apply(e, t) : i, N(n[i]) ? n[i].apply(e, t) : void L.error('Method "' + i + '" does not exist on jQuery.' + R)
}
R = U, P = {
statics: {
version: "0.15.0",
Rect: c,
Fractions: h,
Group: r,
ScrollState: d,
Viewport: p,
FracsCallbacks: f,
GroupCallbacks: g,
ScrollStateCallbacks: m,
fracs: function (e, t) {
return h.of(e, t)
}
},
methods: {
content: function (e) {
return this.length ? c.ofContent(this[0], e) : null
},
envelope: function () {
return e(this, function (e) {
var t = c.ofElement(this);
return e ? e.envelope(t) : t
})
},
fracs: function (e, i, n) {
o(e, "string") || (n = i, i = e, e = null), E(i) || (n = i, i = null), n = l(n);
var r = U + ".fracs." + T(n);
return "unbind" === e ? this.each(function () {
var e = y(this).data(r);
e && e.unbind(i)
}) : "check" === e ? this.each(function () {
var e = y(this).data(r);
e && e.check()
}) : E(i) ? this.each(function () {
var e = y(this),
t = e.data(r);
t || (t = new f(this, n), e.data(r, t)), t.bind(i)
}) : this.length ? h.of(this[0], n) : null
},
intersection: function () {
return e(this, function (e) {
var t = c.ofElement(this);
return e ? e.intersection(t) : t
})
},
max: function (e, t, i) {
return E(t) || (i = t, t = null), i = l(i), t ? (new g(this, i, e, !0).bind(t), this) : this.pushStack(new r(this, i).best(e, !0).el)
},
min: function (e, t, i) {
return E(t) || (i = t, t = null), i = l(i), t ? (new g(this, i, e).bind(t), this) : this.pushStack(new r(this, i).best(e).el)
},
rect: function () {
return this.length ? c.ofElement(this[0]) : null
},
scrollState: function (e, i) {
var n = U + ".scrollState";
return o(e, "string") || (i = e, e = null), "unbind" === e ? this.each(function () {
var e = y(this).data(n);
e && e.unbind(i)
}) : "check" === e ? this.each(function () {
var e = y(this).data(n);
e && e.check()
}) : E(i) ? this.each(function () {
var e = y(this),
t = e.data(n);
t || (t = new m(this), e.data(n, t)), t.bind(i)
}) : this.length ? new d(this[0]) : null
},
scroll: function (e, t, i) {
return this.each(function () {
new p(this).scroll(e, t, i)
})
},
scrollTo: function (e, t, i, n) {
return y.isNumeric(e) && (n = i, i = t, t = e, e = null), e = l(e), this.each(function () {
e ? new p(this).scrollToElement(e, t, i, n) : new p(this).scrollTo(t, i, n)
})
},
scrollToThis: function (e, t, i, n) {
return (n = new p(l(n))).scrollToElement(this[0], e, t, i), this
},
softLink: function (t, i, n, r) {
return r = new p(l(r)), this.filter("a[href^=#]").each(function () {
var e = y(this);
e.on("click", function () {
r.scrollToElement(y(e.attr("href"))[0], t, i, n)
})
})
},
sort: function (e, t, i) {
return o(t, "boolean") || (i = t, t = null), i = l(i), this.pushStack(y.map(new r(this, i).sorted(e, !t), function (e) {
return e.el
}))
},
viewport: function (e) {
return this.length ? c.ofViewport(this[0], e) : null
}
},
defaultStatic: "fracs",
defaultMethod: "fracs"
}, O = [].slice, L = jQuery, D = L.extend, N = L.isFunction, F = D({}, P), B = function () {
return H(this, O.call(arguments), F.defaultStatic, B)
}, V = function (e) {
return N(V[e]) ? V[e].apply(this, O.call(arguments, 1)) : H(this, O.call(arguments), F.defaultMethod, V)
}, (k = function (e) {
e && (D(B, e.statics), D(V, e.methods)), B.modplug = k
}).prev = {
statics: L[R],
methods: L.fn[R]
}, k(P), L[R] = B, L.fn[R] = V
}(), "undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery");
! function (m) {
"use strict";
function r(e, t) {
this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", e, t)
}
r.VERSION = "3.2.0", r.DEFAULTS = {
animation: !0,
placement: "top",
selector: !1,
template: '
',
trigger: "hover focus",
title: "",
delay: 0,
html: !1,
container: !1,
viewport: {
selector: "body",
padding: 0
}
}, r.prototype.init = function (e, t, i) {
this.enabled = !0, this.type = e, this.$element = m(t), this.options = this.getOptions(i), this.$viewport = this.options.viewport && m(this.options.viewport.selector || this.options.viewport);
for (var n = this.options.trigger.split(" "), r = n.length; r--;) {
var o = n[r];
if ("click" == o) this.$element.on("click." + this.type, this.options.selector, m.proxy(this.toggle, this));
else if ("manual" != o) {
var a = "hover" == o ? "mouseenter" : "focusin",
s = "hover" == o ? "mouseleave" : "focusout";
this.$element.on(a + "." + this.type, this.options.selector, m.proxy(this.enter, this)), this.$element.on(s + "." + this.type, this.options.selector, m.proxy(this.leave, this))
}
}
this.options.selector ? this._options = m.extend({}, this.options, {
trigger: "manual",
selector: ""
}) : this.fixTitle()
}, r.prototype.getDefaults = function () {
return r.DEFAULTS
}, r.prototype.getOptions = function (e) {
return (e = m.extend({}, this.getDefaults(), this.$element.data(), e)).delay && "number" == typeof e.delay && (e.delay = {
show: e.delay,
hide: e.delay
}), e
}, r.prototype.getDelegateOptions = function () {
var i = {},
n = this.getDefaults();
return this._options && m.each(this._options, function (e, t) {
n[e] != t && (i[e] = t)
}), i
}, r.prototype.enter = function (e) {
var t = e instanceof this.constructor ? e : m(e.currentTarget).data("bs." + this.type);
return t || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), m(e.currentTarget).data("bs." + this.type, t)), clearTimeout(t.timeout), t.hoverState = "in", t.options.delay && t.options.delay.show ? void(t.timeout = setTimeout(function () {}, t.options.delay.show)) : t.show()
}, r.prototype.leave = function (e) {
var t = e instanceof this.constructor ? e : m(e.currentTarget).data("bs." + this.type);
return t || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), m(e.currentTarget).data("bs." + this.type, t)), clearTimeout(t.timeout), t.hoverState = "out", t.options.delay && t.options.delay.hide ? void(t.timeout = setTimeout(function () {
"out" == t.hoverState && t.hide()
}, t.options.delay.hide)) : t.hide()
}, r.prototype.show = function () {
var e = m.Event("show.bs." + this.type);
if (this.hasContent() && this.enabled) {
this.$element.trigger(e);
var t = m.contains(document.documentElement, this.$element[0]);
if (e.isDefaultPrevented() || !t) return;
var i = this,
n = this.tip(),
r = this.getUID(this.type);
this.setContent(), n.attr("id", r), this.$element.attr("aria-describedby", r), this.options.animation && n.addClass("fade");
var o = "function" == typeof this.options.placement ? this.options.placement.call(this, n[0], this.$element[0]) : this.options.placement,
a = /\s?auto?\s?/i,
s = a.test(o);
s && (o = o.replace(a, "") || "top"), n.detach().css({
top: 0,
left: 0,
display: "block"
}).addClass(o).data("bs." + this.type, this), this.options.container ? n.appendTo(this.options.container) : n.insertAfter(this.$element);
var l = this.getPosition(),
c = n[0].offsetWidth,
h = n[0].offsetHeight;
if (s) {
var u = o,
d = this.$element.parent(),
p = this.getPosition(d);
o = "bottom" == o && l.top + l.height + h - p.scroll > p.height ? "top" : "top" == o && l.top - p.scroll - h < 0 ? "bottom" : "right" == o && l.right + c > p.width ? "left" : "left" == o && l.left - c < p.left ? "right" : o, n.removeClass(u).addClass(o)
}
var f = this.getCalculatedOffset(o, l, c, h);
this.applyPlacement(f, o);
var g = function () {
i.$element.trigger("shown.bs." + i.type), i.hoverState = null
};
m.support.transition && this.$tip.hasClass("fade") ? n.one("bsTransitionEnd", g).emulateTransitionEnd(150) : g()
}
}, r.prototype.applyPlacement = function (e, t) {
var i = this.tip(),
n = i[0].offsetWidth,
r = i[0].offsetHeight,
o = parseInt(i.css("margin-top"), 10),
a = parseInt(i.css("margin-left"), 10);
isNaN(o) && (o = 0), isNaN(a) && (a = 0), e.top = e.top + o, e.left = e.left + a, m.offset.setOffset(i[0], m.extend({
using: function (e) {
i.css({
top: Math.round(e.top),
left: Math.round(e.left)
})
}
}, e), 0), i.addClass("in");
var s = i[0].offsetWidth,
l = i[0].offsetHeight;
"top" == t && l != r && (e.top = e.top + r - l);
var c = this.getViewportAdjustedDelta(t, e, s, l);
c.left ? e.left += c.left : e.top += c.top;
var h = c.left ? 2 * c.left - n + s : 2 * c.top - r + l,
u = c.left ? "left" : "top",
d = c.left ? "offsetWidth" : "offsetHeight";
i.offset(e), this.replaceArrow(h, i[0][d], u)
}, r.prototype.replaceArrow = function (e, t, i) {
this.arrow().css(i, e ? 50 * (1 - e / t) + "%" : "")
}, r.prototype.setContent = function () {
var e = this.tip(),
t = this.getTitle();
e.find(".tooltip-inner")[this.options.html ? "html" : "text"](t), e.removeClass("fade in top bottom left right")
}, r.prototype.hide = function () {
function e() {
"in" != t.hoverState && i.detach(), t.$element.trigger("hidden.bs." + t.type)
}
var t = this,
i = this.tip(),
n = m.Event("hide.bs." + this.type);
if (this.$element.removeAttr("aria-describedby"), this.$element.trigger(n), !n.isDefaultPrevented()) return i.removeClass("in"), m.support.transition && this.$tip.hasClass("fade") ? i.one("bsTransitionEnd", e).emulateTransitionEnd(150) : e(), this.hoverState = null, this
}, r.prototype.fixTitle = function () {
var e = this.$element;
!e.attr("title") && "string" == typeof e.attr("data-original-title") || e.attr("data-original-title", e.attr("title") || "").attr("title", "")
}, r.prototype.hasContent = function () {
return this.getTitle()
}, r.prototype.getPosition = function (e) {
var t = (e = e || this.$element)[0],
i = "BODY" == t.tagName;
return m.extend({}, "function" == typeof t.getBoundingClientRect ? t.getBoundingClientRect() : null, {
scroll: i ? document.documentElement.scrollTop || document.body.scrollTop : e.scrollTop(),
width: i ? m(window).width() : e.outerWidth(),
height: i ? m(window).height() : e.outerHeight()
}, i ? {
top: 0,
left: 0
} : e.offset())
}, r.prototype.getCalculatedOffset = function (e, t, i, n) {
return "bottom" == e ? {
top: t.top + t.height,
left: t.left + t.width / 2 - i / 2
} : "top" == e ? {
top: t.top - n,
left: t.left + t.width / 2 - i / 2
} : "left" == e ? {
top: t.top + t.height / 2 - n / 2,
left: t.left - i
} : {
top: t.top + t.height / 2 - n / 2,
left: t.left + t.width
}
}, r.prototype.getViewportAdjustedDelta = function (e, t, i, n) {
var r = {
top: 0,
left: 0
};
if (!this.$viewport) return r;
var o = this.options.viewport && this.options.viewport.padding || 0,
a = this.getPosition(this.$viewport);
if (/right|left/.test(e)) {
var s = t.top - o - a.scroll,
l = t.top + o - a.scroll + n;
s < a.top ? r.top = a.top - s : l > a.top + a.height && (r.top = a.top + a.height - l)
} else {
var c = t.left - o,
h = t.left + o + i;
c < a.left ? r.left = a.left - c : h > a.width && (r.left = a.left + a.width - h)
}
return r
}, r.prototype.getTitle = function () {
var e = this.$element,
t = this.options;
return e.attr("data-original-title") || ("function" == typeof t.title ? t.title.call(e[0]) : t.title)
}, r.prototype.getUID = function (e) {
for (; e += ~~(1e6 * Math.random()), document.getElementById(e););
return e
}, r.prototype.tip = function () {
return this.$tip = this.$tip || m(this.options.template)
}, r.prototype.arrow = function () {
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
}, r.prototype.validate = function () {
this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
}, r.prototype.enable = function () {
this.enabled = !0
}, r.prototype.disable = function () {
this.enabled = !1
}, r.prototype.toggleEnabled = function () {
this.enabled = !this.enabled
}, r.prototype.toggle = function (e) {
var t = this;
e && ((t = m(e.currentTarget).data("bs." + this.type)) || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), m(e.currentTarget).data("bs." + this.type, t))), t.tip().hasClass("in") ? t.leave(t) : t.enter(t)
}, r.prototype.destroy = function () {
clearTimeout(this.timeout), this.hide().$element.off("." + this.type).removeData("bs." + this.type)
};
var e = m.fn.tooltip;
m.fn.tooltip = function (n) {
return this.each(function () {
var e = m(this),
t = e.data("bs.tooltip"),
i = "object" == typeof n && n;
!t && "destroy" == n || (t || e.data("bs.tooltip", t = new r(this, i)), "string" == typeof n && t[n]())
})
}, m.fn.tooltip.Constructor = r, m.fn.tooltip.noConflict = function () {
return m.fn.tooltip = e, this
}
}(jQuery),
function (e, t, i) {
"undefined" != typeof module && module.exports ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : t.Keen = i()
}(0, this, function () {
"use strict";
function Keen() {
return _init.apply(this, arguments)
}
function _init(e) {
if (_isUndefined(e)) throw new Error("Check out our JavaScript SDK Usage Guide: https://keen.io/docs/clients/javascript/usage-guide/");
if (_isUndefined(e.projectId) || "String" !== _type(e.projectId) || e.projectId.length < 1) throw new Error("Please provide a projectId");
this.configure(e)
}
function _extend(e) {
for (var t = 1; t < arguments.length; t++)
for (var i in arguments[t]) e[i] = arguments[t][i];
return e
}
function _isUndefined(e) {
return void 0 === e
}
function _type(e) {
var t = e && e.constructor ? e.constructor.toString() : void 0;
return t ? t.match(/function (.*)\(/)[1] : "Null"
}
function _each(e, t, i) {
var n;
if (!e) return 0;
if (i = i || e, "array" === _type(e)) {
for (n = 0; n < e.length; n++)
if (!1 === t.call(i, e[n], n, e)) return 0
} else
for (n in e)
if (e.hasOwnProperty(n) && !1 === t.call(i, e[n], n, e)) return 0;
return 1
}
function _parse_params(e) {
for (var t, i = {}, n = /\+/g, r = /([^&=]+)=?([^&]*)/g, o = function (e) {
return decodeURIComponent(e.replace(n, " "))
}, a = e.split("?")[1]; t = r.exec(a);) i[o(t[1])] = o(t[2]);
return i
}
function _set_protocol(e) {
switch (e) {
case "http":
return "http";
case "auto":
return location.protocol.replace(/:/g, "");
case "https":
case void 0:
default:
return "https"
}
}
function _set_request_type(e) {
var t = e || "jsonp",
i = !1;
return ("Object" === _type(XMLHttpRequest) || "Function" === _type(XMLHttpRequest)) && "withCredentials" in new XMLHttpRequest && (i = !0), null == t || "xhr" == t ? i ? "xhr" : "jsonp" : t
}
function _build_url(e) {
return this.client.endpoint + "/projects/" + this.client.projectId + e
}
function _uploadEvent(e, t, i, n, r) {
var o = _build_url.apply(this, ["/events/" + e]),
a = {};
for (var s in i = !1 !== i, this.client.globalProperties && (a = this.client.globalProperties(e)), t) t.hasOwnProperty(s) && (a[s] = t[s]);
switch (this.client.requestType) {
case "xhr":
_request.xhr.apply(this, ["POST", o, null, a, this.client.writeKey, i, n, r]);
break;
case "jsonp":
var l = JSON.stringify(a),
c = Keen.Base64.encode(l);
o = (o = (o = o + "?api_key=" + this.client.writeKey) + "&data=" + c) + "&modified=" + (new Date).getTime(), _request.jsonp.apply(this, [o, this.client.writeKey, n, r]);
break;
case "beacon":
l = JSON.stringify(a), c = Keen.Base64.encode(l);
o = (o = (o = o + "?api_key=" + encodeURIComponent(this.client.writeKey)) + "&data=" + encodeURIComponent(c)) + "&modified=" + encodeURIComponent((new Date).getTime()), o += "&c=clv1", _request.beacon.apply(this, [o, null, n, r])
}
}
Keen.prototype.configure = function (e) {
return e.host = _isUndefined(e.host) ? "api.keen.io/3.0" : e.host.replace(/.*?:\/\//g, ""), e.protocol = _set_protocol(e.protocol), e.requestType = _set_request_type(e.requestType), this.client = {
projectId: e.projectId,
writeKey: e.writeKey,
readKey: e.readKey,
globalProperties: null,
endpoint: e.protocol + "://" + e.host,
requestType: e.requestType
}, Keen.trigger("client", this, e), this.trigger("ready"), this
};
var _request = {
xhr: function (e, t, i, n, r, o, a, s) {
if (!r) return Keen.log("Please provide a writeKey for https://keen.io/project/" + this.client.projectId);
var l = new XMLHttpRequest;
if (l.onreadystatechange = function () {
if (4 == l.readyState)
if (200 <= l.status && l.status < 300) {
var e;
try {
e = JSON.parse(l.responseText)
} catch (e) {
Keen.log("Could not JSON parse HTTP response: " + l.responseText), s && s(l, e)
}
a && e && a(e)
} else Keen.log("HTTP request failed."), s && s(l, null)
}, l.open(e, t, o), r && l.setRequestHeader("Authorization", r), n && l.setRequestHeader("Content-Type", "application/json"), i)
for (var c in i) i.hasOwnProperty(c) && l.setRequestHeader(c, i[c]);
var h = n ? JSON.stringify(n) : null;
l.send(h)
},
jsonp: function (e, t, i, n) {
if (!t) return Keen.log("Please provide a writeKey for https://keen.io/project/" + this.client.projectId);
if (t && e.indexOf("api_key") < 0) {
var r = 0 < e.indexOf("?") ? "&" : "?";
e = e + r + "api_key=" + t
}
for (var o = "keenJSONPCallback" + (new Date).getTime(); o in window;) o += "a";
var a = !1;
window[o] = function (e) {
a = !0, i && e && i(e), window[o] = void 0
}, e = e + "&jsonp=" + o;
var s = document.createElement("script");
s.id = "keen-jsonp", s.src = e, document.getElementsByTagName("head")[0].appendChild(s), s.onreadystatechange = function () {
!1 === a && "loaded" === this.readyState && (a = !0, n && n())
}, s.onerror = function () {
!1 === a && (a = !0, n && n())
}
},
beacon: function (e, t, i, n) {
if (t && e.indexOf("api_key") < 0) {
var r = 0 < e.indexOf("?") ? "&" : "?";
e = e + r + "api_key=" + t
}
var o = document.createElement("img");
o.onload = function () {
if (!0, "naturalHeight" in this) {
if (this.naturalHeight + this.naturalWidth === 0) return void this.onerror()
} else if (this.width + this.height === 0) return void this.onerror();
i && i({
created: !0
})
}, o.onerror = function () {
!0, n && n()
}, o.src = e
}
},
Events = Keen.Events = {
on: function (e, t) {
return this.listeners || (this.listeners = {}), (this.listeners[e] || (this.listeners[e] = [])).push({
callback: t
}), this
},
off: function (e, t) {
if (!e && !t) return this.listeners = void 0, delete this.listeners, this;
for (var i = this.listeners[e] || [], n = i.length; n--;) t && t == i[n].callback && this.listeners[e].splice(n, 1), t && 0 != i.length || (this.listeners[e] = void 0, delete this.listeners[e]);
return this
},
trigger: function (e) {
if (!this.listeners) return this;
for (var t = Array.prototype.slice.call(arguments, 1), i = this.listeners[e] || [], n = 0; n < i.length; n++) i[n].callback.apply(this, t);
return this
}
};
_extend(Keen.prototype, Events), _extend(Keen, Events), Keen.loaded = !0, Keen.utils = {
each: _each,
extend: _extend,
parseParams: _parse_params
}, Keen.ready = function (e) {
Keen.loaded ? e() : Keen.on("ready", e)
}, Keen.log = function (e) {
"object" == typeof console && console.log("[Keen IO]", e)
};
var Plugins = Keen.Plugins = {},
Hh, Ih;
Keen.prototype.addEvent = function () {
_uploadEvent.apply(this, arguments)
}, Keen.prototype.addEventSync = function (e, t, i, n) {
_uploadEvent.apply(this, [e, t, !1, i, n])
}, Keen.prototype.trackExternalLink = function (e, t, i, n, r) {
var o = e,
a = o.metaKey,
s = o.target,
l = !1,
c = function () {};
return void 0 === n && (n = 500), "A" === s.nodeName ? c = function () {
a || l || (l = !0, window.location = s.href)
} : "FORM" === s.nodeName && (c = function () {
l || (l = !0, s.submit())
}), r && (c = function () {
l || (l = !0, r())
}), _uploadEvent.call(this, t, i, c, c), setTimeout(function () {
c()
}, n), !!a && void 0
}, Keen.prototype.setGlobalProperties = function (e) {
if (!this.client) return Keen.log("Check out our JavaScript SDK Usage Guide: https://keen.io/docs/clients/javascript/usage-guide/");
if (!e || "function" != typeof e) throw new Error("Invalid value for global properties: " + e);
this.client.globalProperties = e
}, Keen.Base64 = {
map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function (e) {
var t, i, n, r, o, a, s, l = "",
c = 0,
h = this.map;
for (e = this.utf8.encode(e); c < e.length;) t = e.charCodeAt(c++), i = e.charCodeAt(c++), n = e.charCodeAt(c++), r = t >> 2, o = (3 & t) << 4 | i >> 4, a = isNaN(i) ? 64 : (15 & i) << 2 | n >> 6, s = isNaN(i) || isNaN(n) ? 64 : 63 & n, l = l + h.charAt(r) + h.charAt(o) + h.charAt(a) + h.charAt(s);
return l
},
decode: function (e) {
var t, i, n, r, o, a, s = "",
l = 0,
c = this.map,
h = String.fromCharCode;
for (e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); l < e.length;) t = c.indexOf(e.charAt(l++)), o = (15 & (i = c.indexOf(e.charAt(l++)))) << 4 | (n = c.indexOf(e.charAt(l++))) >> 2, a = (3 & n) << 6 | (r = c.indexOf(e.charAt(l++))), s = s + (h(t << 2 | i >> 4) + (64 != n ? h(o) : "")) + (64 != r ? h(a) : "");
return this.utf8.decode(s)
},
utf8: {
encode: function (e) {
for (var t, i = "", n = 0, r = String.fromCharCode; n < e.length;) i += (t = e.charCodeAt(n++)) < 128 ? r(t) : 127 < t && t < 2048 ? r(t >> 6 | 192) + r(63 & t | 128) : r(t >> 12 | 224) + r(t >> 6 & 63 | 128) + r(63 & t | 128);
return i
},
decode: function (e) {
for (var t, i = "", n = 0, r = String.fromCharCode; n < e.length;) i += (t = e.charCodeAt(n)) < 128 ? [r(t), n++][0] : 191 < t && t < 224 ? [r((31 & t) << 6 | 63 & e.charCodeAt(n + 1)), n += 2][0] : [r((15 & t) << 12 | (63 & e.charCodeAt(n + 1)) << 6 | 63 & (c3 = e.charCodeAt(n + 2))), n += 3][0];
return i
}
}
}, "object" != typeof JSON && (JSON = {}),
function () {
function f(e) {
return e < 10 ? "0" + e : e
}
function quote(e) {
return escapable.lastIndex = 0, escapable.test(e) ? '"' + e.replace(escapable, function (e) {
var t = meta[e];
return "string" == typeof t ? t : "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
}) + '"' : '"' + e + '"'
}
function str(e, t) {
var i, n, r, o, a, s = gap,
l = t[e];
switch (l && "object" == typeof l && "function" == typeof l.toJSON && (l = l.toJSON(e)), "function" == typeof rep && (l = rep.call(t, e, l)), typeof l) {
case "string":
return quote(l);
case "number":
return isFinite(l) ? String(l) : "null";
case "boolean":
case "null":
return String(l);
case "object":
if (!l) return "null";
if (gap += indent, a = [], "[object Array]" === Object.prototype.toString.apply(l)) {
for (o = l.length, i = 0; i < o; i += 1) a[i] = str(i, l) || "null";
return r = 0 === a.length ? "[]" : gap ? "[\n" + gap + a.join(",\n" + gap) + "\n" + s + "]" : "[" + a.join(",") + "]", gap = s, r
}
if (rep && "object" == typeof rep)
for (o = rep.length, i = 0; i < o; i += 1) "string" == typeof rep[i] && ((r = str(n = rep[i], l)) && a.push(quote(n) + (gap ? ": " : ":") + r));
else
for (n in l) Object.prototype.hasOwnProperty.call(l, n) && ((r = str(n, l)) && a.push(quote(n) + (gap ? ": " : ":") + r));
return r = 0 === a.length ? "{}" : gap ? "{\n" + gap + a.join(",\n" + gap) + "\n" + s + "}" : "{" + a.join(",") + "}", gap = s, r
}
}
"function" != typeof Date.prototype.toJSON && (Date.prototype.toJSON = function () {
return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
}, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {
return this.valueOf()
});
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
gap, indent, meta = {
"\b": "\\b",
"\t": "\\t",
"\n": "\\n",
"\f": "\\f",
"\r": "\\r",
'"': '\\"',
"\\": "\\\\"
},
rep;
"function" != typeof JSON.stringify && (JSON.stringify = function (e, t, i) {
var n;
if (indent = gap = "", "number" == typeof i)
for (n = 0; n < i; n += 1) indent += " ";
else "string" == typeof i && (indent = i);
if ((rep = t) && "function" != typeof t && ("object" != typeof t || "number" != typeof t.length)) throw new Error("JSON.stringify");
return str("", {
"": e
})
}), "function" != typeof JSON.parse && (JSON.parse = function (text, reviver) {
function walk(e, t) {
var i, n, r = e[t];
if (r && "object" == typeof r)
for (i in r) Object.prototype.hasOwnProperty.call(r, i) && (void 0 !== (n = walk(r, i)) ? r[i] = n : delete r[i]);
return reviver.call(e, t, r)
}
var j;
if (text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx, function (e) {
return "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
})), /^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"), "function" == typeof reviver ? walk({
"": j
}, "") : j;
throw new SyntaxError("JSON.parse")
})
}(), Hh = Keen.utils, Ih = function (i) {
function e(e) {
for (u = 1; e = n.shift();) e()
}
var t, n = [],
r = document,
o = r.documentElement,
a = o.doScroll,
s = "DOMContentLoaded",
l = "addEventListener",
c = "onreadystatechange",
h = "readyState",
u = (a ? /^loaded|^c/ : /^loaded|c/).test(r[h]);
return r[l] && r[l](s, t = function () {
r.removeEventListener(s, t, !1), e()
}, !1), a && r.attachEvent(c, t = function () {
/^c/.test(r[h]) && (r.detachEvent(c, t), e())
}), i = a ? function (t) {
self != top ? u ? t() : n.push(t) : function () {
try {
o.doScroll("left")
} catch (e) {
return setTimeout(function () {
i(t)
}, 50)
}
t()
}()
} : function (e) {
u ? e() : n.push(e)
}
}, "undefined" != typeof module && module.exports ? module.exports = Ih() : "function" == typeof define && define.amd ? define(Ih) : Hh.domready = Ih();
var loaded = window.Keen,
cached = window._Keen || {},
clients, ready;
if (loaded && cached) {
for (var instance in clients = cached.clients || {}, ready = cached.ready || [], clients)
if (clients.hasOwnProperty(instance)) {
var client = clients[instance];
for (var method in Keen.prototype) Keen.prototype.hasOwnProperty(method) && (loaded.prototype[method] = Keen.prototype[method]);
if (loaded.Query = Keen.Query ? Keen.Query : function () {}, loaded.Visualization = Keen.Visualization ? Keen.Visualization : function () {}, client._config && (client.configure.call(client, client._config), delete client._config), client._setGlobalProperties) {
for (var globals = client._setGlobalProperties, i = 0; i < globals.length; i++) client.setGlobalProperties.apply(client, globals[i]);
delete client._setGlobalProperties
}
if (client._addEvent) {
for (var queue = client._addEvent || [], i = 0; i < queue.length; i++) client.addEvent.apply(client, queue[i]);
delete client._addEvent
}
var callback = client._on || [];
if (client._on) {
for (var i = 0; i < callback.length; i++) client.on.apply(client, callback[i]);
client.trigger("ready"), delete client._on
}
} for (var i = 0; i < ready.length; i++) {
var callback = ready[i];
Keen.on("ready", function () {
callback()
})
}
}
return Keen.loaded && setTimeout(function () {
Keen.utils.domready(function () {
Keen.trigger("ready")
})
}, 0), Keen
}),
function () {
var i = window.analytics = window.analytics || [];
if (!i.initialize) {
if (i.invoked) return window.console && console.error && console.error("Segment snippet included twice.");
i.invoked = !0, i.methods = ["trackSubmit", "trackClick", "trackLink", "trackForm", "pageview", "identify", "reset", "group", "track", "ready", "alias", "debug", "page", "once", "off", "on"], i.factory = function (t) {
return function () {
var e = Array.prototype.slice.call(arguments);
return e.unshift(t), i.push(e), i
}
};
for (var e = 0; e < i.methods.length; e++) {
var t = i.methods[e];
i[t] = i.factory(t)
}
i.load = function (e) {
var t = document.createElement("script");
t.type = "text/javascript", t.async = !0, t.src = ("https:" === document.location.protocol ? "https://" : "http://") + "cdn.segment.com/analytics.js/v1/" + e + "/analytics.min.js";
var i = document.getElementsByTagName("script")[0];
i.parentNode.insertBefore(t, i)
}, i.SNIPPET_VERSION = "4.0.0"
}
}(),
function (i, u) {
"use strict";
var d = "function",
p = "undefined",
f = "object",
e = "major",
t = "model",
n = "name",
r = "type",
o = "vendor",
a = "version",
s = "architecture",
l = "console",
c = "mobile",
h = "tablet",
g = {
has: function (e, t) {
return -1 !== t.toLowerCase().indexOf(e.toLowerCase())
},
lowerize: function (e) {
return e.toLowerCase()
}
},
m = {
rgx: function () {
for (var e, t, i, n, r, o, a, s = 0, l = arguments; s < l.length; s += 2) {
var c = l[s],
h = l[s + 1];
if (typeof e == p)
for (n in e = {}, h) typeof (r = h[n]) == f ? e[r[0]] = u : e[r] = u;
for (t = i = 0; t < c.length; t++)
if (o = c[t].exec(this.getUA())) {
for (n = 0; n < h.length; n++) a = o[++i], typeof (r = h[n]) == f && 0 < r.length ? 2 == r.length ? typeof r[1] == d ? e[r[0]] = r[1].call(this, a) : e[r[0]] = r[1] : 3 == r.length ? typeof r[1] != d || r[1].exec && r[1].test ? e[r[0]] = a ? a.replace(r[1], r[2]) : u : e[r[0]] = a ? r[1].call(this, a, r[2]) : u : 4 == r.length && (e[r[0]] = a ? r[3].call(this, a.replace(r[1], r[2])) : u) : e[r] = a || u;
break
} if (o) break
}
return e
},
str: function (e, t) {
for (var i in t)
if (typeof t[i] == f && 0 < t[i].length) {
for (var n = 0; n < t[i].length; n++)
if (g.has(t[i][n], e)) return "?" === i ? u : i
} else if (g.has(t[i], e)) return "?" === i ? u : i;
return e
}
},
v = {
browser: {
oldsafari: {
major: {
1: ["/8", "/1", "/3"],
2: "/4",
"?": "/"
},
version: {
"1.0": "/8",
1.2: "/1",
1.3: "/3",
"2.0": "/412",
"2.0.2": "/416",
"2.0.3": "/417",
"2.0.4": "/419",
"?": "/"
}
}
},
device: {
sprint: {
model: {
"Evo Shift 4G": "7373KT"
},
vendor: {
HTC: "APA",
Sprint: "Sprint"
}
}
},
os: {
windows: {
version: {
ME: "4.90",
"NT 3.11": "NT3.51",
"NT 4.0": "NT4.0",
2e3: "NT 5.0",
XP: ["NT 5.1", "NT 5.2"],
Vista: "NT 6.0",
7: "NT 6.1",
8: "NT 6.2",
8.1: "NT 6.3",
RT: "ARM"
}
}
}
},
y = {
browser: [
[/(opera\smini)\/((\d+)?[\w\.-]+)/i, /(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i, /(opera).+version\/((\d+)?[\w\.]+)/i, /(opera)[\/\s]+((\d+)?[\w\.]+)/i],
[n, a, e],
[/\s(opr)\/((\d+)?[\w\.]+)/i],
[
[n, "Opera"], a, e
],
[/(kindle)\/((\d+)?[\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i, /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i, /(?:ms|\()(ie)\s((\d+)?[\w\.]+)/i, /(rekonq)((?:\/)[\w\.]+)*/i, /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron)\/((\d+)?[\w\.-]+)/i],
[n, a, e],
[/(trident).+rv[:\s]((\d+)?[\w\.]+).+like\sgecko/i],
[
[n, "IE"], a, e
],
[/(yabrowser)\/((\d+)?[\w\.]+)/i],
[
[n, "Yandex"], a, e
],
[/(comodo_dragon)\/((\d+)?[\w\.]+)/i],
[
[n, /_/g, " "], a, e
],
[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i],
[n, a, e],
[/(dolfin)\/((\d+)?[\w\.]+)/i],
[
[n, "Dolphin"], a, e
],
[/((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i],
[
[n, "Chrome"], a, e
],
[/version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i],
[a, e, [n, "Mobile Safari"]],
[/version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i],
[a, e, n],
[/webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i],
[n, [e, m.str, v.browser.oldsafari.major],
[a, m.str, v.browser.oldsafari.version]
],
[/(konqueror)\/((\d+)?[\w\.]+)/i, /(webkit|khtml)\/((\d+)?[\w\.]+)/i],
[n, a, e],
[/(navigator|netscape)\/((\d+)?[\w\.-]+)/i],
[
[n, "Netscape"], a, e
],
[/(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i, /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i, /(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i, /(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|qqbrowser)[\/\s]?((\d+)?[\w\.]+)/i, /(links)\s\(((\d+)?[\w\.]+)/i, /(gobrowser)\/?((\d+)?[\w\.]+)*/i, /(ice\s?browser)\/v?((\d+)?[\w\._]+)/i, /(mosaic)[\/\s]((\d+)?[\w\.]+)/i],
[n, a, e],
[/(apple(?:coremedia|))\/((\d+)[\w\._]+)/i, /(coremedia) v((\d+)[\w\._]+)/i],
[n, a, e],
[/(aqualung|lyssna|bsplayer)\/([\w\.-]+)/i],
[n, a],
[/(ares|ossproxy)\s((\d+)[\w\.-]+)/i],
[n, a, e],
[/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/((\d+)[\w\.-]+)/i, /(clementine|music player daemon)\s((\d+)[\w\.-]+)/i, /(lg player|nexplayer)\s((\d+)[\d\.]+)/i, /player\/(nexplayer|lg player)\s((\d+)[\w\.-]+)/i],
[n, a, e],
[/(nexplayer)\s((\d+)[\w\.-]+)/i],
[n, a, e],
[/(flrp)\/((\d+)[\w\.-]+)/i],
[
[n, "Flip Player"], a, e
],
[/(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i],
[n],
[/(gstreamer) souphttpsrc (?:\([^\)]+\)){0,1} libsoup\/((\d+)[\w\.-]+)/i],
[n, a, e],
[/(htc streaming player)\s[\w_]+\s\/\s((\d+)[\d\.]+)/i, /(java|python-urllib|python-requests|wget|libcurl)\/((\d+)[\w\.-_]+)/i, /(lavf)((\d+)[\d\.]+)/i],
[n, a, e],
[/(htc_one_s)\/((\d+)[\d\.]+)/i],
[
[n, /_/g, " "], a, e
],
[/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+){0,1})/i],
[n, a],
[/(mplayer)(?:\s|\/)((\d+)[\w\.-]+)/i, /(mplayer) unknown-((\d+)[\w\.\-]+)/i],
[n, a, e],
[/(mplayer)/i, /(yourmuze)/i, /(media player classic|nero showtime)/i],
[n],
[/(nero (?:home|scout))\/((\d+)[\w\.-]+)/i],
[n, a, e],
[/(nokia\d+)\/((\d+)[\w\.-]+)/i],
[n, a, e],
[/\s(songbird)\/((\d+)[\w\.-]+)/i],
[n, a, e],
[/(winamp)3 version ((\d+)[\w\.-]+)/i, /(winamp)\s((\d+)[\w\.-]+)/i, /(winamp)mpeg\/((\d+)[\w\.-]+)/i],
[n, a, e],
[/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i],
[n],
[/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/((\d+)[\w\.-]+)/i],
[n, a, e],
[/(smp)((\d+)[\d\.]+)/i],
[n, a, e],
[/(vlc) media player - version ((\d+)[\w\.]+)/i, /(vlc)\/((\d+)[\w\.-]+)/i, /(xbmc|gvfs|xine|xmms|irapp)\/((\d+)[\w\.-]+)/i, /(foobar2000)\/((\d+)[\d\.]+)/i, /(itunes)\/((\d+)[\d\.]+)/i],
[n, a, e],
[/(wmplayer)\/((\d+)[\w\.-]+)/i, /(windows-media-player)\/((\d+)[\w\.-]+)/i],
[
[n, /-/g, " "], a, e
],
[/windows\/((\d+)[\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i],
[a, e, [n, "Windows"]],
[/(com\.riseupradioalarm)\/((\d+)[\d\.]*)/i],
[n, a, e],
[/(rad.io)\s((\d+)[\d\.]+)/i, /(radio.(?:de|at|fr))\s((\d+)[\d\.]+)/i],
[
[n, "rad.io"], a, e
]
],
cpu: [
[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],
[
[s, "amd64"]
],
[/(ia32(?=;))/i],
[
[s, g.lowerize]
],
[/((?:i[346]|x)86)[;\)]/i],
[
[s, "ia32"]
],
[/windows\s(ce|mobile);\sppc;/i],
[
[s, "arm"]
],
[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],
[
[s, /ower/, "", g.lowerize]
],
[/(sun4\w)[;\)]/i],
[
[s, "sparc"]
],
[/(ia64(?=;)|68k(?=\))|arm(?=v\d+;)|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i],
[s, g.lowerize]
],
device: [
[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],
[t, o, [r, h]],
[/applecoremedia\/[\w\.]+ \((ipad)/],
[t, [o, "Apple"],
[r, h]
],
[/(apple\s{0,1}tv)/i],
[
[t, "Apple TV"],
[o, "Apple"]
],
[/(hp).+(touchpad)/i, /(kindle)\/([\w\.]+)/i, /\s(nook)[\w\s]+build\/(\w+)/i, /(dell)\s(strea[kpr\s\d]*[\dko])/i],
[o, t, [r, h]],
[/\((ip[honed|\s\w*]+);.+(apple)/i],
[t, o, [r, c]],
[/\((ip[honed|\s\w*]+);/i],
[t, [o, "Apple"],
[r, c]
],
[/(blackberry)[\s-]?(\w+)/i, /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola)[\s_-]?([\w-]+)*/i, /(hp)\s([\w\s]+\w)/i, /(asus)-?(\w+)/i],
[o, t, [r, c]],
[/\((bb10);\s(\w+)/i],
[
[o, "BlackBerry"], t, [r, c]
],
[/android.+((transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+))/i],
[
[o, "Asus"], t, [r, h]
],
[/(sony)\s(tablet\s[ps])/i],
[o, t, [r, h]],
[/(nintendo)\s([wids3u]+)/i],
[o, t, [r, l]],
[/((playstation)\s[3portablevi]+)/i],
[
[o, "Sony"], t, [r, l]
],
[/(sprint\s(\w+))/i],
[
[o, m.str, v.device.sprint.vendor],
[t, m.str, v.device.sprint.model],
[r, c]
],
[/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, /(zte)-(\w+)*/i, /(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i],
[o, [t, /_/g, " "],
[r, c]
],
[/\s((milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?))[\w\s]+build\//i, /(mot)[\s-]?(\w+)*/i],
[
[o, "Motorola"], t, [r, c]
],
[/android.+\s((mz60\d|xoom[\s2]{0,2}))\sbuild\//i],
[
[o, "Motorola"], t, [r, h]
],
[/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n8000|sgh-t8[56]9))/i],
[
[o, "Samsung"], t, [r, h]
],
[/((s[cgp]h-\w+|gt-\w+|galaxy\snexus))/i, /(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i, /sec-((sgh\w+))/i],
[
[o, "Samsung"], t, [r, c]
],
[/(sie)-(\w+)*/i],
[
[o, "Siemens"], t, [r, c]
],
[/(maemo|nokia).*(n900|lumia\s\d+)/i, /(nokia)[\s_-]?([\w-]+)*/i],
[
[o, "Nokia"], t, [r, c]
],
[/android\s3\.[\s\w-;]{10}((a\d{3}))/i],
[
[o, "Acer"], t, [r, h]
],
[/android\s3\.[\s\w-;]{10}(lg?)-([06cv9]{3,4})/i],
[
[o, "LG"], t, [r, h]
],
[/((nexus\s[45]))/i, /(lg)[e;\s-\/]+(\w+)*/i],
[
[o, "LG"], t, [r, c]
],
[/android.+((ideatab[a-z0-9\-\s]+))/i],
[
[o, "Lenovo"], t, [r, h]
],
[/(lg) netcast\.tv/i],
[o, [r, "smarttv"]],
[/(mobile|tablet);.+rv\:.+gecko\//i],
[r, o, t]
],
engine: [
[/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, /(icab)[\/\s]([23]\.[\d\.]+)/i],
[n, a],
[/rv\:([\w\.]+).*(gecko)/i],
[a, n]
],
os: [
[/microsoft\s(windows)\s(vista|xp)/i],
[n, a],
[/(windows)\snt\s6\.2;\s(arm)/i, /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],
[n, [a, m.str, v.os.windows.version]],
[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],
[
[n, "Windows"],
[a, m.str, v.os.windows.version]
],
[/\((bb)(10);/i],
[
[n, "BlackBerry"], a
],
[/(blackberry)\w*\/?([\w\.]+)*/i, /(tizen)\/([\w\.]+)/i, /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i],
[n, a],
[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],
[
[n, "Symbian"], a
],
[/mozilla.+\(mobile;.+gecko.+firefox/i],
[
[n, "Firefox OS"], a
],
[/(nintendo|playstation)\s([wids3portablevu]+)/i, /(mint)[\/\s\(]?(\w+)*/i, /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i, /(hurd|linux)\s?([\w\.]+)*/i, /(gnu)\s?([\w\.]+)*/i],
[n, a],
[/(cros)\s[\w]+\s([\w\.]+\w)/i],
[
[n, "Chromium OS"], a
],
[/(sunos)\s?([\w\.]+\d)*/i],
[
[n, "Solaris"], a
],
[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],
[n, a],
[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],
[
[n, "iOS"],
[a, /_/g, "."]
],
[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i],
[n, [a, /_/g, "."]],
[/(haiku)\s(\w+)/i, /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, /(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i, /(unix)\s?([\w\.]+)*/i],
[n, a]
]
},
A = function (e) {
var t = e || (i && i.navigator && i.navigator.userAgent ? i.navigator.userAgent : "");
return this instanceof A ? (this.getBrowser = function () {
return m.rgx.apply(this, y.browser)
}, this.getCPU = function () {
return m.rgx.apply(this, y.cpu)
}, this.getDevice = function () {
return m.rgx.apply(this, y.device)
}, this.getEngine = function () {
return m.rgx.apply(this, y.engine)
}, this.getOS = function () {
return m.rgx.apply(this, y.os)
}, this.getResult = function () {
return {
ua: this.getUA(),
browser: this.getBrowser(),
engine: this.getEngine(),
os: this.getOS(),
device: this.getDevice(),
cpu: this.getCPU()
}
}, this.getUA = function () {
return t
}, this.setUA = function (e) {
return t = e, this
}, void this.setUA(t)) : new A(e).getResult()
};
if (typeof exports != p) typeof module != p && module.exports && (exports = module.exports = A), exports.UAParser = A;
else if (i.UAParser = A, typeof define == d && define.amd && define(function () {
return A
}), typeof i.jQuery != p) {
var C = i.jQuery,
I = new A;
C.ua = I.getResult(), C.ua.get = function () {
return I.getUA()
}, C.ua.set = function (e) {
I.setUA(e);
var t = I.getResult();
for (var i in t) C.ua[i] = t[i]
}
}
}(this), window.Modernizr = function (e, t) {
function i(e, t) {
return typeof e === t
}
var n, r, o, a = {},
s = t.documentElement,
l = t.createElement("modernizr"),
c = l.style,
h = {},
u = [],
d = u.slice,
p = {}.hasOwnProperty;
for (var f in r = i(p, "undefined") || i(p.call, "undefined") ? function (e, t) {
return t in e && i(e.constructor.prototype[t], "undefined")
} : function (e, t) {
return p.call(e, t)
}, Function.prototype.bind || (Function.prototype.bind = function (n) {
var r = this;
if ("function" != typeof r) throw new TypeError;
var o = d.call(arguments, 1),
a = function () {
if (this instanceof a) {
function e() {}
e.prototype = r.prototype;
var t = new e,
i = r.apply(t, o.concat(d.call(arguments)));
return Object(i) === i ? i : t
}
return r.apply(n, o.concat(d.call(arguments)))
};
return a
}), h.webgl = function () {
return !!e.WebGLRenderingContext
}, h) r(h, f) && (n = f.toLowerCase(), a[n] = h[f](), u.push((a[n] ? "" : "no-") + n));
return a.addTest = function (e, t) {
if ("object" == typeof e)
for (var i in e) r(e, i) && a.addTest(i, e[i]);
else {
if (e = e.toLowerCase(), void 0 !== a[e]) return a;
t = "function" == typeof t ? t() : t, "undefined" != typeof enableClasses && enableClasses && (s.className += " " + (t ? "" : "no-") + e), a[e] = t
}
return a
}, o = "", c.cssText = o, l = null, a._version = "2.8.2", a
}(this, this.document),
function (xe, e, Se) {
"use strict";
function Me(s, e, n) {
function a(e) {
var t = Q.length;
if (G.old = xe.extend({}, G), H = V ? 0 : k[F.horizontal ? "width" : "height"](), Y = W[F.horizontal ? "width" : "height"](), z = V ? s : U[F.horizontal ? "outerWidth" : "outerHeight"](), Q.length = 0, G.start = 0, G.end = nt(z - H, 0), le) {
$.length, J = U.children(F.itemSelector), $.length = 0;
var h, u = Ne(U, F.horizontal ? "paddingLeft" : "paddingTop"),
d = Ne(U, F.horizontal ? "paddingRight" : "paddingBottom"),
i = "border-box" === xe(J).css("boxSizing"),
p = "none" !== J.css("float"),
f = 0,
g = J.length - 1;
z = 0, J.each(function (e, t) {
var i = xe(t),
n = t.getBoundingClientRect(),
r = it(F.horizontal ? n.width || n.right - n.left : n.height || n.bottom - n.top),
o = Ne(i, F.horizontal ? "marginLeft" : "marginTop"),
a = Ne(i, F.horizontal ? "marginRight" : "marginBottom"),
s = r + o + a,
l = !o || !a,
c = {};
c.el = t, c.size = l ? r : s, c.half = c.size / 2, c.start = z + (l ? o : 0), c.center = c.start - it(H / 2 - c.size / 2), c.end = c.start - H + c.size, e || (z += u), z += s, F.horizontal || p || a && o && 0 < e && (z -= rt(o, a)), e === g && (c.end += d, z += d, f = l ? a : 0), $.push(c), h = c
}), U[0].style[F.horizontal ? "width" : "height"] = (i ? z : z - u - d) + "px", z -= f, $.length ? (G.start = $[0][ae ? "center" : "start"], G.end = ae ? h.center : H < z ? h.end : G.start) : G.start = G.end = 0
}
if (G.center = it(G.end / 2 + G.start / 2), v(), j.length && 0 < Y && (F.dynamicHandle ? (q = Fe(q = G.start === G.end ? Y : it(Y * H / z), F.minHandleSize, Y), j[0].style[F.horizontal ? "width" : "height"] = q + "px") : q = j[F.horizontal ? "outerWidth" : "outerHeight"](), X.end = Y - q, _e || c()), !V && 0 < H) {
var n = G.start,
r = "";
if (le) xe.each($, function (e, t) {
ae ? Q.push(t.center) : t.start + t.size > n && n <= G.end && (n = t.start, Q.push(n), (n += H) > G.end && n < G.end + H && Q.push(G.end))
});
else
for (; n - H < G.end;) Q.push(n), n += H;
if (Z[0] && t !== Q.length) {
for (var o = 0; o < Q.length; o++) r += F.pageBuilder.call(B, o);
(K = Z.html(r).children()).eq(ee.activePage).addClass(F.activeClass)
}
}
if (ee.slideeSize = z, ee.frameSize = H, ee.sbSize = Y, ee.handleSize = q, le) {
e && null != F.startAt && (m(F.startAt), B[se ? "toCenter" : "toStart"](F.startAt));
var a = $[ee.activeItem];
l(se && a ? a.center : Fe(G.dest, G.start, G.end))
} else e ? null != F.startAt && l(F.startAt, 1) : l(Fe(G.dest, G.start, G.end));
L("load")
}
function l(e, t, i) {
if (le && Ie.released && !i) {
var n = d(e),
r = e > G.start && e < G.end;
se ? (r && (e = $[n.centerItem].center), ae && F.activateMiddle && m(n.centerItem)) : r && (e = $[n.firstItem].start)
}
Ie.init && Ie.slidee && F.elasticBounds ? e > G.end ? e = G.end + (e - G.end) / 6 : e < G.start && (e = G.start + (e - G.start) / 6) : e = Fe(e, G.start, G.end), Ae.start = +new Date, Ae.time = 0, Ae.from = G.cur, Ae.to = e, Ae.delta = e - G.cur, Ae.tweesing = Ie.tweese || Ie.init && !Ie.slidee, Ae.immediate = !Ae.tweesing && (t || Ie.init && Ie.slidee || !F.speed), Ie.tweese = 0, e !== G.dest && (G.dest = e, L("change"), _e || o()), g(), v(), p(), K[0] && ye.page !== ee.activePage && (ye.page = ee.activePage, K.removeClass(F.activeClass).eq(ee.activePage).addClass(F.activeClass), L("activePage", ye.page))
}
function o() {
if (B.initialized) {
if (!_e) return _e = Ge(o), void(Ie.released && L("moveStart"));
Ae.immediate ? G.cur = Ae.to : Ae.tweesing ? (Ae.tweeseDelta = Ae.to - G.cur, $e(Ae.tweeseDelta) < .1 ? G.cur = Ae.to : G.cur += Ae.tweeseDelta * (Ie.released ? F.swingSpeed : F.syncSpeed)) : (Ae.time = rt(+new Date - Ae.start, F.speed), G.cur = Ae.from + Ae.delta * xe.easing[F.easing](Ae.time / F.speed, Ae.time, 0, 1, F.speed)), Ae.to === G.cur ? (G.cur = Ae.to, Ie.tweese = _e = 0) : _e = Ge(o), L("move"), V || (Ve ? U[0].style[Ve] = ke + (F.horizontal ? "translateX" : "translateY") + "(" + -G.cur + "px)" : U[0].style[F.horizontal ? "left" : "top"] = -it(G.cur) + "px"), !_e && Ie.released && L("moveEnd"), c()
}
}
function c() {
j.length && (X.cur = G.start === G.end ? 0 : ((Ie.init && !Ie.slidee ? G.dest : G.cur) - G.start) / (G.end - G.start) * X.end, X.cur = Fe(it(X.cur), X.start, X.end), ye.hPos !== X.cur && (ye.hPos = X.cur, Ve ? j[0].style[Ve] = ke + (F.horizontal ? "translateX" : "translateY") + "(" + X.cur + "px)" : j[0].style[F.horizontal ? "left" : "top"] = X.cur + "px"))
}
function t() {
Ce.speed && G.cur !== (0 < Ce.speed ? G.end : G.start) || B.stop(), Te = Ie.init ? Ge(t) : 0, Ce.now = +new Date, Ce.pos = G.cur + (Ce.now - Ce.lastTime) / 1e3 * Ce.speed, l(Ie.init ? Ce.pos : it(Ce.pos)), Ie.init || G.cur !== G.dest || L("moveEnd"), Ce.lastTime = Ce.now
}
function i(e, t, i) {
if ("boolean" === Re(t) && (i = t, t = Se), t === Se) l(G[e], i);
else {
if (se && "center" !== e) return;
var n = B.getPos(t);
n && l(n[e], i, !se)
}
}
function h(e) {
return null != e ? De(e) ? 0 <= e && e < $.length ? e : -1 : J.index(e) : -1
}
function u(e) {
return h(De(e) && e < 0 ? e + $.length : e)
}
function m(e, t) {
var i = h(e);
return !(!le || i < 0) && (ye.active === i && !t || (J.eq(ee.activeItem).removeClass(F.activeClass), J.eq(i).addClass(F.activeClass), ye.active = ee.activeItem = i, p(), L("active", i)), i)
}
function d(e) {
e = Fe(De(e) ? e : G.dest, G.start, G.end);
var t = {},
i = ae ? 0 : H / 2;
if (!V)
for (var n = 0, r = Q.length; n < r; n++) {
if (e >= G.end || n === Q.length - 1) {
t.activePage = Q.length - 1;
break
}
if (e <= Q[n] + i) {
t.activePage = n;
break
}
}
if (le) {
for (var o = !1, a = !1, s = !1, l = 0, c = $.length; l < c; l++)
if (!1 === o && e <= $[l].start + $[l].half && (o = l), !1 === s && e <= $[l].center + $[l].half && (s = l), l === c - 1 || e <= $[l].end + $[l].half) {
a = l;
break
} t.firstItem = De(o) ? o : 0, t.centerItem = De(s) ? s : t.firstItem, t.lastItem = De(a) ? a : t.centerItem
}
return t
}
function v(e) {
xe.extend(ee, d(e))
}
function p() {
var e = G.dest <= G.start,
t = G.dest >= G.end,
i = (e ? 1 : 0) | (t ? 2 : 0);
if (ye.slideePosState !== i && (ye.slideePosState = i, ge.is("button,input") && ge.prop("disabled", e), me.is("button,input") && me.prop("disabled", t), ge.add(de)[e ? "addClass" : "removeClass"](F.disabledClass), me.add(ue)[t ? "addClass" : "removeClass"](F.disabledClass)), ye.fwdbwdState !== i && Ie.released && (ye.fwdbwdState = i, de.is("button,input") && de.prop("disabled", e), ue.is("button,input") && ue.prop("disabled", t)), le && null != ee.activeItem) {
var n = 0 === ee.activeItem,
r = ee.activeItem >= $.length - 1,
o = (n ? 1 : 0) | (r ? 2 : 0);
ye.itemsButtonState !== o && (ye.itemsButtonState = o, pe.is("button,input") && pe.prop("disabled", n), fe.is("button,input") && fe.prop("disabled", r), pe[n ? "addClass" : "removeClass"](F.disabledClass), fe[r ? "addClass" : "removeClass"](F.disabledClass))
}
}
function r(e, t, i) {
if (e = u(e), t = u(t), -1 < e && -1 < t && e !== t && (!i || t !== e - 1) && (i || t !== e + 1)) {
J.eq(e)[i ? "insertAfter" : "insertBefore"]($[t].el);
var n = e < t ? e : i ? t : t - 1,
r = t < e ? e : i ? t + 1 : t,
o = t < e;
null != ee.activeItem && (e === ee.activeItem ? ye.active = ee.activeItem = i ? o ? t + 1 : t : o ? t : t - 1 : ee.activeItem > n && ee.activeItem < r && (ye.active = ee.activeItem += o ? 1 : -1)), a()
}
}
function f(e, t) {
for (var i = 0, n = ve[e].length; i < n; i++)
if (ve[e][i] === t) return i;
return -1
}
function g() {
Ie.released && !B.isPaused && B.resume()
}
function y(e) {
return it(Fe(e, X.start, X.end) / X.end * (G.end - G.start)) + G.start
}
function A() {
Ie.history[0] = Ie.history[1], Ie.history[1] = Ie.history[2], Ie.history[2] = Ie.history[3], Ie.history[3] = Ie.delta
}
function C(e) {
Ie.released = 0, Ie.source = e, Ie.slidee = "slidee" === e
}
function I(e) {
var t = "touchstart" === e.type,
i = e.data.source,
n = "slidee" === i;
Ie.init || !t && b(e.target) || !("handle" !== i || F.dragHandle && X.start !== X.end) || n && !(t ? F.touchDragging : F.mouseDragging && e.which < 2) || (t || Pe(e), C(i), Ie.init = 0, Ie.$source = xe(e.target), Ie.touch = t, Ie.pointer = t ? e.originalEvent.touches[0] : e, Ie.initX = Ie.pointer.pageX, Ie.initY = Ie.pointer.pageY, Ie.initPos = n ? G.cur : X.cur, Ie.start = +new Date, Ie.time = 0, Ie.path = 0, Ie.delta = 0, Ie.locked = 0, Ie.history = [0, 0, 0, 0], Ie.pathToLock = n ? t ? 30 : 10 : 0, We.on(t ? qe : Ye, E), B.pause(1), (n ? U : j).addClass(F.draggedClass), L("moveStart"), n && (be = setInterval(A, 10)))
}
function E(e) {
if (Ie.released = "mouseup" === e.type || "touchend" === e.type, Ie.pointer = Ie.touch ? e.originalEvent[Ie.released ? "changedTouches" : "touches"][0] : e, Ie.pathX = Ie.pointer.pageX - Ie.initX, Ie.pathY = Ie.pointer.pageY - Ie.initY, Ie.path = et(tt(Ie.pathX, 2) + tt(Ie.pathY, 2)), Ie.delta = F.horizontal ? Ie.pathX : Ie.pathY, Ie.released || !(Ie.path < 1)) {
if (!Ie.init) {
if (!(F.horizontal ? $e(Ie.pathX) > $e(Ie.pathY) : $e(Ie.pathX) < $e(Ie.pathY))) return _();
Ie.init = 1
}
Pe(e), !Ie.locked && Ie.path > Ie.pathToLock && Ie.slidee && (Ie.locked = 1, Ie.$source.on(Ze, Oe)), Ie.released && (_(), F.releaseSwing && Ie.slidee && (Ie.swing = (Ie.delta - Ie.history[0]) / 40 * 300, Ie.delta += Ie.swing, Ie.tweese = 10 < $e(Ie.swing))), l(Ie.slidee ? it(Ie.initPos - Ie.delta) : y(Ie.initPos + Ie.delta))
}
}
function _() {
clearInterval(be), Ie.released = !0, We.off(Ie.touch ? qe : Ye, E), (Ie.slidee ? U : j).removeClass(F.draggedClass), setTimeout(function () {
Ie.$source.off(Ze, Oe)
}), G.cur === G.dest && Ie.init && L("moveEnd"), B.resume(1), Ie.init = 0
}
function b(e) {
return ~xe.inArray(e.nodeName, Qe) || xe(e).is(F.interactive)
}
function w() {
B.stop(), We.off("mouseup", w)
}
function T(e) {
switch (Pe(e), this) {
case ue[0]:
case de[0]:
B.moveBy(ue.is(this) ? F.moveBy : -F.moveBy), We.on("mouseup", w);
break;
case pe[0]:
B.prev();
break;
case fe[0]:
B.next();
break;
case ge[0]:
B.prevPage();
break;
case me[0]:
B.nextPage()
}
}
function x(e) {
e.originalEvent[He] = B;
var t = +new Date;
if (ot + F.scrollHijack > t && ce[0] !== document && ce[0] !== window) ot = t;
else if (F.scrollBy && G.start !== G.end) {
var i = function (e) {
return Ee.curDelta = (F.horizontal ? e.deltaY || e.deltaX : e.deltaY) || -e.wheelDelta, Ee.curDelta /= 1 === e.deltaMode ? 3 : 100, le ? (Ue = +new Date, Ee.last < Ue - Ee.resetTime && (Ee.delta = 0), Ee.last = Ue, Ee.delta += Ee.curDelta, $e(Ee.delta) < 1 ? Ee.finalDelta = 0 : (Ee.finalDelta = it(Ee.delta / 1), Ee.delta %= 1), Ee.finalDelta) : Ee.curDelta
}(e.originalEvent);
(F.scrollTrap || 0 < i && G.dest < G.end || i < 0 && G.dest > G.start) && Pe(e, 1), B.slideBy(F.scrollBy * i)
}
}
function S(e) {
F.clickBar && e.target === W[0] && (Pe(e), l(y((F.horizontal ? e.pageX - W.offset().left : e.pageY - W.offset().top) - q / 2)))
}
function M(e) {
if (F.keyboardNavBy) switch (e.which) {
case F.horizontal ? 37:
38: Pe(e), B["pages" === F.keyboardNavBy ? "prevPage" : "prev"]();
break;
case F.horizontal ? 39:
40: Pe(e), B["pages" === F.keyboardNavBy ? "nextPage" : "next"]()
}
}
function R(e) {
return b(this) ? void(e.originalEvent[He + "ignore"] = !0) : void(this.parentNode !== U[0] || e.originalEvent[He + "ignore"] || B.activate(this))
}
function P() {
this.parentNode === Z[0] && B.activatePage(K.index(this))
}
function O(e) {
F.pauseOnHover && B["mouseenter" === e.type ? "pause" : "resume"](2)
}
function L(e, t) {
if (ve[e]) {
for (N = ve[e].length, Je.length = 0, D = 0; D < N; D++) Je.push(ve[e][D]);
for (D = 0; D < N; D++) Je[D].call(B, e, t)
}
}
var D, N, F = xe.extend({}, Me.defaults, e),
B = this,
V = De(s),
k = xe(s),
U = F.slidee ? xe(F.slidee).eq(0) : k.children().eq(0),
H = 0,
z = 0,
G = {
start: 0,
center: 0,
end: 0,
cur: 0,
dest: 0
},
W = xe(F.scrollBar).eq(0),
j = W.children().eq(0),
Y = 0,
q = 0,
X = {
start: 0,
end: 0,
cur: 0
},
Z = xe(F.pagesBar),
K = 0,
Q = [],
J = 0,
$ = [],
ee = {
firstItem: 0,
lastItem: 0,
centerItem: 0,
activeItem: null,
activePage: 0
},
te = new Be(k[0]),
ie = new Be(U[0]),
ne = new Be(W[0]),
re = new Be(j[0]),
oe = "basic" === F.itemNav,
ae = "forceCentered" === F.itemNav,
se = "centered" === F.itemNav || ae,
le = !V && (oe || se || ae),
ce = F.scrollSource ? xe(F.scrollSource) : k,
he = F.dragSource ? xe(F.dragSource) : k,
ue = xe(F.forward),
de = xe(F.backward),
pe = xe(F.prev),
fe = xe(F.next),
ge = xe(F.prevPage),
me = xe(F.nextPage),
ve = {},
ye = {},
Ae = {},
Ce = {},
Ie = {
released: 1
},
Ee = {
last: 0,
delta: 0,
resetTime: 200
},
_e = 0,
be = 0,
we = 0,
Te = 0;
V || (s = k[0]), B.initialized = 0, B.frame = s, B.slidee = U[0], B.pos = G, B.rel = ee, B.items = $, B.pages = Q, B.isPaused = 0, B.options = F, B.dragging = Ie, B.reload = function () {
a()
}, B.getPos = function (e) {
if (le) {
var t = h(e);
return -1 !== t && $[t]
}
var i = U.find(e).eq(0);
if (i[0]) {
var n = F.horizontal ? i.offset().left - U.offset().left : i.offset().top - U.offset().top,
r = i[F.horizontal ? "outerWidth" : "outerHeight"]();
return {
start: n,
center: n - H / 2 + r / 2,
end: n - H + r,
size: r
}
}
return !1
}, B.moveBy = function (e) {
Ce.speed = e, !Ie.init && Ce.speed && G.cur !== (0 < Ce.speed ? G.end : G.start) && (Ce.lastTime = +new Date, Ce.startPos = G.cur, C("button"), Ie.init = 1, L("moveStart"), ze(Te), t())
}, B.stop = function () {
"button" === Ie.source && (Ie.init = 0, Ie.released = 1)
}, B.prev = function () {
B.activate(null == ee.activeItem ? 0 : ee.activeItem - 1)
}, B.next = function () {
B.activate(null == ee.activeItem ? 0 : ee.activeItem + 1)
}, B.prevPage = function () {
B.activatePage(ee.activePage - 1)
}, B.nextPage = function () {
B.activatePage(ee.activePage + 1)
}, B.slideBy = function (e, t) {
e && (le ? B[se ? "toCenter" : "toStart"](Fe((se ? ee.centerItem : ee.firstItem) + F.scrollBy * e, 0, $.length)) : l(G.dest + e, t))
}, B.slideTo = function (e, t) {
l(e, t)
}, B.toStart = function (e, t) {
i("start", e, t)
}, B.toEnd = function (e, t) {
i("end", e, t)
}, B.toCenter = function (e, t) {
i("center", e, t)
}, B.getIndex = h, B.activate = function (e, t) {
var i = m(e);
F.smart && !1 !== i && (se ? B.toCenter(i, t) : i >= ee.lastItem ? B.toStart(i, t) : i <= ee.firstItem ? B.toEnd(i, t) : g())
}, B.activatePage = function (e, t) {
De(e) && l(Q[Fe(e, 0, Q.length - 1)], t)
}, B.resume = function (e) {
F.cycleBy && F.cycleInterval && ("items" !== F.cycleBy || $[0] && null != ee.activeItem) && !(e < B.isPaused) && (B.isPaused = 0, we ? we = clearTimeout(we) : L("resume"), we = setTimeout(function () {
switch (L("cycle"), F.cycleBy) {
case "items":
B.activate(ee.activeItem >= $.length - 1 ? 0 : ee.activeItem + 1);
break;
case "pages":
B.activatePage(ee.activePage >= Q.length - 1 ? 0 : ee.activePage + 1)
}
}, F.cycleInterval))
}, B.pause = function (e) {
e < B.isPaused || (B.isPaused = e || 100, we && (we = clearTimeout(we), L("pause")))
}, B.toggle = function () {
B[we ? "pause" : "resume"]()
}, B.set = function (e, t) {
xe.isPlainObject(e) ? xe.extend(F, e) : F.hasOwnProperty(e) && (F[e] = t)
}, B.add = function (e, t) {
var i = xe(e);
le ? (null == t || !$[0] || t >= $.length ? i.appendTo(U) : $.length && i.insertBefore($[t].el), null != ee.activeItem && t <= ee.activeItem && (ye.active = ee.activeItem += i.length)) : U.append(i), a()
}, B.remove = function (e) {
if (le) {
var t = u(e);
if (-1 < t) {
J.eq(t).remove();
var i = t === ee.activeItem;
null != ee.activeItem && t < ee.activeItem && (ye.active = --ee.activeItem), a(), i && (ye.active = null, B.activate(ee.activeItem))
}
} else xe(e).remove(), a()
}, B.moveAfter = function (e, t) {
r(e, t, 1)
}, B.moveBefore = function (e, t) {
r(e, t)
}, B.on = function (e, t) {
if ("object" === Re(e))
for (var i in e) e.hasOwnProperty(i) && B.on(i, e[i]);
else if ("function" === Re(t))
for (var n = e.split(" "), r = 0, o = n.length; r < o; r++) ve[n[r]] = ve[n[r]] || [], -1 === f(n[r], t) && ve[n[r]].push(t);
else if ("array" === Re(t))
for (var a = 0, s = t.length; a < s; a++) B.on(e, t[a])
}, B.one = function (t, i) {
B.on(t, function e() {
i.apply(B, arguments), B.off(t, e)
})
}, B.off = function (e, t) {
if (t instanceof Array)
for (var i = 0, n = t.length; i < n; i++) B.off(e, t[i]);
else
for (var r = e.split(" "), o = 0, a = r.length; o < a; o++)
if (ve[r[o]] = ve[r[o]] || [], null == t) ve[r[o]].length = 0;
else {
var s = f(r[o], t); - 1 !== s && ve[r[o]].splice(s, 1)
}
}, B.destroy = function () {
return ce.add(j).add(W).add(Z).add(ue).add(de).add(pe).add(fe).add(ge).add(me).off("." + He), We.off("keydown", M), pe.add(fe).add(ge).add(me).removeClass(F.disabledClass), J && null != ee.activeItem && J.eq(ee.activeItem).removeClass(F.activeClass), Z.empty(), V || (k.off("." + He), te.restore(), ie.restore(), ne.restore(), re.restore(), xe.removeData(s, He)), $.length = Q.length = 0, ye = {}, B.initialized = 0, B
}, B.init = function () {
if (!B.initialized) {
B.on(n);
var e = ["overflow", "position"],
t = ["position", "webkitTransform", "msTransform", "transform", "left", "top", "width", "height"];
te.save.apply(te, e), ne.save.apply(ne, e), ie.save.apply(ie, t), re.save.apply(re, t);
var i = j;
return V || (i = i.add(U), k.css("overflow", "hidden"), Ve || "static" !== k.css("position") || k.css("position", "relative")), Ve ? ke && i.css(Ve, ke) : ("static" === W.css("position") && W.css("position", "relative"), i.css({
position: "absolute"
})), F.forward && ue.on(Ke, T), F.backward && de.on(Ke, T), F.prev && pe.on(Ze, T), F.next && fe.on(Ze, T), F.prevPage && ge.on(Ze, T), F.nextPage && me.on(Ze, T), ce.on(Xe, x), W[0] && W.on(Ze, S), le && F.activateOn && k.on(F.activateOn + "." + He, "*", R), Z[0] && F.activatePageOn && Z.on(F.activatePageOn + "." + He, "*", P), he.on(je, {
source: "slidee"
}, I), j && j.on(je, {
source: "handle"
}, I), We.on("keydown", M), V || (k.on("mouseenter." + He + " mouseleave." + He, O), k.on("scroll." + He, Le)), B.initialized = 1, a(!0), F.cycleBy && !V && B[F.startPaused ? "pause" : "resume"](), B
}
}
}
function Re(e) {
return null == e ? String(e) : "object" == typeof e || "function" == typeof e ? Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase() || "object" : typeof e
}
function Pe(e, t) {
e.preventDefault(), t && e.stopPropagation()
}
function Oe(e) {
Pe(e, 1), xe(this).off(e.type, Oe)
}
function Le() {
this.scrollLeft = 0, this.scrollTop = 0
}
function De(e) {
return !isNaN(parseFloat(e)) && isFinite(e)
}
function Ne(e, t) {
return 0 | it(String(e.css(t)).replace(/[^\-0-9.]/g, ""))
}
function Fe(e, t, i) {
return e < t ? t : i < e ? i : e
}
function Be(t) {
var i = {
style: {},
save: function () {
if (t && t.nodeType) {
for (var e = 0; e < arguments.length; e++) i.style[arguments[e]] = t.style[arguments[e]];
return i
}
},
restore: function () {
if (t && t.nodeType) {
for (var e in i.style) i.style.hasOwnProperty(e) && (t.style[e] = i.style[e]);
return i
}
}
};
return i
}
var Ve, ke, Ue, r, o, He = "sly",
ze = e.cancelAnimationFrame || e.cancelRequestAnimationFrame,
Ge = e.requestAnimationFrame,
We = xe(document),
je = "touchstart." + He + " mousedown." + He,
Ye = "mousemove." + He + " mouseup." + He,
qe = "touchmove." + He + " touchend." + He,
Xe = (document.implementation.hasFeature("Event.wheel", "3.0") ? "wheel." : "mousewheel.") + He,
Ze = "click." + He,
Ke = "mousedown." + He,
Qe = ["INPUT", "SELECT", "BUTTON", "TEXTAREA"],
Je = [],
$e = Math.abs,
et = Math.sqrt,
tt = Math.pow,
it = Math.round,
nt = Math.max,
rt = Math.min,
ot = 0;
function t(e) {
for (var t = 0, i = r.length; t < i; t++) {
var n = r[t] ? r[t] + e.charAt(0).toUpperCase() + e.slice(1) : e;
if (null != o.style[n]) return n
}
}
We.on(Xe, function (e) {
var t = e.originalEvent[He],
i = +new Date;
(!t || t.options.scrollHijack < i - ot) && (ot = i)
}),
function (t) {
Ge = t.requestAnimationFrame || t.webkitRequestAnimationFrame || function (e) {
var t = (new Date).getTime(),
i = Math.max(0, 16 - (t - r)),
n = setTimeout(e, i);
return r = t, n
};
var r = (new Date).getTime(),
i = t.cancelAnimationFrame || t.webkitCancelAnimationFrame || t.clearTimeout;
ze = function (e) {
i.call(t, e)
}
}(window), r = ["", "webkit", "moz", "ms", "o"], o = document.createElement("div"), Ve = t("transform"), ke = t("perspective") ? "translateZ(0) " : "", e.Sly = Me, xe.fn.sly = function (n, r) {
var o, a;
return xe.isPlainObject(n) || ("string" !== Re(n) && !1 !== n || (o = !1 === n ? "destroy" : n, a = Array.prototype.slice.call(arguments, 1)), n = {}), this.each(function (e, t) {
var i = xe.data(t, He);
i || o ? i && o && i[o] && i[o].apply(i, a) : i = xe.data(t, He, new Me(t, n, r).init())
})
}, Me.defaults = {
slidee: null,
horizontal: !1,
itemNav: null,
itemSelector: null,
smart: !1,
activateOn: null,
activateMiddle: !1,
scrollSource: null,
scrollBy: 0,
scrollHijack: 300,
scrollTrap: !1,
dragSource: null,
mouseDragging: !1,
touchDragging: !1,
releaseSwing: !1,
swingSpeed: .2,
elasticBounds: !1,
interactive: null,
scrollBar: null,
dragHandle: !1,
dynamicHandle: !1,
minHandleSize: 50,
clickBar: !1,
syncSpeed: .5,
pagesBar: null,
activatePageOn: null,
pageBuilder: function (e) {
return "
" + (e + 1) + "
"
},
forward: null,
backward: null,
prev: null,
next: null,
prevPage: null,
nextPage: null,
cycleBy: null,
cycleInterval: 5e3,
pauseOnHover: !1,
startPaused: !1,
moveBy: 300,
speed: 0,
easing: "swing",
startAt: null,
keyboardNavBy: null,
draggedClass: "dragged",
activeClass: "active",
disabledClass: "disabled"
}
}(jQuery, window),
function o(a, s, l) {
function c(i, e) {
if (!s[i]) {
if (!a[i]) {
var t = "function" == typeof require && require;
if (!e && t) return t(i, !0);
if (h) return h(i, !0);
var n = new Error("Cannot find module '" + i + "'");
throw n.code = "MODULE_NOT_FOUND", n
}
var r = s[i] = {
exports: {}
};
a[i][0].call(r.exports, function (e) {
var t = a[i][1][e];
return c(t || e)
}, r, r.exports, o, a, s, l)
}
return s[i].exports
}
for (var h = "function" == typeof require && require, e = 0; e < l.length; e++) c(l[e]);
return c
}({
1: [function (p, f, e) {
(function (e) {
"use strict";
function t(e) {
this.player = null, this.director = null, this.modelManager = null, this.container = null, this.tagManager = null, this.fadeInSpeed = e, null !== this.fadeInSpeed && void 0 !== this.fadeInSpeed || (this.fadeInSpeed = 0)
}
var r = p("three"),
i = p("./util/logger"),
n = (p("./util/common"), p("./enum/PlayerEvents")),
o = p("./enum/DirectorEvents"),
a = p("./settings"),
s = p("./enum/Viewmode"),
l = (p("./enum/WarpStyle"), p("./enum/BlackoutStyle"), p("./enum/ModelManagerEvents")),
c = p("./enum/tagEvents"),
h = p("./util/transitions"),
u = p("./util/lerp"),
d = new i(e);
window.THREE = r, t.prototype.init = function (e, t, i, n, r) {
(window.app = this).player = t, this.director = e, this.modelManager = i, this.tagManager = n, this.container = r, this.updateModel(), this.bindEvents()
}, t.prototype.bindEvents = function () {
this.modelManager.on(l.ActiveModelChanged, this.updateModel.bind(this)), this.player.on(n.ModeChanging, this.handlePlayerModeChanging.bind(this)), this.player.on(n.ModeChanged, this.handlePlayerModeChanged.bind(this)), this.player.on(n.ClosestPanoChanging, this.handleClosestPanoChanging.bind(this)), this.player.on(n.StartInside, this.handleStartInside.bind(this)), this.player.on(n.StartOutside, this.handleStartOutside.bind(this)), this.player.on(n.WarpStarted, this.handleWarpStarted.bind(this)), this.director.on(o.ActionInterrupted, this.handleActionInterruption.bind(this)), this.tagManager.on(c.TagActivated, this.ontagActivated.bind(this)), this.tagManager.on(c.TagNavigation, this.onNavigationTotag.bind(this))
}, t.prototype.updateModel = function () {
this.model = this.modelManager.getActiveModel()
}, t.prototype.handleWarpStarted = function () {
this.hidePlayerReticule()
}, t.prototype.ontagActivated = function () {
this.hidePlayerReticule()
}, t.prototype.onNavigationTotag = function () {
this.hidePlayerReticule()
}, t.prototype.handlePlayerModeChanging = function (e, t, i) {
var n = this.modelManager.getActiveModel(),
r = this.player.is360View(t, i) || this.director.tourIsPlaying ? 0 : a[t].markerOpacity;
n.fadePanoMarkers(r), n.setMode(t)
}, t.prototype.handlePlayerModeChanged = function (e, t) {
var i = this.modelManager.getActiveModel(),
n = t === s.PANORAMA ? r.DoubleSide : r.FrontSide;
i.setSide(n), i.setMode(t)
}, t.prototype.handleClosestPanoChanging = function (e, t, i) {
i !== s.TRANSITIONING && (e && !this.director.tourIsPlaying && e.hoverOff(i), t && !this.director.tourIsPlaying && t.hoverOn(i))
}, t.prototype.handleActionInterruption = function () {}, t.prototype.handleStartInside = function (e) {
var t = a[this.player.mode],
i = e ? 0 : t.transitionTime * t.skyboxOpacityLength;
this.fadeIn(this.fadeInSpeed), this.model.alpha = 0, this.model.skybox.material.uniforms.opacity.value = 1, this.model.fadePanoMarkers(e ? 0 : t.markerOpacity);
var n = this.player.reticule;
h.start(u.property(n.material, "opacity", 0), i, null, 0, null, "retReOpac")
}, t.prototype.handleStartOutside = function (e) {
this.fadeIn(e)
}, t.prototype.fadeIn = function (e) {
null != e || (e = 2e3, d.warn("DisplayController.fadeIn -> no transition time specified, defaulting to 2000 ms.")), $(this.container).fadeIn(e)
}, t.prototype.hidePlayerReticule = function () {
this.player.reticule.hide()
}, f.exports = t
}).call(this, "/js/DisplayController.js")
}, {
"./enum/BlackoutStyle": 18,
"./enum/DirectorEvents": 23,
"./enum/tagEvents": 32,
"./enum/ModelManagerEvents": 33,
"./enum/PlayerEvents": 40,
"./enum/Viewmode": 51,
"./enum/WarpStyle": 52,
"./settings": 166,
"./util/common": 185,
"./util/lerp": 188,
"./util/logger": 189,
"./util/transitions": 195,
three: 217
}],
2: [function (e, t, i) {
"use strict";
function n() {
this.baseStartTime = performance.timing.navigationStart, this.loadingStartTime = null, this.waitingStartTime = null, this.appReadyTime = null
}
n.prototype.setBaseStartTime = function (e) {
this.baseStartTime = e || Date.now()
}, n.prototype.setWaitingStartTime = function (e) {
this.waitingStartTime = e || Date.now()
}, n.prototype.setLoadingStartTime = function (e) {
this.loadingStartTime = e || Date.now()
}, n.prototype.setAppReadyTime = function (e) {
this.appReadyTime = e || Date.now()
}, n.prototype.calcFullLoadingTime = function () {
var e = this.appReadyTime - this.baseStartTime;
return this.waitingStartTime && (e -= this.loadingStartTime - this.waitingStartTime), e
}, t.exports = n
}, {}],
3: [function (i, n, e) {
(function (e) {
"use strict";
function a() {
return 100 * Math.random()
}
var t = i("./util/logger"),
s = i("./util/browser"),
l = new t(e),
c = window.MP_AB_TESTS = window.MP_AB_TESTS || {
initialized: !1,
init: function (e, t) {
if (t = t || {}, !this.initialized) {
for (var i in this.initialized = !0, s.valueFromHash("tilegen") && (t.tilegen = 1 === s.valueFromHash("tilegen", 0)), s.valueFromHash("imgopt") && (t.imgopt = 1 === s.valueFromHash("imgopt", 0)), e) {
var n = i.match("^sc_tilegen_([0-9]+)$");
n && (c.tilegen = a() < parseInt(n[1]));
var r = i.match("^sc_imgopt_([0-9]+)$");
r && (c.imgopt = a() < parseInt(r[1]))
}
for (var o in t) c[o] = t[o], l.debug("A/B override:", o, c[o])
}
},
changeIfTileGenerating: function (e) {
return c.tilegen && (e += -1 === e.indexOf("?") ? "?" : "&", e += ""), e
},
changeIfImageOptimzing: function (e) {
return c.imgopt && -1 === e.indexOf("imgopt=1") && (e += -1 === e.indexOf("?") ? "?" : "&", e += ""), e
},
tilegen: !1,
imgopt: !1
};
n.exports = c
}).call(this, "/js/ab.js")
}, {
"./util/browser": 182,
"./util/logger": 189
}],
4: [function (u, d, e) {
(function (e) {
"use strict";
function r(n, e, t, i) {
function r(e) {
a[e.sid] = !0;
var t = e.billboard.media && e.billboard.media.type,
i = {
tag_id: e.sid,
tags_visited: Object.keys(a).length,
tag_count: Object.keys(n.tags).length,
tag_view_count: ++d,
has_media: !!t
};
t && (i.media_type = t), g("tag_opened", i)
}
var o, a = {},
s = Date.now() - P,
l = null;
i && (l = Date.now() - window.navigationStart);
try {
o = n.data.player_options.highlight_reel && 1 < n.heroLocations.length
} catch (n) {
o = !1
}
var c, h = n.supportsVR;
h || (c = "VR disabled at the model/account level", y.valueFromHash("vr") === w.NONE ? c = "VR disabled, using &vr=0" : y.detectAndroid() ? _.isDeviceSupported(b.Android) || (c = "VR disabled, unsupported Android version") : y.detectIOS() && (_.isDeviceSupported(b.IOS) || (c = "VR disabled, unsupported iOS version"))), g("model_loaded", {
duration: s,
duration_from_navigation_start: l,
has_hlr: o,
has_vr: h,
vr_reason: c
});
var u = 0;
n.panos.forEach(function (e) {
e.on("enter", function () {
f("pano_viewed", {
pano_id: e.id,
pano_view_count: ++u,
alignment_type: e.alignmentType,
interaction_source: R,
navigation_source: v
})
})
});
var d = 0;
for (var p in n.tags) n.tags[p].billboard.on(M.OPENED, r.bind(this, n.tags[p]));
e.on("tour_auto", function (e) {
v = "tour_" + e
}), e.on("tour_manual", function (e) {
R = "gui-" + e, v = "tour_manual"
}), t.on(C.InteractionKey, function () {
e.mode === A.TRANSITIONING || e.flying || m(C.InteractionKey)
}), t.on(C.InteractionDirect, function () {
e.mode === A.TRANSITIONING || e.flying || m(C.InteractionDirect)
}),
function (t) {
I.on(T.OPENED, function () {
f("showcase_share_intent", {
pano_id: t.currentPano && t.currentPano.id
})
}), I.on(T.LINK_CLICKED, function (e) {
f("showcase_share_action", {
channel: e.channel,
pano_id: t.currentPano && t.currentPano.id
})
}), E.on(x.ORIGIN_LINK_CLICKED, function () {
f("showcase_share_origin_link_clicked")
})
}(e),
function () {
_.on(S.OPENED, f.bind(this, "showcase_gui", {
gui_action: "click_vr_button"
})), _.on(S.LAUNCH, function (e) {
f("showcase_gui", {
gui_action: "launch_vr",
vr_platform: e.vr_platform,
vr_app: e.vr_app
})
}), _.on(S.PREV, f.bind(this, "showcase_gui", {
gui_action: "vr_modal_prev"
})), _.on(S.NEXT, function (e) {
f("showcase_gui", {
gui_action: e.nextAction
})
}), _.on(S.CLOSED, f.bind(this, "showcase_gui", {
gui_action: "vr_modal_close"
})), _.on(S.falseICECHOSEN, function (e) {
f("showcase_gui", {
gui_action: e.name + " "
})
}), _.on(S.STORE, function (e) {
f("showcase_gui", {
gui_action: "launch_store",
store: e
})
})
}()
}
function f(e, t) {
if (t = t || {}, i) try {
window.analytics.track(e, s.extendObject(t, c), {
context: {
app: {
name: "showcase",
version: "2.25.6-0-gd87e5b1"
},
screen: {
width: window.screen.width,
height: window.screen.height,
density: window.devicePixelRatio
}
}
})
} catch (t) {
console.warn("Failed to send data to segment for " + e)
}
}
function g(e, t) {
f(e, t = t || {})
}
function m(e, t) {
R = e === C.InteractionGui ? "gui-" + t : e, v = "self_guided"
}
var v, o, a = (u("three"), u("./util/ajax"), u("./ab")),
y = u("./util/browser"),
s = u("./util/common"),
t = u("./settings"),
A = (u("./localization/localize"), u("./enum/Viewmode")),
C = u("./enum/ControlEvents"),
I = u("./gui/sharing/modal"),
E = u("./gui/title/titleBar"),
_ = u("./gui/vr/vrModal"),
b = u("./enum/VRPlatforms"),
w = u("./enum/VROption"),
T = u("./gui/sharing/ShareEvents"),
x = u("./gui/title/TitleEvents"),
S = u("./gui/vr/vrEvent"),
M = u("./tag/Billboard/BillboardEvent"),
l = new(u("./util/logger"))(e),
R = (u("./enum/PlayerEvents"), "direct"),
i = null,
n = !1,
P = null,
c = null,
h = s.uuid4();
d.exports = {
report: function (e, t, i, n) {
! function (e, t) {
if (o) try {
o.addEvent(e, s.extendObject({
host: window.location.host,
keen: {
addons: [{
name: "keen:ua_parser",
input: {
ua_string: "user_agent"
},
output: "parsed_user_agent"
}]
},
user_agent: "${keen.user_agent}",
referrer: {
url: s.normalizeUrl(document.referrer),
domain: s.domainFromUrl(document.referrer),
url_original: document.referrer
},
embedded: y.inIframe(),
is_mobile: y.isMobile(),
version: "2.25.6-0-gd87e5b1"
}, t))
} catch (e) {
l.warn("analytics.report -> client.addEvent() error (is there blocking software installed?). Error message: " + e)
}
}("Session starts", {
model: e,
status: t,
loadtime: Date.now() - (P || Date.now()),
loadtime_from_navigation_start: i ? Date.now() - window.navigationStart : null,
autoplay: i,
quickstart: n,
ab_tilegen: a.tilegen,
ab_imgopt: a.imgopt
})
},
impression: function (e) {
g("impression", {
visible: void 0 === (e = e || {}).isVisible || e.isVisible,
url_params: (void 0 !== e.immediate && e.immediate, window.location.search.substr(1).split("&"))
})
},
initKeen: function (e) {
return e.token && e.appId ? void(o = new Keen({
projectId: e.appId,
writeKey: e.token,
readKey: "",
requestType: "xhr"
})) : void l.warn("no keen token/appId")
},
initSegment: function (e) {
return e.token ? (i = e.token, window.analytics.load(e.token), c = {
model_id: e.model,
start_source: e.startSource,
autoplay: e.autoplay,
quickstart: e.quickstart,
language_tag: t.languageTag,
is_mobile: y.isMobile(),
iframe: y.inIframe(),
aspect_ratio: y.aspectRatio(),
session_id: h,
window: {
width: $("#player").width(),
height: $("#player").height()
},
platform: {
browser: {
name: $.ua.browser.name,
major: $.ua.browser.major,
version: $.ua.browser.version
},
os: {
name: $.ua.os.name,
version: $.ua.os.version
},
device: {
vendor: $.ua.device.vendor,
model: $.ua.device.model,
type: $.ua.device.type
}
}
}, n = Math.random() < t.analytics.sessionTrackingRate, l.debug("tracking sample rate = " + t.analytics.sessionTrackingRate), void l.debug("tracking this session = " + n)) : void l.warn("no segment token")
},
sessionStart: function (e) {
l.debug("analytics user_session_start"), f("session_started"), P = Date.now(), window.addEventListener("unload", function () {
! function (e, t) {
if (t = t || {}, navigator.sendBeacon && i) try {
navigator.sendBeacon("https://api.segment.io/v1/t", JSON.stringify({
event: e,
anonymousId: window.analytics.user().anonymousId(),
properties: s.extendObject(t, c),
writeKey: i,
sentAt: Date.now(),
type: "track",
context: {
userAgent: y.userAgent(),
library: {
name: "showcase-beacon",
version: "2.25.6-0-gd87e5b1"
},
app: {
name: "showcase",
version: "2.25.6-0-gd87e5b1"
}
}
}))
} catch (e) {
console.warn("Failed to send async segment request")
}
}("session_ended", {
duration: Date.now() - P
})
})
},
modelLoaded: function (e, t, i, n) {
r(e, t, i, n)
},
loadComplete: function (e) {
f("load_times", {
time_to_app_start: e
})
},
track: function (e, t) {
n && (l.debug('analytics.track("' + e + '", ' + JSON.stringify(t) + " )"), f(e, t))
},
trackAlways: function (e, t) {
l.debug('analytics.trackAlways("' + e + '", ' + JSON.stringify(t) + " )"), f(e, t)
},
getSessionId: function () {
return h
},
updateInteraction: m
}
}).call(this, "/js/analytics.js")
}, {
"./ab": 3,
"./enum/ControlEvents": 21,
"./enum/PlayerEvents": 40,
"./enum/VROption": 47,
"./enum/VRPlatforms": 49,
"./enum/Viewmode": 51,
"./gui/sharing/ShareEvents": 76,
"./gui/sharing/modal": 77,
"./gui/title/TitleEvents": 80,
"./gui/title/titleBar": 82,
"./gui/vr/vrEvent": 85,
"./gui/vr/vrModal": 87,
"./localization/localize": 108,
"./tag/Billboard/BillboardEvent": 120,
"./settings": 166,
"./util/ajax": 181,
"./util/browser": 182,
"./util/common": 185,
"./util/logger": 189,
three: 217
}],
5: [function (e, t, i) {
"use strict";
function n() {
r.PerspectiveCamera.call(this, a.clampVFOV(o.dollhouseFOV), $("#player").width() / $("#player").height(), o.dollhouseNear, o.dollhouseFar), this.controls = null
}
var r = e("three"),
o = e("../constants"),
a = e("../util/cameraLight");
(n.prototype = Object.create(r.PerspectiveCamera.prototype)).updateAspect = function (e) {
this.aspect = e, this.updateProjectionMatrix()
}, t.exports = n
}, {
"../constants": 8,
"../util/cameraLight": 184,
three: 217
}],
6: [function (e, t, i) {
"use strict";
function n() {
var e = $("#player").width() / $("#player").height();
r.OrthographicCamera.call(this, -o.orthoBase, o.orthoBase, o.orthoBase / e, -o.orthoBase / e, o.orthoNear, o.orthoFar), this.controls = null, this.updateAspect(e)
}
var r = e("three"),
o = e("../constants");
(n.prototype = Object.create(r.OrthographicCamera.prototype)).updateAspect = function (e) {
this.aspect = e, this.top = o.orthoBase / e, this.bottom = -o.orthoBase / e, this.updateProjectionMatrix()
}, t.exports = n
}, {
"../constants": 8,
three: 217
}],
7: [function (e, t, i) {
"use strict";
function n() {
r.PerspectiveCamera.call(this, a.clampVFOV(o.insideFOV), $("#player").width() / $("#player").height(), o.insideNear, o.insideFar), this.controls = null
}
var r = e("three"),
o = e("../settings"),
a = e("../util/cameraLight");
(n.prototype = Object.create(r.PerspectiveCamera.prototype)).updateAspect = function (e) {
this.aspect = e, this.updateProjectionMatrix()
}, t.exports = n
}, {
"../settings": 166,
"../util/cameraLight": 184,
three: 217
}],
8: [function (e, t, i) {
"use strict";
t.exports = {
signedUrlDefaultExpireTime: 24e4,
signedUrlCheckInterval: 1e4,
signedUrlRefreshBuffer: 15e3,
dollhouseFOV: 70,
dollhouseNear: 1,
dollhouseFar: 5e3,
insideFOV: 70,
insideFOVMax: 120,
insideNear: .1,
insideFar: 5e3,
insideLookSpeed: .12,
insideLookLimitUp: 40,
insideLookLimitDown: -40,
orthoNear: 1,
orthoFar: 5e3,
orthoBase: 10,
narrowLandscapeHeight: 290,
reallyNarrowLandscapeHeight: 250,
visionTilingStartDate: new Date("8/26/2016"),
visionTilingStartVersion: "1.1.407.13667",
windowHeightHighQualityThreshold: 900,
tourStepDelayDefault: 3500,
tourStepDelaySlideShow: 5e3,
workshopApsect: 9 / 16,
highQualityMaxZoom: 2,
ultraHighQualityMaxZoom: 3
}
}, {}],
9: [function (e, t, i) {
"use strict";
function n() {
this.activeControl = null, this.controls = {}, this.cameras = {}
}
var a = e("./PanoramaControls"),
s = e("./DollhouseControls"),
l = e("./FloorplanControls"),
c = e("../cameras/PanoramaCamera"),
h = e("../cameras/DollhouseCamera"),
u = e("../cameras/FloorplanCamera"),
r = e("events").EventEmitter,
d = e("../enum/ControlEvents"),
o = e("../enum/ModelManagerEvents"),
p = e("../enum/Viewmode"),
f = e("../settings");
(n.prototype = Object.create(r.prototype)).init = function (e, t) {
this.setUpControls(), this.bindEvents(e, t)
}, n.prototype.activateControls = function (e) {
this.activeControl && (this.activeControl.reset(), this.activeControl.enabled = !1), this.controls[e] && (this.controls[e].enabled = !0), this.activeControl = this.controls[e]
}, n.prototype.setUpControls = function () {
var i = {},
n = {},
e = [p.PANORAMA, p.DOLLHOUSE, p.FLOORPLAN],
r = [c, h, u],
o = [a, s, l];
e.forEach(function (e, t) {
i[e] = new r[t], n[e] = new o[t](i[e]), n[e].on(d.Move, this.emit.bind(this, d.Move)), n[e].on(d.InputStart, this.emit.bind(this, d.InputStart)), n[e].on(d.InteractionDirect, this.emit.bind(this, d.InteractionDirect)), n[e].on(d.InteractionKey, this.emit.bind(this, d.InteractionKey)), n[e].on(d.Pinch, this.emit.bind(this, d.Pinch)), n[e].on(d.Scroll, this.emit.bind(this, d.Scroll))
}.bind(this)), this.controls = n, this.cameras = i
}, n.prototype.bindEvents = function (e, t) {
e.addEventListener("mousemove", this.onMouseMove.bind(this)), e.addEventListener("mousedown", this.onMouseDown.bind(this)), e.addEventListener("mouseup", this.onMouseUp.bind(this)), e.addEventListener("mouseover", this.onMouseOver.bind(this)), f.useWheel && (e.addEventListener("mousewheel", this.onMouseWheel.bind(this), {
passive: !1
}), e.addEventListener("DOMMouseScroll", this.onMouseWheel.bind(this))), e.addEventListener("touchstart", this.onTouchStart.bind(this)), e.addEventListener("touchmove", this.onTouchMove.bind(this)), e.addEventListener("touchend", this.onTouchEnd.bind(this)), e.addEventListener("contextmenu", function (e) {
e.preventDefault()
}), e.addEventListener("pointerdown", this.onPointerDown.bind(this)), e.addEventListener("pointermove", this.onPointerMove.bind(this)), e.addEventListener("pointerup", this.onPointerUp.bind(this)), e.addEventListener("pointerout", this.onPointerCancel.bind(this)), e.addEventListener("pointercancel", this.onPointerCancel.bind(this)), document.addEventListener("keydown", this.onKeyDown.bind(this)), document.addEventListener("keyup", this.onKeyUp.bind(this)), t.on(o.ActiveModelChanged, function (e) {
this.setModelForControls(e.model)
}.bind(this))
}, n.prototype.setModelForControls = function (e) {
this.controls[p.DOLLHOUSE].setZoomBounds(e.boundingBox);
var t = e.boundingBox.clone().expandByScalar(f.modelBoundsPadding);
[p.DOLLHOUSE, p.FLOORPLAN].forEach(function (e) {
this.controls[e].setBounds(t)
}.bind(this))
}, n.prototype.onMouseDown = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onMouseDown(e)
}, n.prototype.onMouseMove = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onMouseMove(e)
}, n.prototype.onMouseUp = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onMouseUp(e)
}, n.prototype.onMouseOver = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onMouseOver(e)
}, n.prototype.onMouseWheel = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onMouseWheel(e)
}, n.prototype.onTouchStart = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onTouchStart(e), $("#hotListWrap")[0].classList.remove("hotListActive"), $("#hotListContent ul .active").removeClass("active"), $("#hotList")[0].classList.remove("active")
}, n.prototype.onTouchMove = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onTouchMove(e)
}, n.prototype.onTouchEnd = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onTouchEnd(e)
}, n.prototype.onPointerDown = function (e) {
if (e.preventDefault(), this.activeControl) switch (e.pointerType) {
case "mouse":
this.activeControl.onMouseDown(e);
break;
default:
this.activeControl.onPointerDown(e)
}
}, n.prototype.onPointerMove = function (e) {
if (e.preventDefault(), this.activeControl) switch (e.pointerType) {
case "mouse":
this.activeControl.onMouseMove(e);
break;
default:
this.activeControl.onPointerMove(e)
}
}, n.prototype.onPointerUp = function (e) {
if (e.preventDefault(), this.activeControl) switch (e.pointerType) {
case "mouse":
this.activeControl.onMouseUp(e);
break;
default:
this.activeControl.onPointerUp(e)
}
}, n.prototype.onPointerCancel = function (e) {
e.preventDefault(), this.activeControl && "mouse" !== e.pointerType && this.activeControl.onPointerUp(e)
}, n.prototype.onKeyDown = function (e) {
e.metaKey || e.ctrlKey || (e.preventDefault(), this.activeControl && this.activeControl.onKeyDown(e))
}, n.prototype.onKeyUp = function (e) {
e.preventDefault(), this.activeControl && this.activeControl.onKeyUp(e)
}, t.exports = n
}, {
"../cameras/DollhouseCamera": 5,
"../cameras/FloorplanCamera": 6,
"../cameras/PanoramaCamera": 7,
"../enum/ControlEvents": 21,
"../enum/ModelManagerEvents": 33,
"../enum/Viewmode": 51,
"../settings": 166,
"./DollhouseControls": 10,
"./FloorplanControls": 11,
"./PanoramaControls": 13,
events: 202
}],
10: [function (e, t, i) {
"use strict";
function n(e) {
a.call(this, e), this.minPolarAngle = o.dollhouseDefault.minPolarAngle, this.maxPolarAngle = o.dollhouseDefault.maxPolarAngle, this.minDistance = o.dollhouseDefault.minDistance, this.maxDistance = o.dollhouseDefault.maxDistance, this.adjustedMinDistance = this.minDistance, this.adjustedMaxDistance = this.maxDistance
}
var r = e("three"),
o = e("../settings"),
a = e("./OutsideControls");
(n.prototype = Object.create(a.prototype)).pan = function (e, t) {
this.camera.updateMatrix();
var i = this.camera.position.clone().sub(this.target).length();
i *= Math.tan(this.camera.fov / 2 * Math.PI / 180), this.panLeft(2 * e * i / $("#player").height()), this.panUp(-2 * t * i / $("#player").height())
}, n.prototype.updateZoom = function () {
return this.offset.length() * this.scale
}, n.prototype.setZoomBounds = function (e) {
var t = e.min.distanceTo(e.max);
this.adjustedMinDistance = Math.max(Math.min(t / 2, o.dollhouseDefault.minDistance), 0), this.adjustedMaxDistance = Math.min(Math.max(t, o.dollhouseDefault.maxDistance), o.skyboxRadius), this.minDistance = this.adjustedMinDistance, this.maxDistance = this.adjustedMaxDistance
}, n.prototype.resetRanges = function (e, t) {
e ? (this.minDistance = Math.min(e, this.minDistance), this.maxDistance = Math.max(e, this.maxDistance)) : (this.minDistance = this.adjustedMinDistance, this.maxDistance = this.adjustedMaxDistance), t ? (this.minPolarAngle = r.Math.degToRad(-15), this.maxPolarAngle = r.Math.degToRad(89.9)) : (this.minPolarAngle = o.dollhouseDefault.minPolarAngle, this.maxPolarAngle = o.dollhouseDefault.maxPolarAngle)
}, n.prototype.toJSON = function () {
return a.prototype.toJSON.call(this)
}, t.exports = n
}, {
"../settings": 166,
"./OutsideControls": 12,
three: 217
}],
11: [function (e, t, i) {
"use strict";
function n(e) {
c.call(this, e), this.minDistance = 15, this.maxDistance = 50, this.noRotateUpDown = !0, this.minPolarAngle = 0, this.maxPolarAngle = 0, this.mouseActions[u.LEFT] = h.PAN, this.mouseActions[u.MIDDLE] = h.DOLLY, this.mouseActions[u.RIGHT] = h.ROTATE, this.touchActions[1] = h.PAN, this.touchActions[2] = h.ROTATE_DOLLY, this.absoluteScale = 1, this.currentScale = 1
}
var r, o, a, s = e("three"),
l = e("../settings"),
c = e("./OutsideControls"),
h = e("../enum/ControlActions"),
u = e("../enum/MouseButton"),
d = e("../util/math"),
p = e("../util/browser");
(n.prototype = Object.create(c.prototype)).zoomToContain = function (e) {
var t = Math.max(e.x, e.z),
i = Math.min(e.x, e.z),
n = Math.max(t, i * this.camera.aspect),
r = Math.max(i, t * this.camera.aspect);
this.absoluteScale = (p.aspectRatio() < 1 ? r : n) / 2 / l.orthoBase * 1.2, this.currentScale = this.absoluteScale
}, n.prototype.rotateToView = function (e, t) {
var i = 0;
p.aspectRatio() < 1 == e.x < e.z ? 0 < t.z && (i = Math.PI) : i = 0 < t.x ? Math.PI / 2 : -Math.PI / 2, this.rotateLeft(i), this.update(0)
}, n.prototype.pan = function (e, t) {
this.camera.updateMatrix(), this.panLeft(e * (this.camera.right - this.camera.left) / $("#player").width()), this.panUp(-t * (this.camera.top - this.camera.bottom) / $("#player").height())
}, n.prototype.updateZoom = function () {
return this.absoluteScale *= this.scale - .03 * this.keyboardZoomSpeed, this.absoluteScale = Math.max(l.zoomNearLimit, Math.min(this.absoluteScale, l.zoomFarLimit)), this.currentScale = .8 * this.currentScale + .2 * this.absoluteScale, this.camera.left = -l.orthoBase * this.currentScale, this.camera.right = l.orthoBase * this.currentScale, this.camera.top = l.orthoBase * this.currentScale / this.camera.aspect, this.camera.bottom = -l.orthoBase * this.currentScale / this.camera.aspect, this.camera.updateProjectionMatrix(), this.offset.length()
}, n.prototype.toJSON = (r = new s.Quaternion, o = (new s.Quaternion).setFromAxisAngle(new s.Vector3(0, 1, 0), s.Math.degToRad(90)), a = new s.Quaternion, function () {
var e = c.prototype.toJSON.call(this);
return r.copy(e.camera_quaternion), a.copy(o), a.multiply(r), e.camera_quaternion.x = d.toPrecision(a.x, 4), e.camera_quaternion.y = d.toPrecision(a.y, 4), e.camera_quaternion.z = d.toPrecision(a.z, 4), e.camera_quaternion.w = d.toPrecision(a.w, 4), e.ortho_zoom = d.toPrecision(this.currentScale * this.camera.aspect, 4), e
}), t.exports = n
}, {
"../enum/ControlActions": 20,
"../enum/MouseButton": 34,
"../settings": 166,
"../util/browser": 182,
"../util/math": 190,
"./OutsideControls": 12,
three: 217
}],
12: [function (e, t, i) {
"use strict";
function n(e) {
this.camera = e, (this.camera.controls = this).enabled = !1, this.target = new a.Vector3, this.targetBounds = new a.Box3, this.zoomSpeed = 1, this.minDistance = 0, this.maxDistance = 1 / 0, this.noRotateUpDown = !1, this.rotateSpeed = 1, this.keyboardZoomSpeed = 0, this.keyPanSpeed = 7, this.autoRotate = !1, this.autoRotateSpeed = 2, this.autoPan = !1, this.autoPanPosition = new a.Vector3, this.minPolarAngle = a.Math.degToRad(25), this.maxPolarAngle = a.Math.degToRad(65), this.rotationAcceleration = new a.Vector2, this.rotationSpeed = new a.Vector2, this.panAcceleration = new a.Vector2, this.panSpeed = new a.Vector2, this.rotateStart = new a.Vector2, this.rotateEnd = new a.Vector2, this.rotateDelta = new a.Vector2, this.panStart = new a.Vector2, this.panEnd = new a.Vector2, this.panDelta = new a.Vector2, this.panOffset = new a.Vector3, this.offset = new a.Vector3, this.dollyStart = new a.Vector2, this.dollyEnd = new a.Vector2, this.dollyDelta = new a.Vector2, this.phiDelta = 0, this.thetaDelta = 0, this.scale = 1, this.panVector = new a.Vector3, this.lastPosition = new a.Vector3, this.state = u.NONE, this.mouseActions = {}, this.mouseActions[d.LEFT] = u.ROTATE, this.mouseActions[d.MIDDLE] = u.DOLLY, this.mouseActions[d.RIGHT] = u.PAN, this.touchActions = {}, this.touchActions[1] = u.ROTATE, this.touchActions[2] = u.PAN_DOLLY, this.lastMoveTime = 0, this.pointersLimit = 2, this.pointers = []
}
var r, o, a = e("three"),
c = e("../settings"),
h = e("../util/common"),
s = e("../util/math"),
l = e("../enum/Vectors"),
u = e("../enum/ControlActions"),
d = e("../enum/MouseButton"),
p = e("../enum/Keys"),
f = e("../enum/ControlEvents"),
g = e("events").EventEmitter;
(n.prototype = Object.create(g.prototype)).setBounds = function (e) {
this.targetBounds = e
}, n.prototype.isEngaged = function () {
return this.state !== u.NONE
}, n.prototype.rotateLeft = function (e) {
void 0 === e && (e = this.getAutoRotationAngle()), this.thetaDelta -= e
}, n.prototype.rotateUp = function (e) {
this.noRotateUpDown || (void 0 === e && (e = this.getAutoRotationAngle()), this.phiDelta -= e)
}, n.prototype.panLeft = function (e) {
var t = this.camera.matrix.elements;
this.panOffset.set(t[0], 0, t[2]).normalize(), this.panOffset.multiplyScalar(-e), this.panVector.add(this.panOffset)
}, n.prototype.panUp = function (e) {
var t = this.camera.matrix.elements;
this.panOffset.set(t[4], 0, t[6]).normalize(), this.panOffset.multiplyScalar(-e), this.panVector.add(this.panOffset)
}, n.prototype.startRotating = function (e, t) {
e && this.navRotationAcc("x", e), t && this.navRotationAcc("y", t)
}, n.prototype.stopRotating = function (e) {
e && (this.rotationSpeed.x = this.rotationSpeed.y = 0), this.navRotationAcc("x", 0), this.navRotationAcc("y", 0)
}, n.prototype.setAutoPanPosition = (r = new a.Vector3, o = new a.Vector3, function (e, t) {
r.copy(this.camera.position), void 0 === e && null === e || r.setX(e), void 0 === t && null === t || r.setZ(t);
var i = this.camera.position.distanceTo(this.target),
n = l.FORWARD.clone().applyQuaternion(this.camera.quaternion);
this.targetClamped = !1, o.copy(r).addScaledVector(n, i), this.targetBounds.containsPoint(o) || (this.targetBounds.clampPoint(o, o), r.copy(o).addScaledVector(n, -i), this.targetClamped = !0), this.autoPanPosition.x = r.x, this.autoPanPosition.z = r.z, this.autoPan && this.stopAutoPanning()
}), n.prototype.stopAutoPanning = function () {
var e = this.autoPan;
this.autoPan = !1, this.emit(this.targetClamped ? f.AutoPanClamped : e ? f.AutoPanInterrupt : f.AutoPanComplete)
}, n.prototype.dollyIn = function (e) {
void 0 === e && (e = this.getZoomScale()), this.scale /= e
}, n.prototype.dollyOut = function (e) {
void 0 === e && (e = this.getZoomScale()), this.scale *= e
}, n.prototype.updatePan = function (e) {
if (this.panSpeed.multiplyScalar(1 - c.panFriction).addScaledVector(this.panAcceleration, c.panAccelerationOutside * e), this.pan(-this.panSpeed.x, this.panSpeed.y), this.autoPan) {
var t = (new a.Vector3).copy(this.autoPanPosition).sub(this.camera.position);
t.setY(0).clampLength(0, 50 * e), this.target.add(t), this.camera.position.add(t), this.autoPanPosition.x === this.camera.position.x && this.autoPanPosition.z === this.camera.position.z && (this.autoPan = !1, this.stopAutoPanning())
}
}, n.prototype.update = function (e) {
e = e || 1 / 60, this.rotationSpeed.multiplyScalar(1 - c.rotationFriction).addScaledVector(this.rotationAcceleration, c.rotationAccelerationOutside * e), this.rotateLeft(-this.rotationSpeed.x), this.noRotateUpDown || this.rotateUp(this.rotationSpeed.y), this.updatePan(e);
var t = this.camera.position;
this.offset.copy(t).sub(this.target);
var i = Math.atan2(this.offset.x, this.offset.z),
n = Math.atan2(Math.sqrt(this.offset.x * this.offset.x + this.offset.z * this.offset.z), this.offset.y);
this.autoRotate && this.rotateLeft(this.getAutoRotationAngle()), i += this.thetaDelta, n += this.phiDelta, n = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, n)), n = Math.max(1e-6, Math.min(Math.PI - 1e-6, n));
var r = this.updateZoom();
r = Math.max(this.minDistance, Math.min(this.maxDistance, r)), this.target.add(this.panVector), this.targetBounds.clampPoint(this.target, this.target), this.offset.x = r * Math.sin(n) * Math.sin(i), this.offset.y = r * Math.cos(n), this.offset.z = r * Math.sin(n) * Math.cos(i), t.copy(this.target).add(this.offset), this.camera.lookAt(this.target), this.thetaDelta = 0, this.phiDelta = 0, this.scale = 1, this.panVector.set(0, 0, 0), 0 < this.lastPosition.distanceTo(this.camera.position) && this.lastPosition.copy(this.camera.position)
}, n.prototype.getAutoRotationAngle = function () {
return 2 * Math.PI / 60 / 60 * this.autoRotateSpeed
}, n.prototype.getZoomScale = function () {
return Math.pow(.95, this.zoomSpeed)
}, n.prototype.onMouseDown = function (e) {
if (this.enabled) {
switch (e.preventDefault(), this.stopAutoPanning(), this.mouseDown = !0, this.state = this.mouseActions[e.button], this.state) {
case u.ROTATE:
this.rotateStart.set(e.clientX, this.noRotateUpDown ? 0 : e.clientY), this.rotationSpeed.set(0, 0);
break;
case u.DOLLY:
this.dollyStart.set(e.clientX, e.clientY);
break;
case u.PAN:
this.panStart.set(e.clientX, e.clientY)
}
this.emit(f.InputStart, "mouse")
}
}, n.prototype.onMouseMove = function (e) {
if (this.enabled && this.mouseDown && 0 !== e.buttons) {
switch (e.preventDefault(), this.state) {
case u.ROTATE:
this.rotateEnd.set(e.clientX, this.noRotateUpDown ? 0 : e.clientY), this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), this.rotateLeft(2 * Math.PI * this.rotateDelta.x / $("#player").width() * this.rotateSpeed), this.rotateUp(2 * Math.PI * this.rotateDelta.y / $("#player").height() * this.rotateSpeed), this.rotateStart.copy(this.rotateEnd);
break;
case u.DOLLY:
this.dollyEnd.set(e.clientX, e.clientY), this.dollyDelta.subVectors(this.dollyEnd, this.dollyStart), (0 < this.dollyDelta.y ? this.dollyIn : this.dollyOut).call(this), this.dollyStart.copy(this.dollyEnd);
break;
case u.PAN:
this.panEnd.set(e.clientX, e.clientY), this.panDelta.subVectors(this.panEnd, this.panStart), this.pan(this.panDelta.x, this.panDelta.y), this.panStart.copy(this.panEnd)
}
this.emit(f.Move, "mouse"), this.lastMoveTime = e.timeStamp, this.update()
}
}, n.prototype.onMouseUp = function (e) {
this.enabled && (this.mouseDown = !1, this.state = u.NONE, "mouseover" !== e.type && (e.timeStamp > this.lastMoveTime + 100 ? (this.rotationSpeed.set(0, 0), this.rotationAcceleration.set(0, 0)) : this.rotationAcceleration.set(-this.rotateDelta.x, this.rotateDelta.y), this.update(), this.rotationAcceleration.set(0, 0), this.rotateDelta.set(0, 0)))
}, n.prototype.onMouseOver = function (e) {
0 !== e.which && 0 !== e.buttons || this.onMouseUp(e)
}, n.prototype.onMouseWheel = function (e) {
this.enabled && c.useWheel && (this.emit(f.Move, "wheel"), (0 < (e.wheelDelta || -e.detail) ? this.dollyOut : this.dollyIn).call(this), this.update())
}, n.prototype.onKeyDown = function (e) {
this.enabled && (e.metaKey || e.ctrlKey || (e.preventDefault(), this.handleKeyDown(e.which)))
}, n.prototype.navRotationAcc = function (e, t) {
"y" === e ? this.noRotateUpDown ? this.keyboardZoomSpeed = t : this.rotationAcceleration.y = t : this.rotationAcceleration.x = t
}, n.prototype.navPanAcc = function (e, t) {
this.stopAutoPanning(), this.panAcceleration[e] = t
}, n.prototype.handleKeyDown = function (e) {
var t = !0;
switch (e) {
case p.UPARROW:
case p.I:
this.navRotationAcc("y", 1);
break;
case p.DOWNARROW:
case p.K:
this.navRotationAcc("y", -1);
break;
case p.LEFTARROW:
case p.J:
this.navRotationAcc("x", -1);
break;
case p.RIGHTARROW:
case p.L:
this.navRotationAcc("x", 1);
break;
case p.W:
this.navPanAcc("y", 1);
break;
case p.S:
this.navPanAcc("y", -1);
break;
case p.A:
this.navPanAcc("x", -1);
break;
case p.D:
this.navPanAcc("x", 1);
break;
default:
t = !1
}
t && this.emit(f.Move, "key")
}, n.prototype.onKeyUp = function (e) {
this.enabled && (e.preventDefault(), e.stopPropagation(), this.handleKeyUp(e.which))
}, n.prototype.handleKeyUp = function (e) {
switch (e) {
case p.I:
case p.K:
case p.UPARROW:
case p.DOWNARROW:
this.keyboardZoomSpeed = 0, this.rotationAcceleration.y = 0;
break;
case p.J:
case p.L:
case p.LEFTARROW:
case p.RIGHTARROW:
this.rotationAcceleration.x = 0;
break;
case p.S:
case p.W:
this.panAcceleration.y = 0;
break;
case p.A:
case p.D:
this.panAcceleration.x = 0
}
}, n.prototype.onTouchStart = function (i) {
if (this.enabled || this.state === u.NONE) {
i.preventDefault(), i.stopPropagation(), this.stopAutoPanning();
var e = function () {
if (2 === i.touches.length) {
var e = i.touches[0].pageX - i.touches[1].pageX,
t = i.touches[0].pageY - i.touches[1].pageY;
this.dollyStart.set(e, t)
}
}.bind(this),
t = function () {
this.panStart.set(h.average(i.touches, "pageX"), h.average(i.touches, "pageY"))
}.bind(this),
n = function () {
this.rotateStart.set(h.average(i.touches, "pageX"), h.average(i.touches, "pageY"))
}.bind(this);
switch (this.state = this.touchActions[i.touches.length], this.state) {
case u.PAN_DOLLY:
e();
case u.PAN:
t();
break;
case u.ROTATE_DOLLY:
e();
case u.ROTATE:
n()
}
this.rotationSpeed.set(0, 0), this.emit(f.InputStart, "touch")
}
}, n.prototype.onTouchMove = function (a) {
if (this.enabled && this.state !== u.NONE) {
a.preventDefault(), a.stopPropagation();
var s = function () {
var e = a.touches[0].pageX - a.touches[1].pageX,
t = a.touches[0].pageY - a.touches[1].pageY;
this.dollyEnd.set(e, t);
var i = this.dollyStart.length() - this.dollyEnd.length();
0 < i ? this.dollyOut(1 + i / 500) : this.dollyIn(1 - i / 500), this.dollyStart.copy(this.dollyEnd)
}.bind(this),
e = function () {
this.panEnd.set(h.average(a.touches, "pageX"), h.average(a.touches, "pageY")), this.panDelta.subVectors(this.panEnd, this.panStart), this.pan(this.panDelta.x, this.panDelta.y), this.panStart.copy(this.panEnd), this.rotateDelta.set(0, 0)
}.bind(this),
l = function () {
this.rotateEnd.set(h.average(a.touches, "pageX"), h.average(a.touches, "pageY")), this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), this.rotateLeft(2 * Math.PI * this.rotateDelta.x / $("#player").width() * this.rotateSpeed), this.rotateUp(2 * Math.PI * this.rotateDelta.y / $("#player").height() * this.rotateSpeed), this.rotateStart.copy(this.rotateEnd)
}.bind(this),
t = function () {
if (2 === a.touches.length) {
var e = window.devicePixelRatio || 1,
t = a.touches[1].pageX - a.touches[0].pageX,
i = a.touches[1].pageY - a.touches[0].pageY,
n = Math.sqrt(t * t + i * i);
if (Math.abs(this.dollyStart.length() - n) > c.input.touchMoveThreshold * e) this.state = u.DOLLY, s();
else {
var r = h.average(a.touches, "pageX"),
o = h.average(a.touches, "pageY");
this.rotateDelta.set(r, o).sub(this.rotateStart).length() > c.input.touchMoveThreshold && (this.state = u.ROTATE, this.rotateStart.set(r, o), l())
}
}
}.bind(this);
switch (this.state) {
case u.PAN_DOLLY:
s();
case u.PAN:
e();
break;
case u.ROTATE_DOLLY:
t();
break;
case u.DOLLY:
s();
break;
case u.ROTATE:
l();
break;
default:
this.state = u.NONE
}
this.lastMoveTime = a.timeStamp, this.emit(f.Move, "touch")
}
}, n.prototype.onTouchEnd = function (e) {
this.enabled && (this.state === u.ROTATE && (e.timeStamp > this.lastMoveTime + 100 ? (this.rotationSpeed.set(0, 0), this.rotationAcceleration.set(0, 0)) : this.rotationAcceleration.set(-this.rotateDelta.x, this.rotateDelta.y)), this.state = u.NONE, this.update(), this.rotationAcceleration.set(0, 0), this.rotateDelta.set(0, 0))
}, n.prototype.onPointerDown = function (e) {
this.enabled && ("touch" === e.pointerType && (this.pointers.length < this.pointersLimit && this.pointers.push({
id: e.pointerId,
pageX: e.pageX,
pageY: e.pageY
}), e.touches = this.pointers, this.onTouchStart(e)), this.emit(f.InputStart, "pointer"))
}, n.prototype.onPointerMove = function (t) {
this.enabled && "touch" === t.pointerType && (this.pointers.forEach(function (e) {
t.pointerId === e.id && (e.pageX = t.pageX, e.pageY = t.pageY)
}), t.touches = this.pointers, this.onTouchMove(t))
}, n.prototype.onPointerUp = function (i) {
this.enabled && "touch" === i.pointerType && (this.pointers.forEach(function (e, t) {
i.pointerId === e.id && this.pointers.splice(t, 1)
}.bind(this)), i.touches = this.pointers, this.onTouchEnd(i))
}, n.prototype.reset = function () {
this.state = u.NONE, this.stopAutoPanning(), this.rotationSpeed.set(0, 0), this.rotationAcceleration.set(0, 0), this.panSpeed.set(0, 0), this.panAcceleration.set(0, 0)
}, n.prototype.toJSON = function () {
return {
camera_position: {
x: s.toPrecision(this.camera.position.x, 4),
y: s.toPrecision(this.camera.position.y, 4),
z: s.toPrecision(this.camera.position.z, 4)
},
camera_quaternion: {
x: s.toPrecision(this.camera.quaternion.x, 4),
y: s.toPrecision(this.camera.quaternion.y, 4),
z: s.toPrecision(this.camera.quaternion.z, 4),
w: s.toPrecision(this.camera.quaternion.w, 4)
}
}
}, t.exports = n
}, {
"../enum/ControlActions": 20,
"../enum/ControlEvents": 21,
"../enum/Keys": 30,
"../enum/MouseButton": 34,
"../enum/Vectors": 50,
"../settings": 166,
"../util/common": 185,
"../util/math": 190,
events: 202,
three: 217
}],
13: [function (u, d, e) {
(function (e) {
"use strict";
function t(e) {
this.camera = e, (this.camera.controls = this).target = new s.Vector3(0, 0, 0), this.lookVector = new s.Vector3, this.lookSpeed = .05, this.rotationAcc = new s.Vector2, this.rotationSpeed = new s.Vector2, this.lat = 0, this.lon = 0, this.phi = 0, this.theta = 0, this.enabled = !1, this.locked = !1, this.pointer = new s.Vector2(0, 0), this.rotationHistory = [], this.rotationDifference = new s.Vector2, this.pointerDragOn = !1, this.pointerDragStart = new s.Vector2(0, 0), this.pinchDistance = 0, this.moveStart = new s.Vector2, this.moveTolerance = .01, this.pointersLimit = 2, this.pointers = []
}
var s = u("three"),
i = u("../util/logger"),
n = u("../settings"),
r = u("../util/common"),
o = u("../util/math"),
a = (u("../enum/Vectors"), u("../enum/MouseButton")),
l = u("../enum/Keys"),
c = u("../enum/ControlEvents"),
h = u("events").EventEmitter;
new i(e), (t.prototype = Object.create(h.prototype)).usable = function () {
return this.enabled && !this.locked
}, t.prototype.lookAt = function (e) {
var t = this.camera.position.clone().sub(e),
i = Math.atan(t.z / t.x);
i += t.x < 0 ? Math.PI : 0, i += 0 < t.x && t.z < 0 ? 2 * Math.PI : 0, this.lon = s.Math.radToDeg(i) + 180;
var n = Math.sqrt(t.x * t.x + t.z * t.z),
r = Math.atan(t.y / n);
this.lat = -s.Math.radToDeg(r)
}, t.prototype.startRotationFrom = function (e, t) {
o.convertScreenPositionToNDC(e, t, this.pointer), this.pointerDragOn = !0, this.pointerDragStart.copy(this.pointer), this.moveStart.copy(this.pointer), this.rotationHistory = [], this.rotationSpeed.set(0, 0)
}, t.prototype.onMouseOver = function (e) {
!this.pointerDragOn || 0 !== e.which && 0 !== e.buttons || this.onMouseUp(e)
}, t.prototype.onTouchStart = function (e) {
if (this.usable()) {
switch (e.preventDefault(), e.stopPropagation(), e.touches.length) {
case 1:
this.startRotationFrom(e.touches[0].clientX, e.touches[0].clientY);
break;
case 2:
var t = (e.touches[0].clientX - e.touches[1].clientX) / $("#player").width(),
i = (e.touches[0].clientY - e.touches[1].clientY) / $("#player").height();
this.pinchDistance = Math.sqrt(t * t + i * i)
}
this.emit(c.InputStart, "touch")
}
}, t.prototype.onPointerDown = function (e) {
this.usable() && "touch" === e.pointerType && (this.pointers.length < this.pointersLimit && this.pointers.push({
id: e.pointerId,
clientX: e.clientX,
clientY: e.clientY
}), e.touches = this.pointers, this.onTouchStart(e), this.emit(c.InputStart, "pointer"))
}, t.prototype.onMouseDown = function (e) {
if (this.usable()) {
switch (e.preventDefault(), e.stopPropagation(), e.button) {
case a.LEFT:
this.startRotationFrom(e.clientX, e.clientY)
}
this.emit(c.InputStart, "mouse")
}
}, t.prototype.updateRotation = function () {
if (this.usable() && this.pointerDragOn) {
var e = new s.Vector3(this.pointerDragStart.x, this.pointerDragStart.y, -1).unproject(this.camera),
t = new s.Vector3(this.pointer.x, this.pointer.y, -1).unproject(this.camera),
i = Math.sqrt(e.x * e.x + e.z * e.z),
n = Math.sqrt(t.x * t.x + t.z * t.z),
r = Math.atan2(e.y, i),
o = Math.atan2(t.y, n);
this.rotationDifference.y = s.Math.radToDeg(r - o), e.y = 0, t.y = 0;
var a = Math.acos(e.dot(t) / e.length() / t.length());
isNaN(a) || (this.rotationDifference.x = s.Math.radToDeg(a), this.pointerDragStart.x < this.pointer.x && (this.rotationDifference.x *= -1)), this.pointerDragStart.copy(this.pointer)
}
}, t.prototype.onMouseMove = function (e) {
this.usable() && (o.convertScreenPositionToNDC(e.clientX, e.clientY, this.pointer), this.pointerDragOn && (Math.abs(this.pointer.x - this.moveStart.x) > this.moveTolerance || Math.abs(this.pointer.y - this.moveStart.y) > this.moveTolerance) && this.emit(c.Move, "mouse"))
}, t.prototype.onTouchMove = function (e) {
if (this.usable()) switch (this.emit(c.Move, "touch"), e.touches.length) {
case 1:
o.convertScreenPositionToNDC(e.touches[0].clientX, e.touches[0].clientY, this.pointer);
break;
case 2:
var t = (e.touches[0].clientX - e.touches[1].clientX) / $("#player").width(),
i = (e.touches[0].clientY - e.touches[1].clientY) / $("#player").height(),
n = this.pinchDistance - Math.sqrt(t * t + i * i);
.01 < Math.abs(n) && (this.emit(c.InteractionDirect), this.emit(c.Pinch, n), this.pinchDistance -= n)
}
}, t.prototype.onPointerMove = function (t) {
this.usable() && "touch" === t.pointerType && (this.pointers.forEach(function (e) {
t.pointerId === e.id && (e.clientX = t.clientX, e.clientY = t.clientY)
}), t.touches = this.pointers, this.onTouchMove(t))
}, t.prototype.endRotation = function () {
this.pointerDragOn = !1;
var e = r.averageVectors(this.rotationHistory);
this.rotationSpeed.set(e.x * n.rotationAfterMoveMultiplier, e.y * n.rotationAfterMoveMultiplier)
}, t.prototype.onTouchEnd = function (e) {
this.usable() && (e.preventDefault(), e.stopPropagation(), this.endRotation())
}, t.prototype.onMouseUp = function (e) {
this.usable() && (e.preventDefault(), e.stopPropagation(), this.endRotation())
}, t.prototype.onPointerUp = function (i) {
this.usable() && "touch" === i.pointerType && (this.pointers.forEach(function (e, t) {
i.pointerId === e.id && this.pointers.splice(t, 1)
}.bind(this)), i.touches = this.pointers, this.onTouchEnd(i))
}, t.prototype.update = function (e) {
for (this.lon, this.lat, this.updateRotation(), this.rotationHistory.push(this.rotationDifference.clone()); this.rotationHistory.length > n.rotationAfterMoveHistoryCount;) this.rotationHistory.shift();
this.lon += this.rotationDifference.x, this.lat += this.rotationDifference.y, this.rotationDifference.set(0, 0), this.rotationSpeed.x = this.rotationSpeed.x * (1 - n.rotationFriction) + this.rotationAcc.x * n.rotationAccelerationInside, this.rotationSpeed.y = this.rotationSpeed.y * (1 - n.rotationFriction) + this.rotationAcc.y * n.rotationAccelerationInside, this.lon += this.rotationSpeed.x * e, this.lat += this.rotationSpeed.y * e, this.lat = Math.max(n.insideLookLimitDown, Math.min(n.insideLookLimitUp, this.lat)), this.phi = s.Math.degToRad(90 - this.lat), this.theta = s.Math.degToRad(this.lon), this.lookVector.x = Math.sin(this.phi) * Math.cos(this.theta), this.lookVector.y = Math.cos(this.phi), this.lookVector.z = Math.sin(this.phi) * Math.sin(this.theta), this.target.copy(this.lookVector).add(this.camera.position), this.camera.lookAt(this.target)
}, t.prototype.onMouseWheel = function (e) {
if (this.usable()) {
var t = e.wheelDelta || -e.detail;
this.emit(c.InteractionDirect), this.emit(c.Scroll, t)
}
}, t.prototype.onKeyDown = function (e) {
this.usable() && (e.metaKey || e.ctrlKey || (e.preventDefault(), this.handleKeyDown(e.which)))
}, t.prototype.handleKeyDown = function (e) {
var t = function (e, t) {
this.rotationAcc[e] = t
}.bind(this);
this.emit(c.InteractionKey);
var i = !0;
switch (e) {
case l.LEFTARROW:
case l.J:
t("x", -1);
break;
case l.RIGHTARROW:
case l.L:
t("x", 1);
break;
case l.I:
t("y", 1);
break;
case l.K:
t("y", -1);
break;
default:
i = !1
}
i && this.emit(c.Move, "key")
}, t.prototype.onKeyUp = function (e) {
this.usable() && (e.preventDefault(), e.stopPropagation(), this.handleKeyUp(e.which))
}, t.prototype.handleKeyUp = function (e) {
switch (e) {
case l.LEFTARROW:
case l.J:
case l.RIGHTARROW:
case l.L:
this.rotationAcc.x = 0;
break;
case l.I:
case l.K:
this.rotationAcc.y = 0
}
}, t.prototype.startRotating = function (e, t) {
e && (this.rotationAcc.x = e), t && (this.rotationAcc.y = t)
}, t.prototype.stopRotating = function (e) {
e && (this.rotationSpeed.x = this.rotationSpeed.y = 0), this.rotationAcc.set(0, 0)
}, t.prototype.reset = function () {
this.pointerDragOn = !1, this.rotationAcc.set(0, 0), this.rotationSpeed.set(0, 0), this.pointers = []
}, t.prototype.toJSON = function () {
return {
camera_position: {
x: o.toPrecision(this.camera.position.x, 4),
y: o.toPrecision(this.camera.position.y, 4),
z: o.toPrecision(this.camera.position.z, 4)
},
camera_quaternion: {
x: o.toPrecision(this.camera.quaternion.x, 4),
y: o.toPrecision(this.camera.quaternion.y, 4),
z: o.toPrecision(this.camera.quaternion.z, 4),
w: o.toPrecision(this.camera.quaternion.w, 4)
}
}
}, t.prototype.setStateFromJSON = function (e) {
this.camera.position.copy(e.camera_position), this.camera.quaternion.copy(e.camera_quaternion)
}, d.exports = t
}).call(this, "/js/controls/PanoramaControls.js")
}, {
"../enum/ControlEvents": 21,
"../enum/Keys": 30,
"../enum/MouseButton": 34,
"../enum/Vectors": 50,
"../settings": 166,
"../util/common": 185,
"../util/logger": 189,
"../util/math": 190,
events: 202,
three: 217
}],
14: [function (t, i, e) {
(function (e) {
"use strict";
var c = t("three"),
h = t("../enum/Viewmode"),
u = new(t("../util/logger"))(e);
i.exports = {
serialize: function (e) {
return encodeURI(JSON.stringify(e))
},
deserialize: function (e) {
function t(e) {
return e.reduce(function (e, t) {
return e && "number" == typeof t && !isNaN(t)
}, !0)
}
try {
var i = JSON.parse(decodeURI(e)),
n = {
mode: h.fromInt(i.camera_mode),
panoId: i.scan_id,
position: (new c.Vector3).copy(i.camera_position),
quaternion: (new c.Quaternion).copy(i.camera_quaternion),
zoom: i.ortho_zoom,
floorVisibility: i.floor_visibility
},
r = n.position;
t([r.x, r.y, r.z]) || n.position.set(0, 0, 0);
var o = n.quaternion;
return t([o.x, o.y, o.z, o.w]) || n.quaternion.set(0, 0, 0, 1), n
} catch (i) {
u.debug("Not able to parse start location as JSON; falling back to old array style parsing");
try {
var a = e.split(","),
s = {
x: parseFloat(a[2]),
y: parseFloat(a[3]),
z: parseFloat(a[4])
},
l = {
x: parseFloat(a[5]),
y: parseFloat(a[6]),
z: parseFloat(a[7]),
w: parseFloat(a[8])
};
return t([s.x, s.y, s.z]) || (s.x = 0, s.y = 0, s.z = 0), t([l.x, l.y, l.z, l.w]) || (l.x = 0, l.y = 0, l.z = 0, l.w = 1), {
mode: h.fromInt(a[0]),
panoId: a[1],
position: (new c.Vector3).copy(s),
quaternion: (new c.Quaternion).copy(l)
}
} catch (t) {
u.warn('Invalid start override, ignoring: "' + e + '"', t.message)
}
}
return null
}
}
}).call(this, "/js/controls/serializer.js")
}, {
"../enum/Viewmode": 51,
"../util/logger": 189,
three: 217
}],
15: [function (C, I, e) {
(function (e) {
"use strict";
function t() {
this.endlessLoop = r.warp.loop, this.clock = new i.Clock(!0), this.model = null, this.player = null, this.currentItem = null, this.destinationItem = null, this.tourIsPlaying = !1, this.transitionStage = v.None, this.nextFunc = null, this.onTheBus = !1, this.tourInProgress = !1, this.reachSource = null, this.interrupted = !1, this.nItems = 0, this.walkingSectionPaused = !1
}
var i = C("three"),
n = C("./util/logger"),
r = C("./settings"),
o = C("./util/transitions"),
a = C("events").EventEmitter,
s = C("./enum/Viewmode"),
l = C("./analytics"),
c = C("./enum/WarpStyle"),
h = (o = C("./util/transitions"), C("./model/ModelManager"), C("./enum/ModelManagerEvents")),
u = C("./enum/DirectorEvents"),
d = C("./enum/PlayerEvents"),
p = (C("./enum/ControlEvents"), C("./enum/BlackoutStyle")),
f = C("./enum/PathDiscardMode"),
g = C("./enum/PathDisplayMode"),
m = (C("./player"), new n(e)),
v = Object.freeze({
None: 0,
Moving: 1,
Aiming: 2,
Interlude: 3
}),
y = Object.freeze({
Forward: 1,
NoChange: 0,
Backwards: -1
}),
A = o.getUniqueId();
(t.prototype = Object.create(a.prototype)).init = function (e, t) {
this.player = e, this.modelManager = t, this.updateModel(), this.resetAll(), this.bindEvents()
}, t.prototype.resetAll = function () {
if (this.currentItem = null, this.destinationItem = null, this.tourIsPlaying = !1, this.bgmReplay(), this.transitionStage = v.None, this.nextFunc = null, this.onTheBus = !1, this.reachSource = null, this.interrupted = !1, this.model) {
var e = r.path.typ === c.WALK ? c.WALK : c.STD;
this.defaultWarpStyle = this.model.data.hasOwnProperty("player_options") && this.model.data.player_options && !1 === this.model.data.player_options.fast_transitions ? e : c.BLACK
} else this.defaultWarpStyle = c.BLACK, m.warn('No model yet, choosing "' + this.defaultWarpStyle + '" transitions');
this.resetSpecialTransition()
}, t.prototype.updateModel = function () {
this.model = this.modelManager.getActiveModel(), this.nItems = this.model.heroLocations.length
}, t.prototype.bindEvents = function () {
this.modelManager.on(h.ActiveModelChanged, this.updateModel.bind(this)), this.player.on(d.WarpInterruptedWithFlyTo, this.checkAndHandleWalkingtourInterruption.bind(this)), this.player.on(d.Move, this.handlePlayerMove.bind(this)), this.player.on(d.PanoChosen, this.handlePlayerPanoChosen.bind(this)), this.player.on(d.ModeChanged, this.handlePlayerModeChanged.bind(this)), this.player.on(d.InputStart, this.handlePlayerInputStart.bind(this)), this.player.on(d.FlyingStarted, this.handlePlayerFlyingStarted.bind(this)), this.player.once(d.Move, function () {
o.cancelById(A)
})
}, t.prototype.checkAndHandleWalkingtourInterruption = function (e) {
return e === c.WALK && (this.interrupt(p.NONE), this.pauseWalkingSection(), this.player.fastForwardActivePanoFlight(), !0)
}, t.prototype.handlePlayerMove = function (e) {
this.transitionStage === v.Interlude && this.interrupt(p.NONE), this.emit("update.controls")
}, t.prototype.handlePlayerPanoChosen = function (e, t) {
this.intermediateState() || e.id === t.id || (this.onTheBus = !1, this.emit("update.controls"))
}, t.prototype.handlePlayerModeChanged = function (e, t) {
this.intermediateState() || e === t || (this.onTheBus = !1, this.emit("update.controls"))
}, t.prototype.handlePlayerInputStart = function (e) {
this.transitionStage === v.Interlude && this.interrupt(p.NONE)
}, t.prototype.handlePlayerFlyingStarted = function () {
this.clearWalkingSectionPaused()
}, t.prototype.describe = function () {
return {
nItems: this.nItems,
currentItem: this.currentItem,
destinationItem: this.destinationItem,
tourIsPlaying: this.tourIsPlaying,
onTheBus: this.onTheBus,
endlessLoop: this.endlessLoop,
viewMode: this.player.mode,
inTransition: this._inTransition(),
transitionStage: this.transitionStage,
tourInProgress: this.tourInProgress
}
}, t.prototype._inTransition = function () {
return this.player.flying || this.player.isWarping() || this.player.isWaitingToWarp() || this.player.mode === s.TRANSITIONING || this.tourIsPlaying
}, t.prototype.bounceable = function () {
var e = this.clock.getDelta();
return this.isInterrupted() || e < .9 && .01 < e || this.player.flying && !this.player.isWarping()
}, t.prototype.currentMoveDirection = function () {
return null === this.currentItem || void 0 === this.currentItem ? y.Forward : this.destinationItem === this.currentItem ? y.NoChange : this.destinationItem > this.currentItem ? y.Forward : y.Backwards
}, t.prototype.clearPath = function () {
this._inTransition() || this.player.path.discardPathObject()
}, t.prototype.allFloors = function () {
this.model.toggleAllFloors()
}, t.prototype.actionComplete = function (e) {
if (this.interrupted = !1, this.transitionStage = v.None, this.resetSpecialTransition(), null !== this.destinationItem && this.setCurrentItem(this.destinationItem), this.tourIsPlaying || (this.player.disablePreRendering(), this.player.mode === s.PANORAMA && this.player.currentPano.isAligned() && this.model.fadePanoMarkers()), this.emit("update.controls"), this.nextFunc) {
var t = this.nextFunc;
this.nextFunc = null, t()
}
}, t.prototype.awaitCompletion = function (e, t) {
this.nextFunc = t, e()
}, t.prototype.updateSuccessFunction = function (e) {
this.nextFunc = e
}, t.prototype.interrupt = function (e, t) {
return !!this.wouldInterrupt() && (this.tourIsPlaying && (this.player.zoomEnabled = this.wasZoomEnabled), this.tourIsPlaying = !1, this.bgmReplay(), this.interrupted = !0, this.nextFunc = null, this.emit(u.ActionInterrupted), null != e || (e = p.BEGINNING), this.player.interruptAndFastForward(e, t), !0)
}, t.prototype.wouldInterrupt = function () {
return this.transitionStage !== v.None
}, t.prototype.intermediateState = function () {
return this.transitionStage !== v.None
}, t.prototype.isInterrupted = function () {
return this.interrupted
}, t.prototype.pauseWalkingSection = function () {
this.walkingSectionPaused = !0
}, t.prototype.clearWalkingSectionPaused = function () {
this.walkingSectionPaused = !1
}, t.prototype.autoTour = function () {
var i = Date.now();
this.model.auxDataPromise.then(function () {
i = Date.now() - i;
var e = r.warp.auto,
t = this.model.data && this.model.data.player_options && this.model.data.player_options.highlight_reel;
0 <= e && 1 < this.model.heroCount() && t && o.trigger({
duration: Math.max(1e3 * Math.min(300, e) - i, 0),
done: function () {
this.playTour()
}.bind(this),
name: "_atr",
id: A
})
}.bind(this))
}, t.prototype.atDestinationPano = function () {
if (!this.player.currentPano || null === this.destinationItem) return !1;
var e = this.player.currentPano.id;
if (void 0 === e) return !1;
var t = this.model.heroLocations;
return null !== this.destinationItem && void 0 !== t[this.destinationItem] && e === t[this.destinationItem].panoId
}, t.prototype.redirectToItem = function (e, t) {
if (null != e)
if (this.wouldInterrupt())
if (this.player.mode !== s.TRANSITIONING) {
m.debug("Director.redirectToItem() -> Redirecting to " + e + " via " + t);
var i = function () {
o.setTimeout(function () {
this.setDestinationItem(e), this.goToDestination(!0, p.BEGINNING, r.warp.warpInterruptionRedirectTime, !1)
}.bind(this), 0)
}.bind(this);
this.interrupt(p.END, 0), this.updateSuccessFunction(i)
} else m.debug("Director.redirectToItem() -> Cannot redirect while transitioning.");
else m.warn("Director.redirectToItem() -> Director cannot redirect if there is nothing to interrupt.");
else m.warn("Director.redirectToItem() -> Redirecting to null item.")
}, t.prototype.useSpecialTransition = function (e) {
void 0 !== e && this.defaultWarpStyle !== c.BLACK && m.debug("useSpecialTransition(): " + e), this.nextWarpStyle = c.BLACK
}, t.prototype.resetSpecialTransition = function () {
this.nextWarpStyle = this.defaultWarpStyle
}, t.prototype.arrivedAtDestination = function (e) {
if (this.player.flying || this.player.isWarping()) m.warn("Cannot advance to interlude or aiming while player is flying or warping.");
else {
this.transitionStage = v.Aiming;
var t = this.tourIsPlaying ? this.tourInterlude.bind(this, this.nextItem(this.currentItem)) : null;
this.player.model.fadePanoMarkers(0), this.awaitCompletion(function () {
this.resetSpecialTransition(), e ? this.player.aimTourCamera(this.destinationItem, g.Retain, g.Slow, this.actionComplete.bind(this)) : this.actionComplete()
}.bind(this), t)
}
}, t.prototype.goToDestination = function (e, t, i, n) {
if (void 0 !== g_data2.tourAudio && null !== g_data2.tourAudio) {
var r = g_data2.tourAudio[this.model.heroLocations[this.destinationItem].sid];
if (r && 0 < r.music.length) {
var o = g_Prefix + r.music;
g_tourAudio.src = o, g_tourAudio.load(), g_tourAudio.crossOrigin = "anonymous", g_tourAudio.oncanplaythrough = function () {
g_tourAudio.play()
}
}
}
if (this.onTheBus = !0, this.emit("update.controls"), this.player.updateLastView(), n || !this.atDestinationPano())
if (this.player.flying || this.player.isWarping()) m.warn("Cannot go to new destination while player is flying or warping.");
else {
var a = this.model.getHeroDescriptorByIndex(this.destinationItem),
s = null,
l = null;
if (a.isPano()) {
o = window.MP_PREFETCHED_MODELDATA.momentTour || "walk";
l = this.player.warpToPanoByHeroIndex.bind(this.player, this.destinationItem, g.Show, f.Slow, o, !0, i, this.actionComplete.bind(this)), s = this.arrivedAtDestination.bind(this, !0)
} else l = this.player.warpToNonPanoByHeroIndex.bind(this.player, this.destinationItem, this.actionComplete.bind(this)), s = this.arrivedAtDestination.bind(this, !1);
this.transitionStage = v.Moving, this.model.fadePanoMarkers(0), this.awaitCompletion(function () {
l()
}.bind(this), s), this.emit("update.controls")
}
else this.arrivedAtDestination(!0)
}, t.prototype.tourInterlude = function () {
if (l.trackAlways("reach_highlight", {
reach_source: this.reachSource
}), this.model.fadePanoMarkers(0), this.emit("update.controls"), this.tourIsPlaying) return this.atEndOfTour() && !this.endlessLoop ? (this.tourInProgress = !1, this.stopTour(), this.emit(u.TourEnd), void(this.player.mode === s.PANORAMA && this.model.fadePanoMarkers(r.panorama.markerOpacity))) : void this.awaitCompletion(function () {
this.transitionStage = v.Interlude, this.player.tourInterlude(this.nextItem(this.currentItem), this.actionComplete.bind(this))
}.bind(this), this.goNext.bind(this))
}, t.prototype.playTour = function () {
if (!this.bounceable()) return this.tourIsPlaying ? void m.info("tour is already playing") : void(this.wouldInterrupt() || (this.player.emit("tour_auto", this.defaultWarpStyle), this.tourInProgress = !0, this.reachSource = "play", this.tourIsPlaying = !0, this.wasZoomEnabled = this.player.zoomEnabled, this.player.zoomEnabled = !1, this.resetSpecialTransition(), this.emit("update.controls"), this.emit(u.TourStart), this.player.enablePreRendering(), this.walkingSectionPaused ? (this.clearWalkingSectionPaused(), this.goToDestination()) : this.goNext()))
}, t.prototype.bgmReplay = function () {
g_tourAudio && g_tourAudio.paused && g_bgAudio && g_bgAudio.paused && (g_playAudio = g_bgAudio, window.tourAudio && window.tourAudio.pause(), g_bgAudio.play())
}, t.prototype.stopTour = function () {
this.isInterrupted() || this.transitionStage === v.Moving && this.checkAndHandleWalkingtourInterruption(this.nextWarpStyle) || (this.tourIsPlaying && (this.player.zoomEnabled = this.wasZoomEnabled), this.tourIsPlaying = !1, this.bgmReplay(), this.interrupt(), this.clearWalkingSectionPaused(), this.resetSpecialTransition(), this.emit("update.controls")), window.tourAudio && window.tourAudio.pause(), g_tourAudio && 0 == g_tourAudio.paused && (g_tourAudio.pause(), g_tourAudio.src = "")
}, t.prototype.endTourProgress = function () {
this.tourInProgress = !1, this.emit("update.controls"), this.emit(u.TourEnd)
}, t.prototype.goToHighlight = function (e) {
if (this.wouldInterrupt()) e === this.destinationItem ? this.interrupt() : this.redirectToItem(e, "goToHighlight");
else {
if (m.debug(""), this.isInterrupted()) return;
this.clearWalkingSectionPaused(), this.setDestinationItem(e), this.useSpecialTransition("Hilight"), this.goToDestination(), l.trackAlways("reach_highlight", {
reach_source: "thumb"
})
}
}, t.prototype.prevHighlight = function () {
this.bounceable() || (this.player.emit("tour_manual", "prev"), this.interrupt(p.BEGINNING) || this.isInterrupted() || (this.clearWalkingSectionPaused(), this.reachSource = "prev", this.goPrev()))
}, t.prototype.nextHighlight = function () {
this.bounceable() || (this.player.emit("tour_manual", "next"), this.interrupt(p.BEGINNING) || this.isInterrupted() || (this.clearWalkingSectionPaused(), this.reachSource = "next", this.goNext()))
}, t.prototype.changeMode = function (e) {
var t = $.Deferred(),
i = t.resolve.bind(t),
n = t.reject.bind(t);
if (this.emit(u.StartModeChange), ! function () {
return this.clearWalkingSectionPaused(), !!this.wouldInterrupt() && (this.interrupt(), !0)
}.bind(this)()) {
switch (e) {
case s.PANORAMA:
this.player.mode === s.PANORAMA ? this.player.currentPano.isAligned() || this.player.goToLastView(!0).done(i).fail(n) : this.player.insideMode(this.player.lastInsideView.pano).done(i).fail(n);
break;
case s.DOLLHOUSE:
case s.FLOORPLAN:
this.player.flyToNewMode({
mode: e
}).done(i).fail(n);
break;
case s.OUTDOOR:
this.player.model.has360Views && (this.player.mode !== s.PANORAMA || this.player.mode === s.PANORAMA && this.player.currentPano.isAligned()) && this.player.goToLastView(!1).done(i).fail(n)
}
return t.promise()
}
}, t.prototype.atEndOfTour = function () {
return this.currentItem >= this.nItems - 1
}, t.prototype.firstDestination = function () {
return 0 < this.nItems ? 0 : null
}, t.prototype.finalDestination = function () {
return 0 < this.nItems ? this.nItems - 1 : null
}, t.prototype.goPrev = function () {
this.tourAdvance(-1)
}, t.prototype.goNext = function () {
this.tourAdvance(1)
}, t.prototype.setDestinationItem = function (e) {
this.destinationItem = e, this.emit("update.controls")
}, t.prototype.setCurrentItem = function (e) {
this.currentItem = e, this.emit("update.controls")
}, t.prototype.nextItem = function (e) {
return null === e ? this.firstDestination() : e >= this.nItems - 1 ? this.endlessLoop ? this.firstDestination() : null : e + 1
}, t.prototype.prevItem = function (e) {
return null === e ? this.firstDestination() : e < 0 ? this.endlessLoop ? this.lastDestination() : null : e - 1
}, t.prototype.tourAdvance = function (e) {
if (m.debug("tourAdvance(" + e + ")"), null === this.currentItem || void 0 === this.currentItem ? this.setDestinationItem(this.firstDestination()) : this.setDestinationItem(this.currentItem + e), this.destinationItem < 0 ? (this.setDestinationItem(this.finalDestination()), this.useSpecialTransition("reverse-looping to end")) : this.destinationItem >= this.nItems && (this.setDestinationItem(this.firstDestination()), this.useSpecialTransition("looping back to start")), "black" === window.MP_PREFETCHED_MODELDATA.momentTour) {
var i = this.player.zoomLevel;
this.player.zoomEnabled = !0;
var t = function (e, t) {
this.player.zoomTo((1 - e) * i, !0)
}.bind(this);
o.start(t, 1500, function () {}, 0, h.easeOutQuad, "zoom")
}
this.goToDestination()
}, I.exports = t
}).call(this, "/js/director.js")
}, {
"./analytics": 4,
"./enum/BlackoutStyle": 18,
"./enum/ControlEvents": 21,
"./enum/DirectorEvents": 23,
"./enum/ModelManagerEvents": 33,
"./enum/PathDiscardMode": 38,
"./enum/PathDisplayMode": 39,
"./enum/PlayerEvents": 40,
"./enum/Viewmode": 51,
"./enum/WarpStyle": 52,
"./model/ModelManager": 140,
"./player": 155,
"./settings": 166,
"./util/logger": 189,
"./util/transitions": 195,
events: 202,
three: 217
}],
16: [function (e, t, i) {
"use strict";
var n = e("three"),
r = e("./enum/Viewmode"),
o = (e("./settings"), e("./util/transitions")),
a = e("./enum/PlayerEvents"),
s = new n.ShaderPass(n.HorizontalBlurShader),
l = new n.ShaderPass(n.VerticalBlurShader);
l.renderToScreen = !0;
var c = $("#player").width() / $("#player").height();
isNaN(c) && (c = 1);
var h = {
currentBlur: 0,
aspect: c,
blurStrength: 1,
hblurPass: s,
vblurPass: l,
bindEvents: function (e) {
e.on(a.ModeChanged, function (e, t) {
e === r.PANORAMA && (o.cancel(h.blur), o.cancel(h.addBlur), o.start(h.removeBlur, 500, null, 0, null, "deblur"))
})
},
blur: function (e) {
var t = (h.currentBlur = e) * h.blurStrength;
l.uniforms.v.value = t / 512 * h.aspect, s.uniforms.h.value = t / 512
},
addBlur: function (e) {
e = Math.max(e, h.currentBlur), h.blur(e)
},
removeBlur: function (e) {
e = Math.min(1 - e, h.currentBlur), h.blur(e)
}
};
h.blur(0), t.exports = h
}, {
"./enum/PlayerEvents": 40,
"./enum/Viewmode": 51,
"./settings": 166,
"./util/transitions": 195,
three: 217
}],
17: [function (e, t, i) {
"use strict";
t.exports = {
UNKNOWN: 0,
ALIGNED: 1,
UNALIGNED: 2,
PLACED: 3
}
}, {}],
18: [function (e, t, i) {
"use strict";
t.exports = {
NONE: 0,
MIDDLE: 1,
END: 2,
BEGINNING: 3,
FADEIN: 4
}
}, {}],
19: [function (e, t, i) {
"use strict";
var r = e("three");
t.exports = {
newBlue: new r.Color(4967932),
altBlue: new r.Color(47355),
tagDefault: new r.Color(223357),
classicBlue: new r.Color(53759),
mpYellow: new r.Color(16502016),
mpOrange: new r.Color(16428055),
mpBlue: new r.Color(12096),
mpLtGrey: new r.Color(13751252),
mpDkGrey: new r.Color(10000019),
mpRed: new r.Color(12525854),
mpOrangeDesat: new r.Color(16764529),
mpBlueDesat: new r.Color(4034734),
mpRedDesat: new r.Color(14705505),
white: new r.Color(16777215),
black: new r.Color(0),
_desat: function (e, t) {
var i = t || .3,
n = (new r.Color).copy(e).getHSL();
return (new r.Color).setHSL(n.h, n.s * (1 - i), n.l)
},
_darken: function (e, t) {
var i = t || .2,
n = e.getHSL();
return (new r.Color).setHSL(n.h, n.s, n.l * (1 - i))
}
}
}, {
three: 217
}],
20: [function (e, t, i) {
"use strict";
t.exports = {
NONE: -1,
ROTATE: 0,
DOLLY: 1,
PAN: 2,
ROTATE_DOLLY: 3,
PAN_DOLLY: 4
}
}, {}],
21: [function (e, t, i) {
"use strict";
t.exports = {
Move: "move",
InteractionDirect: "interaction.direct",
InteractionKey: "interaction.key",
InteractionGui: "interaction.gui",
FlyInDirection: "fly.direction",
InputStart: "input.start",
Pinch: "input.pinch",
Scroll: "input.scroll",
AutoPanInterrupt: "autopan.interrupt",
AutoPanComplete: "autopan.complete",
AutoPanClamped: "autopan.clamped",
LongTap: "longtap"
}
}, {}],
22: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
FORWARD: "FORWARD",
LEFT: "LEFT",
RIGHT: "RIGHT",
BACK: "BACK",
UP: "UP",
DOWN: "DOWN"
})
}, {}],
23: [function (e, t, i) {
"use strict";
t.exports = {
ActionInterrupted: "action.interrupted",
TourStart: "tour.start",
TourEnd: "tour.end",
StartModeChange: "mode.startChange"
}
}, {}],
24: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
None: 0,
Queued: 1,
ForceQueued: 2,
Downloading: 3,
Downloaded: 4,
DownloadFailed: 5
})
}, {}],
25: [function (e, t, i) {
"use strict";
t.exports = {
GL_TEXTURE_CUBE_MAP_POSITIVE_X: 0,
GL_TEXTURE_CUBE_MAP_NEGATIVE_X: 1,
GL_TEXTURE_CUBE_MAP_POSITIVE_Y: 2,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: 3,
GL_TEXTURE_CUBE_MAP_POSITIVE_Z: 4,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: 5
}
}, {}],
26: [function (e, t, i) {
"use strict";
t.exports = {
Texture2D: 0,
TextureCube: 1
}
}, {}],
27: [function (e, t, i) {
"use strict";
t.exports = {
SMALL: "small",
LARGE: "large"
}
}, {}],
28: [function (e, t, i) {
"use strict";
var n = e("./Viewmode"),
r = {
LANDING: {},
NAVIGATION: "navigation",
MORE_HELP: "moreHelp",
TOUR_INTERACTION: {}
};
r.LANDING[n.PANORAMA] = "panorama.landing", r.LANDING[n.OUTDOOR] = "outdoor.landing", r.LANDING[n.DOLLHOUSE] = "dollhouse.landing", r.LANDING[n.FLOORPLAN] = "floorplan.landing", r.TOUR_INTERACTION.standard = "standard.tour", r.TOUR_INTERACTION[n.OUTDOOR] = "outdoor.tour", r.TOUR_INTERACTION[n.FLOORPLAN] = "floorplan.tour", t.exports = r
}, {
"./Viewmode": 51
}],
29: [function (e, t, i) {
"use strict";
var n = {
UP: 1,
DOWN: -1,
LEFT: "L",
RIGHT: "R",
FORWARD: "F",
BACK: "B",
reverse: {},
opposite: function (e) {
return this.reverse[e.toString()]
}
};
n.reverse[n.UP] = n.DOWN, n.reverse[n.DOWN] = n.UP, n.reverse[n.LEFT] = n.RIGHT, n.reverse[n.RIGHT] = n.LEFT, n.reverse[n.FORWARD] = n.BACK, n.reverse[n.BACK] = n.FORWARD, t.exports = n
}, {}],
30: [function (e, t, i) {
"use strict";
var n = {
ZERO: 48,
ONE: 49,
TWO: 50,
THREE: 51,
FOUR: 52,
FIVE: 53,
SIX: 54,
SEVEN: 55,
EIGHT: 56,
NINE: 57,
LEFTARROW: 37,
UPARROW: 38,
RIGHTARROW: 39,
DOWNARROW: 40,
A: 65,
B: 66,
C: 67,
D: 68,
E: 69,
F: 70,
G: 71,
H: 72,
I: 73,
J: 74,
K: 75,
L: 76,
M: 77,
N: 78,
O: 79,
P: 80,
Q: 81,
R: 82,
S: 83,
T: 84,
U: 85,
V: 86,
W: 87,
X: 88,
Y: 89,
Z: 90,
SPACE: 32,
RETURN: 13,
SEMICOLON: 186,
PLUSEQUALS: 187,
DASHUNDERSCORE: 189,
OPENBRACKET: 219
};
e("../util/browser").detectFirefox() && (n.SEMICOLON = 59, n.PLUSEQUALS = 61, n.DASHUNDERSCORE = 173), t.exports = n
}, {
"../util/browser": 182
}],
31: [function (e, t, i) {
"use strict";
t.exports = {
EN_US: "en-US",
ES_MX: "es-MX",
FR_FR: "fr-FR",
DE_DE: "de-DE",
RU_RU: "ru-RU",
CN_CN: "cn-CN",
JP_JP: "jp-JP"
}
}, {}],
32: [function (e, t, i) {
"use strict";
t.exports = {
TagActivated: "tag.activated",
TagDismissed: "tag.dismissed",
TagNavigation: "tag.navigation"
}
}, {}],
33: [function (e, t, i) {
"use strict";
t.exports = {
ModelAdded: "model-added",
ActiveModelChanged: "active-model-changed"
}
}, {}],
34: [function (e, t, i) {
"use strict";
t.exports = {
LEFT: 0,
MIDDLE: 1,
RIGHT: 2
}
}, {}],
35: [function (e, t, i) {
"use strict";
t.exports = {
PanoRenderComplete: "panorama.render.complete",
TileRenderFailure: "panorama.tile.render.failed",
TileRenderSuccess: "panorama.tile.render.success",
TileUploadAttempted: "panorama.tile.upload.attempted",
UploadAttemptedForAllTiles: "panorama.upload.attempted.all.tiles",
ZoomLevelRenderStarted: "panorama.zoom.render.started"
}
}, {}],
36: [function (e, t, i) {
"use strict";
t.exports = {
BASE: 1,
STANDARD: 2,
HIGH: 3,
ULTRAHIGH: 4
}
}, {}],
37: [function (e, t, i) {
"use strict";
t.exports = {
LoadComplete: "panorama.load.complete",
LoadFailed: "panorama.load.failed",
TileLoaded: "panorama.tile.loaded"
}
}, {}],
38: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
Standard: 0,
Slow: 1,
Retain: 2
})
}, {}],
39: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
Show: 0,
Hide: 1,
Retain: 2
})
}, {}],
40: [function (e, t, i) {
"use strict";
t.exports = {
Move: "move",
MoveComplete: "move.complete",
ModeChanged: "mode.changed",
ModeChanging: "mode.changing",
PanoChosen: "pano.chosen",
ClosestPanoChanging: "closest.pano.changing",
WarpStarted: "warp.started",
WarpInterrupted: "warp.interrupted",
WarpEnded: "warp.ended",
FlyinFinished: "flyin.finished",
FlyingStarted: "flying.started",
FlyingInterrupted: "flying.interrupted",
FlyingEnded: "flying.ended",
Ready: "ready",
StartInside: "start.inside",
StartOutside: "start.outside",
ViewChanged: "view.changed",
WarpInterruptedWithFlyTo: "warp.interrupted.flyto",
InputStart: "input.start"
}
}, {}],
41: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
DEFAULT: 0,
PANOMARKERS: 1,
RETICULE: 2,
TAG: 3
})
}, {}],
42: [function (e, t, i) {
"use strict";
t.exports = {
visibleFloor: 1,
ghostFloor: 3,
boundingSkybox: 1,
panoMarker: 2,
reticule: 3,
tagStem: 4,
tagDisc: 5,
ribbon: 100
}
}, {}],
43: [function (e, t, i) {
"use strict";
t.exports = {
ContextCreated: "scene-renderer-context-created",
AfterRender: "after-render",
MemoryUsageUpdated: "scene-renderer-memory-usage-updated"
}
}, {}],
44: [function (e, t, i) {
"use strict";
t.exports = {
IDLE: "idle",
BROWSE: "browse",
EXAMINE: "examine"
}
}, {}],
45: [function (e, t, i) {
"use strict";
t.exports = {
TileDownloadSuccess: "tiledownloader.download.success",
TileDownloadFailure: "tiledownloader.download.failure",
PanoDownloadComplete: "tiledownloader.pano.download.complete"
}
}, {}],
46: [function (e, t, i) {
"use strict";
t.exports = {
CardboardAndroid: "googlevr",
GearVR: "gearvr",
CardboardIOS: "googlevrios",
Cardboard: "googlevr"
}
}, {}],
47: [function (e, t, i) {
"use strict";
t.exports = {
NONE: 0,
CONTEXTUAL: 1,
ANDROID: 2
}
}, {}],
48: [function (e, t, i) {
"use strict";
var n = {
Title: 0,
Cardboard: 1
},
r = {
Title: 0,
Cardboard: 1,
Gear: 2
};
[n, r].forEach(function (e) {
e.pageCount = Object.keys(e).length
}), t.exports.ios = n, t.exports.standard = r
}, {}],
49: [function (e, t, i) {
"use strict";
t.exports = {
Android: "android",
IOS: "ios",
Desktop: "desktop",
UnsupportedAndroid: "android-unsupported"
}
}, {}],
50: [function (e, t, i) {
"use strict";
var n = e("three");
t.exports = {
UP: new n.Vector3(0, 1, 0),
DOWN: new n.Vector3(0, -1, 0),
LEFT: new n.Vector3(-1, 0, 0),
RIGHT: new n.Vector3(1, 0, 0),
FORWARD: new n.Vector3(0, 0, -1),
BACK: new n.Vector3(0, 0, 1)
}
}, {
three: 217
}],
51: [function (e, t, i) {
"use strict";
var n = e("../exception/ViewmodeConvertException"),
r = e("./coreViewmodes"),
o = {
MESH: "mesh",
OUTDOOR: "outdoor",
TRANSITIONING: "transitioning",
toInt: function (e) {
switch (e) {
case this.PANORAMA:
return 1;
case this.DOLLHOUSE:
return 2;
case this.FLOORPLAN:
return 3;
case this.OUTDOOR:
return 4;
case this.TRANSITIONING:
return -1
}
throw new n("No known conversion for Viewmode to int for mode: " + e)
},
fromInt: function (e) {
switch (e) {
case "1":
case 1:
return this.PANORAMA;
case "2":
case 2:
return this.DOLLHOUSE;
case "3":
case 3:
return this.FLOORPLAN;
case "4":
case 4:
return this.OUTDOOR
}
throw new n("No known conversion for int to viewmode for int: " + e)
},
convertWorkshopModeInt: function (e) {
switch (e) {
case "0":
case 0:
case void 0:
return this.PANORAMA;
case "1":
case 1:
return this.FLOORPLAN;
case "2":
case 2:
return this.DOLLHOUSE;
case "3":
case 3:
return this.MESH
}
throw new n("No known conversion for Workshop int to viewmode for int: " + e)
}
};
e("../util/common").extendObject(o, r), t.exports = o
}, {
"../exception/ViewmodeConvertException": 58,
"../util/common": 185,
"./coreViewmodes": 54
}],
52: [function (e, t, i) {
"use strict";
t.exports = {
BLACK: "black",
STD: "std",
WALK: "walk"
}
}, {}],
53: [function (e, t, i) {
"use strict";
t.exports = {
ZoomIn: "zoom.in",
ZoomOut: "zoom.out",
ZoomMax: "zoom.max",
ZoomMin: "zoom.min"
}
}, {}],
54: [function (e, t, i) {
"use strict";
t.exports = {
PANORAMA: "panorama",
DOLLHOUSE: "dollhouse",
FLOORPLAN: "floorplan"
}
}, {}],
55: [function (e, t, i) {
"use strict";
t.exports = function (e) {
this.message = e
}
}, {}],
56: [function (e, t, i) {
"use strict";
function n(e) {
r.call(this, e)
}
var r = e("./BasicException");
n.prototype = Object.create(r.prototype), t.exports = n
}, {
"./BasicException": 55
}],
57: [function (e, t, i) {
"use strict";
function n(e) {
r.call(this, e)
}
var r = e("./BasicException");
n.prototype = Object.create(r.prototype), t.exports = n
}, {
"./BasicException": 55
}],
58: [function (e, t, i) {
"use strict";
function n(e) {
r.call(this, e)
}
var r = e("./BasicException");
n.prototype = Object.create(r.prototype), t.exports = n
}, {
"./BasicException": 55
}],
59: [function (a, s, e) {
(function (e) {
"use strict";
var i = a("./util/ajax"),
n = a("./util/showcase"),
t = a("./util/logger"),
r = new t(e),
o = {};
s.exports = {
loadFeatureFlags: function (e) {
var t = $.Deferred();
return i.get(e.urlBase + "", {
responseType: "json",
prefetchFrom: "user",
auth: n.getAuthorizationHeader()
}).done(function (e) {
(o = function (e) {
var t = {};
if (e) {
var i = e.flags;
if (i)
for (var n in i) i.hasOwnProperty(n) && (t[i[n]] = !0);
return t
}
return r.debug("Feature flags -> parseFeatureFlags: rawData is null."), null
}(e)) ? t.resolve(o): t.reject("loading-failed")
}).fail(function () {
r.debug("Retrieval of feature flags failed."), t.reject("loading-failed")
}), t.promise()
},
getFlags: function () {
return o
},
updateDependentSettings: function (e, t) {
(e = e || o).labels && (t.labels.enabled = !0), e.zooming && !t.zoom.forceOff && (t.zoom.enabled = !0), e.showcase_sdk && (t.sdkInit = !0), e.mobile_highq_override && (t.tiling.mobileHighQualityOverride = !0), e.showcase_webvr && (t.vr.allowWebVR = !0), e.uhql && (t.tiling.allowUltraHighResolution = !0), e.hide_sc_sharing && (t.share.enabled = !1)
}
}
}).call(this, "/js/featureflags.js")
}, {
"./util/ajax": 181,
"./util/logger": 189,
"./util/showcase": 193
}],
60: [function (e, t, i) {
"use strict";
var n = (e("../util/common"), {
status: 0,
set: function (e) {
if (isNaN(e)) return !1;
var t = $(".progressbar");
e < 0 && (e = 0), 100 < e && (e = 100);
var i = e * (parseInt(t.css("width").replace("px", "")) / 100),
n = Math.round(e),
r = parseInt(i) - 15;
t.find(".bar").css("width", i), t.find(".label").css("left", r), t.find(".perc").text(n + "%"), this.status = e
},
done: function (e) {
return e || this.status ? (this.status = null, this.set(100)) : this
}
});
t.exports.circleLoader = n
}, {
"../util/common": 185
}],
61: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
CLOSE: "modal.closer.close"
})
}, {}],
62: [function (e, t, i) {
"use strict";
function n(t, e) {
function i() {
var e = t.offsetHeight >= $("#player").height() && t.offsetWidth >= $("#player").width();
e !== p && ((p = e) ? (t.classList.add("closeByFooter"), c.classList.add("closeByFooter")) : (t.classList.remove("closeByFooter"), c.classList.remove("closeByFooter")))
}
e ? setTimeout(i, r.guiAnimationSpeed) : i()
}
var r = e("../../settings"),
o = (e("../../tag/Media/MediaEvent"), e("../../util/browser")),
a = e("../../util/common"),
s = e("./ModalCloserEvent"),
l = e("events").EventEmitter,
c = document.getElementsByClassName("footer")[0],
h = c.querySelectorAll(".close")[0],
u = null,
d = null,
p = null,
f = (o.isMobile(), {
open: function (e) {
e && (n(e), u && h.removeEventListener("click", u, !0), u = function (e, t) {
t && (t.stopPropagation(), t.preventDefault()), e && this.emit(s.CLOSE, e), f.reset()
}.bind(this, e.id), h.addEventListener("click", u, !0), d && window.removeEventListener("resize", d, !0), d = n.bind(this, e), window.addEventListener("resize", d, !0))
},
reset: function () {
c.classList.remove("closeByFooter"), h.removeEventListener("click", u, !0), window.removeEventListener("resize", d, !0), u = d = p = null
}
});
a.extendObject(f, l.prototype), t.exports = f
}, {
"../../tag/Media/MediaEvent": 131,
"../../settings": 166,
"../../util/browser": 182,
"../../util/common": 185,
"./ModalCloserEvent": 61,
events: 202
}],
63: [function (e, t, i) {
"use strict";
var A = e("../lib/dat.gui"),
C = e("three"),
I = e("../util/easing"),
E = e("../enum/Viewmode"),
_ = e("../enum/Colors"),
b = e("../enum/WarpStyle"),
w = e("../settings");
e("../tag/tag"), A.GUI.prototype.removeFolder = function (e) {
var t = this.__folders[e];
t && (t.close(), this.__ul.removeChild(t.domElement.parentNode), delete this.__folders[e], this.onResize())
}, t.exports.toggle = function (t, e, i) {
var n = new A.GUI({
width: 400
}),
r = n.addFolder("Flydown from Dollhouse");
r.add(w.flydown, "movementEasing", Object.keys(I)), r.add(w.flydown, "movementDelay", 0, 1).step(.01), r.add(w.flydown, "rotationEasing", Object.keys(I)), r.add(w.flydown, "rotationDelay", 0, 1).step(.01), r.add(w.flydown, "modelTextureDelay", 0, 1).step(.01), r.add(w.flydown, "skyboxDelay", 0, 1).step(.01), r.add(w.dollhouseDefault, "minPolarAngle", 0, C.Math.degToRad(50)), r.add(w.dollhouseDefault, "maxPolarAngle", C.Math.degToRad(50), C.Math.degToRad(170));
var o = n.addFolder("Transition between panos");
o.add(w.transition, "blur", 0, 10).onFinishChange(function () {}), o.add(w.transition, "flySpeed", 0, 10).step(.01).onFinishChange(function () {
w.transition.flyTime = 0, o.__controllers.forEach(function (e) {
e.updateDisplay()
})
}), o.add(w.transition, "flyTime", 0, 5e3).onFinishChange(function () {
w.transition.flySpeed = 0, o.__controllers.forEach(function (e) {
e.updateDisplay()
})
}), o.add(w.transition, "aimTime", 500, 2500).step(50), o.add(w.transition, "aimSlowFactor", 1, 3).step(.1), o.add(w.transition, "movementEasing", Object.keys(I));
var a = n.addFolder("Path Display");
a.add(w.path, "opacity", 0, 1).step(.01).onFinishChange(function () {}), a.add(w.path, "height", 0, .2).step(.01).onFinishChange(function () {}), a.add(w.path, "outsideHeight", 0, 2).step(.01).onFinishChange(function () {}), a.add(w.path, "ribbonWidth", .01, .35).step(.01).onFinishChange(function () {}), a.add(w.path, "waypointRadius", .01, 1.2).step(.01).onFinishChange(function () {}), a.add(w.path, "waypointPulse", 0, 3600).step(20).onFinishChange(function () {}), a.add(w.path, "waypointIndoorRadius", .01, 1.2).step(.01).onFinishChange(function () {}), a.add(w.path, "fadeInTime", 0, 1200).step(10).onFinishChange(function () {}), a.add(w.path, "fadeOutTime", 0, 1200).step(10).onFinishChange(function () {}), a.add(w.path, "color", Object.keys(_)).onFinishChange(function () {
w.path.color = _[w.path.color], w.path.colorUp = _._desat(w.path.color), w.path.colorDown = _.darken(w.path.color)
}), a.add(w, "reticuleColor", Object.keys(_)).onFinishChange(function () {
w.reticuleColor = _[w.reticuleColor]
});
var s = n.addFolder("Warping"),
l = s.addFolder("Warp/Teleport");
l.add(w.warp, "softPushDist", 0, 2).onFinishChange(function () {}), l.add(w.warp, "softPushEnd", 0, 1).step(.01).onFinishChange(function () {}), l.add(w.warp, "softBendAngle", 0, 45).onFinishChange(function () {}), l.add(w.warp, "softBendTilt", 0, 45).onFinishChange(function () {}), l.add(w.warp, "softBendEnd", 0, 1).step(.01).onFinishChange(function () {}), l.add(w.warp, "burnsAngle", 0, 30).onFinishChange(function () {}), l.add(w.warp, "minBurnsAngle", 0, 10).onFinishChange(function () {}), l.add(w.warp, "brakeStrength", 1, 8).onFinishChange(function () {}), l.add(w.warp, "minBrakeAngle", 0, 5).step(.01).onFinishChange(function () {}), l.add(w.warp, "maxBrakeAngle", 0, 5).step(.01).onFinishChange(function () {}), l.add(w.path, "mapGuides").onFinishChange(function () {}), l.add(w.warp, "teleportTime", 0, 5e3).step(10).onFinishChange(function () {}), l.add(w.warp, "outsideTime", 0, 5e3).step(10).onFinishChange(function () {}), l.add(w.path, "typ", Object.keys(b)).onFinishChange(function () {
w.path.typ = b[w.path.typ]
}), l.add(w.warp, "loop").onChange(function () {}).onFinishChange(function () {
e.endlessLoop = w.warp.loop
}), l.add(w.warp, "walkSlideShowThreshhold", 1, 1e4).step(1).onFinishChange(function () {}), l.add(w.warp, "walkExtraPanosDistance", 0, 3).step(.1).onFinishChange(function () {}), l.add(w.transition, "fastForwardFactor", 1, 10).step(1).onFinishChange(function () {});
var c = s.addFolder("Long Warp Only");
c.add(w.warp, "minWarpTime", 0, 5e3).step(10).onFinishChange(function () {
w.warp.flySpeed = 0, c.__controllers.forEach(function (e) {
e.updateDisplay()
})
}), c.add(w.warp, "timePerMeter", 0, 5e3).step(10).onFinishChange(function () {}), c.add(w.warp, "lookAheadMax", .01, 1).step(.01).onFinishChange(function () {}), c.add(w.warp, "lookAheadDist", .01, 4).step(.01).onFinishChange(function () {}), c.add(w.warp, "maxTurnPerSec", 0, 720).step(1).onFinishChange(function () {}), c.add(w.warp, "maxAimPerSec", 0, 720).step(1).onFinishChange(function () {}), c.add(w.warp, "turnFriction", 0, 1).step(.01).onFinishChange(function () {}), c.add(w.warp, "walkDelay", 0, 2e3).step(10).onFinishChange(function () {}), c.add(w.transition, "flytimeMaxDistanceThreshold", 0, 25).step(10).onFinishChange(function () {}), c.add(w.warp, "walkMaxDist", 0, 100).step(1).onFinishChange(function () {});
var h = n.addFolder("Warp Esoterica");
h.add(w.warp, "nearPanoDist", .01, 12).step(0).onFinishChange(function () {}), h.add(w.warp, "blur", .01, 1).onFinishChange(function () {}), h.add(w.warp, "flySpeed", 0, 10).step(.01).onFinishChange(function () {
w.warp.minWarpTime = 0, h.__controllers.forEach(function (e) {
e.updateDisplay()
})
}), h.add(w.warp, "showBunny").onFinishChange(function () {}), h.add(w.warp, "fastTime", 0, 2500).step(10).onFinishChange(function () {}), h.add(w.warp, "movementEasing", Object.keys(I));
var u = n.addFolder("Misc");
u.add(w, "dollhouseFOV", 10, 180).onChange(function () {
i.cameras[E.DOLLHOUSE].fov = w.dollhouseFOV
}), u.add(w, "insideFOV", 10, 180).onChange(function () {
i.cameras[E.PANORAMA].fov = w.insideFOV
}), u.add(w, "insideLookSpeed", .01, .3).step(.01).onChange(function () {}), u.add(w, "rotationAccelerationInside", .1, 10).step(.1).onChange(function () {}), u.add(w, "rotationAccelerationOutside", .1, 10).step(.1).onChange(function () {});
var d = n.addFolder("Navigation");
d.add(w.navigation, "panoScores").onFinishChange(function () {
w.navigation.panoScores || t.panos.forEach(function (e) {
e.floor.remove(e.text3d), e.text3d = null
})
}), d.add(w.navigation, "mouseDirection"), d.add(w.navigation, "filterStrictness", 0, 1), d.add(w.navigation, "angleFactor", -60, 0), d.add(w.navigation, "directionFactor", 1, 20), d.add(w.navigation, "distanceFactor", -5, 5), d.add(w.navigation, "optionalityFactor", .1, 10);
var p = n.addFolder("tags"),
f = p.addFolder("Tag Creation");
f.add(w.tags.pole, "enabled").name("poleEnabled"), f.add(w.tags.pole, "height", 0, 2.5).step(.01).name("poleHeight"), f.add(w.tags.pole, "width", 1, 10).step(1).name("poleWidth"), f.add(w.tags.pole, "opacity", .1, 1).step(.1).name("poleOpacity");
var g = p.addFolder("Visibility");
g.add(w.tags.visibility, "anyDistance"), g.add(w.tags.visibility, "visibleDistance", .1, 30).step(.1), g.add(w.tags.visibility, "cameraClearance", 0, 1).step(.01), g.add(w.tags.visibility, "hideViaFloor"), g.add(w.tags.visibility, "hideOffScreenDisc").name("hideEdgeDisc"), g.add(w.tags.visibility, "hideOffScreenObject").name("hideEdgeObject");
var m = p.addFolder("Disc Parameters");
m.add(w.tags.disc.scale, "nearBound", .1, 10).step(.1), m.add(w.tags.disc.scale, "farBound", .1, 20).step(.1).listen(), m.add(w.tags.disc.scale, "linkFarBound").onChange(function (e) {
e && (w.tags.disc.scale.farBound = w.tags.visibility.visibleDistance * (1 - w.tags.disc.scale.linkPercent / 100))
}), m.add(w.tags.disc.scale, "linkPercent", 0, 100).step(1).onChange(function (e) {
w.tags.disc.scale.linkFarBound && (w.tags.disc.scale.farBound = w.tags.visibility.visibleDistance * (1 - e / 100))
}), m.add(w.tags.disc.scale, "maxSize", 40, 200).step(1), m.add(w.tags.disc.scale, "minSize", 20, 100).step(1), m.add(w.tags.disc.scale, "responsiveness", 0, 100).step(1);
var v = p.addFolder("Navigate");
v.add(w.tags.navigate, "nearestPano").name("nearestPano"), v.add(w.tags.navigate, "lineOfSight").name("lineOfSight"), v.add(w.tags.navigate, "reactivate").name("reactivate"), v.add(w.tags.navigate, "aimAt", ["disc", "object", "pole", "nothing"]).name("aim at"), v.add(w.tags.navigate, "tiltTolerance", 0, 50).step(1), v.add(w.tags.navigate, "rotateSpeedFactor", 0, 5).step(.1);
var y = n.addFolder("Debug");
y.add(w, "wireframe").onFinishChange(function () {
t.chunks.forEach(function (e) {
e.material && (e.wireframeTwin || (e.wireframeTwin = new C.WireframeHelper(e), e.wireframeTwin.material.depthWrite = !1, e.wireframeTwin.material.depthTest = !1, e.wireframeTwin.material.opacity = .5, e.wireframeTwin.material.transparent = !0), w.wireframe ? t.add(e.wireframeTwin) : t.remove(e.wireframeTwin))
})
}), y.add(w, "skyboxWireframe").onFinishChange(function () {
w.skyboxWireframe ? (t.skybox.wireframe = new C.WireframeHelper(t.skybox), t.add(t.skybox.wireframe)) : (t.remove(t.skybox.wireframe), t.skybox.wireframe = null)
}), y.add(w, "showSweeps").onFinishChange(function () {
t.setSweepVisibility(w.showSweeps)
}), y.add(w, "showMesh").onFinishChange(function () {
t.chunks.forEach(function (e) {
e.visible = w.showMesh
})
}), y.add(w, "showFloors").onFinishChange(function () {
t.floors.forEach(function (e) {
e.collider.children.forEach(function (e) {
e.material.visible = w.showFloors
})
})
}), y.add(w, "showSkyboxes").onFinishChange(function () {
t.panos.forEach(function (e) {
e.skyboxMesh.visible = w.showSkyboxes
})
}), y.add(w, "showNeighbors").onChange(function () {}), y.add(t, "alpha", 0, 1)
}
}, {
"../enum/Colors": 19,
"../enum/Viewmode": 51,
"../enum/WarpStyle": 52,
"../lib/dat.gui": 93,
"../tag/tag": 123,
"../settings": 166,
"../util/easing": 186,
three: 217
}],
64: [function (c, h, e) {
(function (e) {
"use strict";
function i(e, t, i, n) {
$(".gui-error .error-problem-text").text(e), $(".gui-error .error-solution-text").text(t), $(".gui-error .error-explanation").text(i), $(".gui-error .error-actions").html(n), $(window).resize(), $(".gui-error").fadeIn(), $("#bottom-logo").fadeIn()
}
function n(e) {
var t = ['
"].join("");
i(e, s.ERROR_BROWSER_SOLUTION, s.ERROR_BROWSER_EXPLANATION, t), r.isMobile() || $("[rel=tiletip]").tooltip({
placement: "bottom",
delay: {
show: 50,
hide: 0
},
trigger: "hover",
viewport: {
selector: "body",
padding: 10
}
})
}
function t() {
var e = r.isMobile() ? "" : '' + s.ERROR_GENERIC_ACTIONS_2 + "" + s.ERROR_GENERIC_ACTIONS_3,
t = [s.ERROR_GENERIC_ACTIONS_1, e].join("");
i(s.ERROR_GENERIC_PROBLEM, s.ERROR_GENERIC_SOLUTION, "", t), r.isMobile() || $(".install-browser").on("click touchstart", function (e) {
e.preventDefault(), e.stopPropagation(), n(" ")
})
}
var r = c("./../util/browser"),
o = c("./../analytics"),
a = c("./../settings"),
s = c("../localization/localize"),
l = new(c("./../util/logger"))(e);
h.exports.error = function (e) {
if ($("head title").text(a.pageTitle), $("#gui-message, #gui-loading, #nprogress, #gui-thumb, #bottom-logo").hide(), $("#gui-loading").fadeOut(250), $("#quick-blackout").hide(), o.track("showcase_error", {
error_key: e
}), s.locale || s.init(), "webgl-unsupported" === e) r.isMobile() ? t() : n(s.ERROR_WEBGL_UNSUPPORTED_PROBLEM);
else if ("webgl-ios" === e) i(s.ERROR_WEBGL_IOS_PROBLEM, s.ERROR_WEBGL_IOS_SOLUTION, "", s.ERROR_WEBGL_IOS_ACTIONS_1 + "" + s.ERROR_WEBGL_IOS_ACTIONS_2 + ".");
else if ("webgl-safari" === e) i(s.ERROR_WEBGL_SAFARI_PROBLEM, "", "", s.ERROR_WEBGL_SAFARI_ACTIONS_1 + "" + s.ERROR_WEBGL_SAFARI_ACTIONS_2 + ". " + s.ERROR_WEBGL_SAFARI_ACTIONS_3 + "" + s.ERROR_WEBGL_SAFARI_ACTIONS_4 + ".");
else if ("webgl-generic" === e) t();
else if ("missing-urls" === e) i(s.ERROR_MISSING_URLS_PROBLEM, "", s.ERROR_MISSING_URLS_EXPLANATION);
else if ("loading-failed" === e) i(s.ERROR_LOADING_FAILED_PROBLEM, "", "", s.ERROR_LOADING_FAILED_ACTIONS_1 + '' + s.ERROR_LOADING_FAILED_ACTIONS_2 + ".");
else {
if ("loading-failed-maintenance" !== e) return void l.error("Unhandled error: " + e);
i(s.ERROR_MAINTENANCE_PROBLEM, s.ERROR_MAINTENANCE_SOLUTION)
}
}
}).call(this, "/js/gui/error.js")
}, {
"../localization/localize": 108,
"./../analytics": 4,
"./../settings": 166,
"./../util/browser": 182,
"./../util/logger": 189
}],
65: [function (Oe, Le, e) {
(function (e) {
"use strict";
function c() {
for (var e in Ce)
if (Ce.hasOwnProperty(e)) {
var t = Ce[e];
if (!t.visible)
for (var i = 0; i < t.elements.length; i++) $(t.elements[i]).hide()
} Ce.highlight.visible && $(".pinBottom").addClass("highlightExists"), !1 === Ce.tourControls.visible && $("#drawer").addClass("fullWidth"), ge = [], Ce.floors.visible && ge.push(".gui-floor", ".gui-floor-title"), ge.push(".hideTarget", ".pinTop.right")
}
function v(e, t) {
var i = !S.isMobile() && M.zoom.enabled && t.mode === ie.PANORAMA && !e.tourIsPlaying;
$("#gui-zoomin").toggle(i), $("#gui-zoomout").toggle(i)
}
function l() {
n(), $(".pinBottom").toggleClass("open"), $("#drawer").toggleClass("open"), $(".footer").toggleClass("open"), $("#drawer").hasClass("open") ? ($("#pullTab .icon").attr("data-original-title", se.CLOSE_HIGHLIGHTS), _e("highlights")) : ($("#pullTab .icon").attr("data-original-title", se.OPEN_HIGHLIGHTS), O.resetDrawer()), setTimeout(function () {
$("#pullTab").toggleClass("opened")
}, $("#drawer").hasClass("open") ? 0 : M.highlightAnimationDuration), $(".pinBottom").hasClass("open") && t($(".vr-popup")) && $(".vr-popup").is(":visible") && X.dismiss()
}
function t(e) {
var t;
return "none" !== e.css("display") ? t = e.position().top + e.outerHeight() : (e.attr("style", "visibility: hidden"), t = e.position().top + e.outerHeight(), e.attr("style", "display: none")), $("#player").outerHeight() - 130 < t + 25
}
function y(e) {
"touchstart" === e.type && e.preventDefault(), e.stopPropagation()
}
function n() {
w && (w.reload(), w.init())
}
function r() {
$("#gui-spinner").stop(!0, !0), $("#gui-spinner").fadeOut(1e3), !(Ae = !0)
}
function A(e, t) {
var i = e.mode,
n = t || e.currentPano;
$("#gui-modes-dollhouse").toggleClass("active", i === ie.DOLLHOUSE), $("#gui-modes-floorplan").toggleClass("active", i === ie.FLOORPLAN), $("#gui-modes-inside").toggleClass("active", i === ie.PANORAMA), i === ie.PANORAMA ? ($("#view-controllers").slideUp(500), M.show360Views.enabled && !n.isAligned() ? ($(".gui-floor").addClass("hidden"), $("#gui-modes-outside").addClass("desktop-only")) : ($(".gui-floor").removeClass("hidden"), $("#gui-modes-outside").removeClass("desktop-only")), $("#gui-modes-outside").removeClass("hidden")) : i !== ie.TRANSITIONING && (r(), pe = i, $("#gui-modes-outside").addClass("hidden"), e.model.has360Views && $(".gui-floor").removeClass("hidden"), $("#view-controllers").is(":visible") || $("#view-controllers").slideDown(M.guiAnimationSpeed))
}
function C(t, i) {
function e() {
document.getElementById("vr").classList.remove("hidden"), M.vr.allowWebVR ? S.getVRDisplay().then(function (e) {
S.supportsFullscreen() ? function (e) {
ue.info(e.displayName + " detected, VR button activates WebVR experience"), Q.init(t.data, i, e, x), Q.on(J.OPENED, _e.bind(gui, "vr")), Q.on(J.SHOW_TERMS, W.show.bind(W))
}(e) : (ue.warn("Unable to use WebVR when full screen is not supported"), $(".improper-embed").toggleClass("hidden", !1), n())
}, function (e) {
n()
}) : n()
}
function n() {
var e;
ue.info("WebVR support not found, VR button activates native app VR modal"), X.init(t.data, x), X.on(Z.OPENED, (e = document.getElementById("vr-modal"), function () {
_e("vr"), V.open(e)
})), X.on(Z.CLOSED, V.reset)
}
if (M.vr.enabled && t.supportsVR && !S.valueFromHash("mls", 0)) switch (M.vr.option) {
case le.CONTEXTUAL:
e();
break;
case le.ANDROID:
S.detectAndroid() && e();
break;
case le.NONE:
}
}
function h(e, i) {
for (var n = $(".gui-floor"), t = 0; t < e.floors.length; t++)
if ("372" !== getQueryVariable("m")) {
var r = $('').text(e.floors.get(t).name);
$(".gui-floor").find(".container").prepend(r)
} n.find(".container").prepend('
' + se.FLOOR_ALL + "
"), n.on("click", function (e) {
y(e), _e("floor"), n.toggleClass("open")
}), $(".floorChoice").on("click", function (e) {
y(e);
var t = $(this).data("index");
"all" !== t ? (R.updateInteraction(oe.InteractionGui, "floor-control"), i.player.gotoFloor(t), R.track("showcase_gui", {
gui_action: "click_floor_select_button",
interaction_source: "gui"
})) : (R.updateInteraction(oe.InteractionGui, "floor-control"), _e("move"), i.allFloors(), R.track("showcase_gui", {
gui_action: "click_toggle_all_floors_button",
interaction_source: "gui"
})), n.removeClass("open")
})
}
function I(e, t) {
e && (t === ie.DOLLHOUSE || t === ie.FLOORPLAN ? ($(".allFloorBtn").show(), $(".gui-floor-icon").hide(), $(".gui-floor-title").show()) : ($(".allFloorBtn").hide(), $(".gui-floor-icon").show(), $(".gui-floor-title").hide()), e.model.allFloorsVisible ? ($(".gui-floor-title").text(se.FLOOR_ALL), $(".gui-floor-number").text(se.FLOOR_ALL), $(".floorChoice").removeClass("active"), $('.floorChoice[data-index="all"]').addClass("active")) : ($(".gui-floor-title").text(e.name), $(".gui-floor-number").text(" " + (e.floorIndex + 1)), $(".floorChoice").removeClass("active"), $(".floorChoice[data-index=" + e.floorIndex + "]").addClass("active")))
}
function E() {
var e = $("#player").width() - 20,
t = $("#scroller"),
i = $("#drawer"),
n = $(".pinBottom");
$("#player").width() < 488 || $("#player").height() < 488 ? (t.addClass("hidden"), i.addClass("noScroll"), n.addClass("noScroll")) : e < T != !i.hasClass("noScroll") && (t.toggleClass("hidden"), i.toggleClass("noScroll"), n.toggleClass("noScroll"))
}
function _(e) {
e.waitQueue.length <= 0 ? r() : ye || function (e) {
e = e || 0, Ae = !1, window.setTimeout(function () {
Ae || (!0, $("#gui-spinner").stop(!0, !0).show())
}.bind(this), e)
}(M.modelComponentLoadSpinnerDelay)
}
function b(e, t) {
for (var i = []; e;) i.push(e), e = e.parentNode;
for (; t && -1 === i.indexOf(t);) t = t.parentNode;
return t
}
var w, T, o, a, x, i, s, u, d, p, f, g, S = (Oe("three"), Oe("../util/ajax"), Oe("../util/browser")),
M = Oe("../settings"),
R = Oe("../analytics"),
m = (Oe("../util/transitions"), Oe("../util/camera"), Oe("../util/logger")),
P = (Oe("../objects/Snapshot"), Oe("./helpManager")),
O = Oe("./immersiveMode"),
L = Oe("./loadingScreen"),
D = Oe("./landingScreen"),
N = Oe("./playButton"),
F = Oe("./populateModal"),
B = Oe("./memoryUsage"),
V = Oe("./closer/modalCloser"),
k = Oe("./closer/ModalCloserEvent"),
U = Oe("./help/help"),
H = Oe("./help/HelpEvent"),
z = Oe("./title/titleBar"),
G = Oe("./title/TitleEvents"),
W = Oe("./terms/terms"),
j = Oe("./terms/TermsEvent"),
Y = Oe("./title/tagToggle"),
q = Oe("./tourInteraction"),
X = Oe("./vr/vrModal"),
Z = Oe("./vr/vrEvent"),
K = Oe("./sharing/modal"),
Q = Oe("./webvr/webVRgui"),
J = Oe("./webvr/WebVrEvent"),
ee = Oe("../controls/serializer"),
te = Oe("../enum/Keys"),
ie = Oe("../enum/Viewmode"),
ne = (Oe("../enum/BlackoutStyle"), Oe("../tag/Media/MediaEvent")),
re = (Oe("../enum/PathDiscardMode"), Oe("../enum/PathDisplayMode"), Oe("../enum/DirectorEvents"), Oe("../enum/PlayerEvents")),
oe = Oe("../enum/ControlEvents"),
ae = Oe("./sharing/ShareEvents"),
se = Oe("../localization/localize"),
le = (Oe("../enum/Vectors"), Oe("../enum/WarpStyle"), Oe("../enum/AlignmentType"), Oe("../enum/VROption")),
ce = Oe("./konami"),
he = Oe("../lib/dat.gui"),
ue = new m(e),
de = (Oe("../util/showcase"), Oe("../enum/ZoomEvents")),
pe = ie.DOLLHOUSE,
fe = 0,
ge = [".hideTarget"],
me = null,
ve = null,
ye = !1,
Ae = !1,
Ce = {
coBrand: {
visible: !0,
elements: [".co-brand", "#loaderCoBrand"]
},
help: {
visible: !0,
elements: [".nav-help", "#nav-help"]
},
tourControls: {
visible: !0,
elements: [".next", ".previous", "#play"]
},
highlight: {
visible: !0,
elements: ["#drawer", "#pullTab"]
},
share: {
visible: !0,
elements: [".socialButton", "#share"]
},
fullScreen: {
visible: !0,
elements: ["#gui-fullscreen"]
},
floors: {
visible: !0,
elements: [".gui-floor"]
}
},
Ie = (g = document.getElementById("drawer"), function () {
$("#player").height() < 400 && g.classList.contains("open") && l()
}),
Ee = (f = document.getElementById("meta-info"), function () {
$("#player").height() < 400 && f.classList.contains("expand") && z.toggleMeta(!0)
}),
_e = (i = document.getElementById("meta-info"), s = document.getElementById("interaction-modal"), u = $("#drawer").eq(0), d = $(".gui-floor").eq(0), p = $(".vr-popup").eq(0), function (e) {
switch (e) {
case "info":
we(), Te(), Ie(), Me(), Re(), xe(), Pe();
break;
case "terms":
be(), Te(), Se(), Me(), Re(), xe(), Pe();
break;
case "help":
be(), we(), Me(), Re(), xe(), Pe();
break;
case "vr":
be(), we(), Me(), Re(), Te(), Pe(), t(p) && Se();
break;
case "highlights":
Ee(), we(), Me(), Re();
break;
case "share":
be(), we(), Te(), Re(), xe(), Pe();
break;
case "floor":
we(), Me(), xe();
break;
case "view":
Re(), Me(), we(), xe();
break;
case "tour":
case "move":
we(), Me(), Re(), xe();
break;
case "resize":
be(), Ie(), Re();
break;
case "tag":
we(), Te(), Me(), Re(), xe()
}
});
function be() {
i.classList.contains("expand") && z.toggleMeta(!0)
}
function we() {
W.hide()
}
function Te() {
U.close()
}
function xe() {
X.dismiss()
}
function Se() {
u.hasClass("open") && l()
}
function Me() {
K.hide()
}
function Re() {
d.hasClass("open") && d.removeClass("open")
}
function Pe() {
s.classList.contains("fadeIn") && (s.classList.contains("landing") ? D.dismissModal() : s.classList.contains("tour") && q.dismissModal())
}
$(document).on("fullscreenchange webkitfullscreenchange mozfullscreenchange MSFullscreenChange", function (e) {
$("#gui-fullscreen").toggle(!S.isFullscreen()), $("#gui-fullscreen-exit").toggle(!!S.isFullscreen()), setTimeout(function () {
$(".icon:visible").hide().show(0)
}, 100)
}), $("#gui-fullscreen").find("a").on("click", function (e) {
y(e), S.requestFullscreen($("body")[0]), R.track("showcase_gui", {
gui_action: "click_enter_fullscreen",
interaction_source: "gui"
})
}), $("#gui-fullscreen-exit").find("a").on("click", function (e) {
y(e), S.exitFullscreen(), R.track("showcase_gui", {
gui_action: "click_exit_fullscreen",
interaction_source: "gui"
})
}), $("#volume").find("a").on("click", function (e) {
y(e), -1 < $("#volume img")[0].src.indexOf("btn_on.png") ? (g_play = 0, g_playAudio && g_playAudio.pause(), $("#volume img").attr("src", "./images/Volume btn_off.png"), $("#volume").attr("title", "关闭声音")) : -1 < $("#volume img")[0].src.indexOf("btn_off.png") && (g_play = 1, g_playAudio && g_playAudio.play(), $("#volume img").attr("src", "./images/Volume btn_on.png"), $("#volume").attr("title", "打开声音"))
}), $(window).on("resize", function (e) {
var t = e.target.innerHeight,
i = e.target.innerWidth;
t === o && i === a || (Ce.highlight.visible && E(), _e("resize"), $(".pinTop.right").removeClass("hideUnderMeta"), n(), o = t, a = i)
}).resize(), S.supportsFullscreen() || $("#gui-fullscreen").hide(), $("#pullTab").on("click", function (e) {
y(e), $("#drawer").hasClass("open") ? (R.trackAlways("showcase_gui", {
gui_action: "hide_highlight_reel"
}), $(this).addClass("open").children("img").attr("src", "images/auto.png")) : (R.trackAlways("showcase_gui", {
gui_action: "show_highlight_reel"
}), $(this).removeClass("open").children("img").attr("src", "images/auto-suspend.png")), l()
}), "true" === window.MP_PREFETCHED_MODELDATA.showHotListSta && ($("#hotList").css("display", ""), $("#hotList").on("click", function (e) {
y(e);
var t = $("#hotListWrap")[0];
t.classList.contains("hotListActive") ? (t.classList.remove("hotListActive"), this.classList.remove("active")) : (t.classList.add("hotListActive"), this.classList.add("active"))
}), $("#hotListContent ul").on("mouseover", function (e) {
y(e);
var t = e.target,
i = document.getElementById("hotListWrap");
if ("SPAN" === t.tagName) {
var n = t.parentElement.parentElement;
t.offsetWidth + 116 >= n.clientWidth ? i.style.width = t.offsetWidth + 116 + "px" : i.style.width = ""
} else if ("LI" === t.tagName) {
n = t.parentElement;
t.children[0].offsetWidth + 116 >= n.clientWidth ? i.style.width = t.children[0].offsetWidth + 116 + "px" : i.style.width = ""
} else i.style.width = ""
}), $("#hotListContent ul").on("click", function (e) {
y(e), this.preElem && this.preElem.classList.remove("active"), "SPAN" === e.target.tagName ? (e.target.parentElement.classList.add("active"), e.target.parentElement.hot && e.target.parentElement.hot.examine(window.player, !0), this.preElem = e.target.parentElement) : (e.target.classList.add("active"), e.target.hot && e.target.hot.examine(window.player, !0), this.preElem = e.target)
}), $("#hotListClose").on("click", function (e) {
y(e), $("#hotListWrap")[0].classList.remove("hotListActive"), $("#hotListContent ul .active").removeClass("active"), $("#hotList")[0].classList.remove("active")
})), "true" === window.MP_PREFETCHED_MODELDATA.supportsVR && $("#vr").css("display", ""), $("#more-menu-button").on("click", function (e) {
y(e), $("#more-menu").toggleClass("open")
}), Le.exports.init = function (s, l, c, e, t, i, n) {
var r;
x = n, s.outsideAllowed() || $("#gui-modes-outside").addClass("invisible"), s.supportedModes[ie.PANORAMA] || $("#gui-modes-inside").addClass("invisible"), F.init(), D.init(s, i), ce.init(s, l, e), $(".icon").on("mouseover", function () {
l.player && l.player.reticule.hide()
}),
function (e, t) {
var i = t.player;
$("#gui-modes-inside").on("mousedown touchstart", function (e) {
y(e), R.updateInteraction(oe.InteractionGui, "inside-button"), R.track("USER", {
event_type: "showcase_gui",
gui_action: "click_inside_mode_button"
}), t.changeMode(ie.PANORAMA)
}), $("#gui-modes-outside").find("a").on("click", function (e) {
y(e), R.track("showcase_gui", {
gui_action: "click_outside_mode_button"
}), t.changeMode(pe)
}), $("#gui-modes-floorplan").on("click", function (e) {
y(e), i.mode !== ie.FLOORPLAN && (R.track("showcase_gui", {
gui_action: "click_floorplan_mode_button"
}), t.changeMode(ie.FLOORPLAN))
}), $("#gui-modes-dollhouse").on("click", function (e) {
y(e), i.mode !== ie.DOLLHOUSE && (R.track("showcase_gui", {
gui_action: "click_dollhouse_mode_button"
}), t.changeMode(ie.DOLLHOUSE))
})
}(0, l),
function (e, t) {
$("#play").find("a").on("mousedown touchstart", function (e) {
y(e), _e("tour"), q.play(), R.trackAlways("showcase_gui", {
gui_action: "play_highlights"
})
}), window.startAndPlay = function (e) {
_e("tour"), q.play(), R.trackAlways("showcase_gui", {
gui_action: "play_highlights"
})
}, $("#pause").find("a").on("mousedown touchstart", function (e) {
y(e), q.pause(), R.trackAlways("showcase_gui", {
gui_action: "pause_highlights"
})
}), $("#gui-zoomin").find("a").on("click", function (e) {
y(e), t.player.zoomInIncrementally()
}), $("#gui-zoomout").find("a").on("click", function (e) {
y(e), t.player.zoomOutIncrementally()
})
}(0, l), s.data.enable_social_sharing && s.data.is_public && M.share.enabled && (K.init(s.data.name), K.on(ae.OPENED, (r = document.getElementById("share-modal"), function () {
_e("share"), V.open(r)
})), K.on(ae.CLOSED, V.reset)), 1 < s.heroLocations.length ? function (e, i, t) {
var n = 100 / (fe = e.heroLocations.length) + "%",
r = $("#thumb-container"),
o = $("#progressBar");
$("#status").find(".totalSteps").text(fe);
for (var a = 0; a < fe; a++) {
var s = e.heroLocations[a],
l = $('
');
if (l.attr("data-index", a), Ce.highlight.visible && l.find("img").attr("src", s.thumbUrl), s.name) {
var c = $('').text(s.name);
l.prepend(c)
}
if (e.has360Views && s.cameraMode === ie.PANORAMA) {
var h = e.panos.get(s.panoId),
u = h && !h.isAligned() ? '
' : '
';
l.prepend(u)
}
r.append(l), o.append('')
}
T = 144 * fe, 111 * fe, $(".thumbImg").on("mouseover", function () {
! function (e) {
return e.describe().inTransition
}(i) && t.showPathToHeroLocation($(this).data("index"))
}), $(".thumbImg").on("mouseout", function () {
i.clearPath()
}), $(".thumbImg").on("click", function (e) {
y(e);
var t = $(this);
R.updateInteraction(oe.InteractionGui, "thumbnail"), R.trackAlways("showcase_gui", {
gui_action: "click_highlight"
}), i.goToHighlight(t.data("index"))
}), $(".previous").find("a").on("click", function (e) {
y(e), R.trackAlways("showcase_gui", {
gui_action: "prev_highlight"
}), i.prevHighlight()
}), $(".next").find("a").on("click", function (e) {
y(e), R.trackAlways("showcase_gui", {
gui_action: "next_highlight"
}), i.nextHighlight()
}), $("#drawer").on("mouseleave", function (t) {
var i;
y(t);
try {
i = new MouseEvent("mouseup", {
clientX: t.clientX,
clientY: t.clientY,
screenX: t.screenX,
screenY: t.screenY
})
} catch (e) {
(i = document.createEvent("MouseEvents")).initMouseEvent("mouseup", t.bubbles, t.cancelable, t.view, t.detail, t.screenX, t.screenY, t.clientX, t.clientY, t.ctrlKey, t.altKey, t.shiftKey, t.metaKey, t.button, t.relatedTarget)
}
document.dispatchEvent(i)
}), (w = new Sly($("#scrollFrame"), {
horizontal: !0,
itemNav: "centered",
smart: !0,
scrollTrap: !0,
scrollBy: 1,
mouseDragging: !0,
touchDragging: !0,
speed: 300,
dragHandle: !0,
dynamicHandle: !0,
clickBar: !0,
scrollBar: $("#scroller"),
activateOn: null
}).init()).on("active", function (e, t) {
t,
_e("tour"),
$(".step").removeClass("active"),
$("#status").find(".curIdx").text(t + 1);
for (var i = 0; i <= t; i++) $("#progressBar").find("[data-idx='" + i + "']").addClass("active")
}), E()
}(s, l, c) : (Ce.highlight.visible = !1, Ce.tourControls.visible = !1), z.on(G.OPEN_INFO, _e.bind(this, "info")),
function () {
var n;
document.body.addEventListener("mousedown", function (e) {
n = 0 === e.button || 1 === e.which ? e.target : null
}, !0), document.body.addEventListener("mouseup", function (t) {
n !== t.target && (n = b(n, t.target));
var e = document.getElementById("gui-parent");
if (b(e, n) !== e && (n = null), n) {
var i;
try {
i = new MouseEvent("click", t)
} catch (e) {
(i = document.createEvent("MouseEvents")).initMouseEvent("click", t.bubbles, t.cancelable, t.view, t.detail, t.screenX, t.screenY, t.clientX, t.clientY, t.ctrlKey, t.altKey, t.shiftKey, t.metaKey, t.button, t.relatedTarget)
}
i.syntheticClick = !0, n.dispatchEvent(i), n = null
}
}, !0), document.getElementById("gui-parent").addEventListener("click", function (e) {
e.syntheticClick || (e.stopPropagation(), "A" === e.target.nodeName && e.preventDefault())
}, !0)
}(), A(c), C(s, t), s.on("floor.changed", I), s.on("waiting", function (e) {
_(e)
}.bind(this, s)), s.on("waiting-done", function (e) {
_(e)
}.bind(this, s)), c.on(re.ModeChanged, function (e, t) {
A(c), v(l, c), t === ie.PANORAMA && c.currentPano && !c.currentPano.isAligned() && (t = ie.OUTDOOR), U.updateMode(t)
}), e.on(oe.Move, _e.bind(this, "move")), c.on(re.Ready, function () {
O.init(e, c, c.tagManager, l), c.on(re.ModeChanged, function (e, t) {
e !== t && $(".vr-popup").is(":visible") && X.dismiss()
})
}), c.on(re.PanoChosen, function (e, t) {
A(c, t), U.updateMode(t && !t.isAligned() ? ie.OUTDOOR : ie.PANORAMA)
}), V.on(k.CLOSE, function (e) {
switch (e) {
case "vr-modal":
X.dismiss();
break;
case "share-modal":
K.hide();
break;
case "terms-modal":
W.hide()
}
});
var o, h = $("#play").eq(0),
u = $("#pause").eq(0),
d = $(".pinBottom").toArray(),
p = $("#drawer").eq(0),
f = $("#playHead").eq(0),
a = $("#progressBar").eq(0),
g = $("#thumb-container").eq(0).children(),
m = a.children();
l.on("update.controls", function () {
var e, t, i, n = l.describe();
if (n.tourIsPlaying || c.isWarping() ? (Ce.tourControls.visible && (h.hide(), u.show()), n.tourInProgress && (d.forEach(function (e) {
e.classList.add("playing")
}), p.addClass("playing"), f.addClass("playing"))) : (Ce.tourControls.visible && (h.show(), u.hide()), n.tourInProgress || (q.stopTour(), d.forEach(function (e) {
e.classList.remove("playing")
}), p.removeClass("playing"), f.removeClass("playing"))), null !== n.currentItem) {
var r, o;
$("#status").find(".curIdx").text(n.currentItem + 1), n.onTheBus ? (r = "active", o = "recent") : (o = "active", r = "recent");
var a = null === n.destinationItem || n.currentItem === n.destinationItem;
for (e = 0; e < s.heroLocations.length; e += 1) i = g.eq(e), t = m.eq(e), i.removeClass(o), t.removeClass(o), n.onTheBus && e === n.destinationItem ? (i.addClass(r), t.addClass(r), w.activate(e)) : n.onTheBus && a && e === n.currentItem ? (i.addClass(r), t.addClass(r)) : (i.removeClass(r), t.removeClass(r))
} else
for (e = 0; e < s.heroLocations.length; e += 1) i = g.eq(e), t = m.eq(e), i.removeClass("active recent"), t.removeClass("active recent");
v(l, c)
}), document.addEventListener("keydown", function (e) {
switch (R.updateInteraction(oe.InteractionKey), e.which) {
case te.ZERO:
M.debug && s.toggleAlpha();
break;
case te.NINE:
M.debug && B.toggle();
break;
case te.ONE:
c.isInMode(ie.TRANSITIONING) || l.changeMode(ie.PANORAMA);
break;
case te.TWO:
s.outsideAllowed() && !c.isInMode(ie.DOLLHOUSE, ie.TRANSITIONING) && l.changeMode(ie.DOLLHOUSE);
break;
case te.THREE:
s.outsideAllowed() && !c.isInMode(ie.FLOORPLAN, ie.TRANSITIONING) && l.changeMode(ie.FLOORPLAN);
break;
case te.FOUR:
c.isInMode(ie.TRANSITIONING) || l.changeMode(ie.OUTDOOR);
break;
case te.SPACE:
Ce.tourControls.visible && ($("#playHead").hasClass("playing") || _e("tour"));
break;
case te.RETURN:
M.debug && s.toggleExplodeUp();
break;
case te.P:
! function (e) {
me.gui || (me.gui = function (e) {
var t = new he.GUI;
return t.add(M, "showSweeps").name("Show sweeps").onFinishChange(function () {
e.setSweepVisibility(M.showSweeps)
}), t.add(M, "rotationAccelerationInside", .1, 10).name("Rotation speed").step(.1), t.add(M.transition, "flyTime", 0, 5e3).name("Transition time").onFinishChange(function () {
M.transition.flySpeed = 0, t.__controllers.forEach(function (e) {
e.updateDisplay()
})
}), t.add(M.path, "opacity", 0, 1).name("Path opacity"), $(t.__closeButton).hide(), t
}(me.model)), (me.visible = e) ? $(me.gui.domElement).show() : $(me.gui.domElement).hide()
}(!me.visible);
break;
case te.U:
! function (e) {
ve.gui || (ve.gui = function (t, i) {
function e() {
var e = i.toJSON();
n.linkToLocation = window.location.protocol + "//" + window.location.host + window.location.pathname + "?m=" + t.sid + "&start=" + ee.serialize(e), i.tagManager.activeTag && (n.linkToLocation += "&tag=" + i.tagManager.activeTag.sid)
}
var n = {},
r = new he.GUI({
autoPlace: !0,
width: "60%"
});
return e(), i.on(re.ViewChanged, e), r.add(n, "linkToLocation").name(se.LINK_TO_LOCATION).listen(), r.domElement.id = "datLinks", [].slice.call(r.domElement.querySelectorAll(".property-name")).forEach(function (e) {
if (!S.detectSafari()) {
var t = document.createElement("button");
t.classList.add("btn-deep-link"), t.innerText = se.MENU_COPY, e.nextSibling.appendChild(t);
var n = function () {
alert(se.LINK_ALERT_COPY), t.hide()
};
t.addEventListener("click", function (e) {
try {
var t = e.target.parentNode.childNodes[0];
t.select();
var i = document.execCommand("copy");
t.blur(), i || n()
} catch (e) {
n()
}
})
}
}), $(r.__closeButton).hide(), r
}(ve.model, ve.player)), (ve.visible = e) ? $(ve.gui.domElement).show() : $(ve.gui.domElement).hide()
}(!ve.visible);
break;
case te.X:
M.debug && s.toggleExplode();
break;
case te.PLUSEQUALS:
l.player.activatePersistentZooming(!0), O.hideUi();
break;
case te.DASHUNDERSCORE:
l.player.activatePersistentZooming(!1), O.hideUi();
break;
case te.SEVEN:
ue.info("Zoom level: " + l.player.zoomLevel + ", FOV: " + l.player.zoomFov);
break;
case te.EIGHT:
l.player.decreaseZoomSpeed();
break;
case te.NINE:
l.player.increaseZoomSpeed()
}
return c && c.reticule.hide(), !0
}.bind(this)), document.addEventListener("keyup", function (e) {
switch (e.which) {
case te.PLUSEQUALS:
l.player.deactivatePersistentZooming();
break;
case te.DASHUNDERSCORE:
l.player.deactivatePersistentZooming()
}
}.bind(this)),
function (e) {
me = {
gui: null,
visible: !1,
model: e
}
}(s),
function (e, t) {
ve = {
gui: null,
visible: !1,
model: e,
player: t
}
}(s, l.player),
function (e) {
function t(e, i) {
$(e).find("a").each(function (e, t) {
i ? $(t).removeClass("buttonZoomDisabled").addClass("buttonZoomEnabled") : $(t).addClass("buttonZoomDisabled").removeClass("buttonZoomEnabled"), t.style.pointerEvents = i ? "auto" : "none"
})
}
e.on(de.ZoomMax, function () {
t("#gui-zoomin", !1), t("#gui-zoomout", !0)
}), e.on(de.ZoomMin, function () {
t("#gui-zoomin", !0), t("#gui-zoomout", !1)
}), e.on(de.ZoomIn, function () {
t("#gui-zoomout", !0)
}), e.on(de.ZoomOut, function () {
t("#gui-zoomin", !0)
}), e.zoomLevel >= M.zoom.max ? t("#gui-zoomin", !1) : t("#gui-zoomin", !0), e.zoomLevel <= M.zoom.min ? t("#gui-zoomout", !1) : t("#gui-zoomout", !0)
}(c), P.setAutoPlay(s.heroCount()), U.init(c, i.mode), U.on(H.OPENED, _e.bind(this, "help")), W.init(), W.on(j.OPENED, (o = document.getElementById("terms-modal"), function () {
_e("terms"), V.open(o)
})), W.on(j.CLOSED, V.reset), M.quickstart.enabled || D.delayLanding(i.mode).then(D.showMessage.bind(this, c, l, Ce.coBrand.visible)), (M.quickstart.enabled || c.model.outsideAllowed()) && O.init(e, c, c.tagManager, l), M.profiling.enabled && B.show(), q.init(l)
}, Le.exports.startLoading = function (e, t, i, n, r, o) {
function a() {
o.setLoadingStartTime(),
function () {
function e(e) {
e.target === t || $.contains(t, e.target) || e.target === i || $.contains(i, e.target) || e.target === n || $.contains(n, e.target)
}
$("body").css("touch-action", "none"), $("#gui-parent").find("*:not(#tag-billboards)").on("touchmove", function (e) {});
var t = document.getElementById("terms-text"),
i = document.getElementById("more-help-wrapper"),
n = (document.getElementById("navigation-help-wrapper"), document.getElementById("help-dialog"), document.getElementById("tag-billboards"));
M.useWheel && (document.body.addEventListener("mousewheel", e, {
passive: !1
}), document.body.addEventListener("DOMMouseScroll", e)), $("#terms-text, #more-help-wrapper, #navigation-help-wrapper").off("touchmove").on("touchmove", function (e) {
e.stopPropagation()
})
}(), r ? (D.showMessage(t, i, Ce.coBrand.visible), l()) : function (e) {
L.show(e), c()
}(l)
}
var s = $.Deferred(),
l = s.resolve.bind(s);
return ye = !0, _(e), e.data.player_options && function (e) {
Ce.tourControls.visible = e.tour_buttons && S.valueFromHash("gt", 1), Ce.coBrand.visible = e.presented_by && 1 !== M.specialEdition && M.brand && !S.valueFromHash("mls", !1), Ce.highlight.visible = e.highlight_reel && 1 !== M.specialEdition && M.showHighlights
}(e.data.player_options), 1 === M.specialEdition && $("body").addClass("specialEdition"), se.localizeGUI(),
function (i) {
function e(e, t) {
return !!i.player_options[e] && i[t || e]
}
$(".model-title").text(i.name);
var t = M.pageTitle;
2 !== S.valueFromHash("mls", 0) && (t = i.name), document.title = t, S.isMobile() ? $("#gui-fullscreen").css("display", "none") : ($("[rel=tooltip]").tooltip({
delay: {
show: 50,
hide: 0
},
trigger: "hover",
html: !1,
viewport: {
selector: "body",
padding: 10
}
}), S.inIframe() && document.getElementsByClassName("pinBottom-container")[0].classList.add("embed")), z.populate({
name: e("model_name", "name"),
coBrand: e("presented_by"),
description: e("model_summary", "summary") || "暂无内容",
contactName: e("contact_name"),
address: e("address"),
phone: e("contact_phone"),
formattedPhone: i.formatted_contact_phone,
email: e("contact_email"),
url: e("external_url"),
socialSharing: i.enable_social_sharing && i.is_public
})
}(e.data), r || $(".quick").addClass("hidden"), e.data.image && !r && function (e) {
$("").attr("src", e).on("load", function () {
$("#gui-thumb").css("backgroundImage", "url(" + e + ")").fadeIn(500), $(this).remove()
})
}(e.data.image), n ? (R.impression(), a()) : (o.setWaitingStartTime(), N.show(r, a)), s
}, Le.exports.endLoading = function (e, t, i) {
var n = t.player;
function r() {
i.dismissExaminedTag(), i.disableHovering()
}
$("#gui-thumb").fadeOut(2500), L.hide(function () {
ye = !1
}), Y.init(e, i), z.finishSetup(Object.keys(e.tags).length), i.on(ne.IMAGE_OPENED, _e.bind(this, "tag")), X.on(Z.OPENED, r), K.on(ae.OPENED, r), U.on(H.OPENED, r), W.on(j.OPENED, r);
var o = i.enableHovering.bind(i);
if (X.on(Z.CLOSED, o), K.on(ae.CLOSED, o), U.on(H.CLOSED, o), W.on(j.CLOSED, o), M.labels.enabled && Object.keys(e.labels).length, e.floors.length <= 1 || !Ce.floors.visible ? Ce.floors.visible = !1 : (h(e, t), I(e.currentFloor, n.mode)), "372" === getQueryVariable("m") && (Ce.floors.visible = 1, h(e, t)), c(), v(t, t.player), $("#gui").fadeIn(1500), Ce.highlight.visible && (2 !== M.startHighlights || e.has360Views) && setTimeout(function () {
l(), (!e.has360Views && 1 !== M.startHighlights || e.has360Views && 0 === M.startHighlights) && setTimeout(l, 2e3)
}, 2e3), !S.isMobile())
for (var a = ["a", "#title-toggle", ".next-button", ".prev-button", ".gui-floor", ".meta-toggle", ".thumbImg", "logo-button"], s = 0; s < a.length; s++) $(a[s]).addClass("hasHover");
_(e), z.setupToggling(), window.editHotPanel && editHotPanel(),
function () {
var i = $("#pullTab"),
e = {
bottom: {
"border-bottom-left-radius": "10px",
"border-bottom-right-radius": "10px"
},
top: {
"border-top-left-radius": "10px",
"border-top-right-radius": "10px"
}
},
t = {
bottom: {
"border-top-right-radius": "10px",
"border-bottom-right-radius": "10px"
},
top: {
"border-bottom-left-radius": "10px",
"border-top-left-radius": "10px"
}
};
function n(e, t) {
$("#gui-modes-map > div:visible:last").css(e), i.is(":visible") ? $(".viewContainer > div:visible:first").css(t) : $("#gui-modes-map > div:visible:first").css(t)
}
/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) ? n(e.bottom, e.top) : n(t.bottom, t.top);
(window.MP_PREFETCHED_MODELDATA.model.special || "true" === window.MP_PREFETCHED_MODELDATA.special) && window.specialScene && specialScene.special().afterImplement()
}(), window.EditTools && new EditTools(n.sceneRenderer)
}, Le.exports.onProgress = function (e) {
L.progress(e)
}
}).call(this, "/js/gui/gui.js")
}, {
"../analytics": 4,
"../controls/serializer": 14,
"../enum/AlignmentType": 17,
"../enum/BlackoutStyle": 18,
"../enum/ControlEvents": 21,
"../enum/DirectorEvents": 23,
"../enum/Keys": 30,
"../enum/PathDiscardMode": 38,
"../enum/PathDisplayMode": 39,
"../enum/PlayerEvents": 40,
"../enum/VROption": 47,
"../enum/Vectors": 50,
"../enum/Viewmode": 51,
"../enum/WarpStyle": 52,
"../enum/ZoomEvents": 53,
"../lib/dat.gui": 93,
"../localization/localize": 108,
"../tag/Media/MediaEvent": 131,
"../objects/Snapshot": 153,
"../settings": 166,
"../util/ajax": 181,
"../util/browser": 182,
"../util/camera": 183,
"../util/logger": 189,
"../util/showcase": 193,
"../util/transitions": 195,
"./closer/ModalCloserEvent": 61,
"./closer/modalCloser": 62,
"./help/HelpEvent": 66,
"./help/help": 67,
"./helpManager": 68,
"./immersiveMode": 69,
"./konami": 70,
"./landingScreen": 71,
"./loadingScreen": 72,
"./memoryUsage": 73,
"./playButton": 74,
"./populateModal": 75,
"./sharing/ShareEvents": 76,
"./sharing/modal": 77,
"./terms/TermsEvent": 78,
"./terms/terms": 79,
"./title/TitleEvents": 80,
"./title/tagToggle": 81,
"./title/titleBar": 82,
"./tourInteraction": 84,
"./vr/vrEvent": 85,
"./vr/vrModal": 87,
"./webvr/WebVrEvent": 88,
"./webvr/webVRgui": 89,
three: 217
}],
66: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
OPENED: "help.opened",
CLOSED: "help.closed"
})
}, {}],
67: [function (e, t, i) {
"use strict";
function n() {
p.on("click", function (e) {
T && T !== a.TRANSITIONING && (0 < window.getComputedStyle(v).getPropertyValue("opacity") && !x ? S.close() : T && T !== a.TRANSITIONING && (x = !0, setTimeout(function () {
x = !1
}, h.help.modalStayDuration), S.emit(l.OPENED), f.addClass("open " + T), p.addClass("open"), o(), r(), v.style.removeProperty ? v.style.removeProperty("display") : v.style.removeAttribute("display"), v.classList.add("fadeIn")))
}), E.on("click", function (e) {
S.close()
}), C.on("click", function (e) {
T && T !== a.TRANSITIONING && (o(), r())
}), I.on("click", function (e) {
o(), I.addClass("underline-tab"), c.fill(b, s.MORE_HELP), f.addClass("more-help")
})
}
function r() {
C.addClass("underline-tab"), c.fill(_, s.NAVIGATION, T), f.addClass(T)
}
function o() {
f.removeClass("more-help " + a.PANORAMA + " " + a.DOLLHOUSE + " " + a.FLOORPLAN + " " + a.OUTDOOR), A.forEach(function (e) {
e.classList.remove("underline-tab")
})
}
var a = e("../../enum/Viewmode"),
s = e("../../enum/HelpModalType"),
l = e("./HelpEvent"),
c = (e("../helpManager"), e("./../populateModal")),
h = e("../../settings"),
u = e("../../util/common"),
d = e("events").EventEmitter,
p = $(".footer-help").eq(0),
f = $("#help-dialog").eq(0),
g = document.querySelector("#quick-logo"),
m = document.querySelector("#loaderCoBrand"),
v = document.querySelector("#help-dialog"),
y = document.querySelector(".footer"),
A = $(".help-tabs").children().toArray(),
C = $(".navigation-tab").eq(0),
I = $(".more-help-tab").eq(0),
E = ($("#interaction-modal").eq(0).find(".interaction").toArray(), f.find(".close").eq(0)),
_ = f.find(".interactions").toArray(),
b = f.find(".ui-instructions").toArray(),
w = a.PANORAMA,
T = a.PANORAMA,
x = !1,
S = {
init: function (e, t) {
w = T = t, [v, m, g, y].forEach(function (e) {
e.classList.add(c.deviceType)
}), n()
},
close: function () {
if (f.hasClass("open") && (this.emit(l.CLOSED), p.removeClass("open"), f.removeClass("open"), v.classList.contains("fadeIn"))) {
v.classList.remove("fadeIn");
var e = T === a.TRANSITIONING ? w : T;
c.clear(_, s.NAVIGATION, e)
}
},
updateMode: function (e) {
w = T, T = e
}
};
u.extendObject(S, d.prototype), t.exports = S
}, {
"../../enum/HelpModalType": 28,
"../../enum/Viewmode": 51,
"../../settings": 166,
"../../util/common": 185,
"../helpManager": 68,
"./../populateModal": 75,
"./HelpEvent": 66,
events: 202
}],
68: [function (s, l, e) {
(function (e) {
"use strict";
var t = s("../util/browser"),
i = s("./../util/logger"),
n = s("./../settings"),
r = new i(e),
o = function () {
var t;
try {
return t = window.localStorage.getItem("visitCount") || "0", t = (parseFloat(t) + 1).toString(), window.localStorage.setItem("visitCount", t), r.debug("visitCount = " + t), t
} catch (e) {
t = "1", r.debug("couldn't set local storage")
}
}(),
a = !1;
l.exports = {
isHelpDisabled: function () {
return "0" === t.valueFromHash("help", null) || a
},
isLargeHelpEnabled: function () {
return ("1" === o || "1" === t.valueFromHash("help", null)) && !this.isHelpDisabled()
},
isSmallHelpEnabled: function () {
return "2" === t.valueFromHash("help", null) && !this.isHelpDisabled()
},
isHelpEnabled: function () {
return this.isLargeHelpEnabled() || this.isSmallHelpEnabled()
},
setAutoPlay: function (e) {
a = 0 <= n.warp.auto && 1 < e
}
}
}).call(this, "/js/gui/helpManager.js")
}, {
"../util/browser": 182,
"./../settings": 166,
"./../util/logger": 189
}],
69: [function (e, t, i) {
"use strict";
function r(e) {
M || n(e) && C.hasClass("playing") || (clearTimeout(x), T = !0, h.close(), function (e) {
!n(e) && S ? v.forEach(function (e) {
e.classList.remove("drawerOpen"), e.classList.add("duringTour")
}) : C.hasClass("open") ? v.forEach(function (e) {
e.classList.remove("duringTour"), e.classList.add("drawerOpen")
}) : P || R === g.FLOORPLAN || R === g.DOLLHOUSE || v.forEach(function (e) {
e.classList.add("fadeOut")
})
}(e), R !== g.DOLLHOUSE && R !== g.FLOORPLAN && (E.hasClass("expand") && !_.hasClass("closed") || l.valueFromHash("title", 1), C.hasClass("playing") || (y.forEach(function (e) {
e.classList.add("detectHover")
}), x = setTimeout(a, c.immersive.timeToShowAgain))))
}
function o() {
C.hasClass("playing") || (clearTimeout(x), x = setTimeout(a, c.immersive.timeToShowAgain))
}
function a() {
clearTimeout(x), T = !1, m.forEach(function (e) {
e.classList.remove("drawerOpen")
}), S || v.forEach(function (e) {
e.classList.remove("duringTour")
}), y.forEach(function (e) {
e.classList.remove("detectHover")
})
}
function s() {
T ? a() : r(), M = !0, setTimeout(function () {
M = !1
}, c.immersive.uiStayDuration)
}
function n(e) {
return "mouse" === e || "touch" === e || "key" === e || "gui" === e
}
var l = e("../util/browser"),
c = e("../settings"),
h = e("./help/help"),
u = e("../enum/tagEvents"),
d = e("../enum/ControlEvents"),
p = e("../enum/PlayerEvents"),
f = e("../enum/DirectorEvents"),
g = (p = e("../enum/PlayerEvents"), e("../enum/Viewmode")),
m = $(".pinTop.left, .pinBottom-container, #drawer-container, #drawer, .footer").toArray(),
v = $(".pinBottom-container, #drawer-container, .footer").toArray(),
y = $("#hover-bottom, #hover-top").toArray(),
A = ($("#pullTab").eq(0), $("#playHead").eq(0), $(".pinBottom-container").eq(0)),
C = $("#drawer").eq(0),
I = $("#drawer-container").eq(0),
E = $("#meta-info").eq(0),
_ = $(".pinTop.left").eq(0),
b = $("#player").eq(0),
w = document.getElementById("pullTab"),
T = !1,
x = null,
S = !1,
M = !1,
R = null,
P = !1;
t.exports.init = function (e, t, i, n) {
(function (t, i, e, n) {
[g.PANORAMA, g.DOLLHOUSE, g.FLOORPLAN].forEach(function (e) {
t.controls[e].on(d.Move, r), t.controls[e].on(d.LongTap, s)
}), b.on("mousewheel DOMMouseScroll", r), e.on(u.TagActivated, r), e.on(u.TagNavigation, r), i.on(p.FlyingEnded, o), i.on(p.ModeChanging, function (e, t) {
P = t !== g.PANORAMA && e !== g.PANORAMA
}), i.on(p.ModeChanged, function (e, t) {
R = i.mode, t !== g.TRANSITIONING ? a() : r("modeChange")
}), n.on(f.TourStart, function () {
S = !0, r()
}), n.on(f.TourEnd, function () {
S = !1, a()
}), n.on(f.ActionInterrupted, function () {
S = !1
}), w.addEventListener("touchend", function () {
$("#pullTab").hasClass("opened") && !S && a()
}, !0)
})(e, t, i, n), l.isMobile() ? (y.forEach(function (e) {
e.classList.add("mobile")
}), A.click(a)) : (y.forEach(function (e) {
e.addEventListener("mouseleave", function () {
!b.is(":hover") && y[0].classList.contains("detectHover") && a()
}, !0)
}), b.mouseleave(function () {
y[0].classList.contains("detectHover") && a()
})), R = t.mode
}, t.exports.hideUi = r, t.exports.resetDrawer = function () {
I.hasClass("duringTour") || (S = !1, r("gui"), a())
}
}, {
"../enum/ControlEvents": 21,
"../enum/DirectorEvents": 23,
"../enum/tagEvents": 32,
"../enum/PlayerEvents": 40,
"../enum/Viewmode": 51,
"../settings": 166,
"../util/browser": 182,
"./help/help": 67
}],
70: [function (i, n, e) {
(function (e) {
"use strict";
var t = i("./../util/logger"),
o = i("./../settings"),
a = i("./debug"),
s = i("./../util/common"),
l = (i("./gui"), new t(e));
o.console && $("body").append(''), n.exports.init = function (i, n, r) {
l.debug("konami has the modelInstance");
var t = [];
$(window).on("keydown", function (e) {
t.push(e.which), t.length > o.secretPanelWord.length && t.shift(), s.equalLists(t, o.secretPanelWord) && (l.debug("Developer mode active."), o.debug = !0)
}), $(window).on("keydown", function e(t) {
o.debug && 72 === t.which && (i && r ? (a.toggle(i, n, r), $(window).off("keydown", e)) : console.warn("sorry we're not ready yet"))
})
}
}).call(this, "/js/gui/konami.js")
}, {
"./../settings": 166,
"./../util/common": 185,
"./../util/logger": 189,
"./debug": 63,
"./gui": 65
}],
71: [function (e, t, i) {
"use strict";
function r() {
s.clear(m, l.LANDING[v]), g.removeClass("fadeIn")
}
var o = e("../settings"),
a = (e("./help/help"), e("./helpManager")),
s = e("./populateModal"),
l = e("../enum/HelpModalType"),
n = e("../enum/Viewmode"),
c = e("../enum/DirectorEvents"),
h = e("../enum/PlayerEvents"),
u = $("#quick-blackout").eq(0),
d = $("#quick-logo").eq(0),
p = $(".quick-brand").toArray(),
f = $("#loaderCoBrand").eq(0),
g = $("#interaction-modal").eq(0),
m = g.find(".interaction").toArray(),
v = ($("#model-title, .pinBottom-container, #drawer-container, #drawer, .footer").toArray(), "");
t.exports.delayLanding = function (e) {
var t = $.Deferred();
e || t.resolve();
var i = o.startupFlyinDelay;
return e === n.PANORAMA && (i += o.dollhouse.transitionTime), setTimeout(t.resolve.bind(t), i), t
}, t.exports.showMessage = function (e, t, i) {
var n = 0;
o.quickstart.enabled && (function (e) {
e && (f.addClass("quick-brand"), d.before(f), p = $(".quick-brand").toArray()), u.addClass("fadeOut"), setTimeout(function () {
p.forEach(function (e) {
e.classList.add("fadeIn")
})
}, o.quickstart.showTextDelay), setTimeout(function () {
p.forEach(function (e) {
e.classList.add("fadeOut")
})
}, o.quickstart.fadeOutDelay)
}(i), n = o.quickstart.showTextDelay + o.quickstart.fadeOutDelay),
function (e, t) {
setTimeout(function () {
if (a.isHelpEnabled()) {
if (t(), s.init(), g.addClass("fadeIn landing " + s.deviceType), a.isSmallHelpEnabled()) return void g.addClass("small");
s.fill(m, l.LANDING[v]), g.addClass(v)
}
}, e);
var i = {
pc: ["images/pc_step1.png", "images/pc_step2.png", "images/pc_step3.png"],
mobile: ["images/phone_step1.png", "images/phone_step2.png", "images/phone_step3.png"]
},
n = $(".nav-icon .icon");
/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) && n.attr("src", i.mobile[0]);
function r(e) {
e.on("click", function () {
var e = null;
if (e = "plus" == $(this).attr("data-id") ? +n.attr("data-page") + 1 : +n.attr("data-page") - 1, i.length < e || e < 1) return !1;
/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) ? n.attr({
"data-page": e,
src: i.mobile[e - 1]
}) : n.attr({
"data-page": e,
src: i.pc[e - 1]
})
})
}
r($(".next-button")), r($(".prev-button"))
}(n, function () {
e.once(h.Move, r), t.once(c.TourStart, r)
})
}, t.exports.init = function (e, t) {
v = t.mode === n.PANORAMA && t.pano && !t.pano.isAligned() ? n.OUTDOOR : t.mode
}, t.exports.dismissModal = r
}, {
"../enum/DirectorEvents": 23,
"../enum/HelpModalType": 28,
"../enum/PlayerEvents": 40,
"../enum/Viewmode": 51,
"../settings": 166,
"./help/help": 67,
"./helpManager": 68,
"./populateModal": 75
}],
72: [function (e, t, i) {
"use strict";
var n = e("./circleLoader").circleLoader;
t.exports = {
element: $("#gui-loading"),
hide: function (e) {
n.done(), this.element.fadeOut(1500, e)
},
show: function (e) {
this.element.fadeIn(500, function () {
this.element.css("display", "table"), e && e()
}.bind(this))
},
progress: function (e) {
n.set(e)
}
}
}, {
"./circleLoader": 60
}],
73: [function (e, t, i) {
"use strict";
var n = e("../settings"),
r = $("#memory-info"),
o = r.find("#memory-gpu"),
a = !1;
t.exports = {
show: function () {
n.profiling.enabled && (r.show(), a = !0)
},
hide: function () {
r.hide(), a = !1
},
toggle: function () {
a ? this.hide() : this.show()
},
update: function (e) {
n.profiling.enabled && o.text(Math.floor(e / 1e6) + "MB")
}
}
}, {
"../settings": 166
}],
74: [function (e, t, i) {
"use strict";
e("../util/browser"), e("../analytics");
e("../settings"), t.exports = {
show: function (e, t) {
$("#gui-message").fadeOut(500, function () {
t()
})
}
}
}, {
"../analytics": 4,
"../settings": 166,
"../util/browser": 182
}],
75: [function (e, t, i) {
"use strict";
function n(e, t, i, n) {
i ? this.assets[t][i][this.deviceType] : this.assets[t][this.deviceType]
}
var r = e("../util/browser"),
o = e("../localization/localize"),
a = e("../enum/HelpModalType"),
s = (e("../enum/HelpModalSize"), e("../enum/Viewmode"));
t.exports = {
init: function () {
if (!this.hasInitialized) {
this.hasInitialized = !0, this.deviceType = r.isMobile() ? "mobile" : "desktop", this.assets = {}, this.assets[a.LANDING[s.PANORAMA]] = {
desktop: {
left: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_mouse_drag_left.png",
keyboard: "images/nav_help_keyboard_left_right.png"
},
middle: {
"top-info": o.MOVE,
"big-image": "images/nav_help_mouse_click.png",
keyboard: "images/nav_help_keyboard_up_down.png"
},
right: {
"top-info": o.ZOOM,
"big-image": "images/nav_help_mouse_zoom.png",
keyboard: "images/nav_help_zoom_keys.png"
}
},
mobile: {
left: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_gesture_drag.png"
},
middle: {
"top-info": o.MOVE,
"big-image": "images/nav_help_gesture_tap.png"
},
right: {
"top-info": o.ZOOM,
"big-image": "images/nav_help_gesture_pinch.png"
}
}
}, this.assets[a.LANDING[s.OUTDOOR]] = JSON.parse(JSON.stringify(this.assets[a.LANDING[s.PANORAMA]])), this.assets[a.LANDING[s.DOLLHOUSE]] = {
desktop: {
left: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_mouse_drag_left.png",
keyboard: "images/nav_help_keyboard_left_right.png"
},
middle: {
"top-info": o.MOVE,
"big-image": "images/nav_help_mouse_position_right.png"
}
},
mobile: {
left: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_gesture_drag.png"
},
middle: {
"top-info": o.MOVE,
"big-image": "images/nav_help_gesture_position_two_finger.png"
}
}
}, this.assets[a.LANDING[s.FLOORPLAN]] = {
desktop: {
left: {
"top-info": o.MOVE,
"big-image": "images/nav_help_mouse_position_left.png"
},
middle: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_mouse_drag_right.png",
keyboard: "images/nav_help_keyboard_left_right.png"
}
},
mobile: {
left: {
"top-info": o.MOVE,
"big-image": "images/nav_help_gesture_position.png"
},
middle: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_gesture_drag_two_finger.png"
}
}
};
var e = {
"top-info": o.INSIDE,
"big-image": "images/nav_help_click_inside.png",
keyboard: "images/nav_help_inside_key.png"
};
this.assets[a.LANDING[s.OUTDOOR]].desktop.middle = e, this.assets[a.LANDING[s.DOLLHOUSE]].desktop.right = e, this.assets[a.LANDING[s.FLOORPLAN]].desktop.right = e;
var t = {
"top-info": o.INSIDE,
"big-image": "images/nav_help_tap_inside.png"
};
this.assets[a.LANDING[s.OUTDOOR]].mobile.middle = t, this.assets[a.LANDING[s.DOLLHOUSE]].mobile.right = t, this.assets[a.LANDING[s.FLOORPLAN]].mobile.right = t, this.assets[a.NAVIGATION] = {}, this.assets[a.NAVIGATION][s.PANORAMA] = {
desktop: {
left: {
"top-info": o.HELP_DESKTOP_PANORAMA_1A,
"bottom-info": o.HELP_DESKTOP_PANORAMA_1B,
"big-image": "images/nav_help_mouse_drag_left.png",
keyboard: "images/nav_help_keyboard_left_right.png"
},
middle: {
"top-info": o.HELP_DESKTOP_PANORAMA_2A,
"bottom-info": o.HELP_DESKTOP_PANORAMA_2B,
"big-image": "images/nav_help_mouse_click.png",
keyboard: "images/nav_help_keyboard_up_down.png"
},
right: {
"top-info": o.HELP_DESKTOP_PANORAMA_3A,
"bottom-info": o.HELP_DESKTOP_PANORAMA_3B,
"big-image": "images/nav_help_mouse_zoom.png",
keyboard: "images/nav_help_zoom_keys.png"
}
},
mobile: {
left: {
"top-info": o.HELP_MOBILE_PANORAMA_1,
"big-image": "images/nav_help_gesture_drag.png"
},
middle: {
"top-info": o.HELP_MOBILE_PANORAMA_2,
"big-image": "images/nav_help_gesture_tap.png"
},
right: {
"top-info": o.HELP_MOBILE_3,
"big-image": "images/nav_help_gesture_pinch.png"
}
}
}, this.assets[a.NAVIGATION][s.DOLLHOUSE] = {
desktop: {
left: {
"top-info": o.HELP_DESKTOP_DOLLHOUSE_1A,
"bottom-info": o.HELP_DESKTOP_DOLLHOUSE_1B,
"big-image": "images/nav_help_mouse_drag_left.png",
keyboard: "images/nav_help_keyboard_all.png"
},
middle: {
"top-info": o.HELP_DESKTOP_DOLLHOUSE_2A,
"big-image": "images/nav_help_mouse_position_right.png"
},
right: {
"top-info": o.HELP_DESKTOP_DOLLHOUSE_3A,
"big-image": "images/nav_help_mouse_zoom.png"
}
},
mobile: {
left: {
"top-info": o.HELP_MOBILE_DOLLHOUSE_1,
"big-image": "images/nav_help_gesture_drag.png"
},
middle: {
"top-info": o.HELP_MOBILE_DOLLHOUSE_2,
"big-image": "images/nav_help_gesture_position_two_finger.png"
},
right: {
"top-info": o.HELP_MOBILE_3,
"big-image": "images/nav_help_gesture_pinch.png"
}
}
}, this.assets[a.NAVIGATION][s.FLOORPLAN] = {
desktop: {
left: {
"top-info": o.HELP_DESKTOP_FLOORPLAN_1A,
"big-image": "images/nav_help_mouse_position_left.png"
},
middle: {
"top-info": o.HELP_DESKTOP_FLOORPLAN_2A,
"bottom-info": o.HELP_DESKTOP_FLOORPLAN_2B,
"big-image": "images/nav_help_mouse_drag_right.png",
keyboard: "images/nav_help_keyboard_left_right.png"
},
right: {
"top-info": o.HELP_DESKTOP_FLOORPLAN_3A,
"bottom-info": o.HELP_DESKTOP_FLOORPLAN_3B,
"big-image": "images/nav_help_mouse_zoom.png",
keyboard: "images/nav_help_keyboard_up_down.png"
}
},
mobile: {
left: {
"top-info": o.HELP_MOBILE_FLOORPLAN_1,
"big-image": "images/nav_help_gesture_position.png"
},
middle: {
"top-info": o.HELP_MOBILE_FLOORPLAN_2,
"big-image": "images/nav_help_gesture_drag_two_finger.png"
},
right: {
"top-info": o.HELP_MOBILE_3,
"big-image": "images/nav_help_gesture_pinch.png"
}
}
}, this.assets[a.NAVIGATION][s.OUTDOOR] = JSON.parse(JSON.stringify(this.assets[a.NAVIGATION][s.PANORAMA])), this.assets[a.NAVIGATION][s.OUTDOOR].desktop.middle = {
"top-info": o.HELP_DESKTOP_360_2A,
"bottom-info": o.HELP_DESKTOP_360_2B,
"big-image": "images/nav_help_click_inside.png",
keyboard: "images/nav_help_inside_key.png"
}, this.assets[a.NAVIGATION][s.OUTDOOR].mobile.middle = {
"top-info": o.HELP_MOBILE_360_2,
"big-image": "images/nav_help_tap_inside.png"
}, this.assets[a.MORE_HELP] = {
desktop: {
"more-help-hlr": {
"top-info": o.HELP_MORE_HLR_A,
"big-image": "images/nav_help_expand.svg",
"bottom-info": o.HELP_DESKTOP_MORE_HLR_B
},
"more-help-dollhouse": {
"top-info": o.HELP_MORE_DOLLHOUSE_A,
"big-image": "images/nav_help_dollhouse.svg",
"bottom-info": o.HELP_DESKTOP_MORE_DOLLHOUSE_B
},
"more-help-floors": {
"top-info": o.HELP_MORE_FLOORS_A,
"big-image": "images/nav_help_floor picker.svg",
"bottom-info": o.HELP_DESKTOP_MORE_FLOORS_B
},
"more-help-tag": {
"top-info": o.HELP_MORE_TAG_A,
"big-image": "images/nav_help_tag.svg",
"bottom-info": o.HELP_DESKTOP_MORE_TAG_B
},
"more-help-zoom": {
"top-info": o.HELP_MORE_ZOOM_A,
"big-image": "images/nav_help_zoom.svg",
"bottom-info": o.HELP_DESKTOP_MORE_ZOOM_B
},
"more-help-tour": {
"top-info": o.HELP_MORE_TOUR_A,
"big-image": "images/nav_help_play.png",
"bottom-info": o.HELP_DESKTOP_MORE_TOUR_B
},
"more-help-inside": {
"top-info": o.HELP_MORE_INSIDE_A,
"big-image": "images/nav_help_inside.svg",
"bottom-info": o.HELP_DESKTOP_MORE_INSIDE_B
},
"more-help-vr": {
"top-info": o.HELP_MORE_VR_A,
"big-image": "images/nav_help_vr.svg",
"bottom-info": o.HELP_DESKTOP_MORE_VR_B
},
"more-help-360": {
"top-info": o.HELP_MORE_360_A,
"big-image": "images/nav_help_360.svg",
"bottom-info": o.HELP_DESKTOP_MORE_360_B
},
"more-help-fullscreen": {
"top-info": o.HELP_MORE_FULLSCREEN_A,
"big-image": "images/nav_help_fullscreen.svg",
"bottom-info": o.HELP_DESKTOP_MORE_FULLSCREEN_B
}
},
mobile: {
"more-help-hlr": {
"top-info": o.HELP_MORE_HLR_A,
"big-image": "images/nav_help_expand.svg",
"bottom-info": o.HELP_DESKTOP_MORE_HLR_B
},
"more-help-dollhouse": {
"top-info": o.HELP_MORE_DOLLHOUSE_A,
"big-image": "images/nav_help_dollhouse.svg",
"bottom-info": o.HELP_MOBILE_MORE_DOLLHOUSE_B
},
"more-help-floors": {
"top-info": o.HELP_MORE_FLOORS_A,
"big-image": "images/nav_help_floor picker.svg",
"bottom-info": o.HELP_DESKTOP_MORE_FLOORS_B
},
"more-help-tag": {
"top-info": o.HELP_MORE_TAG_A,
"big-image": "images/nav_help_tag.svg",
"bottom-info": o.HELP_MOBILE_MORE_TAG_B
},
"more-help-tour": {
"top-info": o.HELP_MORE_TOUR_A,
"big-image": "images/nav_help_play.png",
"bottom-info": o.HELP_DESKTOP_MORE_TOUR_B
},
"more-help-inside": {
"top-info": o.HELP_MORE_INSIDE_A,
"big-image": "images/nav_help_inside.svg",
"bottom-info": o.HELP_MOBILE_MORE_INSIDE_B
},
"more-help-vr": {
"top-info": o.HELP_MORE_VR_A,
"big-image": "images/webvr.svg",
"bottom-info": o.HELP_MOBILE_MORE_VR_B
},
"more-help-360": {
"top-info": o.HELP_MORE_360_A,
"big-image": "images/nav_help_360.svg",
"bottom-info": o.HELP_MOBILE_MORE_360_B
}
}
}, this.assets[a.TOUR_INTERACTION[s.PANORAMA]] = {
desktop: {
left: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_mouse_drag_left.png",
keyboard: "images/nav_help_keyboard_left_right.png"
},
middle: {
"top-info": o.MOVE,
"big-image": "images/nav_help_mouse_click.png",
keyboard: "images/nav_help_keyboard_up_down.png"
},
right: {
"top-info": o.PLAY,
"big-image": "images/Desktop-help-play-button.svg",
keyboard: "images/Desktop-help-spacebar-2.svg"
}
},
mobile: {
left: {
"top-info": o.ROTATE,
"big-image": "images/nav_help_gesture_drag.png"
},
middle: {
"top-info": o.MOVE,
"big-image": "images/nav_help_gesture_tap.png"
},
right: {
"top-info": o.PLAY,
"big-image": "images/mobile-help-play-button.svg"
}
}
}, this.assets[a.TOUR_INTERACTION[s.OUTDOOR]] = JSON.parse(JSON.stringify(this.assets[a.TOUR_INTERACTION[s.PANORAMA]])), this.assets[a.TOUR_INTERACTION[s.OUTDOOR]].desktop.middle = this.assets[a.LANDING[s.OUTDOOR]].desktop.middle, this.assets[a.TOUR_INTERACTION[s.OUTDOOR]].mobile.middle = this.assets[a.LANDING[s.OUTDOOR]].mobile.middle, this.assets[a.TOUR_INTERACTION[s.FLOORPLAN]] = JSON.parse(JSON.stringify(this.assets[a.TOUR_INTERACTION[s.OUTDOOR]])), this.assets[a.TOUR_INTERACTION[s.FLOORPLAN]].desktop.left = this.assets[a.LANDING[s.FLOORPLAN]].desktop.left, this.assets[a.TOUR_INTERACTION[s.FLOORPLAN]].mobile.left = this.assets[a.LANDING[s.FLOORPLAN]].mobile.left
}
},
fill: function (e, t, i) {
n.call(this, e, t, i, !0)
},
clear: function (e, t, i) {
n.call(this, e, t, i, !1)
}
}
}, {
"../enum/HelpModalSize": 27,
"../enum/HelpModalType": 28,
"../enum/Viewmode": 51,
"../localization/localize": 108,
"../util/browser": 182
}],
76: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
OPENED: "share.open",
CLOSED: "share.closed",
LINK_CLICKED: "share.linked"
})
}, {}],
77: [function (e, t, i) {
"use strict";
function n(n) {
function e(e, t) {
var i = "top=" + (window.screenY + ($("#player").height() - t) / 2) + ",left=" + (window.screenX + ($("#player").width() - e) / 2) + ",width=" + e + ",height=" + t;
I.emit(l.LINK_CLICKED, {
channel: n
}), window.open(C[n], "shareWindow", i)
}
switch (n) {
case A.FACEBOOK:
e(580, 420);
break;
case A.TWITTER:
e(550, 440);
break;
case A.MAIL:
I.emit(l.LINK_CLICKED, {
channel: "email"
}), window.open(C[n], "_blank");
break;
case A.LINKEDIN:
}
}
function r(e) {
I.emit(l.LINK_CLICKED, {
channel: "copylink"
});
var t = document.createRange();
t.selectNodeContents(v);
var i = window.getSelection();
i.removeAllRanges(), i.addRange(t), document.execCommand("copy"), y.classList.remove("hidden"), v.classList.add("highlighted")
}
function o(e) {
e && (e.stopPropagation(), e.target === v) || (window.getSelection().removeAllRanges(), v.classList.remove("highlighted"), y.classList.add("hidden"))
}
var a = e("../../util/browser"),
s = e("../../localization/localize"),
l = e("./ShareEvents"),
c = e("../../util/common"),
h = e("events").EventEmitter,
u = document.getElementById("sharing"),
d = document.getElementById("share-modal"),
p = document.getElementById("share-close"),
f = document.getElementById("facebook-share"),
g = document.getElementById("twitter-share"),
m = document.getElementById("mail-share"),
v = document.getElementById("share-url-text"),
y = document.getElementById("copy-success"),
A = Object.freeze({
FACEBOOK: "facebook",
TWITTER: "twitter",
MAIL: "mail",
LINKEDIN: "linkedin"
}),
C = {};
C[A.FACEBOOK] = "http://www.facebook.com/sharer.php?u=" + encodeURIComponent(window.location.href + "&utm_source=1") + "&t=", C[A.TWITTER] = "http://twitter.com/intent/tweet?text=", C[A.MAIL] = "mailto:?subject=";
var I = {
init: function (e) {
var t = encodeURIComponent(s.SHARE_EXPLORE + e + " " + s.SHARE_AT + " ");
C[A.FACEBOOK] += t + encodeURIComponent(window.location.href + "&utm_source=1"), C[A.TWITTER] += t + encodeURIComponent(window.location.href + "&utm_source=2 " + s.SHARE_WITH + " #port"), C[A.MAIL] += encodeURIComponent(s.SHARE_EXPLORE + e + s.SHARE_3D) + "&body=" + t + encodeURIComponent(window.location.href + "&utm_source=3"), u.addEventListener("click", this.toggle.bind(this)), p.addEventListener("click", this.hide.bind(this)), v.addEventListener("click", r), d.addEventListener("click", o), f.addEventListener("click", n.bind(this, A.FACEBOOK)), g.addEventListener("click", n.bind(this, A.TWITTER)), m.addEventListener("click", n.bind(this, A.MAIL)), v.textContent = window.location.href + "&utm_source=4", d.classList.add(a.isMobile() ? "mobile" : "desktop"), u.classList.remove("hidden")
},
show: function () {
this.emit(l.OPENED), d.classList.add("fadeIn")
},
hide: function () {
d.classList.contains("fadeIn") && (this.emit(l.CLOSED), document.selection && document.selection.empty(), window.getSelection().removeAllRanges(), o(), d.classList.remove("fadeIn"))
},
toggle: function () {
d.classList.contains("fadeIn") ? this.hide() : this.show()
}
};
c.extendObject(I, h.prototype), t.exports = I
}, {
"../../localization/localize": 108,
"../../util/browser": 182,
"../../util/common": 185,
"./ShareEvents": 76,
events: 202
}],
78: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
OPENED: "terms.opened",
CLOSED: "terms.closed"
})
}, {}],
79: [function (e, t, i) {
"use strict";
var n = e("./TermsEvent"),
r = e("../../localization/localize"),
o = e("../../analytics"),
a = e("../../util/ajax"),
s = e("../../util/common"),
l = e("events").EventEmitter,
c = document.getElementById("terms-modal"),
h = {
init: function () {
$(".footer-terms").on("click", function (e) {
e.preventDefault(), this.show()
}.bind(this)), $("#terms-modal .close").on("click", this.hide.bind(this))
},
show: function () {
this.emit(n.OPENED), a.get("static/" + r.TERMS_TEXT_FILE).done(function (e) {
var t = $("#terms-text").html(e);
o.track("showcase_gui", {
gui_action: "click_terms_button",
interaction_source: "gui"
}), t.find("a").attr("target", "_blank")
}).fail(function () {
$("#terms-text").html("
" + r.TERMS_OF_USE + "
" + r.TERMS_FAIL)
}), c.classList.add("fadeIn")
},
hide: function (e) {
e && e.preventDefault(), c.classList.contains("fadeIn") && this.emit(n.CLOSED), c.classList.remove("fadeIn")
}
};
s.extendObject(h, l.prototype), t.exports = h
}, {
"../../analytics": 4,
"../../localization/localize": 108,
"../../util/ajax": 181,
"../../util/common": 185,
"./TermsEvent": 78,
events: 202
}],
80: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
OPEN_INFO: "title.open.info",
CLOSE_INFO: "title.close.info",
SHOW_INFO: "title.show.info",
HIDE_INFO: "title.hide.info",
LINK_CLICKED: "title.link.click",
CONTACT_LINK_CLICKED: "title.contact.click",
ORIGIN_LINK_CLICKED: "title.origin.click"
})
}, {}],
81: [function (e, t, i) {
"use strict";
var o = e("../../settings");
t.exports.init = function (e, t) {
o.tags.enabled && 0 !== Object.keys(e.tags).length && function (t, i) {
function e(e) {
t.shouldShowtags = "show" === this.value, t.shouldShowtags ? i.showAlltags(o.tags.startup.fadeInDuration) : i.hideAlltags(o.tags.startup.fadeInDuration)
}
document.getElementById("tag-toggles").classList.remove("hidden"), document.getElementById("radio-tag-show").checked = !0;
for (var n = document.getElementById("tag-inputs").querySelectorAll("input"), r = 0; r < n.length; r++) n[r].addEventListener("change", e)
}(e, t)
}
}, {
"../../settings": 166
}],
82: [function (S, M, e) {
(function (e) {
"use strict";
function i(e) {
return !(!e || l.inIframe() && document.referrer === e || (E.classList.remove("hidden"), _.innerHTML = r.WEBVR_LEARN_MORE + ": ", _.appendChild(function (e) {
var t = document.createElement("a");
return t.id = "url", t.target = "_blank", t.href = e, t.innerText = e, t.addEventListener("click", x.emit.bind(x, a.ORIGIN_LINK_CLICKED)), t
}(e)), b.forEach(function (e) {
e.classList.add("share-link")
}), 0))
}
function s(e, t) {
var i = e,
n = t;
return function (e, t) {
i.push(t || n, e)
}
}
var l = S("../../util/browser"),
t = S("../../util/common"),
n = S("../../util/logger"),
r = S("../../localization/localize"),
o = S("./titleBarSettings"),
c = S("../../settings"),
a = S("./TitleEvents"),
h = S("events").EventEmitter,
u = new n(e),
d = document.querySelector(".pinTop.left"),
p = document.getElementsByClassName("title-container")[0],
f = document.getElementById("title-toggle").querySelector("i"),
g = document.getElementById("meta-info-wrapper"),
m = document.getElementById("meta-info"),
v = document.getElementById("meta-description"),
y = document.getElementsByClassName("contact-info")[0],
A = document.getElementById("contact-data"),
C = document.getElementById("addressTxt"),
I = document.getElementById("tag-toggles"),
E = document.getElementById("share-origin"),
_ = document.getElementById("share-link-wrapper"),
b = [m, g, p],
w = !1,
T = !1,
x = {
populate: function (e) {
if (function (e, t) {
return e && l.valueFromHash("title", 1) && 2 !== l.valueFromHash("mls", 0) ? (document.getElementsByClassName("titleText")[0].innerText = e, (g_weixinObj.title = e).length > o.minTooltipCharacters && p.parentElement.setAttribute("data-original-title", e), t && 1 !== c.specialEdition && c.brand && !c.mls ? document.getElementById("cobrandTitle").innerText = t : (document.getElementsByClassName("co-brand")[0].classList.add("hidden"), document.getElementById("gui-name").classList.add("noCoBrand"), document.getElementById("cobrandTitle").classList.add("hidden")), !0) : (document.getElementById("model-title").classList.add("hidden"), !1)
}(e.name, e.coBrand)) {
if (function (e) {
e ? (w = !0, v.innerHTML = e) : v.classList.add("hidden")
}(e.description), function (e, t, i, n) {
if ((e || t || i) && c.brand && !l.valueFromHash("mls", !1)) {
w = !0;
var r = [],
o = s(r, " ");
if (e && o('' + e + ""), t) {
var a = n || t;
o(l.isMobile() ? '' + a + "" : "" + a + "")
}
i && o('' + i + ""), r[0] = "", A.innerHTML = r.join("")
} else y.classList.add("hidden")
}(e.contactName, e.phone, e.email, e.formatted_contact_phone), function (e) {
if ("string" == typeof e) try {
e = JSON.parse(e)
} catch (e) {
return u.warn("Unable to parse address data"), C.parentElement.classList.add("hidden")
}
if (e && (e.address_1 || e.address_2 || e.city || e.state || e.zip)) {
w = !0;
var t = [],
i = s(t, " ");
e.address_1 && i(e.address_1), e.address_2 && i(e.address_2), e.city && i(e.city, ", "), e.state && i(e.state, ", "), e.zip && i(e.zip, e.state ? " " : ", "), t[0] = "", C.innerText = t.join("")
} else C.parentElement.classList.add("hidden")
}(e.address), w) {
var t = document.createElement("br");
I.insertBefore(t, I.firstElementChild)
}
e.socialSharing && c.share.enabled && (T = i(e.url))
}
},
finishSetup: function (e) {
w = w || !!e, document.getElementById("title-toggle").addEventListener("click", x.toggleTitle.bind(x)), w && p.addEventListener("click", x.toggleMeta.bind(x, !1)), [].slice.call(v.querySelectorAll("a")).forEach(function (e) {
e.addEventListener("click", x.emit.bind(x, a.LINK_CLICKED))
}), [].slice.call(y.querySelectorAll("a")).forEach(function (e) {
e.addEventListener("click", x.emit.bind(x, a.CONTACT_LINK_CLICKED, {
contact_type: e.getAttribute("id")
}))
}), w || (T ? p.classList.add("share-only") : p.classList.add("no-meta"))
},
toggleMeta: function (e, t) {
var i = document.getElementById("model-title");
t && t.preventDefault();
var n = m.classList.contains("expand");
e && !n || (n ? (b.forEach(function (e) {
e.classList.remove("expand")
}), this.emit(a.CLOSE_INFO), i.classList.remove("expand")) : (b.forEach(function (e) {
e.classList.add("expand")
}), i.classList.add("expand"), this.emit(a.OPEN_INFO)))
},
setupToggling: function () {
g.style.height = m.offsetHeight + "px", m.addEventListener("transitionend", function () {
g.style.height = m.offsetHeight + "px"
})
},
toggleTitle: function (e) {
e && e.preventDefault(), d.classList.contains("closed") ? (d.classList.add("open"), f.classList.remove("icon-dpad-right"), f.classList.add("icon-dpad-left"), this.emit(a.SHOW_INFO), setTimeout(function () {
d.classList.remove("closed"), d.classList.remove("open")
}, o.removeAnimationClasses)) : (d.classList.add("closed"), f.classList.remove("icon-dpad-left"), f.classList.add("icon-dpad-right"), this.emit(a.HIDE_INFO))
}
};
t.extendObject(x, h.prototype), M.exports = x
}).call(this, "/js/gui/title/titleBar.js")
}, {
"../../localization/localize": 108,
"../../settings": 166,
"../../util/browser": 182,
"../../util/common": 185,
"../../util/logger": 189,
"./TitleEvents": 80,
"./titleBarSettings": 83,
events: 202
}],
83: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
minTooltipCharacters: 19,
removeAnimationClasses: 500
})
}, {}],
84: [function (e, t, i) {
"use strict";
function n() {
v.playTour(), y && clearTimeout(y), c(), E.removeClass("fadeIn")
}
function r() {
A.classList.contains("playing") && (v.stopTour(), E.addClass("fadeIn"), setTimeout(function () {
E.removeClass("fadeIn")
}, h.tourInteraction.showPauseButton), M || (clearTimeout(y), y = setTimeout(s, h.tourInteraction.showModal)), setTimeout(function () {
A.classList.remove("playing")
}, h.tourInteraction.allowNextClick))
}
function o() {
v.tourInProgress && (v.stopTour(), v.endTourProgress(), A.classList.remove("playing"))
}
function a() {
_.is(":visible") ? n() : r()
}
function s() {
if (!h.tourInteraction.disabled) {
T.removeClass("small landing " + d.FLOORPLAN + " " + d.OUTDOOR + " " + d.PANORAMA), T.addClass("fadeIn tour " + p.deviceType);
var e, t = h.tourInteraction.smallModal ? m.SMALL : m.LARGE;
if (!h.tourInteraction.smallModal) e = v.player.mode === d.PANORAMA && !v.player.currentPano.isAligned() || v.player.mode === d.DOLLHOUSE ? d.OUTDOOR : v.player.mode === d.FLOORPLAN ? d.FLOORPLAN : d.PANORAMA, p.fill(x, g.TOUR_INTERACTION[e]), T.addClass(e);
T.addClass(t)
}
}
function l(e, t) {
if (t) {
var i = "keydown" === t.type,
n = t.which === u.SPACE || v.tourIsPlaying;
i && n || e || (M = !0), v.atEndOfTour() && c(), !v.tourIsPlaying && v.tourInProgress && (E.removeClass("fadeIn"), c(), t.which !== u.SPACE && o()), i && n && a()
}
}
function c() {
T.removeClass("fadeIn")
}
var h = (e("../util/browser"), e("../settings")),
u = e("../enum/Keys"),
d = e("../enum/Viewmode"),
p = (e("./helpManager"), e("./populateModal")),
f = e("../enum/DirectorEvents"),
g = e("../enum/HelpModalType"),
m = e("../enum/HelpModalSize"),
v = null,
y = null,
A = document.getElementById("pause-overlay"),
C = document.getElementById("player"),
I = document.getElementById("gui"),
E = $("#pause-icon").eq(0),
_ = $("#play").eq(0),
b = $("#playHead").eq(0),
w = $(".rightViewContainer, #previous, #next, #gui-modes-inside, #gui-modes-outside, #gui-modes-dollhouse, #gui-modes-floorplan").toArray(),
T = $("#interaction-modal").eq(0),
x = $("#interaction-modal .interaction").toArray(),
S = ["touchstart", "mousedown", "pointerdown"],
M = !1;
t.exports.init = function (e) {
v = e, S.forEach(function (t) {
C.addEventListener(t, l.bind(this, !1), !0), I.addEventListener(t, l.bind(this, !0), !0), A.addEventListener(t, r, !0), w.forEach(function (e) {
e.addEventListener(t, o, !0)
}), $("#drawer img").on(t, o)
}), document.addEventListener("keydown", l.bind(this, !1), !0), v.on(f.TourStart, function () {
A.classList.add("playing")
})
}, t.exports.play = n, t.exports.pause = r, t.exports.pauseWithoutCTA = o, t.exports.togglePlay = a, t.exports.stopTour = function () {
b.hasClass("playing") && (clearTimeout(y), v.atEndOfTour() ? (A.classList.remove("playing"), s()) : E.removeClass("fadeIn"))
}, t.exports.dismissModal = c
}, {
"../enum/DirectorEvents": 23,
"../enum/HelpModalSize": 27,
"../enum/HelpModalType": 28,
"../enum/Keys": 30,
"../enum/Viewmode": 51,
"../settings": 166,
"../util/browser": 182,
"./helpManager": 68,
"./populateModal": 75
}],
85: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
OPENED: "vr.modal.opened",
LAUNCH: "vr.modal.launch",
CLOSED: "vr.modal.closed",
NEXT: "vr.modal.next",
PREV: "vr.modal.prev",
STORE: "vr.modal.store",
falseICECHOSEN: "vr.modal.device"
})
}, {}],
86: [function (e, t, i) {
"use strict";
var h = e("../../util/browser"),
u = e("../../enum/VRApps"),
n = e("../../enum/VRPlatforms"),
d = e("../../util/ajax"),
p = e("../../settings"),
r = {};
for (var o in r[u.CardboardAndroid] = "https://play.google.com/store/apps/details?id=com.port.mpvrcardboard&redirect_uri=", r[u.CardboardIOS] = "https://itunes.apple.com/us/app/port-vr/id1168808473&redirect_uri=", r[u.GearVR] = "https://www.oculus.com/experiences/gear-vr/811670972252145/?redirect_uri=", u) {
var a = u[o];
r[a] += encodeURIComponent(document.referrer + "&display=" + a)
}
var s, f = {},
g = (-1 === (s = window.location.host).indexOf(".port.com") && -1 === s.indexOf("localhost") && (s = "my.port.com"), "https://" + s);
t.exports.init = function (e, t, o) {
function a(e, t, i, n) {
function r() {
return "&utm_medium=" + (h.inIframe() ? "embed" : "direct") + ("&utm_source=" + s) + ("&utm_showcase_session_id=" + o)
}
return h.valueFromHash("vrcoll", !1) ? l + "&sids=" + t + "&lsid=" + t + "&ln=" + encodeURIComponent(i) + "&ld=" + encodeURIComponent(n) + "&display=" + e + r() : c + "&m=" + t + "&display=" + e + r()
}
var s = h.inIframe() ? encodeURIComponent(document.referrer) : encodeURIComponent(window.location.href),
l = g + "/vr/dlist/?ret=" + s,
c = g + "/vr/show/?ret=" + s;
switch (e) {
case n.IOS:
! function (t, e, i, n) {
var r = a(t, e, i, n),
o = {
responseType: "json",
data: {
branch_key: p.appConfig.branch_key,
data: {
m: e,
full_url: r,
$desktop_url: "",
$og_app_id: "331853976762864119",
$og_title: i,
$og_description: n,
$og_image_url: location.origin + "/api/v1/player/models/" + e + "/thumb",
$canonical_url: window.location.href
}
}
};
d.post("https://api.branch.io/v1/url", o).done(function (e) {
f[t] = e.url
}).fail(function (e) {
f[t] = e
}.bind(this, r))
}(u.CardboardIOS, t.sid, t.name, t.summary);
break;
default:
! function (e, t, i) {
for (var n in u) {
var r = u[n],
o = a(r, e, t, i);
f[r] = o
}
}(t.sid, t.name, t.summary)
}
}, t.exports.launch = function (e) {
var t = f[e];
window.open(t, "_blank")
}, t.exports.launchStore = function (e) {
var t = r[e];
window.open(t, "_blank")
}
}, {
"../../enum/VRApps": 46,
"../../enum/VRPlatforms": 49,
"../../settings": 166,
"../../util/ajax": 181,
"../../util/browser": 182
}],
87: [function (e, t, i) {
"use strict";
function c(e) {
var t;
switch (e) {
case y.IOS:
return 9 < (t = g.iosVersion()).major || 9 === t.major && 1 <= t.minor;
case y.Android:
return 4 < (t = g.androidVersion()).major || 4 === t.major && 4 < t.minor || 4 === t.major && 4 === t.minor && 4 <= t.patch
}
return !1
}
function h(e) {
switch (e) {
case y.Android:
x.filter(".cardboard").off().on("click", q.cardboardAndroid), x.filter(".gearvr").off().on("click", q.gear), n(k, U, "logo-button", "same-line");
break;
case y.UnsupportedAndroid:
n("", H, "", "");
break;
case y.IOS:
x.filter(".cardboard").off().on("click", q.cardboardIOS), n(k, "", "logo-button", "");
break;
case y.Desktop:
x.filter(".cardboard").off().on("click", r.bind(this, null, N, B)), x.filter(".gearvr").off().on("click", r.bind(this, U, F, null)), n(k, U, "logo-button", "same-line"), Q.cardboard()
}
}
function u(e) {
$(".p1, .p2, .p3").hide(), l.insertAfter(T), w.removeClass("front-page"), w.removeClass("details-page"), w.removeClass("lastPage"), x.removeClass("logo-button"), x.removeClass("same-line"), T.removeClass("headsetOptions"), S.attr("src", ""), S.filter(".second").removeClass("gear"), S.css("display", "inline-block"), S.off(), M.filter(".second").css("display", ""), O.css("display", "none"), $(".p" + (e + 1) + _).show(), S.filter(".third").insertBefore(M.filter(".third"))
}
function n(e, t, i, n) {
w.addClass("front-page"), S.filter(".first").attr("src", e), S.filter(".second").attr("src", t), x.filter(".first").addClass(i), x.filter(".second").addClass(i), x.addClass(n), ".show-desktop" === _ && T.insertAfter(l)
}
function r(e, t, i) {
T.addClass("headsetOptions"), x.off(), S.filter(".second").attr("src", t), O.css("display", "block"), M.filter(".second").css("display", "none"), O.on("click", function () {
u(b.Title), h(y.Desktop)
}), e && (X.emit(C.falseICECHOSEN, {
name: v.GearVR
}), S.filter(".first").attr("src", e), S.filter(".second").addClass("gear"), S.filter(".second").on("click", m.launchStore.bind(this, v.GearVR)), Q.gearvr()), i && (X.emit(C.falseICECHOSEN, {
name: v.Cardboard
}), S.filter(".third").attr("src", i), S.filter(".third").show(), S.filter(".third").insertAfter(S.filter(".second")), S.filter(".third").addClass("link"), S.filter(".second").addClass("link"), S.filter(".second").on("click", m.launchStore.bind(this, v.CardboardIOS)), S.filter(".third").on("click", m.launchStore.bind(this, v.CardboardAndroid)), Q.cardboard())
}
function d(e, t) {
switch (t) {
case y.IOS:
j = W, Y = G;
break;
case y.Desktop:
e === b.Cardboard ? (j = N, Y = B, S.filter(".second").on("click", m.launchStore.bind(this, v.CardboardIOS)), S.filter(".third").on("click", m.launchStore.bind(this, v.CardboardAndroid))) : (j = F, S.filter(".second").on("click", m.launchStore.bind(this, v.GearVR)), Y = "");
break;
default:
Y = e === b.Cardboard ? (j = H, G) : (j = V, z)
}
}
function p(e, t, i) {
w.find(".inner").addClass("details-page"), w.addClass("details-page"), S.filter(".first").attr("src", e), S.filter(".second").attr("src", t), S.filter(".third").attr("src", i)
}
function f() {
var e = 1 < g.aspectRatio() && g.isMobile();
w.toggleClass("landscape", e).toggleClass("portrait", !e), w.toggleClass("tiny", $("#player").height() <= o.narrowLandscapeHeight), w.toggleClass("tinier", $("#player").height() <= o.reallyNarrowLandscapeHeight)
}
var g = e("../../util/browser"),
m = e("./vrLink"),
v = e("../../enum/VRApps"),
y = e("../../enum/VRPlatforms"),
A = e("../../enum/VRPages"),
C = e("./vrEvent"),
o = (e("../../settings"), e("../../constants")),
I = e("../../localization/localize"),
a = e("../../util/common"),
s = e("events").EventEmitter,
E = 0,
_ = null,
b = A.standard,
w = $(".vr-popup"),
l = w.find(".vr-popup-body"),
T = w.find(".vr-images"),
x = w.find(".img-container"),
S = w.find(".vr-sm-image"),
M = x.find(".vr-img-caption"),
R = $(".vr-buttons").find(".prev-button"),
P = $(".vr-buttons").find(".next-button"),
O = T.find(".front-close"),
L = $(".vr-page"),
D = w.find("img"),
N = "images/apple-store.png",
F = "images/badge-oculus.png",
B = "images/badge-cardboard.png",
V = "images/logo-samsung.png",
k = "images/headset-cardboard.png",
U = "images/headset-gearvr.png",
H = "images/ico-android-robot.png",
z = "images/ico-gearvr.png",
G = "images/ico-vr.png",
W = "images/apple-logo-white.svg",
j = null,
Y = null,
q = {},
X = {
init: function (e, t) {
function i(e) {
X.emit(C.STORE, {
type: e
}), m.launchStore(e)
}
function n(e) {
switch (e !== b.pageCount && (u(e), L.text(e + 1 + " / " + b.pageCount)), e) {
case b.Title:
R.css("display", "none"), P.text(a[e]), h(r);
break;
case b.Cardboard:
R.css("display", "block"), P.text(a[e]), x.filter(".cardboard").off(), x.filter(".gearvr").off(), d(e, r), p(k, j, Y);
break;
case b.Gear:
P.text(a[e]), d(e, r), w.addClass("lastPage"), p(U, j, Y);
break;
case b.pageCount:
w.removeClass("fadeIn"), X.emit(C.CLOSED)
}
D.filter("[src='']").hide()
}
var r = g.detectAndroid() ? g.detectAndroidMobile() && c(y.Android) ? (w.addClass("supported"), _ = ".show-supported", y.Android) : (w.addClass("unsupported"), _ = ".show-unsupported", y.UnsupportedAndroid) : g.detectIPhone() || g.detectIPod() ? (w.addClass("ios"), _ = ".show-ios", b = A.ios, y.IOS) : (w.addClass("desktop"), _ = ".show-desktop", y.Desktop);
function o(e) {
X.emit(C.LAUNCH, {
vr_platform: r,
vr_app: e
}), m.launch(e)
}
m.init(r, e, t), r !== y.Desktop && w.addClass("mobile"), q.cardboardAndroid = o.bind(this, v.CardboardAndroid), q.gear = o.bind(this, v.GearVR), q.cardboardIOS = o.bind(this, v.CardboardIOS), f(), $(".show-supported, .show-unsupported, .show-ios, .show-desktop").hide(), $(_).show();
var a = [I.VR_LEARN_MORE_CAPS, I.VR_NEXT_CAPS, I.VR_GOT_IT_CAPS],
s = ["vr_modal_learn_more", "vr_modal_next", "vr_modal_done"];
r === y.IOS && (a.splice(1, 1), s.splice(1, 1)), $("#vr").on("click", function (e) {
e.preventDefault(), window.vrEnabled || (window.vrEnabled = !0, this.classList.add("active"), $("#gui div").not("#vrOff").addClass("vrHide"), $("#vrOffImg").css({
display: "inline-block"
}))
}), $("#vrOff").on("click", function () {
window.vrEnabled = !1, $("#gui div").not("#vrOff").removeClass("vrHide"), $("#vrOffImg").css({
display: "none"
}), $("#player canvas").css({
width: "",
height: ""
}), $("#vr").removeClass("active")
});
var l = "https://my.port.com/vr/show/?m=" + e.sid;
r === y.IOS ? $(".cardboardLink").on("click", i.bind(this, v.CardboardIOS)) : $(".cardboardLink").on("click", i.bind(this, v.CardboardAndroid)), $(".gearLink").on("click", i.bind(this, v.GearVR)), $("span.modelLink").text(l), R.on("click", function (e) {
X.emit(C.PREV), n(--E)
}), P.on("click", function (e) {
P.text(), X.emit(C.NEXT, {
nextAction: s[E]
}), n(++E)
}), w.find(".close").on("click", X.dismiss)
},
dismiss: function () {
w.hasClass("fadeIn") && (w.removeClass("fadeIn"), X.emit(C.CLOSED))
},
isDeviceSupported: c
};
a.extendObject(X, s.prototype), $(window).resize(f);
var Z, K, Q = (Z = M.filter(".first").find(".cardboard"), K = M.filter(".first").find(".gearvr"), {
cardboard: function () {
K.addClass("hidden"), Z.removeClass("hidden")
},
gearvr: function () {
Z.addClass("hidden"), K.removeClass("hidden")
}
});
t.exports = X
}, {
"../../constants": 8,
"../../enum/VRApps": 46,
"../../enum/VRPages": 48,
"../../enum/VRPlatforms": 49,
"../../localization/localize": 108,
"../../settings": 166,
"../../util/browser": 182,
"../../util/common": 185,
"./vrEvent": 85,
"./vrLink": 86,
events: 202
}],
88: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
OPENED: "webvr.modal.opened",
SHOW_TERMS: "webvr.footer.show.terms"
})
}, {}],
89: [function (B, V, e) {
(function (e) {
"use strict";
function a() {
function t() {
p.isPresenting || (r.info("exiting webVR"), c("webvr_exit_app"), -1 === window.location.search.indexOf("&qs=1") ? window.location = window.location + "&qs=1" : window.location = window.location, window.removeEventListener("vrdisplaypresentchange", t))
}
r.info("Headset mounted"), u.suspend();
var e = document.createElement("canvas");
for (e.getContext("webgl"), e.className = "webvr-canvas", document.bgColor = "#000", document.body.style.backgroundColor = "#000"; document.body.firstChild;) document.body.removeChild(document.body.firstChild);
document.body.appendChild(e), c("webvr_enter_app"), p.requestPresent([{
source: e,
predistorted: !0
}]).catch(function (e) {
r.error("Failed to present: " + e), c("webvr_exit_calibrate"), t()
}), d.then(function () {
window.dispatchEvent(new Event("vrapp-start"))
}), window.addEventListener("vrdisplaypresentchange", t)
}
function s() {
c("webvr_modal_close"), _.find(".enter-button").off("click", a), E.fadeOut(g.guiAnimationSpeed, function () {
_.toggleClass("hidden", !1), b.toggleClass("hidden", !0), f.exitFullscreen()
}), I.fadeIn(g.guiAnimationSpeed)
}
function t() {
M.toggleClass("hidden", !0), S.toggleClass("hidden", !1)
}
function l() {
_.toggleClass("hidden"), b.toggleClass("hidden")
}
function c(e) {
var t = f.isLandscape() ? "landscape" : "portrait";
i.trackAlways("showcase_gui", {
gui_action: e,
orientation: t
})
}
function h() {
var e = f.isLandscape();
E.toggleClass("landscape", e).toggleClass("portrait", !e)
}
var u, d, p, f = B("../../util/browser"),
g = B("../../settings"),
m = (B("./../gui"), B("../../enum/VRPlatforms")),
v = B("../../enum/VRApps"),
y = B("./../vr/vrLink"),
A = B("./WebVrEvent"),
i = B("../../analytics"),
C = (B("../../constants"), B("../../localization/localize")),
n = B("../../util/common"),
r = new(B("../../util/logger"))(e),
o = B("events").EventEmitter,
I = $("#gui"),
E = $(".webvr-popup"),
_ = $(".webvr-popup .page.p1"),
b = $(".webvr-popup .page.p2"),
w = E.find(".image"),
T = $(".webvr-popup .detail.headset"),
x = $(".webvr-popup .detail.phone"),
S = $(".webvr-popup .tab-content.webvr"),
M = $(".webvr-popup .tab-content.native"),
R = "images/headset-cardboard.png",
P = "https://madeby.google.com/vr/",
O = "webvr_daydream_link",
L = P,
D = O,
N = {
init: function (e, t, i, n) {
function r(e) {
e.preventDefault(), o(e.currentTarget.id)
}
function o(i) {
F[i](), Object.keys(F).map(function (e, t) {
$("#" + e).toggleClass("tabs-underlined", e === i)
})
}
p = i, u = t, y.init(m.Android, e, n), h(), new RegExp("daydream", "i").test(p.displayName) ? (o("tabdaydream"), w.filter(".device-headset-side").attr("src", "images/device-daydream-side.png"), _.find(".title").text(C.localizeText("WEBVR_FOR_DAYDREAM"))) : (o("tabcardboard"), w.filter(".device-headset-side").attr("src", R), _.find(".title").text(C.localizeText("WEBVR_FOR_CARDBOARD"))), $("#vr").on("click", function (e) {
e.preventDefault(), c("click_webvr_button"), E.is(":hidden") && (N.emit(A.OPENED), I.fadeOut(g.guiAnimationSpeed), E.fadeIn(g.guiAnimationSpeed), function () {
if (!d) {
var n = "https://static.port.com/webvr/" + (f.valueFromHash("webvr") || g.appConfig.webvr_version) + "/js/main.js";
d = new Promise(function (e, t) {
var i = document.createElement("script");
i.type = "text/javascript", i.src = n, i.onload = e, document.head.appendChild(i)
})
}
_.find(".enter-button").on("click", a)
}())
}), $(".webvr-popup .close").on("click", function (e) {
e.preventDefault(), _.hasClass("hidden") ? (c("webvr_help_close"), l()) : s()
}), $("#tabcardboard").on("click", r), $("#tabdaydream").on("click", r), $("#tabnative").on("click", r), $(".webvr-popup .open-with-app").on("click", function (e) {
e.preventDefault(), c("webvr_learn_more"), o("tabnative"), l()
}), $(".webvr-popup .help").on("click", function (e) {
e.preventDefault(), c(_.hasClass("hidden") ? "webvr_help_close" : "webvr_help_show"), l()
}), $(".webvr-popup .terms").on("click", function (e) {
e.preventDefault(), c("webvr_click_terms"), s(), N.emit(A.SHOW_TERMS)
}), T.on("click", function (e) {
e.preventDefault(), c(D), window.open(L, "_blank")
}), x.on("click", function (e) {
e.preventDefault(), c("webvr_phone_link"), window.open("https://vr.google.com/daydream/phones/", "_blank")
}), $(".webvr-popup .badge-cardboard").on("click", function (e) {
e.preventDefault(), c("webvr_cardboard_link"), y.launch(v.CardboardAndroid)
}), $(".webvr-popup .badge-oculus").on("click", function (e) {
e.preventDefault(), c("webvr_oculus_link"), y.launch(v.GearVR)
})
}
},
F = {
tabcardboard: function () {
w.filter(".device-headset").attr("src", R), w.filter(".device-phone").attr("src", "images/ico-android-robot.png"), L = "https://vr.google.com/cardboard/get-cardboard/", D = "webvr_cardboard_link", T.text(C.localizeText("VR_GOOGLE_CARDBOARD")), x.text(C.localizeText("VR_COMPATIBLE_ANDROID_LONG")), $(".webvr-popup .detail.daydream-label").toggleClass("hidden", !0), t()
},
tabdaydream: function () {
w.filter(".device-headset").attr("src", "images/device-daydream.png"), w.filter(".device-phone").attr("src", "images/device-pixel.png"), L = P, D = O, T.text(C.localizeText("WEBVR_DAYDREAM_VIEW")), x.text(C.localizeText("VR_NEED_DAYDREAM_PHONE")), $(".webvr-popup .detail.daydream-label").toggleClass("hidden", !1), t()
},
tabnative: function () {
w.filter(".badge-cardboard").attr("src", "images/badge-cardboard.png"), w.filter(".badge-oculus").attr("src", "images/badge-oculus.png"), M.toggleClass("hidden", !1), S.toggleClass("hidden", !0)
}
};
n.extendObject(N, o.prototype), $(window).resize(h), V.exports = N
}).call(this, "/js/gui/webvr/webVRgui.js")
}, {
"../../analytics": 4,
"../../constants": 8,
"../../enum/VRApps": 46,
"../../enum/VRPlatforms": 49,
"../../localization/localize": 108,
"../../settings": 166,
"../../util/browser": 182,
"../../util/common": 185,
"../../util/logger": 189,
"./../gui": 65,
"./../vr/vrLink": 86,
"./WebVrEvent": 88,
events: 202
}],
90: [function (e, t, i) {
"use strict";
function n(e, t, i, n, r) {
this.floorId = n || 0 === n ? n : -1, this.roomId = r || "", this.labelId = e, this.position = (new o.Vector3).copy(t), this.text = i
}
var o = e("three"),
r = e("../util/browser");
n.prototype.build = function () {
var e = window.document.createElement("div");
r.isMobile() ? e.setAttribute("class", "gui-floorplan-label gui-floorplan-label-mobile") : e.setAttribute("class", "gui-floorplan-label");
var t = window.document.createElement("div");
t.setAttribute("class", "gui-floorplan-label-text");
var i = window.document.createTextNode(this.text);
t.appendChild(i), e.appendChild(t), window.document.body.appendChild(e), this.labelGui = e, this.textBlock = t, $(this.labelGui).hide();
var n = window.getComputedStyle(this.labelGui);
this.initialTransform = n.transform || n.webkitTransform
}, t.exports = n
}, {
"../util/browser": 182,
three: 217
}],
91: [function (e, t, i) {
"use strict";
function n() {
this.player = null, this.modelManager = null, this.container = null
}
var c, o, r = e("three"),
a = (e("../util/common"), e("../enum/PlayerEvents")),
s = (e("../enum/DirectorEvents"), e("../enum/ModelManagerEvents")),
l = e("../settings"),
h = e("../enum/Viewmode"),
u = (e("../enum/WarpStyle"), e("../util/transitions"), e("../util/lerp"), e("../util/browser"));
n.prototype.init = function (e, t, i) {
this.player = e, this.modelManager = t, this.container = i, this.updateModel(), this.bindEvents()
}, n.prototype.bindEvents = function () {
this.modelManager.on(s.ActiveModelChanged, this.updateModel.bind(this)), this.player.on(a.ViewChanged, this.handlePlayerViewChanged.bind(this)), this.player.on(a.ModeChanged, this.handlePlayerViewChanged.bind(this)), this.player.on(a.StartInside, this.handleStartInside.bind(this)), this.player.on(a.StartOutside, this.handleStartOutside.bind(this))
}, n.prototype.updateModel = function () {
this.model = this.modelManager.getActiveModel()
}, n.prototype.handlePlayerViewChanged = function () {
this.updateLabelVisibility(), this.updateLabelDisplay()
}, n.prototype.getLabelsForFloor = function (t, i) {
return (i = i || []).length = 0, this.model.labels.forEach(function (e) {
this.labelVisibleForFloor(e, t) && i.push(e)
}.bind(this)), i
}, n.prototype.getLabelsForCurrentFloor = function (e) {
return this.getLabelsForFloor(this.model.currentFloor.floorIndex, e)
}, n.prototype.labelVisibleForFloor = function (e, t) {
var i = u.isMobile() && this.player.getLabelScaleFactor() < l.labels.zoomHideThreshhold.mobile || !u.isMobile() && this.player.getLabelScaleFactor() < l.labels.zoomHideThreshhold.desktop;
if (!this.model.showingLabels || !e.labelGui || !i) return !1;
var n = e.floorId === this.model.floors.size() - 1;
return this.model.allFloorsVisible ? n : e.floorId === t
}, n.prototype.updateLabelVisibility = function (e) {
this.model.labels.forEach(function (e) {
this.supportedMode() && this.labelVisibleForFloor(e, this.model.currentFloor.floorIndex) ? this.showLabel(e, l.labels.fadeInDelay, l.labels.fadeInDuration) : this.hideLabel(e, l.labels.fadeOutDelay, l.labels.fadeOutDuration)
}.bind(this))
}, n.prototype.showAllLabels = function (t, i) {
this.model.labels.forEach(function (e) {
this.showLabel(e, t, i)
}.bind(this))
}, n.prototype.hideAllLabels = function (t, i) {
this.model.labels.forEach(function (e) {
this.hideLabel(e, t, i)
}.bind(this))
}, n.prototype.showLabel = function (e, t, i) {
this.model.showingLabels && (e.visible || (e.visible = !0, e.labelGui.style.display = "block", e.labelGui.style.opacity = 0, $(e.labelGui).delay(t).fadeTo(i, 1)))
}, n.prototype.hideLabel = function (e, t, i) {
e.visible && (e.visible = !1, u.isMobile() ? $(e.labelGui).hide() : $(e.labelGui).delay(t).fadeOut(i))
}, n.prototype.supportedMode = function () {
return this.player.mode === h.FLOORPLAN
}, n.prototype.updateLabelDisplay = (new r.Vector3, new r.Vector3, o = [], function () {
var e = this.player.getLabelScaleFactor(),
t = 1.2 * (1 - e) + .6,
i = u.isMobile() ? l.labels.zoomTruncateThreshhold.mobile : l.labels.zoomTruncateThreshhold.desktop;
this.getLabelsForCurrentFloor(o);
for (var n = 0; n < o.length; n++) {
var r = o[n];
this.supportedMode() && r.labelGui && (this.updateProjectedGuiElement(r.labelGui, r.textBlock, r.position, t, t), i <= e && r.text.length >= l.labels.minLengthForTruncate ? r.textBlock.innerText = r.text.substring(0, l.labels.truncateLength) + l.labels.truncateSuffix : r.textBlock.innerText = r.text)
}
}), n.prototype.updateProjectedGuiElement = (c = new r.Vector3, new r.Vector3, function (e, t, i, n, r) {
t.style.fontSize = 100 * r + "%";
var o = .5 * $("#player").width(),
a = .5 * $("#player").height();
c.copy(i), c.project(this.player.camera);
var s = c.x * o + o,
l = -c.y * a + a;
s -= e.offsetWidth / 2, l -= e.offsetHeight / 2, e.style.left = s + "px", e.style.top = l + "px"
}), n.prototype.handleStartInside = function (e) {
this.updateLabelVisibility()
}, n.prototype.handleStartOutside = function () {
this.updateLabelVisibility()
}, t.exports = n
}, {
"../enum/DirectorEvents": 23,
"../enum/ModelManagerEvents": 33,
"../enum/PlayerEvents": 40,
"../enum/Viewmode": 51,
"../enum/WarpStyle": 52,
"../settings": 166,
"../util/browser": 182,
"../util/common": 185,
"../util/lerp": 188,
"../util/transitions": 195,
three: 217
}],
92: [function (e, t, i) {
"use strict";
Array.prototype.findIndex || (Array.prototype.findIndex = function (e) {
if (null == this) throw new TypeError("Array.prototype.findIndex called on null or undefined");
if ("function" != typeof e) throw new TypeError("predicate must be a function");
for (var t, i = Object(this), n = i.length >>> 0, r = arguments[1], o = 0; o < n; o++)
if (t = i[o], e.call(r, t, o, i)) return o;
return -1
}), Array.prototype.find || Object.defineProperty(Array.prototype, "find", {
value: function (e) {
if (null == this) throw new TypeError('"this" is null or not defined');
var t = Object(this),
i = t.length >>> 0;
if ("function" != typeof e) throw new TypeError("predicate must be a function");
for (var n = arguments[1], r = 0; r < i;) {
var o = t[r];
if (e.call(n, o, r, t)) return o;
r++
}
}
})
}, {}],
93: [function (e, t, i) {
"use strict";
var n, r, o, a, s, l, c, h, u, d, p, f, g, m, v, y, A, C, I, E, _, b, w, T, x, S, M, R, P, O, L, D, N, F, B, V, k, U, H, z, G, W, j, Y, q, X, Z, K, Q, J, ee = ee || {};
function te() {
this.backgroundElement = document.createElement("div"), r.extend(this.backgroundElement.style, {
backgroundColor: "rgba(0,0,0,0.8)",
top: 0,
left: 0,
display: "none",
zIndex: "1000",
opacity: 0,
WebkitTransition: "opacity 0.2s linear"
}), n.makeFullscreen(this.backgroundElement), this.backgroundElement.style.position = "fixed", this.domElement = document.createElement("div"), r.extend(this.domElement.style, {
position: "fixed",
display: "none",
zIndex: "1001",
opacity: 0,
WebkitTransition: "-webkit-transform 0.2s ease-out, opacity 0.2s linear"
}), document.body.appendChild(this.backgroundElement), document.body.appendChild(this.domElement);
var e = this;
n.bind(this.backgroundElement, "click", function () {
e.hide()
})
}
function ie(e, t, i) {
Object.defineProperty(e, t, {
get: function () {
return "RGB" === this.__state.space || re(this, t, i), this.__state[t]
},
set: function (e) {
"RGB" !== this.__state.space && (re(this, t, i), this.__state.space = "RGB"), this.__state[t] = e
}
})
}
function ne(e, t) {
Object.defineProperty(e, t, {
get: function () {
return "HSV" === this.__state.space || oe(this), this.__state[t]
},
set: function (e) {
"HSV" !== this.__state.space && (oe(this), this.__state.space = "HSV"), this.__state[t] = e
}
})
}
function re(e, t, i) {
if ("HEX" === e.__state.space) e.__state[t] = a.component_from_hex(e.__state.hex, i);
else {
if ("HSV" !== e.__state.space) throw "Corrupted color state";
l.extend(e.__state, a.hsv_to_rgb(e.__state.h, e.__state.s, e.__state.v))
}
}
function oe(e) {
var t = a.rgb_to_hsv(e.r, e.g, e.b);
l.extend(e.__state, {
s: t.s,
v: t.v
}), l.isNaN(t.h) ? l.isUndefined(e.__state.h) && (e.__state.h = 0) : e.__state.h = t.h
}
function ae() {
if (this.__state = o.apply(this, arguments), !1 === this.__state) throw "Failed to interpret color arguments";
this.__state.a = this.__state.a || 1
}
function se(e) {
return -1 < (e = e.toString()).indexOf(".") ? e.length - e.indexOf(".") - 1 : 0
}
function le(e, t) {
this.initialValue = e[t], this.domElement = document.createElement("div"), this.object = e, this.property = t, this.__onChange = void 0, this.__onFinishChange = void 0
}(t.exports = ee).gui = ee.gui || {}, ee.utils = ee.utils || {}, ee.controllers = ee.controllers || {}, ee.dom = ee.dom || {}, ee.color = ee.color || {}, ee.utils.css = {
load: function (e, t) {
var i = (t = t || document).createElement("link");
i.type = "text/css", i.rel = "stylesheet", i.href = e, t.getElementsByTagName("head")[0].appendChild(i)
},
inject: function (e, t) {
t = t || document;
var i = document.createElement("style");
i.type = "text/css", i.innerHTML = e, t.getElementsByTagName("head")[0].appendChild(i)
}
}, ee.utils.common = (Q = Array.prototype.forEach, J = Array.prototype.slice, {
BREAK: {},
extend: function (i) {
return this.each(J.call(arguments, 1), function (e) {
for (var t in e) this.isUndefined(e[t]) || (i[t] = e[t])
}, this), i
},
defaults: function (i) {
return this.each(J.call(arguments, 1), function (e) {
for (var t in e) this.isUndefined(i[t]) && (i[t] = e[t])
}, this), i
},
compose: function () {
var i = J.call(arguments);
return function () {
for (var e = J.call(arguments), t = i.length - 1; 0 <= t; t--) e = [i[t].apply(this, e)];
return e[0]
}
},
each: function (e, t, i) {
if (e)
if (Q && e.forEach && e.forEach === Q) e.forEach(t, i);
else if (e.length === e.length + 0) {
for (var n = 0, r = e.length; n < r; n++)
if (n in e && t.call(i, e[n], n) === this.BREAK) return
} else
for (var n in e)
if (t.call(i, e[n], n) === this.BREAK) return
},
defer: function (e) {
setTimeout(e, 0)
},
toArray: function (e) {
return e.toArray ? e.toArray() : J.call(e)
},
isUndefined: function (e) {
return void 0 === e
},
isNull: function (e) {
return null === e
},
isNaN: function (e) {
return e != e
},
isArray: Array.isArray || function (e) {
return e.constructor === Array
},
isObject: function (e) {
return e === Object(e)
},
isNumber: function (e) {
return e === e + 0
},
isString: function (e) {
return e === e + ""
},
isBoolean: function (e) {
return !1 === e || !0 === e
},
isFunction: function (e) {
return "[object Function]" === Object.prototype.toString.call(e)
}
}), ee.controllers.Controller = (ee.utils.common.extend(le.prototype, {
onChange: function (e) {
return this.__onChange = e, this
},
onFinishChange: function (e) {
return this.__onFinishChange = e, this
},
setValue: function (e) {
return this.object[this.property] = e, this.__onChange && this.__onChange.call(this, e), this.updateDisplay(), this
},
getValue: function () {
return this.object[this.property]
},
updateDisplay: function () {
return this
},
isModified: function () {
return this.initialValue !== this.getValue()
}
}), le), ee.dom.dom = function (c) {
function i(e) {
if ("0" === e || c.isUndefined(e)) return 0;
var t = e.match(n);
return c.isNull(t) ? 0 : parseFloat(t[1])
}
var h = {};
c.each({
HTMLEvents: ["change"],
MouseEvents: ["click", "mousemove", "mousedown", "mouseup", "mouseover"],
KeyboardEvents: ["keydown"]
}, function (e, t) {
c.each(e, function (e) {
h[e] = t
})
});
var n = /(\d+(\.\d+)?)px/,
r = {
makeSelectable: function (e, t) {
void 0 !== e && void 0 !== e.style && (e.onselectstart = t ? function () {
return !1
} : function () {}, e.style.MozUserSelect = t ? "auto" : "none", e.style.KhtmlUserSelect = t ? "auto" : "none", e.unselectable = t ? "on" : "off")
},
makeFullscreen: function (e, t, i) {
c.isUndefined(t) && (t = !0), c.isUndefined(i) && (i = !0), e.style.position = "absolute", t && (e.style.left = 0, e.style.right = 0), i && (e.style.top = 0, e.style.bottom = 0)
},
fakeEvent: function (e, t, i, n) {
i = i || {};
var r = h[t];
if (!r) throw new Error("Event type " + t + " not supported.");
var o = document.createEvent(r);
switch (r) {
case "MouseEvents":
var a = i.x || i.clientX || 0,
s = i.y || i.clientY || 0;
o.initMouseEvent(t, i.bubbles || !1, i.cancelable || !0, window, i.clickCount || 1, 0, 0, a, s, !1, !1, !1, !1, 0, null);
break;
case "KeyboardEvents":
var l = o.initKeyboardEvent || o.initKeyEvent;
c.defaults(i, {
cancelable: !0,
ctrlKey: !1,
altKey: !1,
shiftKey: !1,
metaKey: !1,
keyCode: void 0,
charCode: void 0
}), l(t, i.bubbles || !1, i.cancelable, window, i.ctrlKey, i.altKey, i.shiftKey, i.metaKey, i.keyCode, i.charCode);
break;
default:
o.initEvent(t, i.bubbles || !1, i.cancelable || !0)
}
c.defaults(o, n), e.dispatchEvent(o)
},
bind: function (e, t, i, n) {
return n = n || !1, e.addEventListener ? e.addEventListener(t, i, n) : e.attachEvent && e.attachEvent("on" + t, i), r
},
unbind: function (e, t, i, n) {
return n = n || !1, e.removeEventListener ? e.removeEventListener(t, i, n) : e.detachEvent && e.detachEvent("on" + t, i), r
},
addClass: function (e, t) {
if (void 0 === e.className) e.className = t;
else if (e.className !== t) {
var i = e.className.split(/ +/); - 1 == i.indexOf(t) && (i.push(t), e.className = i.join(" ").replace(/^\s+/, "").replace(/\s+$/, ""))
}
return r
},
removeClass: function (e, t) {
if (t)
if (void 0 === e.className);
else if (e.className === t) e.removeAttribute("class");
else {
var i = e.className.split(/ +/),
n = i.indexOf(t); - 1 != n && (i.splice(n, 1), e.className = i.join(" "))
} else e.className = void 0;
return r
},
hasClass: function (e, t) {
return new RegExp("(?:^|\\s+)" + t + "(?:\\s+|$)").test(e.className) || !1
},
getWidth: function (e) {
var t = getComputedStyle(e);
return i(t["border-left-width"]) + i(t["border-right-width"]) + i(t["padding-left"]) + i(t["padding-right"]) + i(t.width)
},
getHeight: function (e) {
var t = getComputedStyle(e);
return i(t["border-top-width"]) + i(t["border-bottom-width"]) + i(t["padding-top"]) + i(t["padding-bottom"]) + i(t.height)
},
getOffset: function (e) {
var t = {
left: 0,
top: 0
};
if (e.offsetParent)
for (; t.left += e.offsetLeft, t.top += e.offsetTop, e = e.offsetParent;);
return t
},
isActive: function (e) {
return e === document.activeElement && (e.type || e.href)
}
};
return r
}(ee.utils.common), ee.controllers.OptionController = (q = ee.controllers.Controller, X = ee.dom.dom, Z = ee.utils.common, (K = function (e, t, i) {
K.superclass.call(this, e, t);
var n = this;
if (this.__select = document.createElement("select"), Z.isArray(i)) {
var r = {};
Z.each(i, function (e) {
r[e] = e
}), i = r
}
Z.each(i, function (e, t) {
var i = document.createElement("option");
i.innerHTML = t, i.setAttribute("value", e), n.__select.appendChild(i)
}), this.updateDisplay(), X.bind(this.__select, "change", function () {
var e = this.options[this.selectedIndex].value;
n.setValue(e)
}), this.domElement.appendChild(this.__select)
}).superclass = q, Z.extend(K.prototype, q.prototype, {
setValue: function (e) {
var t = K.superclass.prototype.setValue.call(this, e);
return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), t
},
updateDisplay: function () {
return this.__select.value = this.getValue(), K.superclass.prototype.updateDisplay.call(this)
}
}), K), ee.controllers.NumberController = (W = ee.controllers.Controller, j = ee.utils.common, (Y = function (e, t, i) {
Y.superclass.call(this, e, t), i = i || {}, this.__min = i.min, this.__max = i.max, this.__step = i.step, j.isUndefined(this.__step) ? 0 == this.initialValue ? this.__impliedStep = 1 : this.__impliedStep = Math.pow(10, Math.floor(Math.log(this.initialValue) / Math.LN10)) / 10 : this.__impliedStep = this.__step, this.__precision = se(this.__impliedStep)
}).superclass = W, j.extend(Y.prototype, W.prototype, {
setValue: function (e) {
return void 0 !== this.__min && e < this.__min ? e = this.__min : void 0 !== this.__max && e > this.__max && (e = this.__max), void 0 !== this.__step && e % this.__step != 0 && (e = Math.round(e / this.__step) * this.__step), Y.superclass.prototype.setValue.call(this, e)
},
min: function (e) {
return this.__min = e, this
},
max: function (e) {
return this.__max = e, this
},
step: function (e) {
return this.__step = e, this.__impliedStep = e, this.__precision = se(e), this
}
}), Y), ee.controllers.NumberControllerBox = (U = ee.controllers.NumberController, H = ee.dom.dom, z = ee.utils.common, (G = function (e, t, i) {
function n() {
var e = parseFloat(s.__input.value);
z.isNaN(e) || s.setValue(e)
}
function r(e) {
var t = a - e.clientY;
s.setValue(s.getValue() + t * s.__impliedStep), a = e.clientY
}
function o() {
H.unbind(window, "mousemove", r), H.unbind(window, "mouseup", o)
}
this.__truncationSuspended = !1, G.superclass.call(this, e, t, i);
var a, s = this;
this.__input = document.createElement("input"), this.__input.setAttribute("type", "text"), H.bind(this.__input, "change", n), H.bind(this.__input, "blur", function () {
n(), s.__onFinishChange && s.__onFinishChange.call(s, s.getValue())
}), H.bind(this.__input, "mousedown", function (e) {
H.bind(window, "mousemove", r), H.bind(window, "mouseup", o), a = e.clientY
}), H.bind(this.__input, "keydown", function (e) {
13 === e.keyCode && (s.__truncationSuspended = !0, this.blur(), s.__truncationSuspended = !1)
}), this.updateDisplay(), this.domElement.appendChild(this.__input)
}).superclass = U, z.extend(G.prototype, U.prototype, {
updateDisplay: function () {
return this.__input.value = this.__truncationSuspended ? this.getValue() : function (e, t) {
var i = Math.pow(10, t);
return Math.round(e * i) / i
}(this.getValue(), this.__precision), G.superclass.prototype.updateDisplay.call(this)
}
}), G), ee.controllers.NumberControllerSlider = (N = ee.controllers.NumberController, F = ee.dom.dom, B = ee.utils.css, V = ee.utils.common, (k = function (e, t, i, n, r) {
function o(e) {
e.preventDefault();
var t = F.getOffset(s.__background),
i = F.getWidth(s.__background);
return s.setValue(function (e, t, i, n, r) {
return n + (e - t) / (i - t) * (r - n)
}(e.clientX, t.left, t.left + i, s.__min, s.__max)), !1
}
function a() {
F.unbind(window, "mousemove", o), F.unbind(window, "mouseup", a), s.__onFinishChange && s.__onFinishChange.call(s, s.getValue())
}
k.superclass.call(this, e, t, {
min: i,
max: n,
step: r
});
var s = this;
this.__background = document.createElement("div"), this.__foreground = document.createElement("div"), F.bind(this.__background, "mousedown", function (e) {
F.bind(window, "mousemove", o), F.bind(window, "mouseup", a), o(e)
}), F.addClass(this.__background, "slider"), F.addClass(this.__foreground, "slider-fg"), this.updateDisplay(), this.__background.appendChild(this.__foreground), this.domElement.appendChild(this.__background)
}).superclass = N, k.useDefaultStyles = function () {
B.inject("/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\n.slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}")
}, V.extend(k.prototype, N.prototype, {
updateDisplay: function () {
var e = (this.getValue() - this.__min) / (this.__max - this.__min);
return this.__foreground.style.width = 100 * e + "%", k.superclass.prototype.updateDisplay.call(this)
}
}), k), ee.controllers.FunctionController = (P = ee.controllers.Controller, O = ee.dom.dom, L = ee.utils.common, (D = function (e, t, i) {
D.superclass.call(this, e, t);
var n = this;
this.__button = document.createElement("div"), this.__button.innerHTML = void 0 === i ? "Fire" : i, O.bind(this.__button, "click", function (e) {
return e.preventDefault(), n.fire(), !1
}), O.addClass(this.__button, "button"), this.domElement.appendChild(this.__button)
}).superclass = P, L.extend(D.prototype, P.prototype, {
fire: function () {
this.__onChange && this.__onChange.call(this), this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), this.getValue().call(this.object)
}
}), D), ee.controllers.BooleanController = (x = ee.controllers.Controller, S = ee.dom.dom, M = ee.utils.common, (R = function (e, t) {
R.superclass.call(this, e, t);
var i = this;
this.__prev = this.getValue(), this.__checkbox = document.createElement("input"), this.__checkbox.setAttribute("type", "checkbox"), S.bind(this.__checkbox, "change", function () {
i.setValue(!i.__prev)
}, !1), this.domElement.appendChild(this.__checkbox), this.updateDisplay()
}).superclass = x, M.extend(R.prototype, x.prototype, {
setValue: function (e) {
var t = R.superclass.prototype.setValue.call(this, e);
return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), this.__prev = this.getValue(), t
},
updateDisplay: function () {
return !0 === this.getValue() ? (this.__checkbox.setAttribute("checked", "checked"), this.__checkbox.checked = !0) : this.__checkbox.checked = !1, R.superclass.prototype.updateDisplay.call(this)
}
}), R), ee.color.toString = (T = ee.utils.common, function (e) {
if (1 == e.a || T.isUndefined(e.a)) {
for (var t = e.hex.toString(16); t.length < 6;) t = "0" + t;
return "#" + t
}
return "rgba(" + Math.round(e.r) + "," + Math.round(e.g) + "," + Math.round(e.b) + "," + e.a + ")"
}), ee.color.interpret = (I = ee.color.toString, E = ee.utils.common, w = [{
litmus: E.isString,
conversions: {
THREE_CHAR_HEX: {
read: function (e) {
var t = e.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);
return null !== t && {
space: "HEX",
hex: parseInt("0x" + t[1].toString() + t[1].toString() + t[2].toString() + t[2].toString() + t[3].toString() + t[3].toString())
}
},
write: I
},
SIX_CHAR_HEX: {
read: function (e) {
var t = e.match(/^#([A-F0-9]{6})$/i);
return null !== t && {
space: "HEX",
hex: parseInt("0x" + t[1].toString())
}
},
write: I
},
CSS_RGB: {
read: function (e) {
var t = e.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);
return null !== t && {
space: "RGB",
r: parseFloat(t[1]),
g: parseFloat(t[2]),
b: parseFloat(t[3])
}
},
write: I
},
CSS_RGBA: {
read: function (e) {
var t = e.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);
return null !== t && {
space: "RGB",
r: parseFloat(t[1]),
g: parseFloat(t[2]),
b: parseFloat(t[3]),
a: parseFloat(t[4])
}
},
write: I
}
}
}, {
litmus: E.isNumber,
conversions: {
HEX: {
read: function (e) {
return {
space: "HEX",
hex: e,
conversionName: "HEX"
}
},
write: function (e) {
return e.hex
}
}
}
}, {
litmus: E.isArray,
conversions: {
RGB_ARRAY: {
read: function (e) {
return 3 == e.length && {
space: "RGB",
r: e[0],
g: e[1],
b: e[2]
}
},
write: function (e) {
return [e.r, e.g, e.b]
}
},
RGBA_ARRAY: {
read: function (e) {
return 4 == e.length && {
space: "RGB",
r: e[0],
g: e[1],
b: e[2],
a: e[3]
}
},
write: function (e) {
return [e.r, e.g, e.b, e.a]
}
}
}
}, {
litmus: E.isObject,
conversions: {
RGBA_OBJ: {
read: function (e) {
return !!(E.isNumber(e.r) && E.isNumber(e.g) && E.isNumber(e.b) && E.isNumber(e.a)) && {
space: "RGB",
r: e.r,
g: e.g,
b: e.b,
a: e.a
}
},
write: function (e) {
return {
r: e.r,
g: e.g,
b: e.b,
a: e.a
}
}
},
RGB_OBJ: {
read: function (e) {
return !!(E.isNumber(e.r) && E.isNumber(e.g) && E.isNumber(e.b)) && {
space: "RGB",
r: e.r,
g: e.g,
b: e.b
}
},
write: function (e) {
return {
r: e.r,
g: e.g,
b: e.b
}
}
},
HSVA_OBJ: {
read: function (e) {
return !!(E.isNumber(e.h) && E.isNumber(e.s) && E.isNumber(e.v) && E.isNumber(e.a)) && {
space: "HSV",
h: e.h,
s: e.s,
v: e.v,
a: e.a
}
},
write: function (e) {
return {
h: e.h,
s: e.s,
v: e.v,
a: e.a
}
}
},
HSV_OBJ: {
read: function (e) {
return !!(E.isNumber(e.h) && E.isNumber(e.s) && E.isNumber(e.v)) && {
space: "HSV",
h: e.h,
s: e.s,
v: e.v
}
},
write: function (e) {
return {
h: e.h,
s: e.s,
v: e.v
}
}
}
}
}], function () {
b = !1;
var i = 1 < arguments.length ? E.toArray(arguments) : arguments[0];
return E.each(w, function (e) {
if (e.litmus(i)) return E.each(e.conversions, function (e, t) {
if (_ = e.read(i), !1 === b && !1 !== _) return (b = _).conversionName = t, _.conversion = e, E.BREAK
}), E.BREAK
}), b
}), ee.GUI = ee.gui.GUI = function (e, t, i, c, h, u, d, p, f, n, g, r, o, m, v) {
function y(e, t, i, n) {
if (void 0 === t[i]) throw new Error("Object " + t + ' has no property "' + i + '"');
var r;
if (n.color) r = new g(t, i);
else {
var o = [t, i].concat(n.factoryArgs);
r = c.apply(e, o)
}
n.before instanceof h && (n.before = n.before.__li), C(e, r), m.addClass(r.domElement, "c");
var a = document.createElement("span");
m.addClass(a, "property-name"), a.innerHTML = r.property;
var s = document.createElement("div");
s.appendChild(a), s.appendChild(r.domElement);
var l = A(e, s, n.before);
return m.addClass(l, R.CLASS_CONTROLLER_ROW), m.addClass(l, typeof r.getValue()),
function (t, i, n) {
if (n.__li = i, n.__gui = t, v.extend(n, {
options: function (e) {
return 1 < arguments.length ? (n.remove(), y(t, n.object, n.property, {
before: n.__li.nextElementSibling,
factoryArgs: [v.toArray(arguments)]
})) : v.isArray(e) || v.isObject(e) ? (n.remove(), y(t, n.object, n.property, {
before: n.__li.nextElementSibling,
factoryArgs: [e]
})) : void 0
},
name: function (e) {
return n.__li.firstElementChild.firstElementChild.innerHTML = e, n
},
listen: function () {
return n.__gui.listen(n), n
},
remove: function () {
return n.__gui.remove(n), n
}
}), n instanceof f) {
var r = new p(n.object, n.property, {
min: n.__min,
max: n.__max,
step: n.__step
});
v.each(["updateDisplay", "onChange", "onFinishChange"], function (e) {
var t = n[e],
i = r[e];
n[e] = r[e] = function () {
var e = Array.prototype.slice.call(arguments);
return t.apply(n, e), i.apply(r, e)
}
}), m.addClass(i, "has-slider"), n.domElement.insertBefore(r.domElement, n.domElement.firstElementChild)
} else if (n instanceof p) {
var e = function (e) {
return v.isNumber(n.__min) && v.isNumber(n.__max) ? (n.remove(), y(t, n.object, n.property, {
before: n.__li.nextElementSibling,
factoryArgs: [n.__min, n.__max, n.__step]
})) : e
};
n.min = v.compose(e, n.min), n.max = v.compose(e, n.max)
} else n instanceof u ? (m.bind(i, "click", function () {
m.fakeEvent(n.__checkbox, "click")
}), m.bind(n.__checkbox, "click", function (e) {
e.stopPropagation()
})) : n instanceof d ? (m.bind(i, "click", function () {
m.fakeEvent(n.__button, "click")
}), m.bind(i, "mouseover", function () {
m.addClass(n.__button, "hover")
}), m.bind(i, "mouseout", function () {
m.removeClass(n.__button, "hover")
})) : n instanceof g && (m.addClass(i, "color"), n.updateDisplay = v.compose(function (e) {
return i.style.borderLeftColor = n.__color.toString(), e
}, n.updateDisplay), n.updateDisplay());
n.setValue = v.compose(function (e) {
return t.getRoot().__preset_select && n.isModified() && _(t.getRoot(), !0), e
}, n.setValue)
}(e, l, r), e.__controllers.push(r), r
}
function A(e, t, i) {
var n = document.createElement("li");
return t && n.appendChild(t), i ? e.__ul.insertBefore(n, params.before) : e.__ul.appendChild(n), e.onResize(), n
}
function C(e, t) {
var i = e.getRoot(),
n = i.__rememberedObjects.indexOf(t.object);
if (-1 != n) {
var r = i.__rememberedObjectIndecesToControllers[n];
if (void 0 === r && (r = {}, i.__rememberedObjectIndecesToControllers[n] = r), r[t.property] = t, i.load && i.load.remembered) {
var o, a = i.load.remembered;
if (a[e.preset]) o = a[e.preset];
else {
if (!a[T]) return;
o = a[T]
}
if (o[n] && void 0 !== o[n][t.property]) {
var s = o[n][t.property];
t.initialValue = s, t.setValue(s)
}
}
}
}
function I(e, t) {
return document.location.href + "." + t
}
function l(e, t) {
e.domElement.style.width = t + "px", e.__save_row && e.autoPlace && (e.__save_row.style.width = t + "px"), e.__closeButton && (e.__closeButton.style.width = t + "px")
}
function a(r, o) {
var a = {};
return v.each(r.__rememberedObjects, function (e, t) {
var i = {},
n = r.__rememberedObjectIndecesToControllers[t];
v.each(n, function (e, t) {
i[t] = o ? e.initialValue : e.getValue()
}), a[t] = i
}), a
}
function E(e, t, i) {
var n = document.createElement("option");
n.innerHTML = t, n.value = t, e.__preset_select.appendChild(n), i && (e.__preset_select.selectedIndex = e.__preset_select.length - 1)
}
function _(e, t) {
var i = e.__preset_select[e.__preset_select.selectedIndex];
i.innerHTML = t ? i.value + "*" : i.value
}
e.inject(".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */ }\n .dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both; }\n .dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0; }\n .dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden; }\n .dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear; }\n .dg.main.taller-than-window {\n overflow-y: auto; }\n .dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c; }\n .dg.main ul.closed .close-button {\n opacity: 1 !important; }\n .dg.main:hover .close-button,\n .dg.main .close-button.drag {\n opacity: 1; }\n .dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n position: absolute;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000; }\n .dg.main .close-button:hover {\n background-color: #111; }\n .dg.a {\n float: right;\n margin-right: 15px;\n overflow-x: hidden; }\n .dg.a.has-save > ul {\n margin-top: 27px; }\n .dg.a.has-save > ul.closed {\n margin-top: 0; }\n .dg.a .save-row {\n position: fixed;\n top: 0;\n z-index: 1002; }\n .dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out; }\n .dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n overflow: hidden;\n padding: 0 4px 0 5px; }\n .dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0); }\n .dg li.title {\n cursor: pointer;\n margin-left: -4px; }\n .dg .closed li:not(.title),\n .dg .closed ul li,\n .dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0; }\n .dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px; }\n .dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis; }\n .dg .c {\n float: left;\n width: 60%; }\n .dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right; }\n .dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0; }\n .dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px; }\n .dg .slider-fg {\n height: 100%; }\n .dg .c input[type=checkbox] {\n margin-top: 9px; }\n .dg .c select {\n margin-top: 5px; }\n .dg .cr.function,\n .dg .cr.function .property-name,\n .dg .cr.function *,\n .dg .cr.boolean,\n .dg .cr.boolean * {\n cursor: pointer; }\n .dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10; }\n .dg .c:hover .selector,\n .dg .selector.drag {\n display: block; }\n .dg li.save-row {\n padding: 0; }\n .dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px; }\n .dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px; }\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative; }\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px; }\n #dg-local-explain code {\n font-size: 10px; }\n\n#dat-gui-save-locally {\n display: none; }\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
*/\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n background: #c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n");
var b, w, T = "Default",
x = function () {
try {
return "localStorage" in window && null !== window.localStorage
} catch (e) {
return !1
}
}(),
S = !0,
s = !1,
M = [],
R = function (t) {
var i = this;
this.domElement = document.createElement("div"), this.__ul = document.createElement("ul"), this.domElement.appendChild(this.__ul), m.addClass(this.domElement, "dg"), this.__folders = {}, this.__controllers = [], this.__rememberedObjects = [], this.__rememberedObjectIndecesToControllers = [], this.__listening = [], t = t || {}, t = v.defaults(t, {
autoPlace: !0,
width: R.DEFAULT_WIDTH
}), t = v.defaults(t, {
resizable: t.autoPlace,
hideable: t.autoPlace
}), v.isUndefined(t.load) ? t.load = {
preset: T
} : t.preset && (t.load.preset = t.preset), v.isUndefined(t.parent) && t.hideable && M.push(this), t.resizable = v.isUndefined(t.parent) && t.resizable, t.autoPlace && v.isUndefined(t.scrollable) && (t.scrollable = !0);
var n, e, r = x && "true" === localStorage.getItem(I(0, "isLocal"));
if (Object.defineProperties(this, {
parent: {
get: function () {
return t.parent
}
},
scrollable: {
get: function () {
return t.scrollable
}
},
autoPlace: {
get: function () {
return t.autoPlace
}
},
preset: {
get: function () {
return i.parent ? i.getRoot().preset : t.load.preset
},
set: function (e) {
i.parent ? i.getRoot().preset = e : t.load.preset = e,
function (e) {
for (var t = 0; t < e.__preset_select.length; t++) e.__preset_select[t].value == e.preset && (e.__preset_select.selectedIndex = t)
}(this), i.revert()
}
},
width: {
get: function () {
return t.width
},
set: function (e) {
t.width = e, l(i, e)
}
},
name: {
get: function () {
return t.name
},
set: function (e) {
t.name = e, a && (a.innerHTML = t.name)
}
},
closed: {
get: function () {
return t.closed
},
set: function (e) {
t.closed = e, t.closed ? m.addClass(i.__ul, R.CLASS_CLOSED) : m.removeClass(i.__ul, R.CLASS_CLOSED), this.onResize(), i.__closeButton && (i.__closeButton.innerHTML = e ? R.TEXT_OPEN : R.TEXT_CLOSED)
}
},
load: {
get: function () {
return t.load
}
},
useLocalStorage: {
get: function () {
return r
},
set: function (e) {
x && ((r = e) ? m.bind(window, "unload", n) : m.unbind(window, "unload", n), localStorage.setItem(I(0, "isLocal"), e))
}
}
}), v.isUndefined(t.parent)) {
if (t.closed = !1, m.addClass(this.domElement, R.CLASS_MAIN), m.makeSelectable(this.domElement, !1), x && r) {
i.useLocalStorage = !0;
var o = localStorage.getItem(I(0, "gui"));
o && (t.load = JSON.parse(o))
}
this.__closeButton = document.createElement("div"), this.__closeButton.innerHTML = R.TEXT_CLOSED, m.addClass(this.__closeButton, R.CLASS_CLOSE_BUTTON), this.domElement.appendChild(this.__closeButton), m.bind(this.__closeButton, "click", function () {
i.closed = !i.closed
})
} else {
void 0 === t.closed && (t.closed = !0);
var a = document.createTextNode(t.name);
m.addClass(a, "controller-name");
var s = A(i, a);
m.addClass(this.__ul, R.CLASS_CLOSED), m.addClass(s, "title"), m.bind(s, "click", function (e) {
return e.preventDefault(), i.closed = !i.closed, !1
}), t.closed || (this.closed = !1)
}
t.autoPlace && (v.isUndefined(t.parent) && (S && (w = document.createElement("div"), m.addClass(w, "dg"), m.addClass(w, R.CLASS_AUTO_PLACE_CONTAINER), document.body.appendChild(w), S = !1), w.appendChild(this.domElement), m.addClass(this.domElement, R.CLASS_AUTO_PLACE)), this.parent || l(i, t.width)), m.bind(window, "resize", function () {
i.onResize()
}), m.bind(this.__ul, "webkitTransitionEnd", function () {
i.onResize()
}), m.bind(this.__ul, "transitionend", function () {
i.onResize()
}), m.bind(this.__ul, "oTransitionEnd", function () {
i.onResize()
}), this.onResize(), t.resizable && function (t) {
function e(e) {
return e.preventDefault(), r = e.clientX, m.addClass(t.__closeButton, R.CLASS_DRAG), m.bind(window, "mousemove", i), m.bind(window, "mouseup", n), !1
}
function i(e) {
return e.preventDefault(), t.width += r - e.clientX, t.onResize(), r = e.clientX, !1
}
function n() {
m.removeClass(t.__closeButton, R.CLASS_DRAG), m.unbind(window, "mousemove", i), m.unbind(window, "mouseup", n)
}
var r;
t.__resize_handle = document.createElement("div"), v.extend(t.__resize_handle.style, {
width: "6px",
marginLeft: "-3px",
height: "200px",
cursor: "ew-resize",
position: "absolute"
}), m.bind(t.__resize_handle, "mousedown", e), m.bind(t.__closeButton, "mousedown", e), t.domElement.insertBefore(t.__resize_handle, t.domElement.firstElementChild)
}(this), n = function () {
x && "true" === localStorage.getItem(I(0, "isLocal")) && localStorage.setItem(I(0, "gui"), JSON.stringify(i.getSaveObject()))
}, this.saveToLocalStorageIfPossible = n, i.getRoot(), t.parent || ((e = i.getRoot()).width += 1, v.defer(function () {
e.width -= 1
}))
};
return R.toggleHide = function () {
s = !s, v.each(M, function (e) {
e.domElement.style.zIndex = s ? -999 : 999, e.domElement.style.opacity = s ? 0 : 1
})
}, R.CLASS_AUTO_PLACE = "a", R.CLASS_AUTO_PLACE_CONTAINER = "ac", R.CLASS_MAIN = "main", R.CLASS_CONTROLLER_ROW = "cr", R.CLASS_TOO_TALL = "taller-than-window", R.CLASS_CLOSED = "closed", R.CLASS_CLOSE_BUTTON = "close-button", R.CLASS_DRAG = "drag", R.DEFAULT_WIDTH = 245, R.TEXT_CLOSED = "Close Controls", R.TEXT_OPEN = "Open Controls", m.bind(window, "keydown", function (e) {
"text" === document.activeElement.type || 72 !== e.which && 72 != e.keyCode || R.toggleHide()
}, !1), v.extend(R.prototype, {
add: function (e, t) {
return y(this, e, t, {
factoryArgs: Array.prototype.slice.call(arguments, 2)
})
},
addColor: function (e, t) {
return y(this, e, t, {
color: !0
})
},
remove: function (e) {
this.__ul.removeChild(e.__li), this.__controllers.slice(this.__controllers.indexOf(e), 1);
var t = this;
v.defer(function () {
t.onResize()
})
},
destroy: function () {
this.autoPlace && w.removeChild(this.domElement)
},
addFolder: function (e) {
if (void 0 !== this.__folders[e]) throw new Error('You already have a folder in this GUI by the name "' + e + '"');
var t = {
name: e,
parent: this
};
t.autoPlace = this.autoPlace, this.load && this.load.folders && this.load.folders[e] && (t.closed = this.load.folders[e].closed, t.load = this.load.folders[e]);
var i = new R(t);
this.__folders[e] = i;
var n = A(this, i.domElement);
return m.addClass(n, "folder"), i
},
open: function () {
this.closed = !1
},
close: function () {
this.closed = !0
},
onResize: function () {
var t = this.getRoot();
if (t.scrollable) {
var e = m.getOffset(t.__ul).top,
i = 0;
v.each(t.__ul.childNodes, function (e) {
t.autoPlace && e === t.__save_row || (i += m.getHeight(e))
}), $("#player").height() - e - 20 < i ? (m.addClass(t.domElement, R.CLASS_TOO_TALL), t.__ul.style.height = $("#player").height() - e - 20 + "px") : (m.removeClass(t.domElement, R.CLASS_TOO_TALL), t.__ul.style.height = "auto")
}
t.__resize_handle && v.defer(function () {
t.__resize_handle.style.height = t.__ul.offsetHeight + "px"
}), t.__closeButton && (t.__closeButton.style.width = t.width + "px")
},
remember: function () {
if (v.isUndefined(b) && ((b = new o).domElement.innerHTML = '
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
\n \n
\n\n
'), this.parent) throw new Error("You can only call remember on a top level GUI.");
var t = this;
v.each(Array.prototype.slice.call(arguments), function (e) {
0 == t.__rememberedObjects.length && function (i) {
var e = i.__save_row = document.createElement("li");
m.addClass(i.domElement, "has-save"), i.__ul.insertBefore(e, i.__ul.firstChild), m.addClass(e, "save-row");
var t = document.createElement("span");
t.innerHTML = " ", m.addClass(t, "button gears");
var n = document.createElement("span");
n.innerHTML = "Save", m.addClass(n, "button"), m.addClass(n, "save");
var r = document.createElement("span");
r.innerHTML = "New", m.addClass(r, "button"), m.addClass(r, "save-as");
var o = document.createElement("span");
o.innerHTML = "Revert", m.addClass(o, "button"), m.addClass(o, "revert");
var a = i.__preset_select = document.createElement("select");
if (i.load && i.load.remembered ? v.each(i.load.remembered, function (e, t) {
E(i, t, t == i.preset)
}) : E(i, T, !1), m.bind(a, "change", function () {
for (var e = 0; e < i.__preset_select.length; e++) i.__preset_select[e].innerHTML = i.__preset_select[e].value;
i.preset = this.value
}), e.appendChild(a), e.appendChild(t), e.appendChild(n), e.appendChild(r), e.appendChild(o), x) {
var s = document.getElementById("dg-save-locally"),
l = document.getElementById("dg-local-explain");
s.style.display = "block";
var c = document.getElementById("dg-local-storage");
"true" === localStorage.getItem(I(0, "isLocal")) && c.setAttribute("checked", "checked");
var h = function () {
l.style.display = i.useLocalStorage ? "block" : "none"
};
h(), m.bind(c, "change", function () {
i.useLocalStorage = !i.useLocalStorage, h()
})
}
var u = document.getElementById("dg-new-constructor");
m.bind(u, "keydown", function (e) {
!e.metaKey || 67 !== e.which && 67 != e.keyCode || b.hide()
}), m.bind(t, "click", function () {
u.innerHTML = JSON.stringify(i.getSaveObject(), void 0, 2), b.show(), u.focus(), u.select()
}), m.bind(n, "click", function () {
i.save()
}), m.bind(r, "click", function () {
var e = prompt("Enter a new preset name.");
e && i.saveAs(e)
}), m.bind(o, "click", function () {
i.revert()
})
}(t), -1 == t.__rememberedObjects.indexOf(e) && t.__rememberedObjects.push(e)
}), this.autoPlace && l(this, this.width)
},
getRoot: function () {
for (var e = this; e.parent;) e = e.parent;
return e
},
getSaveObject: function () {
var i = this.load;
return i.closed = this.closed, 0 < this.__rememberedObjects.length && (i.preset = this.preset, i.remembered || (i.remembered = {}), i.remembered[this.preset] = a(this)), i.folders = {}, v.each(this.__folders, function (e, t) {
i.folders[t] = e.getSaveObject()
}), i
},
save: function () {
this.load.remembered || (this.load.remembered = {}), this.load.remembered[this.preset] = a(this), _(this, !1), this.saveToLocalStorageIfPossible()
},
saveAs: function (e) {
this.load.remembered || (this.load.remembered = {}, this.load.remembered[T] = a(this, !0)), this.load.remembered[e] = a(this), this.preset = e, E(this, e, !0), this.saveToLocalStorageIfPossible()
},
revert: function (t) {
v.each(this.__controllers, function (e) {
this.getRoot().load.remembered ? C(t || this.getRoot(), e) : e.setValue(e.initialValue)
}, this), v.each(this.__folders, function (e) {
e.revert(e)
}), t || _(this.getRoot(), !1)
},
listen: function (e) {
var t = 0 == this.__listening.length;
this.__listening.push(e), t && function e(t) {
0 != t.length && r(function () {
e(t)
}), v.each(t, function (e) {
e.updateDisplay()
})
}(this.__listening)
}
}), R
}(ee.utils.css, 0, 0, ee.controllers.factory = (h = ee.controllers.OptionController, u = ee.controllers.NumberControllerBox, d = ee.controllers.NumberControllerSlider, p = ee.controllers.StringController = (v = ee.controllers.Controller, y = ee.dom.dom, A = ee.utils.common, (C = function (e, t) {
function i() {
n.setValue(n.__input.value)
}
C.superclass.call(this, e, t);
var n = this;
this.__input = document.createElement("input"), this.__input.setAttribute("type", "text"), y.bind(this.__input, "keyup", i), y.bind(this.__input, "change", i), y.bind(this.__input, "blur", function () {
n.__onFinishChange && n.__onFinishChange.call(n, n.getValue())
}), y.bind(this.__input, "keydown", function (e) {
13 === e.keyCode && this.blur()
}), this.updateDisplay(), this.domElement.appendChild(this.__input)
}).superclass = v, A.extend(C.prototype, v.prototype, {
updateDisplay: function () {
return y.isActive(this.__input) || (this.__input.value = this.getValue()), C.superclass.prototype.updateDisplay.call(this)
}
}), C), f = ee.controllers.FunctionController, g = ee.controllers.BooleanController, m = ee.utils.common, function (e, t) {
var i = e[t];
return m.isArray(arguments[2]) || m.isObject(arguments[2]) ? new h(e, t, arguments[2]) : m.isNumber(i) ? m.isNumber(arguments[2]) && m.isNumber(arguments[3]) ? new d(e, t, arguments[2], arguments[3]) : new u(e, t, {
min: arguments[2],
max: arguments[3]
}) : m.isString(i) ? new p(e, t) : m.isFunction(i) ? new f(e, t, "") : m.isBoolean(i) ? new g(e, t) : void 0
}), ee.controllers.Controller, ee.controllers.BooleanController, ee.controllers.FunctionController, ee.controllers.NumberControllerBox, ee.controllers.NumberControllerSlider, ee.controllers.OptionController, ee.controllers.ColorController = function (e, h, u, d, p) {
function f(t, i, n, r) {
t.style.background = "", p.each(o, function (e) {
t.style.cssText += "background: " + e + "linear-gradient(" + i + ", " + n + " 0%, " + r + " 100%); "
})
}
var g = function (e, t) {
function i(e) {
a(e), h.bind(window, "mousemove", a), h.bind(window, "mouseup", n)
}
function n() {
h.unbind(window, "mousemove", a), h.unbind(window, "mouseup", n)
}
function r() {
var e = d(this.value);
!1 !== e ? (l.__color.__state = e, l.setValue(l.__color.toOriginal())) : this.value = l.__color.toString()
}
function o() {
h.unbind(window, "mousemove", s), h.unbind(window, "mouseup", o)
}
function a(e) {
e.preventDefault();
var t = h.getWidth(l.__saturation_field),
i = h.getOffset(l.__saturation_field),
n = (e.clientX - i.left + document.body.scrollLeft) / t,
r = 1 - (e.clientY - i.top + document.body.scrollTop) / t;
return 1 < r ? r = 1 : r < 0 && (r = 0), 1 < n ? n = 1 : n < 0 && (n = 0), l.__color.v = r, l.__color.s = n, l.setValue(l.__color.toOriginal()), !1
}
function s(e) {
e.preventDefault();
var t = h.getHeight(l.__hue_field),
i = h.getOffset(l.__hue_field),
n = 1 - (e.clientY - i.top + document.body.scrollTop) / t;
return 1 < n ? n = 1 : n < 0 && (n = 0), l.__color.h = 360 * n, l.setValue(l.__color.toOriginal()), !1
}
g.superclass.call(this, e, t), this.__color = new u(this.getValue()), this.__temp = new u(0);
var l = this;
this.domElement = document.createElement("div"), h.makeSelectable(this.domElement, !1), this.__selector = document.createElement("div"), this.__selector.className = "selector", this.__saturation_field = document.createElement("div"), this.__saturation_field.className = "saturation-field", this.__field_knob = document.createElement("div"), this.__field_knob.className = "field-knob", this.__field_knob_border = "2px solid ", this.__hue_knob = document.createElement("div"), this.__hue_knob.className = "hue-knob", this.__hue_field = document.createElement("div"), this.__hue_field.className = "hue-field", this.__input = document.createElement("input"), this.__input.type = "text", this.__input_textShadow = "0 1px 1px ", h.bind(this.__input, "keydown", function (e) {
13 === e.keyCode && r.call(this)
}), h.bind(this.__input, "blur", r), h.bind(this.__selector, "mousedown", function (e) {
h.addClass(this, "drag").bind(window, "mouseup", function (e) {
h.removeClass(l.__selector, "drag")
})
});
var c = document.createElement("div");
p.extend(this.__selector.style, {
width: "122px",
height: "102px",
padding: "3px",
backgroundColor: "#222",
boxShadow: "0px 1px 3px rgba(0,0,0,0.3)"
}), p.extend(this.__field_knob.style, {
position: "absolute",
width: "12px",
height: "12px",
border: this.__field_knob_border + (this.__color.v < .5 ? "#fff" : "#000"),
boxShadow: "0px 1px 3px rgba(0,0,0,0.5)",
borderRadius: "12px",
zIndex: 1
}), p.extend(this.__hue_knob.style, {
position: "absolute",
width: "15px",
height: "2px",
borderRight: "4px solid #fff",
zIndex: 1
}), p.extend(this.__saturation_field.style, {
width: "100px",
height: "100px",
border: "1px solid #555",
marginRight: "3px",
display: "inline-block",
cursor: "pointer"
}), p.extend(c.style, {
width: "100%",
height: "100%",
background: "none"
}), f(c, "top", "rgba(0,0,0,0)", "#000"), p.extend(this.__hue_field.style, {
width: "15px",
height: "100px",
display: "inline-block",
border: "1px solid #555",
cursor: "ns-resize"
}),
function (e) {
e.style.background = "", e.style.cssText += "background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);", e.style.cssText += "background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", e.style.cssText += "background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", e.style.cssText += "background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", e.style.cssText += "background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"
}(this.__hue_field), p.extend(this.__input.style, {
outline: "none",
textAlign: "center",
color: "#fff",
border: 0,
fontWeight: "bold",
textShadow: this.__input_textShadow + "rgba(0,0,0,0.7)"
}), h.bind(this.__saturation_field, "mousedown", i), h.bind(this.__field_knob, "mousedown", i), h.bind(this.__hue_field, "mousedown", function (e) {
s(e), h.bind(window, "mousemove", s), h.bind(window, "mouseup", o)
}), this.__saturation_field.appendChild(c), this.__selector.appendChild(this.__field_knob), this.__selector.appendChild(this.__saturation_field), this.__selector.appendChild(this.__hue_field), this.__hue_field.appendChild(this.__hue_knob), this.domElement.appendChild(this.__input), this.domElement.appendChild(this.__selector), this.updateDisplay()
};
g.superclass = e, p.extend(g.prototype, e.prototype, {
updateDisplay: function () {
var t = d(this.getValue());
if (!1 !== t) {
var i = !1;
p.each(u.COMPONENTS, function (e) {
if (!p.isUndefined(t[e]) && !p.isUndefined(this.__color.__state[e]) && t[e] !== this.__color.__state[e]) return i = !0, {}
}, this), i && p.extend(this.__color.__state, t)
}
p.extend(this.__temp.__state, this.__color.__state), this.__temp.a = 1;
var e = this.__color.v < .5 || .5 < this.__color.s ? 255 : 0,
n = 255 - e;
p.extend(this.__field_knob.style, {
marginLeft: 100 * this.__color.s - 7 + "px",
marginTop: 100 * (1 - this.__color.v) - 7 + "px",
backgroundColor: this.__temp.toString(),
border: this.__field_knob_border + "rgb(" + e + "," + e + "," + e + ")"
}), this.__hue_knob.style.marginTop = 100 * (1 - this.__color.h / 360) + "px", this.__temp.s = 1, this.__temp.v = 1, f(this.__saturation_field, "left", "#fff", this.__temp.toString()), p.extend(this.__input.style, {
backgroundColor: this.__input.value = this.__color.toString(),
color: "rgb(" + e + "," + e + "," + e + ")",
textShadow: this.__input_textShadow + "rgba(" + n + "," + n + "," + n + ",.7)"
})
}
});
var o = ["-moz-", "-o-", "-webkit-", "-ms-", ""];
return g
}(ee.controllers.Controller, ee.dom.dom, ee.color.Color = (o = ee.color.interpret, a = ee.color.math = {
hsv_to_rgb: function (e, t, i) {
var n = Math.floor(e / 60) % 6,
r = e / 60 - Math.floor(e / 60),
o = i * (1 - t),
a = i * (1 - r * t),
s = i * (1 - (1 - r) * t),
l = [
[i, s, o],
[a, i, o],
[o, i, s],
[o, a, i],
[s, o, i],
[i, o, a]
][n];
return {
r: 255 * l[0],
g: 255 * l[1],
b: 255 * l[2]
}
},
rgb_to_hsv: function (e, t, i) {
var n, r = Math.min(e, t, i),
o = Math.max(e, t, i),
a = o - r;
return 0 == o ? {
h: NaN,
s: 0,
v: 0
} : (n = e == o ? (t - i) / a : t == o ? 2 + (i - e) / a : 4 + (e - t) / a, (n /= 6) < 0 && (n += 1), {
h: 360 * n,
s: a / o,
v: o / 255
})
},
rgb_to_hex: function (e, t, i) {
var n = this.hex_with_component(0, 2, e);
return n = this.hex_with_component(n, 1, t), this.hex_with_component(n, 0, i)
},
component_from_hex: function (e, t) {
return e >> 8 * t & 255
},
hex_with_component: function (e, t, i) {
return i << (c = 8 * t) | e & ~(255 << c)
}
}, s = ee.color.toString, l = ee.utils.common, ae.COMPONENTS = ["r", "g", "b", "h", "s", "v", "hex", "a"], l.extend(ae.prototype, {
toString: function () {
return s(this)
},
toOriginal: function () {
return this.__state.conversion.write(this)
}
}), ie(ae.prototype, "r", 2), ie(ae.prototype, "g", 1), ie(ae.prototype, "b", 0), ne(ae.prototype, "h"), ne(ae.prototype, "s"), ne(ae.prototype, "v"), Object.defineProperty(ae.prototype, "a", {
get: function () {
return this.__state.a
},
set: function (e) {
this.__state.a = e
}
}), Object.defineProperty(ae.prototype, "hex", {
get: function () {
return "HEX" !== !this.__state.space && (this.__state.hex = a.rgb_to_hex(this.r, this.g, this.b)), this.__state.hex
},
set: function (e) {
this.__state.space = "HEX", this.__state.hex = e
}
}), ae), ee.color.interpret, ee.utils.common), ee.utils.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (e, t) {
window.setTimeout(e, 1e3 / 60)
}, ee.dom.CenteredDiv = (n = ee.dom.dom, r = ee.utils.common, te.prototype.show = function () {
var e = this;
this.backgroundElement.style.display = "block", this.domElement.style.display = "block", this.domElement.style.opacity = 0, this.domElement.style.webkitTransform = "scale(1.1)", this.layout(), r.defer(function () {
e.backgroundElement.style.opacity = 1, e.domElement.style.opacity = 1, e.domElement.style.webkitTransform = "scale(1)"
})
}, te.prototype.hide = function () {
var e = this,
t = function () {
e.domElement.style.display = "none", e.backgroundElement.style.display = "none", n.unbind(e.domElement, "webkitTransitionEnd", t), n.unbind(e.domElement, "transitionend", t), n.unbind(e.domElement, "oTransitionEnd", t)
};
n.bind(this.domElement, "webkitTransitionEnd", t), n.bind(this.domElement, "transitionend", t), n.bind(this.domElement, "oTransitionEnd", t), this.backgroundElement.style.opacity = 0, this.domElement.style.opacity = 0, this.domElement.style.webkitTransform = "scale(1.1)"
}, te.prototype.layout = function () {
this.domElement.style.left = $("#player").width() / 2 - n.getWidth(this.domElement) / 2 + "px", this.domElement.style.top = $("#player").height() / 2 - n.getHeight(this.domElement) / 2 + "px"
}, te), ee.dom.dom, ee.utils.common)
}, {}],
94: [function (e, t, i) {
(function (J) {
"use strict";
function i(e) {
function t(e, t) {
for (var i = 0, n = 0, r = new Array, o = 1; o <= 16; o++) {
for (var a = 1; a <= e[o]; a++) r[t[n]] = [], r[t[n]][0] = i, r[t[n]][1] = o, n++, i++;
i *= 2
}
return r
}
function _(e) {
for (var t = e[0], i = e[1] - 1; 0 <= i;) t & 1 << i && (B |= 1 << V), i--, --V < 0 && (255 == B ? (b(255), b(0)) : b(B), V = 7, B = 0)
}
function b(e) {
F.push(e)
}
function w(e) {
b(e >> 8 & 255), b(255 & e)
}
function T(e, t, i, n, r) {
for (var o, a = r[0], s = r[240], l = function (e, t) {
var i, n, r, o, a, s, l, c, h, u, d = 0;
for (h = 0; h < 8; ++h) {
i = e[d], n = e[d + 1], r = e[d + 2], o = e[d + 3], a = e[d + 4], s = e[d + 5], l = e[d + 6];
var p = i + (c = e[d + 7]),
f = i - c,
g = n + l,
m = n - l,
v = r + s,
y = r - s,
A = o + a,
C = o - a,
I = p + A,
E = p - A,
_ = g + v,
b = g - v;
e[d] = I + _, e[d + 4] = I - _;
var w = .707106781 * (b + E);
e[d + 2] = E + w, e[d + 6] = E - w;
var T = .382683433 * ((I = C + y) - (b = m + f)),
x = .5411961 * I + T,
S = 1.306562965 * b + T,
M = .707106781 * (_ = y + m),
R = f + M,
P = f - M;
e[d + 5] = P + x, e[d + 3] = P - x, e[d + 1] = R + S, e[d + 7] = R - S, d += 8
}
for (h = d = 0; h < 8; ++h) {
i = e[d], n = e[d + 8], r = e[d + 16], o = e[d + 24], a = e[d + 32], s = e[d + 40], l = e[d + 48];
var O = i + (c = e[d + 56]),
L = i - c,
D = n + l,
N = n - l,
F = r + s,
B = r - s,
V = o + a,
k = o - a,
U = O + V,
H = O - V,
z = D + F,
G = D - F;
e[d] = U + z, e[d + 32] = U - z;
var W = .707106781 * (G + H);
e[d + 16] = H + W, e[d + 48] = H - W;
var j = .382683433 * ((U = k + B) - (G = N + L)),
Y = .5411961 * U + j,
q = 1.306562965 * G + j,
X = .707106781 * (z = B + N),
Z = L + X,
K = L - X;
e[d + 40] = K + Y, e[d + 24] = K - Y, e[d + 8] = Z + q, e[d + 56] = Z - q, d++
}
for (h = 0; h < 64; ++h) u = e[h] * t[h], Q[h] = 0 < u ? .5 + u | 0 : u - .5 | 0;
return Q
}(e, t), c = 0; c < 64; ++c) A[C[c]] = l[c];
var h = A[0] - i;
i = A[0], 0 == h ? _(n[0]) : (_(n[y[o = 32767 + h]]), _(v[o]));
for (var u = 63; 0 < u && 0 == A[u]; u--);
if (0 == u) return _(a), i;
for (var d, p = 1; p <= u;) {
for (var f = p; 0 == A[p] && p <= u; ++p);
var g = p - f;
if (16 <= g) {
d = g >> 4;
for (var m = 1; m <= d; ++m) _(s);
g &= 15
}
o = 32767 + A[p], _(r[(g << 4) + y[o]]), _(v[o]), p++
}
return 63 != u && _(a), i
}
function x(e) {
if (e <= 0 && (e = 1), 100 < e && (e = 100), i != e) {
(function (e) {
for (var t = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99], i = 0; i < 64; i++) {
var n = u((t[i] * e + 50) / 100);
n < 1 ? n = 1 : 255 < n && (n = 255), O[C[i]] = n
}
for (var r = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99], o = 0; o < 64; o++) {
var a = u((r[o] * e + 50) / 100);
a < 1 ? a = 1 : 255 < a && (a = 255), L[C[o]] = a
}
for (var s = [1, 1.387039845, 1.306562965, 1.175875602, 1, .785694958, .5411961, .275899379], l = 0, c = 0; c < 8; c++)
for (var h = 0; h < 8; h++) D[l] = 1 / (O[C[l]] * s[c] * s[h] * 8), N[l] = 1 / (L[C[l]] * s[c] * s[h] * 8), l++
})(e < 50 ? Math.floor(5e3 / e) : Math.floor(200 - 2 * e)), i = e
}
}
var S, M, R, P, i, u = (Math.round, Math.floor),
O = new Array(64),
L = new Array(64),
D = new Array(64),
N = new Array(64),
v = new Array(65535),
y = new Array(65535),
Q = new Array(64),
A = new Array(64),
F = [],
B = 0,
V = 7,
k = new Array(64),
U = new Array(64),
H = new Array(64),
n = new Array(256),
z = new Array(2048),
C = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63],
G = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
W = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
j = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125],
Y = [1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250],
q = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
X = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
Z = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119],
K = [0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250];
this.encode = function (e, t) {
var i = ((new Date).getTime(), t.quality);
i && x(i), F = new Array, B = 0, V = 7, w(65496), w(65504), w(16), b(74), b(70), b(73), b(70), b(0), b(1), b(1), b(0), w(1), w(1), b(0), b(0),
function () {
w(65499), w(132), b(0);
for (var e = 0; e < 64; e++) b(O[e]);
b(1);
for (var t = 0; t < 64; t++) b(L[t])
}(),
function (e, t) {
w(65472), w(17), b(8), w(t), w(e), b(3), b(1), b(17), b(0), b(2), b(17), b(1), b(3), b(17), b(1)
}(e.width, e.height),
function () {
w(65476), w(418), b(0);
for (var e = 0; e < 16; e++) b(G[e + 1]);
for (var t = 0; t <= 11; t++) b(W[t]);
b(16);
for (var i = 0; i < 16; i++) b(j[i + 1]);
for (var n = 0; n <= 161; n++) b(Y[n]);
b(1);
for (var r = 0; r < 16; r++) b(q[r + 1]);
for (var o = 0; o <= 11; o++) b(X[o]);
b(17);
for (var a = 0; a < 16; a++) b(Z[a + 1]);
for (var s = 0; s <= 161; s++) b(K[s])
}(), w(65498), w(12), b(3), b(1), b(0), b(2), b(17), b(3), b(17), b(0), b(63), b(0);
var n = 0,
r = 0,
o = 0;
B = 0, V = 7, this.encode.displayName = "_encode_";
for (var a, s, l, c, h, u, d, p, f, g = e.data, m = e.width, v = e.height, y = t.flipY, A = 4 * m, C = y ? v : 0, I = y ? -8 : 8; y && 0 < C || !y && C < v;) {
for (a = 0; a < A;) {
for (u = h = A * C + a, d = -1, f = p = 0; f < 64; f++) u = h + (p = (y ? 63 - f : f) >> 3) * A + (d = 4 * (7 & f)), v <= C + p && (u -= A * (C + 1 + p - v)), A <= a + d && (u -= a + d - A + 4), s = g[u++], l = g[u++], c = g[u++], k[f] = (z[s] + z[l + 256 >> 0] + z[c + 512 >> 0] >> 16) - 128, U[f] = (z[s + 768 >> 0] + z[l + 1024 >> 0] + z[c + 1280 >> 0] >> 16) - 128, H[f] = (z[s + 1280 >> 0] + z[l + 1536 >> 0] + z[c + 1792 >> 0] >> 16) - 128;
n = T(k, D, n, S, R), r = T(U, N, r, M, P), o = T(H, N, o, M, P), a += 32
}
C += I
}
if (0 <= V) {
var E = [];
E[1] = V + 1, E[0] = (1 << V + 1) - 1, _(E)
}
return w(65497), new J(F)
}, (new Date).getTime(), e = e || 50,
function () {
for (var e = String.fromCharCode, t = 0; t < 256; t++) n[t] = e(t)
}(), S = t(G, W), M = t(q, X), R = t(j, Y), P = t(Z, K),
function () {
for (var e = 1, t = 2, i = 1; i <= 15; i++) {
for (var n = e; n < t; n++) y[32767 + n] = i, v[32767 + n] = [], v[32767 + n][1] = i, v[32767 + n][0] = n;
for (var r = -(t - 1); r <= -e; r++) y[32767 + r] = i, v[32767 + r] = [], v[32767 + r][1] = i, v[32767 + r][0] = t - 1 + r;
e <<= 1, t <<= 1
}
}(),
function () {
for (var e = 0; e < 256; e++) z[e] = 19595 * e, z[e + 256 >> 0] = 38470 * e, z[e + 512 >> 0] = 7471 * e + 32768, z[e + 768 >> 0] = -11059 * e, z[e + 1024 >> 0] = -21709 * e, z[e + 1280 >> 0] = 32768 * e + 8421375, z[e + 1536 >> 0] = -27439 * e, z[e + 1792 >> 0] = -5329 * e
}(), x(e), (new Date).getTime()
}
t.exports.encode = function (e, t) {
return (t = t || {}).quality = t.quality || 50, {
data: new i(t.quality).encode(e, t),
width: e.width,
height: e.height
}
}
}).call(this, e("buffer").Buffer)
}, {
buffer: 198
}],
95: [function (e, t, i) {
"use strict";
! function () {
if ("performance" in window == 0 && (window.performance = {}), Date.now = Date.now || function () {
return (new Date).getTime()
}, "now" in window.performance == 0) {
var e = Date.now();
performance.timing && performance.timing.navigationStart && (e = performance.timing.navigationStart), window.performance.now = function () {
return Date.now() - e
}
}
}()
}, {}],
96: [function (e, t, i) {
"use strict";
var a = e("three");
a.EffectComposer = function (e, t) {
if (this.renderer = e, void 0 === t) {
var i = {
minFilter: a.LinearFilter,
magFilter: a.LinearFilter,
format: a.RGBAFormat,
stencilBuffer: !1
},
n = e.getSize();
t = new a.WebGLRenderTarget(n.width, n.height, i)
}
this.renderTarget1 = t, this.renderTarget2 = t.clone(), this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.passes = [], void 0 === a.CopyShader && console.error("THREE.EffectComposer relies on THREE.CopyShader"), this.copyPass = new a.ShaderPass(a.CopyShader)
}, a.EffectComposer.prototype = {
swapBuffers: function () {
var e = this.readBuffer;
this.readBuffer = this.writeBuffer, this.writeBuffer = e
},
addPass: function (e) {
this.passes.push(e)
},
insertPass: function (e, t) {
this.passes.splice(t, 0, e)
},
render: function (e) {
this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2;
var t, i, n = !1,
r = this.passes.length;
for (i = 0; i < r; i++)
if ((t = this.passes[i]).enabled) {
if (t.render(this.renderer, this.writeBuffer, this.readBuffer, e, n), t.needsSwap) {
if (n) {
var o = this.renderer.context;
o.stencilFunc(o.NOTEQUAL, 1, 4294967295), this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, e), o.stencilFunc(o.EQUAL, 1, 4294967295)
}
this.swapBuffers()
}
t instanceof a.MaskPass ? n = !0 : t instanceof a.ClearMaskPass && (n = !1)
}
},
reset: function (e) {
if (void 0 === e) {
var t = this.renderer.getSize();
(e = this.renderTarget1.clone()).setSize(t.width, t.height)
}
this.renderTarget1.dispose(), this.renderTarget2.dispose(), this.renderTarget1 = e, this.renderTarget2 = e.clone(), this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2
},
setSize: function (e, t) {
this.renderTarget1.setSize(e, t), this.renderTarget2.setSize(e, t)
}
}
}, {
three: 217
}],
97: [function (e, t, i) {
"use strict";
var n = e("three");
n.MaskPass = function (e, t) {
this.scene = e, this.camera = t, this.enabled = !0, this.clear = !0, this.needsSwap = !1, this.inverse = !1
}, n.MaskPass.prototype = {
render: function (e, t, i, n) {
var r, o, a = e.context;
a.colorMask(!1, !1, !1, !1), a.depthMask(!1), o = this.inverse ? (r = 0, 1) : (r = 1, 0), a.enable(a.STENCIL_TEST), a.stencilOp(a.REPLACE, a.REPLACE, a.REPLACE), a.stencilFunc(a.ALWAYS, r, 4294967295), a.clearStencil(o), e.render(this.scene, this.camera, i, this.clear), e.render(this.scene, this.camera, t, this.clear), a.colorMask(!0, !0, !0, !0), a.depthMask(!0), a.stencilFunc(a.EQUAL, 1, 4294967295), a.stencilOp(a.KEEP, a.KEEP, a.KEEP)
}
}, n.ClearMaskPass = function () {
this.enabled = !0
}, n.ClearMaskPass.prototype = {
render: function (e, t, i, n) {
var r = e.context;
r.disable(r.STENCIL_TEST)
}
}
}, {
three: 217
}],
98: [function (e, t, i) {
"use strict";
var o = e("three");
o.RenderPass = function (e, t, i, n, r) {
this.scene = e, this.camera = t, this.overrideMaterial = i, this.clearColor = n, this.clearAlpha = void 0 !== r ? r : 1, this.oldClearColor = new o.Color, this.oldClearAlpha = 1, this.enabled = !0, this.clear = !0, this.needsSwap = !1
}, o.RenderPass.prototype = {
render: function (e, t, i, n) {
this.scene.overrideMaterial = this.overrideMaterial, this.clearColor && (this.oldClearColor.copy(e.getClearColor()), this.oldClearAlpha = e.getClearAlpha(), e.setClearColor(this.clearColor, this.clearAlpha)), e.render(this.scene, this.camera, i, this.clear), this.clearColor && e.setClearColor(this.oldClearColor, this.oldClearAlpha), this.scene.overrideMaterial = null
}
}
}, {
three: 217
}],
99: [function (e, t, i) {
"use strict";
var n = e("three");
n.ShaderPass = function (e, t) {
this.textureID = void 0 !== t ? t : "tDiffuse", e instanceof n.ShaderMaterial ? (this.uniforms = e.uniforms, this.material = e) : e && (this.uniforms = n.UniformsUtils.clone(e.uniforms), this.material = new n.ShaderMaterial({
defines: e.defines || {},
uniforms: this.uniforms,
vertexShader: e.vertexShader,
fragmentShader: e.fragmentShader
})), this.renderToScreen = !1, this.enabled = !0, this.needsSwap = !0, this.clear = !1, this.camera = new n.OrthographicCamera(-1, 1, 1, -1, 0, 1), this.scene = new n.Scene, this.quad = new n.Mesh(new n.PlaneBufferGeometry(2, 2), null), this.scene.add(this.quad)
}, n.ShaderPass.prototype = {
render: function (e, t, i, n) {
this.uniforms[this.textureID] && (this.uniforms[this.textureID].value = i), this.quad.material = this.material, this.renderToScreen ? e.render(this.scene, this.camera) : e.render(this.scene, this.camera, t, this.clear)
}
}
}, {
three: 217
}],
100: [function (e, t, i) {
"use strict";
e("three").CopyShader = {
uniforms: {
tDiffuse: {
type: "t",
value: null
},
opacity: {
type: "f",
value: 1
}
},
vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"),
fragmentShader: ["uniform float opacity;", "uniform sampler2D tDiffuse;", "varying vec2 vUv;", "void main() {", "vec4 texel = texture2D( tDiffuse, vUv );", "gl_FragColor = opacity * texel;", "}"].join("\n")
}
}, {
three: 217
}],
101: [function (e, t, i) {
"use strict";
e("three").HorizontalBlurShader = {
uniforms: {
tDiffuse: {
type: "t",
value: null
},
h: {
type: "f",
value: 1 / 512
}
},
vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"),
fragmentShader: ["uniform sampler2D tDiffuse;", "uniform float h;", "varying vec2 vUv;", "void main() {", "vec4 sum = vec4( 0.0 );", "sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;", "sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;", "sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;", "sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;", "sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;", "sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;", "sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;", "sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;", "gl_FragColor = sum;", "}"].join("\n")
}
}, {
three: 217
}],
102: [function (e, t, i) {
"use strict";
e("three").VerticalBlurShader = {
uniforms: {
tDiffuse: {
type: "t",
value: null
},
v: {
type: "f",
value: 1 / 512
}
},
vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"),
fragmentShader: ["uniform sampler2D tDiffuse;", "uniform float v;", "varying vec2 vUv;", "void main() {", "vec4 sum = vec4( 0.0 );", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;", "sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;", "gl_FragColor = sum;", "}"].join("\n")
}
}, {
three: 217
}],
103: [function (e, t, i) {
"use strict";
var z = e("three");
! function () {
if ("performance" in window == 0 && (window.performance = {}), "now" in window.performance == 0) {
var e = Date.now();
performance.timing && performance.timing.navigationStart && (e = performance.timing.navigationStart), window.performance.now = function () {
return Date.now() - e
}
}
}(), z.WebGLRenderer.prototype.paramThreeToGL = function (e) {
var t, i = this.extensions,
n = this.context;
if (e === z.RepeatWrapping) return n.REPEAT;
if (e === z.ClampToEdgeWrapping) return n.CLAMP_TO_EDGE;
if (e === z.MirroredRepeatWrapping) return n.MIRRORED_REPEAT;
if (e === z.NearestFilter) return n.NEAREST;
if (e === z.NearestMipMapNearestFilter) return n.NEAREST_MIPMAP_NEAREST;
if (e === z.NearestMipMapLinearFilter) return n.NEAREST_MIPMAP_LINEAR;
if (e === z.LinearFilter) return n.LINEAR;
if (e === z.LinearMipMapNearestFilter) return n.LINEAR_MIPMAP_NEAREST;
if (e === z.LinearMipMapLinearFilter) return n.LINEAR_MIPMAP_LINEAR;
if (e === z.UnsignedByteType) return n.UNSIGNED_BYTE;
if (e === z.UnsignedShort4444Type) return n.UNSIGNED_SHORT_4_4_4_4;
if (e === z.UnsignedShort5551Type) return n.UNSIGNED_SHORT_5_5_5_1;
if (e === z.UnsignedShort565Type) return n.UNSIGNED_SHORT_5_6_5;
if (e === z.ByteType) return n.BYTE;
if (e === z.ShortType) return n.SHORT;
if (e === z.UnsignedShortType) return n.UNSIGNED_SHORT;
if (e === z.IntType) return n.INT;
if (e === z.UnsignedIntType) return n.UNSIGNED_INT;
if (e === z.FloatType) return n.FLOAT;
if (null !== (t = i.get("OES_texture_half_float")) && e === z.HalfFloatType) return t.HALF_FLOAT_OES;
if (e === z.AlphaFormat) return n.ALPHA;
if (e === z.RGBFormat) return n.RGB;
if (e === z.RGBAFormat) return n.RGBA;
if (e === z.LuminanceFormat) return n.LUMINANCE;
if (e === z.LuminanceAlphaFormat) return n.LUMINANCE_ALPHA;
if (e === z.AddEquation) return n.FUNC_ADD;
if (e === z.SubtractEquation) return n.FUNC_SUBTRACT;
if (e === z.ReverseSubtractEquation) return n.FUNC_REVERSE_SUBTRACT;
if (e === z.ZeroFactor) return n.ZERO;
if (e === z.OneFactor) return n.ONE;
if (e === z.SrcColorFactor) return n.SRC_COLOR;
if (e === z.OneMinusSrcColorFactor) return n.ONE_MINUS_SRC_COLOR;
if (e === z.SrcAlphaFactor) return n.SRC_ALPHA;
if (e === z.OneMinusSrcAlphaFactor) return n.ONE_MINUS_SRC_ALPHA;
if (e === z.DstAlphaFactor) return n.DST_ALPHA;
if (e === z.OneMinusDstAlphaFactor) return n.ONE_MINUS_DST_ALPHA;
if (e === z.DstColorFactor) return n.DST_COLOR;
if (e === z.OneMinusDstColorFactor) return n.ONE_MINUS_DST_COLOR;
if (e === z.SrcAlphaSaturateFactor) return n.SRC_ALPHA_SATURATE;
if (null !== (t = i.get("WEBGL_compressed_texture_s3tc"))) {
if (e === z.RGB_S3TC_DXT1_Format) return t.COMPRESSED_RGB_S3TC_DXT1_EXT;
if (e === z.RGBA_S3TC_DXT1_Format) return t.COMPRESSED_RGBA_S3TC_DXT1_EXT;
if (e === z.RGBA_S3TC_DXT3_Format) return t.COMPRESSED_RGBA_S3TC_DXT3_EXT;
if (e === z.RGBA_S3TC_DXT5_Format) return t.COMPRESSED_RGBA_S3TC_DXT5_EXT
}
if (null !== (t = i.get("WEBGL_compressed_texture_pvrtc"))) {
if (e === z.RGB_PVRTC_4BPPV1_Format) return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
if (e === z.RGB_PVRTC_2BPPV1_Format) return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
if (e === z.RGBA_PVRTC_4BPPV1_Format) return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
if (e === z.RGBA_PVRTC_2BPPV1_Format) return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
}
if (null !== (t = i.get("WEBGL_compressed_texture_etc1")) && e === z.RGB_ETC1_Format) return t.COMPRESSED_RGB_ETC1_WEBGL;
if (null !== (t = i.get("EXT_blend_minmax"))) {
if (e === z.MinEquation) return t.MIN_EXT;
if (e === z.MaxEquation) return t.MAX_EXT
}
return 0
}, z.WebGLState = function (l, i, c) {
var n = this,
r = new z.Vector4,
e = l.getParameter(l.MAX_VERTEX_ATTRIBS),
o = new Uint8Array(e),
a = new Uint8Array(e),
s = new Uint8Array(e),
t = {},
h = null,
u = null,
d = null,
p = null,
f = null,
g = null,
m = null,
v = null,
y = !1,
A = null,
C = null,
I = null,
E = null,
_ = null,
b = null,
w = null,
T = null,
x = null,
S = null,
M = null,
R = null,
P = null,
O = null,
L = null,
D = l.getParameter(l.MAX_TEXTURE_IMAGE_UNITS),
N = void 0,
F = {},
B = new z.Vector4,
V = null,
k = null,
U = new z.Vector4,
H = new z.Vector4;
this.init = function () {
this.clearColor(0, 0, 0, 1), this.clearDepth(1), this.clearStencil(0), this.enable(l.DEPTH_TEST), l.depthFunc(l.LEQUAL), l.frontFace(l.CCW), l.cullFace(l.BACK), this.enable(l.CULL_FACE), this.enable(l.BLEND), l.blendEquation(l.FUNC_ADD), l.blendFunc(l.SRC_ALPHA, l.ONE_MINUS_SRC_ALPHA)
}, this.initAttributes = function () {
for (var e = 0, t = o.length; e < t; e++) o[e] = 0
}, this.enableAttribute = function (e) {
o[e] = 1, 0 === a[e] && (l.enableVertexAttribArray(e), a[e] = 1), 0 !== s[e] && (i.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(e, 0), s[e] = 0)
}, this.enableAttributeAndDivisor = function (e, t, i) {
o[e] = 1, 0 === a[e] && (l.enableVertexAttribArray(e), a[e] = 1), s[e] !== t && (i.vertexAttribDivisorANGLE(e, t), s[e] = t)
}, this.disableUnusedAttributes = function () {
for (var e = 0, t = a.length; e < t; e++) a[e] !== o[e] && (l.disableVertexAttribArray(e), a[e] = 0)
}, this.enable = function (e) {
!0 !== t[e] && (l.enable(e), t[e] = !0)
}, this.disable = function (e) {
!1 !== t[e] && (l.disable(e), t[e] = !1)
}, this.getCompressedTextureFormats = function () {
if (null === h && (h = [], i.get("WEBGL_compressed_texture_pvrtc") || i.get("WEBGL_compressed_texture_s3tc") || i.get("WEBGL_compressed_texture_etc1")))
for (var e = l.getParameter(l.COMPRESSED_TEXTURE_FORMATS), t = 0; t < e.length; t++) h.push(e[t]);
return h
}, this.setBlending = function (e, t, i, n, r, o, a, s) {
e === z.NoBlending ? this.disable(l.BLEND) : this.enable(l.BLEND), e === u && s === y || (e === z.AdditiveBlending ? s ? (l.blendEquationSeparate(l.FUNC_ADD, l.FUNC_ADD), l.blendFuncSeparate(l.ONE, l.ONE, l.ONE, l.ONE)) : (l.blendEquation(l.FUNC_ADD), l.blendFunc(l.SRC_ALPHA, l.ONE)) : e === z.SubtractiveBlending ? s ? (l.blendEquationSeparate(l.FUNC_ADD, l.FUNC_ADD), l.blendFuncSeparate(l.ZERO, l.ZERO, l.ONE_MINUS_SRC_COLOR, l.ONE_MINUS_SRC_ALPHA)) : (l.blendEquation(l.FUNC_ADD), l.blendFunc(l.ZERO, l.ONE_MINUS_SRC_COLOR)) : e === z.MultiplyBlending ? s ? (l.blendEquationSeparate(l.FUNC_ADD, l.FUNC_ADD), l.blendFuncSeparate(l.ZERO, l.ZERO, l.SRC_COLOR, l.SRC_ALPHA)) : (l.blendEquation(l.FUNC_ADD), l.blendFunc(l.ZERO, l.SRC_COLOR)) : s ? (l.blendEquationSeparate(l.FUNC_ADD, l.FUNC_ADD), l.blendFuncSeparate(l.ONE, l.ONE_MINUS_SRC_ALPHA, l.ONE, l.ONE_MINUS_SRC_ALPHA)) : (l.blendEquationSeparate(l.FUNC_ADD, l.FUNC_ADD), l.blendFuncSeparate(l.SRC_ALPHA, l.ONE_MINUS_SRC_ALPHA, l.ONE, l.ONE_MINUS_SRC_ALPHA)), u = e, y = s), e === z.CustomBlending ? (r = r || t, o = o || i, a = a || n, t === d && r === g || (l.blendEquationSeparate(c(t), c(r)), d = t, g = r), i === p && n === f && o === m && a === v || (l.blendFuncSeparate(c(i), c(n), c(o), c(a)), p = i, f = n, m = o, v = a)) : v = m = g = f = p = d = null
}, this.setDepthFunc = function (e) {
if (A !== e) {
if (e) switch (e) {
case z.NeverDepth:
l.depthFunc(l.NEVER);
break;
case z.AlwaysDepth:
l.depthFunc(l.ALWAYS);
break;
case z.LessDepth:
l.depthFunc(l.LESS);
break;
case z.LessEqualDepth:
l.depthFunc(l.LEQUAL);
break;
case z.EqualDepth:
l.depthFunc(l.EQUAL);
break;
case z.GreaterEqualDepth:
l.depthFunc(l.GEQUAL);
break;
case z.GreaterDepth:
l.depthFunc(l.GREATER);
break;
case z.NotEqualDepth:
l.depthFunc(l.NOTEQUAL);
break;
default:
l.depthFunc(l.LEQUAL)
} else l.depthFunc(l.LEQUAL);
A = e
}
}, this.setDepthTest = function (e) {
e ? this.enable(l.DEPTH_TEST) : this.disable(l.DEPTH_TEST)
}, this.setDepthWrite = function (e) {
C !== e && (l.depthMask(e), C = e)
}, this.setColorWrite = function (e) {
I !== e && (l.colorMask(e, e, e, e), I = e)
}, this.setStencilFunc = function (e, t, i) {
_ === e && b === t && w === i || (l.stencilFunc(e, t, i), _ = e, b = t, w = i)
}, this.setStencilOp = function (e, t, i) {
T === e && x === t && S === i || (l.stencilOp(e, t, i), T = e, x = t, S = i)
}, this.setStencilTest = function (e) {
e ? this.enable(l.STENCIL_TEST) : this.disable(l.STENCIL_TEST)
}, this.setStencilWrite = function (e) {
E !== e && (l.stencilMask(e), E = e)
}, this.setFlipSided = function (e) {
M !== e && (e ? l.frontFace(l.CW) : l.frontFace(l.CCW), M = e)
}, this.setLineWidth = function (e) {
e !== R && (l.lineWidth(e), R = e)
}, this.setPolygonOffset = function (e, t, i) {
e ? this.enable(l.POLYGON_OFFSET_FILL) : this.disable(l.POLYGON_OFFSET_FILL), !e || P === t && O === i || (l.polygonOffset(t, i), P = t, O = i)
}, this.getScissorTest = function () {
return L
}, this.setScissorTest = function (e) {
(L = e) ? this.enable(l.SCISSOR_TEST): this.disable(l.SCISSOR_TEST)
}, this.activeTexture = function (e) {
void 0 === e && (e = l.TEXTURE0 + D - 1), N !== e && (l.activeTexture(e), N = e)
}, this.bindTexture = function (e, t) {
void 0 === N && n.activeTexture();
var i = F[N];
void 0 === i && (i = {
type: void 0,
texture: void 0
}, F[N] = i), i.type === e && i.texture === t || (l.bindTexture(e, t), i.type = e, i.texture = t)
}, this.compressedTexImage2D = function () {
try {
l.compressedTexImage2D.apply(l, arguments)
} catch (e) {
console.error(e)
}
}, this.texImage2D = function () {
try {
l.texImage2D.apply(l, arguments)
} catch (e) {
console.error(e)
}
}, this.clearColor = function (e, t, i, n) {
r.set(e, t, i, n), !1 === B.equals(r) && (l.clearColor(e, t, i, n), B.copy(r))
}, this.clearDepth = function (e) {
V !== e && (l.clearDepth(e), V = e)
}, this.clearStencil = function (e) {
k !== e && (l.clearStencil(e), k = e)
}, this.scissor = function (e) {
!1 === U.equals(e) && (l.scissor(e.x, e.y, e.z, e.w), U.copy(e))
}, this.viewport = function (e) {
!1 === H.equals(e) && (l.viewport(e.x, e.y, e.z, e.w), H.copy(e))
}, this.reset = function () {
for (var e = 0; e < a.length; e++) 1 === a[e] && (l.disableVertexAttribArray(e), a[e] = 0);
t = {}, N = void 0, F = {}, M = E = C = I = u = h = null
}
}
}, {
three: 217
}],
104: [function (a, h, e) {
(function (i, e) {
"use strict";
function t(e) {
this.urls = e;
var t = i("bWVzc2FnZSBiaW5hcnlfbWVzaCB7CglyZXBlYXRlZCBjaHVua19zaW1wbGUgY2h1bmsgPSAxOwoJcmVwZWF0ZWQgY2h1bmtfcXVhbnRpemVkIHF1YW50aXplZF9jaHVuayA9IDI7Cn0KCi8vIERlZmluaXRpb24gb2YgdmVydGljZXM6IDNEIGNvb3JkaW5hdGVzLCBhbmQgMkQgdGV4dHVyZSBjb29yZGluYXRlcy4KbWVzc2FnZSB2ZXJ0aWNlc19zaW1wbGUgewoJcmVwZWF0ZWQgZmxvYXQgeHl6ID0gMSBbcGFja2VkPXRydWVdOyAgLy8geF8wLHlfMCx6XzAsIHhfMSx5XzEsel8xLCAuLi4KCXJlcGVhdGVkIGZsb2F0IHV2ID0gMiBbcGFja2VkPXRydWVdOyAgLy8gdV8wLHZfMCwgdV8xLHZfMSwgLi4uCn0KCi8vIEluZGV4ZXMgb2YgdmVydGljZXMgb2YgZmFjZXMKbWVzc2FnZSBmYWNlc19zaW1wbGUgewoJcmVwZWF0ZWQgdWludDMyIGZhY2VzID0gMSBbcGFja2VkPXRydWVdOyAvLyBpMDAsaTAxLGkwMiwgaTEwLGkxMSxpMTIsIC4uLgp9CgovLyBBIHNpbXBseSBlbmNvZGVkIGNodW5rLgovLyBUT0RPOiBhZGQgY2h1bmsgcHJvcGVyaXRlcyAoc3VjaCBhcyAicmVmbGVjdGl2ZSIpCm1lc3NhZ2UgY2h1bmtfc2ltcGxlIHsKCW9wdGlvbmFsIHZlcnRpY2VzX3NpbXBsZSB2ZXJ0aWNlcyA9IDE7CglvcHRpb25hbCBmYWNlc19zaW1wbGUgZmFjZXMgPSAyOwoJb3B0aW9uYWwgc3RyaW5nIGNodW5rX25hbWUgPSAzOwoJb3B0aW9uYWwgc3RyaW5nIG1hdGVyaWFsX25hbWUgPSA0Owp9CgovLyBRdWFudGl6ZWQgdmVyc2lvbnMgZm9sbG93OgptZXNzYWdlIHZlcnRpY2VzX3F1YW50aXplZCB7CglvcHRpb25hbCBmbG9hdCBxdWFudGl6YXRpb24gPSAxOwoJcmVwZWF0ZWQgZmxvYXQgdHJhbnNsYXRpb24gPSAyOwoJcmVwZWF0ZWQgc2ludDMyIHggPSAzIFtwYWNrZWQ9dHJ1ZV07CglyZXBlYXRlZCBzaW50MzIgeSA9IDQgW3BhY2tlZD10cnVlXTsKCXJlcGVhdGVkIHNpbnQzMiB6ID0gNSBbcGFja2VkPXRydWVdOwp9CgptZXNzYWdlIHV2X3F1YW50aXplZCB7CglvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7CglvcHRpb25hbCBmbG9hdCBxdWFudGl6YXRpb24gPSAyOwoJcmVwZWF0ZWQgc2ludDMyIHUgPSAzIFtwYWNrZWQ9dHJ1ZV07CglyZXBlYXRlZCBzaW50MzIgdiA9IDQgW3BhY2tlZD10cnVlXTsKfQoKLy8gSW5kZXhlcyBvZiB2ZXJ0aWNlcyBvZiBmYWNlcwptZXNzYWdlIGZhY2VzX2NvbXByZXNzZWQgewoJcmVwZWF0ZWQgc2ludDMyIGZhY2VzID0gMSBbcGFja2VkPXRydWVdOyAvLyBpMDAsaTAxLGkwMiwgaTEwLGkxMSxpMTIsIC4uLgp9CgptZXNzYWdlIGNodW5rX3F1YW50aXplZCB7CglvcHRpb25hbCBzdHJpbmcgY2h1bmtfbmFtZSA9IDE7CglvcHRpb25hbCBzdHJpbmcgbWF0ZXJpYWxfbmFtZSA9IDI7CglvcHRpb25hbCB2ZXJ0aWNlc19xdWFudGl6ZWQgdmVydGljZXMgPSAzOwoJcmVwZWF0ZWQgdXZfcXVhbnRpemVkIHV2cyA9IDQ7CglvcHRpb25hbCBmYWNlc19zaW1wbGUgZmFjZXMgPSA1Owp9Cg==", "base64");
this.builder = n.loadProto(t), this.decoder = this.builder.build("binary_mesh")
}
var s = a("three"),
n = a("protobufjs"),
r = a("../util/logger"),
o = (a("../util/common"), a("../util/ajax")),
l = a("../objects/Chunk"),
c = new r(e);
t.prototype = {
constructor: t,
load: function (t, i, n, r) {
return c.time("download"), o.get(t, {
responseType: "arraybuffer"
}).done(function (e) {
c.timeEnd("download"), this.parse(e, t, i, n, r)
}.bind(this)).fail(r)
},
parse: function (e, t, i, n, r) {
var o = this.readProtobuf(e);
if (!o) return r();
try {
c.time("convert to webgl"), this.convertProtobufToSceneObject(o, t, i, n, r), c.timeEnd("convert to webgl")
} catch (e) {
return c.error("failed parsing .dam"), c.error(e.message), r()
}
},
readProtobuf: function (e) {
var t;
try {
c.time("parse proto"), t = this.decoder.decode(e), c.timeEnd("parse proto")
} catch (e) {
return c.error("failed parsing proto for .dam"), c.error(e.message), null
}
return t
},
convertProtobufToSceneObject: function (e, i, t, n, r) {
if (0 === e.chunk.length) return c.warn("No chunks in damfile..."), t([]);
var o = new s.Matrix4;
o.set(1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1);
var a = e.chunk.map(function (e) {
var t = new s.BufferGeometry;
return t.addAttribute("position", new s.BufferAttribute(new Float32Array(e.vertices.xyz, 0, 3), 3)), 0 < e.vertices.uv.length && t.addAttribute("uv", new s.BufferAttribute(new Float32Array(e.vertices.uv, 0, 2), 2)), t.setIndex(new s.BufferAttribute(new Uint32Array(e.faces.faces, 0, 1), 1)), t.applyMatrix(o), t.computeBoundingBox(), new l({
geometry: t,
textureName: e.material_name,
name: e.chunk_name,
meshUrl: i
})
});
return a ? t(a) : (c.error(".dam protobuf came out with no chunks..."), r())
}
}, h.exports = t
}).call(this, a("buffer").Buffer, "/js/loaders/DamLoader.js")
}, {
"../objects/Chunk": 144,
"../util/ajax": 181,
"../util/common": 185,
"../util/logger": 189,
buffer: 198,
protobufjs: 214,
three: 217
}],
105: [function (n, r, e) {
(function (e) {
"use strict";
var t = (n("three"), n("../settings"), n("../util/browser"), n("./DamLoader")),
i = n("../util/logger"),
u = (n("../ab"), new i(e));
r.exports = {
getLoaders: function () {
return [
["_50k", ".dam", t],
["", ".dam", t]
]
},
load: function (e, t, i, n, r, o) {
var a = this.getLoaders()[o = o || 0];
if (a) {
var s = a[0],
l = a[1],
c = new a[2](t),
h = t.get(e + s + l);
h ? (u.debug("Trying " + s + l), c.load(h, i, n, function () {
this.load(e, t, i, n, r, ++o)
}.bind(this))) : (u.debug("Skipping " + l + ", not available"), this.load(e, t, i, n, r, ++o))
} else r && r("No suitable model file found...")
}
}
}).call(this, "/js/loaders/ModelLoader.js")
}, {
"../ab": 3,
"../settings": 166,
"../util/browser": 182,
"../util/logger": 189,
"./DamLoader": 104,
three: 217
}],
106: [function (i, n, e) {
(function (e) {
"use strict";
var l = i("../util/common"),
c = i("../util/texture"),
h = i("../util/browser"),
t = i("../util/logger"),
u = i("../settings"),
d = new t(e);
n.exports = {
load: function (i, n) {
if (!i.chunks[0] || !i.chunks[0].meshUrl) return $.when();
var r = l.countUnique(i.chunks.map(function (e) {
return e.textureName
})),
e = -1 !== i.chunks[0].meshUrl.indexOf("_50k") ? "_50k" : "",
t = "_50k" == e ? "high" : "low";
u.minimalMemoryMode && "high" === t && (h.detectSamsungS6() ? (d.warn("Galaxy S6 cannot handle large textures, turning down quality."), t = "low") : r > u.maxMobileTextures && (d.warn("Model probably too large for mobile, turning down quality."), t = "low"));
var o = i.data.job.uuid + e + "_texture_jpg_" + t + "/",
a = $.Deferred(),
s = 0;
return i.chunks.forEach(function (e) {
if (!e.material.map && e.textureName) {
var t = i.urls.get(o + e.textureName);
e.setTextureMap(c.load(t, function (e, t) {
e || (n.push(t), s++, a.notify(s, r), s === r && a.resolve())
}.bind(this, c.isLoaded(t))))
}
}), a.promise()
}
}
}).call(this, "/js/loaders/ModelTextureLoader.js")
}, {
"../settings": 166,
"../util/browser": 182,
"../util/common": 185,
"../util/logger": 189,
"../util/texture": 194
}],
107: [function (s, l, e) {
(function (n, e) {
"use strict";
function t(e) {
this.model = e, this.modelDataPath = this.model.urls.get("vision.modeldata"), this.sweepLocationsPath = this.model.urls.get("sweep_locations.csv");
var t = n("Ly8gUHJvdG9jb2wgQnVmZmVyIGZvciBwdWNrIHZpc2liaWxpdHkgYW5kIHJlbGF0ZWQgZGF0YQovLwovLyBUbyBkdW1wIG91dCBhIGJpbnJheSBtYW5pZmVzdCBpbiB0ZXh0IGZvcm1hdCwgeW91IGNhbiB1c2UgcHJvdG9jIGRpcmVjdGx5OgovLyAgIHByb3RvYyAtLXByb3RvX3BhdGggfi9kZXYvbXBfdmlzaW9uLyAgLS1kZWNvZGU9ZW9zLnN0b3JhZ2UuVmlzaW9uTW9kZWxkYXRhIH4vZGV2L21wX3Zpc2lvbi9lb3Mvc3RvcmFnZS92aXNpb25fbW9kZWxkYXRhLnByb3RvIDwgdmlzaW9uLm1vZGVsZGF0YQoKLy8gcGFja2FnZSBlb3Muc3RvcmFnZTsKCi8vIGltcG9ydCAiZW9zL2luZnJhL2NvbW1vbi5wcm90byI7Ci8vIFRoZSBmb2xsb3dpbmcgd2VyZSBtYW51YWxseSBleHRyYWN0ZWQgaGVyZSwgSlMgZG9lcyBub3QgbGlrZSBwcm90b2J1ZiBpbXBvcnRzCgptZXNzYWdlIEFmZmluZTNmIHsKCW9wdGlvbmFsIFF1YXRlcm5pb25mIHJvdGF0aW9uID0gMTsKCW9wdGlvbmFsIFZlY3RvcjNmIHRyYW5zbGF0aW9uID0gMjsKfQoKbWVzc2FnZSBRdWF0ZXJuaW9uZiB7CglvcHRpb25hbCBmbG9hdCB3ID0gMTsKCW9wdGlvbmFsIGZsb2F0IHggPSAyOwoJb3B0aW9uYWwgZmxvYXQgeSA9IDM7CglvcHRpb25hbCBmbG9hdCB6ID0gNDsKfQoKbWVzc2FnZSBWZWN0b3IzZiB7CglvcHRpb25hbCBmbG9hdCB4ID0gMTsKCW9wdGlvbmFsIGZsb2F0IHkgPSAyOwoJb3B0aW9uYWwgZmxvYXQgeiA9IDM7Cn0KCi8vCi8vIE9uZSBzd2VlcCAvIHBhbm8KLy8KbWVzc2FnZSBTd2VlcExvY2F0aW9uIHsKCW9wdGlvbmFsIGJ5dGVzIHV1aWQgPSAxOyAgLyogdXVpZCAqLwoJb3B0aW9uYWwgQWZmaW5lM2YgcG9zZSA9IDI7ICAvKiBjYW1lcmEgcG9zZSAoeCwgeSx6KSBpbiBtZXRlciBhbmQgYSBxdWF0ZXJuaW9uKi8KCW9wdGlvbmFsIFZlY3RvcjNmIHB1Y2sgPSAzOyAgLyogcHVjayBsb2NhdGlvbiAtIHggYW55IGlzIGdlbmVyYWxseSB0aGUgc2FtZSBhcyBwb3NlLCB6IGlzIHRoZSBoZWlnaHQgb2YgdGhlIGNsb3Nlc3QgZmxvb3IgdW5kZXIgdGhlIGNhbWVyYSAqLwoJb3B0aW9uYWwgaW50MzIgZ3JvdXAgPSA0OyAgLyogZmxvb3IgaW5kZXggKi8KCW9wdGlvbmFsIGludDMyIHN1Ymdyb3VwID0gNTsgIC8qIHJvb20gaW5kZXggKi8KCXJlcGVhdGVkIGludDMyIHZpc2libGVzID0gNjsgIC8qIGxpc3Qgb2YgaW5kaWNlcyB0byBhbGwgcHVja3MgdmlzaWJsZSBmcm9tIHRoaXMgcHVjayAqLwoJcmVwZWF0ZWQgZmxvYXQgc2NvcmVzID0gNzsgLyogdXNlZCBhcyBwYXJ0IG9mIHNjb3JpbmcgZnVuY3Rpb24gZm9yIGRldGVybWluaW5nIHdoaWNoIHB1Y2sgdG8gZ28gdG8gbmV4dCAqLwogIG9wdGlvbmFsIHN0cmluZyBzd2VlcF9uYW1lID0gODsKCiAgLy8gV2l0aCBvdXRkb29yIHBhbm9zLCB3ZSBoYXZlIGEgY291cGxlIG9mIGRpZmZlcmVudCBzaXR1YXRpb25zIGZvciBhbGlnbm1lbnQuIFRoZSBjb21tb24KICAvLyBjYXNlIGlzIHRoYXQgdGhlIHBhbm8gYWxpZ25lZCBub3JtYWxseS4gSXQgY291bGQgYWxzbyBoYXZlIGJlZW4gcGxhY2VkIG1hbnVhbGx5IGluCiAgLy8gQ2FwdHVyZUFwcCBvciBXb3Jrc2hvcCwgb3IgbGVmdCB1bmFsaWduZWQgZm9yIGhpZ2hsaWdodC1yZWVsIHZpZXdpbmcuCiAgZW51bSBBbGlnbm1lbnRUeXBlCiAgewogICAgICBVTktOT1dOID0gMDsKICAgICAgQUxJR05FRCA9IDE7CiAgICAgIFVOQUxJR05FRCA9IDI7CiAgICAgIE1BTlVBTExZX1BMQUNFRCA9IDM7CiAgfQogIG9wdGlvbmFsIEFsaWdubWVudFR5cGUgYWxpZ25tZW50X3R5cGUgPSA5IFtkZWZhdWx0ID0gQUxJR05FRF07Cn0KCm1lc3NhZ2UgU3ViZ3JvdXBJbmZvIHsKCW9wdGlvbmFsIGludDMyIHN1Ymdyb3VwID0gMTsKCW9wdGlvbmFsIGZsb2F0IGFyZWEgPSAyOyAvKiBmbG9vciBhcmVhIGluIG1eMiAoc3F1YXJlIG1ldGVyYWdlKSAqLwp9CgovKiBBbGwgcHVja3MgaW4gYSBtb2RlbC4gUHVja3MgYXJlIHN0b3JlZCBpbiBzY2FubmluZyBvcmRlci4gKi8KbWVzc2FnZSBWaXNpb25Nb2RlbGRhdGEgewoJcmVwZWF0ZWQgU3dlZXBMb2NhdGlvbiBzd2VlcExvY2F0aW9ucyA9IDE7CglyZXBlYXRlZCBTdWJncm91cEluZm8gc3ViZ3JvdXBJbmZvcyA9IDI7Cn0K", "base64"),
i = r.loadProto(t);
this.decoder = i.build("VisionModeldata")
}
var r = s("protobufjs"),
i = s("../util/ajax"),
o = (s("../util/common"), s("../util/math")),
a = new(s("../util/logger"))(e);
t.prototype.load = function () {
return this.modelDataPath ? (a.info("Using vision.modeldata"), this.loadVisionModelData()) : this.sweepLocationsPath ? (a.warn("Using sweep_locations.csv"), this.loadSweepLocationsCSV()) : (a.warn("No sweep file found"), $.when([]))
}, t.prototype.loadVisionModelData = function () {
return i.get(this.modelDataPath, {
responseType: "arraybuffer"
}).then(function (e) {
var t;
try {
t = this.decoder.decode(e)
} catch (e) {
return a.warn("Could not decode vision.modeldata, trying sweep_locations.csv"), this.loadSweepLocationsCSV()
}
var i = t.sweepLocations.map(function (e) {
return {
uuid: e.uuid.toUTF8().replace(/-/g, ""),
position: {
x: e.pose.translation.x,
y: e.pose.translation.y,
z: e.pose.translation.z
},
quaternion: {
x: e.pose.rotation.x,
y: e.pose.rotation.y,
z: e.pose.rotation.z,
w: e.pose.rotation.w
},
puck: {
x: e.puck.x,
y: e.puck.y,
z: e.puck.z
},
floor: e.group,
neighbours: e.visibles,
alignmentType: e.alignment_type
}
}).map(function (e) {
return e.position = o.convertVisionVector(e.position), e.quaternion = o.convertVisionQuaternion(e.quaternion), e.puck = o.convertVisionVector(e.puck), e
});
return i.forEach(function (e) {
e.neighbours = e.neighbours.map(function (e) {
return i[e].uuid
})
}), i
}.bind(this), function () {
return a.warn("Could not load vision.modeldata, trying sweep_locations.csv"), this.loadSweepLocationsCSV()
}.bind(this))
}, t.prototype.loadSweepLocationsCSV = function () {
return i.get(this.sweepLocationsPath).then(function (e) {
return e.split("\n").map(function (e) {
return e.split(", ")
}).filter(function (e) {
return 1 < e.length
}).map(function (e) {
return {
uuid: e[0],
position: {
x: parseFloat(e[1]),
y: parseFloat(e[2]),
z: parseFloat(e[3])
},
quaternion: {
x: parseFloat(e[4]),
y: parseFloat(e[5]),
z: parseFloat(e[6]),
w: parseFloat(e[7])
}
}
}).map(function (e) {
return e.position = o.convertVisionVector(e.position), e.quaternion = o.convertVisionQuaternion(e.quaternion), e
})
}).fail(function () {
a.warn("Could not load sweep_locations.csv, no sweeps loaded.")
})
}, l.exports = t
}).call(this, s("buffer").Buffer, "/js/loaders/SweepDataLoader.js")
}, {
"../util/ajax": 181,
"../util/common": 185,
"../util/logger": 189,
"../util/math": 190,
buffer: 198,
protobufjs: 214
}],
108: [function (s, l, e) {
(function (e) {
"use strict";
function t() {
this.locale = null
}
var i = s("../settings"),
n = s("../util/common"),
r = s("../util/logger"),
o = s("../enum/Locale"),
a = new r(e);
t.prototype.init = function () {
var e;
switch (i.languageTag) {
case null:
case "en":
case o.EN_US:
this.locale = o.EN_US, e = s("./strings-en-US");
break;
case "es":
case o.ES_MX:
this.locale = o.ES_MX, e = s("./strings-es-MX");
break;
case "fr":
case o.FR_FR:
this.locale = o.FR_FR, e = s("./strings-fr-FR");
break;
case "de":
case o.DE_DE:
this.locale = o.DE_DE, e = s("./strings-de-DE");
break;
case "ru":
case o.RU_RU:
this.locale = o.RU_RU, e = s("./strings-ru-RU");
break;
case "cn":
case o.CN_CN:
this.locale = o.CN_CN, e = s("./strings-cn-CN");
break;
case "jp":
case o.JP_JP:
this.locale = o.JP_JP, e = s("./strings-jp-JP");
break;
default:
a.info("Unsupported language tag, defaulting to 'en-US'"), this.locale = o.EN_US, e = s("./strings-en-US")
}
a.info("Using locale '" + this.locale + "'"), n.extendObject(this, e)
}, t.prototype.localizeGUI = function () {
var e = document.querySelector("#gui-parent");
this.localizeTree(e), this.localizeLoadingText()
}, t.prototype.localizeLoadingText = function () {
document.querySelector(".guide").show();
document.querySelector("#help-dialog").classList.add(this.locale), document.querySelector("#interaction-modal").classList.add(this.locale), document.querySelector("#gui").classList.add(this.locale)
}, t.prototype.localizeTree = function (e) {
var t, i, n = /{\[{ ?(\w+) ?}\]}/;
if (e.nodeType === Node.TEXT_NODE)(t = e.data.match(n)) && (i = t[1], e.data = this.localizeText(i) || i);
else if (e.nodeType === Node.ELEMENT_NODE) {
var r = e.getAttribute("title");
r && ((t = r.match(n)) && (i = t[1], e.setAttribute("title", this.localizeText(i) || i)))
}
for (e = e.firstChild; e;) this.localizeTree(e), e = e.nextSibling
}, t.prototype.localizeText = function (e) {
var t = this[e];
return t || this.locale === o.EN_US || (a.warn("Localization key '" + e + "' not available for locale '" + this.locale + "', defaulting to English."), t = s("./strings-en-US")[e]), t || a.warn("Localization key '" + e + "' not available for locale 'en-US'"), t
}, l.exports = new t
}).call(this, "/js/localization/localize.js")
}, {
"../enum/Locale": 31,
"../settings": 166,
"../util/common": 185,
"../util/logger": 189,
"./strings-cn-CN": 109,
"./strings-de-DE": 110,
"./strings-en-US": 111,
"./strings-es-MX": 112,
"./strings-fr-FR": 113,
"./strings-jp-JP": 114,
"./strings-ru-RU": 115
}],
109: [function (e, t, i) {
"use strict";
t.exports = {
PAGE_TITLE: "",
LOADING: "正在加载",
PRESENTED_BY_CAPS: "呈现者:",
POWERED_BY: "技术支持:",
POWERED_BY_CAPS: "技术支持:",
DESKTOP_SHORT_CTA: "点击一次以探索这个 3D 空间。",
MOBILE_SHORT_CTA: "点击一次以探索这个 3D 空间。",
PRESENTED_BY: "呈现者:",
MORE: "更多 ",
LESS: "更少 ",
TAG_CONTENT: "tag™ 内容",
SHOW: "显示",
HIDE: "隐藏",
DOLLHOUSE: "场景屋",
FLOOR_PLAN: "楼层平面图",
OPEN_HIGHLIGHTS: "打开精彩片段",
CLOSE_HIGHLIGHTS: "关闭",
PREVIOUS: "上一个",
PLAY: "播放",
PAUSE: "暂停",
NEXT: "下一个",
EXPLORE_3D_SPACE: "探索 3D 空间",
VIEW_DOLLHOUSE: "观看场景屋",
SOCIAL_SHARING: "分享这个空间",
VIEW_IN_VR: "以 VR 观看",
VIEW_FULLSCREEN: "全屏观看",
EXIT_FULLSCREEN: " 退出全屏",
ZOOM_IN: "放大",
ZOOM_OUT: "缩小",
FLOOR_NAME: "楼层",
FLOOR_ALL: "ALL",
FLOOR_Lang: ["Floor", ""],
TERMS: "条款",
PORT_TERMS: "port 条款",
TERMS_OF_USE: "使用条款",
CLOSE_TERMS: "关闭",
TERMS_TEXT_FILE: "terms-cn-CN.html",
TERMS_FAIL: "无法获取条款。请确保您有互联网连接以查看使用条款。",
WEBVR_FOR_DAYDREAM: "用于 Daydream 视图",
WEBVR_ENTER_WEBVR: "进入 VR",
WEBVR_DIFFERENT_HEADSET: "有其他耳机吗?",
WEBVR_LEARN_MORE: "了解更多",
WEBVR_VIEW_SPACE: "在 VR 中观看空间",
WEBVR_DAYDREAM_VIEW: "Daydream 视图",
WEBVR_DAYDREAM_PHONE: "支持 Daydream 的手机",
WEBVR_FOR_CARDBOARD: "用于 Google Cardboard",
WEBVR_VIEW_CARDBOARD: "或在 Google Cardboard 上观看",
VR_VIEW_SPACE: "在虚拟现实中观看空间",
VR_LEARN_MORE_CAPS: "了解更多",
VR_PREVIOUS_CAPS: "上一个’,",
VR_NEXT_CAPS: "下一个",
VR_GOT_IT_CAPS: "明白了",
VR_SHOW_SUPPORTED: "点击以使用 VR 观看空间",
VR_SHOW_UNSUPPORTED: "很遗憾,您的设备不符合在 VR 中观看空间的最低要求。",
VR_SHOW_IOS_1: "点击以使用 VR 观看空间",
VR_SHOW_IOS_2: "需要有 port VR 应用程序和兼容的 iPhone 才能观看",
VR_WHAT_YOU_NEED: "关于...您需要什么",
VR_NEED_CARDBOARD: "您使用 Google Cardboard 时需要什么",
VR_NEED_SAMSUNG: "您使用 Samsung Gear VR 时需要什么",
VR_NEED_DAYDREAM: "需要事先与 DAYDREAM VIEW 配对",
VR_NEED_DAYDREAM_PHONE: "支持 Daydream 的手机",
VR_GOOGLE_CARDBOARD: "Google Cardboard",
VR_GOOGLE_DAYDREAM: "Google Daydream",
VR_APP: "port VR 应用程序",
VR_SAMSUNG_GEAR_VR: "Samsung Gear VR",
VR_COMPATIBLE_IPHONES_1: "iPhones",
VR_COMPATIBLE_IPHONES_2: "iPhone 5s 和更高版本,运行 iOS 9.1 和更高版本",
VR_COMPATIBLE_IPHONES_3: "兼容的 iPhone",
VR_COMPATIBLE_ANDROID: "兼容的 Android 设备",
VR_COMPATIBLE_ANDROID_LONG: "4.5-5.5 英寸、运行 Android OS 4.4.4 和更高版本的兼容型 Android 设备显示屏",
VR_ANDROID_DETAIL: "4.5 至 5.5 英寸、运行 Android OS 4.4.4 和更高版本的显示屏",
VR_ANDROID_DVICES: "Android 设备",
VR_COMPATIBLE_SAMSUNG: "兼容的 Samsung 设备",
VR_SAMSUNG_DETAIL: "Galaxy S6 和更高版本",
VR_APP_FOR_CARDBOARD: "用于 Google Cardboard 的 port VR 应用程序",
VR_APP_FOR_SAMSUNG: "用于 Gear VR 的 port VR 应用程序",
VR_APP_FOR_ANDROID: "用于 Android 手机的 port VR 应用程序",
VR_APP_OPEN: "请使用 port VR 应用程序打开",
VR_DOWNLOAD_HERE: "在此下载",
VR_REQUIRE_HEADSET: "需要一副 VR 耳机并安装用于 Android 的 port VR 应用程序",
VR_REDIRECT_TO_STORE: "如果未安装应用程序,您将跳转到应用程序商店。",
VR_IMPROPER_EMBED: "port 空间未正确嵌入,无法在您的 Web 浏览器支持 VR。",
VR_OPEN_ANDROID_LINK: "在您的手机上打开链接",
VR_ANDROID_OPTIONS: "可用的 VR 耳机选项",
SHARE_TO: "分享到",
SHARE_LINK: "直接链接",
SHARE_EXPLORE: "探索",
SHARE_AT: "在",
SHARE_WITH: "使用",
SHARE_3D: "以 3D",
SHARE_COPIED: "已复制!",
ERROR_BROWSER_SOLUTION: "安装更新的浏览器以探索 3D。",
ERROR_BROWSER_EXPLANATION: "WebGL 需要现代的浏览器。",
ERROR_GENERIC_PROBLEM: "糟糕,出现问题。",
ERROR_GENERIC_SOLUTION: "重新启动您的浏览器。",
ERROR_GENERIC_ACTIONS_1: "如果问题仍然存在,",
ERROR_GENERIC_ACTIONS_2: "请安装支持的浏览器",
ERROR_GENERIC_ACTIONS_3: " 或",
ERROR_GENERIC_ACTIONS_4: "查看我们的故障排除指南",
ERROR_WEBGL_UNSUPPORTED_PROBLEM: "浏览器不受支持。",
ERROR_WEBGL_IOS_PROBLEM: "iOS 版本不受支持。",
ERROR_WEBGL_IOS_SOLUTION: "升级到 iOS 8 或更高版本以在 3D 中探索。",
ERROR_WEBGL_IOS_ACTIONS_1: "点击 ",
ERROR_WEBGL_IOS_ACTIONS_2: "设置 > 通用 > 软件更新",
ERROR_WEBGL_SAFARI_PROBLEM: "启用 WebGL 以在 3D 中探索。",
ERROR_WEBGL_SAFARI_ACTIONS_1: "单击",
ERROR_WEBGL_SAFARI_ACTIONS_2: "菜单栏中的首选项 > 高级 > 显示开发菜单",
ERROR_WEBGL_SAFARI_ACTIONS_3: "然后单击",
ERROR_WEBGL_SAFARI_ACTIONS_4: "开发 > 启用 WebGL",
ERROR_MISSING_URLS_PROBLEM: "糟糕,没有此模型的全景。",
ERROR_MISSING_URLS_EXPLANATION: "这是较早的模型。网站所有者可能正在开发一种新模型。",
ERROR_LOADING_FAILED_PROBLEM: "糟糕,模式不可用。",
ERROR_LOADING_FAILED_ACTIONS_1: "如果问题仍然存在,",
ERROR_LOADING_FAILED_ACTIONS_2: "查看我们的故障排除指南",
ERROR_MAINTENANCE_PROBLEM: "正在进行维护",
ERROR_MAINTENANCE_SOLUTION: "请过几分钟再来。",
LINK_TO_LOCATION: "地点链接",
MENU_COPY: "复制",
LINK_ALERT_COPY: "请使用 CTRL/CMD + C 复制。",
ROTATE: "旋转",
MOVE: "移动",
INSIDE: "内部",
ZOOM: "缩放",
HELP: "小帮手",
HELP_NAVIGATION_TAB: "导航",
HELP_MORE_HELP_TAB: "更多帮助",
HELP_DESKTOP_PANORAMA_1A: "单击并拖动以环顾空间。",
HELP_DESKTOP_PANORAMA_2A: "单击整个空间内的圆环以四处移动。",
HELP_DESKTOP_PANORAMA_3A: "使用鼠标滚轮来放大和缩小。",
HELP_DESKTOP_PANORAMA_1B: "或者,使用箭头键向左向右转。",
HELP_DESKTOP_PANORAMA_2B: "或者,使用箭头键向前移动和向后移动。",
HELP_DESKTOP_PANORAMA_3B: "或者,使用加号和减号键来放大和缩小。",
HELP_DESKTOP_360_2A: "单击内部视图图标以进入空间。",
HELP_DESKTOP_360_2B: "或者,按 1 号键进入内部视图。 ",
HELP_DESKTOP_DOLLHOUSE_1A: "左键单击并向左、向右、向上和向下拖动以旋转场景屋。",
HELP_DESKTOP_DOLLHOUSE_2A: "右键单击并向左、向右、向上和向下拖动以改变场景屋在屏幕上的位置。",
HELP_DESKTOP_DOLLHOUSE_3A: "使用鼠标滚轮来放大和缩小。",
HELP_DESKTOP_DOLLHOUSE_1B: "或者,使用箭头键来旋转场景屋。",
HELP_DESKTOP_FLOORPLAN_1A: "左键单击并向左、向右、向上和向下拖动以改变楼层平面图在屏幕上的位置。",
HELP_DESKTOP_FLOORPLAN_2A: "右键单击并向左或向右拖动以旋转楼层平面图。",
HELP_DESKTOP_FLOORPLAN_3A: "使用鼠标滚轮来放大和缩小。",
HELP_DESKTOP_FLOORPLAN_2B: "或者,使用箭头键以向左或向右旋转。",
HELP_DESKTOP_FLOORPLAN_3B: "或者,使用箭头键来放大和缩小。",
HELP_MOBILE_PANORAMA_1: "触摸并拖动以环顾空间。",
HELP_MOBILE_PANORAMA_2: "点击整个空间内的圆环以四处移动。",
HELP_MOBILE_3: "使用捏合手势来放大和缩小。",
HELP_MOBILE_360_2: "点击内部视图图标以进入空间。",
HELP_MOBILE_DOLLHOUSE_1: "触摸并向上、向下、向左和向右拖动以旋转场景屋。",
HELP_MOBILE_DOLLHOUSE_2: "用两指触摸并拖动以定位场景屋。",
HELP_MOBILE_FLOORPLAN_1: "触摸并拖动以定位楼层平面图。",
HELP_MOBILE_FLOORPLAN_2: "用两指触摸并拖动以旋转楼层平面图。",
HELP_MORE_HLR_A: "精彩片段集锦",
HELP_DESKTOP_MORE_HLR_B: "打开以使用缩略图图像在空间中流览。",
HELP_MORE_DOLLHOUSE_A: "场景屋",
HELP_DESKTOP_MORE_DOLLHOUSE_B: "单击以查看和旋转 3D 内整个空间的俯视图。",
HELP_MOBILE_MORE_DOLLHOUSE_B: "点击以查看和旋转 3D 内整个空间的俯视图。",
HELP_MORE_FLOORS_A: "楼层选择器",
HELP_DESKTOP_MORE_FLOORS_B: "在空间中的楼层之间切换。",
HELP_MORE_TAG_A: "tag™ 贴文",
HELP_DESKTOP_MORE_TAG_B: "单击或悬停鼠标以查看空间中的功能信息。",
HELP_MOBILE_MORE_TAG_B: "点击以查看空间中的功能信息。",
HELP_MORE_ZOOM_A: "缩放控件",
HELP_DESKTOP_MORE_ZOOM_B: "使用这些控件来放大和缩小或使用滚轮。",
HELP_MORE_TOUR_A: "导览控件",
HELP_DESKTOP_MORE_TOUR_B: "通过导览播放、暂停以及向前和向后流览。",
HELP_MORE_INSIDE_A: "内部视图",
HELP_DESKTOP_MORE_INSIDE_B: "单击以探索空间内部。",
HELP_MOBILE_MORE_INSIDE_B: "点击以探索空间内部。",
HELP_MORE_VR_A: "VR 模式",
HELP_DESKTOP_MORE_VR_B: "单击以在虚拟现实中启动空间。",
HELP_MOBILE_MORE_VR_B: "点击以在虚拟现实中启动空间。",
HELP_MORE_360_A: "360° 视图",
HELP_DESKTOP_MORE_360_B: "单击精彩片段集锦中的 360 视图中以观看室外场景。",
HELP_MOBILE_MORE_360_B: "点击精彩片段集锦中的 360 视图中以观看室外场景。",
HELP_MORE_FULLSCREEN_A: "全屏",
HELP_DESKTOP_MORE_FULLSCREEN_B: "将 3D Showcase 扩展到全屏。",
CLOSE: "关闭"
}
}, {}],
110: [function (e, t, i) {
"use strict";
t.exports = {
PAGE_TITLE: "",
LOADING: "Lädt",
PRESENTED_BY_CAPS: "PRÄSENTIERT VON",
POWERED_BY: "Angetrieben von",
POWERED_BY_CAPS: "ANGETRIEBEN VON",
DESKTOP_SHORT_CTA: "Sehen sie sich in diesem 3D Raum um.",
MOBILE_SHORT_CTA: "Sehen sie sich in diesem 3D Raum um.",
PRESENTED_BY: "Präsentiert von ",
MORE: "Mehr ",
LESS: "Weniger ",
TAG_CONTENT: "tag™ Inhalt",
SHOW: "Anzeigen",
HIDE: "Verbergen",
DOLLHOUSE: "Puppenhaus",
FLOOR_PLAN: "Grundriss",
OPEN_HIGHLIGHTS: "Highlights anzeigen",
CLOSE_HIGHLIGHTS: "Schließen",
PREVIOUS: "Vorheriges",
PLAY: "Abspielen",
PAUSE: "Pausieren",
NEXT: "Nächstes",
EXPLORE_3D_SPACE: "Innenraum betreten",
VIEW_DOLLHOUSE: "Puppenhaus ansehen",
SOCIAL_SHARING: "Teilen Sie diesen Raum",
VIEW_IN_VR: "In VR ansehen",
VIEW_FULLSCREEN: "Ansicht im Vollbildmodus",
EXIT_FULLSCREEN: "Beenden des Vollbildmodus",
ZOOM_IN: "Vergrößern",
ZOOM_OUT: "Verkleinern",
FLOOR_NAME: "Etage ",
FLOOR_ALL: "Alle",
TERMS: "Bedingungen",
PORT_TERMS: "port Bedingungen",
TERMS_OF_USE: "Nutzungsbedingungen",
TERMS_TEXT_FILE: "terms-de-DE.html",
CLOSE_TERMS: "Schließen",
TERMS_FAIL: "Konnte die Nutzungsbedingungen nicht abrufen. Bitte stellen Sie sicher, dass Sie zum Internet verbunden sind.",
HELP: "Hilfe",
HELP_NAVIGATION_TAB: "Navigation",
HELP_MORE_HELP_TAB: "Hilfe-Details",
CLOSE: "Schließen",
HELP_DESKTOP_PANORAMA_1A: "Klicken und ziehen Sie um sich im Raum umzusehen.",
HELP_DESKTOP_PANORAMA_2A: "Klicken Sie auf die Ringe im Raum um sich zu bewegen.",
HELP_DESKTOP_PANORAMA_3A: "Verwenden Sie das Scrollrad zum Vergrößern und Verkleinern.",
HELP_DESKTOP_PANORAMA_1B: "Oder verwenden Sie die Pfeiltasten um sich nach links und rechts zu bewegen.",
HELP_DESKTOP_PANORAMA_2B: "Oder verwenden Sie die Pfeiltasten um sich vorwärts und rückwärts zubewegen.",
HELP_DESKTOP_PANORAMA_3B: "Oder verwenden Sie die Plus- und Minus-Tasten zum Vergrößern und Verkleinern.",
HELP_DESKTOP_360_2A: "Klicken Sie die Innenansicht ikone, um diesen Raum zu starten .",
HELP_DESKTOP_360_2B: "Oder, drücken Sie die 1-Taste um die Innenraumansicht zu starten.",
HELP_DESKTOP_DOLLHOUSE_1A: "Klicken Sie mit der linken Maustaste und ziehen Sie nach links, rechts, oben und unten um das Puppenhaus zu drehen.",
HELP_DESKTOP_DOLLHOUSE_2A: "Klicken mit der rechten Maustaste und ziehen Sie nach links, rechts, oben und unten um die Position des Puppenhauses zu ändern.",
HELP_DESKTOP_DOLLHOUSE_3A: "Verwenden Sie das Scrollrad zum Vergrößern und Verkleinern.",
HELP_DESKTOP_DOLLHOUSE_1B: "Oder verwenden Sie die Pfeiltasten um das Puppenhaus zu drehen.",
HELP_DESKTOP_FLOORPLAN_1A: "Klicken mit der linken Maustaste und ziehen Sie nach links, rechts, oben und unten um die Position des Grundrisses auf zu ändern.",
HELP_DESKTOP_FLOORPLAN_2A: "Klicken Sie mit der rechten Maustaste und ziehen Sie nach links oder rechts um den Grundriss zu drehen.",
HELP_DESKTOP_FLOORPLAN_3A: "Verwenden Sie das Scrollrad zum Vergrößern und Verkleinern.",
HELP_DESKTOP_FLOORPLAN_2B: "Oder verwenden Sie die Pfeiltasten um das Modell nach links oder rechts zu drehen.",
HELP_DESKTOP_FLOORPLAN_3B: "Oder verwenden Sie die Pfeiltasten zum Vergrößern und Verkleinern.",
HELP_MOBILE_PANORAMA_1: "Berühren und ziehen an dem Raum um sich umzusehen.",
HELP_MOBILE_PANORAMA_2: "Klicken Sie auf die Ringe im Raum, um sich zu bewegen.",
HELP_MOBILE_3: "Benutzen Sie die Zoom-Gäste zum Vergrößern und Verkleinern.",
HELP_MOBILE_360_2: "Tippen Sie die Innenansicht ikone, um diesen Raum zu starten.",
HELP_MOBILE_DOLLHOUSE_1: "Berühren und nach oben, unten, links und rechts ziehen um das Puppenhaus zu drehen.",
HELP_MOBILE_DOLLHOUSE_2: "Berühren und mit zwei Fingern ziehen um das Puppenhaus zu positionieren.",
HELP_MOBILE_FLOORPLAN_1: "Berühren und ziehen, um den Grundriss zu positionieren.",
HELP_MOBILE_FLOORPLAN_2: "Berühren und ziehen mit zwei Fingern, um den Grundriss zu drehen.",
HELP_MORE_HLR_A: "Liste das Highlight",
HELP_DESKTOP_MORE_HLR_B: "Öffnen um durch den Raum mit Vorschau-Bildern zu navigieren.",
HELP_MORE_DOLLHOUSE_A: "Puppenhaus Ansicht",
HELP_DESKTOP_MORE_DOLLHOUSE_B: "Klicken Sie um die von oben nach unten Sicht des gesamten Raumes in 3D anzuzeigen und zu drehen.",
HELP_MOBILE_MORE_DOLLHOUSE_B: "Tippen Sie um die von oben nach unten Sicht des gesamten Raumes in 3D anzuzeigen und zu drehen.",
HELP_MORE_FLOORS_A: "Etage auswählen",
HELP_DESKTOP_MORE_FLOORS_B: "Zwischen den Etagen im Raum wechseln.",
HELP_MORE_TAG_A: "tag™ Posts",
HELP_DESKTOP_MORE_TAG_B: "Klicken Sie auf oder bewegen Sie Ihren Mauszeiger über die Informationen über die Funktionen im Raum.",
HELP_MOBILE_MORE_TAG_B: "Tippen Sie für Informationen über die Funktionen im Raum.",
HELP_MORE_ZOOM_A: "Zoom Steuerung",
HELP_DESKTOP_MORE_ZOOM_B: "Verwenden Sie diese Steuerung oder das Scrollrad zum Vergrößern und Verkleinern.",
HELP_MORE_TOUR_A: "Tour Steuerung",
HELP_DESKTOP_MORE_TOUR_B: "Abspielen, pausieren und vorwärts und rückwärts durch eine geführte Tour navigieren.",
HELP_MORE_INSIDE_A: "Innenansicht",
HELP_DESKTOP_MORE_INSIDE_B: "Klicken Sie hier um sich im Raum umzusehen.",
HELP_MOBILE_MORE_INSIDE_B: "Sehen Sie sich in diesen 3D Raum um.",
HELP_MORE_VR_A: "VR Modus",
HELP_DESKTOP_MORE_VR_B: "Klicken Sie hier, um den Raum in der virtuellen Realität zu starten.",
HELP_MOBILE_MORE_VR_B: "Tippen Sie um den Raum in der virtuellen Realität zu starten.",
HELP_MORE_360_A: "360° Views Ansicht ",
HELP_DESKTOP_MORE_360_B: "Klicken Sie die 360° Views Ansicht in das Highlight um Aussen-Szenen zu sehen.",
HELP_MOBILE_MORE_360_B: "Tippen Sie die 360° Views Ansicht in das Highlight um Aussen-Szenen zu sehen.",
HELP_MORE_FULLSCREEN_A: "Vollbild",
HELP_DESKTOP_MORE_FULLSCREEN_B: "Erweitern Sie 3D Showcase im Vollbildmodus.",
WEBVR_FOR_CARDBOARD: "Für Google Cardboard",
WEBVR_FOR_DAYDREAM: "Für Daydream View",
WEBVR_ENTER_WEBVR: "Starten Sie VR",
WEBVR_DIFFERENT_HEADSET: "Haben Sie anderes Headset?",
WEBVR_LEARN_MORE: "Mehr Infos",
WEBVR_VIEW_SPACE: "Ansicht des Raumes in VR",
WEBVR_DAYDREAM_VIEW: "Daydream View",
WEBVR_DAYDREAM_PHONE: "Daydream-fähiges Handy",
WEBVR_VIEW_CARDBOARD: "Oder mit Google Cardboard ansehen",
VR_WHAT_YOU_NEED: "Was Sie dafür brauchen...",
VR_NEED_DAYDREAM_PHONE: "Daydream-fähiges Handy",
VR_GOOGLE_DAYDREAM: "Google Daydream",
VR_APP: "port VR App",
VR_APP_OPEN: "Oder öffnen Sie die port VR App",
VR_COMPATIBLE_ANDROID_LONG: "Kompatibles Android Gerät mit Bildschirmdiagonale von 11,5 bis 14 cm (4,5 - 5,5 Zoll) und Android 4.4.4 und neuer",
VR_SAMSUNG_DETAIL: "Galaxy S6 und neuer",
VR_APP_FOR_ANDROID: "port VR app für Android",
VR_NEED_DAYDREAM: "ERFORDERT VOR DER 'PAIRING' MIT DAYDREAM VIEW",
VR_VIEW_SPACE: "Ansicht des Raumes in VR",
VR_LEARN_MORE_CAPS: "MEHR INFOS",
VR_PREVIOUS_CAPS: "ZURÜCK",
VR_NEXT_CAPS: "WEITER",
VR_GOT_IT_CAPS: "VERSTANDEN",
VR_SHOW_SUPPORTED: "Tippen Sie um den Raum in VR zu sehen",
VR_SHOW_UNSUPPORTED: "Schade, aber Ihr Gerät erfüllt nicht die Mindestanforderungen um den Raum in VR zu sehen.",
VR_SHOW_IOS_1: "Tippen Sie um den Raum in VR zu sehen",
VR_SHOW_IOS_2: "port VR App sowie kompatibles iPhone sind von nöten um diesen Raum zu sehen",
VR_NEED_CARDBOARD: "Was Sie dafür brauchen ist Google Cardboard",
VR_NEED_SAMSUNG: "Was Sie dafür brauchen ist Samsung Gear VR",
VR_GOOGLE_CARDBOARD: "Google Cardboard",
VR_SAMSUNG_GEAR_VR: "Samsung Gear VR",
VR_COMPATIBLE_IPHONES_1: "iPhones",
VR_COMPATIBLE_IPHONES_2: "iPhone 5s oder neuer, mit iOS 9.1 und später",
VR_COMPATIBLE_IPHONES_3: "Kompatibles iPhones",
VR_COMPATIBLE_ANDROID: "Kompatibles Android Gerät",
VR_ANDROID_DETAIL: "Bildschirmdiagonale von 11,5 bis 14 cm (4,5 - 5,5 Zoll) und Android 4.4.4 und neuer",
VR_ANDROID_DVICES: "Android Geräte",
VR_COMPATIBLE_SAMSUNG: "Kompatible Samsung Geräte",
VR_APP_FOR_CARDBOARD: "port VR App für Google Cardboard",
VR_APP_FOR_SAMSUNG: "port VR App für Gear VR",
VR_DOWNLOAD_HERE: "Hier runterladen",
VR_REQUIRE_HEADSET: "Benötigt das ein VR-Headset und port VR App für Android installiert wird",
VR_REDIRECT_TO_STORE: "Wenn App nicht installiert ist, werden Sie zum App Store umgeleitet.",
VR_IMPROPER_EMBED: "Der port Raum ist nicht richtig eingebettet um VR in Ihrem Webbrowser zu unterstützen.",
VR_OPEN_ANDROID_LINK: "Öffnen Sie den Link auf Ihrem Handy",
VR_ANDROID_OPTIONS: "VR Headset Optionen",
SHARE_TO: "Teilen auf",
SHARE_LINK: "Direkter Link",
SHARE_EXPLORE: "Umsehen",
SHARE_AT: "auf",
SHARE_WITH: "mit",
SHARE_3D: "in 3D",
SHARE_COPIED: "Kopiert!",
ERROR_BROWSER_SOLUTION: "Installieren Sie einen neueren Browser um sich in 3D umzusehen.",
ERROR_BROWSER_EXPLANATION: "WebGL benötigt einen modernen Browser.",
ERROR_GENERIC_PROBLEM: "Huch, etwas ist schief gelaufen.",
ERROR_GENERIC_SOLUTION: "Starten Sie Ihren Browser neu.",
ERROR_GENERIC_ACTIONS_1: "Wenn das Problem weiterhin besteht, ",
ERROR_GENERIC_ACTIONS_2: "Installieren Sie einen unterstützten Browser",
ERROR_GENERIC_ACTIONS_3: " oder ",
ERROR_GENERIC_ACTIONS_4: "Sehen Sie unseren Leitfaden zur Fehlerbehebung",
ERROR_WEBGL_UNSUPPORTED_PROBLEM: "Browser wird nicht unterstützt.",
ERROR_WEBGL_IOS_PROBLEM: "iOS-Version wird nicht unterstützt.",
ERROR_WEBGL_IOS_SOLUTION: "Aktualisieren Sie auf iOS 8 oder neuer um sich in 3D umzusehen.",
ERROR_WEBGL_IOS_ACTIONS_1: "Tippen ",
ERROR_WEBGL_IOS_ACTIONS_2: "Einstellungen > Allgemein > Softwareaktualisierung",
ERROR_WEBGL_SAFARI_PROBLEM: "Aktivieren Sie WebVR um sich in 3D umzusehen.",
ERROR_WEBGL_SAFARI_ACTIONS_1: "Klicken ",
ERROR_WEBGL_SAFARI_ACTIONS_2: "Präferenzen > Fortgeschrittene > Entwickler-Menü anzeigen",
ERROR_WEBGL_SAFARI_ACTIONS_3: "Klicken Sie dann ",
ERROR_WEBGL_SAFARI_ACTIONS_4: "Entwickler > WebGL Aktivieren",
ERROR_MISSING_URLS_PROBLEM: "Huch, es gibt keine Panoramen für dieses Modell .",
ERROR_MISSING_URLS_EXPLANATION: "Dies ist ein älteres Modell. Der Website-Besitzer hat eventuell ein neues Modell in Arbeit.",
ERROR_LOADING_FAILED_PROBLEM: "Huch, das Modell ist nicht verfügbar.",
ERROR_LOADING_FAILED_ACTIONS_1: "Wenn das Problem weiterhin besteht, ",
ERROR_LOADING_FAILED_ACTIONS_2: "sehen Sie unseren Leitfaden zur Fehlerbehebung",
ERROR_MAINTENANCE_PROBLEM: "Wartung im Gange.",
ERROR_MAINTENANCE_SOLUTION: "Bitte versuchen Sie es in ein paar Minuten nochmal.",
LINK_TO_LOCATION: "Link zu",
MENU_COPY: "Kopieren",
LINK_ALERT_COPY: "Bitte benutzen Sie CTRL/CMD + C zum kopieren.",
ROTATE: "Drehen",
INSIDE: "Drinnen",
MOVE: "Bewegen",
ZOOM: "Vergrößern"
}
}, {}],
111: [function (e, t, i) {
"use strict";
t.exports = {
PAGE_TITLE: "",
LOADING: "Loading",
PRESENTED_BY_CAPS: "PRESENTED BY",
POWERED_BY: "powered by ",
POWERED_BY_CAPS: "POWERED BY",
DESKTOP_SHORT_CTA: "Click to explore this 3D space.",
MOBILE_SHORT_CTA: "Tap to explore this 3D space.",
PRESENTED_BY: "Presented by ",
MORE: "More ",
LESS: "Less ",
TAG_CONTENT: "tag™ Content",
SHOW: "Show",
HIDE: "Hide",
DOLLHOUSE: "Dollhouse",
FLOOR_PLAN: "Floor plan",
OPEN_HIGHLIGHTS: "Open Highlights",
CLOSE_HIGHLIGHTS: "Close",
PREVIOUS: "Previous",
PLAY: "Play",
PAUSE: "Pause",
NEXT: "Next",
EXPLORE_3D_SPACE: "Explore 3D Space",
VIEW_DOLLHOUSE: "View dollhouse",
SOCIAL_SHARING: "Share this Space",
VIEW_IN_VR: "View in VR",
VIEW_FULLSCREEN: "全屏",
EXIT_FULLSCREEN: "退出全屏",
ZOOM_IN: "Zoom in",
ZOOM_OUT: "Zoom out",
FLOOR_NAME: "Floor ",
FLOOR_ALL: "全部",
TERMS: "Terms",
PORT_TERMS: "port terms",
TERMS_OF_USE: "Terms of Use",
TERMS_TEXT_FILE: "terms-en-US.html",
CLOSE_TERMS: "Close",
TERMS_FAIL: "Could not fetch terms. Please make sure you have an internet connection to view the terms of use.",
HELP: "Help",
HELP_NAVIGATION_TAB: "Navigation",
HELP_MORE_HELP_TAB: "More Help",
CLOSE: "Close",
HELP_DESKTOP_PANORAMA_1A: "Click and Drag to look around the Space.",
HELP_DESKTOP_PANORAMA_2A: "Click on the rings throughout the space to move around.",
HELP_DESKTOP_PANORAMA_3A: "Use the scroll wheel to zoom in and out.",
HELP_DESKTOP_PANORAMA_1B: "Or, use the arrow keys to turn left and right.",
HELP_DESKTOP_PANORAMA_2B: "Or, use the arrow keys to move forward and back.",
HELP_DESKTOP_PANORAMA_3B: "Or, use the plus and minus keys to zoom in and out.",
HELP_DESKTOP_360_2A: "Click the Inside View icon to enter the Space.",
HELP_DESKTOP_360_2B: "Or, press the number 1 key to enter Inside View.",
HELP_DESKTOP_DOLLHOUSE_1A: "Left click and drag left, right, up, and down to rotate the Dollhouse.",
HELP_DESKTOP_DOLLHOUSE_2A: "Right click and drag left, right, up, and down to change the Dollhouse position on screen.",
HELP_DESKTOP_DOLLHOUSE_3A: "Use the scroll wheel to zoom in and out.",
HELP_DESKTOP_DOLLHOUSE_1B: "Or, use the arrow keys to rotate the Dollhouse.",
HELP_DESKTOP_FLOORPLAN_1A: "Left click and drag left, right, up, and down to change the Floorplan position on screen.",
HELP_DESKTOP_FLOORPLAN_2A: "Right click and drag left or right to rotate the Floorplan.",
HELP_DESKTOP_FLOORPLAN_3A: "Use the scroll wheel to zoom in and out.",
HELP_DESKTOP_FLOORPLAN_2B: "Or, use the arrow keys to rotate left or right.",
HELP_DESKTOP_FLOORPLAN_3B: "Or, use the arrow keys to zoom in and out.",
HELP_MOBILE_PANORAMA_1: "Touch and Drag to look around the Space.",
HELP_MOBILE_PANORAMA_2: "Tap on the rings throughout the Space to move around.",
HELP_MOBILE_3: "Use a pinch gesture to zoom in and out.",
HELP_MOBILE_360_2: "Tap the Inside View icon to enter the Space.",
HELP_MOBILE_DOLLHOUSE_1: "Touch and drag up, down, left, and right to rotate the Dollhouse.",
HELP_MOBILE_DOLLHOUSE_2: "Touch and drag with two fingers to position the Dollhouse.",
HELP_MOBILE_FLOORPLAN_1: "Touch and drag to position the Floorplan.",
HELP_MOBILE_FLOORPLAN_2: "Touch and drag with two fingers to rotate the Floorplan.",
HELP_MORE_HLR_A: "Highlight Reel",
HELP_DESKTOP_MORE_HLR_B: "Open to navigate through the Space using thumbnail images.",
HELP_MORE_DOLLHOUSE_A: "Dollhouse View",
HELP_DESKTOP_MORE_DOLLHOUSE_B: "Click to view and rotate a top-down view of the entire Space in 3D.",
HELP_MOBILE_MORE_DOLLHOUSE_B: "Tap to view and rotate a top-down view of the entire Space in 3D.",
HELP_MORE_FLOORS_A: "Floor Selector",
HELP_DESKTOP_MORE_FLOORS_B: "Switch between floors in the Space.",
HELP_MORE_TAG_A: "tag™ Posts",
HELP_DESKTOP_MORE_TAG_B: "Click or hover over for information about features in the Space.",
HELP_MOBILE_MORE_TAG_B: "Tap for information about features in the Space.",
HELP_MORE_ZOOM_A: "Zoom Controls",
HELP_DESKTOP_MORE_ZOOM_B: "Use these controls to zoom in and out or use the scroll wheel.",
HELP_MORE_TOUR_A: "Tour Controls",
HELP_DESKTOP_MORE_TOUR_B: "Play, pause, and navigate forward and backward through a Guided Tour.",
HELP_MORE_INSIDE_A: "Inside View",
HELP_DESKTOP_MORE_INSIDE_B: "Click to explore inside the Space.",
HELP_MOBILE_MORE_INSIDE_B: "Tap to explore inside the Space.",
HELP_MORE_VR_A: "VR Mode",
HELP_DESKTOP_MORE_VR_B: "Click to launch the Space in virtual reality.",
HELP_MOBILE_MORE_VR_B: "Tap to launch the Space in virtual reality.",
HELP_MORE_360_A: "360° Views",
HELP_DESKTOP_MORE_360_B: "Click 360 Views in the Highlight Reel to view outdoor scenes.",
HELP_MOBILE_MORE_360_B: "Tap 360 Views in the Highlight Reel to view outdoor scenes.",
HELP_MORE_FULLSCREEN_A: "Full screen",
HELP_DESKTOP_MORE_FULLSCREEN_B: "Expand 3D Showcase to full screen.",
WEBVR_FOR_CARDBOARD: "For Google Cardboard",
WEBVR_VIEW_CARDBOARD: "Or View on Google Cardboard",
WEBVR_FOR_DAYDREAM: "For Daydream View",
WEBVR_ENTER_WEBVR: "ENTER VR",
WEBVR_DIFFERENT_HEADSET: "Have a different headset?",
WEBVR_LEARN_MORE: "Learn more",
WEBVR_VIEW_SPACE: "View Space in VR",
WEBVR_DAYDREAM_VIEW: "Daydream View",
WEBVR_DAYDREAM_PHONE: "Daydream-ready phone",
VR_VIEW_SPACE: "View Space in Virtual Reality",
VR_LEARN_MORE_CAPS: "LEARN MORE",
VR_PREVIOUS_CAPS: "PREVIOUS",
VR_NEXT_CAPS: "NEXT",
VR_GOT_IT_CAPS: "GOT IT",
VR_SHOW_SUPPORTED: "Tap to view the Space in VR with",
VR_SHOW_UNSUPPORTED: "Sorry, but your device doesn't meet the minimum requirements to view a space in VR.",
VR_SHOW_IOS_1: "Tap to view the space in VR",
VR_SHOW_IOS_2: "Requires port VR app and compatible iPhone to view",
VR_WHAT_YOU_NEED: "What You'll Need For...",
VR_NEED_CARDBOARD: "What you'll need with Google Cardboard",
VR_NEED_SAMSUNG: "What you'll need with Samsung Gear VR",
VR_NEED_DAYDREAM: "NEEDS PRIOR PAIRING WITH DAYDREAM VIEW",
VR_NEED_DAYDREAM_PHONE: "Daydream-ready phone",
VR_GOOGLE_CARDBOARD: "Google Cardboard",
VR_GOOGLE_DAYDREAM: "Google Daydream",
VR_APP: "port VR App",
VR_SAMSUNG_GEAR_VR: "Samsung Gear VR",
VR_COMPATIBLE_IPHONES_1: "iPhones",
VR_COMPATIBLE_IPHONES_2: "iPhone 5s and newer, running iOS 9.1 and higher",
VR_COMPATIBLE_IPHONES_3: "Compatible iPhones",
VR_COMPATIBLE_ANDROID: "Compatible Android Devices",
VR_COMPATIBLE_ANDROID_LONG: 'Compatible Android Devices Displays from 4.5"-5.5" running Android OS 4.4.4 and higher',
VR_ANDROID_DETAIL: 'Displays from 4.5"-5.5" running Android OS 4.4.4 and higher',
VR_ANDROID_DVICES: "Android Devices",
VR_COMPATIBLE_SAMSUNG: "Compatible Samsung Devices",
VR_SAMSUNG_DETAIL: "Galaxy S6 and Above",
VR_APP_FOR_CARDBOARD: "port VR app for Google Cardboard",
VR_APP_FOR_SAMSUNG: "port VR app for Gear VR",
VR_APP_FOR_ANDROID: "port VR app for Android Phones",
VR_APP_OPEN: "Open with the port VR app instead",
VR_DOWNLOAD_HERE: "Download here",
VR_REQUIRE_HEADSET: "Requires a VR headset and port VR app for Android to be installed",
VR_REDIRECT_TO_STORE: "If app is not installed, you will be redirected to the app store.",
VR_IMPROPER_EMBED: "The port Space is not embedded properly to support VR in your web browser.",
VR_OPEN_ANDROID_LINK: "Open the Link on Your Mobile Phone",
VR_ANDROID_OPTIONS: "Available VR Headset Options",
SHARE_TO: "Share to",
SHARE_LINK: "Direct Link",
SHARE_EXPLORE: "Explore ",
SHARE_AT: "at",
SHARE_WITH: "with",
SHARE_3D: " in 3D",
SHARE_COPIED: "Copied!",
ERROR_BROWSER_SOLUTION: "Install a new browser to explore in 3D.",
ERROR_BROWSER_EXPLANATION: "WebGL requires a modern browser.",
ERROR_GENERIC_PROBLEM: "Oops, something went wrong.",
ERROR_GENERIC_SOLUTION: "Restart your browser.",
ERROR_GENERIC_ACTIONS_1: "If the problem persists, ",
ERROR_GENERIC_ACTIONS_2: "install a supported browser",
ERROR_GENERIC_ACTIONS_3: " or ",
ERROR_GENERIC_ACTIONS_4: "see our troubleshooting guide",
ERROR_WEBGL_UNSUPPORTED_PROBLEM: "Browser not supported.",
ERROR_WEBGL_IOS_PROBLEM: "iOS version not supported.",
ERROR_WEBGL_IOS_SOLUTION: "Upgrade to iOS 8 or higher to explore in 3D.",
ERROR_WEBGL_IOS_ACTIONS_1: "Tap ",
ERROR_WEBGL_IOS_ACTIONS_2: "Settings > General > Software Update",
ERROR_WEBGL_SAFARI_PROBLEM: "Enable WebGL to explore in 3D.",
ERROR_WEBGL_SAFARI_ACTIONS_1: "Click ",
ERROR_WEBGL_SAFARI_ACTIONS_2: "Preferences > Advanced > Show Develop menu",
ERROR_WEBGL_SAFARI_ACTIONS_3: "Then click ",
ERROR_WEBGL_SAFARI_ACTIONS_4: "Develop > Enable WebGL",
ERROR_MISSING_URLS_PROBLEM: "Oops, there are no panoramas for this model.",
ERROR_MISSING_URLS_EXPLANATION: "This is an older model. The website owner may have a new model on the way.",
ERROR_LOADING_FAILED_PROBLEM: "模型不可用.",
ERROR_LOADING_FAILED_ACTIONS_1: "If the problem persists, ",
ERROR_LOADING_FAILED_ACTIONS_2: "see our troubleshooting guide",
ERROR_MAINTENANCE_PROBLEM: "Maintenance in progress.",
ERROR_MAINTENANCE_SOLUTION: "Please come back in a few minutes.",
LINK_TO_LOCATION: "Link to location",
MENU_COPY: "Copy",
LINK_ALERT_COPY: "Please use CTRL/CMD + C to copy.",
ROTATE: "Rotate",
INSIDE: "Inside",
MOVE: "Move",
ZOOM: "Zoom"
}
}, {}],
112: [function (e, t, i) {
"use strict";
t.exports = {
PAGE_TITLE: "",
LOADING: "Cargando",
PRESENTED_BY_CAPS: "PRESENTADO POR",
POWERED_BY: "potenciando por ",
POWERED_BY_CAPS: "POTENCIADO POR ",
DESKTOP_SHORT_CTA: "Haga clic para explorar este Espacio 3D.",
MOBILE_SHORT_CTA: "Pulse para explorar este Espacio 3D.",
PRESENTED_BY: "Presentado por ",
MORE: "Más ",
LESS: "Menos ",
TAG_CONTENT: "Contenido de tag™",
SHOW: "Mostrar",
HIDE: "Ocultar",
DOLLHOUSE: "Dollhouse",
FLOOR_PLAN: "Planos",
OPEN_HIGHLIGHTS: "Aspectos Destacados",
CLOSE_HIGHLIGHTS: "Cerrar",
PREVIOUS: "Anterior",
PLAY: "Play",
PAUSE: "Pausa",
NEXT: "Siguiente",
EXPLORE_3D_SPACE: "Explorar el Espacio 3D",
VIEW_DOLLHOUSE: "Ver dollhouse",
SOCIAL_SHARING: "Compartir este espacio",
VIEW_IN_VR: "Ver en realidad virtual",
VIEW_FULLSCREEN: "Ver en pantalla completa",
EXIT_FULLSCREEN: "Salir de pantalla completa",
ZOOM_IN: "Acercar",
ZOOM_OUT: "Alejar",
FLOOR_NAME: "Piso ",
FLOOR_ALL: "Todas",
TERMS: "Condiciones",
PORT_TERMS: "port términos de uso",
TERMS_OF_USE: "Términos de uso",
TERMS_TEXT_FILE: "terms-es-MX.html",
CLOSE_TERMS: "Cerrar",
TERMS_FAIL: "No se han podido obtener las condiciones. Asegúrese de tener una conexión a Internet para ver los términos de uso.",
HELP: "Ayuda",
HELP_NAVIGATION_TAB: "Navegación",
HELP_MORE_HELP_TAB: "Más Ayuda",
CLOSE: "Cerrar",
HELP_DESKTOP_PANORAMA_1A: "Haga clic y arrastre para mirar alrededor del espacio.",
HELP_DESKTOP_PANORAMA_2A: "Haga clic en los aros a lo largo del espacio para moverse.",
HELP_DESKTOP_PANORAMA_3A: "Use la rueda de desplazamiento para acercar o alejar.",
HELP_DESKTOP_PANORAMA_1B: "O use las teclas de flecha para girar a la izquierda y a la derecha.",
HELP_DESKTOP_PANORAMA_2B: "O use las teclas de dirección para adelantar o retroceder.",
HELP_DESKTOP_PANORAMA_3B: "O use la tecla más para acercar y la tecla menos para alejar.",
HELP_DESKTOP_360_2A: "Haga clic en el icono Vista Interior para ingresar al Espacio.",
HELP_DESKTOP_360_2B: "O bien, presione la tecla numero 1 para entrar en la Vista Interior.",
HELP_DESKTOP_DOLLHOUSE_1A: "Haga clic izquierdo y arrastre hacia la izquierda, derecha, arriba o abajo para girar la Dollhouse.",
HELP_DESKTOP_DOLLHOUSE_2A: "Haga clic derecho y arrastre hacia la izquierda, derecha, arriba o abajo para cambiar la posición della dollhouse.",
HELP_DESKTOP_DOLLHOUSE_3A: "Use la rueda de desplazamiento para acercar o alejar.",
HELP_DESKTOP_DOLLHOUSE_1B: "O use las teclas de dirección para girar la Dollhouse.",
HELP_DESKTOP_FLOORPLAN_1A: "Haga clic con izquierdo y arrastre hacia la izquierda, derecha, arriba o abajo para cambiar la posición de la planta.",
HELP_DESKTOP_FLOORPLAN_2A: "Haga clic derecho y arrastre hacia la izquierda o derecha para girar la planta.",
HELP_DESKTOP_FLOORPLAN_3A: "Use la rueda de desplazamiento para acercar o alejar.",
HELP_DESKTOP_FLOORPLAN_2B: "O use las teclas para girar hacia la izquierda o derecha.",
HELP_DESKTOP_FLOORPLAN_3B: "O use las teclas de dirección para acercar o alejar.",
HELP_MOBILE_PANORAMA_1: "Toque y arrastre para mirar alrededor del espacio.",
HELP_MOBILE_PANORAMA_2: "Toque en los aros a lo largo del espacio para moverse.",
HELP_MOBILE_3: "Use el gesto de pellizcar para acercar o alejar.",
HELP_MOBILE_360_2: "Toque el ícono Vista Interior para entrar en el Espacio.",
HELP_MOBILE_DOLLHOUSE_1: "Toque y arrastre con dos dedos para cambiar la posición della dollhouse.",
HELP_MOBILE_DOLLHOUSE_2: "Toque y arrastre con dos dedos para cambiar la posición de la vista aérea.",
HELP_MOBILE_FLOORPLAN_1: "Toque y arrastre para cambiar la posición de la planta.",
HELP_MOBILE_FLOORPLAN_2: "Toque y arrastre con dos dedos para girar la planta.",
HELP_MORE_HLR_A: "Galería destacada",
HELP_DESKTOP_MORE_HLR_B: "Abra para navegar a través del espacio utilizando imágenes en miniatura.",
HELP_MORE_DOLLHOUSE_A: "Vista aérea por pisos",
HELP_DESKTOP_MORE_DOLLHOUSE_B: "Haga clic para ver y girar la Dollhouse del espacio completo en 3D.",
HELP_MOBILE_MORE_DOLLHOUSE_B: "Toque para ver y girar la vista Dollhouse del espacio completo en 3D.",
HELP_MORE_FLOORS_A: "Seleccionador de plantas",
HELP_DESKTOP_MORE_FLOORS_B: "Cambie de una planta a otra en el espacio.",
HELP_MORE_TAG_A: "tag™ Posts",
HELP_DESKTOP_MORE_TAG_B: "Haga clic o coloque el cursor para obtener más información acerca de las características del espacio.",
HELP_MOBILE_MORE_TAG_B: "Toque para obtener más información acerca de las características del espacio.",
HELP_MORE_ZOOM_A: "Controles de zoom",
HELP_DESKTOP_MORE_ZOOM_B: "Use estos controles o la rueda de desplazamiento para acercar o alejar.",
HELP_MORE_TOUR_A: "Controles de recorrido",
HELP_DESKTOP_MORE_TOUR_B: "Reproduzca, pause, adelante o retroceda a través de un recorrido guiado.",
HELP_MORE_INSIDE_A: "Vista interior",
HELP_DESKTOP_MORE_INSIDE_B: "Haga clic para explorar el interior del espacio.",
HELP_MOBILE_MORE_INSIDE_B: "Toque para explorar el interior del espacio.",
HELP_MORE_VR_A: "Modo de realidad virtual",
HELP_DESKTOP_MORE_VR_B: "Toque para ver el espacio en realidad virtual.",
HELP_MOBILE_MORE_VR_B: "Toque para ver el espacio en realidad virtual.",
HELP_MORE_360_A: "360° Views",
HELP_DESKTOP_MORE_360_B: "Una vez que se encuentre en galería destacada, haga clic en vistas de 360º para ver el exterior.",
HELP_MOBILE_MORE_360_B: "Una vez que se encuentre en galería destacada, toque en vistas de 360º para ver el exterior.",
HELP_MORE_FULLSCREEN_A: "Pantalla completa",
HELP_DESKTOP_MORE_FULLSCREEN_B: "Expanda el escenario 3D para verlo en pantalla completa.",
WEBVR_FOR_CARDBOARD: "Para Google Cardboard",
WEBVR_FOR_DAYDREAM: "Para Daydream View",
WEBVR_ENTER_WEBVR: "ENTRAR VR",
WEBVR_DIFFERENT_HEADSET: "¿Tiene un auricular diferente?",
WEBVR_LEARN_MORE: "Más información",
WEBVR_VIEW_SPACE: "Ver Espacio en VR",
WEBVR_DAYDREAM_VIEW: "Daydream View",
WEBVR_DAYDREAM_PHONE: "Daydream Teléfono listos",
WEBVR_VIEW_CARDBOARD: "O Ver en Google Cardboard",
VR_NEED_DAYDREAM: "Necesidades antes de acoplarse con Daydream View",
VR_NEED_DAYDREAM_PHONE: "Teléfono listo para Daydream",
VR_GOOGLE_DAYDREAM: "Daydream de Google",
VR_APP: "port VR App",
VR_COMPATIBLE_ANDROID_LONG: 'Compatible con los Dispositivos Android con Pantallas de 4.5"-5.5" operando Android OS 4.4.4 y posteriores',
VR_APP_FOR_ANDROID: "Aplicación port VR para Teléfonos Android",
VR_APP_OPEN: "Abrir con la aplicación port VR en su lugar",
VR_VIEW_SPACE: "Ver Espacio en realidad virtual",
VR_LEARN_MORE_CAPS: "SABER MÁS",
VR_PREVIOUS_CAPS: "ANTERIOR",
VR_NEXT_CAPS: "SIGUIENTE",
VR_GOT_IT_CAPS: "COMPRENDIDO",
VR_SHOW_SUPPORTED: "Pulse para ver el Espacio en realidad virtual con",
VR_SHOW_UNSUPPORTED: "Lo sentimos, pero su dispositivo no cumple los requisitos mínimos para ver un Espacio en realidad virtual.",
VR_SHOW_IOS_1: "Pulse para ver el Espacio en realidad virtual",
VR_SHOW_IOS_2: "Necesita la aplicación port VR y un iPhone compatible para ver",
VR_WHAT_YOU_NEED: "Lo que necesitaras...",
VR_NEED_CARDBOARD: "Lo que necesitaras con Google Cardboard",
VR_NEED_SAMSUNG: "Lo que necesitaras con el Samsung Gear VR",
VR_GOOGLE_CARDBOARD: "Google Cardboard",
VR_SAMSUNG_GEAR_VR: "Samsung Gear VR",
VR_COMPATIBLE_IPHONES_1: "iPhones",
VR_COMPATIBLE_IPHONES_2: "Compatible con iPhone 6S o superior y con iOS 9.1 en adelante",
VR_COMPATIBLE_IPHONES_3: "iPhones compatibles",
VR_COMPATIBLE_ANDROID: "Dispositivos Android compatibles",
VR_ANDROID_DETAIL: "Pantallas de 11.43 cm a 13.97 cm con OS de Android 4.4.4 en adelante",
VR_ANDROID_DVICES: "Dispositivos Android",
VR_COMPATIBLE_SAMSUNG: "Dispositivos compatibles del Samsung",
VR_SAMSUNG_DETAIL: "Galaxy S5 en adelante",
VR_APP_FOR_CARDBOARD: "Aplicación port VR para Google Cardboard",
VR_APP_FOR_SAMSUNG: "Aplicación port VR para Gear VR",
VR_DOWNLOAD_HERE: "Descargar aquí",
VR_REQUIRE_HEADSET: "Necesita un casco de realidad virtual y que se instale la aplicación port VR para Android",
VR_REDIRECT_TO_STORE: "Si la aplicación no está instalada, se le redirigirá a la tienda de aplicaciones.",
VR_IMPROPER_EMBED: "El espacio de port no está incorporado correctamente para apoyar VR en su navegador web.",
VR_OPEN_ANDROID_LINK: "Abre el enlace en tu teléfono móvil",
VR_ANDROID_OPTIONS: "Opciones de auriculares en RV disponibles",
SHARE_TO: "Compartir en",
SHARE_LINK: "Enlace directo",
SHARE_EXPLORE: "Explorar ",
SHARE_AT: "en",
SHARE_WITH: "con",
SHARE_3D: " en 3D",
SHARE_COPIED: "¡Copiado!",
ERROR_BROWSER_SOLUTION: "Instale un nuevo navegador para explorar en 3D.",
ERROR_BROWSER_EXPLANATION: "WebGL requiere un navegador moderno.",
ERROR_GENERIC_PROBLEM: "Vaya, algo ha ido mal.",
ERROR_GENERIC_SOLUTION: "Reinicie su navegador.",
ERROR_GENERIC_ACTIONS_1: "Si el problema persiste, ",
ERROR_GENERIC_ACTIONS_2: "instale un navegador compatible",
ERROR_GENERIC_ACTIONS_3: " o ",
ERROR_GENERIC_ACTIONS_4: "consulte nuestra guía de solución de problemas",
ERROR_WEBGL_UNSUPPORTED_PROBLEM: "Navegador no compatible.",
ERROR_WEBGL_IOS_PROBLEM: "Versión de iOS no compatible.",
ERROR_WEBGL_IOS_SOLUTION: "Actualice a iOS 8 o superior para explorar en 3D.",
ERROR_WEBGL_IOS_ACTIONS_1: "Pulse ",
ERROR_WEBGL_IOS_ACTIONS_2: "Ajustes > General > Actualización de software",
ERROR_WEBGL_SAFARI_PROBLEM: "Habilite WebGL para explorar en 3D.",
ERROR_WEBGL_SAFARI_ACTIONS_1: "Haga clic en ",
ERROR_WEBGL_SAFARI_ACTIONS_2: "Preferencias > Avanzado > Mostrar el menú Desarrollar",
ERROR_WEBGL_SAFARI_ACTIONS_3: "Después, haga clic en ",
ERROR_WEBGL_SAFARI_ACTIONS_4: "Desarrollar > Habilitar WebGL",
ERROR_MISSING_URLS_PROBLEM: "Vaya, no hay panoramas para este modelo.",
ERROR_MISSING_URLS_EXPLANATION: "Este es un modelo antiguo. El propietario del sitio web puede tener un nuevo modelo en mente.",
ERROR_LOADING_FAILED_PROBLEM: "Vaya, modelo no disponible.",
ERROR_LOADING_FAILED_ACTIONS_1: "Si el problema persiste, ",
ERROR_LOADING_FAILED_ACTIONS_2: "consulte nuestra guía de solución de problemas",
ERROR_MAINTENANCE_PROBLEM: "Mantenimiento en progreso.",
ERROR_MAINTENANCE_SOLUTION: "Regrese en unos minutos.",
LINK_TO_LOCATION: "Enlace a la ubicación",
MENU_COPY: "Copiar",
LINK_ALERT_COPY: "Utilice CTRL/CMD + C para copiar.",
ROTATE: "Girar",
INSIDE: "Interior",
MOVE: "Moverse",
ZOOM: "Acercar o alejar"
}
}, {}],
113: [function (e, t, i) {
"use strict";
t.exports = {
PAGE_TITLE: "",
LOADING: "Chargement",
PRESENTED_BY_CAPS: "PRÉSENTÉ PAR",
POWERED_BY: "alimenté par ",
POWERED_BY_CAPS: "ALIMENTÉ PAR",
DESKTOP_SHORT_CTA: "Cliquez pour explorer l'Espace 3D.",
MOBILE_SHORT_CTA: "Cliquez pour explorer l'Espace 3D.",
PRESENTED_BY: "Présenté par ",
MORE: "Plus ",
LESS: "Moins ",
TAG_CONTENT: "Contenu tag™",
SHOW: "Montrer",
HIDE: "Cacher",
DOLLHOUSE: "Dollhouse",
FLOOR_PLAN: "Plan de sol",
OPEN_HIGHLIGHTS: "Ouvrir les faits saillants",
CLOSE_HIGHLIGHTS: "Fermer",
PREVIOUS: "Précédent",
PLAY: "Lecture",
PAUSE: "Pause",
NEXT: "Suivant",
EXPLORE_3D_SPACE: "Explorer l'Espace en 3D",
VIEW_DOLLHOUSE: "Voir dollhouse",
SOCIAL_SHARING: "Partager cet espace",
VIEW_IN_VR: "Voir en VR",
VIEW_FULLSCREEN: "Plein écran",
EXIT_FULLSCREEN: "Fermer plein écran",
ZOOM_IN: "Zoom avant",
ZOOM_OUT: "Zoom arrière",
FLOOR_NAME: "Étage ",
FLOOR_ALL: "Tous",
TERMS: "Mentions légales",
PORT_TERMS: "port mentions légales",
TERMS_OF_USE: "Conditions d'utilisation",
TERMS_TEXT_FILE: "terms-fr-FR.html",
CLOSE_TERMS: "Fermer",
TERMS_FAIL: "Impossible d'accéder aux mentions légales. Vérifiez que vous avez une connexion Internet pour afficher les conditions d'utilisation.",
HELP: "Aide",
HELP_NAVIGATION_TAB: "Navigation",
HELP_MORE_HELP_TAB: "Aide",
CLOSE: "Fermer",
HELP_DESKTOP_PANORAMA_1A: "Cliquez et faites glisser pour regarder autour de l’espace.",
HELP_DESKTOP_PANORAMA_2A: "Cliquez sur les anneaux pour vous déplacer.",
HELP_DESKTOP_PANORAMA_3A: "Utilisez la molette de votre souris pour zoomer.",
HELP_DESKTOP_PANORAMA_1B: "Ou utilisez les touches pour tourner.",
HELP_DESKTOP_PANORAMA_2B: "Ou utilisez les touches pour avancer et reculer.",
HELP_DESKTOP_PANORAMA_3B: "Ou utilisez les touches plus et moins pour zoomer.",
HELP_DESKTOP_360_2A: "Cliquez sur l’icône Vue Intérieure pour entrer dans l’Espace.",
HELP_DESKTOP_360_2B: "Ou, appuyez sur la touche numéro 1 pour entrer dans la Vue Intérieure.",
HELP_DESKTOP_DOLLHOUSE_1A: "Faites un clic gauche et bougez votre souris pour faire pivoter la vue Dollhouse.",
HELP_DESKTOP_DOLLHOUSE_2A: "Faites un clic droit et bougez votre souris pour changer la position de la vue Dollhouse.",
HELP_DESKTOP_DOLLHOUSE_3A: "Utilisez la molette de votre souris pour zoomer.",
HELP_DESKTOP_DOLLHOUSE_1B: "Ou utilisez les touches pour faire pivoter la vue Dollhouse.",
HELP_DESKTOP_FLOORPLAN_1A: "Faites un clic droit pour changer la position du plan sur l’écran.",
HELP_DESKTOP_FLOORPLAN_2A: "Faites un clic droit et faites glisser à gauche ou à droite pour faire pivoter le plan.",
HELP_DESKTOP_FLOORPLAN_3A: "Utilisez la molette de votre souris pour zoomer.",
HELP_DESKTOP_FLOORPLAN_2B: "Ou utilisez les touches pour faire pivoter à gauche ou à droite.",
HELP_DESKTOP_FLOORPLAN_3B: "Ou utilisez les touches pour effectuer un zoom avant ou arrière.",
HELP_MOBILE_PANORAMA_1: "Touchez et faites glisser pour regarder autour de l’espace.",
HELP_MOBILE_PANORAMA_2: "Tapez sur les anneaux dans tout l’espace pour vous déplacer.",
HELP_MOBILE_3: "Utilisez un geste de pincement pour zoomer avant/arrière.",
HELP_MOBILE_360_2: "Tapez sur l’icône Vue Intérieure pour entrer dans l’Espace.",
HELP_MOBILE_DOLLHOUSE_1: "Touchez et faites glisser vers le haut/bas/gauche/droite pour faire pivoter la vue Dollhouse.",
HELP_MOBILE_DOLLHOUSE_2: "Touchez et faites glisser avec deux doigts pour positionner vue en coupe.",
HELP_MOBILE_FLOORPLAN_1: "Touchez et faites glisser pour positionner le plan.",
HELP_MOBILE_FLOORPLAN_2: "Touchez et faites glisser avec deux doigts pour faire pivoter le plan.",
HELP_MORE_HLR_A: "Carrousel",
HELP_DESKTOP_MORE_HLR_B: "Ouvrez pour naviguer dans l’espace en utilisant les vignettes.",
HELP_MORE_DOLLHOUSE_A: "Vue en coupe",
HELP_DESKTOP_MORE_DOLLHOUSE_B: "Cliquez pour afficher et faire pivoter l’espace entier en 3D.",
HELP_MOBILE_MORE_DOLLHOUSE_B: "Tapez pour afficher et faire pivoter l’espace entier en 3D.",
HELP_MORE_FLOORS_A: "Sélecteur d’étage",
HELP_DESKTOP_MORE_FLOORS_B: "Basculer entre les étages dans l’espace.",
HELP_MORE_TAG_A: "tag™ Posts",
HELP_DESKTOP_MORE_TAG_B: "Cliquez ou survolez pour obtenir des informations sur l’espace.",
HELP_MOBILE_MORE_TAG_B: "Tapez pour obtenir des informations sur l’espace.",
HELP_MORE_ZOOM_A: "Commandes de zoom",
HELP_DESKTOP_MORE_ZOOM_B: "Utilisez votre clavier ou la molette de votre souris pour zoomer.",
HELP_MORE_TOUR_A: "Commandes de la visite",
HELP_DESKTOP_MORE_TOUR_B: "Mettez en marche ou en pause, avancez et reculez lors d'une visite guidée.",
HELP_MORE_INSIDE_A: "Vue intérieure",
HELP_DESKTOP_MORE_INSIDE_B: "Cliquez pour explorer l’intérieur de l’espace.",
HELP_MOBILE_MORE_INSIDE_B: "Tapez pour explorer l’intérieur de l’espace.",
HELP_MORE_VR_A: "Mode RV",
HELP_DESKTOP_MORE_VR_B: "Cliquez pour lancer l’espace en réalité virtuelle.",
HELP_MOBILE_MORE_VR_B: "Tapez pour lancer l’espace en réalité virtuelle.",
HELP_MORE_360_A: "Vues 360°",
HELP_DESKTOP_MORE_360_B: "Cliquez sur vues 360°, dans le carrousel pour voir les scènes extérieures.",
HELP_MOBILE_MORE_360_B: "Tapez sur vues 360°, dans le carrousel pour voir les scènes extérieures.",
HELP_MORE_FULLSCREEN_A: "Plein écran",
HELP_DESKTOP_MORE_FULLSCREEN_B: "Voir 3D Showcase en plein écran.",
WEBVR_FOR_CARDBOARD: "Pour Google Cardboard",
WEBVR_FOR_DAYDREAM: "Pour Daydream View",
WEBVR_ENTER_WEBVR: "ENTRER VR",
WEBVR_DIFFERENT_HEADSET: "Avez-vous un casque différent?",
WEBVR_LEARN_MORE: "En savoir plus",
WEBVR_VIEW_SPACE: "Voir Espace en VR",
WEBVR_DAYDREAM_VIEW: "Daydream View",
WEBVR_DAYDREAM_PHONE: "Téléphone compatibles Daydream",
WEBVR_VIEW_CARDBOARD: "Ou Afficher sur Google Cardboard",
VR_VIEW_SPACE: "Voir l'Espace en Réalité Virtuelle",
VR_LEARN_MORE_CAPS: "EN SAVOIR PLUS",
VR_PREVIOUS_CAPS: "PRÉCÉDENT",
VR_NEXT_CAPS: "SUIVANT",
VR_GOT_IT_CAPS: "BIEN COMPRIS",
VR_SHOW_SUPPORTED: "Taper pour voir l'Espace en VR avec",
VR_SHOW_UNSUPPORTED: "Désolé mais votre appareil ne répond pas aux critères minimaux pour voir cet Espace en mode VR.",
VR_SHOW_IOS_1: "Taper pour voir l’Espace en Realité Virtuelle",
VR_SHOW_IOS_2: "Nécessite l’application port VR et un iPhone compatible pour voir",
VR_WHAT_YOU_NEED: "Ce dont vous aurez besoin pour...",
VR_NEED_CARDBOARD: "Ce dont vous aurez besoin avec Google Cardboard",
VR_NEED_SAMSUNG: "Ce dont vous aurez besoin avec Samsung Gear VR",
VR_NEED_DAYDREAM: "BESOINS AVANT APPARIEMENT AVEC DAYDREAM VIEW",
VR_NEED_DAYDREAM_PHONE: "Téléphone compatible avec Daydream",
VR_GOOGLE_CARDBOARD: "Google Cardboard",
VR_GOOGLE_DAYDREAM: "Google Daydream",
VR_APP: "port VR App",
VR_SAMSUNG_GEAR_VR: "Samsung Gear VR",
VR_COMPATIBLE_IPHONES_1: "iPhones",
VR_COMPATIBLE_IPHONES_2: "iPhone 5s et plus récent, avec iOS 9.1 et plus récent",
VR_COMPATIBLE_IPHONES_3: "iPhones compatibles",
VR_COMPATIBLE_ANDROID: "Appareils Android compatibles",
VR_COMPATIBLE_ANDROID_LONG: "Compatible avec les écrans des appareils Android de 11,5 à 14 cm (4,5 à 5,5 po) fonctionnant sous Android OS 4.4.4 et plus",
VR_ANDROID_DETAIL: 'Écrans 4.5" à 5.5" avec Android 4.4.4 ou plus récent',
VR_ANDROID_DVICES: "Appareils Android",
VR_COMPATIBLE_SAMSUNG: "Appareils Samsung Compatibles",
VR_SAMSUNG_DETAIL: "Galaxy S6 et plus récents",
VR_APP_FOR_CARDBOARD: "Application port VR pour Google Cardboard",
VR_APP_FOR_SAMSUNG: "Application port VR pour Gear VR",
VR_APP_FOR_ANDROID: "Application port VR pour téléphones Android",
VR_APP_OPEN: "Ouvrir plutôt avec l’application port VR",
VR_DOWNLOAD_HERE: "Télécharger ici",
VR_REQUIRE_HEADSET: "Nécessite un casque VR et l'application port VR pour Android afin d'être installé",
VR_REDIRECT_TO_STORE: "Si l'application n'est pas installée, vous serez rediriger vers l'App store.",
VR_IMPROPER_EMBED: "L'Espace port n'est pas correctement intégré pour supporter VR dans votre navigateur Web.",
VR_OPEN_ANDROID_LINK: "Ouvrez ce lien avec votre appareil mobile",
VR_ANDROID_OPTIONS: "Options disponibles pour casque VR sous",
SHARE_TO: "Partager sur",
SHARE_LINK: "Lien direct",
SHARE_EXPLORE: "Explorer ",
SHARE_AT: "à",
SHARE_WITH: "avec",
SHARE_3D: " en 3D",
SHARE_COPIED: "Copié!",
ERROR_BROWSER_SOLUTION: "Installer un nouveau navigateur pour explorer en 3D.",
ERROR_BROWSER_EXPLANATION: "WebGL a besoin d'un navigateur récent.",
ERROR_GENERIC_PROBLEM: "Il y eu un problème.",
ERROR_GENERIC_SOLUTION: "Redémarrer votre navigateur.",
ERROR_GENERIC_ACTIONS_1: "Si le problème persiste, ",
ERROR_GENERIC_ACTIONS_2: "installez un navigateur plus récent",
ERROR_GENERIC_ACTIONS_3: " ou ",
ERROR_GENERIC_ACTIONS_4: "voir notre guide de dépannage",
ERROR_WEBGL_UNSUPPORTED_PROBLEM: "Navigateur non-supporté.",
ERROR_WEBGL_IOS_PROBLEM: "Version iOS non-supportée.",
ERROR_WEBGL_IOS_SOLUTION: "Mettre à jour avec iOS8 au minimum pour voir l'Espace en 3D.",
ERROR_WEBGL_IOS_ACTIONS_1: "Tapez ",
ERROR_WEBGL_IOS_ACTIONS_2: "Paramètres > Général > Mise à jour Software",
ERROR_WEBGL_SAFARI_PROBLEM: "Activez WegGL pour explorer en 3D.",
ERROR_WEBGL_SAFARI_ACTIONS_1: "Cliquez ",
ERROR_WEBGL_SAFARI_ACTIONS_2: "Préferences > Avancés > Voir menu développeur",
ERROR_WEBGL_SAFARI_ACTIONS_3: "Puis cliquez ",
ERROR_WEBGL_SAFARI_ACTIONS_4: "Développe > Activé WebGL",
ERROR_MISSING_URLS_PROBLEM: "Il n'y a pas de panoromas pour ce modèle.",
ERROR_MISSING_URLS_EXPLANATION: "Ceci est un ancien modèle. Le propriétaire du site a peut-être un nouveau modèle en cours.",
ERROR_LOADING_FAILED_PROBLEM: "Ce modèle n'est pas disponible.",
ERROR_LOADING_FAILED_ACTIONS_1: "Si le problème persiste, ",
ERROR_LOADING_FAILED_ACTIONS_2: "voir notre guide de dépannage",
ERROR_MAINTENANCE_PROBLEM: "Maintenance en cours.",
ERROR_MAINTENANCE_SOLUTION: "Revenez dans quelques instants.",
LINK_TO_LOCATION: "Lien vers l'emplacement",
MENU_COPY: "Copie",
LINK_ALERT_COPY: "Utiliser CTRL+CMD C pour copier.",
ROTATE: "Faire pivoter",
INSIDE: "Intérieure",
MOVE: "Se déplacer",
ZOOM: "Zoom"
}
}, {}],
114: [function (e, t, i) {
"use strict";
t.exports = {
PAGE_TITLE: "",
LOADING: "読み込み中",
PRESENTED_BY_CAPS: "PRESENTED BY",
POWERED_BY: "powered by",
POWERED_BY_CAPS: "POWERED BY",
DESKTOP_SHORT_CTA: "クリックしてこの3D Spaceを探索",
MOBILE_SHORT_CTA: "タップしてこの3D Spaceを探索",
PRESENTED_BY: "Presented by ",
MORE: "全て表示 ",
LESS: "閉じる ",
TAG_CONTENT: "tag™コンテンツ ",
SHOW: "表示",
HIDE: "非表示",
DOLLHOUSE: "ドールハウス",
FLOOR_PLAN: "フロアプラン",
OPEN_HIGHLIGHTS: "ハイライトを開く",
CLOSE_HIGHLIGHTS: "閉じる",
PREVIOUS: "前へ",
PLAY: "再生",
PAUSE: "一時停止",
NEXT: "次へ",
EXPLORE_3D_SPACE: "3DSpaceの探索",
VIEW_DOLLHOUSE: "ドールハウスの表示",
SOCIAL_SHARING: "このSpaceを共有する",
VIEW_IN_VR: "VRで表示",
VIEW_FULLSCREEN: "フルスクリーン表示",
EXIT_FULLSCREEN: "フルスクリーン表示を終了",
ZOOM_IN: "ズームイン",
ZOOM_OUT: "ズームアウト",
FLOOR_NAME: "フロア ",
FLOOR_ALL: "すべて",
TERMS: "規約",
PORT_TERMS: "port規約",
TERMS_OF_USE: "利用規約",
CLOSE_TERMS: "閉じる",
TERMS_TEXT_FILE: "terms-jp-JP.html",
TERMS_FAIL: "規約を取得できませんでした。利用規約を表示するためにインターネットに接続されていることを確認してください。",
WEBVR_FOR_DAYDREAM: "Daydream View用",
WEBVR_ENTER_WEBVR: "VRに入る",
WEBVR_DIFFERENT_HEADSET: "別のヘッドセットをお持ちですか?",
WEBVR_LEARN_MORE: "もっと詳しく",
WEBVR_VIEW_SPACE: "VRでSpaceを表示",
WEBVR_DAYDREAM_VIEW: "Daydream View",
WEBVR_DAYDREAM_PHONE: "Daydream対応スマホ",
WEBVR_FOR_CARDBOARD: "Google Cardboard用",
WEBVR_VIEW_CARDBOARD: "またはGoogle Cardboardで表示",
VR_VIEW_SPACE: "バーチャルリアリティでSpaceを表示",
VR_LEARN_MORE_CAPS: "もっと詳しく",
VR_PREVIOUS_CAPS: "前へ",
VR_NEXT_CAPS: "次へ",
VR_GOT_IT_CAPS: "了解",
VR_SHOW_SUPPORTED: "タップして次を使用してVRでSpaceを表示: ",
VR_SHOW_UNSUPPORTED: "お使いのデバイスはVRでSpaceを表示する最低要件を満たしていません",
VR_SHOW_IOS_1: "タップしてVRでSpaceを表示",
VR_SHOW_IOS_2: "表示するにはport VRアプリと互換性のあるiPhoneが必要です",
VR_WHAT_YOU_NEED: "必要なもの",
VR_NEED_CARDBOARD: "Google Cardboardに必要なもの",
VR_NEED_SAMSUNG: "Samsung Gear VRに必要なもの",
VR_NEED_DAYDREAM: "事前にDaydream Viewとのペアリングが必要です",
VR_NEED_DAYDREAM_PHONE: "Daydream対応スマホ",
VR_GOOGLE_CARDBOARD: "Google Cardboard",
VR_GOOGLE_DAYDREAM: "Google Daydream",
VR_APP: "port VRアプリ",
VR_SAMSUNG_GEAR_VR: "Samsung Gear VR",
VR_COMPATIBLE_IPHONES_1: "iPhone",
VR_COMPATIBLE_IPHONES_2: "iOS 9.1以降で動作するiPhone 5s以降のモデル",
VR_COMPATIBLE_IPHONES_3: "互換性のあるiPhone",
VR_COMPATIBLE_ANDROID: "互換性のあるAndroidデバイス",
VR_COMPATIBLE_ANDROID_LONG: "Android OS 4.4.4以降で動作する互換性のあるAndroidデバイスの4.5~5.5インチディスプレイ",
VR_ANDROID_DETAIL: "Android OS 4.4.4以降で動作する4.5~5.5インチディスプレイ",
VR_ANDROID_DVICES: "Androidデバイス",
VR_COMPATIBLE_SAMSUNG: "互換性のあるSamsungデバイス",
VR_SAMSUNG_DETAIL: "Galaxy S5以降のモデル",
VR_APP_FOR_CARDBOARD: "Google Cardboard用のport VRアプリ",
VR_APP_FOR_SAMSUNG: "Gear VR 用のport VRアプリ",
VR_APP_FOR_ANDROID: "Androidフォン用のport VRアプリ",
VR_APP_OPEN: "port VRアプリで開く",
VR_DOWNLOAD_HERE: "ここからダウンロード",
VR_REQUIRE_HEADSET: "Android 用のVRヘッドセットとport VRアプリ をインストールする必要があります",
VR_REDIRECT_TO_STORE: "アプリがインストールされていない場合、App Storeにリダイレクトされます",
VR_IMPROPER_EMBED: "お使いのウェブブラウザでVRがサポートされるようport Spaceが適切に埋め込まれていません。",
VR_OPEN_ANDROID_LINK: "お使いの携帯電話でリンクを開いてください",
VR_ANDROID_OPTIONS: "利用可能なVRヘッドセットオプション",
SHARE_TO: "共有先",
SHARE_LINK: "ダイレクトリンク",
SHARE_EXPLORE: "探索",
SHARE_AT: "場所",
SHARE_WITH: "使用アプリ",
SHARE_3D: "3Dで",
SHARE_COPIED: "コピーされました!",
ERROR_BROWSER_SOLUTION: "3D探索するには、新しいバージョンのブラウザをインストールしてください",
ERROR_BROWSER_EXPLANATION: "WebGLにはモダンブラウザが必要です。",
ERROR_GENERIC_PROBLEM: "問題が発生しました。",
ERROR_GENERIC_SOLUTION: "ブラウザを再起動してください。",
ERROR_GENERIC_ACTIONS_1: "問題が解決しない場合は、",
ERROR_GENERIC_ACTIONS_2: "サポートされているブラウザをインストールしてください",
ERROR_GENERIC_ACTIONS_3: "または",
ERROR_GENERIC_ACTIONS_4: "トラブルシューティングガイドを参照してください",
ERROR_WEBGL_UNSUPPORTED_PROBLEM: "ブラウザがサポートされていません。",
ERROR_WEBGL_IOS_PROBLEM: "サポートされていないiOSバージョンです。",
ERROR_WEBGL_IOS_SOLUTION: "3D探索するには、iOS 8以降にアップグレードしてください。",
ERROR_WEBGL_IOS_ACTIONS_1: "以下の順にタップします:",
ERROR_WEBGL_IOS_ACTIONS_2: "設定 > 全般 > ソフトウェアの更新",
ERROR_WEBGL_SAFARI_PROBLEM: "WebGLを有効にして3Dで探索します。",
ERROR_WEBGL_SAFARI_ACTIONS_1: "以下の順にクリックします:",
ERROR_WEBGL_SAFARI_ACTIONS_2: "環境設定 > 詳細 > メニューバーに開発メニューを表示",
ERROR_WEBGL_SAFARI_ACTIONS_3: "その後、以下の順にクリックします:",
ERROR_WEBGL_SAFARI_ACTIONS_4: "開発 > WebGLを有効にする",
ERROR_MISSING_URLS_PROBLEM: "このモデルではパノラマを使用できません。",
ERROR_MISSING_URLS_EXPLANATION: "これは古いモデルです。ウェブサイト所有者が新しいモデルを開発中かもしれません。",
ERROR_LOADING_FAILED_PROBLEM: "モデルは利用できません。",
ERROR_LOADING_FAILED_ACTIONS_1: "問題が解決しない場合は、",
ERROR_LOADING_FAILED_ACTIONS_2: "トラブルシューティングガイドを参照してください",
ERROR_MAINTENANCE_PROBLEM: "メンテナンスは進行中です。",
ERROR_MAINTENANCE_SOLUTION: "しばらくしてからやり直し てください。",
LINK_TO_LOCATION: "ロケーションへのリンク",
MENU_COPY: "コピー",
LINK_ALERT_COPY: "コピーするにはCTRL/CMD + Cを使用してください。",
ROTATE: "回転",
MOVE: "移動",
INSIDE: "内側",
ZOOM: "ズーム",
HELP: "ヘルプ",
HELP_NAVIGATION_TAB: "ナビゲーション",
HELP_MORE_HELP_TAB: "その他のヘルプ",
HELP_DESKTOP_PANORAMA_1A: "Spaceを見回すには、クリックしてドラッグします。",
HELP_DESKTOP_PANORAMA_2A: "移動するには、Space全体にあるリングをクリックします。",
HELP_DESKTOP_PANORAMA_3A: "スクロールホイールを使用してズームイン、ズームアウトします。",
HELP_DESKTOP_PANORAMA_1B: "または、矢印キーを使用して左右に向きを変えます。",
HELP_DESKTOP_PANORAMA_2B: "または、矢印キーを使用して前後に向きを変えます。",
HELP_DESKTOP_PANORAMA_3B: "あるいは、プラス(+)キーまたはマイナス(-)キーを使用して、ズームイン、ズームアウトします。",
HELP_DESKTOP_360_2A: "内側ビューアイコンをクリックしてSpaceに入ります。",
HELP_DESKTOP_360_2B: "または、数字キー1を押して内側ビューに入ります。",
HELP_DESKTOP_DOLLHOUSE_1A: "左クリックと左右、上下のドラッグでドールハウスを回転します。",
HELP_DESKTOP_DOLLHOUSE_2A: "右クリックと左右、上下のドラッグでドールハウスの画面上の位置を変更します。",
HELP_DESKTOP_DOLLHOUSE_3A: "スクロールホイールを使用してズームイン、ズームアウトします。",
HELP_DESKTOP_DOLLHOUSE_1B: "または、矢印キーを使用してドールハウスを回転します。",
HELP_DESKTOP_FLOORPLAN_1A: "左ボタンを押しながら、上下左右にドラッグしてフロアプランの画面上の位置を変更します。",
HELP_DESKTOP_FLOORPLAN_2A: "右ボタンを押しながら左右にドラッグして、フロアプランを回転します。",
HELP_DESKTOP_FLOORPLAN_3A: "スクロールホイールを使用してズームイン、ズームアウトします。",
HELP_DESKTOP_FLOORPLAN_2B: "または、矢印キーを使用して左右に回転します。",
HELP_DESKTOP_FLOORPLAN_3B: "または、矢印キーを使用して、ズームイン、ズームアウトします。",
HELP_MOBILE_PANORAMA_1: "Spaceを見回すには、タッチしてドラッグします。",
HELP_MOBILE_PANORAMA_2: "移動するには、Space全体にあるリングをタップします。",
HELP_MOBILE_3: "ピンチジェスチャーを使用してズームイン、ズームアウトします。",
HELP_MOBILE_360_2: "内側ビューアイコンをタップしてSpaceに入ります。",
HELP_MOBILE_DOLLHOUSE_1: "タッチして上下左右にドラッグしてドールハウスを回転します。",
HELP_MOBILE_DOLLHOUSE_2: "タッチして、2本指でドラッグしてドールハウスを配置します。",
HELP_MOBILE_FLOORPLAN_1: "タッチ&ドラッグしてフロアプランを配置します。",
HELP_MOBILE_FLOORPLAN_2: "タッチして、2本指でドラッグしてフロアプランを回転します。",
HELP_MORE_HLR_A: "ハイライト",
HELP_DESKTOP_MORE_HLR_B: "サムネイル画像を使用してSpaceを移動するために開きます。",
HELP_MORE_DOLLHOUSE_A: "ドールハウス",
HELP_DESKTOP_MORE_DOLLHOUSE_B: "クリックして3DでSpace全体のトップダウンビューを表示して回転します。",
HELP_MOBILE_MORE_DOLLHOUSE_B: "タップして3DでSpace全体のトップダウンビューを表示して回転します。",
HELP_MORE_FLOORS_A: "フロアセレクター",
HELP_DESKTOP_MORE_FLOORS_B: "Space内のフロアを切り替えます。",
HELP_MORE_TAG_A: "tag™ Posts",
HELP_DESKTOP_MORE_TAG_B: "クリックするか、カーソルを置くとSpace内の機能についての説明が表示されます。",
HELP_MOBILE_MORE_TAG_B: "タップするとSpace内の機能についての説明が表示されます。",
HELP_MORE_ZOOM_A: "ズームコントロール",
HELP_DESKTOP_MORE_ZOOM_B: "これらのコントロールまたはスクロールホイールを使用して、ズームイン、ズームアウトします。",
HELP_MORE_TOUR_A: "ツアーコントロール",
HELP_DESKTOP_MORE_TOUR_B: "ガイド付きツアー中に再生、一時停止、前方・後方に移動します。",
HELP_MORE_INSIDE_A: "内側ビュー",
HELP_DESKTOP_MORE_INSIDE_B: "クリックしてSpace内を探索します。",
HELP_MOBILE_MORE_INSIDE_B: "タップしてSpace内を探索します。",
HELP_MORE_VR_A: "VRモード",
HELP_DESKTOP_MORE_VR_B: "クリックしてバーチャルリアリティでSpaceを起動します。",
HELP_MOBILE_MORE_VR_B: "タップしてバーチャルリアリティでSpaceを起動します。",
HELP_MORE_360_A: "360° Views",
HELP_DESKTOP_MORE_360_B: "Highlight Reelの360° Viewsをクリックして屋外シーンを表示します。",
HELP_MOBILE_MORE_360_B: "Highlight Reelの360° Viewsをタップして屋外シーンを表示します。",
HELP_MORE_FULLSCREEN_A: "フルスクリーン",
HELP_DESKTOP_MORE_FULLSCREEN_B: "3D Showcaseをフルスクリーン表示にします。",
CLOSE: "閉じる"
}
}, {}],
115: [function (e, t, i) {
"use strict";
t.exports = {
PAGE_TITLE: "",
LOADING: "Загрузка",
PRESENTED_BY_CAPS: "ПРЕДСТАВЛЕНО",
POWERED_BY: "разработано на платформе ",
POWERED_BY_CAPS: "РАЗРАБОТАНО НА ПЛАТФОРМЕ",
DESKTOP_SHORT_CTA: "Нажмите для просмотра.",
MOBILE_SHORT_CTA: "Нажмите для просмотра.",
PRESENTED_BY: "Представлено ",
MORE: "Больше ",
LESS: "Меньше ",
TAG_CONTENT: "tag™ Контент",
SHOW: "Показать",
HIDE: "Скрыть",
DOLLHOUSE: "Dollhouse",
FLOOR_PLAN: "Планировка",
OPEN_HIGHLIGHTS: "Открыть Фотоколлаж",
CLOSE_HIGHLIGHTS: "Закрыть",
PREVIOUS: "Предыдущий",
PLAY: "Воспроизвести",
PAUSE: "Пауза",
NEXT: "Следующий",
EXPLORE_3D_SPACE: "Просмотреть 3D модель",
VIEW_DOLLHOUSE: "Посмотреть Dollhouse",
SOCIAL_SHARING: "Поделиться этой моделью",
VIEW_IN_VR: "Посмотреть в VR",
VIEW_FULLSCREEN: "Полный экран",
EXIT_FULLSCREEN: "Выйти из полноэкранного режима",
ZOOM_IN: "Увеличить",
ZOOM_OUT: "Уменьшить",
FLOOR_NAME: "Этаж ",
FLOOR_ALL: "Все",
TERMS: "Условия",
PORT_TERMS: "Правила пользования",
TERMS_OF_USE: "Условия использования",
TERMS_TEXT_FILE: "terms-ru-RU.html",
CLOSE_TERMS: "Закрыть",
TERMS_FAIL: "Не удалось загрузить условия использования. Для просмотра условий использования, пожалуйста, убедитесь, что у Вас есть подключение к Интернету.",
HELP: "Помощь",
HELP_NAVIGATION_TAB: "Навигация",
HELP_MORE_HELP_TAB: "Доп. Помощь",
CLOSE: "Закрыть",
HELP_DESKTOP_PANORAMA_1A: "Нажмите и перетащите, чтобы осмотреть пространство вокруг.",
HELP_DESKTOP_PANORAMA_2A: "Для передвижения по модели нажимайте на круги .",
HELP_DESKTOP_PANORAMA_3A: "Используйте колесо прокрутки для увеличения и уменьшения.",
HELP_DESKTOP_PANORAMA_1B: "Или используйте клавиши со стрелками для поворота влево и вправо.",
HELP_DESKTOP_PANORAMA_2B: "Или используйте стрелки для перемещения вперед и назад.",
HELP_DESKTOP_PANORAMA_3B: "Или используйте клавиши ‘плюс’ и ‘минус’ для увеличения и уменьшения изображения.",
HELP_DESKTOP_360_2A: "Нажмите на значок ‘Вид Изнутри’, чтобы увидеть внутреннюю панораму.",
HELP_DESKTOP_360_2B: "или нажмите 1 на клавиатуре, чтобы увидеть внутреннюю панораму.",
HELP_DESKTOP_DOLLHOUSE_1A: "Нажмите левую кнопку мыши и перетащите влево, вправо, вверх и вниз, чтобы повернуть Dollhouse.",
HELP_DESKTOP_DOLLHOUSE_2A: "Нажмите правую кнопку мыши и перетащите влево, вправо, вверх и вниз, чтобы изменить позицию Dollhouse на экране.",
HELP_DESKTOP_DOLLHOUSE_3A: "Используйте колесо прокрутки чтобы увеличить и уменьшить.",
HELP_DESKTOP_DOLLHOUSE_1B: "Или используйте клавиши со стрелками, чтобы повернуть Dollhouse.",
HELP_DESKTOP_FLOORPLAN_1A: "Нажмите левую кнопку мыши и перетащите влево, вправо, вверх и вниз, чтобы изменить положение Планировки на экране.",
HELP_DESKTOP_FLOORPLAN_2A: "Нажмите правую кнопку мыши и перетащите влево или вправо, чтобы повернуть Планировку.",
HELP_DESKTOP_FLOORPLAN_3A: "Используйте колесо прокрутки чтобы увеличить и уменьшить.",
HELP_DESKTOP_FLOORPLAN_2B: "Или используйте клавиши со стрелками для поворота влево или вправо.",
HELP_DESKTOP_FLOORPLAN_3B: "Или используйте стрелки для увеличения и уменьшения.",
HELP_MOBILE_PANORAMA_1: "Нажмите и перетащите, чтобы осмотреть модель.",
HELP_MOBILE_PANORAMA_2: "Для передвижения по модели нажимайте на круги.",
HELP_MOBILE_3: "Используйте движение двумя пальцами в разные стороны, чтобы увеличить и уменьшить.",
HELP_MOBILE_360_2: "Нажмите на значок ‘Вид Изнутри’, чтобы увидеть внутреннюю панораму.",
HELP_MOBILE_DOLLHOUSE_1: "Нажмите и перетащите вверх, вниз, влево и вправо, чтобы повернуть Dollhouse.",
HELP_MOBILE_DOLLHOUSE_2: "Нажмите и перетащите, чтобы расположить Dollhouse.",
HELP_MOBILE_FLOORPLAN_1: "Нажмите и перетащите, чтобы расположить план здания.",
HELP_MOBILE_FLOORPLAN_2: "Коснитесь и перетащите двумя пальцами, чтобы повернуть план здания.",
HELP_MORE_HLR_A: "Фотоколлаж",
HELP_DESKTOP_MORE_HLR_B: "Откройте для перемещения по модели, используя иконки изображений.",
HELP_MORE_DOLLHOUSE_A: "Dollhouse",
HELP_DESKTOP_MORE_DOLLHOUSE_B: "Нажмите и поверните сверху вниз чтобы просмотреть всю 3D модель.",
HELP_MOBILE_MORE_DOLLHOUSE_B: "Нажмите и поверните сверху вниз чтобы просмотреть всю 3D модель.",
HELP_MORE_FLOORS_A: "Выбор Этажа",
HELP_DESKTOP_MORE_FLOORS_B: "Переключение между этажами.",
HELP_MORE_TAG_A: "tag™ Posts",
HELP_DESKTOP_MORE_TAG_B: "Нажмите или наведите курсор мыши для получения информации о функциях в Пространстве.",
HELP_MOBILE_MORE_TAG_B: "Нажмите для получения информации о функциях.",
HELP_MORE_ZOOM_A: "Масштаб",
HELP_DESKTOP_MORE_ZOOM_B: "Используйте эти кнопки для увеличения и уменьшения изображения или используйте колесо прокрутки.",
HELP_MORE_TOUR_A: "Управление Туром",
HELP_DESKTOP_MORE_TOUR_B: "Используйте кнопки Воспроизвести, Пауза, Вперед и Назад для управления фотоколлажем.",
HELP_MORE_INSIDE_A: "Вид Изнутри",
HELP_DESKTOP_MORE_INSIDE_B: "Нажмите, чтобы просмотреть модель изнутри.",
HELP_MOBILE_MORE_INSIDE_B: "Нажмите, чтобы просмотреть модель изнутри.",
HELP_MORE_VR_A: "Режим VR",
HELP_DESKTOP_MORE_VR_B: "Нажмите, чтобы запустить модель в виртуальной реальности.",
HELP_MOBILE_MORE_VR_B: "Нажмите, чтобы запустить модель в виртуальной реальности.",
HELP_MORE_360_A: "360° Views",
HELP_DESKTOP_MORE_360_B: "Нажмите на “360 Views” в фотоколлаже, чтобы просмотреть внешний пейзаж.",
HELP_MOBILE_MORE_360_B: "Нажмите на “360 Views” в фотоколлаже, чтобы просмотреть внешний пейзаж.",
HELP_MORE_FULLSCREEN_A: "Полный экран",
HELP_DESKTOP_MORE_FULLSCREEN_B: "Развернуть 3D Showcase во весь экран.",
WEBVR_FOR_CARDBOARD: "Для Google Cardboard",
WEBVR_FOR_DAYDREAM: "Для просмотра в Daydream",
WEBVR_ENTER_WEBVR: "ВОЙТИ В VR ",
WEBVR_DIFFERENT_HEADSET: "Есть другой VR-шлем?",
WEBVR_LEARN_MORE: "Узнать больше",
WEBVR_VIEW_SPACE: "Запустить модель в VR",
WEBVR_DAYDREAM_VIEW: "Посмотреть в Daydream",
WEBVR_DAYDREAM_PHONE: "Daydream-готовый телефон",
WEBVR_VIEW_CARDBOARD: "Или просмотреть в Google Cardboard",
VR_WHAT_YOU_NEED: "Что Вам потребуется...",
VR_NEED_DAYDREAM_PHONE: "Daydream-готовый телефон",
VR_GOOGLE_DAYDREAM: "Google Daydream",
VR_APP: "port VR App",
VR_APP_OPEN: "Или открыть через приложение port VR",
VR_COMPATIBLE_ANDROID_LONG: 'Совместимые Android устройства с диагональю экрана 4.5"-5.5" дюймов и Android версией 4.4.4, и выше',
VR_SAMSUNG_DETAIL: "Galaxy S6 и выше",
VR_APP_FOR_ANDROID: "Приложение port VR для Android",
VR_NEED_DAYDREAM: "Необходимо для соединением с Daydream",
VR_VIEW_SPACE: "Запустить модель в VR",
VR_LEARN_MORE_CAPS: "УЗНАТЬ БОЛЬШЕ",
VR_PREVIOUS_CAPS: "ПРЕДЫДУЩИЙ",
VR_NEXT_CAPS: "СЛЕДУЮЩИЙ",
VR_GOT_IT_CAPS: "ЯСНО",
VR_SHOW_SUPPORTED: "Нажмите, чтобы просмотреть модель в VR с помощью",
VR_SHOW_UNSUPPORTED: "Извините, но Ваше устройство не соответствует минимальным требованиям для просмотра модели в VR.",
VR_SHOW_IOS_1: "Нажмите, чтобы просмотреть модель в VR",
VR_SHOW_IOS_2: "Для просмотра требуется приложение port VR и совместимый iPhone",
VR_NEED_CARDBOARD: "Что Вам потребуется для Google Cardboard",
VR_NEED_SAMSUNG: "Что Вам потребуется для Samsung Gear VR",
VR_GOOGLE_CARDBOARD: "Google Cardboard",
VR_SAMSUNG_GEAR_VR: "Samsung Gear VR",
VR_COMPATIBLE_IPHONES_1: "iPhones",
VR_COMPATIBLE_IPHONES_2: "iPhone 5s или новее с iOS 9.1 и выше",
VR_COMPATIBLE_IPHONES_3: "Совместимые модели iPhone",
VR_COMPATIBLE_ANDROID: "Совместимые Android устройства",
VR_ANDROID_DETAIL: 'Экран от 4.5" до 5.5" и Android 4.4.4, и выше',
VR_ANDROID_DVICES: "Android устройства",
VR_COMPATIBLE_SAMSUNG: "Совместимые Samsung устройства",
VR_APP_FOR_CARDBOARD: "Приложение port VR для Google Cardboard",
VR_APP_FOR_SAMSUNG: "Приложение port VR для Gear VR",
VR_DOWNLOAD_HERE: "Скачать здесь",
VR_REQUIRE_HEADSET: "Требуется VR-шлем и установленное приложение port VR для Android",
VR_REDIRECT_TO_STORE: "Если приложение не установлено, Вы будете перенаправлены на страницу магазина приложений.",
VR_IMPROPER_EMBED: "port модель не встроена должным образом для поддержки VR в вашем веб-браузере.",
VR_OPEN_ANDROID_LINK: "Откройте ссылку на Вашем мобильном телефоне",
VR_ANDROID_OPTIONS: "Доступные опции VR-шлемов",
SHARE_TO: "Поделиться",
SHARE_LINK: "Прямая ссылка",
SHARE_EXPLORE: "просмотреть",
SHARE_AT: "на",
SHARE_WITH: "с",
SHARE_3D: "в 3D",
SHARE_COPIED: "Скопировано!",
ERROR_BROWSER_SOLUTION: "установите новый браузер, чтобы просмотреть 3D пространство.",
ERROR_BROWSER_EXPLANATION: "WebGL требует современный браузер.",
ERROR_GENERIC_PROBLEM: "Ой, что-то пошло не так.",
ERROR_GENERIC_SOLUTION: "Перезапустите браузер.",
ERROR_GENERIC_ACTIONS_1: "Если проблема не устранена, ",
ERROR_GENERIC_ACTIONS_2: "установите поддерживаемый браузер",
ERROR_GENERIC_ACTIONS_3: " или ",
ERROR_GENERIC_ACTIONS_4: "смотрите наше руководство по устранению неполадок",
ERROR_WEBGL_UNSUPPORTED_PROBLEM: "Браузер не поддерживается.",
ERROR_WEBGL_IOS_PROBLEM: "iOS-версия не поддерживается.",
ERROR_WEBGL_IOS_SOLUTION: "Обновите до iOS 8 или выше, чтобы просмотреть пространство в 3D.",
ERROR_WEBGL_IOS_ACTIONS_1: "Нажмите ",
ERROR_WEBGL_IOS_ACTIONS_2: "Настройки > Общие > Обновление ПО",
ERROR_WEBGL_SAFARI_PROBLEM: "Включите WebGL для 3D-просмотра.",
ERROR_WEBGL_SAFARI_ACTIONS_1: "Нажмите ",
ERROR_WEBGL_SAFARI_ACTIONS_2: "Настойки > Дополнения > Показывать меню “Разработка” в строке меню",
ERROR_WEBGL_SAFARI_ACTIONS_3: "Затем нажмите ",
ERROR_WEBGL_SAFARI_ACTIONS_4: "Разработка > Разрешить WebGL",
ERROR_MISSING_URLS_PROBLEM: "Ой, для этой модели нет панорамы.",
ERROR_MISSING_URLS_EXPLANATION: "Эта модель устарела. У владельца веб-сайта может быть новая модель.",
ERROR_LOADING_FAILED_PROBLEM: "Ой, модель недоступна.",
ERROR_LOADING_FAILED_ACTIONS_1: "Если проблема не устранена, ",
ERROR_LOADING_FAILED_ACTIONS_2: "посмотрите наше руководство по устранению неполадок",
ERROR_MAINTENANCE_PROBLEM: "Выполняется техническое обслуживание.",
ERROR_MAINTENANCE_SOLUTION: "Пожалуйста, попробуйте снова через несколько минут.",
LINK_TO_LOCATION: "Ссылка на местоположение",
MENU_COPY: "Копировать",
LINK_ALERT_COPY: "Для того, чтобы скопировать, пожалуйста, используйте CTRL/CMD + C.",
ROTATE: "Вращать",
MOVE: "Передвигаться",
INSIDE: "Вид изнутри",
ZOOM: "Масштаб"
}
}, {}],
116: [function (r, e, t) {
(function (i) {
"use strict";
function re(e) {
console.log("e1:" + e), e = Math.round(.4 * e * 100), console.log("e2:" + e);
var t = $(".progressbar");
t.find(".bar").css("width", e + "%"), t.find(".label").css("left", t.width() * e / 100 - 15 + "px"), t.find(".perc").text(e + "%")
}
$("#gui-loading").fadeIn(200), re(.1);
var e = g_version ? "modeldata.js" : "someData.json";
$.ajax(g_Prefix + "data/" + window.number + "/" + e + "?" + randomTime().getTime(), {
dataType: "json"
}).done(function (e) {
var t = matcher(e);
t.files.templates[0] = g_Prefix + e.files.templates[0].replace("{{number}}", window.number), t.user = {
is_authenticated: !1,
flags: ["payment_show_past_due", "sc_imgopt_100", "mattertags", "labels", "fastly_v2_urls", "vr", "uhql", "sc_segment_100", "show_segment_metrics", "content_distribution", "workshop_webgl", "show360views", "showcase_vr", "ws_zooming", "model_settings", "ws_360snapshots", "img_multi_dl", "vrworkshop", "tag_links", "ws_img_multi_dl", "mattertag_links", "billing_tab_hidden", "static_cloud_ui", "metrics", "mattertag_media", "img_size_download", "show_360snapshots", "floorplan", "sc_tilegen_0", "showcase_webvr", "sc_mixpanel_0", "show_clickbait", "zooming", "showcase_tiling", "list_signed_urls_default_3", "fastly_image_opto"]
}, window.MP_PREFETCHED_MODELDATA = t, re(.7),
function () {
function y(e) {
t.update(e)
}
function A(e, t) {
ne.error(t), n.error(t), N.report(e, "error-" + t)
}
function C(e, t, i) {
try {
e.start(t)
} catch (e) {
throw ne.warn(e.message),
function (e) {
var t = O.details();
t && "Safari" === t.name && 500 < t.version && t.version < 600 ? (n.error("webgl-safari"), N.report(e, "error-webgl-safari")) : (n.error("webgl-generic"), N.report(e, "error-webgl-generic"))
}(i.sid), e
}
}
function I(e) {
e.stopPropagation(), e.preventDefault()
}
window.MP_PREFETCHED_MODELDATA.hoticon && (g_HotImage = {
point: window.MP_PREFETCHED_MODELDATA.hoticon.default,
point2: window.MP_PREFETCHED_MODELDATA.hoticon.higt
});
window.MP_PREFETCHED_MODELDATA.backgroundMusic ? (g_bgAudio.src = "//" + window.MP_PREFETCHED_MODELDATA.backgroundMusic, $("#volume").show()) : "one" === g_version && (g_bgAudio.src = g_Prefix + "/audio/audio" + window.number + "/background.mp3");
window.MP_PREFETCHED_MODELDATA.loadlogo && showLogo();
r("./lib/three75-shim"), r("./lib/array-polyfill"), r("./lib/performance-polyfill"), r("./lib/shaders/CopyShader.js"), r("./lib/shaders/HorizontalBlurShader.js"), r("./lib/shaders/VerticalBlurShader.js"), r("./lib/postprocessing/EffectComposer.js"), r("./lib/postprocessing/RenderPass.js"), r("./lib/postprocessing/MaskPass.js"), r("./lib/postprocessing/ShaderPass.js"), window.Promise || (window.Promise = r("promise-polyfill"));
var E = r("three"),
_ = r("three"),
b = (r("./util/sentry"), r("./player")),
w = r("./director"),
T = r("./controls/CameraControls"),
x = r("./model/ModelManager"),
S = r("./DisplayController"),
M = r("./label/LabelDisplayController"),
R = r("./enum/Viewmode"),
e = r("./util/logger"),
P = r("./showcase"),
O = r("./util/browser"),
L = r("./settings"),
D = r("./gui/gui"),
n = r("./gui/error"),
N = r("./analytics"),
F = r("./util/transitions"),
B = r("./effects"),
V = r("./objects/Skybox"),
k = (r("./util/common"), r("./util/PanoramaCollection"), r("./util/math"), r("./util/showcase")),
U = r("./util/camera"),
H = (r("./objects/Panorama"), r("./cameras/PanoramaCamera"), r("./preloaders")),
z = r("events").EventEmitter,
G = r("./featureflags"),
W = (r("./util/lerp"), r("./util/ajax"), r("./ab")),
j = r("./sdk/automation.js"),
Y = r("./scene/SceneRenderer"),
q = r("./scene/QuickstartManager"),
X = r("./tile/QualityManager.js"),
Z = r("./localization/localize"),
K = r("./tag/tagManager"),
Q = r("./tile/TileDownloader"),
J = r("./tile/PanoRenderer"),
ee = (r("./enum/PanoSizeClass"), r("./enum/PanoramaEvents"), r("./enum/SceneRendererEvents")),
t = r("./gui/memoryUsage"),
te = r("./enum/RenderLayers"),
ie = r("./TimingData"),
ne = new e(i);
e.level = L.logLevel, e.consoleEnabled = L.console,
function () {
var e = k.getModelIDFromQueryString();
if (!e) return A(null, "loading-failed");
var t = k.parseSidUrl(e),
i = O.valueFromHash("play", !1) ? "autoplay" : O.inIframe() ? "click" : "fullpage",
n = {
panoElementsToLoad: 6,
modelElementsToLoad: 0,
totalElementsLoaded: 0,
totalElementsToLoad: 0,
totalPercentageLoaded: 0,
progressCallback: null
},
r = document.getElementById("player"),
o = L.quickstart.enabled,
a = null,
s = null,
l = null,
c = null,
h = null,
u = null,
d = null,
p = null,
f = null,
g = null,
m = null,
v = new ie;
! function (e) {
ne.info("Version", "2.25.6-0-gd87e5b1"), z.defaultMaxListeners = 1e3,
function (e) {
e.addEventListener("dragenter", I, !1), e.addEventListener("dragover", I, !1)
}(e), O.valueFromHash("title", !0) || $(document).ready(function () {
$(".model-title").hide()
})
}(r),
function (e) {
return G.loadFeatureFlags(e).done(function (e) {
G.updateDependentSettings(e, L)
})
}({
urlBase: t.urlBase
}).then(function () {
return Z.init(),
function (e, t) {
var i = P.getModel({
url: t,
floors: O.valueFromHash("f", !0),
autoload: !1
});
return $.when(i, y).then(null, function (e) {
return this
})
}(0, e)
}).then(function (e) {
return re(.9),
function (e, t, i, n, r) {
ne.info("Model data loaded"), ne.debug("UUID: " + e.data.job.uuid), W.init(G.getFlags()), i && N.initKeen({
token: i,
appId: n
}), N.initSegment({
model: e.sid,
version: "2.25.6-0-gd87e5b1",
startSource: r.startSource,
token: t,
autoplay: r.autoplay,
quickstart: r.quickstart
})
}(g = e, L.appConfig.segment_key, L.appConfig.keen_write_key, L.appConfig.keen_project_id, {
startSource: i,
autoplay: L.autoplay,
quickstart: o
}), g.urls.init()
}).then(function () {
return g.loadPanos()
}).then(function () {
s = U.getStartCameraOptions(g, g.panos), d = function (e) {
var t = new E.PerspectiveCamera;
t.layers.enable(te.PANOMARKERS), t.layers.enable(te.RETICULE), t.layers.enable(te.TAG);
var o = new E.Scene,
i = new E.AmbientLight(16777215);
return o.add(i), o.skybox = new V, o.add(o.skybox), o.plane = new E.Mesh(new E.PlaneBufferGeometry(1e5, 1e5), new E.RawShaderMaterial({
side: E.DoubleSide
})), o.plane.position.y = 0, o.plane.rotateX(-Math.PI / 2), o.plane.material.visible = !1, o.add(o.plane), o.updateMatrixWorld(), L.showScreenshotLocations && e.data.images.forEach(function (e) {
if (e.metadata && e.metadata.camera_position) {
var t = e.metadata.camera_position,
i = new E.Mesh(new E.BoxGeometry(.3, .3, .3));
i.position = t.clone(), o.add(i);
var n = e.metadata.camera_quaternion,
r = new E.Vector3(0, 0, -1).applyQuaternion(n);
o.add(new E.ArrowHelper(r, t.clone(), 1, 16711680))
}
}), L.showAxis && (o.add(new E.ArrowHelper(new E.Vector3(0, 1, 0), new E.Vector3(0, 0, 0), 1, 255)), o.add(new E.ArrowHelper(new E.Vector3(0, 0, 1), new E.Vector3(0, 0, 0), 1, 16711680)), o.add(new E.ArrowHelper(new E.Vector3(1, 0, 0), new E.Vector3(0, 0, 0), 1, 65280))), new Y(o, t, B)
}(g), m = function (e, t) {
var i = e ? 1 : 1e3,
n = W.tilegen || W.imgopt ? 6 : 2;
n = O.valueFromHash("tileconc", n);
var r = new X,
o = new Q({
concurrentDownloads: n
}),
a = new J,
s = new x,
l = new w,
c = new b(t),
h = new T,
u = new S(i),
d = new M,
p = new K;
return {
qualityManager: r,
panoRenderer: a,
tileDownloader: o,
player: c,
director: l,
modelManager: s,
tagManager: p,
displayController: u,
labelDisplayController: d,
controls: h
}
}(o, s.mode), l = m.controls, c = m.player, h = m.director, u = m.tagManager, p = m.tileDownloader, f = m.qualityManager, m.panoRenderer,
function (e, t, i, n) {
var r = i.controls,
o = i.qualityManager,
a = i.panoRenderer,
s = i.tileDownloader,
l = i.modelManager;
r.init(n, l), j.init(i.director, r, i.player, l, t), o.init(l), s.init(o), a.init(t, s, o), l.init(s, a, o), l.addModel(e), t.addComponent(F)
}(g, d, m, r), c.director = h, g.supportsTiles && p.start(), !o || s.mode === R.PANORAMA && s.pano || (ne.warn("Tried to quickstart, but failed as we are not starting in inside mode."), o = !1);
var e = null;
if (o) {
ne.warn("Quickstart engaged. Hold on to your knickers.");
var t = l.controls[R.PANORAMA];
a = new q(f, d.scene, d.camera, t, r), C(d, r, g), e = a.load(s).then(function () {
d.addComponent(a), d.once(ee.AfterRender, function () {
ne.warn("First render after quickstart load finished.")
})
})
}
return window.flyToFirst = function () {
var e = c.model.panos.get("8d778e19657f433fb9cf8947d823bb70"),
t = new _.Quaternion(.7099827027821568, -.07708150183830938, .6958985789714591, .07555241737970636),
i = new _.Vector3(0, 0, -1).applyQuaternion(t).add(e.position);
c.flyToPano({
pano: e,
lookAtPoint: i
})
}, $.when(e, D.startLoading(g, c, h, L.autoplay, o, v))
}).then(function () {
return function (e, t, i, n, r) {
return r.progressCallback = t, N.sessionStart(), e.load(n).progress(function (e, t) {
e.modelElementsToLoad = t[1],
function (e) {
e.totalElementsToLoad = e.modelElementsToLoad + e.panoElementsToLoad
}(e),
function (e) {
e.totalElementsLoaded++, e.totalPercentageLoaded = e.totalElementsLoaded / e.totalElementsToLoad, isNaN(e.totalPercentageLoaded) && (e.totalPercentageLoaded = 0), e.totalPercentageLoaded = .4 + .6 * e.totalPercentageLoaded, console.log("pro:" + e.totalPercentageLoaded), e.progressCallback && e.progressCallback(100 * e.totalPercentageLoaded)
}(e)
}.bind(this, r))
}(g, D.onProgress, 0, !o, n)
}).then(function () {
s.quickstart = o,
function (e, t, i, n) {
var r = i.qualityManager,
o = i.panoRenderer,
a = i.tileDownloader,
s = i.modelManager,
l = i.player,
c = i.director,
h = i.tagManager,
u = i.displayController,
d = i.labelDisplayController,
p = i.controls;
t.scene.add(e), t.qualityManager = r;
var f = {
camera: t.camera,
director: c,
modelManager: s,
tileDownloader: a,
panoRenderer: o,
qualityManager: r,
tagManager: h,
container: n,
controls: p
};
l.init(f), l.setScene(t.scene), h.init(s, l), c.init(l, s), u.init(c, l, s, h, n), d.init(l, s, n), B.bindEvents(l), t.addComponent(h), t.addComponent(l), t.addComponent(o), l.sceneRenderer = t
}(g, d, m, r), d.started || C(d, r, g), N.modelLoaded(g, c, l, L.autoplay),
function (e, t, i, n) {
return ne.info("Starting player in " + i.mode), N.report(t.sid, "started-playing", n, i.quickstart), e.start(i)
}(c, g, s, L.autoplay).done(function () {
h.autoTour()
}), g.supportsTiles || new H(g, c).start();
o && (d.removeComponent(a), a.destroy(), s.pano.enter()), D.init(g, h, c, l, d, s, N.getSessionId()), D.endLoading(g, h, u), d.once(ee.AfterRender, function () {
v.setAppReadyTime();
var e = v.calcFullLoadingTime();
ne.warn("Total load time: " + e / 1e3), N.loadComplete(e), ne.warn("First render after model load finished.")
}), d.on(ee.MemoryUsageUpdated, y)
}).fail(A.bind(this, e))
}()
}()
})
}).call(this, "/js/main.js")
}, {
"./DisplayController": 1,
"./TimingData": 2,
"./ab": 3,
"./analytics": 4,
"./cameras/PanoramaCamera": 7,
"./controls/CameraControls": 9,
"./director": 15,
"./effects": 16,
"./enum/PanoSizeClass": 36,
"./enum/PanoramaEvents": 37,
"./enum/RenderLayers": 41,
"./enum/SceneRendererEvents": 43,
"./enum/Viewmode": 51,
"./featureflags": 59,
"./gui/error": 64,
"./gui/gui": 65,
"./gui/memoryUsage": 73,
"./label/LabelDisplayController": 91,
"./lib/array-polyfill": 92,
"./lib/performance-polyfill": 95,
"./lib/postprocessing/EffectComposer.js": 96,
"./lib/postprocessing/MaskPass.js": 97,
"./lib/postprocessing/RenderPass.js": 98,
"./lib/postprocessing/ShaderPass.js": 99,
"./lib/shaders/CopyShader.js": 100,
"./lib/shaders/HorizontalBlurShader.js": 101,
"./lib/shaders/VerticalBlurShader.js": 102,
"./lib/three75-shim": 103,
"./localization/localize": 108,
"./tag/tagManager": 124,
"./model/ModelManager": 140,
"./objects/Panorama": 148,
"./objects/Skybox": 152,
"./player": 155,
"./preloaders": 156,
"./scene/QuickstartManager": 157,
"./scene/SceneRenderer": 158,
"./sdk/automation.js": 164,
"./settings": 166,
"./showcase": 168,
"./tile/PanoRenderer": 169,
"./tile/QualityManager.js": 170,
"./tile/TileDownloader": 171,
"./util/PanoramaCollection": 178,
"./util/ajax": 181,
"./util/browser": 182,
"./util/camera": 183,
"./util/common": 185,
"./util/lerp": 188,
"./util/logger": 189,
"./util/math": 190,
"./util/sentry": 192,
"./util/showcase": 193,
"./util/transitions": 195,
events: 202,
"promise-polyfill": 213,
three: 217
}],
117: [function (e, t, i) {
"use strict";
function n(e) {
e = e || {}, r.RawShaderMaterial.call(this, a.extendObject({
fragmentShader: o.cube.fragmentShader,
vertexShader: o.cube.vertexShader,
uniforms: r.UniformsUtils.clone(o.cube.uniforms),
name: "CubemapMaterial"
}, e))
}
var r = e("three"),
o = e("../shaders"),
a = e("../util/common");
(n.prototype = Object.create(r.RawShaderMaterial.prototype)).constructor = n, t.exports = n
}, {
"../shaders": 167,
"../util/common": 185,
three: 217
}],
118: [function (e, t, i) {
"use strict";
function n(e) {
e = e || {}, r.RawShaderMaterial.call(this, a.extendObject({
fragmentShader: o.model.fragmentShader,
vertexShader: o.model.vertexShader,
uniforms: r.UniformsUtils.clone(o.model.uniforms),
name: "ModelTextureMaterial"
}, e))
}
var r = e("three"),
o = e("../shaders"),
a = e("../util/common");
((n.prototype = Object.create(r.RawShaderMaterial.prototype)).constructor = n).prototype.setProjectedPanos = function (e, t, i) {
i && (this.uniforms.progress.value = 0), e.ensureSkyboxReadyForRender(), this.uniforms.pano0Map.value = e.getSkyboxTexture(), this.uniforms.pano0Position.value.copy(e.position), this.uniforms.pano0Matrix.value.copy(e.skyboxMesh.matrixWorld), t.ensureSkyboxReadyForRender(), this.uniforms.pano1Map.value = t.getSkyboxTexture(), this.uniforms.pano1Position.value.copy(t.position), this.uniforms.pano1Matrix.value.copy(t.skyboxMesh.matrixWorld)
}, t.exports = n
}, {
"../shaders": 167,
"../util/common": 185,
three: 217
}],
119: [function (m, v, e) {
(function (e) {
"use strict";
function t(e, t, i, n) {
this.div = null, this.body = null, this.label = e, this.description = t, this.parsedDescription = [], this.media = i || {
type: null
}, this.loadingSpinner = null, this.parser = new r({
supportLinks: !c.valueFromHash("mls"),
keepLinkLabels: !0
}), this.state = g.CLOSED, this.orientation = "", this.initialTransform = "", this.hovering = !1, this.openTransition = null, this.closeTransition = null, this.openPromise = null, this.closePromise = null, this.animationTransition = null, this.animationScale = 0
}
var r = m("../Parser/DescriptionParser"),
i = m("../Media/Link"),
n = m("../Media/Image"),
o = m("../Media/EmbedlyPlayer"),
a = m("../Media/EmbedlyEmbed"),
s = m("../../util/transitions"),
l = m("../../util/lerp"),
c = m("../../util/browser"),
b = m("./BillboardEvent"),
w = m("../Media/MediaEvent"),
h = m("../Parser/DescriptionChunkType"),
u = m("events").EventEmitter,
d = m("./billboardSettings"),
T = m("./overlaySettings"),
p = new(m("../../util/logger"))(e),
f = document.getElementById("tag-billboards");
f.addEventListener("touchend", function (e) {
f.style.pointerEvents = "none"
}), f.addEventListener("touchcancel", function (e) {
f.style.pointerEvents = "none"
});
var g = {
CLOSED: "closed",
OPENING: "opening",
OPEN: "open",
CLOSING: "closing",
ACTIVE: "active"
};
(t.prototype = Object.create(u.prototype)).build = function (e) {
this.parsedDescription = this.parser.parse(this.description);
var t = document.createElement("div");
t.className = "tag-container has-hotzone", this.div = t, this.body = document.createElement("div"), this.body.className = "tag-body";
var i = document.createElement("div");
i.classList.add("tag-content");
var n = document.createElement("div");
n.classList.add("tag-text-content");
var r = document.createElement("div");
r.className = "tag-label", r.textContent = this.label, n.appendChild(r);
var o = document.createElement("div");
o.className = "tag-desc", n.appendChild(o), i.appendChild(n), this.body.appendChild(i), this.appendDescriptionElements(this.parsedDescription, o), this.appendMedia(), t.appendChild(this.body), f.appendChild(t), this.bindEvents(t, this.body)
}, t.prototype.bindEvents = function (i, e) {
function t(n) {
return function (e) {
if (!this.div.classList.contains("overlay")) {
var t, i = document.getElementById("player");
try {
t = new MouseEvent(n, e)
} catch (i) {
(t = document.createEvent("MouseEvents")).initMouseEvent(n, e.bubbles, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget)
}
i.dispatchEvent(t)
}
}
}
e.addEventListener("mousedown", function (e) {
e.stopPropagation()
}), e.addEventListener("mouseup", function (e) {
e.stopPropagation()
}), i.addEventListener("touchstart", function (e) {
f.style.pointerEvents = "auto"
}), i.addEventListener("mousedown", t("mousedown").bind(this)), i.addEventListener("mouseup", t("mouseup").bind(this)), e.addEventListener("mouseover", function (e) {
this.state === g.OPEN && i.classList.remove("has-hotzone")
}.bind(this)), i.addEventListener("mouseenter", function (e) {
this.state !== g.CLOSING && (this.hovering = !0, this.emit(b.ENTER))
}.bind(this)), i.addEventListener("mouseleave", function (e) {
this.hovering = !1, this.emit(b.LEAVE)
}.bind(this)), i.addEventListener("gesturestart", function (e) {
e.preventDefault()
});
var n = i.querySelector(".tag-text-content"),
r = 0;
n.addEventListener("touchstart", function (e) {
r = e.changedTouches[0].clientY
}), n.addEventListener("touchmove", function (t) {
function e(e) {
e && (0 === e.scrollTop && t.changedTouches[0].clientY > r || e.scrollTop + e.clientHeight - e.scrollHeight == 0 && t.changedTouches[0].clientY < r) && t.preventDefault()
}
return i.classList.contains("overlay") ? e(this.querySelector(".tag-desc")) : void e(this)
}), i.addEventListener("touchmove", function (e) {
0 == (n.compareDocumentPosition(e.target) & Node.DOCUMENT_POSITION_CONTAINED_BY) && e.preventDefault()
})
}, t.prototype.appendDescriptionElements = function (e, i) {
0 < e.length && this.div.classList.add("has-text"), e.forEach(function (e, t) {
switch (e.type) {
case h.TEXT:
i.appendChild(this.createTextElement(e.text));
break;
case h.LINK:
i.appendChild(this.createLinkElement(e.link))
}
}.bind(this))
}, t.prototype.appendLoadingSpinner = function () {
this.loadingSpinner = document.createElement("div"), this.loadingSpinner.classList.add("loading-spinner");
var e = document.createElement("div");
e.classList.add("gui-spinner-icon"), this.loadingSpinner.appendChild(e), this.body.appendChild(this.loadingSpinner)
}, t.prototype.onMediaLoadFinished = function () {
this.loadingSpinner && (this.loadingSpinner.parentNode.removeChild(this.loadingSpinner), this.applyOrientation(this.orientation), this.loadingSpinner = null)
}, t.prototype.appendMedia = function () {
if (this.media && this.media.type && "error" !== this.media.type && (!c.valueFromHash("mls", 0) || this.media.type === h.IMAGE)) {
this.appendLoadingSpinner();
var e = document.createElement("div");
e.classList.add("tag-media-content");
var t = document.createElement("i");
switch (["icon", "icon-close-thin", "close"].forEach(function (e) {
t.classList.add(e)
}), this.body.appendChild(t), this.body.appendChild(e), this.media.type) {
case h.IMAGE:
e.appendChild(this.createImageElement(this.media, this.body));
break;
case h.VIDEO:
e.appendChild(this.createVideoElement(this.media, this.body));
break;
case h.RICH:
e.appendChild(this.createEmbedElement(this.media, this.body))
}
}
}, t.prototype.createTextElement = function (e) {
var t = document.createElement("span");
return t.textContent = e, t
}, t.prototype.createLinkElement = function (e) {
var t = new i(e);
return t.on(w.LINK_CLICK, this.emit.bind(this, w.LINK_CLICK)), t.createDomElement()
}, t.prototype.createImageElement = function (t, C) {
function e() {
function e() {
p || (E.classList.remove("view-image"), a.classList.add("overlay"), t(), window.addEventListener("resize", A), a.addEventListener("click", i), c.addEventListener("click", r), o.addEventListener("click", n), p = !0, _.emit(w.IMAGE_OPENED))
}
function t() {
C.classList.add("show-info"), s.classList.remove("collapsible"), s.style.height = "";
var e = parseFloat(getComputedStyle(v).lineHeight),
t = g + e,
i = a.clientWidth - 2 * T.boundaryWidth - m,
n = a.clientHeight - 2 * T.boundaryHeight - m - t,
r = n,
o = r * I.aspect;
i < o && (r = (o = i) / I.aspect), n < r && (o = (r = n) * I.aspect), o += m, r += m + t, C.style.width = o + "px", C.style.height = r + "px", l.style.paddingTop = e + m + "px", 0 < _.description.length && (s.classList.add("collapsible"), s.style.height = s.clientHeight + 12 + "px", y.style.height = "calc(100% - " + v.clientHeight + "px)")
}
function i(e) {
e.target === a && n()
}
function n() {
p && (p = !1, E.classList.add("view-image"), a.classList.remove("overlay"), s.style.height = "", l.style.paddingTop = "", C.style.width = "", C.style.height = "", window.removeEventListener("resize", A), a.removeEventListener("click", i), c.removeEventListener("click", r), o.removeEventListener("click", n), _.emit(w.IMAGE_CLOSED), _.close(!0))
}
function r(e) {
C.classList.toggle("show-info")
}
var a = _.div,
s = a.getElementsByClassName("tag-content")[0],
l = a.getElementsByClassName("tag-media-content")[0],
o = C.getElementsByClassName("close")[0],
c = s.getElementsByClassName("tag-label")[0];
a.classList.add("has-image"), E.classList.add("view-image"), a.classList.add(1 <= I.aspect ? "image-landscape" : "image-portrait"), _.applyOrientation(_.orientation);
var h, u, d, p = !1,
f = getComputedStyle(s),
g = parseFloat(f.paddingTop) + parseFloat(f.paddingBottom),
m = 2 * parseFloat(getComputedStyle(l).paddingLeft),
v = s.querySelector(".tag-label"),
y = s.querySelector(".tag-desc"),
A = (d = 0, function () {
clearInterval(h), clearTimeout(u), h = setInterval(function () {
var e = a.clientHeight;
d !== e && (t(), d = e)
}, 100), u = setTimeout(clearInterval.bind(this, h), 1e3)
});
I.on(w.IMAGE_OPENING, e), _.on(b.ACTIVATE, e), _.on(w.IMAGE_CLOSED, I.onClosed.bind(I)), _.on(b.CLOSING, n)
}
var I = new n,
E = I.createDomElement();
this.once(b.OPENED, function () {
I.load(t.src).then(e).catch(function (e) {
p.warn("Failed to load image:", t.src), p.warn("with error:", e)
}).then(this.onMediaLoadFinished.bind(this))
});
var _ = this;
return E
}, t.prototype.createVideoElement = function (t, e) {
var i = new o({
autoPlay: !0,
autoResume: !0,
startMuted: !1,
loop: !1
}),
n = i.createDomElement();
return this.once(b.OPENED, function () {
i.load(t.src).then(function () {
this.div.classList.add("has-video"), this.state !== g.OPEN && this.state !== g.ACTIVE || (i.show(), i.play()), this.on(b.OPENING, i.show.bind(i)), this.on(b.OPENED, i.play.bind(i)), this.on(b.CLOSING, i.pause.bind(i)), this.on(b.CLOSED, i.hide.bind(i))
}.bind(this)).catch(function (e) {
p.warn("Failed to embed video:", t.src), p.warn("with error:", e)
}).then(this.onMediaLoadFinished.bind(this))
}.bind(this)), n
}, t.prototype.createEmbedElement = function (t, e) {
var i = new a,
n = i.createDomElement();
return this.once(b.OPENED, function () {
i.load(t.src).then(function () {
this.div.classList.add("has-embed"), this.state !== g.OPEN && this.state !== g.ACTIVE || i.show(), this.applyOrientation(this.orientation), this.on(b.OPENING, i.show.bind(i)), this.on(b.CLOSED, i.hide.bind(i))
}.bind(this)).catch(function (e) {
p.warn("Failed to embed:", t.src), p.warn("with error:", e)
}).then(this.onMediaLoadFinished.bind(this))
}.bind(this)), n
}, t.prototype.open = function (e) {
return this.openPromise = $.Deferred(), this.state === g.ACTIVE ? this.openPromise.resolve().promise() : (this.hovering || this.div.classList.add("has-hotzone"), this.openTransition ? e && this.setActiveState() : this.openTransition = s.setTimeout(function () {
this.state !== g.OPEN && (this.emit(b.OPENING), e && this.emit(b.ACTIVATING), this.state = g.OPENING, this.animateOpen(function () {
e && this.setActiveState(), this.openPromise.resolve()
}.bind(this)))
}.bind(this), d.animation.openDelay), s.cancel(this.closeTransition), this.closePromise && this.closePromise.reject(), this.closeTransition = void 0, this.openPromise.promise())
}, t.prototype.close = function (e) {
return this.closePromise = $.Deferred(), !e && this.hovering ? this.closePromise.reject().promise() : (this.closeTransition || (this.closeTransition = s.setTimeout(function () {
this.state !== g.CLOSED && (this.emit(b.CLOSING), this.state = g.CLOSING, this.animateClose())
}.bind(this), d.animation.closeDelay)), s.cancel(this.openTransition), this.openPromise && this.openPromise.reject(), this.openTransition = void 0, this.closePromise.resolve(), this.closePromise.promise())
}, t.prototype.setActiveState = function () {
this.state !== g.CLOSED && (this.state = g.ACTIVE, this.emit(b.ACTIVATE), this.div.classList.remove("has-hotzone"))
}, t.prototype.animateOpen = function (e) {
if (this.state === g.OPENING) {
if (s.cancel(this.animationTransition), c.detectSamsungNative()) return this.boardOrientation = null, this.div.style.visibility = "visible", this.emit(b.OPENED), this.state = g.OPEN, void(e && e());
this.div.style.webkitTransform = "scale(0)", this.div.style.transform = "scale(0)", this.div.style.visibility = "visible", this.animationTransition = s.start(l.property(this, "animationScale", 1), d.animation.openDuration, function () {
this.emit(b.OPENED), this.state = g.OPEN, e && e()
}.bind(this))
}
}, t.prototype.animateClose = function (e) {
this.state === g.CLOSING && (s.cancel(this.animationTransition), this.animationTransition = s.start(l.property(this, "animationScale", 0), d.animation.closeDuration, function () {
this.emit(b.CLOSED), this.state = g.CLOSED, this.div.style.visibility = "hidden", this.div.classList.contains("has-hotzone") || this.div.classList.add("has-hotzone"), e && e()
}.bind(this)))
}, t.prototype.needsUpdate = function () {
return this.state !== g.CLOSED
}, t.prototype.update = function (e, t) {
if (this.needsUpdate()) {
var i = (this.updateOrientation(e), this.calcScale(t)),
n = {
x: (e.x + 1) * $("#player").width() / 2,
y: (e.y + 1) * $("#player").height() / 2
};
this.div.screenTransform = this.initialTransform + " translate(" + n.x + "px, " + n.y + "px) scale(" + i * this.animationScale + ")", this.div.style.webkitTransform = this.div.screenTransform, this.div.style.transform = this.div.screenTransform
}
}, t.prototype.getDimensions = function () {
return this.div.getBoundingClientRect()
}, t.prototype.calcScale = function (e) {
return Math.sqrt(e / 40) * d.boardToDiscRatio
}, t.prototype.updateOrientation = function (e) {
if (this.state !== g.ACTIVE) {
var t = e.y < -1 / 3 ? 0 : e.y < 1 / 3 ? 1 : 2,
i = e.x < -1 / 3 ? 0 : e.x < 1 / 3 ? 1 : 2,
n = "";
n += 0 == i ? "right" : 2 == i ? "left" : "", n += 0 == t ? "-down" : 2 == t ? "-up" : "", 1 == i && (n = 0 == t ? "bottom" : 2 == t ? "top" : "", 1 == t && (n = $("#player").width() > $("#player").height() ? e.x < 0 ? "right" : "left" : e.y < 0 ? "bottom" : "top")), 1 == i && 1 == t && n === this.orientation || this.applyOrientation(n)
}
}, t.prototype.applyOrientation = function (e) {
this.div.style.transform = this.div.style.webkitTransform = "", this.div.classList.remove("tag-container-" + this.orientation), this.div.classList.add("tag-container-" + e);
var t = window.getComputedStyle(this.div);
this.initialTransform = t.transform || t.webkitTransform, "none" === this.initialTransform && (this.initialTransform = "");
var i = t.transform.slice(7, -1).split(","),
n = -i[4],
r = -i[5];
this.div.style.webkitTransformOrigin = n + "px " + r + "px", this.div.style.transformOrigin = n + "px " + r + "px", this.orientation = e
}, v.exports = t
}).call(this, "/js/tag/Billboard/Billboard.js")
}, {
"../../util/browser": 182,
"../../util/lerp": 188,
"../../util/logger": 189,
"../../util/transitions": 195,
"../Media/EmbedlyEmbed": 125,
"../Media/EmbedlyPlayer": 126,
"../Media/Image": 128,
"../Media/Link": 129,
"../Media/MediaEvent": 131,
"../Parser/DescriptionChunkType": 133,
"../Parser/DescriptionParser": 134,
"./BillboardEvent": 120,
"./billboardSettings": 121,
"./overlaySettings": 122,
events: 202
}],
120: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
ENTER: "billboard.enter",
LEAVE: "billboard.leave",
OPENING: "billboard.opening",
OPENED: "billboard.open",
CLOSING: "billboard.closing",
CLOSED: "billboard.closed",
ACTIVATING: "billboard.activating",
ACTIVATE: "billboard.activate"
})
}, {}],
121: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
animation: Object.freeze({
hoverOnClosing: !1,
openDelay: 100,
closeDelay: 50,
openDuration: 200,
closeDuration: 100
}),
boardToDiscRatio: 1.2
})
}, {}],
122: [function (e, t, i) {
"use strict";
t.exports = Object.freeze({
boundaryWidth: 30,
boundaryHeight: 0
})
}, {}],
hot: [function (e, t, i) {
"use strict";
function n(e, t, i) {
this.sid = e, this.position = this.conversionArray(t.position), this.rotation = this.conversionArray(t.rotation), this.link = t.link, this.model = i, this.size = t.size, this.build()
}
var g = e("three"),
r = e("../shaders"),
m = e("../settings"),
v = e("../enum/Viewmode"),
d = e("../objects/Panorama"),
o = e("../util/texture"),
p = new g.Raycaster,
a = new g.PlaneBufferGeometry(g_HotMeshSize.g_HotMeshWidth, g_HotMeshSize.g_HotMeshHeight, 1, 1),
s = new g.ShaderMaterial({
uniforms: r.hot.uniforms,
vertexShader: r.hot.vertexShader,
fragmentShader: r.hot.fragmentShader
});
s.transparent = !0, r.hot.uniforms.texture1.value = o.load(g_HotImage.point), r.hot.uniforms.texture2.value = o.load(g_HotImage.point2), n.prototype.conversionArray = function (e) {
if ("[object Array]" == Object.prototype.toString.call(e)) return e;
var t = [];
for (var i in e) t.push(e[i]);
return t
}, n.prototype.build = function () {
var e = new g.Mesh(a, s),
t = parseFloat(window.MP_PREFETCHED_MODELDATA.hotIconScale);
e.dynamic = !0, e.position.copy((new g.Vector3).fromArray(this.position)), e.rotation.copy((new g.Euler).fromArray(this.rotation)), t && e.scale.set(t, t, t), e.name = this.sid, e.type = "hotSprite", (e.belongHot = this).link && (e.hotLink = this.link), this.mesh = e, this.model.add(e), g_HotMeshes.push(e)
}, n.prototype.closestPanoTowardTag = function (e, t) {
var i = [],
n = [],
r = this.mesh.position;
if (e === v.PANORAMA) {
var o = t.position.clone().sub(r).normalize();
n.push(d.scoreFunctions.direction(r, o))
}
var a = new g.Vector3;
i.push(function (e) {
return Math.abs(e.position.x - r.x) > m.tags.visibility.cameraClearance || Math.abs(e.position.z - r.z) > m.tags.visibility.cameraClearance
}, function (e) {
a.copy(r).sub(e.position);
var t = -g.Math.radToDeg(Math.atan(a.y / Math.sqrt(a.x * a.x + a.z * a.z))),
i = m.tags.navigate.tiltTolerance;
return m.insideLookLimitDown - i < t && t < m.insideLookLimitUp + i
}), n.push(d.scoreFunctions.distanceSquared(this.mesh, -2));
var s = t.model.panos.sortByScore(i, n);
if (s && m.tags.navigate.lineOfSight) {
for (var l = 0; l < s.length; l++) {
var c = s[l].pano,
h = c.position.distanceTo(r);
p.set(c.position, r.clone().sub(c.position).normalize());
var u = p.intersectObjects(t.model.colliders);
if (0 === u.length || u[0].distance > h) return console.log(l), c
}
return null
}
return s && 0 < s.length && s[0].pano
}, n.prototype.examine = function (e, t) {
var i = document.getElementById("popup");
if (this.link) {
g_currentHot = this, i.style.display = "block", i.classList.add("wait");
var n = document.createElement("iframe");
g_bgAudio && g_bgAudio.pause();
var r = this.link.substring(this.link.indexOf("html") + 4),
o = "en" == manage.number("lang") ? "&lang=" + manage.number("lang") : ""; - 1 == r.indexOf("?") ? n.src = this.link + "?time=" + randomTime().getTime() + "&id=" + window.number + o : n.src = this.link + "&time=" + randomTime().getTime() + "&id=" + window.number + o, n.id = "id1", n.allowTransparency = "true";
var a = document.getElementById("id1");
if (void 0 === a || null == a) {
document.querySelector(".popup-content").appendChild(n);
var s = !1;
window.loaddingSuccess = function () {
s = !0
}, setTimeout(function e() {
if (s) {
var t = document.querySelector("#id1").contentWindow.document;
t.querySelector("video") && (t.querySelector("video").play(), !t.querySelector("video").paused && t.querySelector(".playPause") && t.querySelector(".playPause").classList.add("fa-pause")), t.querySelector("audio") && t.querySelector("audio").play()
} else setTimeout(e, 300)
}, 800)
}
}
var l = e.mode,
c = m.tags.navigate.nearestPano && this.closestPanoTowardTag(l, e.currentPano) || e.currentPano,
h = this.mesh.position;
e.flyingToTag = !0;
var u = function () {
e.flyingToTag = !1, this.link && i.classList.remove("wait")
}.bind(this);
if (l === v.PANORAMA) {
var d = {
pano: c,
lookAtPoint: h,
duration: null,
maxDistanceOverride: null,
skipWarpingCheck: !1
};
e.flyToPano(d, u)
} else {
var p = {
pano: c
};
if (h) {
var f = (new g.Matrix4).lookAt(c.position, h, new g.Vector3(0, 1, 0));
p.quaternion = (new g.Quaternion).setFromRotationMatrix(f)
}
p.callback = u, p.duration = 1500, p.mode = v.PANORAMA, e.flyToNewMode(p)
}
}, t.exports = n
}, {
three: 217,
"../shaders": 167,
"../enum/Viewmode": 51,
"../objects/Panorama": 148,
"../util/texture": 194,
"../settings": 166
}],
123: [function (M, R, e) {
(function (e) {
"use strict";
function d(e, t, i) {
var n = i.version || "0";
"0" !== n && w.info("tag defined using version " + n), this.model = e, this.sid = t, this.color = (new f.Color).set(i.color || o.tagDefault), this.hoverColor = o._darken(this.color, .2), this.floor = null, this.floorIndex = i.floor, this.mode = m.PANORAMA, i.preferred_camera && i.preferred_camera.mode && (this.mode = i.preferred_camera.mode), this.obj3d = null, this.disc = null, this.materials = {
disc: null,
pole: null
}, this.position = (new f.Vector3).copy(i.position), this.discPosition = (new f.Vector3).copy(i.stem.direction), this.discWorldPosition = null, this.discScale = .05, this.poleEnabled = i.stem.enabled, this.billboard = new r(i.label, i.description, i.media, this), this.visibleTransition = null, this.hoveringDisc = !1
}
var i, l, c, h, u, p, n, f = M("three"),
r = M("./Billboard/Billboard"),
g = M("../settings"),
m = M("../enum/Viewmode"),
o = M("../enum/Colors"),
a = M("../enum/RenderLayers"),
s = M("../enum/RenderOrder"),
v = (M("../util/common"), M("../util/math")),
t = M("../util/texture"),
y = M("../objects/Panorama"),
A = M("../shaders"),
C = M("../util/transitions"),
I = M("../util/lerp"),
E = M("../util/easing"),
_ = M("./Billboard/BillboardEvent"),
b = M("events").EventEmitter,
w = new(M("../util/logger"))(e),
T = t.loadBase64("iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QYPFigDGhCnowAABQFJREFUeNrtXTtyFEEMHXX5FK7iAiYFQ+KAiMyZCQnxRXwVFwkngSKD2BQXEYlNLXaZnZ7RX0/xbrek96RW9/RnWSCthSoaxcys4iwiAgGagN2FFATQe5OBAHpvMhBA700GAvC9iUBVgZd2dmTd9siIAvxOB9/RI9GI3kftf3a0t0YG2OOEaOk0qy2UyWFZKutMthGc09tWiuyQKkuvke2miE6ouOYe1QcE4HsTgSIY2gX4iP4ZHcFn5kt+KpfmFfhK2zXXDMgR/FdE9D3ivNyaqMz8YlmW3x46kIfjNQyxXlnzskG6X8psQJjlVGObJPtLqXj1DSGWvhyZFI70EUVTv3tf3VkEAWmDLwV8xmmehe17+6DIymFHkL6fKaJS2BFk5+8RzUlVwY9qG0ViY2XwLfyzpV2KoEQX4C18NdsmAfzeJBiRDekg3ruGhpCi7wC+eXH4XqI9kc+Rs4wE+DZ+XNPeiKY0MoHtUHCyU6nTLOBnISoz84yuRETP6bqmLdrjiMhOjXw0zJKsx9oaxcC/1j4atizLdaah4GidYEEAbfC9NpVGsmsrVgTwe5PgZEkqUbaSP+iRds9CxuiPeo4ggr2z2A1Efg/dNs0CokV/Bgd7b3mf7X9EWQCpFF2ZhqiZDHDqFf0p79/zXYhajRWt7cgr/Wc/OOrli7U4DmllAb6eDRr4jKhAVDoyHtl/otNAfOrNt9YwIoJX8lr2QDYdYh1xIehN4QB+G46YUtW/2GHF4tfFWPvpGK7RMsCvBsP4F2SAptHv4atVGQDVe9/ZxLEh4AOiP+aMYMLnH48OAUj/fYeBsUBaCwgAAtQYEzvWAcgAEBAA4kwArCHknkkgAyADQEAACAgAAQEgIMC8dH3vJ4JI+B4ZABkAAgI4S8fFpCg2IwMgA0BAgOfT1BVclH6o+S+GR++3wbawmOO/BC5/t4RhLt93DWFUiwxU/ygCIZIEsH4FnJk/FY5+Edsk6zJa82McEI2V/qUKwH8yQNTz6wBfrwAUrwEwm7AFz6wI9GBvpSwQ2X9Dml3RbsWqBL4GPjOvhp2hHsihOzO/1FgH+Dnx2/PuJFDQecanP1ZnhBnlcVl0Dttn8Btahnnfmg3w5YcAzKcLDlVp3wyKNhxkfC1kWRK/GfRgbPVHo7RlbGGedy3wWBdmvnEA/qb0s3GSw4BlpFgQLqIdKgTISgINIrR8OnZFxxeRa4RDsf6/oZ27MCBthlUrmipFv8g6gMeb9wBfLphEnoxh5luQwBz8W4n2TNMNhgMb3820J7YUvAVMZAL/wBHvHJnAF/zZNkkj2rdGdhciaPlnS7ubUzBIkB980RpAaoGicl2wA3y1U9q0E2TWBLNKNtD2w572h6Zh96uoF3vaz5wR9urPzBfaQSZ1no8NouD1sixfk2B/TkTfovtUjACWCkceGiztk+rL/JNpxYMj1jZJ9ueyc7fCjmEvG1zOBko75r44vJXu91C0CjqN9pn51itw1Cps64slJHSLpIuVbmoLQTOXGFjvLKJnxBj4iwhBQlEY7hWBHhLJJ9TRaADvQIAtlXoVIkS2m6I7IzMRMthqfjh0S8F1sDv7LAHoZ1u2knt990h7rq7S4VBPWyi787ycWOVy7DCvh0t8M38kV4JgX0meFIr0mTtkcVV1W1jEYjZ0dY0dQc0JkJkMWaaubebXAL0QASKRIftqJa5lbwQ2BPJE/gA4gL5xbiNHuQAAAABJRU5ErkJggg=="),
x = t.loadBase64("iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QYPFgoIKnA4CwAAAkVJREFUeNrt3Uluw0AMRFHTvv+NrSibBAgyILGjodn16gbS/yxyYUOXi0SnZnyodV3XXV5WVREgBHaKFAV6tgwFerYMBXq2DAV8tggFfLYIBXy2CAV8tggFfrYEBXy2CAV+tgQFfrYEBXy2CAV+tgQFfrYEBX62BAV+tgQFfrYEBX62BAV+tgQFfrYEBX62BAV+tgRXry5cHNOf3QIFfrYEBX62BG4AN4DpT26BAj9bAivACjD9yS2gATSA6U9uAQ2gAUx/cgtoAA1g+pNbQAOEhwBWgPpPXgMawAoQK0D9x64BDWAFiBWg/mPXgAawAoQAQgAJPgIdgLmHoAawAoQAQgAhgBBACCAEEAIIAYQAQgAhgBBACCAEEAIIAYQAQgAhgEwQfw1LBe+vYUIAIQAB3rIsy4vXEXwEOgTzDkArQAhgBXyKNZBT/xpACGAFfBNrIKP+NYAQwAr4IdbA/PWvAcR3A5OnXwOIbwcnT78GkN8bQAvMO/1/bgA/FglvAC0w5/Q/JAAJ5oPvCJTHGkALzDX9TwlAgnngPy0ACeaA7waQ5xtAC/Sf/n8LQILe8DcRgAR94W8mAAl6wt9UABL0g7+5ACToBX8XAUjQB/5uApCgB/xdBSDB+PB3F4AEY8M/RAAijAn+cAFIMB78wwUgwVjwTxGACGOAf8/1zAf2a+Nz4Z/aANrgXPBDCZAmwgjghxRgdhFGAj+0ALOJMCL4FgJ0lmFk6C0F6CBDF+jtBfiY+/2+3G63K+ihAhzZEN1hi3zJK04kLKvtOfg1AAAAAElFTkSuQmCC"),
S = new f.PlaneBufferGeometry(1, 1);
d.prototype = Object.create(b.prototype), d.raycaster = new f.Raycaster, d.prototype.bindEvents = function () {
this.billboard.on(_.ENTER, this.setHoverState.bind(this)), this.billboard.on(_.LEAVE, this.setFreeState.bind(this))
}, d.prototype.build = function () {
return this.floor = this.model.floors.get(this.floorIndex) || this.model.floors.first(), this.floor && (this.billboard.build(this.model.sid), this.obj3d = this.buildObject3D(), this.floor.add(this.obj3d)), this
}, d.prototype.buildObject3D = function () {
var e = new f.Object3D;
e.position.copy(this.position);
var t = f.UniformsUtils.clone(A.tagDisc.uniforms);
t.bg.value = x, t.mask.value = T, t.color.value.copy(this.color), this.materials.disc = new f.RawShaderMaterial({
transparent: !0,
vertexShader: A.tagDisc.vertexShader,
fragmentShader: A.tagDisc.fragmentShader,
uniforms: t
}), this.disc = new f.Mesh(S, this.materials.disc), this.disc.layers.set(a.TAG), this.disc.position.copy(this.discPosition), this.disc.renderOrder = s.tagDisc;
var i = (this.disc.tag = this).buildPole();
return i.layers.set(a.TAG), i.renderOrder = s.tagStem, e.add(i), e.layers.set(a.TAG), e.add(this.disc)
}, d.prototype.buildPole = function () {
var e = new f.BufferGeometry,
t = new Float32Array(6);
return t[0] = t[1] = t[2] = 0, t[3] = this.discPosition.x, t[4] = this.discPosition.y, t[5] = this.discPosition.z, e.addAttribute("position", new f.BufferAttribute(t, 3)), this.materials.pole = new f.LineBasicMaterial({
linewidth: g.tags.pole.width,
color: g.tags.pole.color,
opacity: 0,
visible: this.poleEnabled,
transparent: !0,
depthWrite: !1
}), new f.Line(e, this.materials.pole)
}, d.prototype.setFreeState = function (e) {
!e && this.hoveringDisc || this.billboard.close(e).then(function () {
this.materials.disc.uniforms.color.value = this.color
}.bind(this))
}, d.prototype.setHoverState = function (e) {
this.billboard.open(e), this.materials.disc.uniforms.color.value = this.hoverColor
}, d.prototype.hide = function (e, t) {
var i = $.Deferred();
if (0 === this.materials.disc.uniforms.opacity.value && !C.isRunning(this.visibleTransition)) return i.resolve().promise();
e = e || 0, t = t || 0, C.cancel(this.visibleTransition);
var n, r, o, a = this.materials.disc.uniforms.opacity.value / g.tags.disc.opacity,
s = t + e,
l = t / s;
return this.visibleTransition = C.start((n = this, r = I.property(n.materials.disc.uniforms.opacity, "value", 0), o = I.property(n.materials.pole, "opacity", 0), function (e) {
r(e), n.materials.pole && o(e)
}), s * a, function () {
i.resolve()
}, l, E[g.warp.blendEasing]), i.promise()
}, d.prototype.show = function (e, t) {
var i = $.Deferred();
if (this.materials.disc.uniforms.opacity.value === g.tags.disc.opacity && !C.isRunning(this.visibleTransition)) return i.resolve().promise();
e = e || 0, t = t || 0, C.cancel(this.visibleTransition);
var n, r, o, a = (g.tags.disc.opacity - this.materials.disc.uniforms.opacity.value) / g.tags.disc.opacity,
s = t + e,
l = t / s;
return this.visibleTransition = C.start((n = this, r = I.property(n.materials.disc.uniforms.opacity, "value", g.tags.disc.opacity), o = I.property(n.materials.pole, "opacity", g.tags.pole.opacity), function (e) {
r(e), n.materials.pole && o(e)
}), s * a, function () {
i.resolve()
}, l, E[g.warp.blendEasing]), i.promise()
}, d.prototype.closestPanoTowardTag = function (e, t) {
var i = [],
n = [],
r = this.disc.getWorldPosition();
if (e === m.PANORAMA) {
var o = t.position.clone().sub(r).normalize();
i.push(y.filters.isPanoAligned()), i.push(y.filters.inPanoDirection(r, o, .5)), i.push(y.filters.isNeighbourPanoTo(t)), n.push(y.scoreFunctions.direction(r, o))
}
var a = new f.Vector3;
i.push(function (e) {
return Math.abs(e.position.x - r.x) > g.tags.visibility.cameraClearance || Math.abs(e.position.z - r.z) > g.tags.visibility.cameraClearance
}, function (e) {
a.copy(r).sub(e.position);
var t = -f.Math.radToDeg(Math.atan(a.y / Math.sqrt(a.x * a.x + a.z * a.z))),
i = g.tags.navigate.tiltTolerance;
return g.insideLookLimitDown - i < t && t < g.insideLookLimitUp + i
}), n.push(y.scoreFunctions.distanceSquared(this, -2));
var s = this.model.panos.sortByScore(i, n);
if (g.tags.navigate.lineOfSight) {
for (var l = 0; l < s.length; l++) {
var c = s[l].pano,
h = c.position.distanceTo(r);
if (!g.tags.visibility.anyDistance && h > g.tags.visibility.visibleDistance) return null;
d.raycaster.set(c.position, r.clone().sub(c.position).normalize());
var u = d.raycaster.intersectObjects(this.model.colliders);
if (0 === u.length || u[0].distance > h) return c
}
return null
}
return 0 < s.length && s[0].pano
}, d.prototype.examine = function (i) {
var e = i.mode,
n = g.tags.navigate.nearestPano && this.closestPanoTowardTag(e, i.currentPano) || i.currentPano,
t = this.disc.getWorldPosition();
this.billboard.setActiveState();
var r = function () {
var e = this.billboard.getDimensions(),
t = new f.Vector3;
v.convertScreenPositionToNDC(e.left + e.width / 2, e.top + e.height / 2, t), t.unproject(i.camera), i.flyToPano({
pano: n,
lookAtPoint: t
})
}.bind(this);
if (e === m.PANORAMA)
if (n !== i.currentPano) {
var o = {
pano: n,
lookAtPoint: t,
duration: null,
maxDistanceOverride: null,
skipWarpingCheck: !1
};
i.flyToPano(o, r)
} else setTimeout(function () {
this.billboard.open().then(function () {
r()
})
}.bind(this), 0);
else {
var a = {
pano: n
};
if (t) {
var s = (new f.Matrix4).lookAt(n.position, t, new f.Vector3(0, 1, 0));
a.quaternion = (new f.Quaternion).setFromRotationMatrix(s)
}
a.callback = r, a.duration = 1500, a.mode = m.PANORAMA, i.flyToNewMode(a)
}
}, d.prototype.update = (n = new f.Vector3, function (e, t) {
this.discWorldPosition = this.disc.getWorldPosition(), this.updateDisc(e, t), this.billboard.needsUpdate() && (n.copy(this.discWorldPosition).project(t), n.z < 1 && (n.y *= -1, this.billboard.update(n, this.getDiscRadius(n, t))))
}), d.prototype.updateDisc = (l = new f.Vector3, c = new f.Vector3, h = new f.Vector3, u = new f.Vector3, p = new f.Vector3, function (e, t) {
var i = g.tags.visibility,
n = g.tags.disc.scale,
r = e === m.DOLLHOUSE || e === m.FLOORPLAN ? g.tags.visibility.visibleDistance : t.position.distanceTo(this.discWorldPosition);
if (this.obj3d.visible = 0 !== this.disc.material.opacity && (i.anyDistance || r <= i.visibleDistance || e === m.TRANSITIONING) && (!i.hideViaFloor || this.tagVisibleOnCurrentFloor(e)) && (!i.hideOffScreenDisc || !this.offScreen(this.disc, t)) && (!i.hideOffScreenObject || !this.offScreen(this.obj3d, t)), this.obj3d.visible) {
this.disc.quaternion.copy(t.quaternion);
var o = n.maxSize - (n.maxSize - n.minSize) * f.Math.smoothstep(r, n.nearBound, n.farBound);
l.copy(this.discWorldPosition).project(t), c.set($("#player").width() / 2, $("#player").height() / 2, 1).multiply(l), h.set(o / 2, 0, 0).add(c), u.set(2 / $("#player").width(), 2 / $("#player").height(), 1).multiply(h), p.copy(u).unproject(t);
var a = p.distanceTo(this.discWorldPosition),
s = 1 + g.tags.disc.scale.responsiveness / 100 * (d.viewportScale() - 1);
this.discScale = a * s, this.disc.scale.set(this.discScale, this.discScale, this.discScale)
}
}), d.prototype.getDiscRadius = (i = new f.Vector3, function (e, t) {
return i.set(-this.discScale / 2, 0, 0).applyQuaternion(t.quaternion).add(this.discWorldPosition).project(t), Math.abs(e.x - i.x) * $("#player").width()
}), d.prototype.tagVisibleOnCurrentFloor = function (e) {
return !(e === m.DOLLHOUSE || e === m.FLOORPLAN) || this.model.allFloorsVisible || !this.floor.hidden
}, d.prototype.offScreen = function (e, t) {
var i = e.getWorldPosition().project(t);
return !(-1 < i.x && i.x < 1 && -1 < i.y && i.y < 1)
}, d.viewportScale = function () {
return d.viewportWidth === $("#player").width() && d.viewportHeight === $("#player").height() || (d.viewportWidth = $("#player").width(), d.viewportHeight = $("#player").height(), d.currentViewportScale = Math.sqrt(Math.min(d.viewportWidth, d.viewportHeight) / g.tags.disc.scale.baseViewportSize)), d.currentViewportScale
}, R.exports = d
}).call(this, "/js/tag/tag.js")
}, {
"../enum/Colors": 19,
"../enum/RenderLayers": 41,
"../enum/RenderOrder": 42,
"../enum/Viewmode": 51,
"../objects/Panorama": 148,
"../settings": 166,
"../shaders": 167,
"../util/common": 185,
"../util/easing": 186,
"../util/lerp": 188,
"../util/logger": 189,
"../util/math": 190,
"../util/texture": 194,
"../util/transitions": 195,
"./Billboard/Billboard": 119,
"./Billboard/BillboardEvent": 120,
events: 202,
three: 217
}],
124: [function (M, R, e) {
(function (e) {
"use strict";
function t() {
this.tagState = T.IDLE, this.intersectTag = null, this.hoveredTag = null, this.activeTag = null, this.tagDiscs = [], this.raycaster = new i.Raycaster, this.modelManager = null, this.player = null, this.totaltags = 0, this.navigatingViaTag = !1, this.enabled = !1
}
var o, h, u, d, p, f, s, l, c, i = M("three"),
n = M("../util/logger"),
r = M("../util/common"),
a = M("../controls/serializer"),
g = M("../objects/Snapshot"),
m = M("../settings"),
v = M("./Billboard/BillboardEvent"),
y = M("./Media/MediaEvent"),
A = M("./Media/LinkType"),
C = M("../enum/Viewmode"),
I = M("../enum/WarpStyle"),
E = M("../enum/BlackoutStyle"),
_ = M("../enum/ModelManagerEvents"),
b = M("../enum/tagEvents"),
w = M("../enum/PlayerEvents"),
T = (M("../util/lerp"), M("../enum/TagStates")),
x = M("events").EventEmitter,
S = new n(e);
r.extend(t, x), t.prototype.init = function (e, t) {
this.modelManager = e, this.player = t, this.updateModel(), this.bindEvents()
}, t.prototype.update = function (e) {
this.updateTags(this.player.mode, this.player.camera, this.player.currentPano, this.player.flying)
}, t.prototype.updateTags = function (e, t, i, n) {
for (var r in this.model.tags) this.model.tags[r].update(e, t, i, n)
}, t.prototype.updateModel = function () {
this.model = this.modelManager.getActiveModel(), this.gettagsFromModel(), this.totaltags = Object.keys(this.model.tags).length
}, t.prototype.gettagsFromModel = function () {
for (var e in this.tagDiscs = [], this.model.tags) {
var t = this.model.tags[e].disc;
t && this.tagDiscs.push(t)
}
}, t.prototype.bindEvents = function () {
function e() {
Object.keys(this.model.tags).forEach(function (e) {
var t = this.model.tags[e];
t.bindEvents(), t.billboard.on(y.LINK_CLICK, function (e) {
e.type === A.NAVIGATION && this.navigateViaLink(e.url)
}.bind(this)), t.billboard.on(y.IMAGE_OPENED, function () {
this.tagState = T.EXAMINE, this.emit(y.IMAGE_OPENED)
}.bind(this)), t.billboard.on(v.CLOSING, this.dismissExaminedTag.bind(this))
}.bind(this))
}
this.modelManager.on(_.ActiveModelChanged, this.updateModel.bind(this)), this.modelManager.on(_.ActiveModelChanged, e.bind(this)), this.player.on(w.ModeChanging, this.onPlayerModeChanging.bind(this)), this.player.on(w.PanoChosen, this.onPanoChange.bind(this)), this.player.on(w.Ready, this.onPlayerReady.bind(this)), this.player.on(w.FlyingEnded, this.onPlayerFlyingEnded.bind(this)), this.player.on(w.WarpStarted, this.handleWarpStart.bind(this)), this.player.on(w.WarpInterrupted, this.handleWarpInterruption.bind(this)), e.call(this)
}, t.prototype.navigateViaLink = function (e) {
var t = a.deserialize(e);
if (t)
if (t.mode === C.PANORAMA) {
try {
this.player.model.panos.get(t.panoId)
} catch (e) {
return void S.warn("Unable to find panorama location", t.panoId)
}
this.player.warpToPanoById(t.panoId, t.quaternion, null, null, I.BLACK)
} else {
var i = {
cameraMode: t.mode,
position: t.position,
quaternion: t.quaternion,
scanId: t.panoId,
orthoZoom: t.zoom,
floorVisibility: t.floorVisibility,
thumbUrl: null,
name: null
};
this.player.flyToNewMode({
mode: t.mode,
duration: m.warp.outsideTime,
warpDest: new g(i),
force: !0
})
}
}, t.prototype.handleWarpStart = function (e, t, i, n) {
this.dismissExaminedTag(), t === I.BLACK && (null != n || (n = m.warp.teleportTime), e && (i = E.END), this.hideShowTagsForBlackoutStyle(i, n))
}, t.prototype.handleWarpInterruption = function (e, t, i) {
null != i || (i = m.warp.teleportTime), this.hideShowTagsForBlackoutStyle(t, i)
}, t.prototype.hideShowTagsForBlackoutStyle = function (e, t) {
var i = 0,
n = 0,
r = t / 2;
switch (null != e || (e = E.MIDDLE), e) {
case E.END:
this.hideAlltags(r);
break;
case E.BEGINNING:
this.hideAlltags().done(this.showAlltags.bind(this, r));
break;
case E.NONE:
break;
case E.MIDDLE:
n = i = r, this.hideAlltags(n), setTimeout(function () {
this.showAlltags(i)
}.bind(this), n);
break;
case E.FADEIN:
setTimeout(function () {
this.showAlltags(r)
}.bind(this), r)
}
}, t.prototype.onPlayerModeChanging = function (e, t) {
t !== C.PANORAMA && this.dismissExaminedTag(), t === C.PANORAMA && player.currentPano && !player.currentPano.isAligned() && (t = C.OUTDOOR);
var i = t !== C.OUTDOOR;
i !== this.model.tagsShown && (i ? this.showAlltags(m.tags.startup.fadeInDuration) : this.hideAlltags(m.tags.startup.fadeInDuration))
}, t.prototype.onPanoChange = function (e, t) {
var i = this.navigatingViaTag;
if (this.navigatingViaTag = !1, !i) {
this.dismissExaminedTag();
var n = e && !e.isAligned() ? C.OUTDOOR : C.PANORAMA,
r = t && !t.isAligned() ? C.OUTDOOR : C.PANORAMA;
n !== r && (r === C.PANORAMA ? this.showAlltags(m.tags.startup.fadeInDuration, null, !0) : this.hideAlltags(m.tags.startup.fadeInDuration))
}
}, t.prototype.onPlayerReady = function (e, t, i) {
this.startAlltags(e, t ? i : null)
}, t.prototype.onPlayerFlyingEnded = function (e, t) {
this.updateClosestTags(e)
}, t.prototype.dismissExaminedTag = function () {
this.activeTag && this.tagState === T.EXAMINE && this.dismissActiveTag(), this.hoveredTag && (this.hoveredTag.setFreeState(!0), this.hoveredTag = null)
}, t.prototype.startAlltags = function (e, t) {
this.model.shouldShowtags = m.tags.enabled, this.enabled = !0, e || (this.showAlltags(m.tags.startup.fadeInDuration, m.tags.startup.fadeInDelay), t && setTimeout(function () {
this.activateTag(this.model.getTagBySid(t))
}.bind(this), m.tags.startup.fadeInDuration / 2))
}, t.prototype.showAlltags = function (e, t, i) {
function n() {
++o === this.totaltags && (this.model.tagsShown = !0, r.resolve())
}
var r = $.Deferred();
if (!i && this.player.mode === C.PANORAMA && this.player.currentPano && !this.player.currentPano.isAligned() || !this.model.shouldShowtags) return r.resolve().promise();
var o = 0;
for (var a in this.model.tags) {
this.model.tags[a].show(e, t).done(n.bind(this))
}
return r.promise()
}, t.prototype.hideAlltags = function (e, t) {
function i() {
++r === this.totaltags && (this.model.tagsShown = !1, n.resolve())
}
var n = $.Deferred(),
r = 0;
for (var o in this.model.tags) {
var a = this.model.tags[o];
a.hide(e, t).done(i.bind(this)), a === this.activeTag && this.dismissActiveTag()
}
return n.promise()
}, t.prototype.enableHovering = function () {
this.enabled = !0
}, t.prototype.disableHovering = function () {
this.enabled = !1
}, t.prototype.activateTag = function (e, t) {
t = t || T.EXAMINE, this.activeTag = e, this.activeTag.hoveringDisc = !0, this.activeTag.setHoverState(t === T.EXAMINE), this.tagState = t, this.emit(b.TagActivated, e)
}, t.prototype.dismissActiveTag = function () {
this.activeTag.hoveringDisc = !1, this.activeTag.setFreeState(!0);
var e = this.activeTag;
this.activeTag = null, this.tagState = T.IDLE, this.emit(b.TagDismissed, e)
}, t.prototype.clickedOnTag = function (e) {
var t = function () {
this.navigatingViaTag = !0, this.activeTag.examine(this.player), this.emit(b.TagNavigation, this.activeTag)
}.bind(this);
return this.tagState !== T.EXAMINE ? (this.activateTag(this.intersectTag, T.EXAMINE), this.activeTag = this.intersectTag, t(), !0) : (this.dismissActiveTag(), !1)
}, t.prototype.intersecttag = (s = new i.Vector3, l = new i.Vector3, c = new i.Vector3, function (e, t, i) {
if (!this.enabled) return null;
var n = null,
r = this.tagDiscs.filter(function (e) {
return e.parent.visible
});
if (0 < r.length) {
var o = this.model.floors.reduce(function (e, t) {
return t.hidden ? e : e.concat(t.collider.children)
}, r);
s.set(e.x, e.y, -1).unproject(i), l.set(e.x, e.y, 1).unproject(i), c.copy(l).sub(s).normalize(), this.raycaster.set(s, c);
var a = this.raycaster.intersectObjects(o);
0 < a.length && -1 !== r.indexOf(a[0].object) && (n = a[0].object.tag)
}
return this.intersectTag = n, t && (this.activeTag && n !== this.activeTag && (this.tagState === T.BROWSE || this.tagState === T.EXAMINE && n) && this.dismissActiveTag(), n && n !== this.activeTag && (n.listeners(v.ENTER).length < 1 && (n.billboard.on(v.ENTER, function () {
this.hoveredTag = n
}.bind(this)), n.billboard.on(v.LEAVE, function () {
this.hoveredTag = null
}.bind(this))), this.activateTag(n, T.BROWSE))), n
}), t.prototype.rankedtagInDirection = (h = [], u = [], d = new i.Vector3, p = new i.Vector3, f = new i.Vector3, function (e, t, i, n) {
for (var r = 0, o = u.length = 0; o < this.closesttags.length; o++) {
var a = this.closesttags[o];
p.copy(a.position), p.add(a.discPosition), d.copy(t), d.sub(p).negate(), d.normalize();
var s = d.dot(n);
if (0 <= s && (f.copy(p), f.project(i), this.intersecttag(f, !1, i))) {
if (r >= h.length)
for (var l = 0; l < 64; l++) h.push({
tag: a,
dot: s
});
var c = h[r];
c.tag = a, c.dot = s, c.position = math.projectPositionToCanvas(p, i), u.push(c), r++
}
}
return u.sort(function (e, t) {
return e.dot > t.dot ? -1 : e.dot < t.dot ? 1 : 0
}), e < u.length ? u[e].tag : null
}), t.prototype.updateClosestTags = (o = new i.Vector3, function (e) {
this.closesttags || (this.closesttags = []), this.closesttags.length = 0;
var t = this.model.tags;
if (t)
for (var i in t)
if (t.hasOwnProperty(i)) {
var n = t[i],
r = n.position;
o.copy(e), o.sub(r).negate(), o.lengthSq() < 30 && this.closesttags.push(n)
}
}), R.exports = t
}).call(this, "/js/tag/tagManager.js")
}, {
"../controls/serializer": 14,
"../enum/BlackoutStyle": 18,
"../enum/tagEvents": 32,
"../enum/ModelManagerEvents": 33,
"../enum/PlayerEvents": 40,
"../enum/TagStates": 44,
"../enum/Viewmode": 51,
"../enum/WarpStyle": 52,
"../objects/Snapshot": 153,
"../settings": 166,
"../util/common": 185,
"../util/lerp": 188,
"../util/logger": 189,
"./Billboard/BillboardEvent": 120,
"./Media/LinkType": 130,
"./Media/MediaEvent": 131,
events: 202,
three: 217
}],
125: [function (r, o, e) {
(function (e) {
"use strict";
function t() {
this.embedWrapper = null, this.embedElement = null
}
var i = r("../../util/ajax"),
a = r("./mediaSettings"),
n = r("../../settings"),
s = new(r("../../util/logger"))(e);
t.prototype.createDomElement = function () {
return this.embedWrapper = document.createElement("div"), this.embedWrapper.classList.add("tag-embed"), this.embedWrapper.classList.add("hidden"), this.embedWrapper
}, t.prototype.load = function (e) {
var t = "https://api.embedly.com/1/oembed?key=" + n.appConfig.embedly_key + "&url=" + encodeURIComponent(e) + "&maxwidth=" + a.maxEmbedWidth;
return new Promise(function (r, o) {
i.get(t).then(function (e) {
if ((e = JSON.parse(e)).html && -1 === e.html.indexOf("