Bug 23566: Continue on device - with QR codes
[koha.git] / koha-tmpl / opac-tmpl / lib / kjua / lib / qrcode.js
blobadb7281e14fce790d3e34699aa2c94fb571dd7b1
1 const RE_CODE_LENGTH_OVERFLOW = /code length overflow/i;
3 const qr_gen = require('qrcode-generator');
4 qr_gen.stringToBytes = qr_gen.stringToBytesFuncs['UTF-8'];
6 const min_qrcode = (text, level, min_ver = 1) => {
7     min_ver = Math.max(1, min_ver);
9     for (let version = min_ver; version <= 40; version += 1) {
10         try {
11             const qr = qr_gen(version, level);
12             qr.addData(text);
13             qr.make();
14             const moduleCount = qr.getModuleCount();
15             const isDark = (row, col) => {
16                 return row >= 0 &&
17                     row < moduleCount &&
18                     col >= 0 &&
19                     col < moduleCount &&
20                     qr.isDark(row, col);
21             };
22             return {text, level, version, moduleCount, isDark};
23         } catch (err) {
24             if (!(version < 40 && RE_CODE_LENGTH_OVERFLOW.test(err))) {
25                 throw new Error(err);
26             }
27         }
28     }
29     return null;
32 const quiet_qrcode = (text = '', level = 'L', min_ver = 1, quiet = 0) => {
33     const qr = min_qrcode(text, level, min_ver);
34     if (qr) {
35         const prev_is_dark = qr.isDark;
36         qr.moduleCount += 2 * quiet;
37         qr.isDark = (row, col) => prev_is_dark(row - quiet, col - quiet);
38     }
39     return qr;
42 module.exports = quiet_qrcode;