Skip to content

Instantly share code, notes, and snippets.

@kodi
Created September 12, 2012 19:28
Show Gist options
  • Save kodi/3709296 to your computer and use it in GitHub Desktop.
Save kodi/3709296 to your computer and use it in GitHub Desktop.
var EarPods360 = AC.Class({
initialize: function (g, i, h, j, l, k) {
if (AC.Environment.Feature.supportsCanvas()) {
this._element = $(g);
this._captions = null;
this._showOnScroll = new AC.ShowOnScroll(this._element);
this._showOnScroll.setDelegate(this);
this._flow = null;
this._fps = j;
this._scrubRotateDistance = l;
this._scrubbable = true;
this._scrubDirection = k;
AC.Synthesize.synthesize(this);
this.setup(i, h)
}
},
setup: function (g, f) {
if (AC.Detector.isiPad()) {
if (typeof AC.Detector.isiPadWithGyro() !== "boolean") {
var e = this;
window.setTimeout(function () {
e.setup.apply(e, [g, f])
}, 20)
} else {
if (AC.Detector.isiPadWithGyro() === true) {
this.__setup(g, f)
} else {
this.setScrubbable(false);
this.__setup(g, f)
}
}
} else {
if (AC.Detector.isMobile() && window.devicePixelRatio < 1.5) {
this.setScrubbable(false);
this.__setup(g, f)
} else {
if (window.navigator && window.navigator.userAgent && window.navigator.userAgent.match(/android/i)) {
return
} else {
var h = AC.Detector.macOSVersion();
if (h && h < 10.7 && h > 10) {
this.setScrubbable(false)
} else {
this.setScrubbable(!window.devicePixelRatio || window.devicePixelRatio < 1.5)
}
this.__setup(g, f)
}
}
}
},
__setup: function (d, e) {
this.__hideableElements = [];
this.__setupCaptions(AC.Element.selectAll(".caption", this.element()), e);
var f = (typeof window.ontouchstart === "undefined" || !this.captions()) ? true : false;
this.setFlow(new AC.Flow.VR(this.element(), d, {
scrubDirection: this.scrubDirection(),
scrubbable: this.scrubbable(),
scrubRotateDistance: this.scrubRotateDistance(),
autoplay: false,
throwable: f,
maxThrowDuration: 1,
fps: this.fps()
}));
this.flow().setDelegate(this);
AC.Element.addClassName(this.element(), "enhanced");
this.__insertCaptions()
},
__setupCaptions: function (e, f) {
var h;
var g;
if (e.length > 0) {
this.setCaptions({})
}
for (h = 0; h < e.length; h += 1) {
if (!isNaN(f[e[h].id])) {
g = f[e[h].id];
if (typeof this.captions()[g] === "undefined") {
this.captions()[g] = []
}
this.captions()[g].push(e[h]);
AC.Element.setStyle(e[h], "opacity:0");
e[h].parentNode.removeChild(e[h])
}
}
},
__insertCaptions: function () {
if (!this.captions()) {
return false
}
var c;
var d;
for (c in this.captions()) {
if (this.captions().hasOwnProperty(c) && Array.isArray(this.captions()[c])) {
for (d = 0;
d < this.captions()[c].length; d += 1) {
this.element().appendChild(this.captions()[c][d]);
this.__hideableElements.push(this.captions()[c][d])
}
}
}
},
__playToCaption: function () {
if (this.__throwDirection) {
if (this.scrubbable()) {
this.flow().options().scrubbable = false
}
var h;
var i;
var l;
var m = this.flow().flow().forwards().currentFrame();
var n = this.flow().flow().forwards().framecount() - 1;
var k;
var j;
for (k in this.captions()) {
if (this.captions().hasOwnProperty(k)) {
k = parseInt(k, 10);
j = (k - m) * this.__throwDirection;
if (j < 0) {
if (this.__throwDirection < 0) {
j = m + n - k
} else {
j = n - m + k
}
}
if (!h || (i && j < i)) {
h = k;
i = j
}
}
}
if (typeof h !== "undefined") {
this.flow().play({
direction: this.__throwDirection,
toFrame: h,
fps: 100,
continuous: false
})
}
}
},
scrolledIntoView: function () {
if (!this.__hasInteracted && !this.__hasPlayed) {
var b = this;
window.setTimeout(function () {
b.flow().play.call(b.flow())
}, 20);
this.__hasPlayed = true
}
},
visitorEngaged: function () {
this.showOnScroll().stopObserving();
this.analytics("engaged")
},
onDidPlay: function () {
var b = this.flow().flow().forwards().currentFrame();
if (this.__hasInteracted && this.captions() && typeof this.captions()[b] !== "undefined") {
if (this.scrubbable()) {
this.flow().options().scrubbable = true
}
this.captions()[b].forEach(function (a) {
AC.Element.setStyle(a, "opacity:1")
})
}
},
onScrubStart: function () {
this.analytics("interacted");
this.__hasInteracted = true;
if (this.__hideableElements) {
this.__hideableElements.forEach(function (b) {
AC.Element.setStyle(b, "opacity:0")
})
}
},
onScrubMove: function (b) {
if (!this.captions()) {
return false
}
},
onScrubEnd: function () {
if (!this.captions()) {
return false
}
var b = this.flow().__scrubHistory ? this.flow().__scrubHistory.slice(0) : [];
if (b.length > 1) {
if (b[1] === 0 && b[2]) {
b[1] = b[2]
}
this.__throwDirection = (b[0] - b[1]) > 0 ? this.flow().options().scrubDirection : this.flow().options().scrubDirection * -1
} else {
this.__throwDirection = 0
}
if (this.flow().options().throwable === false) {
this.__playToCaption()
}
},
onDidThrowStep: function (d) {
if (!this.captions()) {
return false
}
if (this.__throwDirection) {
d = d.slice(0);
var c;
if (d.length > 1) {
c = (d[0] - d[1]) * this.__throwDirection * -1;
if (c < 0) {
c = Infinity
}
} else {
c = 0
}
if (c <= 5) {
this.__playToCaption()
}
}
},
analytics: function (c) {
if (typeof this.__didTrack === "undefined") {
this.__didTrack = []
}
if (this.__didTrack.indexOf(c) < 0) {
this.__didTrack.push(c);
var d = {
prop3: (AC.Tracking.pageName() + " - " + this.element().id + " - " + c)
};
AC.Tracking.trackClick(d, this, "o", d.prop3)
}
}
});
var earPods360;
Event.onDOMReady(function () {
var h = "/v/iphone/shared/earpods-360/a/sequence/";
var i = 18;
var g = {
"earpod-caption-primary": 65,
"earpod-caption-front": 65,
"earpod-caption-rear": 166,
"earpod-caption-bass": 166
};
var f = 2000;
var j = -1;
if (typeof window.ontouchstart !== "undefined") {
h = "/v/iphone/shared/earpods-360/a/sequence_half/";
i = 9;
g = {
"earpod-caption-primary": 32,
"earpod-caption-front": 32,
"earpod-caption-rear": 83,
"earpod-caption-bass": 83
};
f = 1000
} else {
if (window.devicePixelRatio >= 1.5) {
h = "/v/iphone/shared/earpods-360/a/sequence_2x/"
}
}
earPods360 = new EarPods360("animation-earpods", h, g, i, f, j)
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment