diff options
author | Maxime Quandalle <maxime@quandalle.com> | 2015-09-03 23:12:46 +0200 |
---|---|---|
committer | Maxime Quandalle <maxime@quandalle.com> | 2015-09-03 23:12:46 +0200 |
commit | b3851817ecd59b039f2c2228d08a1c6fd8e60d60 (patch) | |
tree | 82a50f69788d5c20632f3ec9c7d3e136502b93b4 /client/config/blazeHelpers.js | |
parent | 039cfe7edf8faf901069a94b3ca9b66f7973b26a (diff) | |
download | wekan-b3851817ecd59b039f2c2228d08a1c6fd8e60d60.tar.gz wekan-b3851817ecd59b039f2c2228d08a1c6fd8e60d60.tar.bz2 wekan-b3851817ecd59b039f2c2228d08a1c6fd8e60d60.zip |
Enforce a consistent ES6 coding style
Replace the old (and broken) jshint + jscsrc by eslint and configure
it to support some of the ES6 features.
The command `eslint` currently has one error which is a bug that was
discovered by its static analysis and should be fixed (usage of a
dead object).
Diffstat (limited to 'client/config/blazeHelpers.js')
-rw-r--r-- | client/config/blazeHelpers.js | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/client/config/blazeHelpers.js b/client/config/blazeHelpers.js index 1be44728..2c55bc40 100644 --- a/client/config/blazeHelpers.js +++ b/client/config/blazeHelpers.js @@ -1,13 +1,53 @@ -Blaze.registerHelper('currentBoard', function() { - var boardId = Session.get('currentBoard'); +Blaze.registerHelper('currentBoard', () => { + const boardId = Session.get('currentBoard'); if (boardId) { return Boards.findOne(boardId); } }); -Blaze.registerHelper('currentCard', function() { - var cardId = Session.get('currentCard'); +Blaze.registerHelper('currentCard', () => { + const cardId = Session.get('currentCard'); if (cardId) { return Cards.findOne(cardId); } }); + +Blaze.registerHelper('getUser', (userId) => Users.findOne(userId)); + +// XXX I believe we should compute a HTML rendered field on the server that +// would handle markdown, emojies and user mentions. We can simply have two +// fields, one source, and one compiled version (in HTML) and send only the +// compiled version to most users -- who don't need to edit. +// In the meantime, all the transformation are done on the client using the +// Blaze API. +const at = HTML.CharRef({html: '@', str: '@'}); +Blaze.Template.registerHelper('mentions', new Template('mentions', function() { + const view = this; + const currentBoard = Session.get('currentBoard'); + const knowedUsers = _.map(currentBoard.members, (member) => { + member.username = Users.findOne(member.userId).username; + return member; + }); + const mentionRegex = /\B@(\w*)/gi; + let content = Blaze.toHTML(view.templateContentBlock); + + let currentMention, knowedUser, href, linkClass, linkValue, link; + while (Boolean(currentMention = mentionRegex.exec(content))) { + + knowedUser = _.findWhere(knowedUsers, { username: currentMention[1] }); + if (!knowedUser) + continue; + + linkValue = [' ', at, knowedUser.username]; + // XXX We need to convert to flow router + href = Router.url('Profile', { username: knowedUser.username }); + linkClass = 'atMention'; + if (knowedUser.userId === Meteor.userId()) + linkClass += ' me'; + link = HTML.A({ href, 'class': linkClass }, linkValue); + + content = content.replace(currentMention[0], Blaze.toHTML(link)); + } + + return HTML.Raw(content); +})); |