blazeHelpers.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. Blaze.registerHelper('currentBoard', () => {
  2. const boardId = Session.get('currentBoard');
  3. if (boardId) {
  4. return Boards.findOne(boardId);
  5. }
  6. });
  7. Blaze.registerHelper('currentCard', () => {
  8. const cardId = Session.get('currentCard');
  9. if (cardId) {
  10. return Cards.findOne(cardId);
  11. }
  12. });
  13. Blaze.registerHelper('getUser', (userId) => Users.findOne(userId));
  14. // XXX I believe we should compute a HTML rendered field on the server that
  15. // would handle markdown, emojies and user mentions. We can simply have two
  16. // fields, one source, and one compiled version (in HTML) and send only the
  17. // compiled version to most users -- who don't need to edit.
  18. // In the meantime, all the transformation are done on the client using the
  19. // Blaze API.
  20. const at = HTML.CharRef({html: '@', str: '@'});
  21. Blaze.Template.registerHelper('mentions', new Template('mentions', function() {
  22. const view = this;
  23. const currentBoard = Session.get('currentBoard');
  24. const knowedUsers = _.map(currentBoard.members, (member) => {
  25. member.username = Users.findOne(member.userId).username;
  26. return member;
  27. });
  28. const mentionRegex = /\B@(\w*)/gi;
  29. let content = Blaze.toHTML(view.templateContentBlock);
  30. let currentMention, knowedUser, href, linkClass, linkValue, link;
  31. while (Boolean(currentMention = mentionRegex.exec(content))) {
  32. knowedUser = _.findWhere(knowedUsers, { username: currentMention[1] });
  33. if (!knowedUser)
  34. continue;
  35. linkValue = [' ', at, knowedUser.username];
  36. // XXX We need to convert to flow router
  37. href = Router.url('Profile', { username: knowedUser.username });
  38. linkClass = 'atMention';
  39. if (knowedUser.userId === Meteor.userId())
  40. linkClass += ' me';
  41. link = HTML.A({ href, 'class': linkClass }, linkValue);
  42. content = content.replace(currentMention[0], Blaze.toHTML(link));
  43. }
  44. return HTML.Raw(content);
  45. }));