diff options
-rw-r--r-- | client/components/rules/actions/boardActions.js | 5 | ||||
-rw-r--r-- | client/components/rules/actions/cardActions.js | 1 | ||||
-rw-r--r-- | client/components/rules/ruleDetails.jade | 5 | ||||
-rw-r--r-- | client/components/rules/ruleDetails.js | 17 | ||||
-rw-r--r-- | client/components/rules/rulesList.jade | 2 | ||||
-rw-r--r-- | client/components/rules/rulesMain.jade | 4 | ||||
-rw-r--r-- | client/components/rules/rulesMain.js | 2 | ||||
-rw-r--r-- | client/components/rules/triggers/boardTriggers.jade | 4 | ||||
-rw-r--r-- | client/components/rules/triggers/boardTriggers.js | 25 | ||||
-rw-r--r-- | client/components/rules/triggers/cardTriggers.jade | 2 | ||||
-rw-r--r-- | client/lib/utils.js | 51 | ||||
-rw-r--r-- | i18n/en.i18n.json | 26 | ||||
-rw-r--r-- | models/actions.js | 103 | ||||
-rw-r--r-- | models/triggers.js | 88 | ||||
-rw-r--r-- | server/publications/rules.js | 4 |
15 files changed, 270 insertions, 69 deletions
diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index 2b6fed57..d1593a5b 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -17,7 +17,6 @@ BlazeComponent.extendComponent({ if(actionSelected == "top"){ const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":listTitle,"boardId":boardId}); - console.log("Action inserted"); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "bottom"){ @@ -49,12 +48,12 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#arch-action').value; if(actionSelected == "archive"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "archive"}); + const actionId = Actions.insert({actionType: "archive","boardId":boardId}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "unarchive"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "unarchive"}); + const actionId = Actions.insert({actionType: "unarchive","boardId":boardId}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, diff --git a/client/components/rules/actions/cardActions.js b/client/components/rules/actions/cardActions.js index 571020a8..3f4b4442 100644 --- a/client/components/rules/actions/cardActions.js +++ b/client/components/rules/actions/cardActions.js @@ -5,7 +5,6 @@ BlazeComponent.extendComponent({ labels(){ const labels = Boards.findOne(Session.get('currentBoard')).labels; - console.log(labels); for(let i = 0;i<labels.length;i++){ if(labels[i].name == "" || labels[i].name == undefined){ labels[i].name = labels[i].color.toUpperCase(); diff --git a/client/components/rules/ruleDetails.jade b/client/components/rules/ruleDetails.jade index 9314151d..479553d1 100644 --- a/client/components/rules/ruleDetails.jade +++ b/client/components/rules/ruleDetails.jade @@ -3,6 +3,5 @@ template(name="ruleDetails") h2 i.fa.fa-magic | {{{_ 'r-rule-details' }}} - - | trigger - | action
\ No newline at end of file + = trigger + = action
\ No newline at end of file diff --git a/client/components/rules/ruleDetails.js b/client/components/rules/ruleDetails.js index 572978ac..872fec2d 100644 --- a/client/components/rules/ruleDetails.js +++ b/client/components/rules/ruleDetails.js @@ -1,15 +1,24 @@ BlazeComponent.extendComponent({ onCreated() { this.subscribe('allRules'); + this.subscribe('allTriggers'); + this.subscribe('allActions'); + }, trigger(){ - const rule = Rules.findOne({_id:ruleId}); - return Triggers.findOne({_id:rule.triggerId}); + const ruleId = this.data().ruleId; + const rule = Rules.findOne({_id: ruleId.get()}); + const trigger = Triggers.findOne({_id:rule.triggerId}); + console.log(trigger); + return trigger.description(); }, action(){ - const rule = Rules.findOne({_id:ruleId}); - return Triggers.findOne({_id:rule.actionId}); + const ruleId = this.data().ruleId; + const rule = Rules.findOne({_id: ruleId.get()}); + const action = Actions.findOne({_id:rule.actionId}); + console.log(action); + return action.description(); }, events() { diff --git a/client/components/rules/rulesList.jade b/client/components/rules/rulesList.jade index 7f9e6946..c2676aa7 100644 --- a/client/components/rules/rulesList.jade +++ b/client/components/rules/rulesList.jade @@ -10,7 +10,7 @@ template(name="rulesList") p = title div.rules-btns-group - button + button.js-goto-details i.fa.fa-eye | {{{_ 'r-view-rule'}}} if currentUser.isAdmin diff --git a/client/components/rules/rulesMain.jade b/client/components/rules/rulesMain.jade index 3d03372f..dc33ee4e 100644 --- a/client/components/rules/rulesMain.jade +++ b/client/components/rules/rulesMain.jade @@ -4,4 +4,6 @@ template(name="rulesMain") if($eq rulesCurrentTab.get 'trigger') +rulesTriggers(ruleName=ruleName triggerVar=triggerVar) if($eq rulesCurrentTab.get 'action') - +rulesActions(ruleName=ruleName triggerVar=triggerVar)
\ No newline at end of file + +rulesActions(ruleName=ruleName triggerVar=triggerVar) + if($eq rulesCurrentTab.get 'ruleDetails') + +ruleDetails(ruleId=ruleId)
\ No newline at end of file diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index 0d7a5c6a..d16b9a41 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -46,6 +46,8 @@ BlazeComponent.extendComponent({ }, 'click .js-goto-details'(event) { event.preventDefault(); + const rule = this.currentData(); + this.ruleId.set(rule._id) this.setRuleDetails(); }, diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index dec15d86..b5e08c8c 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -6,7 +6,7 @@ template(name="boardTriggers") div.trigger-dropdown select(id="gen-action") option(value="created") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text | {{{_'r-the-board'}}} div.trigger-button.js-add-gen-trigger.js-goto-action @@ -19,7 +19,7 @@ template(name="boardTriggers") div.trigger-dropdown select(id="create-action") option(value="created") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text | {{{_'r-list'}}} div.trigger-dropdown diff --git a/client/components/rules/triggers/boardTriggers.js b/client/components/rules/triggers/boardTriggers.js index dcc1c187..067c1df8 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -6,51 +6,56 @@ BlazeComponent.extendComponent({ events() { return [ {'click .js-add-gen-trigger'(event) { - + const desc = Utils.getTriggerActionDesc(event,this); let datas = this.data(); const actionSelected = this.find('#gen-action').value; const boardId = Session.get('currentBoard') if(actionSelected == "created"){ - datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":"*"}); + datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":"*","desc":desc}); } if(actionSelected == "removed"){ - datas.triggerVar.set({activityType: "removeCard","boardId":boardId}); + datas.triggerVar.set({activityType: "removeCard","boardId":boardId,"desc":desc}); } + + }, 'click .js-add-create-trigger'(event) { - + const desc = Utils.getTriggerActionDesc(event,this); let datas = this.data(); const actionSelected = this.find('#create-action').value; const listName = this.find('#create-list-name').value; const boardId = Session.get('currentBoard') if(actionSelected == "created"){ - datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":listName}); + datas.triggerVar.set({activityType: "createCard","boardId":boardId,"listName":listName,"desc":desc}); } if(actionSelected == "removed"){ - datas.triggerVar.set({activityType: "removeCard","boardId":boardId,"listName":listName}); + datas.triggerVar.set({activityType: "removeCard","boardId":boardId,"listName":listName,"desc":desc}); } }, 'click .js-add-moved-trigger'(event) { let datas = this.data(); + const desc = Utils.getTriggerActionDesc(event,this); + const actionSelected = this.find('#move-action').value; const listName = this.find('#move-list-name').value; const boardId = Session.get('currentBoard') if(actionSelected == "moved-to"){ - datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":listName,"oldListName":"*"}); + datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":listName,"oldListName":"*","desc":desc}); } if(actionSelected == "moved-from"){ - datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":"*","oldListName":listName}); + datas.triggerVar.set({activityType: "moveCard","boardId":boardId,"listName":"*","oldListName":listName,"desc":desc}); } }, 'click .js-add-arc-trigger'(event) { let datas = this.data(); + const desc = Utils.getTriggerActionDesc(event,this); const actionSelected = this.find('#arch-action').value; const boardId = Session.get('currentBoard') if(actionSelected == "archived"){ - datas.triggerVar.set({activityType: "archivedCard","boardId":boardId}); + datas.triggerVar.set({activityType: "archivedCard","boardId":boardId,"desc":desc}); } if(actionSelected == "unarchived"){ - datas.triggerVar.set({activityType: "restoredCard","boardId":boardId}); + datas.triggerVar.set({activityType: "restoredCard","boardId":boardId,"desc":desc}); } } diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade index a459a7e0..dd02413c 100644 --- a/client/components/rules/triggers/cardTriggers.jade +++ b/client/components/rules/triggers/cardTriggers.jade @@ -22,7 +22,7 @@ template(name="cardTriggers") option(value="#{_id}") = name div.trigger-text - | is + | {{{_'r-is'}}} div.trigger-dropdown select(id="spec-label-action") option(value="added") {{{_'r-added-to'}}} diff --git a/client/lib/utils.js b/client/lib/utils.js index 6b8e3524..1b5ad1f3 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -40,14 +40,14 @@ Utils = { base = 0; increment = 1; // If we drop the card in the first position - } else if (!prevData) { - base = nextData.sort - 1; - increment = -1; + } else if (!prevData) { + base = nextData.sort - 1; + increment = -1; // If we drop the card in the last position - } else if (!nextData) { - base = prevData.sort + 1; - increment = 1; - } + } else if (!nextData) { + base = prevData.sort + 1; + increment = 1; + } // In the general case take the average of the previous and next element // sort indexes. else { @@ -72,14 +72,14 @@ Utils = { base = 0; increment = 1; // If we drop the card in the first position - } else if (!prevCardDomElement) { - base = Blaze.getData(nextCardDomElement).sort - 1; - increment = -1; + } else if (!prevCardDomElement) { + base = Blaze.getData(nextCardDomElement).sort - 1; + increment = -1; // If we drop the card in the last position - } else if (!nextCardDomElement) { - base = Blaze.getData(prevCardDomElement).sort + 1; - increment = 1; - } + } else if (!nextCardDomElement) { + base = Blaze.getData(prevCardDomElement).sort + 1; + increment = 1; + } // In the general case take the average of the previous and next element // sort indexes. else { @@ -121,7 +121,7 @@ Utils = { return Math.sqrt( Math.pow(touchA.screenX - touchB.screenX, 2) + Math.pow(touchA.screenY - touchB.screenY, 2) - ); + ); }, enableClickOnTouch(selector) { @@ -144,6 +144,27 @@ Utils = { } }); }, + + getTriggerActionDesc(event,tempInstance){ + const jqueryEl = tempInstance.$(event.currentTarget.parentNode); + const triggerEls = jqueryEl.find(".trigger-content").children(); + let finalString = ""; + for(let i = 0;i< triggerEls.length;i++){ + const element = tempInstance.$(triggerEls[i]); + if(element.hasClass("trigger-text")){ + finalString += element.text(); + }else if(element.find("select").length > 0){ + finalString += element.find("select option:selected").text(); + }else if(element.find("input").length > 0){ + finalString += element.find("input").val(); + } + // Add space + if(i != length - 1){ + finalString += " "; + } + } + return finalString.toLowerCase(); + }, }; // A simple tracker dependency that we invalidate every time the window is diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 7c93ec60..be11d0e1 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -575,7 +575,31 @@ "r-send-email": "Send an email", "r-to": "to", "r-subject": "subject", - "r-rule-details": "Rule details" + "r-rule-details": "Rule details", + "r-d-move-to-top-gen": "Move card to top of its list", + "r-d-move-to-top-spec": "Move card to top of list", + "r-d-move-to-bottom-gen": "Move card to bottom of its list", + "r-d-move-to-bottom-spec": "Move card to bottom of list", + "r-d-send-email": "Send email", + "r-d-send-email-to": "to", + "r-d-send-email-subject": "subject", + "r-d-send-email-message": "message", + "r-d-archive": "Archive the card", + "r-d-unarchive": "Unarchive the card", + "r-d-add-label": "Add label", + "r-d-remove-label": "Remove label", + "r-d-add-member": "Add member", + "r-d-remove-member": "Remove member", + "r-d-remove-all-member": "Remove all member", + "r-d-check-all": "Check all item of list", + "r-d-uncheck-all": "Uncheck all item of list", + "r-d-check-one": "Check item", + "r-d-uncheck-one": "Uncheck item", + "r-d-check-of-list": "of checklist", + "r-d-add-checklist": "Add checklist", + "r-d-remove-checklist": "Remove checklist" + + diff --git a/models/actions.js b/models/actions.js index da9b30fb..fd1d03e0 100644 --- a/models/actions.js +++ b/models/actions.js @@ -2,15 +2,100 @@ Actions = new Mongo.Collection('actions'); Actions.allow({ - insert(userId, doc) { - return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); - }, - update(userId, doc) { - return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); - }, - remove(userId, doc) { - return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); - } + insert(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); + }, + update(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); + }, + remove(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); + } +}); + + +Actions.helpers({ + description() { + if(this.actionType == "moveCardToTop"){ + if(this.listTitle == "*"){ + return TAPi18n.__('r-d-move-to-top-gen'); + }else{ + return TAPi18n.__('r-d-move-to-top-spec') + " " + this.listTitle; + } + } + if(this.actionType == "moveCardToBottom"){ + if(this.listTitle == "*"){ + return TAPi18n.__('r-d-move-to-bottom-gen'); + }else{ + return TAPi18n.__('r-d-move-to-bottom-spec') + " " + this.listTitle; + } + } + if(this.actionType == "sendEmail"){ + const to = " " + TAPi18n.__('r-d-send-email-to') + ": " + this.emailTo + ", "; + const subject = TAPi18n.__('r-d-send-email-subject') + ": " + this.emailSubject + ", "; + const message = TAPi18n.__('r-d-send-email-message') + ": " + this.emailMsg; + const total = TAPi18n.__('r-d-send-email') + to + subject + message; + return total; + } + if(this.actionType == "archive"){ + return TAPi18n.__('r-d-archive'); + } + if(this.actionType == "unarchive"){ + return TAPi18n.__('r-d-unarchive'); + } + if(this.actionType == "addLabel"){ + const board = Boards.findOne(Session.get('currentBoard')); + const label = board.getLabelById(this.labelId); + let name; + if(label.name == "" || label.name == undefined){ + name = label.color.toUpperCase(); + }else{ + name = label.name; + } + + return TAPi18n.__('r-d-add-label') + ": "+name; + } + if(this.actionType == "removeLabel"){ + const board = Boards.findOne(Session.get('currentBoard')); + const label = board.getLabelById(this.labelId); + let name; + if(label.name == "" || label.name == undefined){ + name = label.color.toUpperCase(); + }else{ + name = label.name; + } + return TAPi18n.__('r-d-remove-label') + ": " + name; + } + if(this.actionType == "addMember"){ + return TAPi18n.__('r-d-add-member') + ": " + this.memberName; + } + if(this.actionType == "removeMember"){ + if(this.memberName == "*"){ + return TAPi18n.__('r-d-remove-all-member'); + } + return TAPi18n.__('r-d-remove-member') + ": "+ this.memberName; + } + if(this.actionType == "checkAll"){ + return TAPi18n.__('r-d-check-all') + ": " + this.checklistName; + } + if(this.actionType == "uncheckAll"){ + return TAPi18n.__('r-d-uncheck-all') + ": "+ this.checklistName; + } + if(this.actionType == "checkItem"){ + return TAPi18n.__('r-d-check-one') + ": "+ this.checkItemName + " " + TAPi18n.__('r-d-check-of-list') + ": " +this.checklistName; + } + if(this.actionType == "uncheckItem"){ + return TAPi18n.__('r-d-check-one') + ": "+ this.checkItemName + " " + TAPi18n.__('r-d-check-of-list') + ": " +this.checklistName; + } + if(this.actionType == "addChecklist"){ + return TAPi18n.__('r-d-add-checklist') + ": "+ this.checklistName; + } + if(this.actionType == "removeChecklist"){ + return TAPi18n.__('r-d-remove-checklist') + ": "+ this.checklistName; + } + + return "Ops not trigger description"; + } }); diff --git a/models/triggers.js b/models/triggers.js index a1437ea6..c5ed849e 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -24,28 +24,80 @@ Triggers.allow({ Triggers.helpers({ - getRule(){ - return Rules.findOne({triggerId:this._id}); - }, + description(){ + if(this.activityType == "createCard"){ + if(this.listName == "*"){ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-added-to').toLowerCase() + " " + TAPi18n.__('r-the-board'); + }else{ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-added-to').toLowerCase() + " " + TAPi18n.__('r-list') + " " +this.listName; + } + } + if(this.activityType == "removeCard"){ + if(this.listName == "*"){ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-removed-from') + " " + TAPi18n.__('r-the-board'); + }else{ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-removed-from') + " " + TAPi18n.__('r-list') + " " +this.listName; + } + } + if(this.activityType == "moveCard"){ + if(this.listName = "*"){ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-moved-from') + " " + this.oldListName; + }else{ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-moved-to') + " " + this.listName; + } + + } + if(this.activityType = "archivedCard"){ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-archived'); + } + if(this.activityType = "restoredCard"){ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-unarchived'); + } + if(this.activityType = "addedLabel"){ + if(this.labelId == "*"){ + return TAPi18n.__('r-when-a-label-is') + " " + TAPi18n.__('r-added-to') + " " + TAPi18n.__('r-a-card'); + }else{ + const board = Boards.findOne(Session.get('currentBoard')); + const label = board.getLabelById(this.labelId); + let name; + if(label.name == "" || label.name == undefined){ + name = label.color.toUpperCase(); + }else{ + name = label.name; + } + } + } + if(this.activityType = "restoredCard"){ + return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-unarchived'); + } - fromList() { - return Lists.findOne(this.fromId); - }, - toList() { - return Lists.findOne(this.toId); - }, - findList(title) { - return Lists.findOne({title:title}); - }, + return "No description found"; +}, + +getRule(){ + return Rules.findOne({triggerId:this._id}); +}, + +fromList() { + return Lists.findOne(this.fromId); +}, + +toList() { + return Lists.findOne(this.toId); +}, + +findList(title) { + return Lists.findOne({title:title}); +}, - labels() { - const boardLabels = this.board().labels; - const cardLabels = _.filter(boardLabels, (label) => { - return _.contains(this.labelIds, label._id); - }); - return cardLabels; +labels() { + const boardLabels = this.board().labels; + const cardLabels = _.filter(boardLabels, (label) => { + return _.contains(this.labelIds, label._id); + }); + return cardLabels; }}); diff --git a/server/publications/rules.js b/server/publications/rules.js index ae4b898e..7aeb66bf 100644 --- a/server/publications/rules.js +++ b/server/publications/rules.js @@ -12,3 +12,7 @@ Meteor.publish('allRules', () => { Meteor.publish('allTriggers', () => { return Triggers.find({}); }); + +Meteor.publish('allActions', () => { + return Actions.find({}); +}); |