summaryrefslogtreecommitdiffstats
path: root/client/config
diff options
context:
space:
mode:
Diffstat (limited to 'client/config')
-rw-r--r--client/config/accounts.js26
-rw-r--r--client/config/blazeHelpers.js48
-rw-r--r--client/config/reactiveTabs.js5
-rw-r--r--client/config/router.js38
4 files changed, 77 insertions, 40 deletions
diff --git a/client/config/accounts.js b/client/config/accounts.js
index a448d612..df0935f7 100644
--- a/client/config/accounts.js
+++ b/client/config/accounts.js
@@ -1,11 +1,11 @@
-var passwordField = AccountsTemplates.removeField('password');
-var emailField = AccountsTemplates.removeField('email');
+const passwordField = AccountsTemplates.removeField('password');
+const emailField = AccountsTemplates.removeField('email');
AccountsTemplates.addFields([{
_id: 'username',
type: 'text',
displayName: 'username',
required: true,
- minLength: 2
+ minLength: 2,
}, emailField, passwordField]);
AccountsTemplates.configure({
@@ -15,36 +15,34 @@ AccountsTemplates.configure({
enablePasswordChange: true,
sendVerificationEmail: true,
showForgotPasswordLink: true,
- onLogoutHook: function() {
- var homePage = 'home';
+ onLogoutHook() {
+ const homePage = 'home';
if (FlowRouter.getRouteName() === homePage) {
FlowRouter.reload();
} else {
FlowRouter.go(homePage);
}
- }
+ },
});
_.each(['signIn', 'signUp', 'resetPwd', 'forgotPwd', 'enrollAccount'],
- function(routeName) {
- AccountsTemplates.configureRoute(routeName);
-});
+ (routeName) => AccountsTemplates.configureRoute(routeName));
// We display the form to change the password in a popup window that already
// have a title, so we unset the title automatically displayed by useraccounts.
AccountsTemplates.configure({
texts: {
title: {
- changePwd: ''
- }
- }
+ changePwd: '',
+ },
+ },
});
AccountsTemplates.configureRoute('changePwd', {
- redirect: function() {
+ redirect() {
// XXX We should emit a notification once we have a notification system.
// Currently the user has no indication that his modification has been
// applied.
Popup.back();
- }
+ },
});
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);
+}));
diff --git a/client/config/reactiveTabs.js b/client/config/reactiveTabs.js
index 937057f7..5365c6d1 100644
--- a/client/config/reactiveTabs.js
+++ b/client/config/reactiveTabs.js
@@ -1,5 +1,4 @@
// XXX Since Blaze doesn't have a clean high component API, component API are
// also tweaky to use. I guess React would be a solution.
-ReactiveTabs.createInterface({
- template: 'basicTabs'
-});
+const template = 'basicTabs';
+ReactiveTabs.createInterface({ template });
diff --git a/client/config/router.js b/client/config/router.js
index 77b17b63..5260e03f 100644
--- a/client/config/router.js
+++ b/client/config/router.js
@@ -6,7 +6,7 @@ FlowRouter.triggers.exit([({path}) => {
FlowRouter.route('/', {
name: 'home',
triggersEnter: [AccountsTemplates.ensureSignedIn],
- action: function() {
+ action() {
Session.set('currentBoard', null);
Session.set('currentCard', null);
@@ -14,14 +14,14 @@ FlowRouter.route('/', {
EscapeActions.executeAll();
BlazeLayout.render('defaultLayout', { content: 'boardList' });
- }
+ },
});
FlowRouter.route('/b/:id/:slug', {
name: 'board',
- action: function(params) {
- let currentBoard = params.id;
- let previousBoard = Session.get('currentBoard');
+ action(params) {
+ const currentBoard = params.id;
+ const previousBoard = Session.get('currentBoard');
Session.set('currentBoard', currentBoard);
Session.set('currentCard', null);
@@ -32,57 +32,57 @@ FlowRouter.route('/b/:id/:slug', {
}
BlazeLayout.render('defaultLayout', { content: 'board' });
- }
+ },
});
FlowRouter.route('/b/:boardId/:slug/:cardId', {
name: 'card',
- action: function(params) {
+ action(params) {
Session.set('currentBoard', params.boardId);
Session.set('currentCard', params.cardId);
EscapeActions.executeUpTo('inlinedForm');
BlazeLayout.render('defaultLayout', { content: 'board' });
- }
+ },
});
FlowRouter.route('/shortcuts', {
name: 'shortcuts',
- action: function(params) {
+ action() {
const shortcutsTemplate = 'keyboardShortcuts';
EscapeActions.executeUpTo('popup-close');
if (previousPath) {
Modal.open(shortcutsTemplate, {
- onCloseGoTo: previousPath
+ onCloseGoTo: previousPath,
});
} else {
// XXX There is currently no way to escape this page on Sandstorm
BlazeLayout.render('defaultLayout', { content: shortcutsTemplate });
}
- }
+ },
});
FlowRouter.notFound = {
- action: function() {
+ action() {
BlazeLayout.render('defaultLayout', { content: 'notFound' });
- }
-}
+ },
+};
// We maintain a list of redirections to ensure that we don't break old URLs
// when we change our routing scheme.
-var redirections = {
+const redirections = {
'/boards': '/',
'/boards/:id/:slug': '/b/:id/:slug',
- '/boards/:id/:slug/:cardId': '/b/:id/:slug/:cardId'
+ '/boards/:id/:slug/:cardId': '/b/:id/:slug/:cardId',
};
-_.each(redirections, function(newPath, oldPath) {
+_.each(redirections, (newPath, oldPath) => {
FlowRouter.route(oldPath, {
- triggersEnter: [function(context, redirect) {
+ triggersEnter: [(context, redirect) => {
redirect(FlowRouter.path(newPath, context.params));
- }]
+ }],
});
});