123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- var QRCode = require('./../vendor/QRCode'),
- QRErrorCorrectLevel = require('./../vendor/QRCode/QRErrorCorrectLevel'),
- black = "\033[40m \033[0m",
- white = "\033[47m \033[0m",
- toCell = function (isBlack) {
- return isBlack ? black : white;
- },
- repeat = function (color) {
- return {
- times: function (count) {
- return new Array(count).join(color);
- }
- };
- },
- fill = function(length, value) {
- var arr = new Array(length);
- for (var i = 0; i < length; i++) {
- arr[i] = value;
- }
- return arr;
- };
- module.exports = {
- error: QRErrorCorrectLevel.L,
- generate: function (input, opts, cb) {
- if (typeof opts === 'function') {
- cb = opts;
- opts = {};
- }
- var qrcode = new QRCode(-1, this.error);
- qrcode.addData(input);
- qrcode.make();
- var output = '';
- if (opts && opts.small) {
- var BLACK = true, WHITE = false;
- var moduleCount = qrcode.getModuleCount();
- var moduleData = qrcode.modules.slice();
- var oddRow = moduleCount % 2 === 1;
- if (oddRow) {
- moduleData.push(fill(moduleCount, WHITE));
- }
- var platte= {
- WHITE_ALL: '\u2588',
- WHITE_BLACK: '\u2580',
- BLACK_WHITE: '\u2584',
- BLACK_ALL: ' ',
- };
- var borderTop = repeat(platte.BLACK_WHITE).times(moduleCount + 3);
- var borderBottom = repeat(platte.WHITE_BLACK).times(moduleCount + 3);
- output += borderTop + '\n';
- for (var row = 0; row < moduleCount; row += 2) {
- output += platte.WHITE_ALL;
- for (var col = 0; col < moduleCount; col++) {
- if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === WHITE) {
- output += platte.WHITE_ALL;
- } else if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === BLACK) {
- output += platte.WHITE_BLACK;
- } else if (moduleData[row][col] === BLACK && moduleData[row + 1][col] === WHITE) {
- output += platte.BLACK_WHITE;
- } else {
- output += platte.BLACK_ALL;
- }
- }
- output += platte.WHITE_ALL + '\n';
- }
- if (!oddRow) {
- output += borderBottom;
- }
- } else {
- var border = repeat(white).times(qrcode.getModuleCount() + 3);
- output += border + '\n';
- qrcode.modules.forEach(function (row) {
- output += white;
- output += row.map(toCell).join('');
- output += white + '\n';
- });
- output += border;
- }
- if (cb) cb(output);
- else console.log(output);
- },
- setErrorLevel: function (error) {
- this.error = QRErrorCorrectLevel[error] || this.error;
- }
- };
|