UNPKG

3.12 kBJavaScriptView Raw
1var QRCode = require('./../vendor/QRCode'),
2 QRErrorCorrectLevel = require('./../vendor/QRCode/QRErrorCorrectLevel'),
3 black = "\033[40m \033[0m",
4 white = "\033[47m \033[0m",
5 toCell = function (isBlack) {
6 return isBlack ? black : white;
7 },
8 repeat = function (color) {
9 return {
10 times: function (count) {
11 return new Array(count).join(color);
12 }
13 };
14 },
15 fill = function(length, value) {
16 var arr = new Array(length);
17 for (var i = 0; i < length; i++) {
18 arr[i] = value;
19 }
20 return arr;
21 };
22
23module.exports = {
24
25 error: QRErrorCorrectLevel.L,
26
27 generate: function (input, opts, cb) {
28 if (typeof opts === 'function') {
29 cb = opts;
30 opts = {};
31 }
32
33 var qrcode = new QRCode(-1, this.error);
34 qrcode.addData(input);
35 qrcode.make();
36
37 var output = '';
38 if (opts && opts.small) {
39 var BLACK = true, WHITE = false;
40 var moduleCount = qrcode.getModuleCount();
41 var moduleData = qrcode.modules.slice();
42
43 var oddRow = moduleCount % 2 === 1;
44 if (oddRow) {
45 moduleData.push(fill(moduleCount, WHITE));
46 }
47
48 var platte= {
49 WHITE_ALL: '\u2588',
50 WHITE_BLACK: '\u2580',
51 BLACK_WHITE: '\u2584',
52 BLACK_ALL: ' ',
53 };
54
55 var borderTop = repeat(platte.BLACK_WHITE).times(moduleCount + 3);
56 var borderBottom = repeat(platte.WHITE_BLACK).times(moduleCount + 3);
57 output += borderTop + '\n';
58
59 for (var row = 0; row < moduleCount; row += 2) {
60 output += platte.WHITE_ALL;
61
62 for (var col = 0; col < moduleCount; col++) {
63 if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === WHITE) {
64 output += platte.WHITE_ALL;
65 } else if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === BLACK) {
66 output += platte.WHITE_BLACK;
67 } else if (moduleData[row][col] === BLACK && moduleData[row + 1][col] === WHITE) {
68 output += platte.BLACK_WHITE;
69 } else {
70 output += platte.BLACK_ALL;
71 }
72 }
73
74 output += platte.WHITE_ALL + '\n';
75 }
76
77 if (!oddRow) {
78 output += borderBottom;
79 }
80 } else {
81 var border = repeat(white).times(qrcode.getModuleCount() + 3);
82
83 output += border + '\n';
84 qrcode.modules.forEach(function (row) {
85 output += white;
86 output += row.map(toCell).join('');
87 output += white + '\n';
88 });
89 output += border;
90 }
91
92 if (cb) cb(output);
93 else console.log(output);
94 },
95
96 setErrorLevel: function (error) {
97 this.error = QRErrorCorrectLevel[error] || this.error;
98 }
99
100};