diff options
Diffstat (limited to 'client/components/main/helpers.js')
-rw-r--r-- | client/components/main/helpers.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/client/components/main/helpers.js b/client/components/main/helpers.js new file mode 100644 index 00000000..7ad602f1 --- /dev/null +++ b/client/components/main/helpers.js @@ -0,0 +1,63 @@ +var Helpers = { + error: function() { + return Session.get('error'); + }, + + toLowerCase: function(text) { + return text && text.toLowerCase(); + }, + + toUpperCase: function(text) { + return text && text.toUpperCase(); + }, + + firstChar: function(text) { + return text && text[0].toUpperCase(); + }, + + session: function(prop) { + return Session.get(prop); + }, + + getUser: function(userId) { + return Users.findOne(userId); + } +}; + +// Register all Helpers +_.each(Helpers, function(fn, name) { Blaze.registerHelper(name, fn); }); + +// 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. +var at = HTML.CharRef({html: '@', str: '@'}); +Blaze.Template.registerHelper('mentions', new Template('mentions', function() { + var view = this; + var content = Blaze.toHTML(view.templateContentBlock); + var currentBoard = Session.get('currentBoard'); + var knowedUsers = _.map(currentBoard.members, function(member) { + member.username = Users.findOne(member.userId).username; + return member; + }); + + var mentionRegex = /\B@(\w*)/gi; + var currentMention, knowedUser, href, linkClass, linkValue, link; + while (currentMention = mentionRegex.exec(content)) { + + knowedUser = _.findWhere(knowedUsers, { username: currentMention[1] }); + if (! knowedUser) + continue; + + linkValue = [' ', at, knowedUser.username]; + href = Router.url('Profile', { username: knowedUser.username }); + linkClass = 'atMention' + (knowedUser.userId === Meteor.userId() ? ' me' : ''); + link = HTML.A({ href: href, 'class': linkClass }, linkValue); + + content = content.replace(currentMention[0], Blaze.toHTML(link)); + } + + return HTML.Raw(content); +})); |