Skip to content

Instantly share code, notes, and snippets.

@libryder
Created November 24, 2011 19:52
Show Gist options
  • Save libryder/1392150 to your computer and use it in GitHub Desktop.
Save libryder/1392150 to your computer and use it in GitHub Desktop.
Google's Jules Verne doodle obfuscated javascript
<script>
(function() {
var d = true,
g = false,
h = window,
i = h.google,
j = document,
k = "push",
l = "getElementById",
m = "targetTouches",
n = "getTime",
o = "setTimeout",
p = "style";
if (!i) i = h.google = {};
if (!i.doodle) i.doodle = {};
if (!i.doodle.a) i.doodle.a = [];
var q = navigator.userAgent.indexOf("MSIE") != -1,
aa = ["webkitTransform", "MozTransform", "OTransform", "transform"],
ba = ["webkitTransition", "MozTransition", "OTransition", "transition"],
ca = {
37: 3,
38: 1,
39: 4,
40: 2
},
da = ["2011/verne-hp.png", "2011/verne-hp-1.png", "2011/verne-hp-2.png", "2011/verne-hp-3.png", "2011/verne-hp-4.png"],
ea = [1, 0.8726, 0.7427, 0.5],
fa = 1E4 / 66,
ga = 1 / 3,
ha = 2 / 3,
r = 0,
s = 0,
t = 0,
ia = 0,
u = 93,
v = 0,
w = 0,
x = 119,
A = 0,
B = 0,
E = g,
ja, ka = g,
la = 0,
ma = 0,
na = 0,
oa = 0,
pa = d,
qa = 0,
F = g,
G = 0,
H = 0,
ra = g,
sa, I = g,
J = g,
ta = 0,
ua = g,
va, K = 0,
L = 0,
M = 10,
N = 0,
O = 0,
wa = 0,
P = "",
xa = "",
ya = g,
Q = g,
za = g,
R, Aa, S, Ba, Ca, Da, T, Ea, U = 0.2;
function V(a, b, c) {
if (!i.doodle.d) i.doodle.d = [];
i.doodle.d[k](arguments);
a.addEventListener ? a.addEventListener(b, c, g) : a.attachEvent("on" + b, c)
}
function Fa(a) {
if (a) a.stopPropagation && a.stopPropagation();
else h.event.cancelBubble = d
}
function Ga(a, b) {
!b() && a < 200 && h[o](function() {
Ga(a + 1, b)
}, a)
}
function Ha(a) {
a = a || h.event;
return [(a.clientX || a[m] && a[m][0].clientX || 0) + (j.body.scrollLeft || j.documentElement.scrollLeft), (a.clientY || a[m] && a[m][0].clientY || 0) + (j.body.scrollTop || j.documentElement.scrollTop)]
}
function Ia(a) {
(a = a || h.event) && !a.toElement && Ja(a)
}
function Ka(a, b) {
I = d;
W();
var c = Ea = j[l]("verne-drag"),
e = 0;
do e += c.offsetLeft;
while (c = c.offsetParent);
na = e;
c = Ea;
e = 0;
do e += c.offsetTop;
while (c = c.offsetParent);
oa = e;
e = Ha(a);
c = e[0] - na;
e = e[1] - oa;
if (c >= 40 && c <= 114 && e >= 25 && e <= 119) {
R.className = "drag-active";
E = d;
ja = (new Date)[n]();
if (c >= 92 && c <= 112 && e >= 37 && e <= 57) {
la = c - 60 - 17;
ma = e - 45 - 27
} else ma = la = 0;
La(a);
Ma("m");
b && a.preventDefault()
}
}
function Ja() {
U = (new Date)[n]() - ja > 500 ? 0.1 : 0.01;
X(0);
R.className = "";
E = g
}
function La(a) {
Z();
if (E && pa) {
pa = g;
h[o](function() {
pa = d
}, 25);
W();
var b = Ha(a);
a = b[0] - na - la;
b = b[1] - oa - ma;
var c = 0,
e = 0,
f = 0,
y = 0,
z = 0,
Y = 0,
C = 0,
D = 0;
if (a < 60) {
c = 3;
e = 1;
f = -a
} else if (a > 94) {
c = 4;
e = 1;
f = a
} else if (b < 45) {
z = y = 1;
Y = -b
} else if (b > 99) {
y = 2;
z = 1;
Y = b
} else {
a = (a - 60 - 17) / 34;
b = (b - 45 - 27) / 54;
if (b > -0.2 && b < 0.2) if (a < 0) {
c = 3;
e = -a * 2
} else {
c = 4;
e = a * 2
}
if (a > -0.2 && a < 0.2) if (b < 0) {
y = 1;
z = -b * 2
} else {
y = 2;
z = b * 2
}
}
if (c != 0 && y != 0) if (Y > f) {
C = y;
D = z
} else if (Y < f) {
C = c;
D = e
} else if (Math.abs(z) > Math.abs(e)) {
C = y;
D = z
} else {
C = c;
D = e
} else if (c != 0) {
C = c;
D = e
} else {
C = y;
D = z
}
X(C, D)
}
}
function Na(a) {
if (i.log) {
i.log("verne", a);
ra = d
}
}
function Ma(a) {
if (!ra) if (H) {
h.clearTimeout(H);
H = 0;
Na(a)
} else H = h[o](Oa, 250)
}
function Oa() {
H = 0;
if (ka) Na("k");
else E && Na("m")
}
function Pa(a) {
Z();
I = d;
W();
var b = ca[a.keyCode];
if (b) {
X(b, 1);
Ma("k");
ka = d
}
Fa(a)
}
function Qa(a) {
Z();
if (ca[a.keyCode]) {
U = 0.2;
X(0);
ka = g
}
Fa(a)
}
function Ra() {
Z()
}
function W() {
M = 10;
L = K = 0
}
function Sa(a) {
var b = h.orientation;
if (b != wa) {
wa = b;
W()
}
var c = a.accelerationIncludingGravity;
if (c) switch (b) {
case 90:
var e = -c.y,
f = c.z;
break;
case -90:
e = c.y;
f = c.z;
break;
case 180:
e = -c.x;
f = c.z;
break;
default:
e = c.x;
f = c.z
}
b = a.gamma || a.x * 57 || e * 2;
a = a.beta || a.y * 57 || f * 2;
if (M) {
K += b;
L += a;
M--;
if (M == 0) {
K /= 10;
L /= 10
}
} else {
N = b - K;
O = a - L;
f = a = 0;
if (N > 5) {
f = (N - 5) / 10;
a = 4
} else if (N < -5) {
f = (-N - 5) / 10;
a = 3
}
if (Math.abs(O) > Math.abs(N)) if (O > 5) {
f = (O - 5) / 10;
a = 2
} else if (O < -5) {
f = (-O - 5) / 10;
a = 1
}
if (f > 1) f = 1;
if (f > 0) {
Z();
I = d;
X(a, f)
}
}
}
function Ta() {
I = d;
t += 3
}
function X(a, b) {
if (b) {
if (b > 1) b = 1
} else b = 0;
if (a == 0) ia = 0;
else {
r = a;
ia = s = b
}
$()
}
function $() {
var a = r,
b = s;
if (a == 0) {
a = 3;
b = 0
}
var c = 0,
e = 0,
f = 0;
switch (a) {
case 3:
if (b > 0.5) f = 117;
else if (t > 0) {
a = t % 1;
if (a < 0.25 || a >= 0.5 && a < 0.75) f = 39;
else if (a >= 0.25 && a < 0.5) f = 78
}
c = -15 * b;
break;
case 4:
if (b > 0.5) f = 156;
c = 12 * b;
break;
case 1:
if (b > ha) f = 195;
else if (b > ga) f = 234;
e = -23 * b;
break;
case 2:
if (b > ha) f = 273;
else if (b > ga) f = 312;
e = 26 * b
}
if (Q) T[p][P] = "translate(" + c + "px, " + e + "px)";
else {
T[p].left = c + 639 + "px";
T[p].top = e + 49 + "px"
}
T[p].backgroundPosition = -f + "px -190px"
}
function Ua() {
for (var a = -(u + -65), b = 0; b < 4; b++) {
var c = -((x - 109) * ea[b] + 109);
if (Q) S[b][p][P] = ya ? "translate3d(" + a + "px, " + c + "px, 0)" : "translate(" + a + "px, " + c + "px)";
else {
S[b][p].left = a + "px";
S[b][p].top = c + "px"
}
}
if (Q) {
Aa[p][P] = "rotate(" + -v * 5 + "deg)";
Ba[p][P] = "rotate(" + x * 4 + "deg)";
Ca[p][P] = "rotate(" + x * 4 / 16 + "deg)";
Da[p][P] = "rotate(" + (u - 90) + "deg)"
}
}
function Va() {
if (ua) {
J && !I && X(2, 0.5);
var a = r != 0,
b = g,
c = g;
if (r == 3) w = -2 * s;
else if (r == 4) w = 2 * s;
else {
w = 0;
b = d
}
if (r == 2) B = 4 * s;
else if (r == 1) B = -5 * s;
else {
c = d;
if (x <= 106) B = 0.2;
else if (x >= 129) {
c = g;
B = -0.2
} else if (x >= 112) B = -0.2
}
if (u < 0) u = 0;
else if (u > 186) u = 186;
else if (u < 5 && w < 0 || u > 181 && w > 0) {
w = 0;
a = g
}
if (x < 104) B = 4;
else if (x > 1218) x = 1218;
else if (x > 1218 - 40.5 * A && B > 0) {
B = 0;
a = g
}
if (B > A) {
A += a ? 0.2 : 0.05;
if (A > B) A = B
} else if (B < A) {
A -= a ? 0.2 : 0.05;
if (A < B) A = B
}
if (w > v) {
v += 0.05;
if (v > w) v = w
} else if (w < v) {
v -= 0.05;
if (v < w) v = w
}
if (w == 0 && v >= -0.05 && v <= 0.05) v = 0;
u += v;
x += A;
Ua();
if (t > 0) {
t -= 0.1;
$()
}
if (s > ia) {
s -= U;
$()
}
if (s <= U) {
s = r = 0;
$()
}
if (b && c) {
G++;
G > fa && Wa()
} else G = 0
}
}
function Xa() {
va = (new Date)[n]();
if (j[l]("verne-chrome-img")) Ya();
else {
var a = j.createElement("img");
V(a, "load", Ya);
a.id = "verne-chrome-img";
a.src = da[0];
j[l]("verne-chrome").appendChild(a)
}
}
function Ya() {
S[3][p].background = "#b9e5e7";
for (var a = 0; a < 4; a++) {
var b = "verne-layer" + a + "-img";
if (!j[l](b)) {
ta++;
var c = j.createElement("img");
V(c, "load", Za);
c.src = da[a + 1];
c.id = b;
S[a].appendChild(c)
}
}
$a()
}
function Za() {
ta--;
$a()
}
function $a() {
if (ta == 0) {
for (var a = (new Date)[n]() - va > 50, b = 0; b < 4; b++) {
var c = j[l]("verne-layer" + b + "-img");
if (!c) return;
if (a && za) c[p][xa] = "opacity 1s ease-out";
c[p].opacity = 1
}
ua = d;
h[o](ab, 3E3);
h[o](bb, 6E3)
}
}
function cb() {
for (var a = 0, b; b = aa[a++];) if (typeof R[p][b] != "undefined") {
Q = d;
P = b;
R[p][b] = "translate3d(0, 0, 0)";
ya = R[p][b] != "";
break
}
for (a = 0; b = ba[a++];) if (typeof R[p][b] != "undefined") {
za = d;
xa = b;
break
}
}
function db() {
if (za) for (var a = 0; a < 4; a++) j[l]("verne-layer-" + a)[p][xa] = "-webkit-transform .2s linear, top .2s linear"
}
function Z() {
if (!F) {
F = d;
qa = h.setInterval(Va, 66);
G = 0
}
}
function Wa() {
if (F) {
F = g;
h.clearInterval(qa)
}
}
function ab() {
I || (t += 3)
}
function bb() {
if (!I) {
J = d;
sa = h[o](eb, 9E3)
}
}
function eb() {
if (J && !I) {
J = g;
h.clearTimeout(sa);
X(0)
}
}
function fb() {
var a = j.forms.f || j.forms.gs || j.forms.tsf;
if (a) {
V(a.q, "keydown", Pa);
V(a.q, "keyup", Qa)
}
V(j, "keydown", Pa);
V(j, "keyup", Qa);
V(j, "mousedown", function(b) {
Ka(b, g)
});
V(j, "mousemove", La);
V(j, "mouseup", Ja);
q && V(j.body, "mouseout", Ia);
V(j, "touchstart", function(b) {
Ka(b, d)
});
V(j, "touchmove", La);
V(j, "touchend", Ja);
V(j, q ? "focusin" : "focus", Ra);
V(h, "deviceorientation", Sa);
V(h, "MozOrientation", Sa);
V(h, "devicemotion", Sa);
V(j[l]("verne-dials-click"), "click", Ta);
for (i.doodle.c = g; a = i.doodle.a.shift();) a()
}
function gb() {
if (i.doodle.c) i.doodle.a[k](gb);
else {
for (var a; a = i.doodle.d.pop();) {
var b = a[0],
c = a[1];
a = a[2];
b.removeEventListener ? b.removeEventListener(c, a, g) : b.detachEvent("on" + c, a)
}
Wa();
eb()
}
}
function hb() {
if (i.dstr) {
if (!i.doodle.e) {
i.doodle.e = d;
i.dstr[k](gb)
}
return d
}
return g
}
function ib() {
h[o](function() {
Ga(100, hb)
}, 0);
if (!/#.*q=[^&]/.test(h.location.href)) if (i.doodle.c) i.doodle.a[k](ib);
else {
i.doodle.c = d;
R = j[l]("hplogo");
Aa = j[l]("verne-layers");
S = [j[l]("verne-layer-0"), j[l]("verne-layer-1"), j[l]("verne-layer-2"), j[l]("verne-layer-3")];
Ba = j[l]("verne-dial-depth-big");
Ca = j[l]("verne-dial-depth-small");
Da = j[l]("verne-dial-position");
T = j[l]("verne-lever");
Ea = j[l]("verne-drag");
Xa();
h[o](fb, 0);
cb();
X(0);
Ua();
h[o](db, 0);
h[o](Z, 0);
if (q) try {
j.execCommand("BackgroundImageCache", g, d)
} catch (a) {}
}
}
ib();
})();
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment