mirror of
https://github.com/Sternenlabor/fabaccess-sticker-generator.git
synced 2025-03-12 06:51:41 +01:00
384 lines
15 KiB
JavaScript
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
|
|
)
|
|
})()
|
|
}
|