summaryrefslogtreecommitdiffstats
path: root/client/config/blazeHelpers.js
diff options
context:
space:
mode:
authorMaxime Quandalle <maxime@quandalle.com>2015-09-03 23:12:46 +0200
committerMaxime Quandalle <maxime@quandalle.com>2015-09-03 23:12:46 +0200
commitb3851817ecd59b039f2c2228d08a1c6fd8e60d60 (patch)
tree82a50f69788d5c20632f3ec9c7d3e136502b93b4 /client/config/blazeHelpers.js
parent039cfe7edf8faf901069a94b3ca9b66f7973b26a (diff)
downloadwekan-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.js48
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: '&commat;', 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);
+}));