Mini Shell
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;
}
};
Zerion Mini Shell 1.0