Просмотр исходного кода

Fix some dead links

This commit fixes the download link in the activity feed on the
sidebar and the mention link on card description and comments
(replaced by a popup).

`eslint .` now passes without any error or warning.

Fixes #286
Maxime Quandalle 10 лет назад
Родитель
Сommit
dd95ecba98

+ 2 - 2
client/components/activities/activities.js

@@ -69,8 +69,8 @@ BlazeComponent.extendComponent({
   attachmentLink() {
     const attachment = this.currentData().attachment();
     return attachment && Blaze.toHTML(HTML.A({
-      href: attachment.url(),
-      'class': 'js-open-attachment-viewer',
+      href: attachment.url({ download: true }),
+      target: '_blank',
     }, attachment.name()));
   },
 

+ 51 - 1
client/components/main/editor.js

@@ -68,7 +68,55 @@ EscapeActions.register('textcomplete',
   () => dropdownMenuIsOpened
 );
 
+// 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 = Boards.findOne(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, linkClass, linkValue, link;
+  while (Boolean(currentMention = mentionRegex.exec(content))) {
+
+    knowedUser = _.findWhere(knowedUsers, { username: currentMention[1] });
+    if (!knowedUser)
+      continue;
+
+    linkValue = [' ', at, knowedUser.username];
+    linkClass = 'atMention js-open-member';
+    if (knowedUser.userId === Meteor.userId())
+      linkClass += ' me';
+    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(currentMention[0], Blaze.toHTML(link));
+  }
+
+  return HTML.Raw(content);
+}));
+
 Template.viewer.events({
+  'click .js-open-member'(evt, tpl) {
+    const userId = evt.currentTarget.dataset.userid;
+    Popup.open('member').call({ userId }, evt, tpl);
+  },
+
   // 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.
@@ -81,6 +129,8 @@ Template.viewer.events({
     // by using directly `_blank` attribute in the rendered HTML.
     evt.preventDefault();
     const href = evt.currentTarget.href;
-    window.open(href, '_blank');
+    if (href) {
+      window.open(href, '_blank');
+    }
   },
 });

+ 1 - 1
client/components/users/userHeader.js

@@ -35,7 +35,7 @@ Template.editProfilePopup.events({
 
 // XXX For some reason the useraccounts autofocus isnt working in this case.
 // See https://github.com/meteor-useraccounts/core/issues/384
-Template.changePasswordPopup.onRendered(() => {
+Template.changePasswordPopup.onRendered(function() {
   this.find('#at-field-current_password').focus();
 });
 

+ 0 - 38
client/config/blazeHelpers.js

@@ -13,41 +13,3 @@ Blaze.registerHelper('currentCard', () => {
 });
 
 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);
-}));