You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.0 KiB
100 lines
3.0 KiB
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; |
|
} |
|
|
|
};
|
|
|