mirror of
https://github.com/Yetangitu/owncloud-apps.git
synced 2025-10-02 14:49:17 +02:00
1460 lines
56 KiB
JavaScript
1460 lines
56 KiB
JavaScript
var Pixastic = function() {
|
|
function t(e, t, n) {
|
|
return e.createImageData ? e.createImageData(t, n) : e.getImageData(0, 0, t, n)
|
|
}
|
|
function n(r, i) {
|
|
var s = {}
|
|
, o = r.canvas.width
|
|
, u = r.canvas.height
|
|
, a = []
|
|
, i = i || "";
|
|
if (!e) {
|
|
if (typeof window.Worker != "undefined")
|
|
try {
|
|
e = new window.Worker(i + "pixastic.worker.control.js")
|
|
} catch (f) {
|
|
location.protocol == "file:" ? n.log("Could not create real worker, running from file://") : n.log("Could not create real worker.")
|
|
}
|
|
e || (e = new n.Worker)
|
|
}
|
|
for (var f in n.Effects)
|
|
n.Effects.hasOwnProperty(f) && function(n) {
|
|
s[n] = function(e) {
|
|
return a.push({
|
|
effect: n,
|
|
options: e
|
|
}),
|
|
s
|
|
}
|
|
,
|
|
s.done = function(n, i) {
|
|
var s, f;
|
|
try {
|
|
s = r.getImageData(0, 0, o, u)
|
|
} catch (l) {
|
|
throw location.protocol == "file:" ? new Error("Could not access image data, running from file://") : new Error("Could not access image data, is canvas tainted by cross-origin data?")
|
|
}
|
|
f = t(r, o, u),
|
|
e.postMessage({
|
|
queue: a,
|
|
inData: s,
|
|
outData: f,
|
|
width: o,
|
|
height: u
|
|
}),
|
|
e.onmessage = function(e) {
|
|
var t = e.data;
|
|
switch (t.event) {
|
|
case "done":
|
|
r.putImageData(t.data, 0, 0),
|
|
n && n(),
|
|
i && i(1);
|
|
break;
|
|
case "progress":
|
|
i && i(t.data);
|
|
break;
|
|
case "error":
|
|
}
|
|
}
|
|
,
|
|
i && i(0)
|
|
}
|
|
}(f);
|
|
return s
|
|
}
|
|
function r(e) {
|
|
var t;
|
|
if (typeof e == "object")
|
|
if (typeof e.tagName == "string") {
|
|
if (e.tagName.toLowerCase() == "canvas" || e.tagName.toLowerCase() == "img")
|
|
t = document.createElement("canvas"),
|
|
t.width = e.width,
|
|
t.height = e.height,
|
|
t.getContext("2d").drawImage(e, 0, 0)
|
|
} else if (window.ImageData && e instanceof window.ImageData || typeof e.width == "number" && typeof e.height == "number" && typeof e.data == "object")
|
|
t = document.createElement("canvas"),
|
|
t.width = e.width,
|
|
t.height = e.height,
|
|
t.getContext("2d").putImageData(e, 0, 0);
|
|
return t
|
|
}
|
|
function i(e) {
|
|
var t = r(e)
|
|
, n = new Image;
|
|
return n.width = t.width,
|
|
n.height = t.height,
|
|
n.src = t.toDataURL(),
|
|
n
|
|
}
|
|
function s(e) {
|
|
var t = r(e)
|
|
, n = t.getContext("2d");
|
|
return n.getImageData(0, 0, t.width, t.height)
|
|
}
|
|
function o(e) {
|
|
var t = [], n, r, i = e.data, s = Math.round, o, u = e.width * e.height;
|
|
for (n = 0; n < 256; n++)
|
|
t[n] = 0;
|
|
for (n = 0; n < u; n++)
|
|
r = n * 4,
|
|
t[s((i[r] + i[r + 1] + i[r + 2]) / 3)]++;
|
|
o = 0;
|
|
for (n = 0; n < 256; n++)
|
|
t[n] > o && (o = t[n]);
|
|
return {
|
|
maxValue: o,
|
|
values: t
|
|
}
|
|
}
|
|
var e;
|
|
return n.Worker = function() {
|
|
function t(t) {
|
|
var r = t.queue, i = t.inData, s = t.outData, o = t.width, u = t.height, a;
|
|
for (var f = 0; f < r.length; f++) {
|
|
var l = r[f].effect, c = r[f].options, h;
|
|
f > 0 && (a = i,
|
|
i = s,
|
|
s = a),
|
|
typeof importScripts == "function" && (h = function(t) {
|
|
return e.onmessage({
|
|
data: {
|
|
event: "progress",
|
|
data: (f + t) / r.length
|
|
}
|
|
}),
|
|
t
|
|
}
|
|
),
|
|
n.Effects[l](i.data, s.data, o, u, c, h),
|
|
e.onmessage({
|
|
data: {
|
|
event: "progress",
|
|
data: (f + 1) / r.length
|
|
}
|
|
})
|
|
}
|
|
e.onmessage({
|
|
data: {
|
|
event: "done",
|
|
data: s
|
|
}
|
|
})
|
|
}
|
|
var e = this;
|
|
this.postMessage = function(e) {
|
|
setTimeout(function() {
|
|
t(e)
|
|
}, 0)
|
|
}
|
|
,
|
|
this.onmessage = function() {}
|
|
}
|
|
,
|
|
n.log = function(e) {
|
|
typeof console != "undefined" && console.log && console.log("Pixastic: " + e)
|
|
}
|
|
,
|
|
n.toCanvas = r,
|
|
n.toImage = i,
|
|
n.toImageData = s,
|
|
n.histogram = o,
|
|
n.Color = {
|
|
rgb2hsl: function(e, t, n) {
|
|
e < 0 && (e = 0),
|
|
t < 0 && (t = 0),
|
|
n < 0 && (n = 0),
|
|
e > 255 && (e = 0),
|
|
t > 255 && (t = 0),
|
|
n > 255 && (n = 0)
|
|
},
|
|
rgb2hsv: function(e, t, n) {},
|
|
rgb2hex: function(e, t, n) {},
|
|
hsl2rgb: function(e, t, n) {},
|
|
hsv2rgb: function(e, t, n) {}
|
|
},
|
|
n
|
|
}();
|
|
Pixastic.Effects = function() {
|
|
function e(e, t) {
|
|
var n = {};
|
|
for (var r in t)
|
|
typeof e[r] == "undefined" ? n[r] = t[r] : n[r] = e[r];
|
|
return n
|
|
}
|
|
function t(e, t, n) {
|
|
return Math.min(n, Math.max(t, e))
|
|
}
|
|
function n(e, t, n, r, i, s, o, u, a) {
|
|
var f, l, c, h, p, d, v, m, g, y, b, w, E, S, x = 0, T = n * r * 4, N = i[0][0], C = i[0][1], k = i[0][2], L = i[1][0], A = i[1][1], O = i[1][2], M = i[2][0], _ = i[2][1], D = i[2][2], P, H, B, j, F, I, q, R, U;
|
|
for (E = 0; E < r; ++E) {
|
|
d = E * n * 4,
|
|
v = d - n * 4,
|
|
m = d + n * 4,
|
|
E < 1 && (v = d),
|
|
E >= n - 1 && (m = d);
|
|
for (w = 0; w < n; ++w)
|
|
f = (E * n + w) * 4,
|
|
g = w * 4,
|
|
y = g - 4,
|
|
b = g + 4,
|
|
w < 1 && (y = g),
|
|
w >= n - 1 && (b = g),
|
|
P = v + y,
|
|
H = v + g,
|
|
B = v + b,
|
|
j = d + y,
|
|
F = d + g,
|
|
I = d + b,
|
|
q = m + y,
|
|
R = m + g,
|
|
U = m + b,
|
|
l = e[P] * N + e[H] * C + e[B] * k + e[j] * L + e[F] * A + e[I] * O + e[q] * M + e[R] * _ + e[U] * D,
|
|
c = e[P + 1] * N + e[H + 1] * C + e[B + 1] * k + e[j + 1] * L + e[F + 1] * A + e[I + 1] * O + e[q + 1] * M + e[R + 1] * _ + e[U + 1] * D,
|
|
h = e[P + 2] * N + e[H + 2] * C + e[B + 2] * k + e[j + 2] * L + e[F + 2] * A + e[I + 2] * O + e[q + 2] * M + e[R + 2] * _ + e[U + 2] * D,
|
|
o ? p = e[P + 3] * N + e[H + 3] * C + e[B + 3] * k + e[j + 3] * L + e[F + 3] * A + e[I + 3] * O + e[q + 3] * M + e[R + 3] * _ + e[U + 3] * D : p = e[f + 3],
|
|
a && (l = c = h = (l + c + h) / 3),
|
|
u && (l = 255 - l,
|
|
c = 255 - c,
|
|
h = 255 - h),
|
|
t[f] = l,
|
|
t[f + 1] = c,
|
|
t[f + 2] = h,
|
|
t[f + 3] = p,
|
|
s && (S = (f / T * 100 >> 0) / 100,
|
|
S > x && (x = s(S)))
|
|
}
|
|
}
|
|
function s(e, t, n, r, i, s, o, u, a) {
|
|
var f, l, c, h, p, d, v, m, g, y, b, w, E, S, x, T, N, C, k = 0, L = n * r * 4, A = i[0][0], O = i[0][1], M = i[0][2], _ = i[0][3], D = i[0][4], P = i[1][0], H = i[1][1], B = i[1][2], j = i[1][3], F = i[1][4], I = i[2][0], q = i[2][1], R = i[2][2], U = i[2][3], z = i[2][4], W = i[3][0], X = i[3][1], V = i[3][2], $ = i[3][3], J = i[3][4], K = i[4][0], Q = i[4][1], G = i[4][2], Y = i[4][3], Z = i[4][4], et, tt, nt, rt, it, st, ot, ut, at, ft, lt, ct, ht, pt, dt, vt, mt, gt, yt, bt, wt, Et, St, xt, Tt;
|
|
for (N = 0; N < r; ++N) {
|
|
d = N * n * 4,
|
|
v = d - n * 4,
|
|
g = d - n * 4 * 2,
|
|
m = d + n * 4,
|
|
y = d + n * 4 * 2,
|
|
N < 1 && (v = d),
|
|
N >= n - 1 && (m = d),
|
|
N < 2 && (g = v),
|
|
N >= n - 2 && (y = m);
|
|
for (T = 0; T < n; ++T)
|
|
f = (N * n + T) * 4,
|
|
b = T * 4,
|
|
w = b - 4,
|
|
E = b + 4,
|
|
S = b - 8,
|
|
x = b + 8,
|
|
T < 1 && (w = b),
|
|
T >= n - 1 && (E = b),
|
|
T < 2 && (S = w),
|
|
T >= n - 2 && (x = E),
|
|
et = g + S,
|
|
tt = g + w,
|
|
nt = g + b,
|
|
rt = g + E,
|
|
it = g + x,
|
|
st = v + S,
|
|
ot = v + w,
|
|
ut = v + b,
|
|
at = v + E,
|
|
ft = v + x,
|
|
lt = d + S,
|
|
ct = d + w,
|
|
ht = d + b,
|
|
pt = d + E,
|
|
dt = d + x,
|
|
vt = m + S,
|
|
mt = m + w,
|
|
gt = m + b,
|
|
yt = m + E,
|
|
bt = m + x,
|
|
wt = y + S,
|
|
Et = y + w,
|
|
St = y + b,
|
|
xt = y + E,
|
|
Tt = y + x,
|
|
l = e[et] * A + e[tt] * O + e[nt] * M + e[rt] * D + e[nt] * D + e[st] * P + e[ot] * H + e[ut] * B + e[at] * F + e[ut] * F + e[lt] * I + e[ct] * q + e[ht] * R + e[pt] * z + e[ht] * z + e[vt] * W + e[mt] * X + e[gt] * V + e[yt] * J + e[gt] * J + e[wt] * K + e[Et] * Q + e[St] * G + e[xt] * Z + e[St] * Z,
|
|
c = e[et + 1] * A + e[tt + 1] * O + e[nt + 1] * M + e[rt + 1] * D + e[nt + 1] * D + e[st + 1] * P + e[ot + 1] * H + e[ut + 1] * B + e[at + 1] * F + e[ut + 1] * F + e[lt + 1] * I + e[ct + 1] * q + e[ht + 1] * R + e[pt + 1] * z + e[ht + 1] * z + e[vt + 1] * W + e[mt + 1] * X + e[gt + 1] * V + e[yt + 1] * J + e[gt + 1] * J + e[wt + 1] * K + e[Et + 1] * Q + e[St + 1] * G + e[xt + 1] * Z + e[St + 1] * Z,
|
|
h = e[et + 2] * A + e[tt + 2] * O + e[nt + 2] * M + e[rt + 2] * D + e[nt + 2] * D + e[st + 2] * P + e[ot + 2] * H + e[ut + 2] * B + e[at + 2] * F + e[ut + 2] * F + e[lt + 2] * I + e[ct + 2] * q + e[ht + 2] * R + e[pt + 2] * z + e[ht + 2] * z + e[vt + 2] * W + e[mt + 2] * X + e[gt + 2] * V + e[yt + 2] * J + e[gt + 2] * J + e[wt + 2] * K + e[Et + 2] * Q + e[St + 2] * G + e[xt + 2] * Z + e[St + 2] * Z,
|
|
o ? p = e[et + 3] * A + e[tt + 3] * O + e[nt + 3] * M + e[rt + 3] * D + e[nt + 3] * D + e[st + 3] * P + e[ot + 3] * H + e[ut + 3] * B + e[at + 3] * F + e[ut + 3] * F + e[lt + 3] * I + e[ct + 3] * q + e[ht + 3] * R + e[pt + 3] * z + e[ht + 3] * z + e[vt + 3] * W + e[mt + 3] * X + e[gt + 3] * V + e[yt + 3] * J + e[gt + 3] * J + e[wt + 3] * K + e[Et + 3] * Q + e[St + 3] * G + e[xt + 3] * Z + e[St + 3] * Z : p = e[f + 3],
|
|
a && (l = c = h = (l + c + h) / 3),
|
|
u && (l = 255 - l,
|
|
c = 255 - c,
|
|
h = 255 - h),
|
|
t[f] = l,
|
|
t[f + 1] = c,
|
|
t[f + 2] = h,
|
|
t[f + 3] = p,
|
|
s && (C = (f / L * 100 >> 0) / 100,
|
|
C > k && (k = s(C)))
|
|
}
|
|
}
|
|
function o(e, n, r, i, s, o) {
|
|
var u, a, f, l, c, h = r * i * 4, p, d, v, m, g, y, b, w = [], E = 13, s = t(s, 3, E), S = -s / 2 + (s % 2 ? .5 : 0), x = s + S, T, N = [[1]], C, k = 0;
|
|
for (v = 1; v < E; ++v)
|
|
N[0][v] = 0;
|
|
for (v = 1; v < E; ++v) {
|
|
N[v] = [1];
|
|
for (m = 1; m < E; ++m)
|
|
N[v][m] = N[v - 1][m] + N[v - 1][m - 1]
|
|
}
|
|
T = N[s - 1];
|
|
for (v = 0,
|
|
b = 0; v < s; ++v)
|
|
b += T[v];
|
|
for (v = 0; v < s; ++v)
|
|
T[v] /= b;
|
|
for (d = 0; d < i; ++d)
|
|
for (p = 0; p < r; ++p) {
|
|
u = a = f = l = 0;
|
|
for (v = S; v < x; ++v)
|
|
g = p + v,
|
|
y = d,
|
|
b = T[v - S],
|
|
g < 0 && (g = 0),
|
|
g >= r && (g = r - 1),
|
|
c = (y * r + g) * 4,
|
|
u += e[c] * b,
|
|
a += e[c + 1] * b,
|
|
f += e[c + 2] * b,
|
|
l += e[c + 3] * b;
|
|
c = (d * r + p) * 4,
|
|
w[c] = u,
|
|
w[c + 1] = a,
|
|
w[c + 2] = f,
|
|
w[c + 3] = l,
|
|
o && (C = (c / h * 50 >> 0) / 100,
|
|
C > k && (k = o(C)))
|
|
}
|
|
k = 0;
|
|
for (d = 0; d < i; ++d)
|
|
for (p = 0; p < r; ++p) {
|
|
u = a = f = l = 0;
|
|
for (v = S; v < x; ++v)
|
|
g = p,
|
|
y = d + v,
|
|
b = T[v - S],
|
|
y < 0 && (y = 0),
|
|
y >= i && (y = i - 1),
|
|
c = (y * r + g) * 4,
|
|
u += w[c] * b,
|
|
a += w[c + 1] * b,
|
|
f += w[c + 2] * b,
|
|
l += w[c + 3] * b;
|
|
c = (d * r + p) * 4,
|
|
n[c] = u,
|
|
n[c + 1] = a,
|
|
n[c + 2] = f,
|
|
n[c + 3] = l,
|
|
o && (C = .5 + (c / h * 50 >> 0) / 100,
|
|
C > k && (k = o(C)))
|
|
}
|
|
}
|
|
return {
|
|
invert: function(e, t, n, r, s, o) {
|
|
var u = n * r * 4, a, f = 0;
|
|
for (i = 0; i < u; i += 4)
|
|
t[i] = 255 - e[i],
|
|
t[i + 1] = 255 - e[i + 1],
|
|
t[i + 2] = 255 - e[i + 2],
|
|
t[i + 3] = e[i + 3],
|
|
o && (a = (i / u * 100 >> 0) / 100,
|
|
a > f && (f = o(a)))
|
|
},
|
|
sepia: function(e, t, n, r, i, s) {
|
|
var o = n * r * 4, u, a = 0, f, l, c;
|
|
for (var h = 0; h < o; h += 4)
|
|
f = e[h],
|
|
l = e[h + 1],
|
|
c = e[h + 2],
|
|
t[h] = f * .393 + l * .769 + c * .189,
|
|
t[h + 1] = f * .349 + l * .686 + c * .168,
|
|
t[h + 2] = f * .272 + l * .534 + c * .131,
|
|
t[h + 3] = e[h + 3],
|
|
s && (u = (h / o * 100 >> 0) / 100,
|
|
u > a && (a = s(u)))
|
|
},
|
|
solarize: function(e, t, n, r, s, o) {
|
|
var u = n * r * 4, a, f = 0, l, c, h;
|
|
for (i = 0; i < u; i += 4)
|
|
l = e[i],
|
|
c = e[i + 1],
|
|
h = e[i + 2],
|
|
t[i] = l > 127 ? 255 - l : l,
|
|
t[i + 1] = c > 127 ? 255 - c : c,
|
|
t[i + 2] = h > 127 ? 255 - h : h,
|
|
t[i + 3] = e[i + 3],
|
|
o && (a = (i / u * 100 >> 0) / 100,
|
|
a > f && (f = o(a)))
|
|
},
|
|
brightness: function(n, r, i, s, o, u) {
|
|
o = e(o, {
|
|
brightness: 0,
|
|
contrast: 0
|
|
});
|
|
var a = t(o.contrast, -1, 1) / 2, f = 1 + t(o.brightness, -1, 1), l, c = 0, h, p, d, v = i * s * 4, m = f < 0 ? -f : f, g = f < 0 ? 0 : f;
|
|
a = .5 * Math.tan((a + 1) * Math.PI / 4),
|
|
contrastAdd = -(a - .5) * 255;
|
|
for (var y = 0; y < v; y += 4)
|
|
h = n[y],
|
|
p = n[y + 1],
|
|
d = n[y + 2],
|
|
h = (h + h * m + g) * a + contrastAdd,
|
|
p = (p + p * m + g) * a + contrastAdd,
|
|
d = (d + d * m + g) * a + contrastAdd,
|
|
r[y] = h,
|
|
r[y + 1] = p,
|
|
r[y + 2] = d,
|
|
r[y + 3] = n[y + 3],
|
|
u && (l = (y / v * 100 >> 0) / 100,
|
|
l > c && (c = u(l)))
|
|
},
|
|
desaturate: function(e, t, n, r, i, s) {
|
|
var o = n * r * 4, u, a = 0, f;
|
|
for (var l = 0; l < o; l += 4)
|
|
f = e[l] * .3 + e[l + 1] * .59 + e[l + 2] * .11,
|
|
t[l] = f,
|
|
t[l + 1] = f,
|
|
t[l + 2] = f,
|
|
t[l + 3] = e[l + 3],
|
|
s && (u = (l / o * 100 >> 0) / 100,
|
|
u > a && (a = s(u)))
|
|
},
|
|
lighten: function(e, n, r, i, s, o) {
|
|
var u = r * i * 4, a, f = 0, l = 1 + t(s.amount, 0, 1);
|
|
for (var c = 0; c < u; c += 4)
|
|
n[c] = e[c] * l,
|
|
n[c + 1] = e[c + 1] * l,
|
|
n[c + 2] = e[c + 2] * l,
|
|
n[c + 3] = e[c + 3],
|
|
o && (a = (c / u * 100 >> 0) / 100,
|
|
a > f && (f = o(a)))
|
|
},
|
|
noise: function(e, n, r, i, s, o) {
|
|
var u = r * i * 4, a, f = 0, l = t(s.amount, 0, 1), c = t(s.strength, 0, 1), h = !!s.mono, p = Math.random, d, v, m, g;
|
|
for (var y = 0; y < u; y += 4)
|
|
v = e[y],
|
|
m = e[y + 1],
|
|
g = e[y + 2],
|
|
d = p(),
|
|
d < l && (h ? (d = c * (d / l * 2 - 1) * 255,
|
|
v += d,
|
|
m += d,
|
|
g += d) : (v += c * p() * 255,
|
|
m += c * p() * 255,
|
|
g += c * p() * 255)),
|
|
n[y] = v,
|
|
n[y + 1] = m,
|
|
n[y + 2] = g,
|
|
n[y + 3] = e[y + 3],
|
|
o && (a = (y / u * 100 >> 0) / 100,
|
|
a > f && (f = o(a)))
|
|
},
|
|
flipv: function(e, t, n, r, i, s) {
|
|
var o, u, a = n * r * 4, f, l = 0, c, h;
|
|
for (h = 0; h < r; ++h)
|
|
for (c = 0; c < n; ++c)
|
|
o = (h * n + c) * 4,
|
|
u = (h * n + (n - c - 1)) * 4,
|
|
t[u] = e[o],
|
|
t[u + 1] = e[o + 1],
|
|
t[u + 2] = e[o + 2],
|
|
t[u + 3] = e[o + 3],
|
|
s && (f = (o / a * 100 >> 0) / 100,
|
|
f > l && (l = s(f)))
|
|
},
|
|
fliph: function(e, t, n, r, i, s) {
|
|
var o, u, a = n * r * 4, f, l = 0, c, h;
|
|
for (h = 0; h < r; ++h)
|
|
for (c = 0; c < n; ++c)
|
|
o = (h * n + c) * 4,
|
|
u = ((r - h - 1) * n + c) * 4,
|
|
t[u] = e[o],
|
|
t[u + 1] = e[o + 1],
|
|
t[u + 2] = e[o + 2],
|
|
t[u + 3] = e[o + 3],
|
|
s && (f = (o / a * 100 >> 0) / 100,
|
|
f > l && (l = s(f)))
|
|
},
|
|
blur: function(e, t, n, r, i, s) {
|
|
o(e, t, n, r, i.kernelSize, s)
|
|
},
|
|
glow: function(e, t, n, r, i, s) {
|
|
var u = n * r * 4, a, f, l, c, h = i.amount, p = [], d, v, m = 0;
|
|
s && (d = function(e) {
|
|
return s(e * .8),
|
|
e
|
|
}
|
|
),
|
|
o(e, p, n, r, i.kernelSize, d);
|
|
for (a = 0; a < u; a += 4)
|
|
f = e[a] + p[a] * h,
|
|
l = e[a + 1] + p[a + 1] * h,
|
|
c = e[a + 2] + p[a + 2] * h,
|
|
f > 255 && (f = 255),
|
|
l > 255 && (l = 255),
|
|
c > 255 && (c = 255),
|
|
t[a] = f,
|
|
t[a + 1] = l,
|
|
t[a + 2] = c,
|
|
t[a + 3] = e[a + 3],
|
|
s && (v = .8 + (a / u * 100 >> 0) / 100 * .2,
|
|
v > m && (m = s(v)))
|
|
},
|
|
convolve3x3: function(e, t, r, i, s, o) {
|
|
n(e, t, r, i, s.kernel, o)
|
|
},
|
|
convolve5x5: function(e, t, r, i, s, o) {
|
|
n(e, t, r, i, s.kernel, o)
|
|
},
|
|
sharpen3x3: function(e, r, i, s, o, u) {
|
|
var a = -t(o.strength, 0, 1);
|
|
n(e, r, i, s, [[a, a, a], [a, 1 - a * 8, a], [a, a, a]], u)
|
|
},
|
|
sharpen5x5: function(e, n, r, i, o, u) {
|
|
var a = -t(o.strength, 0, 1);
|
|
s(e, n, r, i, [[a, a, a, a, a], [a, a, a, a, a], [a, a, 1 - a * 24, a, a], [a, a, a, a, a], [a, a, a, a, a]], u)
|
|
},
|
|
soften3x3: function(e, t, r, i, s, o) {
|
|
var u = 1 / 9;
|
|
n(e, t, r, i, [[u, u, u], [u, u, u], [u, u, u]], o)
|
|
},
|
|
soften5x5: function(e, t, n, r, i, o) {
|
|
var u = .04;
|
|
s(e, t, n, r, [[u, u, u, u, u], [u, u, u, u, u], [u, u, u, u, u], [u, u, u, u, u], [u, u, u, u, u]], o)
|
|
},
|
|
crossedges: function(e, r, i, s, o, u) {
|
|
var a = t(o.strength, 0, 1) * 5;
|
|
n(e, r, i, s, [[0, -a, 0], [-a, 0, a], [0, a, 0]], u, !1, !0)
|
|
},
|
|
emboss: function(e, t, r, i, s, o) {
|
|
var u = s.amount, a = s.angle, f = Math.cos(-a) * u, l = Math.sin(-a) * u, c = r * i * 4, h = -f - l, p = -f, d = l - f, v = -l, m = l, g = -l + f, y = f, b = l + f, w = [], E, S = 0, x;
|
|
o && (x = function(e) {
|
|
return o(e * .5),
|
|
e
|
|
}
|
|
),
|
|
n(e, w, r, i, [[h, v, g], [p, 0, y], [d, m, b]]);
|
|
for (var T = 0; T < c; T += 4)
|
|
t[T] = 128 + w[T],
|
|
t[T + 1] = 128 + w[T + 1],
|
|
t[T + 2] = 128 + w[T + 2],
|
|
t[T + 3] = e[T + 3],
|
|
o && (E = .5 + (T / c * 100 >> 0) / 100 * .5,
|
|
E > S && (S = o(E)))
|
|
},
|
|
findedges: function(e, t, r, i, s, o) {
|
|
var u = r * i * 4, a, f = [], l = [], c, h, p, d, v, m, g, y = 0, b, w;
|
|
o && (b = function(e) {
|
|
return o(e * .4),
|
|
e
|
|
}
|
|
,
|
|
w = function(e) {
|
|
return o(.4 + e * .4),
|
|
e
|
|
}
|
|
),
|
|
n(e, f, r, i, [[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]),
|
|
n(e, l, r, i, [[-1, -2, -1], [0, 0, 0], [1, 2, 1]]);
|
|
for (a = 0; a < u; a += 4)
|
|
c = f[a],
|
|
h = l[a],
|
|
p = f[a + 1],
|
|
d = l[a + 1],
|
|
v = f[a + 2],
|
|
m = l[a + 2],
|
|
c < 0 && (c = -c),
|
|
h < 0 && (h = -h),
|
|
p < 0 && (p = -p),
|
|
d < 0 && (d = -d),
|
|
v < 0 && (v = -v),
|
|
m < 0 && (m = -m),
|
|
t[a] = 255 - (c + h) * .8,
|
|
t[a + 1] = 255 - (p + d) * .8,
|
|
t[a + 2] = 255 - (v + m) * .8,
|
|
t[a + 3] = e[a + 3],
|
|
o && (g = .8 + (a / u * 100 >> 0) / 100 * .2,
|
|
g > y && (y = o(g)))
|
|
},
|
|
edgeenhance3x3: function(e, t, r, i, s, o) {
|
|
n(e, t, r, i, [[-1 / 9, -1 / 9, -1 / 9], [-1 / 9, 17 / 9, -1 / 9], [-1 / 9, -1 / 9, -1 / 9]], o)
|
|
},
|
|
edgeenhance5x5: function(e, t, n, r, i, o) {
|
|
s(e, t, n, r, [[-0.04, -0.04, -0.04, -0.04, -0.04], [-0.04, -0.04, -0.04, -0.04, -0.04], [-0.04, -0.04, 1.96, -0.04, -0.04], [-0.04, -0.04, -0.04, -0.04, -0.04], [-0.04, -0.04, -0.04, -0.04, -0.04]], o)
|
|
},
|
|
laplace3x3: function(e, t, r, i, s, o) {
|
|
n(e, t, r, i, [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]], o, !1, !0, !0)
|
|
},
|
|
laplace5x5: function(e, t, n, r, i, o) {
|
|
s(e, t, n, r, [[-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, 24, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, -1, -1, -1]], o, !1, !0, !0)
|
|
},
|
|
coloradjust: function(e, n, r, i, s, o) {
|
|
var u = r * i * 4, a, f, l, c, h = 0, p = t(s.r, -1, 1) * 255, d = t(s.g, -1, 1) * 255, v = t(s.b, -1, 1) * 255;
|
|
for (var m = 0; m < u; m += 4)
|
|
a = e[m] + p,
|
|
f = e[m + 1] + d,
|
|
l = e[m + 2] + v,
|
|
a < 0 && (a = 0),
|
|
f < 0 && (f = 0),
|
|
l < 0 && (l = 0),
|
|
a > 255 && (a = 255),
|
|
f > 255 && (f = 255),
|
|
l > 255 && (l = 255),
|
|
n[m] = a,
|
|
n[m + 1] = f,
|
|
n[m + 2] = l,
|
|
n[m + 3] = e[m + 3],
|
|
o && (c = (m / u * 100 >> 0) / 100,
|
|
c > h && (h = o(c)))
|
|
},
|
|
colorfilter: function(e, n, r, i, s, o) {
|
|
var u = r * i * 4, a, f, l, c, h = !!s.luminosity, p, d = 0, v, m, g, y, b, w, E, S, x = t(s.r, 0, 1), T = t(s.g, 0, 1), N = t(s.b, 0, 1);
|
|
for (a = 0; a < u; a += 4)
|
|
f = e[a] / 255,
|
|
l = e[a + 1] / 255,
|
|
c = e[a + 2] / 255,
|
|
y = f * .3 + l * .59 + c * .11,
|
|
f = (f + f * x) / 2,
|
|
l = (l + l * T) / 2,
|
|
c = (c + c * N) / 2,
|
|
h && (v = m = f,
|
|
l > m && (m = l),
|
|
c > m && (m = c),
|
|
l < v && (v = l),
|
|
c < v && (v = c),
|
|
w = m - v,
|
|
f == m ? g = (l - c) / w % 6 : l == m ? g = (c - f) / w + 2 : g = (f - l) / w + 4,
|
|
b = g >> 0,
|
|
E = w * (g - b),
|
|
f = l = c = y - (f * .3 + l * .59 + c * .11),
|
|
b == 0 ? (f += w,
|
|
l += E) : b == 1 ? (f += w - E,
|
|
l += w) : b == 2 ? (l += w,
|
|
c += E) : b == 3 ? (l += w - E,
|
|
c += w) : b == 4 ? (f += E,
|
|
c += w) : b == 5 && (f += w,
|
|
c += w - E)),
|
|
n[a] = f * 255,
|
|
n[a + 1] = l * 255,
|
|
n[a + 2] = c * 255,
|
|
n[a + 3] = e[a + 3],
|
|
o && (p = (a / u * 100 >> 0) / 100,
|
|
p > d && (d = o(p)))
|
|
},
|
|
hsl: function(e, n, i, s, o, u) {
|
|
var a = i * s * 4, f = t(o.hue, -1, 1), l = t(o.saturation, -1, 1), c = t(o.lightness, -1, 1), h = 1 + l * (l < 0 ? 1 : 2), p = c < 0 ? 1 + c : 1 - c, d = c < 0 ? 0 : c * 255, v, m, y, w, E, S, x, T, N, C, k, L = 0;
|
|
f = f * 6 % 6;
|
|
for (var A = 0; A < a; A += 4) {
|
|
r = e[A],
|
|
g = e[A + 1],
|
|
b = e[A + 2];
|
|
if (f != 0 || l != 0)
|
|
v = r,
|
|
g > v && (v = g),
|
|
b > v && (v = b),
|
|
m = r,
|
|
g < m && (m = g),
|
|
b < m && (m = b),
|
|
y = v - m,
|
|
S = (m + v) / 510,
|
|
S > 0 && y > 0 && (S <= .5 ? (E = y / (v + m) * h,
|
|
E > 1 && (E = 1),
|
|
x = S * (1 + E)) : (E = y / (510 - v - m) * h,
|
|
E > 1 && (E = 1),
|
|
x = S + E - S * E),
|
|
r == v ? g == m ? w = 5 + (v - b) / y + f : w = 1 - (v - g) / y + f : g == v ? b == m ? w = 1 + (v - r) / y + f : w = 3 - (v - b) / y + f : r == m ? w = 3 + (v - g) / y + f : w = 5 - (v - r) / y + f,
|
|
w < 0 && (w += 6),
|
|
w >= 6 && (w -= 6),
|
|
T = S + S - x,
|
|
C = w >> 0,
|
|
N = (x - T) * (w - C),
|
|
C == 0 ? (r = x,
|
|
g = T + N,
|
|
b = T) : C == 1 ? (r = x - N,
|
|
g = x,
|
|
b = T) : C == 2 ? (r = T,
|
|
g = x,
|
|
b = T + N) : C == 3 ? (r = T,
|
|
g = x - N,
|
|
b = x) : C == 4 ? (r = T + N,
|
|
g = T,
|
|
b = x) : C == 5 && (r = x,
|
|
g = T,
|
|
b = x - N),
|
|
r *= 255,
|
|
g *= 255,
|
|
b *= 255);
|
|
r = r * p + d,
|
|
g = g * p + d,
|
|
b = b * p + d,
|
|
r < 0 && (r = 0),
|
|
g < 0 && (g = 0),
|
|
b < 0 && (b = 0),
|
|
r > 255 && (r = 255),
|
|
g > 255 && (g = 255),
|
|
b > 255 && (b = 255),
|
|
n[A] = r,
|
|
n[A + 1] = g,
|
|
n[A + 2] = b,
|
|
n[A + 3] = e[A + 3],
|
|
u && (k = (A / a * 100 >> 0) / 100,
|
|
k > L && (L = u(k)))
|
|
}
|
|
},
|
|
posterize: function(e, n, r, s, o, u) {
|
|
var a = t(o.levels, 2, 256), f = 256 / a, l = 256 / (a - 1), c, h, p, d = r * s * 4, v, m = 0;
|
|
for (i = 0; i < d; i += 4)
|
|
n[i] = l * (e[i] / f >> 0),
|
|
n[i + 1] = l * (e[i + 1] / f >> 0),
|
|
n[i + 2] = l * (e[i + 2] / f >> 0),
|
|
n[i + 3] = e[i + 3],
|
|
u && (v = (i / d * 100 >> 0) / 100,
|
|
v > m && (m = u(v)))
|
|
},
|
|
removenoise: function(e, t, n, r, i, s) {
|
|
var o, u, a, f, l, c, h, p, d, v, m, g, y, b, w, E, S, x, T, N, C, k = 0;
|
|
N = n * r * 4;
|
|
for (l = 0; l < r; ++l) {
|
|
p = l * n * 4,
|
|
d = p - n * 4,
|
|
v = p + n * 4,
|
|
l < 1 && (d = p),
|
|
l >= n - 1 && (v = p);
|
|
for (c = 0; c < n; ++c)
|
|
h = (l * n + c) * 4,
|
|
m = c * 4,
|
|
g = m - 4,
|
|
y = m + 4,
|
|
c < 1 && (g = m),
|
|
c >= n - 1 && (y = m),
|
|
b = S = e[p + g],
|
|
f = e[p + y],
|
|
f < b && (b = f),
|
|
f > S && (S = f),
|
|
f = e[d + m],
|
|
f < b && (b = f),
|
|
f > S && (S = f),
|
|
f = e[v + m],
|
|
f < b && (b = f),
|
|
f > S && (S = f),
|
|
w = e[p + g + 1],
|
|
f = e[p + y + 1],
|
|
f < w && (w = f),
|
|
f = e[d + m + 1],
|
|
f < w && (w = f),
|
|
f = e[v + m + 1],
|
|
f < w && (w = f),
|
|
E = e[p + g + 2],
|
|
f = e[p + y + 2],
|
|
f < E && (E = f),
|
|
f = e[d + m + 2],
|
|
f < E && (E = f),
|
|
f = e[v + m + 2],
|
|
f < E && (E = f),
|
|
o = e[h],
|
|
u = e[h + 1],
|
|
a = e[h + 2],
|
|
o < b && (o = b),
|
|
o > S && (o = S),
|
|
u < w && (u = w),
|
|
u > x && (u = x),
|
|
a < E && (a = E),
|
|
a > T && (a = T),
|
|
t[h] = o,
|
|
t[h + 1] = u,
|
|
t[h + 2] = a,
|
|
t[h + 3] = e[h + 3],
|
|
s && (C = (h / N * 100 >> 0) / 100,
|
|
C > k && (k = s(C)))
|
|
}
|
|
}
|
|
}
|
|
}(),
|
|
Pixastic.Worker = function() {
|
|
function t(t) {
|
|
var n = t.queue, r = t.inData, i = t.outData, s = t.width, o = t.height, u;
|
|
for (var a = 0; a < n.length; a++) {
|
|
var f = n[a].effect
|
|
, l = n[a].options;
|
|
a > 0 && (u = r,
|
|
r = i,
|
|
i = u),
|
|
Pixastic.Effects[f](r.data, i.data, s, o, l),
|
|
e.onmessage({
|
|
data: {
|
|
event: "progress",
|
|
data: (a + 1) / n.length
|
|
}
|
|
})
|
|
}
|
|
e.onmessage({
|
|
data: {
|
|
event: "done",
|
|
data: i
|
|
}
|
|
})
|
|
}
|
|
var e = this;
|
|
this.postMessage = function(e) {
|
|
setTimeout(function() {
|
|
t(e)
|
|
}, 0)
|
|
}
|
|
,
|
|
this.onmessage = function() {}
|
|
}
|
|
,
|
|
this.Handlebars = {},
|
|
function(e) {
|
|
e.VERSION = "1.0.rc.1",
|
|
e.helpers = {},
|
|
e.partials = {},
|
|
e.registerHelper = function(e, t, n) {
|
|
n && (t.not = n),
|
|
this.helpers[e] = t
|
|
}
|
|
,
|
|
e.registerPartial = function(e, t) {
|
|
this.partials[e] = t
|
|
}
|
|
,
|
|
e.registerHelper("helperMissing", function(e) {
|
|
if (arguments.length === 2)
|
|
return undefined;
|
|
throw new Error("Could not find property '" + e + "'")
|
|
});
|
|
var t = Object.prototype.toString
|
|
, n = "[object Function]";
|
|
e.registerHelper("blockHelperMissing", function(r, i) {
|
|
var s = i.inverse || function() {}
|
|
, o = i.fn
|
|
, u = ""
|
|
, a = t.call(r);
|
|
return a === n && (r = r.call(this)),
|
|
r === !0 ? o(this) : r === !1 || r == null ? s(this) : a === "[object Array]" ? r.length > 0 ? e.helpers.each(r, i) : s(this) : o(r)
|
|
}),
|
|
e.K = function() {}
|
|
,
|
|
e.createFrame = Object.create || function(t) {
|
|
e.K.prototype = t;
|
|
var n = new e.K;
|
|
return e.K.prototype = null,
|
|
n
|
|
}
|
|
,
|
|
e.registerHelper("each", function(t, n) {
|
|
var r = n.fn, i = n.inverse, s = 0, o = "", u;
|
|
n.data && (u = e.createFrame(n.data));
|
|
if (t && typeof t == "object")
|
|
if (t instanceof Array)
|
|
for (var a = t.length; s < a; s++)
|
|
u && (u.index = s),
|
|
o += r(t[s], {
|
|
data: u
|
|
});
|
|
else
|
|
for (var f in t)
|
|
t.hasOwnProperty(f) && (u && (u.key = f),
|
|
o += r(t[f], {
|
|
data: u
|
|
}),
|
|
s++);
|
|
return s === 0 && (o = i(this)),
|
|
o
|
|
}),
|
|
e.registerHelper("if", function(r, i) {
|
|
var s = t.call(r);
|
|
return s === n && (r = r.call(this)),
|
|
!r || e.Utils.isEmpty(r) ? i.inverse(this) : i.fn(this)
|
|
}),
|
|
e.registerHelper("unless", function(t, n) {
|
|
var r = n.fn
|
|
, i = n.inverse;
|
|
return n.fn = i,
|
|
n.inverse = r,
|
|
e.helpers["if"].call(this, t, n)
|
|
}),
|
|
e.registerHelper("with", function(e, t) {
|
|
return t.fn(e)
|
|
}),
|
|
e.registerHelper("log", function(t) {
|
|
e.log(t)
|
|
})
|
|
}(this.Handlebars);
|
|
var errorProps = ["description", "fileName", "lineNumber", "message", "name", "number", "stack"];
|
|
Handlebars.Exception = function(e) {
|
|
var t = Error.prototype.constructor.apply(this, arguments);
|
|
for (var n = 0; n < errorProps.length; n++)
|
|
this[errorProps[n]] = t[errorProps[n]]
|
|
}
|
|
,
|
|
Handlebars.Exception.prototype = new Error,
|
|
Handlebars.SafeString = function(e) {
|
|
this.string = e
|
|
}
|
|
,
|
|
Handlebars.SafeString.prototype.toString = function() {
|
|
return this.string.toString()
|
|
}
|
|
,
|
|
function() {
|
|
var e = {
|
|
"&": "&",
|
|
"<": "<",
|
|
">": ">",
|
|
'"': """,
|
|
"'": "'",
|
|
"`": "`"
|
|
}
|
|
, t = /[&<>"'`]/g
|
|
, n = /[&<>"'`]/
|
|
, r = function(t) {
|
|
return e[t] || "&"
|
|
};
|
|
Handlebars.Utils = {
|
|
escapeExpression: function(e) {
|
|
return e instanceof Handlebars.SafeString ? e.toString() : e == null || e === !1 ? "" : n.test(e) ? e.replace(t, r) : e
|
|
},
|
|
isEmpty: function(e) {
|
|
return typeof e == "undefined" ? !0 : e === null ? !0 : e === !1 ? !0 : Object.prototype.toString.call(e) === "[object Array]" && e.length === 0 ? !0 : !1
|
|
}
|
|
}
|
|
}(),
|
|
Handlebars.VM = {
|
|
template: function(e) {
|
|
var t = {
|
|
escapeExpression: Handlebars.Utils.escapeExpression,
|
|
invokePartial: Handlebars.VM.invokePartial,
|
|
programs: [],
|
|
program: function(e, t, n) {
|
|
var r = this.programs[e];
|
|
return n ? Handlebars.VM.program(t, n) : r ? r : (r = this.programs[e] = Handlebars.VM.program(t),
|
|
r)
|
|
},
|
|
programWithDepth: Handlebars.VM.programWithDepth,
|
|
noop: Handlebars.VM.noop
|
|
};
|
|
return function(n, r) {
|
|
return r = r || {},
|
|
e.call(t, Handlebars, n, r.helpers, r.partials, r.data)
|
|
}
|
|
},
|
|
programWithDepth: function(e, t, n) {
|
|
var r = Array.prototype.slice.call(arguments, 2);
|
|
return function(n, i) {
|
|
return i = i || {},
|
|
e.apply(this, [n, i.data || t].concat(r))
|
|
}
|
|
},
|
|
program: function(e, t) {
|
|
return function(n, r) {
|
|
return r = r || {},
|
|
e(n, r.data || t)
|
|
}
|
|
},
|
|
noop: function() {
|
|
return ""
|
|
},
|
|
invokePartial: function(e, t, n, r, i, s) {
|
|
var o = {
|
|
helpers: r,
|
|
partials: i,
|
|
data: s
|
|
};
|
|
if (e === undefined)
|
|
throw new Handlebars.Exception("The partial " + t + " could not be found");
|
|
if (e instanceof Function)
|
|
return e(n, o);
|
|
if (!Handlebars.compile)
|
|
throw new Handlebars.Exception("The partial " + t + " could not be compiled when running in runtime-only mode");
|
|
return i[t] = Handlebars.compile(e, {
|
|
data: s !== undefined
|
|
}),
|
|
i[t](n, o)
|
|
}
|
|
},
|
|
Handlebars.template = Handlebars.VM.template,
|
|
function() {
|
|
var e = Handlebars.template
|
|
, t = Handlebars.templates = Handlebars.templates || {};
|
|
t.loadingOverlay = e(function(e, t, n, r, i) {
|
|
return this.compilerInfo = [2, ">= 1.0.0-rc.3"],
|
|
n = n || e.helpers,
|
|
i = i || {},
|
|
'\n<div id="cb-loading-overlay" class="cb-control"></div>\n'
|
|
}),
|
|
t.navigateLeft = e(function(e, t, n, r, i) {
|
|
return this.compilerInfo = [2, ">= 1.0.0-rc.3"],
|
|
n = n || e.helpers,
|
|
i = i || {},
|
|
'\n<div data-trigger="click" data-action="navigation" data-navigate-side="left" class="cb-control navigate navigate-left ">\n <span class="icon-arrow-left"></span>\n</div>\n'
|
|
}),
|
|
t.navigateRight = e(function(e, t, n, r, i) {
|
|
return this.compilerInfo = [2, ">= 1.0.0-rc.3"],
|
|
n = n || e.helpers,
|
|
i = i || {},
|
|
'\n<div data-trigger="click" data-action="navigation" data-navigate-side="right" class="cb-control navigate navigate-right">\n <span class="icon-arrow-right"></span>\n</div>\n'
|
|
}),
|
|
t.progressbar = e(function(e, t, n, r, i) {
|
|
return this.compilerInfo = [2, ">= 1.0.0-rc.3"],
|
|
n = n || e.helpers,
|
|
i = i || {},
|
|
'<div id="cb-status" class="cb-control">\n <div id="cb-progress-bar">\n <div class="progressbar-value"></div>\n </div>\n</div>\n'
|
|
}),
|
|
t.toolbar = e(function(e, t, n, r, i) {
|
|
return this.compilerInfo = [2, ">= 1.0.0-rc.3"],
|
|
n = n || e.helpers,
|
|
i = i || {},
|
|
'\n<div class="toolbar">\n\n <ul class="pull-left">\n <li class="close">\n <button data-trigger="click" data-action="close" title="close" class="icon-remove-sign"></button>\n </li>\n <li class="close separator"></li>\n <li>\n <button title="image settings" class="icon-settings" data-toggle="dropdown"></button>\n <div class="dropdown">\n <form name="image-enhancements" data-trigger="reset" data-action="resetEnhancements">\n <div class="sliders">\n <div class="control-group">\n <label title="adjust brightness" class="icon-sun"></label>\n <input data-trigger="change" data-action="brightness" type="range" min="-100" max="100" step="1" value="0">\n </div>\n <div class="control-group">\n <label title="adjust contrast" class="icon-adjust"></label>\n <input data-trigger="change" data-action="contrast" type="range" min="-1" max="1" step="0.1" value="0">\n </div>\n <div class="control-group">\n <label title="sharpen" class="icon-droplet"></label>\n <input data-trigger="change" data-action="sharpen" type="range" min="0" max="1" step="0.1" value="0">\n </div>\n </div>\n <div class="control-group pull-left">\n <input id="image-desaturate" type="checkbox" data-trigger="change" data-action="desaturate">\n <label for="image-desaturate">desaturate</label>\n </div>\n <div class="control-group pull-right">\n <input type="reset" value="reset">\n </div>\n </form>\n </div>\n </li>\n <li>\n <button data-trigger="click" data-action="toggleLayout" title="toggle one/two pages at a time" class="icon-file layout layout-single"></button>\n <button data-trigger="click" data-action="toggleLayout" title="toggle one/two pages at a time" class="icon-copy layout layout-double"></button>\n </li>\n <li>\n <button data-trigger="click" data-action="zoomOut" title="zoom out" class="icon-zoom-out"></button>\n </li>\n <li>\n <button data-trigger="click" data-action="zoomIn" title="zoom in" class="icon-zoom-in"></button>\n </li>\n <li>\n <button data-trigger="click" data-action="fitWidth" title="fit page to window width" class="icon-expand"></button>\n </li>\n <li>\n <button data-trigger="click" data-action="fitWindow" title="fit page to window" class="icon-expand-2"></button>\n </li>\n <li>\n <button data-trigger="click" data-action="toggleReadingMode" title="switch reading direction" class="icon-arrow-right-3 manga-false"></button>\n <button data-trigger="click" data-action="toggleReadingMode" title="switch reading direction" class="icon-arrow-left-3 manga-true"></button>\n </li>\n </ul>\n\n <ul class="pull-right">\n <li><span id="current-page"></span> / <span id="page-count"></span></li>\n </ul>\n\n</div>\n'
|
|
})
|
|
}();
|
|
var ComicBook = function(e) {
|
|
"use strict";
|
|
function t(e, t) {
|
|
var n;
|
|
typeof t == "undefined" && (t = {});
|
|
for (n in e)
|
|
if (e.hasOwnProperty(n)) {
|
|
if (n in t)
|
|
continue;
|
|
t[n] = e[n]
|
|
}
|
|
return t
|
|
}
|
|
function r(i, s, o) {
|
|
function E() {
|
|
var t = window.innerHeight + 1;
|
|
return w === !1 && (w = e(document.createElement("div")).attr("id", "cb-width-shiv").css({
|
|
width: "100%",
|
|
position: "absolute",
|
|
top: 0,
|
|
zIndex: "-1000"
|
|
}),
|
|
e("body").append(w)),
|
|
w.height(t),
|
|
w.innerWidth()
|
|
}
|
|
function S() {
|
|
var e = x();
|
|
e !== C && v.indexOf(e) > -1 && (C = e,
|
|
u.draw())
|
|
}
|
|
function x() {
|
|
var e = parseInt(location.hash.substring(1), 10) - 1 || 0;
|
|
return e < 0 && (T(0),
|
|
e = 0),
|
|
e
|
|
}
|
|
function T(e) {
|
|
location.hash = e
|
|
}
|
|
function k() {
|
|
p = document.getElementById(a),
|
|
d = p.getContext("2d"),
|
|
y === !1 && (u.renderControls(),
|
|
y = !0),
|
|
window.addEventListener("keydown", u.navigation, !1),
|
|
window.addEventListener("hashchange", S, !1)
|
|
}
|
|
var u = this
|
|
, a = i;
|
|
this.srcs = s;
|
|
var f = {
|
|
displayMode: "double",
|
|
zoomMode: "fitWindow",
|
|
manga: !1,
|
|
enhance: {},
|
|
keyboard: {
|
|
next: 78,
|
|
previous: 80,
|
|
toolbar: 84,
|
|
toggleLayout: 76
|
|
},
|
|
vendorPath: "vendor/",
|
|
forward_buffer: 3
|
|
};
|
|
this.isMobile = !1,
|
|
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile/i.test(navigator.userAgent) && (this.isMobile = !0,
|
|
document.body.classList.add("mobile"),
|
|
f.displayMode = "single",
|
|
window.addEventListener("load", function() {
|
|
setTimeout(function() {
|
|
window.scrollTo(0, 1)
|
|
}, 0)
|
|
}));
|
|
var l = t(f, o), c = s.length, h = [], p, d, v = [], m = 1, g = !1, y = !1, b = !1, w = !1, N = x(), C = N < s.length ? N : 0;
|
|
window.addEventListener("touchstart", function(t) {
|
|
var n = e(t.target);
|
|
n.attr("id") === "comic" && u.toggleToolbar(),
|
|
n.data("toggle") === "dropdown" && n.siblings(".dropdown").toggle()
|
|
}, !1),
|
|
r.prototype.renderControls = function() {
|
|
var t = {}, n;
|
|
e.each(Handlebars.templates, function(n, r) {
|
|
var i = e(r().trim());
|
|
t[n] = i,
|
|
i.find("*").andSelf().filter("[data-action][data-trigger]").each(function() {
|
|
var t = e(this)
|
|
, n = t.data("trigger")
|
|
, r = t.data("action");
|
|
typeof u[t.data("action")] == "function" && t.on(n, u[r]),
|
|
t.on(n, function(t) {
|
|
e(u).trigger(n, t)
|
|
})
|
|
}),
|
|
e(p).before(i)
|
|
}),
|
|
this.controls = t,
|
|
n = this.getControl("toolbar"),
|
|
n.find(".manga-" + l.manga).show().end().find(".manga-" + !l.manga).hide().end().find(".layout").hide().end().find(".layout-" + l.displayMode).show()
|
|
}
|
|
,
|
|
r.prototype.getControl = function(e) {
|
|
if (typeof this.controls[e] != "object")
|
|
throw n.UNDEFINED_CONTROL + " " + e;
|
|
return this.controls[e]
|
|
}
|
|
,
|
|
r.prototype.showControl = function(e) {
|
|
this.getControl(e).show().addClass("open")
|
|
}
|
|
,
|
|
r.prototype.hideControl = function(e) {
|
|
this.getControl(e).removeClass("open").hide()
|
|
}
|
|
,
|
|
r.prototype.toggleControl = function(e) {
|
|
this.getControl(e).toggle().toggleClass("open")
|
|
}
|
|
,
|
|
r.prototype.toggleLayout = function() {
|
|
var e = u.getControl("toolbar")
|
|
, t = l.displayMode === "single" ? "double" : "single";
|
|
l.displayMode = t,
|
|
e.find(".layout").hide().end().find(".layout-" + l.displayMode).show(),
|
|
u.drawPage()
|
|
}
|
|
,
|
|
r.prototype.getPage = function(e) {
|
|
if (e < 0 || e > s.length - 1)
|
|
throw n.INVALID_PAGE + " " + e;
|
|
if (typeof h[e] == "object")
|
|
return h[e];
|
|
b = e,
|
|
this.showControl("loadingOverlay")
|
|
}
|
|
,
|
|
r.prototype.draw = function() {
|
|
k(),
|
|
e(".navigate").outerHeight(window.innerHeight),
|
|
e("#cb-loading-overlay").outerWidth(E()).height(window.innerHeight),
|
|
h.length !== c ? this.preload() : this.drawPage()
|
|
}
|
|
,
|
|
r.prototype.zoom = function(e) {
|
|
l.zoomMode = "manual",
|
|
m = e,
|
|
typeof this.getPage(C) == "object" && this.drawPage()
|
|
}
|
|
,
|
|
r.prototype.zoomIn = function() {
|
|
u.zoom(m + .1)
|
|
}
|
|
,
|
|
r.prototype.zoomOut = function() {
|
|
u.zoom(m - .1)
|
|
}
|
|
,
|
|
r.prototype.fitWidth = function() {
|
|
l.zoomMode = "fitWidth",
|
|
u.drawPage()
|
|
}
|
|
,
|
|
r.prototype.fitWindow = function() {
|
|
l.zoomMode = "fitWindow",
|
|
u.drawPage()
|
|
}
|
|
,
|
|
r.prototype.preload = function() {
|
|
function i(t) {
|
|
var o = new Image;
|
|
o.src = s[t],
|
|
o.onload = function() {
|
|
h[t] = this,
|
|
v.push(t),
|
|
e("#cb-progress-bar .progressbar-value").css("width", Math.floor(v.length / c * 100) + "%");
|
|
var o = l.displayMode === "double" && C < s.length - 1 ? 1 : 0;
|
|
if (n === !1 && e.inArray(C + o, v) !== -1 || typeof b == "number" && e.inArray(b, v) !== -1)
|
|
typeof b == "number" && (C = b - 1,
|
|
b = !1),
|
|
u.drawPage(),
|
|
u.hideControl("loadingOverlay"),
|
|
n = !0;
|
|
r.length ? (i(r[0]),
|
|
r.splice(0, 1)) : e("#cb-status").delay(500).fadeOut()
|
|
}
|
|
}
|
|
function o(e, t) {
|
|
var n = 0
|
|
, s = 1
|
|
, o = e
|
|
, u = e - 1;
|
|
while (o <= t)
|
|
s > l.forward_buffer && u > -1 ? (r.push(u),
|
|
u--,
|
|
s = 0) : (r.push(o),
|
|
o++),
|
|
s++;
|
|
while (u > -1)
|
|
r.push(u),
|
|
u--;
|
|
i(r[n])
|
|
}
|
|
var t = C
|
|
, n = !1
|
|
, r = [];
|
|
this.showControl("loadingOverlay"),
|
|
o(t, s.length - 1)
|
|
}
|
|
,
|
|
r.prototype.pageLoaded = function(e) {
|
|
return typeof v[e - 1] != "undefined"
|
|
}
|
|
,
|
|
r.prototype.drawPage = function(t, r) {
|
|
var i;
|
|
r = typeof r != "undefined" ? r : !0,
|
|
i = r ? 0 : window.scrollY;
|
|
if (typeof t == "number" && t < s.length && t > 0) {
|
|
C = t - 1;
|
|
if (!this.pageLoaded(t)) {
|
|
this.showControl("loadingOverlay");
|
|
return
|
|
}
|
|
}
|
|
C < 0 && (C = 0);
|
|
var o, a = 0, f = 0, c = u.getPage(C), h = !1;
|
|
l.displayMode === "double" && C < s.length - 1 && (h = u.getPage(C + 1));
|
|
if (typeof c != "object")
|
|
throw n.INVALID_PAGE_TYPE + " " + typeof c;
|
|
var v = c.width
|
|
, y = c.height;
|
|
p.width = 0,
|
|
p.height = 0,
|
|
g = typeof h == "object" && (c.width > c.height || h.width > h.height) && l.displayMode === "double",
|
|
g && (l.displayMode = "single"),
|
|
l.displayMode === "double" && (typeof h == "object" ? v += h.width : v += v);
|
|
switch (l.zoomMode) {
|
|
case "manual":
|
|
document.body.style.overflowX = "auto",
|
|
o = l.displayMode === "double" ? m * 2 : m;
|
|
break;
|
|
case "fitWidth":
|
|
document.body.style.overflowX = "hidden",
|
|
o = E() > v ? (E() - v) / E() + 1 : E() / v,
|
|
m = o;
|
|
break;
|
|
case "fitWindow":
|
|
document.body.style.overflowX = "hidden";
|
|
var b = E() > v ? (E() - v) / E() + 1 : E() / v
|
|
, w = window.innerHeight
|
|
, S = w > y ? (w - y) / w + 1 : w / y;
|
|
o = b > S ? S : b,
|
|
m = o;
|
|
break;
|
|
default:
|
|
throw n.INVALID_ZOOM_MODE + " " + l.zoomMode
|
|
}
|
|
var N = c.width * o
|
|
, k = c.height * o
|
|
, L = l.zoomMode === "manual" ? c.width * m : N
|
|
, A = l.zoomMode === "manual" ? c.height * m : k;
|
|
k = A,
|
|
p.width = N < E() ? E() : N,
|
|
p.height = k < window.innerHeight ? window.innerHeight : k;
|
|
if (l.zoomMode === "manual" || l.zoomMode === "fitWindow")
|
|
N < E() && (a = (E() - L) / 2,
|
|
l.displayMode === "double" && (a -= L / 2)),
|
|
k < window.innerHeight && (f = (window.innerHeight - A) / 2);
|
|
if (l.manga && l.displayMode === "double" && typeof h == "object") {
|
|
var O = c
|
|
, M = h;
|
|
c = M,
|
|
h = O
|
|
}
|
|
d.drawImage(c, a, f, L, A),
|
|
l.displayMode === "double" && typeof h == "object" && d.drawImage(h, L + a, f, L, A),
|
|
this.pixastic = new Pixastic(d,l.vendorPath + "pixastic/"),
|
|
e.each(l.enhance, function(e, t) {
|
|
u.enhance[e](t)
|
|
});
|
|
var _ = l.displayMode === "double" && C + 2 <= s.length ? C + 1 + "-" + (C + 2) : C + 1;
|
|
this.getControl("toolbar").find("#current-page").text(_).end().find("#page-count").text(s.length),
|
|
g && (l.displayMode = "double"),
|
|
e("button.cb-fit-width").attr("disabled", l.zoomMode === "fitWidth"),
|
|
e("button.cb-fit-window").attr("disabled", l.zoomMode === "fitWindow"),
|
|
e(".navigate").show(),
|
|
C === 0 && (l.manga ? (e(".navigate-left").show(),
|
|
e(".navigate-right").hide()) : (e(".navigate-left").hide(),
|
|
e(".navigate-right").show()));
|
|
if (C === s.length - 1 || typeof h == "object" && C === s.length - 2)
|
|
l.manga ? (e(".navigate-left").hide(),
|
|
e(".navigate-right").show()) : (e(".navigate-left").show(),
|
|
e(".navigate-right").hide());
|
|
C !== x() && e(this).trigger("navigate"),
|
|
x() !== C && T(C + 1)
|
|
}
|
|
,
|
|
r.prototype.drawNextPage = function() {
|
|
var e;
|
|
try {
|
|
e = u.getPage(C + 1)
|
|
} catch (t) {}
|
|
if (!e)
|
|
return !1;
|
|
if (C + 1 < h.length) {
|
|
C += l.displayMode === "single" || g ? 1 : 2;
|
|
try {
|
|
u.drawPage()
|
|
} catch (t) {}
|
|
}
|
|
window.scroll(0, 0)
|
|
}
|
|
,
|
|
r.prototype.drawPrevPage = function() {
|
|
var e;
|
|
try {
|
|
e = u.getPage(C - 1)
|
|
} catch (t) {}
|
|
if (!e)
|
|
return !1;
|
|
g = e.width > e.height,
|
|
C > 0 && (C -= l.displayMode === "single" || g ? 1 : 2,
|
|
u.drawPage()),
|
|
window.scroll(0, 0)
|
|
}
|
|
,
|
|
r.prototype.brightness = function() {
|
|
u.enhance.brightness({
|
|
brightness: e(this).val()
|
|
})
|
|
}
|
|
,
|
|
r.prototype.contrast = function() {
|
|
u.enhance.brightness({
|
|
contrast: e(this).val()
|
|
})
|
|
}
|
|
,
|
|
r.prototype.sharpen = function() {
|
|
u.enhance.sharpen({
|
|
strength: e(this).val()
|
|
})
|
|
}
|
|
,
|
|
r.prototype.desaturate = function() {
|
|
e(this).is(":checked") ? u.enhance.desaturate() : u.enhance.resaturate()
|
|
}
|
|
,
|
|
r.prototype.resetEnhancements = function() {
|
|
u.enhance.reset()
|
|
}
|
|
,
|
|
r.prototype.enhance = {
|
|
reset: function(e) {
|
|
e ? delete l.enhance[e] : l.enhance = {},
|
|
u.drawPage(null, !1)
|
|
},
|
|
progress: function() {},
|
|
done: function() {},
|
|
brightness: function(e, n) {
|
|
n !== !1 && this.reset("brightness");
|
|
var r = t({
|
|
brightness: 0,
|
|
contrast: 0
|
|
}, e);
|
|
l.enhance.brightness = r,
|
|
u.pixastic.brightness({
|
|
brightness: r.brightness,
|
|
contrast: r.contrast
|
|
}).done(this.done, this.progress)
|
|
},
|
|
desaturate: function() {
|
|
l.enhance.desaturate = {},
|
|
u.pixastic.desaturate().done(this.done, this.progress)
|
|
},
|
|
resaturate: function() {
|
|
delete l.enhance.desaturate,
|
|
u.drawPage(null, !1)
|
|
},
|
|
sharpen: function(e) {
|
|
this.desharpen();
|
|
var n = t({
|
|
strength: 0
|
|
}, e);
|
|
l.enhance.sharpen = n,
|
|
u.pixastic.sharpen3x3({
|
|
strength: n.strength
|
|
}).done(this.done, this.progress)
|
|
},
|
|
desharpen: function() {
|
|
delete l.enhance.sharpen,
|
|
u.drawPage(null, !1)
|
|
}
|
|
},
|
|
r.prototype.navigation = function(t) {
|
|
if (e("#cb-loading-overlay").is(":visible"))
|
|
return !1;
|
|
var r = !1;
|
|
switch (t.type) {
|
|
case "click":
|
|
r = t.currentTarget.getAttribute("data-navigate-side");
|
|
break;
|
|
case "keydown":
|
|
t.keyCode === l.keyboard.previous && (r = "left"),
|
|
t.keyCode === l.keyboard.next && (r = "right"),
|
|
t.keyCode === l.keyboard.toolbar && u.toggleToolbar(),
|
|
t.keyCode === l.keyboard.toggleLayout && u.toggleLayout();
|
|
break;
|
|
default:
|
|
throw n.INVALID_NAVIGATION_EVENT + " " + t.type
|
|
}
|
|
if (r)
|
|
return t.stopPropagation(),
|
|
l.manga ? (r === "left" && u.drawNextPage(),
|
|
r === "right" && u.drawPrevPage()) : (r === "left" && u.drawPrevPage(),
|
|
r === "right" && u.drawNextPage()),
|
|
!1
|
|
}
|
|
,
|
|
r.prototype.toggleReadingMode = function() {
|
|
l.manga = !l.manga,
|
|
u.getControl("toolbar").find(".manga-" + l.manga).show().end().find(".manga-" + !l.manga).hide()
|
|
}
|
|
,
|
|
r.prototype.toggleToolbar = function() {
|
|
u.toggleControl("toolbar")
|
|
}
|
|
,
|
|
r.prototype.destroy = function() {
|
|
e.each(this.controls, function(e, t) {
|
|
t.remove()
|
|
}),
|
|
p.width = 0,
|
|
p.height = 0,
|
|
window.removeEventListener("keydown", this.navigation, !1),
|
|
window.removeEventListener("hashchange", S, !1),
|
|
T("")
|
|
}
|
|
}
|
|
var n = {
|
|
INVALID_ACTION: "invalid action",
|
|
INVALID_PAGE: "invalid page",
|
|
INVALID_PAGE_TYPE: "invalid page type",
|
|
UNDEFINED_CONTROL: "undefined control",
|
|
INVALID_ZOOM_MODE: "invalid zoom mode",
|
|
INVALID_NAVIGATION_EVENT: "invalid navigation event"
|
|
};
|
|
return r
|
|
}(jQuery);
|
|
|