Jelajahi Sumber

Favor FlowRouter.url over Meteor.absoluteUrl

It hides the leading slash treatment as an hidden implementation
detail.
Maxime Quandalle 9 tahun lalu
induk
melakukan
701262a439
3 mengubah file dengan 17 tambahan dan 34 penghapusan
  1. 1 1
      client/components/boards/boardHeader.js
  2. 16 12
      models/export.js
  3. 0 21
      server/lib/utils.js

+ 1 - 1
client/components/boards/boardHeader.js

@@ -19,7 +19,7 @@ Template.boardMenuPopup.helpers({
   exportUrl() {
     const boardId = Session.get('currentBoard');
     const loginToken = Accounts._storedLoginToken();
-    return Meteor.absoluteUrl(`api/boards/${boardId}?authToken=${loginToken}`);
+    return FlowRouter.url(`api/boards/${boardId}?authToken=${loginToken}`);
   },
   exportFilename() {
     const boardId = Session.get('currentBoard');

+ 16 - 12
models/export.js

@@ -2,8 +2,10 @@
 if(Meteor.isServer) {
   // todo XXX once we have a real API in place, move that route there
   // todo XXX also  share the route definition between the client and the server
-  // so that we could use something like ApiRoutes.path('boards/export', boardId)
-  // on the client instead of copy/pasting the route path manually between the client and the server.
+  // so that we could use something like
+  // `ApiRoutes.path('boards/export', boardId)``
+  // on the client instead of copy/pasting the route path manually between the
+  // client and the server.
   /*
    * This route is used to export the board FROM THE APPLICATION.
    * If user is already logged-in, pass loginToken as param "authToken":
@@ -29,8 +31,8 @@ if(Meteor.isServer) {
     if(exporter.canExport(user)) {
       JsonRoutes.sendResult(res, 200, exporter.build());
     } else {
-      // we could send an explicit error message, but on the other hand the only way to
-      // get there is by hacking the UI so let's keep it raw.
+      // we could send an explicit error message, but on the other hand the only
+      // way to get there is by hacking the UI so let's keep it raw.
       JsonRoutes.sendResult(res, 403);
     }
   });
@@ -54,14 +56,16 @@ class Exporter {
     result.comments = CardComments.find(byBoard, noBoardId).fetch();
     result.activities = Activities.find(byBoard, noBoardId).fetch();
     // for attachments we only export IDs and absolute url to original doc
-    result.attachments = Attachments.find(byBoard).fetch().map((attachment) => { return {
-      _id: attachment._id,
-      cardId: attachment.cardId,
-      url: Meteor.absoluteUrl(Utils.stripLeadingSlash(attachment.url())),
-    };});
+    result.attachments = Attachments.find(byBoard).fetch().map((attachment) => {
+      return {
+        _id: attachment._id,
+        cardId: attachment.cardId,
+        url: FlowRouter.url(attachment.url()),
+      };
+    });
 
-    // we also have to export some user data - as the other elements only include id
-    // but we have to be careful:
+    // we also have to export some user data - as the other elements only
+    // include id but we have to be careful:
     // 1- only exports users that are linked somehow to that board
     // 2- do not export any sensitive information
     const users = {};
@@ -88,7 +92,7 @@ class Exporter {
     result.users = Users.find(byUserIds, userFields).fetch().map((user) => {
       // user avatar is stored as a relative url, we export absolute
       if(user.profile.avatarUrl) {
-        user.profile.avatarUrl = Meteor.absoluteUrl(Utils.stripLeadingSlash(user.profile.avatarUrl));
+        user.profile.avatarUrl = FlowRouter.url(user.profile.avatarUrl);
       }
       return user;
     });

+ 0 - 21
server/lib/utils.js

@@ -5,24 +5,3 @@ allowIsBoardAdmin = function(userId, board) {
 allowIsBoardMember = function(userId, board) {
   return board && board.hasMember(userId);
 };
-
-// todo XXX not really server-specific,
-// so move it to a common (client+server) lib?
-Utils = {
-  /**
-   * If text starts with a / will remove it.
-   * @param text
-   */
-  stripLeadingSlash(text) {
-    // we need an actual text string
-    if (!text) {
-      return text;
-    }
-    // if starting with slash
-    if (text[0] === '/') {
-      return text.slice(1);
-    }
-    // otherwise leave untouched
-    return text;
-  },
-};