editor.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. var dropdownMenuIsOpened = false;
  2. Template.editor.onRendered(function() {
  3. var $textarea = this.$('textarea');
  4. $textarea.textcomplete([
  5. // Emojies
  6. {
  7. match: /\B:([\-+\w]*)$/,
  8. search: function(term, callback) {
  9. callback($.map(Emoji.values, function(emoji) {
  10. return emoji.indexOf(term) === 0 ? emoji : null;
  11. }));
  12. },
  13. template: function(value) {
  14. var image = '<img src="' + Emoji.baseImagePath + value + '.png"></img>';
  15. return image + value;
  16. },
  17. replace: function(value) {
  18. return ':' + value + ':';
  19. },
  20. index: 1
  21. },
  22. // User mentions
  23. {
  24. match: /\B@(\w*)$/,
  25. search: function(term, callback) {
  26. var currentBoard = Boards.findOne(Session.get('currentBoard'));
  27. callback($.map(currentBoard.members, function(member) {
  28. var username = Users.findOne(member.userId).username;
  29. return username.indexOf(term) === 0 ? username : null;
  30. }));
  31. },
  32. template: function(value) {
  33. return value;
  34. },
  35. replace: function(username) {
  36. return '@' + username + ' ';
  37. },
  38. index: 1
  39. }
  40. ]);
  41. // Since commit d474017 jquery-textComplete automatically closes a potential
  42. // opened dropdown menu when the user press Escape. This behavior conflicts
  43. // with our EscapeActions system, but it's too complicated and hacky to
  44. // monkey-pach textComplete to disable it -- I tried. Instead we listen to
  45. // 'open' and 'hide' events, and create a ghost escapeAction when the dropdown
  46. // is opened (and rely on textComplete to execute the actual action).
  47. $textarea.on({
  48. 'textComplete:show': function() {
  49. dropdownMenuIsOpened = true;
  50. },
  51. 'textComplete:hide': function() {
  52. Tracker.afterFlush(function() {
  53. dropdownMenuIsOpened = false;
  54. });
  55. }
  56. });
  57. });
  58. EscapeActions.register('textcomplete',
  59. function() { return dropdownMenuIsOpened; },
  60. function() {}
  61. );