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