main.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. var 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. module.exports = {
  23. error: QRErrorCorrectLevel.L,
  24. generate: function (input, opts, cb) {
  25. if (typeof opts === 'function') {
  26. cb = opts;
  27. opts = {};
  28. }
  29. var qrcode = new QRCode(-1, this.error);
  30. qrcode.addData(input);
  31. qrcode.make();
  32. var output = '';
  33. if (opts && opts.small) {
  34. var BLACK = true, WHITE = false;
  35. var moduleCount = qrcode.getModuleCount();
  36. var moduleData = qrcode.modules.slice();
  37. var oddRow = moduleCount % 2 === 1;
  38. if (oddRow) {
  39. moduleData.push(fill(moduleCount, WHITE));
  40. }
  41. var platte= {
  42. WHITE_ALL: '\u2588',
  43. WHITE_BLACK: '\u2580',
  44. BLACK_WHITE: '\u2584',
  45. BLACK_ALL: ' ',
  46. };
  47. var borderTop = repeat(platte.BLACK_WHITE).times(moduleCount + 3);
  48. var borderBottom = repeat(platte.WHITE_BLACK).times(moduleCount + 3);
  49. output += borderTop + '\n';
  50. for (var row = 0; row < moduleCount; row += 2) {
  51. output += platte.WHITE_ALL;
  52. for (var col = 0; col < moduleCount; col++) {
  53. if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === WHITE) {
  54. output += platte.WHITE_ALL;
  55. } else if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === BLACK) {
  56. output += platte.WHITE_BLACK;
  57. } else if (moduleData[row][col] === BLACK && moduleData[row + 1][col] === WHITE) {
  58. output += platte.BLACK_WHITE;
  59. } else {
  60. output += platte.BLACK_ALL;
  61. }
  62. }
  63. output += platte.WHITE_ALL + '\n';
  64. }
  65. if (!oddRow) {
  66. output += borderBottom;
  67. }
  68. } else {
  69. var border = repeat(white).times(qrcode.getModuleCount() + 3);
  70. output += border + '\n';
  71. qrcode.modules.forEach(function (row) {
  72. output += white;
  73. output += row.map(toCell).join('');
  74. output += white + '\n';
  75. });
  76. output += border;
  77. }
  78. if (cb) cb(output);
  79. else console.log(output);
  80. },
  81. setErrorLevel: function (error) {
  82. this.error = QRErrorCorrectLevel[error] || this.error;
  83. }
  84. };