Ver código fonte

Merge branch 'NicoP-S-master'

Lauri Ojansivu 5 anos atrás
pai
commit
b1d1c7c45a

+ 8 - 2
client/components/cards/cardDetails.jade

@@ -220,8 +220,14 @@ template(name="cardDetails")
       +viewer
         = getVoteQuestion
       if showVotingButtons
-        button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}") {{_ 'vote-for-it'}}
-        button.card-details-red.js-vote.js-vote-negative(class="{{#if $eq voteState false}}voted{{/if}}") {{_ 'vote-against'}}
+        button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}")
+          if voteState
+            i.fa.fa-thumbs-up
+          {{_ 'vote-for-it'}}
+        button.card-details-red.js-vote.js-vote-negative(class="{{#if $eq voteState false}}voted{{/if}}")
+          if $eq voteState false
+            i.fa.fa-thumbs-down
+          {{_ 'vote-against'}}
 
     //- XXX We should use "editable" to avoid repetiting ourselves
     if canModifyCard

+ 3 - 19
client/components/cards/cardDetails.js

@@ -38,22 +38,6 @@ BlazeComponent.extendComponent({
     Meteor.subscribe('unsaved-edits');
   },
 
-  voteState() {
-    const card = this.currentData();
-    const userId = Meteor.userId();
-    let state;
-    if (card.vote) {
-      if (card.vote.positive) {
-        state = _.contains(card.vote.positive, userId);
-        if (state === true) return true;
-      }
-      if (card.vote.negative) {
-        state = _.contains(card.vote.negative, userId);
-        if (state === true) return false;
-      }
-    }
-    return null;
-  },
   isWatching() {
     const card = this.currentData();
     return card.findWatcher(Meteor.userId());
@@ -412,9 +396,9 @@ BlazeComponent.extendComponent({
           const forIt = $(e.target).hasClass('js-vote-positive');
           let newState = null;
           if (
-            this.voteState() === null ||
-            (this.voteState() === false && forIt) ||
-            (this.voteState() === true && !forIt)
+            this.data().voteState() === null ||
+            (this.data().voteState() === false && forIt) ||
+            (this.data().voteState() === true && !forIt)
           ) {
             newState = forIt;
           }

+ 2 - 2
client/components/cards/minicard.jade

@@ -106,9 +106,9 @@ template(name="minicard")
           span.badge-icon.fa.fa-align-left
       if getVoteQuestion
         .badge.badge-state-image-only(title=getVoteQuestion)
-          span.badge-icon.fa.fa-thumbs-up
+          span.badge-icon.fa.fa-thumbs-up(class="{{#if voteState}}text-green{{/if}}")
           span.badge-text {{ voteCountPositive }}
-          span.badge-icon.fa.fa-thumbs-down
+          span.badge-icon.fa.fa-thumbs-down(class="{{#if $eq voteState false}}text-red{{/if}}")
           span.badge-text {{ voteCountNegative }}
       if attachments.count
         .badge

+ 5 - 0
client/components/cards/minicard.styl

@@ -299,3 +299,8 @@ minicard-color(background, color...)
 
 .minicard-indigo
   minicard-color(#4b0082, #ffffff) //White text for better visibility
+
+.text-red
+  color:red
+.text-green
+  color:green

+ 37 - 0
models/cards.js

@@ -1112,6 +1112,21 @@ Cards.helpers({
       return Users.find({ _id: { $in: this.vote.negative } });
     return [];
   },
+  voteState() {
+    const userId = Meteor.userId();
+    let state;
+    if (this.vote) {
+      if (this.vote.positive) {
+        state = _.contains(this.vote.positive, userId);
+        if (state === true) return true;
+      }
+      if (this.vote.negative) {
+        state = _.contains(this.vote.negative, userId);
+        if (state === true) return false;
+      }
+    }
+    return null;
+  },
 
   getId() {
     if (this.isLinked()) {
@@ -2374,6 +2389,10 @@ if (Meteor.isServer) {
    * @param {boolean} [isOverTime] the new isOverTime field of the card
    * @param {string} [customFields] the new customFields value of the card
    * @param {string} [color] the new color of the card
+   * @param {Object} [vote] the vote object
+   * @param {string} vote.question the vote question
+   * @param {boolean} vote.public show who voted what
+   * @param {boolean} vote.allowNonBoardMembers allow all logged in users to vote?
    * @return_type {_id: string}
    */
   JsonRoutes.add(
@@ -2473,6 +2492,24 @@ if (Meteor.isServer) {
           { $set: { color: newColor } },
         );
       }
+      if (req.body.hasOwnProperty('vote')) {
+        const newVote = req.body.vote;
+        newVote.positive = [];
+        newVote.negative = [];
+        if (!newVote.hasOwnProperty('public')) newVote.public = false;
+        if (!newVote.hasOwnProperty('allowNonBoardMembers'))
+          newVote.allowNonBoardMembers = false;
+
+        Cards.direct.update(
+          {
+            _id: paramCardId,
+            listId: paramListId,
+            boardId: paramBoardId,
+            archived: false,
+          },
+          { $set: { vote: newVote } },
+        );
+      }
       if (req.body.hasOwnProperty('labelIds')) {
         let newlabelIds = req.body.labelIds;
         if (_.isString(newlabelIds)) {