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}; 101