From 9d1d66b0f5253c571f07c0f7c6250f5a725ddbb1 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Sat, 29 Dec 2018 16:59:50 +0100 Subject: [PATCH 1/9] Added triggers by username --- client/components/rules/rules.styl | 7 +++- client/components/rules/rulesMain.js | 19 +++++++++ .../rules/triggers/boardTriggers.jade | 37 +++++++++++++++- .../rules/triggers/cardTriggers.jade | 35 ++++++++++++++++ .../rules/triggers/checklistTriggers.jade | 42 +++++++++++++++++++ i18n/en.i18n.json | 2 + server/triggersDef.js | 36 ++++++++-------- 7 files changed, 158 insertions(+), 20 deletions(-) diff --git a/client/components/rules/rules.styl b/client/components/rules/rules.styl index b52f84a77..4679e039c 100644 --- a/client/components/rules/rules.styl +++ b/client/components/rules/rules.styl @@ -10,7 +10,10 @@ display: inline-block float: left margin: revert - +.hide-element + display:none !important +.user-details + display:inline-block .rules-btns-group position: absolute right: 0 @@ -160,6 +163,8 @@ box-shadow: 0 0 0 2px darken(white, 60%) inset .trigger-button.trigger-button-email top:30px + .trigger-button.trigger-button-person + right:-40px .trigger-item.trigger-item-mail height:300px diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index 0752a5419..566fd3e55 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -42,7 +42,26 @@ BlazeComponent.extendComponent({ }, 'click .js-goto-action' (event) { event.preventDefault(); + // Add user to the trigger + const username = $(event.currentTarget.offsetParent).find(".user-name").val(); + let trigger = this.triggerVar.get(); + const user = Users.findOne({"username":username}); + if(user != undefined){ + trigger["userId"] = user._id; + }else{ + trigger["userId"] = "*"; + } + this.triggerVar.set(trigger); this.setAction(); + }, + 'click .js-show-user-field' (event) { + event.preventDefault(); + console.log(event); + console.log(event.currentTarget.offsetParent); + console.log($(event.currentTarget.offsetParent)); + $(event.currentTarget.offsetParent).find(".user-details").removeClass("hide-element"); + + }, 'click .js-goto-rules' (event) { event.preventDefault(); diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index 48b9345c5..b0f2b44fb 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -9,6 +9,13 @@ template(name="boardTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-the-board'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-trigger.js-goto-action i.fa.fa-plus @@ -23,7 +30,14 @@ template(name="boardTriggers") div.trigger-text | {{_'r-list'}} div.trigger-dropdown - input(id="create-list-name",type=text,placeholder="{{_'r-list-name'}}") + input(id="create-list-name",type=text,placeholder="{{_'r-list-name'}}") + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-create-trigger.js-goto-action i.fa.fa-plus @@ -31,6 +45,13 @@ template(name="boardTriggers") div.trigger-content div.trigger-text | {{_'r-when-a-card-is-moved'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-moved-trigger.js-goto-action i.fa.fa-plus @@ -46,6 +67,13 @@ template(name="boardTriggers") | {{_'r-list'}} div.trigger-dropdown input(id="move-list-name",type=text,placeholder="{{_'r-list-name'}}") + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-moved-trigger.js-goto-action i.fa.fa-plus @@ -57,6 +85,13 @@ template(name="boardTriggers") select(id="arch-action") option(value="archived") {{_'r-archived'}} option(value="unarchived") {{_'r-unarchived'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-arch-trigger.js-goto-action i.fa.fa-plus diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade index 5226e3c4c..52594986e 100644 --- a/client/components/rules/triggers/cardTriggers.jade +++ b/client/components/rules/triggers/cardTriggers.jade @@ -9,6 +9,13 @@ template(name="cardTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-a-card'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-label-trigger.js-goto-action i.fa.fa-plus @@ -29,6 +36,13 @@ template(name="cardTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-a-card'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-label-trigger.js-goto-action i.fa.fa-plus @@ -42,6 +56,13 @@ template(name="cardTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-a-card'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-member-trigger.js-goto-action i.fa.fa-plus @@ -60,6 +81,13 @@ template(name="cardTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-a-card'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-member-trigger.js-goto-action i.fa.fa-plus @@ -75,5 +103,12 @@ template(name="cardTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-a-card'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-attachment-trigger.js-goto-action i.fa.fa-plus diff --git a/client/components/rules/triggers/checklistTriggers.jade b/client/components/rules/triggers/checklistTriggers.jade index c6cd99a6c..a563e93b1 100644 --- a/client/components/rules/triggers/checklistTriggers.jade +++ b/client/components/rules/triggers/checklistTriggers.jade @@ -9,6 +9,13 @@ template(name="checklistTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-a-card'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-check-trigger.js-goto-action i.fa.fa-plus @@ -27,6 +34,13 @@ template(name="checklistTriggers") option(value="removed") {{_'r-removed-from'}} div.trigger-text | {{_'r-a-card'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-check-trigger.js-goto-action i.fa.fa-plus @@ -38,6 +52,13 @@ template(name="checklistTriggers") select(id="gen-comp-check-action") option(value="completed") {{_'r-completed'}} option(value="uncompleted") {{_'r-made-incomplete'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-comp-trigger.js-goto-action i.fa.fa-plus @@ -53,6 +74,13 @@ template(name="checklistTriggers") select(id="spec-comp-check-action") option(value="completed") {{_'r-completed'}} option(value="uncompleted") {{_'r-made-incomplete'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-comp-trigger.js-goto-action i.fa.fa-plus @@ -64,6 +92,13 @@ template(name="checklistTriggers") select(id="check-item-gen-action") option(value="checked") {{_'r-checked'}} option(value="unchecked") {{_'r-unchecked'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-check-item-trigger.js-goto-action i.fa.fa-plus @@ -79,5 +114,12 @@ template(name="checklistTriggers") select(id="check-item-spec-action") option(value="checked") {{_'r-checked'}} option(value="unchecked") {{_'r-unchecked'}} + div.trigger-button.trigger-button-person.js-show-user-field + i.fa.fa-user + div.user-details.hide-element + div.trigger-text + | {{_'r-by'}} + div.trigger-dropdown + input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-check-item-trigger.js-goto-action i.fa.fa-plus diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index a4138f148..9a18cc229 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -610,6 +610,8 @@ "r-d-check-of-list": "of checklist", "r-d-add-checklist": "Add checklist", "r-d-remove-checklist": "Remove checklist", + "r-by": "by", + "r-user-name": "username", "r-when-a-card-is-moved": "When a card is moved to another list", "ldap": "LDAP", "oauth2": "OAuth2", diff --git a/server/triggersDef.js b/server/triggersDef.js index f6d5333bf..73779d058 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -1,57 +1,57 @@ TriggersDef = { createCard:{ - matchingFields: ['boardId', 'listName'], + matchingFields: ['boardId', 'listName','userId'], }, moveCard:{ - matchingFields: ['boardId', 'listName', 'oldListName'], + matchingFields: ['boardId', 'listName', 'oldListName','userId'], }, archivedCard:{ - matchingFields: ['boardId'], + matchingFields: ['boardId','userId'], }, restoredCard:{ - matchingFields: ['boardId'], + matchingFields: ['boardId','userId'], }, joinMember:{ - matchingFields: ['boardId', 'username'], + matchingFields: ['boardId', 'username','userId'], }, unjoinMember:{ - matchingFields: ['boardId', 'username'], + matchingFields: ['boardId', 'username','userId'], }, addChecklist:{ - matchingFields: ['boardId', 'checklistName'], + matchingFields: ['boardId', 'checklistName','userId'], }, removeChecklist:{ - matchingFields: ['boardId', 'checklistName'], + matchingFields: ['boardId', 'checklistName','userId'], }, completeChecklist:{ - matchingFields: ['boardId', 'checklistName'], + matchingFields: ['boardId', 'checklistName','userId'], }, uncompleteChecklist:{ - matchingFields: ['boardId', 'checklistName'], + matchingFields: ['boardId', 'checklistName','userId'], }, addedChecklistItem:{ - matchingFields: ['boardId', 'checklistItemName'], + matchingFields: ['boardId', 'checklistItemName','userId'], }, removedChecklistItem:{ - matchingFields: ['boardId', 'checklistItemName'], + matchingFields: ['boardId', 'checklistItemName','userId'], }, checkedItem:{ - matchingFields: ['boardId', 'checklistItemName'], + matchingFields: ['boardId', 'checklistItemName','userId'], }, uncheckedItem:{ - matchingFields: ['boardId', 'checklistItemName'], + matchingFields: ['boardId', 'checklistItemName','userId'], }, addAttachment:{ - matchingFields: ['boardId'], + matchingFields: ['boardId','userId'], }, deleteAttachment:{ - matchingFields: ['boardId'], + matchingFields: ['boardId','userId'], }, addedLabel:{ - matchingFields: ['boardId', 'labelId'], + matchingFields: ['boardId', 'labelId','userId'], }, removedLabel:{ - matchingFields: ['boardId', 'labelId'], + matchingFields: ['boardId', 'labelId','userId'], }, }; From b2f23d619d1ff33e899080dca17d018f0e8d0963 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Sat, 29 Dec 2018 17:36:57 +0100 Subject: [PATCH 2/9] Triggers by username, updated desc --- client/lib/utils.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/lib/utils.js b/client/lib/utils.js index d46d80764..5ec62ef97 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -218,11 +218,14 @@ Utils = { const element = tempInstance.$(triggerEls[i]); if (element.hasClass('trigger-text')) { finalString += element.text().toLowerCase(); + } else if (element.hasClass('user-details')) { + console.log(element); + finalString += element.find('.trigger-text').text().toLowerCase()+ " " + element.find('input').val(); } else if (element.find('select').length > 0) { finalString += element.find('select option:selected').text().toLowerCase(); } else if (element.find('input').length > 0) { finalString += element.find('input').val(); - } + } // Add space if (i !== length - 1) { finalString += ' '; From a2d756074f05299248944ecce2cc87a9a28ab020 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Sun, 30 Dec 2018 22:08:34 +0100 Subject: [PATCH 3/9] Added swimlane trigger --- .../rules/triggers/boardTriggers.jade | 35 ++++++++++-------- .../rules/triggers/boardTriggers.js | 37 +++++++------------ .../rules/triggers/cardTriggers.jade | 10 ++--- .../rules/triggers/checklistTriggers.jade | 12 +++--- client/lib/utils.js | 13 +++++-- i18n/en.i18n.json | 5 ++- models/cards.js | 2 + server/triggersDef.js | 4 +- 8 files changed, 62 insertions(+), 56 deletions(-) diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index b0f2b44fb..abf2ee6d7 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -3,10 +3,8 @@ template(name="boardTriggers") div.trigger-content div.trigger-text | {{_'r-when-a-card-is'}} - div.trigger-dropdown - select(id="gen-action") - option(value="created") {{_'r-added-to'}} - option(value="removed") {{_'r-removed-from'}} + div.trigger-text + | {{_'r-added-to'}} div.trigger-text | {{_'r-the-board'}} div.trigger-button.trigger-button-person.js-show-user-field @@ -15,7 +13,7 @@ template(name="boardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-trigger.js-goto-action i.fa.fa-plus @@ -23,21 +21,23 @@ template(name="boardTriggers") div.trigger-content div.trigger-text | {{_'r-when-a-card-is'}} - div.trigger-dropdown - select(id="create-action") - option(value="created") {{_'r-added-to'}} - option(value="removed") {{_'r-removed-from'}} + div.trigger-text + | {{_'r-added-to'}} div.trigger-text | {{_'r-list'}} div.trigger-dropdown - input(id="create-list-name",type=text,placeholder="{{_'r-list-name'}}") + input(id="create-list-name",type=text,placeholder="{{_'r-list-name'}}") + div.trigger-text + | {{_'r-swimlane'}} + div.trigger-dropdown + input(id="create-swimlane-name",type=text,placeholder="{{_'r-swimlane-name'}}") div.trigger-button.trigger-button-person.js-show-user-field i.fa.fa-user div.user-details.hide-element div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-create-trigger.js-goto-action i.fa.fa-plus @@ -51,7 +51,7 @@ template(name="boardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-moved-trigger.js-goto-action i.fa.fa-plus @@ -66,14 +66,19 @@ template(name="boardTriggers") div.trigger-text | {{_'r-list'}} div.trigger-dropdown - input(id="move-list-name",type=text,placeholder="{{_'r-list-name'}}") + input(id="move-list-name",type=text,placeholder="{{_'r-list-name'}}") + div.trigger-text + | {{_'r-swimlane'}} + div.trigger-dropdown + input(id="create-swimlane-name",type=text,placeholder="{{_'r-swimlane-name'}}") + div.trigger-button.trigger-button-person.js-show-user-field div.trigger-button.trigger-button-person.js-show-user-field i.fa.fa-user div.user-details.hide-element div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-moved-trigger.js-goto-action i.fa.fa-plus @@ -91,7 +96,7 @@ template(name="boardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-arch-trigger.js-goto-action i.fa.fa-plus diff --git a/client/components/rules/triggers/boardTriggers.js b/client/components/rules/triggers/boardTriggers.js index 40c5b07ea..b822d6434 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -8,60 +8,48 @@ BlazeComponent.extendComponent({ 'click .js-add-gen-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); const datas = this.data(); - const actionSelected = this.find('#gen-action').value; const boardId = Session.get('currentBoard'); - if (actionSelected === 'created') { - datas.triggerVar.set({ + datas.triggerVar.set({ activityType: 'createCard', boardId, 'listName': '*', desc, }); - } - if (actionSelected === 'removed') { - datas.triggerVar.set({ - activityType: 'removeCard', - boardId, - desc, - }); - } }, 'click .js-add-create-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); const datas = this.data(); - const actionSelected = this.find('#create-action').value; const listName = this.find('#create-list-name').value; + const swimlaneName = this.find('#create-swimlane-name').value; + if(swimlaneName == undefined || swimlaneName == ""){ + swimlaneName = "*"; + } const boardId = Session.get('currentBoard'); - if (actionSelected === 'created') { - datas.triggerVar.set({ + datas.triggerVar.set({ activityType: 'createCard', boardId, + swimlaneName, listName, desc, }); - } - if (actionSelected === 'removed') { - datas.triggerVar.set({ - activityType: 'removeCard', - boardId, - listName, - desc, - }); - } }, 'click .js-add-moved-trigger' (event) { const datas = this.data(); const desc = Utils.getTriggerActionDesc(event, this); - + const swimlaneName = this.find('#create-swimlane-name').value; const actionSelected = this.find('#move-action').value; const listName = this.find('#move-list-name').value; const boardId = Session.get('currentBoard'); + if(swimlaneName == undefined || swimlaneName == ""){ + swimlaneName = "*"; + } if (actionSelected === 'moved-to') { datas.triggerVar.set({ activityType: 'moveCard', boardId, listName, + swimlaneName, 'oldListName': '*', desc, }); @@ -70,6 +58,7 @@ BlazeComponent.extendComponent({ datas.triggerVar.set({ activityType: 'moveCard', boardId, + swimlaneName, 'listName': '*', 'oldListName': listName, desc, diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade index 52594986e..541334516 100644 --- a/client/components/rules/triggers/cardTriggers.jade +++ b/client/components/rules/triggers/cardTriggers.jade @@ -15,7 +15,7 @@ template(name="cardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-label-trigger.js-goto-action i.fa.fa-plus @@ -42,7 +42,7 @@ template(name="cardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-label-trigger.js-goto-action i.fa.fa-plus @@ -62,7 +62,7 @@ template(name="cardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-member-trigger.js-goto-action i.fa.fa-plus @@ -87,7 +87,7 @@ template(name="cardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-member-trigger.js-goto-action i.fa.fa-plus @@ -109,6 +109,6 @@ template(name="cardTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-attachment-trigger.js-goto-action i.fa.fa-plus diff --git a/client/components/rules/triggers/checklistTriggers.jade b/client/components/rules/triggers/checklistTriggers.jade index a563e93b1..8745b3648 100644 --- a/client/components/rules/triggers/checklistTriggers.jade +++ b/client/components/rules/triggers/checklistTriggers.jade @@ -15,7 +15,7 @@ template(name="checklistTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-check-trigger.js-goto-action i.fa.fa-plus @@ -40,7 +40,7 @@ template(name="checklistTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-check-trigger.js-goto-action i.fa.fa-plus @@ -58,7 +58,7 @@ template(name="checklistTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-comp-trigger.js-goto-action i.fa.fa-plus @@ -80,7 +80,7 @@ template(name="checklistTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-comp-trigger.js-goto-action i.fa.fa-plus @@ -98,7 +98,7 @@ template(name="checklistTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-gen-check-item-trigger.js-goto-action i.fa.fa-plus @@ -120,6 +120,6 @@ template(name="checklistTriggers") div.trigger-text | {{_'r-by'}} div.trigger-dropdown - input(class="user-name",id="create-list-name",type=text,placeholder="{{_'r-user-name'}}") + input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") div.trigger-button.js-add-spec-check-item-trigger.js-goto-action i.fa.fa-plus diff --git a/client/lib/utils.js b/client/lib/utils.js index 5ec62ef97..f252a2203 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -219,12 +219,19 @@ Utils = { if (element.hasClass('trigger-text')) { finalString += element.text().toLowerCase(); } else if (element.hasClass('user-details')) { - console.log(element); - finalString += element.find('.trigger-text').text().toLowerCase()+ " " + element.find('input').val(); + let username = element.find('input').val(); + if(username == undefined || username == ""){ + username = "*"; + } + finalString += element.find('.trigger-text').text().toLowerCase()+ " " + username ; } else if (element.find('select').length > 0) { finalString += element.find('select option:selected').text().toLowerCase(); } else if (element.find('input').length > 0) { - finalString += element.find('input').val(); + let inputvalue = element.find('input').val(); + if(inputvalue == undefined || inputvalue == ""){ + inputvalue = "*"; + } + finalString += inputvalue; } // Add space if (i !== length - 1) { diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 9a18cc229..d4745b224 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -549,7 +549,7 @@ "r-a-card": "a card", "r-when-a-label-is": "When a label is", "r-when-the-label-is": "When the label is", - "r-list-name": "List name", + "r-list-name": "list name", "r-when-a-member": "When a member is", "r-when-the-member": "When the member", "r-name": "name", @@ -611,7 +611,10 @@ "r-d-add-checklist": "Add checklist", "r-d-remove-checklist": "Remove checklist", "r-by": "by", + "r-swimlane": "in swimlane", + "r-swimlane-name": "swimlane name", "r-user-name": "username", + "r-added-to": "added to", "r-when-a-card-is-moved": "When a card is moved to another list", "ldap": "LDAP", "oauth2": "OAuth2", diff --git a/models/cards.js b/models/cards.js index bcd16ece6..a7217c5dd 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1128,6 +1128,7 @@ function cardMove(userId, doc, fieldNames, oldListId, oldSwimlaneId) { listId: doc.listId, boardId: doc.boardId, cardId: doc._id, + swimlaneName: Swimlanes.findOne(doc.swimlaneId).title, swimlaneId: doc.swimlaneId, oldSwimlaneId, }); @@ -1237,6 +1238,7 @@ function cardCreation(userId, doc) { listName: Lists.findOne(doc.listId).title, listId: doc.listId, cardId: doc._id, + swimlaneName: Swimlanes.findOne(doc.swimlaneId).title, swimlaneId: doc.swimlaneId, }); } diff --git a/server/triggersDef.js b/server/triggersDef.js index 73779d058..0f573ba5b 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -1,9 +1,9 @@ TriggersDef = { createCard:{ - matchingFields: ['boardId', 'listName','userId'], + matchingFields: ['boardId', 'listName','userId','swimlaneName'], }, moveCard:{ - matchingFields: ['boardId', 'listName', 'oldListName','userId'], + matchingFields: ['boardId', 'listName', 'oldListName','userId','swimlaneName'], }, archivedCard:{ matchingFields: ['boardId','userId'], From 196fef3a1bca7d2d4fbb07e6134c1de2a4338a97 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Mon, 31 Dec 2018 00:45:11 +0100 Subject: [PATCH 4/9] Added popup --- client/components/rules/rules.styl | 9 +++++++++ client/components/rules/rulesMain.jade | 8 +++++++- client/components/rules/rulesMain.js | 1 + client/components/rules/triggers/boardTriggers.jade | 2 ++ client/lib/popup.js | 6 ++---- i18n/en.i18n.json | 1 + 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/client/components/rules/rules.styl b/client/components/rules/rules.styl index 4679e039c..27463d12b 100644 --- a/client/components/rules/rules.styl +++ b/client/components/rules/rules.styl @@ -123,6 +123,15 @@ .trigger-text font-size: 16px display:inline-block + .trigger-inline-button + font-size: 16px + display: inline; + padding: 6px; + border: 1px solid #eee + border-radius: 4px + box-shadow: inset -1px -1px 3px rgba(0,0,0,.05) + &:hover, &.is-active + box-shadow: 0 0 0 2px darken(white, 60%) inset .trigger-text.trigger-text-email margin-left: 5px; margin-top: 10px; diff --git a/client/components/rules/rulesMain.jade b/client/components/rules/rulesMain.jade index dc33ee4eb..d01d9f77c 100644 --- a/client/components/rules/rulesMain.jade +++ b/client/components/rules/rulesMain.jade @@ -6,4 +6,10 @@ template(name="rulesMain") if($eq rulesCurrentTab.get 'action') +rulesActions(ruleName=ruleName triggerVar=triggerVar) if($eq rulesCurrentTab.get 'ruleDetails') - +ruleDetails(ruleId=ruleId) \ No newline at end of file + +ruleDetails(ruleId=ruleId) + +template(name="boardCardTitlePopup") + form + label + | Card Title Filter + input.js-board-name(type="text" value=title autofocus) \ No newline at end of file diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index 566fd3e55..373c7502b 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -31,6 +31,7 @@ BlazeComponent.extendComponent({ Triggers.remove(rule.triggerId); }, + 'click .js-open-card-title-popup': Popup.open('boardCardTitle'), 'click .js-goto-trigger' (event) { event.preventDefault(); const ruleTitle = this.find('#ruleTitle').value; diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index abf2ee6d7..f8767974e 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -21,6 +21,8 @@ template(name="boardTriggers") div.trigger-content div.trigger-text | {{_'r-when-a-card-is'}} + div.trigger-inline-button.js-open-card-title-popup + i.fa.fa-filter div.trigger-text | {{_'r-added-to'}} div.trigger-text diff --git a/client/lib/popup.js b/client/lib/popup.js index 516ce849b..5b640f501 100644 --- a/client/lib/popup.js +++ b/client/lib/popup.js @@ -27,11 +27,9 @@ window.Popup = new class { open(name) { const self = this; const popupName = `${name}Popup`; - function clickFromPopup(evt) { return $(evt.target).closest('.js-pop-over').length !== 0; } - return function(evt) { // If a popup is already opened, clicking again on the opener element // should close it -- and interrupt the current `open` function. @@ -57,7 +55,6 @@ window.Popup = new class { self._stack = []; openerElement = evt.currentTarget; } - $(openerElement).addClass('is-active'); evt.preventDefault(); @@ -139,6 +136,7 @@ window.Popup = new class { const openerElement = this._getTopStack().openerElement; $(openerElement).removeClass('is-active'); + this._stack = []; } } @@ -200,7 +198,7 @@ escapeActions.forEach((actionName) => { () => Popup[actionName](), () => Popup.isOpen(), { - noClickEscapeOn: '.js-pop-over', + noClickEscapeOn: '.js-pop-over,.js-open-card-title-popup', enabledOnClick: actionName === 'close', } ); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index d4745b224..1007a650a 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -467,6 +467,7 @@ "error-notAuthorized": "You are not authorized to view this page.", "outgoing-webhooks": "Outgoing Webhooks", "outgoingWebhooksPopup-title": "Outgoing Webhooks", + "boardCardTitlePopup-title": "Card Title Filter", "new-outgoing-webhook": "New Outgoing Webhook", "no-name": "(Unknown)", "Node_version": "Node version", From 25968a35cc568e1c3f7d084632f4d2c8b41ed380 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Wed, 2 Jan 2019 14:45:45 +0100 Subject: [PATCH 5/9] Finished triggers improvements --- client/components/rules/rulesMain.jade | 8 +-- client/components/rules/rulesMain.js | 34 +++++++----- .../rules/triggers/boardTriggers.jade | 54 ++++++++++--------- .../rules/triggers/boardTriggers.js | 51 +++++++++++------- i18n/en.i18n.json | 5 +- models/cards.js | 1 + server/triggersDef.js | 2 +- 7 files changed, 88 insertions(+), 67 deletions(-) diff --git a/client/components/rules/rulesMain.jade b/client/components/rules/rulesMain.jade index d01d9f77c..dc33ee4eb 100644 --- a/client/components/rules/rulesMain.jade +++ b/client/components/rules/rulesMain.jade @@ -6,10 +6,4 @@ template(name="rulesMain") if($eq rulesCurrentTab.get 'action') +rulesActions(ruleName=ruleName triggerVar=triggerVar) if($eq rulesCurrentTab.get 'ruleDetails') - +ruleDetails(ruleId=ruleId) - -template(name="boardCardTitlePopup") - form - label - | Card Title Filter - input.js-board-name(type="text" value=title autofocus) \ No newline at end of file + +ruleDetails(ruleId=ruleId) \ No newline at end of file diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index 373c7502b..421167908 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -1,4 +1,4 @@ -BlazeComponent.extendComponent({ +let rulesMainComponent = BlazeComponent.extendComponent({ onCreated() { this.rulesCurrentTab = new ReactiveVar('rulesList'); this.ruleName = new ReactiveVar(''); @@ -9,7 +9,13 @@ BlazeComponent.extendComponent({ setTrigger() { this.rulesCurrentTab.set('trigger'); }, - + sanitizeObject(obj){ + Object.keys(obj).forEach(key =>{ + if(obj[key] == "" || obj[key] == undefined){ + obj[key] = "*"; + }} + ); + }, setRulesList() { this.rulesCurrentTab.set('rulesList'); }, @@ -31,7 +37,6 @@ BlazeComponent.extendComponent({ Triggers.remove(rule.triggerId); }, - 'click .js-open-card-title-popup': Popup.open('boardCardTitle'), 'click .js-goto-trigger' (event) { event.preventDefault(); const ruleTitle = this.find('#ruleTitle').value; @@ -46,23 +51,23 @@ BlazeComponent.extendComponent({ // Add user to the trigger const username = $(event.currentTarget.offsetParent).find(".user-name").val(); let trigger = this.triggerVar.get(); - const user = Users.findOne({"username":username}); - if(user != undefined){ - trigger["userId"] = user._id; - }else{ - trigger["userId"] = "*"; + trigger["userId"] = "*"; + if(username != undefined ){ + const userFound = Users.findOne({"username":username}); + if(userFound != undefined){ + trigger["userId"] = userFound._id; + this.triggerVar.set(trigger); + } } + // Sanitize trigger + trigger = this.triggerVar.get(); + this.sanitizeObject(trigger) this.triggerVar.set(trigger); this.setAction(); }, 'click .js-show-user-field' (event) { event.preventDefault(); - console.log(event); - console.log(event.currentTarget.offsetParent); - console.log($(event.currentTarget.offsetParent)); $(event.currentTarget.offsetParent).find(".user-details").removeClass("hide-element"); - - }, 'click .js-goto-rules' (event) { event.preventDefault(); @@ -88,3 +93,6 @@ BlazeComponent.extendComponent({ }, }).register('rulesMain'); + + + diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index f8767974e..dae3351ee 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -1,28 +1,12 @@ template(name="boardTriggers") - div.trigger-item + div.trigger-item#trigger-two div.trigger-content div.trigger-text - | {{_'r-when-a-card-is'}} - div.trigger-text - | {{_'r-added-to'}} - div.trigger-text - | {{_'r-the-board'}} - div.trigger-button.trigger-button-person.js-show-user-field - i.fa.fa-user - div.user-details.hide-element - div.trigger-text - | {{_'r-by'}} - div.trigger-dropdown - input(class="user-name",type=text,placeholder="{{_'r-user-name'}}") - div.trigger-button.js-add-gen-trigger.js-goto-action - i.fa.fa-plus - - div.trigger-item - div.trigger-content - div.trigger-text - | {{_'r-when-a-card-is'}} + | {{_'r-when-a-card'}} div.trigger-inline-button.js-open-card-title-popup i.fa.fa-filter + div.trigger-text + | {{_'r-is'}} div.trigger-text | {{_'r-added-to'}} div.trigger-text @@ -43,10 +27,14 @@ template(name="boardTriggers") div.trigger-button.js-add-create-trigger.js-goto-action i.fa.fa-plus - div.trigger-item + div.trigger-item#trigger-three div.trigger-content div.trigger-text - | {{_'r-when-a-card-is-moved'}} + | {{_'r-when-a-card'}} + div.trigger-inline-button.js-open-card-title-popup + i.fa.fa-filter + div.trigger-text + | {{_'r-is-moved'}} div.trigger-button.trigger-button-person.js-show-user-field i.fa.fa-user div.user-details.hide-element @@ -57,10 +45,14 @@ template(name="boardTriggers") div.trigger-button.js-add-gen-moved-trigger.js-goto-action i.fa.fa-plus - div.trigger-item + div.trigger-item#trigger-four div.trigger-content div.trigger-text - | {{_'r-when-a-card-is'}} + | {{_'r-when-a-card'}} + div.trigger-inline-button.js-open-card-title-popup + i.fa.fa-filter + div.trigger-text + | {{_'r-is'}} div.trigger-dropdown select(id="move-action") option(value="moved-to") {{_'r-moved-to'}} @@ -84,10 +76,14 @@ template(name="boardTriggers") div.trigger-button.js-add-moved-trigger.js-goto-action i.fa.fa-plus - div.trigger-item + div.trigger-item#trigger-five div.trigger-content div.trigger-text - | {{_'r-when-a-card-is'}} + | {{_'r-when-a-card'}} + div.trigger-inline-button.js-open-card-title-popup + i.fa.fa-filter + div.trigger-text + | {{_'r-is'}} div.trigger-dropdown select(id="arch-action") option(value="archived") {{_'r-archived'}} @@ -102,6 +98,12 @@ template(name="boardTriggers") div.trigger-button.js-add-arch-trigger.js-goto-action i.fa.fa-plus +template(name="boardCardTitlePopup") + form + label + | Card Title Filter + input.js-card-filter-name(type="text" value=title autofocus) + input.js-card-filter-button.primary.wide(type="submit" value="{{_ 'set-filter'}}") diff --git a/client/components/rules/triggers/boardTriggers.js b/client/components/rules/triggers/boardTriggers.js index b822d6434..1a7948de6 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -1,34 +1,36 @@ BlazeComponent.extendComponent({ onCreated() { - + this.provaVar = new ReactiveVar(''); + this.currentPopupTriggerId = "def"; + this.cardTitleFilters = {}; + }, + setNameFilter(name){ + this.cardTitleFilters[this.currentPopupTriggerId] = name; }, events() { return [{ - 'click .js-add-gen-trigger' (event) { - const desc = Utils.getTriggerActionDesc(event, this); - const datas = this.data(); - const boardId = Session.get('currentBoard'); - datas.triggerVar.set({ - activityType: 'createCard', - boardId, - 'listName': '*', - desc, - }); - + 'click .js-open-card-title-popup'(event){ + var funct = Popup.open('boardCardTitle'); + let divId = $(event.currentTarget.parentNode.parentNode).attr("id"); + console.log("current popup"); + console.log(this.currentPopupTriggerId); + this.currentPopupTriggerId = divId; + funct.call(this,event); }, 'click .js-add-create-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); const datas = this.data(); const listName = this.find('#create-list-name').value; const swimlaneName = this.find('#create-swimlane-name').value; - if(swimlaneName == undefined || swimlaneName == ""){ - swimlaneName = "*"; - } const boardId = Session.get('currentBoard'); + const divId = $(event.currentTarget.parentNode).attr("id"); + const cardTitle = this.cardTitleFilters[divId]; + // move to generic funciont datas.triggerVar.set({ activityType: 'createCard', boardId, + cardTitle, swimlaneName, listName, desc, @@ -41,9 +43,6 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#move-action').value; const listName = this.find('#move-list-name').value; const boardId = Session.get('currentBoard'); - if(swimlaneName == undefined || swimlaneName == ""){ - swimlaneName = "*"; - } if (actionSelected === 'moved-to') { datas.triggerVar.set({ activityType: 'moveCard', @@ -71,8 +70,9 @@ BlazeComponent.extendComponent({ const boardId = Session.get('currentBoard'); datas.triggerVar.set({ - activityType: 'moveCard', + 'activityType': 'moveCard', boardId, + 'swimlaneName': '*', 'listName':'*', 'oldListName': '*', desc, @@ -103,3 +103,16 @@ BlazeComponent.extendComponent({ }, }).register('boardTriggers'); + + + + + +Template.boardCardTitlePopup.events({ + submit(evt, tpl) { + const title = tpl.$('.js-card-filter-name').val().trim(); + Popup.getOpenerComponent().setNameFilter(title); + evt.preventDefault(); + Popup.close(); + }, +}); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 1007a650a..903d1fe58 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -538,11 +538,14 @@ "r-delete-rule": "Delete rule", "r-new-rule-name": "New rule title", "r-no-rules": "No rules", - "r-when-a-card-is": "When a card is", + "r-when-a-card": "When a card", + "r-is": "is", + "r-is-moved": "is moved", "r-added-to": "Added to", "r-removed-from": "Removed from", "r-the-board": "the board", "r-list": "list", + "set-filter":"Set Filter", "r-moved-to": "Moved to", "r-moved-from": "Moved from", "r-archived": "Moved to Archive", diff --git a/models/cards.js b/models/cards.js index a7217c5dd..7b05e4b5e 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1238,6 +1238,7 @@ function cardCreation(userId, doc) { listName: Lists.findOne(doc.listId).title, listId: doc.listId, cardId: doc._id, + cardTitle:doc.title, swimlaneName: Swimlanes.findOne(doc.swimlaneId).title, swimlaneId: doc.swimlaneId, }); diff --git a/server/triggersDef.js b/server/triggersDef.js index 0f573ba5b..2c8deb07f 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -1,6 +1,6 @@ TriggersDef = { createCard:{ - matchingFields: ['boardId', 'listName','userId','swimlaneName'], + matchingFields: ['boardId', 'listName','userId','swimlaneName','cardTitle'], }, moveCard:{ matchingFields: ['boardId', 'listName', 'oldListName','userId','swimlaneName'], From 4c399a41f7b87247c979e98c422d7aad999fbdb1 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Wed, 2 Jan 2019 15:42:10 +0100 Subject: [PATCH 6/9] Add action: create checklist with items --- .../rules/actions/boardActions.jade | 11 ++++++++- .../components/rules/actions/boardActions.js | 21 +++++++++++++++++ .../rules/actions/checklistActions.jade | 13 +++++++++++ .../rules/actions/checklistActions.js | 23 +++++++++++++++++++ i18n/en.i18n.json | 4 ++++ server/rulesHelper.js | 13 +++++++++++ 6 files changed, 84 insertions(+), 1 deletion(-) diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index 768d77cf6..ab7d77a81 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -36,7 +36,16 @@ template(name="boardActions") div.trigger-text | {{_'r-card'}} div.trigger-button.js-add-arch-action.js-goto-rules - i.fa.fa-plus + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-text + | {{_'r-add-swimlane'}} + div.trigger-dropdown + input(id="swimlane-name",type=text,placeholder="{{_'r-name'}}") + div.trigger-button.js-add-swimlane-action.js-goto-rules + i.fa.fa-plus diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index 95771fcec..34f7c4b44 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -5,6 +5,27 @@ BlazeComponent.extendComponent({ events() { return [{ + 'click .js-add-swimlane-action' (event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const swimlaneName = this.find('#swimlane-name').value; + const boardId = Session.get('currentBoard'); + const desc = Utils.getTriggerActionDesc(event, this); + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: 'addSwimlane', + swimlaneName, + boardId, + desc, + }); + Rules.insert({ + title: ruleName, + triggerId, + actionId, + boardId, + }); + + }, 'click .js-add-spec-move-action' (event) { const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); diff --git a/client/components/rules/actions/checklistActions.jade b/client/components/rules/actions/checklistActions.jade index 8414a1a5b..3542c5c9e 100644 --- a/client/components/rules/actions/checklistActions.jade +++ b/client/components/rules/actions/checklistActions.jade @@ -43,6 +43,19 @@ template(name="checklistActions") div.trigger-button.js-add-check-item-action.js-goto-rules i.fa.fa-plus + div.trigger-item + div.trigger-content + div.trigger-text + | {{{_'r-add-checklist'}}} + div.trigger-dropdown + input(id="checklist-name-3",type=text,placeholder="{{{_'r-name'}}}") + div.trigger-text + | {{{_'r-with-items'}}} + div.trigger-dropdown + input(id="checklist-items",type=text,placeholder="{{{_'r-items-list'}}}") + div.trigger-button.js-add-checklist-items-action.js-goto-rules + i.fa.fa-plus + diff --git a/client/components/rules/actions/checklistActions.js b/client/components/rules/actions/checklistActions.js index 4b70f9598..59141c392 100644 --- a/client/components/rules/actions/checklistActions.js +++ b/client/components/rules/actions/checklistActions.js @@ -4,6 +4,29 @@ BlazeComponent.extendComponent({ }, events() { return [{ + 'click .js-add-checklist-items-action' (event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const checklistName = this.find('#checklist-name-3').value; + const checklistItems = this.find('#checklist-items').value; + const boardId = Session.get('currentBoard'); + const desc = Utils.getTriggerActionDesc(event, this); + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: 'addChecklistWithItems', + checklistName, + checklistItems, + boardId, + desc, + }); + Rules.insert({ + title: ruleName, + triggerId, + actionId, + boardId, + }); + + }, 'click .js-add-checklist-action' (event) { const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 903d1fe58..2bffa1a5b 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -615,6 +615,10 @@ "r-d-add-checklist": "Add checklist", "r-d-remove-checklist": "Remove checklist", "r-by": "by", + "r-add-checklist": "Add checklist", + "r-with-items": "with items", + "r-items-list": "item1,item2,item3", + "r-add-swimlane": "Add swimlane", "r-swimlane": "in swimlane", "r-swimlane-name": "swimlane name", "r-user-name": "username", diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 81e6b74f5..e06ed4aa1 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -132,6 +132,19 @@ RulesHelper = { if(action.actionType === 'removeChecklist'){ Checklists.remove({'title':action.checklistName, 'cardId':card._id, 'sort':0}); } + if(action.actionType === 'addSwimlane'){ + Swimlanes.insert({ + title: action.swimlaneName, + boardId + }); + } + if(action.actionType === 'addChecklistWithItems'){ + const checkListId = Checklists.insert({'title':action.checklistName, 'cardId':card._id, 'sort':0}); + const itemsArray = action.checklistItems.split(','); + for(let i = 0;i Date: Wed, 2 Jan 2019 15:52:58 +0100 Subject: [PATCH 7/9] Added notes --- client/components/rules/actions/checklistActions.jade | 6 ++++++ client/components/rules/triggers/boardTriggers.jade | 5 +++++ i18n/en.i18n.json | 2 ++ 3 files changed, 13 insertions(+) diff --git a/client/components/rules/actions/checklistActions.jade b/client/components/rules/actions/checklistActions.jade index 3542c5c9e..94c63557d 100644 --- a/client/components/rules/actions/checklistActions.jade +++ b/client/components/rules/actions/checklistActions.jade @@ -56,6 +56,12 @@ template(name="checklistActions") div.trigger-button.js-add-checklist-items-action.js-goto-rules i.fa.fa-plus + div.trigger-item + div.trigger-content + div.trigger-text + | {{{_'r-checklist-note'}}} + + diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index dae3351ee..c39ff6d07 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -98,6 +98,11 @@ template(name="boardTriggers") div.trigger-button.js-add-arch-trigger.js-goto-action i.fa.fa-plus + div.trigger-item + div.trigger-content + div.trigger-text + | {{{_'r-board-note'}}} + template(name="boardCardTitlePopup") form label diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 2bffa1a5b..f609d2eb5 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -622,6 +622,8 @@ "r-swimlane": "in swimlane", "r-swimlane-name": "swimlane name", "r-user-name": "username", + "r-board-note": "Note: leave a field empty to match every possible value. ", + "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", "r-added-to": "added to", "r-when-a-card-is-moved": "When a card is moved to another list", "ldap": "LDAP", From 8ad0da210940c514fc173564955568f023bde3d6 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Wed, 2 Jan 2019 22:32:08 +0100 Subject: [PATCH 8/9] Added create card action --- .../rules/actions/boardActions.jade | 17 +++++++++++++ .../components/rules/actions/boardActions.js | 25 +++++++++++++++++++ i18n/en.i18n.json | 3 +++ server/rulesHelper.js | 17 +++++++++++++ 4 files changed, 62 insertions(+) diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index ab7d77a81..6034184c8 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -47,6 +47,23 @@ template(name="boardActions") div.trigger-button.js-add-swimlane-action.js-goto-rules i.fa.fa-plus + div.trigger-item + div.trigger-content + div.trigger-text + | {{_'r-create-card'}} + div.trigger-dropdown + input(id="card-name",type=text,placeholder="{{_'r-name'}}") + div.trigger-text + | {{_'r-in-list'}} + div.trigger-dropdown + input(id="list-name",type=text,placeholder="{{_'r-name'}}") + div.trigger-text + | {{_'r-in-swimlane'}} + div.trigger-dropdown + input(id="swimlane-name2",type=text,placeholder="{{_'r-name'}}") + div.trigger-button.js-create-card-action.js-goto-rules + i.fa.fa-plus + diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index 34f7c4b44..c2ac156cb 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -5,6 +5,31 @@ BlazeComponent.extendComponent({ events() { return [{ + 'click .js-create-card-action' (event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const cardName = this.find('#card-name').value; + const listName = this.find('#list-name').value; + const swimlaneName = this.find('#swimlane-name2').value; + const boardId = Session.get('currentBoard'); + const desc = Utils.getTriggerActionDesc(event, this); + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: 'createCard', + swimlaneName, + cardName, + listName, + boardId, + desc, + }); + Rules.insert({ + title: ruleName, + triggerId, + actionId, + boardId, + }); + + }, 'click .js-add-swimlane-action' (event) { const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index f609d2eb5..6aa0335d8 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -604,6 +604,9 @@ "r-d-unarchive": "Restore card from Archive", "r-d-add-label": "Add label", "r-d-remove-label": "Remove label", + "r-create-card": "Create new card", + "r-in-list": "in list", + "r-in-swimlane": "in swimlane", "r-d-add-member": "Add member", "r-d-remove-member": "Remove member", "r-d-remove-all-member": "Remove all member", diff --git a/server/rulesHelper.js b/server/rulesHelper.js index e06ed4aa1..ef3c9514f 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -145,6 +145,23 @@ RulesHelper = { ChecklistItems.insert({title:itemsArray[i],checklistId:checkListId,cardId:card._id,'sort':0}); } } + if(action.actionType === 'createCard'){ + let list = Lists.findOne({title:action.listName,boardId}); + let listId = ''; + let swimlaneId = ''; + let swimlane = Swimlanes.findOne({title:action.swimlaneName,boardId}); + if(list == undefined){ + listId = ''; + }else{ + listId = list._id; + } + if(swimlane == undefined){ + swimlaneId = Swimlanes.findOne({title:"Default",boardId})._id; + }else{ + swimlaneId = swimlane._id; + } + Cards.insert({title:action.cardName,listId,swimlaneId,sort:0,boardId}); + } }, From 4d8b2029d266843dc0eb376a0bf752c46e440a13 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Wed, 2 Jan 2019 22:51:00 +0100 Subject: [PATCH 9/9] Fixed errors --- .../components/rules/actions/boardActions.js | 4 +-- .../rules/actions/checklistActions.js | 2 +- client/components/rules/rulesMain.js | 21 ++++++----- .../rules/triggers/boardTriggers.js | 29 +++++++-------- client/lib/utils.js | 12 +++---- server/rulesHelper.js | 20 +++++------ server/triggersDef.js | 36 +++++++++---------- 7 files changed, 60 insertions(+), 64 deletions(-) diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index c2ac156cb..e0b8edc93 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -28,7 +28,7 @@ BlazeComponent.extendComponent({ actionId, boardId, }); - + }, 'click .js-add-swimlane-action' (event) { const ruleName = this.data().ruleName.get(); @@ -49,7 +49,7 @@ BlazeComponent.extendComponent({ actionId, boardId, }); - + }, 'click .js-add-spec-move-action' (event) { const ruleName = this.data().ruleName.get(); diff --git a/client/components/rules/actions/checklistActions.js b/client/components/rules/actions/checklistActions.js index 59141c392..3e79b0754 100644 --- a/client/components/rules/actions/checklistActions.js +++ b/client/components/rules/actions/checklistActions.js @@ -25,7 +25,7 @@ BlazeComponent.extendComponent({ actionId, boardId, }); - + }, 'click .js-add-checklist-action' (event) { const ruleName = this.data().ruleName.get(); diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index 421167908..2e1259608 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -1,4 +1,4 @@ -let rulesMainComponent = BlazeComponent.extendComponent({ +const rulesMainComponent = BlazeComponent.extendComponent({ onCreated() { this.rulesCurrentTab = new ReactiveVar('rulesList'); this.ruleName = new ReactiveVar(''); @@ -10,9 +10,9 @@ let rulesMainComponent = BlazeComponent.extendComponent({ this.rulesCurrentTab.set('trigger'); }, sanitizeObject(obj){ - Object.keys(obj).forEach(key =>{ - if(obj[key] == "" || obj[key] == undefined){ - obj[key] = "*"; + Object.keys(obj).forEach((key) => { + if(obj[key] == '' || obj[key] == undefined){ + obj[key] = '*'; }} ); }, @@ -49,25 +49,25 @@ let rulesMainComponent = BlazeComponent.extendComponent({ 'click .js-goto-action' (event) { event.preventDefault(); // Add user to the trigger - const username = $(event.currentTarget.offsetParent).find(".user-name").val(); + const username = $(event.currentTarget.offsetParent).find('.user-name').val(); let trigger = this.triggerVar.get(); - trigger["userId"] = "*"; + trigger.userId = '*'; if(username != undefined ){ - const userFound = Users.findOne({"username":username}); + const userFound = Users.findOne({username}); if(userFound != undefined){ - trigger["userId"] = userFound._id; + trigger.userId = userFound._id; this.triggerVar.set(trigger); } } // Sanitize trigger trigger = this.triggerVar.get(); - this.sanitizeObject(trigger) + this.sanitizeObject(trigger); this.triggerVar.set(trigger); this.setAction(); }, 'click .js-show-user-field' (event) { event.preventDefault(); - $(event.currentTarget.offsetParent).find(".user-details").removeClass("hide-element"); + $(event.currentTarget.offsetParent).find('.user-details').removeClass('hide-element'); }, 'click .js-goto-rules' (event) { event.preventDefault(); @@ -95,4 +95,3 @@ let rulesMainComponent = BlazeComponent.extendComponent({ }).register('rulesMain'); - diff --git a/client/components/rules/triggers/boardTriggers.js b/client/components/rules/triggers/boardTriggers.js index 1a7948de6..f9aa57cbc 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -1,7 +1,7 @@ BlazeComponent.extendComponent({ onCreated() { this.provaVar = new ReactiveVar(''); - this.currentPopupTriggerId = "def"; + this.currentPopupTriggerId = 'def'; this.cardTitleFilters = {}; }, setNameFilter(name){ @@ -11,12 +11,12 @@ BlazeComponent.extendComponent({ events() { return [{ 'click .js-open-card-title-popup'(event){ - var funct = Popup.open('boardCardTitle'); - let divId = $(event.currentTarget.parentNode.parentNode).attr("id"); - console.log("current popup"); + const funct = Popup.open('boardCardTitle'); + const divId = $(event.currentTarget.parentNode.parentNode).attr('id'); + console.log('current popup'); console.log(this.currentPopupTriggerId); this.currentPopupTriggerId = divId; - funct.call(this,event); + funct.call(this, event); }, 'click .js-add-create-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); @@ -24,17 +24,17 @@ BlazeComponent.extendComponent({ const listName = this.find('#create-list-name').value; const swimlaneName = this.find('#create-swimlane-name').value; const boardId = Session.get('currentBoard'); - const divId = $(event.currentTarget.parentNode).attr("id"); + const divId = $(event.currentTarget.parentNode).attr('id'); const cardTitle = this.cardTitleFilters[divId]; // move to generic funciont datas.triggerVar.set({ - activityType: 'createCard', - boardId, - cardTitle, - swimlaneName, - listName, - desc, - }); + activityType: 'createCard', + boardId, + cardTitle, + swimlaneName, + listName, + desc, + }); }, 'click .js-add-moved-trigger' (event) { const datas = this.data(); @@ -105,9 +105,6 @@ BlazeComponent.extendComponent({ }).register('boardTriggers'); - - - Template.boardCardTitlePopup.events({ submit(evt, tpl) { const title = tpl.$('.js-card-filter-name').val().trim(); diff --git a/client/lib/utils.js b/client/lib/utils.js index f252a2203..051ec9525 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -220,19 +220,19 @@ Utils = { finalString += element.text().toLowerCase(); } else if (element.hasClass('user-details')) { let username = element.find('input').val(); - if(username == undefined || username == ""){ - username = "*"; + if(username == undefined || username == ''){ + username = '*'; } - finalString += element.find('.trigger-text').text().toLowerCase()+ " " + username ; + finalString += `${element.find('.trigger-text').text().toLowerCase() } ${ username}`; } else if (element.find('select').length > 0) { finalString += element.find('select option:selected').text().toLowerCase(); } else if (element.find('input').length > 0) { let inputvalue = element.find('input').val(); - if(inputvalue == undefined || inputvalue == ""){ - inputvalue = "*"; + if(inputvalue == undefined || inputvalue == ''){ + inputvalue = '*'; } finalString += inputvalue; - } + } // Add space if (i !== length - 1) { finalString += ' '; diff --git a/server/rulesHelper.js b/server/rulesHelper.js index ef3c9514f..c3a20c3bc 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -135,32 +135,32 @@ RulesHelper = { if(action.actionType === 'addSwimlane'){ Swimlanes.insert({ title: action.swimlaneName, - boardId + boardId, }); } if(action.actionType === 'addChecklistWithItems'){ - const checkListId = Checklists.insert({'title':action.checklistName, 'cardId':card._id, 'sort':0}); - const itemsArray = action.checklistItems.split(','); - for(let i = 0;i