index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. var charmer = require('charm');
  2. var Bar = require('./lib/bar');
  3. var exports = module.exports = function (c) {
  4. if (c instanceof charmer.Charm) {
  5. var charm = c;
  6. }
  7. else {
  8. var charm = charmer.apply(null, arguments);
  9. charm.on('^C', function () {
  10. charm.destroy();
  11. });
  12. }
  13. var multi = function (x, y, params) {
  14. if (typeof x === 'object') {
  15. params = x;
  16. x = params.x;
  17. y = params.y;
  18. }
  19. if (!params) params = {};
  20. if (x === undefined) x = '+0';
  21. if (y === undefined) y = '+0';
  22. var bar = new Bar(charm, x, y, params);
  23. multi.bars.push(bar);
  24. bar.offset = multi.offset;
  25. multi.on('offset', function (o) {
  26. bar.offset = o;
  27. });
  28. return bar;
  29. };
  30. multi.bars = [];
  31. multi.rel = function (x, y, params) {
  32. return multi(x, '-' + y, params);
  33. };
  34. multi.drop = function (params, cb) {
  35. if (!cb) { cb = params; params = {} }
  36. charm.position(function (x, y) {
  37. var bar = new Bar(charm, x, y, params);
  38. multi.bars.push(bar);
  39. multi.on('offset', function (o) {
  40. bar.offset = o;
  41. });
  42. cb(bar);
  43. });
  44. };
  45. multi.charm = charm;
  46. charm.setMaxListeners(0);
  47. multi.destroy = charm.destroy.bind(charm);
  48. multi.on = charm.on.bind(charm);
  49. multi.emit = charm.emit.bind(charm);
  50. multi.removeListener = charm.removeListener.bind(charm);
  51. multi.write = charm.write.bind(charm);
  52. (function () {
  53. var offset = 0;
  54. Object.defineProperty(multi, 'offset', {
  55. set : function (o) {
  56. offset = o;
  57. multi.emit('offset', o);
  58. },
  59. get : function () {
  60. return offset;
  61. }
  62. });
  63. })();
  64. return multi;
  65. };