2024-02-12 20:28:38 +01:00

384 lines
15 KiB
JavaScript

/** https://github.com/datalog/qrcode-svg under MIT license */
'use strict'
export default function QRCode(r) {
var n,
t,
o,
e,
a = [],
f = [],
i = Math.max,
u = Math.min,
h = Math.abs,
v = Math.ceil,
c = /^[0-9]*$/,
s = /^[A-Z0-9 $%*+.\/:-]*$/,
l = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:',
g = [
[
-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30,
30, 30, 30, 30, 30, 30, 30, 30, 30, 30
],
[
-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28
],
[
-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30,
30, 30, 30, 30, 30, 30, 30, 30, 30, 30
],
[
-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30,
30, 30, 30, 30, 30, 30, 30, 30, 30, 30
]
],
d = [
[
-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20,
21, 22, 24, 25
],
[
-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35,
37, 38, 40, 43, 45, 47, 49
],
[
-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48,
51, 53, 56, 59, 62, 65, 68
],
[
-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54,
57, 60, 63, 66, 70, 74, 77, 81
]
],
m = { L: [0, 1], M: [1, 0], Q: [2, 3], H: [3, 2] },
p = function (r, n) {
for (var t = 0, o = 8; o--; ) t = (t << 1) ^ (285 * (t >>> 7)) ^ (((n >>> o) & 1) * r)
return t
},
C = function (r, n) {
for (var t = [], o = r.length, e = o; e; ) for (var a = r[o - e--] ^ t.shift(), f = n.length; f--; ) t[f] ^= p(n[f], a)
return t
},
w = function (r) {
for (
var n = [
function () {
return 0 == (t + o) % 2
},
function () {
return 0 == t % 2
},
function () {
return 0 == o % 3
},
function () {
return 0 == (t + o) % 3
},
function () {
return 0 == (((t / 2) | 0) + ((o / 3) | 0)) % 2
},
function () {
return 0 == ((t * o) % 2) + ((t * o) % 3)
},
function () {
return 0 == (((t * o) % 2) + ((t * o) % 3)) % 2
},
function () {
return 0 == (((t + o) % 2) + ((t * o) % 3)) % 2
}
][r],
t = e;
t--;
)
for (var o = e; o--; ) f[t][o] || (a[t][o] ^= n())
},
b = function () {
for (
var r = function (r, n) {
n[6] || (r += e), n.shift(), n.push(r)
},
n = function (n, o, a) {
return n && (r(o, a), (o = 0)), r((o += e), a), t(a)
},
t = function (r) {
var n = r[5],
t = n > 0 && r[4] == n && r[3] == 3 * n && r[2] == n && r[1] == n
return (t && r[6] >= 4 * n && r[0] >= n ? 1 : 0) + (t && r[0] >= 4 * n && r[6] >= n ? 1 : 0)
},
o = 0,
f = e * e,
i = 0,
u = e;
u--;
) {
for (var c = [0, 0, 0, 0, 0, 0, 0], s = [0, 0, 0, 0, 0, 0, 0], l = !1, g = !1, d = 0, m = 0, p = e; p--; ) {
a[u][p] == l ? (5 == ++d ? (o += 3) : d > 5 && o++) : (r(d, c), (o += 40 * t(c)), (d = 1), (l = a[u][p])),
a[p][u] == g ? (5 == ++m ? (o += 3) : m > 5 && o++) : (r(m, s), (o += 40 * t(s)), (m = 1), (g = a[p][u]))
var C = a[u][p]
C && i++, p && u && C == a[u][p - 1] && C == a[u - 1][p] && C == a[u - 1][p - 1] && (o += 3)
}
o += 40 * n(l, d, c) + 40 * n(g, m, s)
}
return (o += 10 * (v(h(20 * i - 10 * f) / f) - 1))
},
A = function (r, n, t) {
for (; n--; ) t.push((r >>> n) & 1)
},
M = function (r, n) {
return r.numBitsCharCount[((n + 7) / 17) | 0]
},
B = function (r, n) {
return 0 != ((r >>> n) & 1)
},
x = function (r, n) {
for (var t = 0, o = r.length; o--; ) {
var e = r[o],
a = M(e, n)
if (1 << a <= e.numChars) return 1 / 0
t += 4 + a + e.bitData.length
}
return t
},
D = function (r) {
if (r < 1 || r > 40) throw 'Version number out of range'
var n = (16 * r + 128) * r + 64
if (r >= 2) {
var t = (r / 7) | 2
;(n -= (25 * t - 10) * t - 55), r >= 7 && (n -= 36)
}
return n
},
I = function (r, n) {
for (var t = 2; -2 <= t; t--) for (var o = 2; -2 <= o; o--) E(r + o, n + t, 1 != i(h(o), h(t)))
},
H = function (r, n) {
for (var t = 4; -4 <= t; t--)
for (var o = 4; -4 <= o; o--) {
var a = i(h(o), h(t)),
f = r + o,
u = n + t
0 <= f && f < e && 0 <= u && u < e && E(f, u, 2 != a && 4 != a)
}
},
$ = function (r) {
for (var n = (t[1] << 3) | r, o = n, a = 10; a--; ) o = (o << 1) ^ (1335 * (o >>> 9))
var f = 21522 ^ ((n << 10) | o)
if (f >>> 15 != 0) throw 'Assertion error'
for (a = 0; a <= 5; a++) E(8, a, B(f, a))
E(8, 7, B(f, 6)), E(8, 8, B(f, 7)), E(7, 8, B(f, 8))
for (a = 9; a < 15; a++) E(14 - a, 8, B(f, a))
for (a = 0; a < 8; a++) E(e - 1 - a, 8, B(f, a))
for (a = 8; a < 15; a++) E(8, e - 15 + a, B(f, a))
E(8, e - 8, 1)
},
O = function () {
for (var r = e; r--; ) E(6, r, 0 == r % 2), E(r, 6, 0 == r % 2)
for (
var t = (function () {
var r = []
if (n > 1) for (var t = 2 + ((n / 7) | 0), o = 32 == n ? 26 : 2 * v((e - 13) / (2 * t - 2)); t--; ) r[t] = t * o + 6
return r
})(),
o = (r = t.length);
o--;
)
for (var a = r; a--; ) (0 == a && 0 == o) || (0 == a && o == r - 1) || (a == r - 1 && 0 == o) || I(t[a], t[o])
H(3, 3),
H(e - 4, 3),
H(3, e - 4),
$(0),
(function () {
if (!(7 > n)) {
for (var r = n, t = 12; t--; ) r = (r << 1) ^ (7973 * (r >>> 11))
var o = (n << 12) | r
if (((t = 18), o >>> 18 != 0)) throw 'Assertion error'
for (; t--; ) {
var a = e - 11 + (t % 3),
f = (t / 3) | 0,
i = B(o, t)
E(a, f, i), E(f, a, i)
}
}
})()
},
Q = function (r) {
if (r.length != V(n, t)) throw 'Invalid argument'
for (
var o = d[t[0]][n],
e = g[t[0]][n],
a = (D(n) / 8) | 0,
f = o - (a % o),
i = (a / o) | 0,
u = [],
h = (function (r) {
var n = 1,
t = []
t[r - 1] = 1
for (var o = 0; o < r; o++) {
for (var e = 0; e < r; e++) t[e] = p(t[e], n) ^ t[e + 1]
n = p(n, 2)
}
return t
})(e),
v = 0,
c = 0;
v < o;
v++
) {
var s = r.slice(c, c + i - e + (v < f ? 0 : 1))
c += s.length
var l = C(s, h)
v < f && s.push(0), u.push(s.concat(l))
}
var m = []
for (v = 0; v < u[0].length; v++) for (var w = 0; w < u.length; w++) (v != i - e || w >= f) && m.push(u[w][v])
return m
},
S = function (r) {
for (var n = [], t = ((r = encodeURI(r)), 0); t < r.length; t++)
'%' != r.charAt(t) ? n.push(r.charCodeAt(t)) : (n.push(parseInt(r.substr(t + 1, 2), 16)), (t += 2))
return n
},
V = function (r, n) {
return ((D(r) / 8) | 0) - g[n[0]][r] * d[n[0]][r]
},
E = function (r, n, t) {
;(a[n][r] = t ? 1 : 0), (f[n][r] = 1)
},
R = function (r) {
for (var n = [], t = 0, o = r; t < o.length; t++) {
var e = o[t]
A(e, 8, n)
}
return { modeBits: 4, numBitsCharCount: [8, 16, 16], numChars: r.length, bitData: n }
},
Z = function (r) {
if (!c.test(r)) throw 'String contains non-numeric characters'
for (var n = [], t = 0; t < r.length; ) {
var o = u(r.length - t, 3)
A(parseInt(r.substr(t, o), 10), 3 * o + 1, n), (t += o)
}
return { modeBits: 1, numBitsCharCount: [10, 12, 14], numChars: r.length, bitData: n }
},
z = function (r) {
if (!s.test(r)) throw 'String contains unencodable characters in alphanumeric mode'
var n,
t = []
for (n = 0; n + 2 <= r.length; n += 2) {
var o = 45 * l.indexOf(r.charAt(n))
;(o += l.indexOf(r.charAt(n + 1))), A(o, 11, t)
}
return (
n < r.length && A(l.indexOf(r.charAt(n)), 6, t),
{ modeBits: 2, numBitsCharCount: [9, 11, 13], numChars: r.length, bitData: t }
)
},
L = function (r, n, t, o) {
var e = (function (r) {
return '' == r ? [] : c.test(r) ? [Z(r)] : s.test(r) ? [z(r)] : [R(S(r))]
})(r)
return U(e, n, t, o)
},
N = function (r, i, u, h) {
;(t = i), (o = h)
for (var v = (e = 4 * (n = r) + 17); v--; ) (a[v] = []), (f[v] = [])
if (
(O(),
(function (r) {
for (var n = 0, t = 1, o = e - 1, i = o; i > 0; i -= 2) {
6 == i && --i
for (var u = 0 > (t = -t) ? o : 0, h = 0; h < e; ++h) {
for (var v = i; v > i - 2; --v) f[u][v] || ((a[u][v] = B(r[n >>> 3], 7 - (7 & n))), ++n)
u += t
}
}
})(Q(u)),
0 > o)
) {
var c = 1e9
for (v = 8; v--; ) {
w(v), $(v)
var s = b()
c > s && ((c = s), (o = v)), w(v)
}
}
w(o), $(o), (f = [])
},
U = function (r, n, t, o, e, a) {
if (
(void 0 === e && (e = 1),
void 0 === a && (a = 40),
void 0 === o && (o = -1),
void 0 === t && (t = !0),
!(1 <= e && e <= a && a <= 40) || o < -1 || o > 7)
)
throw 'Invalid value'
for (var f = [], i = 236, h = [], v = e; ; ) {
var c = x(r, v)
if (c <= 8 * V(v, n)) break
if (v >= a) throw 'Data too long'
v++
}
if (t) for (var s = (l = [m.H, m.Q, m.M]).length; s--; ) c <= 8 * V(v, l[s]) && (n = l[s])
for (var l = 0; l < r.length; l++) {
var g = r[l]
A(g.modeBits, 4, f), A(g.numChars, M(g, v), f)
for (var d = 0, p = g.bitData; d < p.length; d++) f.push(p[d])
}
if (f.length != c) throw 'Assertion error'
var C = 8 * V(v, n)
if (f.length > C) throw 'Assertion error'
if ((A(0, u(4, C - f.length), f), A(0, (8 - (f.length % 8)) % 8, f), f.length % 8 != 0)) throw 'Assertion error'
for (; f.length < C; ) A(i, 8, f), (i ^= 253)
for (s = f.length; s--; ) h[s >>> 3] |= f[s] << (7 - (7 & s))
return N(v, n, h, o)
}
return (function () {
function n(r) {
return /^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(r)
}
function t(r, n) {
for (var t in ((r = document.createElementNS(s, r)), n || {})) r.setAttribute(t, n[t])
return r
}
var o,
f,
i,
u,
v,
c,
s = 'http://www.w3.org/2000/svg',
l = '',
g = 'string' == typeof r ? { msg: r } : r || {},
d = g.pal || ['#000'],
p = h(g.dim) || 256,
C = [1, 0, 0, 1, (c = (c = h(g.pad)) > -1 ? c : 4), c],
w = n((w = d[0])) ? w : '#000',
b = n((b = d[1])) ? b : 0,
A = g.vrb ? 0 : 1
for (L(g.msg || '', m[g.ecl] || m.M, 0 == g.ecb ? 0 : 1, g.mtx), v = e + 2 * c, i = e; i--; )
for (u = 0, f = e; f--; )
a[i][f] &&
(A
? (u++, a[i][f - 1] || ((l += 'M' + f + ',' + i + 'h' + u + 'v1h-' + u + 'v-1z'), (u = 0)))
: (l += 'M' + f + ',' + i + 'h1v1h-1v-1z'))
return (
(o = t('svg', {
viewBox: [0, 0, v, v].join(' '),
width: p,
height: p,
fill: w,
'shape-rendering': 'crispEdges',
xmlns: s,
version: '1.1'
})),
b && o.appendChild(t('path', { fill: b, d: 'M0,0V' + v + 'H' + v + 'V0H0Z' })),
o.appendChild(t('path', { transform: 'matrix(' + C + ')', d: l })),
o
)
})()
}