summaryrefslogtreecommitdiffstats
path: root/client/components/main/editor.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/components/main/editor.js')
-rwxr-xr-xclient/components/main/editor.js111
1 files changed, 60 insertions, 51 deletions
diff --git a/client/components/main/editor.js b/client/components/main/editor.js
index 88d8abf0..2824723d 100755
--- a/client/components/main/editor.js
+++ b/client/components/main/editor.js
@@ -9,10 +9,15 @@ Template.editor.onRendered(() => {
match: /\B@([\w.]*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
- callback(currentBoard.activeMembers().map((member) => {
- const username = Users.findOne(member.userId).username;
- return username.includes(term) ? username : null;
- }).filter(Boolean));
+ callback(
+ currentBoard
+ .activeMembers()
+ .map(member => {
+ const username = Users.findOne(member.userId).username;
+ return username.includes(term) ? username : null;
+ })
+ .filter(Boolean),
+ );
},
template(value) {
return value;
@@ -33,69 +38,73 @@ import sanitizeXss from 'xss';
// 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;
- let content = Blaze.toHTML(view.templateContentBlock);
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
- if (!currentBoard)
- return HTML.Raw(sanitizeXss(content));
- const knowedUsers = currentBoard.members.map((member) => {
- const u = Users.findOne(member.userId);
- if(u){
- member.username = u.username;
- }
- return member;
- });
- const mentionRegex = /\B@([\w.]*)/gi;
+const at = HTML.CharRef({ html: '@', str: '@' });
+Blaze.Template.registerHelper(
+ 'mentions',
+ new Template('mentions', function() {
+ const view = this;
+ let content = Blaze.toHTML(view.templateContentBlock);
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ if (!currentBoard) return HTML.Raw(sanitizeXss(content));
+ const knowedUsers = currentBoard.members.map(member => {
+ const u = Users.findOne(member.userId);
+ if (u) {
+ member.username = u.username;
+ }
+ return member;
+ });
+ const mentionRegex = /\B@([\w.]*)/gi;
- let currentMention;
- while ((currentMention = mentionRegex.exec(content)) !== null) {
- const [fullMention, username] = currentMention;
- const knowedUser = _.findWhere(knowedUsers, { username });
- if (!knowedUser) {
- continue;
- }
+ let currentMention;
+ while ((currentMention = mentionRegex.exec(content)) !== null) {
+ const [fullMention, username] = currentMention;
+ const knowedUser = _.findWhere(knowedUsers, { username });
+ if (!knowedUser) {
+ continue;
+ }
- const linkValue = [' ', at, knowedUser.username];
- let linkClass = 'atMention js-open-member';
- if (knowedUser.userId === Meteor.userId()) {
- linkClass += ' me';
- }
- const link = HTML.A({
- 'class': linkClass,
- // XXX Hack. Since we stringify this render function result below with
- // `Blaze.toHTML` we can't rely on blaze data contexts to pass the
- // `userId` to the popup as usual, and we need to store it in the DOM
- // using a data attribute.
- 'data-userId': knowedUser.userId,
- }, linkValue);
+ const linkValue = [' ', at, knowedUser.username];
+ let linkClass = 'atMention js-open-member';
+ if (knowedUser.userId === Meteor.userId()) {
+ linkClass += ' me';
+ }
+ const link = HTML.A(
+ {
+ class: linkClass,
+ // XXX Hack. Since we stringify this render function result below with
+ // `Blaze.toHTML` we can't rely on blaze data contexts to pass the
+ // `userId` to the popup as usual, and we need to store it in the DOM
+ // using a data attribute.
+ 'data-userId': knowedUser.userId,
+ },
+ linkValue,
+ );
- content = content.replace(fullMention, Blaze.toHTML(link));
- }
+ content = content.replace(fullMention, Blaze.toHTML(link));
+ }
- return HTML.Raw(sanitizeXss(content));
-}));
+ return HTML.Raw(sanitizeXss(content));
+ }),
+);
Template.viewer.events({
// Viewer sometimes have click-able wrapper around them (for instance to edit
// the corresponding text). Clicking a link shouldn't fire these actions, stop
// we stop these event at the viewer component level.
- 'click a'(evt, tpl) {
- evt.stopPropagation();
+ 'click a'(event, templateInstance) {
+ event.stopPropagation();
// XXX We hijack the build-in browser action because we currently don't have
// `_blank` attributes in viewer links, and the transformer function is
// handled by a third party package that we can't configure easily. Fix that
// by using directly `_blank` attribute in the rendered HTML.
- evt.preventDefault();
+ event.preventDefault();
- const userId = evt.currentTarget.dataset.userid;
+ const userId = event.currentTarget.dataset.userid;
if (userId) {
- Popup.open('member').call({ userId }, evt, tpl);
- }
- else {
- const href = evt.currentTarget.href;
+ Popup.open('member').call({ userId }, event, templateInstance);
+ } else {
+ const href = event.currentTarget.href;
if (href) {
window.open(href, '_blank');
}