From f63482b58775a2f52fdd5f932ce7d14f16757133 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 3 Aug 2018 19:47:20 +0200 Subject: [PATCH 01/30] UI for rules list --- .DS_Store | Bin 0 -> 6148 bytes .meteor/packages | 4 +- RASD.txt | 22 +++++++ client/components/boards/boardHeader.jade | 9 +++ client/components/boards/boardHeader.js | 3 + client/components/lists/listBody.js | 2 + client/components/rules/rules.jade | 27 ++++++++ client/components/rules/rules.js | 25 ++++++++ client/components/rules/rules.styl | 34 ++++++++++ client/lib/popup.js | 1 + i18n/en.i18n.json | 1 + models/.DS_Store | Bin 0 -> 6148 bytes models/cards.js | 1 + models/rules.js | 38 +++++++++++ models/triggers.js | 74 ++++++++++++++++++++++ server/.DS_Store | Bin 0 -> 6148 bytes server/lib/.DS_Store | Bin 0 -> 6148 bytes server/lib/utils.js | 3 + server/publications/rules.js | 14 ++++ 19 files changed, 256 insertions(+), 2 deletions(-) create mode 100644 .DS_Store create mode 100644 RASD.txt create mode 100644 client/components/rules/rules.jade create mode 100644 client/components/rules/rules.js create mode 100644 client/components/rules/rules.styl create mode 100644 models/.DS_Store create mode 100644 models/rules.js create mode 100644 models/triggers.js create mode 100644 server/.DS_Store create mode 100644 server/lib/.DS_Store create mode 100644 server/publications/rules.js diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..06b9364144e6958edc6aa5c97ccd8aeb500ca771 GIT binary patch literal 6148 zcmeHKJ5EC}5S)bwMWRVb=__ypD+(vb1tLB|NKrsRN&PC$#nCeRDR_ENq@amrrS;hB z9b2B_?OOo0JUrh63jlMvBffl?n(w<$?5ZM;7H7QS>A2qSw(q;wN%rpn=icB02Rven zF`s90?-MWBLiOIxKGHId!vDhhlL%<1Nx* zJyD|+kOE@`u5-EY`u{-xqyHb1w2}f+;Gz_;*=oI7@<~-&Cy(=5+vpp*=X}%MI1dVk mD96Mo$6R { self._dep.depend(); return { ...self._getTopStack(), stack: self._stack }; diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 9244af9c7..38d200e68 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -362,6 +362,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", diff --git a/models/.DS_Store b/models/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 { + const rules = Rules.findOne({}); + if(!rules){ + Rules.insert({title: "regola1", description: "bella"}); + Rules.insert({title: "regola2", description: "bella2"}); + } + }); +} diff --git a/models/triggers.js b/models/triggers.js new file mode 100644 index 000000000..f8dbb50d1 --- /dev/null +++ b/models/triggers.js @@ -0,0 +1,74 @@ +Triggers = new Mongo.Collection('triggers'); + + + +Triggers.mutations({ + rename(description) { + return { $set: { description } }; + }, +}); + +Triggers.allow({ + update: function () { + // add custom authentication code here + return true; + }, + insert: function () { + // add custom authentication code here + return true; + } +}); + + +Triggers.helpers({ + 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; + }}); + + + +if (Meteor.isServer) { + Meteor.startup(() => { + const rules = Triggers.findOne({}); + if(!rules){ + Triggers.insert({group: "cards", activityType: "moveCard","fromId":-1,"toId":-1 }); + } + }); +} + + + + Activities.after.insert((userId, doc) => { + const activity = Activities._transform(doc); + const matchedTriggers = Triggers.find({activityType: activity.activityType,fromId:activity.oldListId,toId:activity.listId}) + if(matchedTriggers.count() > 0){ + const card = activity.card(); + const oldTitle = card.title; + const fromListTitle = activity.oldList().title; + Cards.direct.update({_id: card._id, listId: card.listId, boardId: card.boardId, archived: false}, + {$set: {title: "[From "+fromListTitle +"] "+ oldTitle}}); + } + }); + + + + + + + diff --git a/server/.DS_Store b/server/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..75d4743639d01bcb7a32f6cd4a18047945d1cb2a GIT binary patch literal 6148 zcmeHK&1%~~5Z<-jR;r+=(1Qy(EcDQe4|Wxjt5EEm3JH;E4*hW@Bx-?>j3nC!V-S6S zK0tEK&wC_!fFAoIy?17J9TME$LMUbiX203lnOXLe*dN9i_oh*gF`F@FfFd?bX#OHN zj=Cld?Lp*Nqnw0k9zySTI9ZD($N$Ixe!C`1S;E3_e)s#ONm+Hfzj&kBdh+y{VLrD^ z>xE^0_Q(0$uYzh?dOuzm-b;$jiHY5#tnW-CQZW}+3m%m=Qthl z&T*CA19}0=NFe(*NT4*zp9j%8dq=whNfcX7g?HT z-@vnqUPTcS1H=F^umKF{t5R*np^l!J>lX@_vx8sAaK>GQ)Di>4 zzJAqF0mfj`#0U^V~% literal 0 HcmV?d00001 diff --git a/server/lib/.DS_Store b/server/lib/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 { + check(ruleId, String); + return Rules.find({ _id: ruleId }); +}); + + +Meteor.publish('allRules', () => { + return Rules.find({}); +}); + + +Meteor.publish('allTriggers', () => { + return Triggers.find({}); +}); From 7e4bd4a0a753531c2716ff39ce88f05b7fc30c0d Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 3 Aug 2018 20:43:37 +0200 Subject: [PATCH 02/30] Add and remove ui --- client/components/rules/rules.jade | 10 +++++----- client/components/rules/rules.js | 30 +++++++++++++++--------------- models/rules.js | 17 ++++++++++++++++- 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/client/components/rules/rules.jade b/client/components/rules/rules.jade index 8f482b065..6b49b5a76 100644 --- a/client/components/rules/rules.jade +++ b/client/components/rules/rules.jade @@ -5,23 +5,23 @@ template(name="rules") | Project rules ul.rules-lists - each triggers + each rules li.rules-lists-item p - = toId + = title div.rules-btns-group button i.fa.fa-eye | View rule - button + button.js-delete-rule i.fa.fa-trash-o | Delete rule else li.no-items-message No rules div.rules-add - button + button.js-add-rule i.fa.fa-plus | Add rule - input(type=text) + input(type=text,placeholder="New rule name",id="ruleTitle") diff --git a/client/components/rules/rules.js b/client/components/rules/rules.js index e679431a4..ed781f9a5 100644 --- a/client/components/rules/rules.js +++ b/client/components/rules/rules.js @@ -1,25 +1,25 @@ BlazeComponent.extendComponent({ onCreated() { - this.subscribe('allTriggers'); + this.subscribe('allRules'); }, - triggers() { - return Triggers.find({}); + rules() { + return Rules.find({}); }, events() { - return [{'click .js-add-trigger'(event) { + return [{'click .js-delete-rule'(event) { + const rule = this.currentData(); + Rules.remove(rule._id); + + }, + 'click .js-add-rule'(event) { event.preventDefault(); - const toName = this.find('#toName').value; - const fromName = this.find('#fromName').value; - const toId = Triggers.findOne().findList(toName)._id; - const fromId = Triggers.findOne().findList(fromName)._id; - console.log(toId); - console.log(fromId); - Triggers.insert({group: "cards", activityType: "moveCard","fromId":fromId,"toId":toId }); - + const ruleTitle = this.find('#ruleTitle').value; + Rules.insert({title: ruleTitle}); + this.find('#ruleTitle').value = ""; - },}]; - }, -}).register('rules'); + }}]; + }, + }).register('rules'); diff --git a/models/rules.js b/models/rules.js index 2304d2dce..df0ccceaa 100644 --- a/models/rules.js +++ b/models/rules.js @@ -5,7 +5,11 @@ Rules.attachSchema(new SimpleSchema({ type: String, optional: true, }, - description: { + triggerId: { + type: String, + optional: true, + }, + actionId: { type: String, optional: true, }, @@ -17,11 +21,22 @@ Rules.mutations({ }, }); + + + Rules.allow({ update: function () { // add custom authentication code here return true; }, + remove: function () { + // add custom authentication code here + return true; + }, + insert: function () { + // add custom authentication code here + return true; + }, }); From 93cc7f0232ee456aff07e456b9c4601264f47ab4 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Sat, 4 Aug 2018 15:15:04 +0200 Subject: [PATCH 03/30] Triggers view --- client/components/rules/rules.jade | 40 ++++++++++- client/components/rules/rules.js | 34 +++++++-- client/components/rules/rules.styl | 106 ++++++++++++++++++++++++++++- 3 files changed, 170 insertions(+), 10 deletions(-) diff --git a/client/components/rules/rules.jade b/client/components/rules/rules.jade index 6b49b5a76..46c69a8d1 100644 --- a/client/components/rules/rules.jade +++ b/client/components/rules/rules.jade @@ -1,10 +1,16 @@ template(name="rules") + if rulesListVar.get + +rulesList + else if rulesTriggerVar.get + +rulesTrigger + +template(name="rulesList") .rules h2 i.fa.fa-cutlery | Project rules - ul.rules-lists + ul.rules-list each rules li.rules-lists-item p @@ -24,4 +30,36 @@ template(name="rules") | Add rule input(type=text,placeholder="New rule name",id="ruleTitle") +template(name="rulesTrigger") + h2 + i.fa.fa-cutlery + | Rule "#{ruleName.get}"" - Add triggers + .triggers-content + .triggers-body + .triggers-side-menu + ul + li.active + i.fa.fa-columns + li + i.fa.fa-sticky-note + li + i.fa.fa-check + .triggers-main-body + +boardTriggers + +template(name="boardTriggers") + div.trigger-item + div.trigger-content + div.trigger-text + | When a card is + div.trigger-dropdown + select + div.trigger-button + i.fa.fa-plus + + + + + + diff --git a/client/components/rules/rules.js b/client/components/rules/rules.js index ed781f9a5..9bca34607 100644 --- a/client/components/rules/rules.js +++ b/client/components/rules/rules.js @@ -1,12 +1,15 @@ - BlazeComponent.extendComponent({ onCreated() { - this.subscribe('allRules'); + this.rulesListVar = new ReactiveVar(true); + this.rulesTriggerVar = new ReactiveVar(false); + this.ruleName = new ReactiveVar(""); }, - rules() { - return Rules.find({}); + setTrigger() { + this.rulesListVar.set(false); + this.rulesTriggerVar.set(true); }, + events() { return [{'click .js-delete-rule'(event) { const rule = this.currentData(); @@ -19,7 +22,26 @@ BlazeComponent.extendComponent({ const ruleTitle = this.find('#ruleTitle').value; Rules.insert({title: ruleTitle}); this.find('#ruleTitle').value = ""; - + this.ruleName.set(ruleTitle) + this.setTrigger(); + }}]; + }, + +}).register('rules'); + + +BlazeComponent.extendComponent({ + onCreated() { + this.subscribe('allRules'); + }, + + rules() { + return Rules.find({}); + }, + events() { + return [{}]; }, - }).register('rules'); +}).register('rulesList'); + + diff --git a/client/components/rules/rules.styl b/client/components/rules/rules.styl index 2aab1b400..48a175a52 100644 --- a/client/components/rules/rules.styl +++ b/client/components/rules/rules.styl @@ -1,5 +1,7 @@ .rules-list - overflow-y: scroll + overflow:hidden + overflow-y:scroll + max-height: 400px .rules-lists-item display: block position: relative @@ -19,7 +21,7 @@ .rules-add display: block overflow: auto - margin-top: 25px + margin-top: 15px margin-bottom: 5px input display: inline-block @@ -30,5 +32,103 @@ display: inline-block float: right margin: auto +.flex + display: -webkit-box + display: -moz-box + display: -webkit-flex + display: -moz-flex + display: -ms-flexbox + display: flex + +.triggers-content + color: #727479 + background: #dedede + .triggers-body + display flex + padding-top 15px + height 100% + + .triggers-side-menu + background-color: #f7f7f7; + border: 1px solid #f0f0f0; + border-radius: 4px; + box-shadow: inset -1px -1px 3px rgba(0,0,0,.05); + + ul + + li + margin: 0.1rem 0.2rem; + width:50px + height:50px + text-align:center + font-size: 25px + position: relative + + i + position: absolute; + top: 50%; + left: 50%; + box-shadow: none + transform: translate(-50%,-50%); + + + &.active + background #fff + box-shadow 0 1px 2px rgba(0,0,0,0.15); + + &:hover + background #fff + box-shadow 0 1px 2px rgba(0,0,0,0.15); + a + @extends .flex + padding: 1rem 0 1rem 1rem + width: 100% - 5rem + + + span + font-size: 13px + .triggers-main-body + padding: 0.1em 1em + width:100% + .trigger-item + overflow:auto + padding:10px + height:30px + border-radius: 3px + position: relative + background-color: white + .trigger-content + position:absolute + top:50% + transform: translateY(-50%) + left:10px + .trigger-text + font-size: 16px + display:inline-block + .trigger-dropdown + display:inline-block + select + width:100px + height:30px + margin:0px + .trigger-button + position:absolute + top:50% + transform: translateY(-50%) + width:30px + height:30px + border: 1px solid #eee; + border-radius: 4px; + box-shadow: inset -1px -1px 3px rgba(0,0,0,.05); + text-align:center + font-size: 20px + right:10px + i + position: absolute; + top: 50%; + left: 50%; + box-shadow: none + transform: translate(-50%,-50%); + + - \ No newline at end of file From 9b0eb0a9f1973e05df7199cf2bff7518f2fa98dc Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Wed, 15 Aug 2018 18:47:09 +0200 Subject: [PATCH 04/30] Almost full circle --- client/components/boards/boardHeader.js | 2 +- client/components/forms/forms.styl | 1 + client/components/rules/.DS_Store | Bin 0 -> 6148 bytes .../rules/actions/boardActions.jade | 22 ++++++ .../components/rules/actions/boardActions.js | 32 +++++++++ client/components/rules/rules.jade | 65 ------------------ client/components/rules/rules.js | 47 ------------- client/components/rules/rules.styl | 33 +++++---- client/components/rules/rulesActions.jade | 17 +++++ client/components/rules/rulesActions.js | 52 ++++++++++++++ client/components/rules/rulesList.jade | 25 +++++++ client/components/rules/rulesList.js | 12 ++++ client/components/rules/rulesMain.jade | 7 ++ client/components/rules/rulesMain.js | 62 +++++++++++++++++ client/components/rules/rulesTriggers.jade | 21 ++++++ client/components/rules/rulesTriggers.js | 52 ++++++++++++++ .../rules/triggers/boardTriggers.jade | 45 ++++++++++++ .../rules/triggers/boardTriggers.js | 28 ++++++++ .../rules/triggers/cardTriggers.jade | 10 +++ .../rules/triggers/checklistTriggers.jade | 10 +++ models/actions.js | 62 +++++++++++++++++ models/activities.js | 11 +++ models/rules.js | 12 ---- models/triggers.js | 29 +------- 24 files changed, 492 insertions(+), 165 deletions(-) create mode 100644 client/components/rules/.DS_Store create mode 100644 client/components/rules/actions/boardActions.jade create mode 100644 client/components/rules/actions/boardActions.js delete mode 100644 client/components/rules/rules.jade delete mode 100644 client/components/rules/rules.js create mode 100644 client/components/rules/rulesActions.jade create mode 100644 client/components/rules/rulesActions.js create mode 100644 client/components/rules/rulesList.jade create mode 100644 client/components/rules/rulesList.js create mode 100644 client/components/rules/rulesMain.jade create mode 100644 client/components/rules/rulesMain.js create mode 100644 client/components/rules/rulesTriggers.jade create mode 100644 client/components/rules/rulesTriggers.js create mode 100644 client/components/rules/triggers/boardTriggers.jade create mode 100644 client/components/rules/triggers/boardTriggers.js create mode 100644 client/components/rules/triggers/cardTriggers.jade create mode 100644 client/components/rules/triggers/checklistTriggers.jade create mode 100644 models/actions.js diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index bf36da7d1..c4fc303fe 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -109,7 +109,7 @@ BlazeComponent.extendComponent({ Sidebar.setView('search'); }, 'click .js-open-rules-view'() { - Modal.open('rules'); + Modal.open('rulesMain'); }, 'click .js-multiselection-activate'() { const currentCard = Session.get('currentCard'); diff --git a/client/components/forms/forms.styl b/client/components/forms/forms.styl index 0a9059435..4fff1e021 100644 --- a/client/components/forms/forms.styl +++ b/client/components/forms/forms.styl @@ -1,5 +1,6 @@ @import 'nib' +select, textarea, input:not([type=file]), button diff --git a/client/components/rules/.DS_Store b/client/components/rules/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 { + return _.contains(this.labelIds, label._id); + }); + return cardLabels; + }}); + + + +if (Meteor.isServer) { + Meteor.startup(() => { + const rules = Triggers.findOne({}); + if(!rules){ + Actions.insert({actionType: "moveCardToTop"}); + } + }); +} + + + + + + + + + diff --git a/models/activities.js b/models/activities.js index 5b54759c9..beb741bcf 100644 --- a/models/activities.js +++ b/models/activities.js @@ -56,6 +56,17 @@ Activities.before.insert((userId, doc) => { doc.createdAt = new Date(); }); + + +Activities.after.insert((userId, doc) => { + const activity = Activities._transform(doc); + const matchedTriggers = Triggers.find(activity); + if(matchedTriggers.count() > 0){ + const card = activity.card(); + Cards.direct.update({_id: card._id},{$set: {title: "ciaooo"}}); + } +}); + if (Meteor.isServer) { // For efficiency create indexes on the date of creation, and on the date of // creation in conjunction with the card or board id, as corresponding views diff --git a/models/rules.js b/models/rules.js index df0ccceaa..778622c48 100644 --- a/models/rules.js +++ b/models/rules.js @@ -39,15 +39,3 @@ Rules.allow({ }, }); - - - -if (Meteor.isServer) { - Meteor.startup(() => { - const rules = Rules.findOne({}); - if(!rules){ - Rules.insert({title: "regola1", description: "bella"}); - Rules.insert({title: "regola2", description: "bella2"}); - } - }); -} diff --git a/models/triggers.js b/models/triggers.js index f8dbb50d1..660d8b94e 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -39,34 +39,7 @@ Triggers.helpers({ return _.contains(this.labelIds, label._id); }); return cardLabels; - }}); - - - -if (Meteor.isServer) { - Meteor.startup(() => { - const rules = Triggers.findOne({}); - if(!rules){ - Triggers.insert({group: "cards", activityType: "moveCard","fromId":-1,"toId":-1 }); - } - }); -} - - - - Activities.after.insert((userId, doc) => { - const activity = Activities._transform(doc); - const matchedTriggers = Triggers.find({activityType: activity.activityType,fromId:activity.oldListId,toId:activity.listId}) - if(matchedTriggers.count() > 0){ - const card = activity.card(); - const oldTitle = card.title; - const fromListTitle = activity.oldList().title; - Cards.direct.update({_id: card._id, listId: card.listId, boardId: card.boardId, archived: false}, - {$set: {title: "[From "+fromListTitle +"] "+ oldTitle}}); - } - }); - - +}}); From 6828ccd7f17d14f178e6742d78bdd14428ec6e07 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Thu, 16 Aug 2018 00:32:31 +0200 Subject: [PATCH 05/30] Main flow implemented --- client/components/rules/rulesMain.js | 2 + .../rules/triggers/boardTriggers.js | 2 +- models/actions.js | 8 ---- models/activities.js | 10 ++--- models/lists.js | 2 +- models/rules.js | 5 +++ models/triggers.js | 6 +++ server/rulesHelper.js | 41 +++++++++++++++++++ server/triggersDef.js | 39 ++++++++++++++++++ 9 files changed, 100 insertions(+), 15 deletions(-) create mode 100644 server/rulesHelper.js create mode 100644 server/triggersDef.js diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index c7e105122..5a4b612ac 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -29,6 +29,8 @@ BlazeComponent.extendComponent({ return [{'click .js-delete-rule'(event) { const rule = this.currentData(); Rules.remove(rule._id); + Actions.remove(rule.actionId); + Triggers.remove(rule.triggerId); }, 'click .js-goto-trigger'(event) { diff --git a/client/components/rules/triggers/boardTriggers.js b/client/components/rules/triggers/boardTriggers.js index 4c8594d3c..082747778 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -11,7 +11,7 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#action').value; const boardId = Session.get('currentBoard') if(actionSelected == "created"){ - Triggers.insert({activityType: "createCard","boardId":boardId},function(error,id){ + Triggers.insert({activityType: "createCard","boardId":boardId,"listId":"*"},function(error,id){ datas.triggerIdVar.set(id); }); } diff --git a/models/actions.js b/models/actions.js index 0961abbbd..93d459288 100644 --- a/models/actions.js +++ b/models/actions.js @@ -43,14 +43,6 @@ Actions.helpers({ -if (Meteor.isServer) { - Meteor.startup(() => { - const rules = Triggers.findOne({}); - if(!rules){ - Actions.insert({actionType: "moveCardToTop"}); - } - }); -} diff --git a/models/activities.js b/models/activities.js index beb741bcf..fe24c9c48 100644 --- a/models/activities.js +++ b/models/activities.js @@ -60,13 +60,13 @@ Activities.before.insert((userId, doc) => { Activities.after.insert((userId, doc) => { const activity = Activities._transform(doc); - const matchedTriggers = Triggers.find(activity); - if(matchedTriggers.count() > 0){ - const card = activity.card(); - Cards.direct.update({_id: card._id},{$set: {title: "ciaooo"}}); - } + RulesHelper.executeRules(activity); + }); + + + if (Meteor.isServer) { // For efficiency create indexes on the date of creation, and on the date of // creation in conjunction with the card or board id, as corresponding views diff --git a/models/lists.js b/models/lists.js index 6f6996cb8..ceda9ad1a 100644 --- a/models/lists.js +++ b/models/lists.js @@ -82,7 +82,7 @@ Lists.helpers({ }; if (swimlaneId) selector.swimlaneId = swimlaneId; - return Cards.find(Filter.mongoSelector(selector), + return Cards.find(selector, { sort: ['sort'] }); }, diff --git a/models/rules.js b/models/rules.js index 778622c48..271e6b524 100644 --- a/models/rules.js +++ b/models/rules.js @@ -21,6 +21,11 @@ Rules.mutations({ }, }); +Rules.helpers({ + getAction(){ + return Actions.findOne({_id:this.actionId}); + }, +}); diff --git a/models/triggers.js b/models/triggers.js index 660d8b94e..e4e5ac462 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -21,6 +21,12 @@ Triggers.allow({ Triggers.helpers({ + + + getRule(){ + return Rules.findOne({triggerId:this._id}); + }, + fromList() { return Lists.findOne(this.fromId); }, diff --git a/server/rulesHelper.js b/server/rulesHelper.js new file mode 100644 index 000000000..4af6c08cb --- /dev/null +++ b/server/rulesHelper.js @@ -0,0 +1,41 @@ +RulesHelper = { + + + executeRules(activity){ + const matchingRules = this.findMatchingRules(activity); + for(let i = 0;i< matchingRules.length;i++){ + const actionType = matchingRules[i].getAction().actionType; + this.performAction(activity,actionType); + } + }, + + performAction(activity,actionType){ + if(actionType == "moveCardToTop"){ + const card = Cards.findOne({_id:activity.cardId}); + const minOrder = _.min(card.list().cards(card.swimlaneId).map((c) => c.sort)); + card.move(card.swimlaneId, card.listId, minOrder - 1); + } + }, + findMatchingRules(activity){ + const activityType = activity.activityType; + const matchingFields = TriggersDef[activityType].matchingFields; + const matchingMap = this.buildMatchingFieldsMap(activity,matchingFields); + let matchingTriggers = Triggers.find(matchingMap); + let matchingRules = []; + matchingTriggers.forEach(function(trigger){ + matchingRules.push(trigger.getRule()); + }); + return matchingRules; + }, + buildMatchingFieldsMap(activity, matchingFields){ + let matchingMap = {}; + for(let i = 0;i< matchingFields.length;i++){ + // Creating a matching map with the actual field of the activity + // and with the wildcard (for example: trigger when a card is added + // in any [*] board + matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]],"*"]}; + } + return matchingMap; + } + +} \ No newline at end of file diff --git a/server/triggersDef.js b/server/triggersDef.js new file mode 100644 index 000000000..5625122e9 --- /dev/null +++ b/server/triggersDef.js @@ -0,0 +1,39 @@ +TriggersDef = { + createCard:{ + matchingFields: ["boardId","listId"] + }, + moveCard:{ + matchingFields: ["boardId","listId","oldListId"] + }, + archivedCard:{ + matchingFields: ["boardId"] + } +} + + + // if(activityType == "createCard"){ + + // } + // if(activityType == "moveCard"){ + + // } + // if(activityType == "archivedCard"){ + + // } + // if(activityType == "restoredCard"){ + + // } + // if(activityType == "joinMember"){ + + // } + // if(activityType == "unJoinMember"){ + + // } + // if(activityType == "addChecklist"){ + + // } + // if(activityType == "addChecklistItem"){ + + // } + + From 99e7c659072943b80b08564465ee8cb5c90d3905 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Thu, 16 Aug 2018 00:42:14 +0200 Subject: [PATCH 06/30] Fixed remove --- models/triggers.js | 4 ++++ server/rulesHelper.js | 2 ++ 2 files changed, 6 insertions(+) diff --git a/models/triggers.js b/models/triggers.js index e4e5ac462..083c860e6 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -16,6 +16,10 @@ Triggers.allow({ insert: function () { // add custom authentication code here return true; + }, + remove: function () { + // add custom authentication code here + return true; } }); diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 4af6c08cb..1ce8db5ed 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -3,7 +3,9 @@ RulesHelper = { executeRules(activity){ const matchingRules = this.findMatchingRules(activity); + console.log(matchingRules); for(let i = 0;i< matchingRules.length;i++){ + console.log(matchingRules[i]); const actionType = matchingRules[i].getAction().actionType; this.performAction(activity,actionType); } From 9c6d374b950e8c4bd0c1c905cf36c953581a3156 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Thu, 16 Aug 2018 16:54:29 +0200 Subject: [PATCH 07/30] Labels activities --- RASD.txt | 4 +- client/components/activities/activities.jade | 7 ++ client/components/activities/activities.js | 13 +++ client/components/boards/boardHeader.js | 2 +- client/components/main/layouts.jade | 17 ++- client/components/main/layouts.styl | 17 +++ client/components/rules/rules.styl | 3 - client/components/rules/rulesTriggers.jade | 2 +- .../rules/triggers/boardTriggers.jade | 36 ++++-- .../rules/triggers/boardTriggers.js | 68 +++++++++++- .../rules/triggers/cardTriggers.jade | 75 ++++++++++++- .../components/rules/triggers/cardTriggers.js | 105 ++++++++++++++++++ .../rules/triggers/checklistTriggers.jade | 81 +++++++++++++- client/lib/modal.js | 14 ++- i18n/en.i18n.json | 4 +- models/boards.js | 4 + models/cards.js | 41 +++++++ server/rulesHelper.js | 3 + server/triggersDef.js | 44 +++----- 19 files changed, 480 insertions(+), 60 deletions(-) create mode 100644 client/components/rules/triggers/cardTriggers.js diff --git a/RASD.txt b/RASD.txt index fc1b41900..e14a2cdcc 100644 --- a/RASD.txt +++ b/RASD.txt @@ -3,12 +3,12 @@ Rules Triggers Board: create card, card moved to, card moved from - Card: [label, attachement, person ] added/removed, name starts with + Card: [label, attachment, person ] added/removed, name starts with Checklists : checklist added/removed, check item checked/unchecked, checklist completed Actions Board: move card to list, move to top/bottom, archive/unarchive - Card: [label, attachement, person ] add/remove, set title/description + Card: [label, attachment, person ] add/remove, set title/description Checklists : checklist add/remove, check/uncheck item Mail: send email to diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index d3e3d5ba8..735de57bf 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -89,6 +89,13 @@ template(name="boardActivities") if($eq activityType 'restoredCard') | {{{_ 'activity-sent' cardLink boardLabel}}}. + if($eq activityType 'addedLabel') + | {{{_ 'activity-added-label' lastLabel cardLink}}}. + + if($eq activityType 'removedLabel') + | {{{_ 'activity-removed-label' lastLabel cardLink}}}. + + if($eq activityType 'unjoinMember') if($eq user._id member._id) | {{{_ 'activity-unjoined' cardLink}}}. diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 95699961a..93bbb4697 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -58,6 +58,19 @@ BlazeComponent.extendComponent({ }, card.title)); }, + lastLabel(){ + const lastLabelId = this.currentData().labelId; + const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(lastLabelId); + console.log("LAST"); + console.log(lastLabel); + + if(lastLabel.name == undefined || lastLabel.name == ""){ + return lastLabel.color; + }else{ + return lastLabel.name; + } + }, + listLabel() { return this.currentData().list().title; }, diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index c4fc303fe..89f686ab4 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -109,7 +109,7 @@ BlazeComponent.extendComponent({ Sidebar.setView('search'); }, 'click .js-open-rules-view'() { - Modal.open('rulesMain'); + Modal.openWide('rulesMain'); }, 'click .js-multiselection-activate'() { const currentCard = Session.get('currentCard'); diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade index 911f23f42..ff2d8d0a6 100644 --- a/client/components/main/layouts.jade +++ b/client/components/main/layouts.jade @@ -35,11 +35,18 @@ template(name="defaultLayout") if (Modal.isOpen) #modal .overlay - .modal-content - a.modal-close-btn.js-close-modal - i.fa.fa-times-thin - +Template.dynamic(template=Modal.getHeaderName) - +Template.dynamic(template=Modal.getTemplateName) + if (Modal.isWide) + .modal-content-wide.modal-container + a.modal-close-btn.js-close-modal + i.fa.fa-times-thin + +Template.dynamic(template=Modal.getHeaderName) + +Template.dynamic(template=Modal.getTemplateName) + else + .modal-content.modal-container + a.modal-close-btn.js-close-modal + i.fa.fa-times-thin + +Template.dynamic(template=Modal.getHeaderName) + +Template.dynamic(template=Modal.getTemplateName) template(name="notFound") +message(label='page-not-found') diff --git a/client/components/main/layouts.styl b/client/components/main/layouts.styl index a79ff337d..109dcf7bc 100644 --- a/client/components/main/layouts.styl +++ b/client/components/main/layouts.styl @@ -61,6 +61,23 @@ body display: block float: right font-size: 24px + + .modal-content-wide + width: 800px + min-height: 160px + margin: 42px auto + padding: 12px + border-radius: 4px + background: darken(white, 13%) + z-index: 110 + + h2 + margin-bottom: 25px + + .modal-close-btn + display: block + float: right + font-size: 24px h1 font-size: 22px diff --git a/client/components/rules/rules.styl b/client/components/rules/rules.styl index 35fbabb22..c96847092 100644 --- a/client/components/rules/rules.styl +++ b/client/components/rules/rules.styl @@ -138,6 +138,3 @@ transform: translate(-50%,-50%) &:hover, &.is-active box-shadow: 0 0 0 2px darken(white, 60%) inset - - - diff --git a/client/components/rules/rulesTriggers.jade b/client/components/rules/rulesTriggers.jade index 5ee563e03..2848ad336 100644 --- a/client/components/rules/rulesTriggers.jade +++ b/client/components/rules/rulesTriggers.jade @@ -1,7 +1,7 @@ template(name="rulesTriggers") h2 i.fa.fa-cutlery - | Rule "#{data.ruleName}" - Add trigger + | Rule "#{data.ruleName.get}" - Add trigger .triggers-content .triggers-body .triggers-side-menu diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index 8b0b94896..375f50bad 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -4,7 +4,7 @@ template(name="boardTriggers") div.trigger-text | When a card is div.trigger-dropdown - select(id="action") + select(id="gen-action") option(value="created") Added to option(value="removed") Removed from div.trigger-text @@ -17,13 +17,14 @@ template(name="boardTriggers") div.trigger-text | When a card is div.trigger-dropdown - select - option Moved to + select(id="create-action") + option(value="created") Added to + option(value="removed") Removed from div.trigger-text - | to list + | list div.trigger-dropdown - input(type=text,placeholder="List Name") - div.trigger-button.js-add-spec-trigger.js-goto-action + input(id="create-list-name",type=text,placeholder="List Name") + div.trigger-button.js-add-create-trigger.js-goto-action i.fa.fa-plus div.trigger-item @@ -31,10 +32,25 @@ template(name="boardTriggers") div.trigger-text | When a card is div.trigger-dropdown - select - option Archived - option Unarchived - div.trigger-button.js-add-arc-trigger.js-goto-action + select(id="move-action") + option(value="moved-to") Moved to + option(value="moved-from") Moved from + div.trigger-text + | list + div.trigger-dropdown + input(id="move-list-name",type=text,placeholder="List Name") + div.trigger-button.js-add-moved-trigger.js-goto-action + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-text + | When a card is + div.trigger-dropdown + select(id="arch-action") + option(value="archived") Archived + option(value="unarchived") Unarchived + 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 082747778..6ec1ec4e5 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -8,7 +8,7 @@ BlazeComponent.extendComponent({ {'click .js-add-gen-trigger'(event) { let datas = this.data(); - const actionSelected = this.find('#action').value; + const actionSelected = this.find('#gen-action').value; const boardId = Session.get('currentBoard') if(actionSelected == "created"){ Triggers.insert({activityType: "createCard","boardId":boardId,"listId":"*"},function(error,id){ @@ -20,8 +20,72 @@ BlazeComponent.extendComponent({ datas.triggerIdVar.set(id); }); } - }, + 'click .js-add-create-trigger'(event) { + + let datas = this.data(); + const actionSelected = this.find('#create-action').value; + const listName = this.find('#create-list-name').value; + const boardId = Session.get('currentBoard') + const list = Lists.findOne({title:listName}); + let listId; + if(list == undefined){ + listId = "*" + }else{ + listId = list._id; + } + if(actionSelected == "created"){ + Triggers.insert({activityType: "createCard","boardId":boardId,"listId":listId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "removeCard","boardId":boardId,"listId":listId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-moved-trigger'(event) { + let datas = this.data(); + const actionSelected = this.find('#move-action').value; + const listName = this.find('#move-list-name').value; + const boardId = Session.get('currentBoard') + const list = Lists.findOne({title:listName}); + console.log(list); + let listId; + if(list == undefined){ + listId = "*" + }else{ + listId = list._id; + } + console.log(listId); + if(actionSelected == "moved-to"){ + Triggers.insert({activityType: "moveCard","boardId":boardId,"listId":listId,"oldListId":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "moved-from"){ + Triggers.insert({activityType: "moveCard","boardId":boardId,"listId":"*","oldListId":listId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-arc-trigger'(event) { + let datas = this.data(); + const actionSelected = this.find('#arch-action').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "archived"){ + Triggers.insert({activityType: "archivedCard","boardId":boardId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "unarchived"){ + Triggers.insert({activityType: "restoredCard","boardId":boardId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + } + }]; }, diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade index c1a42ab58..473ceb578 100644 --- a/client/components/rules/triggers/cardTriggers.jade +++ b/client/components/rules/triggers/cardTriggers.jade @@ -4,7 +4,76 @@ template(name="cardTriggers") div.trigger-text | When a label is div.trigger-dropdown - select - option Moved to - div.trigger-button + select(id="create-action") + option(value="created") Added to + option(value="removed") Removed from + div.trigger-text + | a card + div.trigger-button.js-add-gen-label-trigger.js-goto-action + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-text + | When the label + div.trigger-dropdown + select(id="label") + each labels + option + = name + div.trigger-text + | is + div.trigger-dropdown + select(id="create-action") + option(value="created") Added to + option(value="removed") Removed from + div.trigger-text + | a card + div.trigger-button.js-add-label-trigger.js-goto-action + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-text + | When a member is + div.trigger-dropdown + select(id="create-action") + option(value="created") Added to + option(value="removed") Removed from + div.trigger-text + | a card + div.trigger-button.js-add-gen.member-trigger.js-goto-action + i.fa.fa-plus + + + div.trigger-item + div.trigger-content + div.trigger-text + | When the member + div.trigger-dropdown + input(id="create-list-name",type=text,placeholder="name") + div.trigger-text + | is + div.trigger-dropdown + select(id="create-action") + option(value="created") Added to + option(value="removed") Removed from + div.trigger-text + | a card + div.trigger-button.js-add-member-trigger.js-goto-action + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-text + | When an attachment + div.trigger-text + | is + div.trigger-dropdown + select(id="create-action") + option(value="created") Added to + option(value="removed") Removed from + div.trigger-text + | a card + div.trigger-button.js-add-attachment-trigger.js-goto-action i.fa.fa-plus \ No newline at end of file diff --git a/client/components/rules/triggers/cardTriggers.js b/client/components/rules/triggers/cardTriggers.js new file mode 100644 index 000000000..2529641ef --- /dev/null +++ b/client/components/rules/triggers/cardTriggers.js @@ -0,0 +1,105 @@ +BlazeComponent.extendComponent({ + onCreated() { + this.subscribe('allRules'); + }, + + labels(){ + const labels = Boards.findOne(Session.get('currentBoard')).labels; + console.log(labels); + for(let i = 0;i Modal.close(), () => Modal.isOpen(), - { noClickEscapeOn: '.modal-content' } + { noClickEscapeOn: '.modal-container' } ); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 38d200e68..01a2da73c 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -499,6 +499,8 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s" } diff --git a/models/boards.js b/models/boards.js index 76a8f704d..c77c9de24 100644 --- a/models/boards.js +++ b/models/boards.js @@ -254,6 +254,10 @@ Boards.helpers({ return _.findWhere(this.labels, { name, color }); }, + getLabelById(labelId){ + return _.findWhere(this.labels, { _id: labelId }); + }, + labelIndex(labelId) { return _.pluck(this.labels, '_id').indexOf(labelId); }, diff --git a/models/cards.js b/models/cards.js index 618c191e8..364f5a39e 100644 --- a/models/cards.js +++ b/models/cards.js @@ -624,6 +624,41 @@ function cardMembers(userId, doc, fieldNames, modifier) { } } +function cardLabels(userId, doc, fieldNames, modifier) { + if (!_.contains(fieldNames, 'labelIds')) + return; + let labelId; + // Say hello to the new label + if (modifier.$addToSet && modifier.$addToSet.labelIds) { + labelId = modifier.$addToSet.labelIds; + if (!_.contains(doc.labelIds, labelId)) { + const act = { + userId, + labelId, + activityType: 'addedLabel', + boardId: doc.boardId, + cardId: doc._id, + } + Activities.insert(act); + } + } + + // Say goodbye to the label + if (modifier.$pull && modifier.$pull.labelIds) { + labelId = modifier.$pull.labelIds; + // Check that the former member is member of the card + if (_.contains(doc.labelIds, labelId)) { + Activities.insert({ + userId, + labelId, + activityType: 'removedLabel', + boardId: doc.boardId, + cardId: doc._id, + }); + } + } +} + function cardCreation(userId, doc) { Activities.insert({ userId, @@ -680,6 +715,12 @@ if (Meteor.isServer) { cardMembers(userId, doc, fieldNames, modifier); }); + // Add a new activity if we add or remove a label to the card + Cards.before.update((userId, doc, fieldNames, modifier) => { + cardLabels(userId, doc, fieldNames, modifier); + }); + + // Remove all activities associated with a card if we remove the card // Remove also card_comments / checklists / attachments Cards.after.remove((userId, doc) => { diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 1ce8db5ed..4c2a1ef1e 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -20,6 +20,9 @@ RulesHelper = { }, findMatchingRules(activity){ const activityType = activity.activityType; + if(TriggersDef[activityType] == undefined){ + return []; + } const matchingFields = TriggersDef[activityType].matchingFields; const matchingMap = this.buildMatchingFieldsMap(activity,matchingFields); let matchingTriggers = Triggers.find(matchingMap); diff --git a/server/triggersDef.js b/server/triggersDef.js index 5625122e9..895411477 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -1,39 +1,29 @@ TriggersDef = { createCard:{ - matchingFields: ["boardId","listId"] + matchingFields: ["boardId", "listId"] }, moveCard:{ - matchingFields: ["boardId","listId","oldListId"] + matchingFields: ["boardId", "listId", "oldListId"] }, archivedCard:{ matchingFields: ["boardId"] + }, + restoredCard:{ + matchingFields: ["boardId"] + }, + joinMember:{ + matchingFields: ["boardId","memberId"] + }, + unJoinMember:{ + matchingFields: ["boardId","memberId"] + }, + addChecklist:{ + matchingFields: ["boardId","checklistId"] + }, + addChecklistItem:{ + matchingFields: ["boardId","checklistItemId"] } } - // if(activityType == "createCard"){ - - // } - // if(activityType == "moveCard"){ - - // } - // if(activityType == "archivedCard"){ - - // } - // if(activityType == "restoredCard"){ - - // } - // if(activityType == "joinMember"){ - - // } - // if(activityType == "unJoinMember"){ - - // } - // if(activityType == "addChecklist"){ - - // } - // if(activityType == "addChecklistItem"){ - - // } - From f7446ba9346d52431a9d37c8b4c856daf2c73621 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Thu, 16 Aug 2018 17:18:55 +0200 Subject: [PATCH 08/30] Remove attachment activity --- client/components/activities/activities.jade | 5 +++++ i18n/en.i18n.json | 3 ++- models/attachments.js | 7 +++++++ server/triggersDef.js | 8 ++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index 735de57bf..68d225f3b 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -14,6 +14,9 @@ template(name="boardActivities") p.activity-desc +memberName(user=user) + if($eq activityType 'deleteAttachment') + | {{{_ 'activity-delete-attach' cardLink}}}. + if($eq activityType 'addAttachment') | {{{_ 'activity-attached' attachmentLink cardLink}}}. @@ -134,6 +137,8 @@ template(name="cardActivities") | {{{_ 'activity-attached' attachmentLink cardLabel}}}. if attachment.isImage img.attachment-image-preview(src=attachment.url) + if($eq activityType 'deleteAttachment') + | {{{_ 'activity-attached' attachmentLink cardLabel}}}. if($eq activityType 'addChecklist') | {{{_ 'activity-checklist-added' cardLabel}}}. .activity-checklist diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 01a2da73c..b54787b99 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -501,6 +501,7 @@ "source-board": "Source board", "no-parent": "Don't show parent", "activity-added-label": "added label '%s' to %s", - "activity-removed-label": "removed label '%s' from %s" + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s" } diff --git a/models/attachments.js b/models/attachments.js index 91dd0dbc2..d769de34b 100644 --- a/models/attachments.js +++ b/models/attachments.js @@ -86,5 +86,12 @@ if (Meteor.isServer) { Activities.remove({ attachmentId: doc._id, }); + Activities.insert({ + userId, + type: 'card', + activityType: 'deleteAttachment', + boardId: doc.boardId, + cardId: doc.cardId, + }); }); } diff --git a/server/triggersDef.js b/server/triggersDef.js index 895411477..8a3dcb6fc 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -22,7 +22,15 @@ TriggersDef = { }, addChecklistItem:{ matchingFields: ["boardId","checklistItemId"] + }, + addAttachment:{ + matchingFields: ["boardId","checklistId"] + }, + deleteAttachment:{ + matchingFields: ["boardId","checklistItemId"] } + + } From cc285afd5939dbc251ac0f5f64116d0dc17592bb Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Thu, 16 Aug 2018 21:49:56 +0200 Subject: [PATCH 09/30] Complete checklist activities --- client/components/activities/activities.jade | 18 +++++ client/components/activities/activities.js | 6 ++ i18n/en.i18n.json | 6 ++ models/checklistItems.js | 76 ++++++++++++++++++++ models/checklists.js | 9 +++ server/triggersDef.js | 9 +++ 6 files changed, 124 insertions(+) diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index 68d225f3b..fae1a51ac 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -34,12 +34,30 @@ template(name="boardActivities") .activity-checklist(href="{{ card.absoluteUrl }}") +viewer = checklist.title + if($eq activityType 'removeChecklist') + | {{{_ 'activity-checklist-removed' cardLink}}} + + if($eq activityType 'checkedItem') + | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}} + + if($eq activityType 'uncheckedItem') + | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}} + + if($eq activityType 'checklistCompleted') + | {{{_ 'activity-checklist-completed' checklist.title cardLink}}} + + if($eq activityType 'checklistUncompleted') + | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}} + + if($eq activityType 'addChecklistItem') | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. .activity-checklist(href="{{ card.absoluteUrl }}") +viewer = checklistItem.title + if($eq activityType 'removedChecklistItem') + | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}} if($eq activityType 'archivedCard') | {{{_ 'activity-archived' cardLink}}}. diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 93bbb4697..11b391265 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -41,6 +41,12 @@ BlazeComponent.extendComponent({ this.loadNextPageLocked = true; } }, + + checkItem(){ + const checkItemId = this.currentData().checklistItemId; + const checkItem = ChecklistItems.findOne({_id:checkItemId}); + return checkItem.title; + }, boardLabel() { return TAPi18n.__('this-board'); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index b54787b99..2b3e6c4db 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -43,8 +43,14 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", "add-attachment": "Add Attachment", "add-board": "Add Board", diff --git a/models/checklistItems.js b/models/checklistItems.js index e075eda2b..1378e0f55 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -74,17 +74,93 @@ function itemCreation(userId, doc) { } function itemRemover(userId, doc) { + const card = Cards.findOne(doc.cardId); + const boardId = card.boardId; + Activities.insert({ + userId, + activityType: 'removedChecklistItem', + cardId: doc.cardId, + boardId, + checklistId: doc.checklistId, + checklistItemId: doc._id, + }); Activities.remove({ checklistItemId: doc._id, }); } +function publishCheckActivity(userId,doc){ + const card = Cards.findOne(doc.cardId); + const boardId = card.boardId; + let activityType; + if(doc.isFinished){ + activityType = "checkedItem"; + }else{ + activityType = "uncheckedItem"; + } + let act = { + userId, + activityType: activityType, + cardId: doc.cardId, + boardId, + checklistId: doc.checklistId, + checklistItemId: doc._id, + } + console.log(act); + Activities.insert(act); +} + +function publishChekListCompleted(userId,doc,fieldNames,modifier){ + const card = Cards.findOne(doc.cardId); + const boardId = card.boardId; + const checklistId = doc.checklistId; + const checkList = Checklists.findOne({_id:checklistId}); + if(checkList.isFinished()){ + let act = { + userId, + activityType: "checklistCompleted", + cardId: doc.cardId, + boardId, + checklistId: doc.checklistId, + } + Activities.insert(act); + } +} + +function publishChekListUncompleted(userId,doc,fieldNames,modifier){ + const card = Cards.findOne(doc.cardId); + const boardId = card.boardId; + const checklistId = doc.checklistId; + const checkList = Checklists.findOne({_id:checklistId}); + if(checkList.isFinished()){ + let act = { + userId, + activityType: "checklistUncompleted", + cardId: doc.cardId, + boardId, + checklistId: doc.checklistId, + } + Activities.insert(act); + } +} + // Activities if (Meteor.isServer) { Meteor.startup(() => { ChecklistItems._collection._ensureIndex({ checklistId: 1 }); }); + ChecklistItems.after.update((userId, doc, fieldNames, modifier) => { + publishCheckActivity(userId,doc); + publishChekListCompleted(userId,doc,fieldNames,modifier) + }); + + ChecklistItems.before.update((userId, doc, fieldNames, modifier) => { + publishChekListUncompleted(userId,doc,fieldNames,modifier) + }); + + + ChecklistItems.after.insert((userId, doc) => { itemCreation(userId, doc); }); diff --git a/models/checklists.js b/models/checklists.js index c58453efc..3f07c858e 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -101,6 +101,15 @@ if (Meteor.isServer) { Activities.remove(activity._id); }); } + Activities.insert({ + userId, + activityType: 'removeChecklist', + cardId: doc.cardId, + boardId: Cards.findOne(doc.cardId).boardId, + checklistId: doc._id, + }); + + }); } diff --git a/server/triggersDef.js b/server/triggersDef.js index 8a3dcb6fc..41136a784 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -20,9 +20,18 @@ TriggersDef = { addChecklist:{ matchingFields: ["boardId","checklistId"] }, + removeChecklist:{ + matchingFields: ["boardId","checklistId"] + }, addChecklistItem:{ matchingFields: ["boardId","checklistItemId"] }, + checkedItem:{ + matchingFields: ["boardId","checklistId"] + }, + uncheckedItem:{ + matchingFields: ["boardId","checklistItemId"] + }, addAttachment:{ matchingFields: ["boardId","checklistId"] }, From fda4e954eb7202b4c1ed0d30812e3b9156dfd5c9 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Thu, 16 Aug 2018 22:10:05 +0200 Subject: [PATCH 10/30] Completed activities log in card --- client/components/activities/activities.jade | 40 ++++++++++++++------ i18n/en.i18n.json | 9 ++++- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index fae1a51ac..f5ac2d0eb 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -34,22 +34,20 @@ template(name="boardActivities") .activity-checklist(href="{{ card.absoluteUrl }}") +viewer = checklist.title - if($eq activityType 'removeChecklist') - | {{{_ 'activity-checklist-removed' cardLink}}} + if($eq activityType 'removedChecklist') + | {{{_ 'activity-checklist-removed' cardLink}}}. if($eq activityType 'checkedItem') - | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}} + | {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}. if($eq activityType 'uncheckedItem') - | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}} + | {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}. if($eq activityType 'checklistCompleted') - | {{{_ 'activity-checklist-completed' checklist.title cardLink}}} + | {{{_ 'activity-checklist-completed' checklist.title cardLink}}}. if($eq activityType 'checklistUncompleted') - | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}} - - + | {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}. if($eq activityType 'addChecklistItem') | {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}. @@ -57,7 +55,7 @@ template(name="boardActivities") +viewer = checklistItem.title if($eq activityType 'removedChecklistItem') - | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}} + | {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}. if($eq activityType 'archivedCard') | {{{_ 'activity-archived' cardLink}}}. @@ -116,7 +114,6 @@ template(name="boardActivities") if($eq activityType 'removedLabel') | {{{_ 'activity-removed-label' lastLabel cardLink}}}. - if($eq activityType 'unjoinMember') if($eq user._id member._id) | {{{_ 'activity-unjoined' cardLink}}}. @@ -147,6 +144,25 @@ template(name="cardActivities") | {{{_ 'activity-removed' cardLabel memberLink}}}. if($eq activityType 'archivedCard') | {{_ 'activity-archived' cardLabel}}. + + if($eq activityType 'addedLabel') + | {{{_ 'activity-added-label-card' lastLabel }}}. + + if($eq activityType 'removedLabel') + | {{{_ 'activity-removed-label-card' lastLabel }}}. + + if($eq activityType 'checkedItem') + | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}. + + if($eq activityType 'uncheckedItem') + | {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}. + + if($eq activityType 'checklistCompleted') + | {{{_ 'activity-checklist-completed-card' checklist.title }}}. + + if($eq activityType 'checklistUncompleted') + | {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}. + if($eq activityType 'restoredCard') | {{_ 'activity-sent' cardLabel boardLabel}}. if($eq activityType 'moveCard') @@ -156,7 +172,9 @@ template(name="cardActivities") if attachment.isImage img.attachment-image-preview(src=attachment.url) if($eq activityType 'deleteAttachment') - | {{{_ 'activity-attached' attachmentLink cardLabel}}}. + | {{{_ 'activity-delete-attach' cardLabel}}}. + if($eq activityType 'removedChecklist') + | {{{_ 'activity-checklist-removed' cardLabel}}}. if($eq activityType 'addChecklist') | {{{_ 'activity-checklist-added' cardLabel}}}. .activity-checklist diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 2b3e6c4db..17cbb6509 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -52,6 +52,10 @@ "activity-checklist-item-added": "added checklist item to '%s' in %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -508,6 +512,9 @@ "no-parent": "Don't show parent", "activity-added-label": "added label '%s' to %s", "activity-removed-label": "removed label '%s' from %s", - "activity-delete-attach": "deleted an attachment from %s" + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment" } From 2f24dcfc7d2f1b426e83459ed5328529a440955d Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Thu, 16 Aug 2018 23:37:29 +0200 Subject: [PATCH 11/30] Progress on triggers UI --- client/components/activities/activities.jade | 5 +- client/components/rules/rulesActions.jade | 2 +- .../rules/triggers/cardTriggers.jade | 32 ++--- .../components/rules/triggers/cardTriggers.js | 117 +++++++++--------- server/rulesHelper.js | 4 +- server/triggersDef.js | 27 ++-- 6 files changed, 100 insertions(+), 87 deletions(-) diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index f5ac2d0eb..bddc4dad1 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -34,7 +34,7 @@ template(name="boardActivities") .activity-checklist(href="{{ card.absoluteUrl }}") +viewer = checklist.title - if($eq activityType 'removedChecklist') + if($eq activityType 'removeChecklist') | {{{_ 'activity-checklist-removed' cardLink}}}. if($eq activityType 'checkedItem') @@ -151,6 +151,9 @@ template(name="cardActivities") if($eq activityType 'removedLabel') | {{{_ 'activity-removed-label-card' lastLabel }}}. + if($eq activityType 'removeChecklist') + | {{{_ 'activity-checklist-removed' cardLabel}}}. + if($eq activityType 'checkedItem') | {{{_ 'activity-checked-item-card' checkItem checklist.title }}}. diff --git a/client/components/rules/rulesActions.jade b/client/components/rules/rulesActions.jade index 0e2074951..35b070fc0 100644 --- a/client/components/rules/rulesActions.jade +++ b/client/components/rules/rulesActions.jade @@ -1,7 +1,7 @@ template(name="rulesActions") h2 i.fa.fa-cutlery - | Rule "#{data.ruleName}" - Add action + | Rule "#{data.ruleName.get}" - Add action .triggers-content .triggers-body .triggers-side-menu diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade index 473ceb578..9675324f7 100644 --- a/client/components/rules/triggers/cardTriggers.jade +++ b/client/components/rules/triggers/cardTriggers.jade @@ -4,8 +4,8 @@ template(name="cardTriggers") div.trigger-text | When a label is div.trigger-dropdown - select(id="create-action") - option(value="created") Added to + select(id="label-action") + option(value="added") Added to option(value="removed") Removed from div.trigger-text | a card @@ -17,19 +17,19 @@ template(name="cardTriggers") div.trigger-text | When the label div.trigger-dropdown - select(id="label") + select(id="spec-label") each labels - option + option(value="#{_id}") = name div.trigger-text | is div.trigger-dropdown - select(id="create-action") - option(value="created") Added to + select(id="spec-label-action") + option(value="added") Added to option(value="removed") Removed from div.trigger-text | a card - div.trigger-button.js-add-label-trigger.js-goto-action + div.trigger-button.js-add-spec-label-trigger.js-goto-action i.fa.fa-plus div.trigger-item @@ -37,12 +37,12 @@ template(name="cardTriggers") div.trigger-text | When a member is div.trigger-dropdown - select(id="create-action") - option(value="created") Added to + select(id="gen-member-action") + option(value="added") Added to option(value="removed") Removed from div.trigger-text | a card - div.trigger-button.js-add-gen.member-trigger.js-goto-action + div.trigger-button.js-add-gen-member-trigger.js-goto-action i.fa.fa-plus @@ -51,16 +51,16 @@ template(name="cardTriggers") div.trigger-text | When the member div.trigger-dropdown - input(id="create-list-name",type=text,placeholder="name") + input(id="spec-member",type=text,placeholder="name") div.trigger-text | is div.trigger-dropdown - select(id="create-action") - option(value="created") Added to + select(id="spec-member-action") + option(value="added") Added to option(value="removed") Removed from div.trigger-text | a card - div.trigger-button.js-add-member-trigger.js-goto-action + div.trigger-button.js-add-spec-member-trigger.js-goto-action i.fa.fa-plus div.trigger-item @@ -70,8 +70,8 @@ template(name="cardTriggers") div.trigger-text | is div.trigger-dropdown - select(id="create-action") - option(value="created") Added to + select(id="attach-action") + option(value="added") Added to option(value="removed") Removed from div.trigger-text | a card diff --git a/client/components/rules/triggers/cardTriggers.js b/client/components/rules/triggers/cardTriggers.js index 2529641ef..a9940e07f 100644 --- a/client/components/rules/triggers/cardTriggers.js +++ b/client/components/rules/triggers/cardTriggers.js @@ -16,87 +16,86 @@ BlazeComponent.extendComponent({ }, events() { return [ - {'click .js-add-gen-trigger'(event) { + {'click .js-add-gen-label-trigger'(event) { let datas = this.data(); - const actionSelected = this.find('#gen-action').value; + const actionSelected = this.find('#label-action').value; const boardId = Session.get('currentBoard') - if(actionSelected == "created"){ - Triggers.insert({activityType: "createCard","boardId":boardId,"listId":"*"},function(error,id){ + if(actionSelected == "added"){ + Triggers.insert({activityType: "addedLabel","boardId":boardId,"labelId":"*"},function(error,id){ datas.triggerIdVar.set(id); }); } if(actionSelected == "removed"){ - Triggers.insert({activityType: "removeCard","boardId":boardId},function(error,id){ + Triggers.insert({activityType: "removedLabel","boardId":boardId,"labelId":"*"},function(error,id){ datas.triggerIdVar.set(id); }); } }, - 'click .js-add-create-trigger'(event) { - + 'click .js-add-spec-label-trigger'(event) { let datas = this.data(); - const actionSelected = this.find('#create-action').value; - const listName = this.find('#create-list-name').value; + const actionSelected = this.find('#spec-label-action').value; + const labelId = this.find('#spec-label').value; const boardId = Session.get('currentBoard') - const list = Lists.findOne({title:listName}); - let listId; - if(list == undefined){ - listId = "*" - }else{ - listId = list._id; - } - if(actionSelected == "created"){ - Triggers.insert({activityType: "createCard","boardId":boardId,"listId":listId},function(error,id){ + if(actionSelected == "added"){ + Triggers.insert({activityType: "addedLabel","boardId":boardId,"labelId":labelId},function(error,id){ datas.triggerIdVar.set(id); }); } if(actionSelected == "removed"){ - Triggers.insert({activityType: "removeCard","boardId":boardId,"listId":listId},function(error,id){ + Triggers.insert({activityType: "removedLabel","boardId":boardId,"labelId":labelId},function(error,id){ datas.triggerIdVar.set(id); }); } }, - 'click .js-add-moved-trigger'(event) { - let datas = this.data(); - const actionSelected = this.find('#move-action').value; - const listName = this.find('#move-list-name').value; - const boardId = Session.get('currentBoard') - const list = Lists.findOne({title:listName}); - console.log(list); - let listId; - if(list == undefined){ - listId = "*" - }else{ - listId = list._id; - } - console.log(listId); - if(actionSelected == "moved-to"){ - Triggers.insert({activityType: "moveCard","boardId":boardId,"listId":listId,"oldListId":"*"},function(error,id){ - datas.triggerIdVar.set(id); - }); - } - if(actionSelected == "moved-from"){ - Triggers.insert({activityType: "moveCard","boardId":boardId,"listId":"*","oldListId":listId},function(error,id){ - datas.triggerIdVar.set(id); - }); - } - }, - 'click .js-add-arc-trigger'(event) { - let datas = this.data(); - const actionSelected = this.find('#arch-action').value; - const boardId = Session.get('currentBoard') - if(actionSelected == "archived"){ - Triggers.insert({activityType: "archivedCard","boardId":boardId},function(error,id){ - datas.triggerIdVar.set(id); - }); - } - if(actionSelected == "unarchived"){ - Triggers.insert({activityType: "restoredCard","boardId":boardId},function(error,id){ - datas.triggerIdVar.set(id); - }); - } - } + 'click .js-add-gen-member-trigger'(event) { + let datas = this.data(); + const actionSelected = this.find('#gen-member-action').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "added"){ + Triggers.insert({activityType: "joinMember","boardId":boardId,"memberId":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "unjoinMember","boardId":boardId,"memberId":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-spec-member-trigger'(event) { + let datas = this.data(); + const actionSelected = this.find('#spec-member-action').value; + const memberId = this.find('#spec-member').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "added"){ + Triggers.insert({activityType: "joinMember","boardId":boardId,"memberId":memberId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "unjoinMember","boardId":boardId,"memberId":memberId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-attachment-trigger'(event) { + + let datas = this.data(); + const actionSelected = this.find('#attach-action').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "added"){ + Triggers.insert({activityType: "addAttachment","boardId":boardId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "deleteAttachment","boardId":boardId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, }]; }, diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 4c2a1ef1e..1a00688e5 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -1,6 +1,4 @@ RulesHelper = { - - executeRules(activity){ const matchingRules = this.findMatchingRules(activity); console.log(matchingRules); @@ -33,7 +31,7 @@ RulesHelper = { return matchingRules; }, buildMatchingFieldsMap(activity, matchingFields){ - let matchingMap = {}; + let matchingMap = {"activityType":activity.activityType}; for(let i = 0;i< matchingFields.length;i++){ // Creating a matching map with the actual field of the activity // and with the wildcard (for example: trigger when a card is added diff --git a/server/triggersDef.js b/server/triggersDef.js index 41136a784..fce7ff699 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -14,7 +14,7 @@ TriggersDef = { joinMember:{ matchingFields: ["boardId","memberId"] }, - unJoinMember:{ + unjoinMember:{ matchingFields: ["boardId","memberId"] }, addChecklist:{ @@ -23,23 +23,36 @@ TriggersDef = { removeChecklist:{ matchingFields: ["boardId","checklistId"] }, - addChecklistItem:{ + completeChecklist:{ + matchingFields: ["boardId","checklistId"] + }, + uncompleteChecklist:{ + matchingFields: ["boardId","checklistId"] + }, + addedChecklistItem:{ + matchingFields: ["boardId","checklistItemId"] + }, + removedChecklistItem:{ matchingFields: ["boardId","checklistItemId"] }, checkedItem:{ - matchingFields: ["boardId","checklistId"] + matchingFields: ["boardId","checklistItemId"] }, uncheckedItem:{ matchingFields: ["boardId","checklistItemId"] }, addAttachment:{ - matchingFields: ["boardId","checklistId"] + matchingFields: ["boardId"] }, deleteAttachment:{ - matchingFields: ["boardId","checklistItemId"] + matchingFields: ["boardId"] + }, + addedLabel:{ + matchingFields: ["boardId","labelId"] + }, + removedLabel:{ + matchingFields: ["boardId","labelId"] } - - } From 3b62b5ec5dd34eec323c14d466fe07e34287e7b0 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 17 Aug 2018 14:16:56 +0200 Subject: [PATCH 12/30] Fixed triggers to use names and not id --- .../rules/triggers/boardTriggers.js | 26 +---- .../rules/triggers/checklistTriggers.jade | 46 ++++---- .../rules/triggers/checklistTriggers.js | 108 ++++++++++++++++++ models/cards.js | 4 + models/checklistItems.js | 5 + models/checklists.js | 2 + server/triggersDef.js | 20 ++-- 7 files changed, 157 insertions(+), 54 deletions(-) create mode 100644 client/components/rules/triggers/checklistTriggers.js diff --git a/client/components/rules/triggers/boardTriggers.js b/client/components/rules/triggers/boardTriggers.js index 6ec1ec4e5..49c00c16b 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -11,7 +11,7 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#gen-action').value; const boardId = Session.get('currentBoard') if(actionSelected == "created"){ - Triggers.insert({activityType: "createCard","boardId":boardId,"listId":"*"},function(error,id){ + Triggers.insert({activityType: "createCard","boardId":boardId,"listName":"*"},function(error,id){ datas.triggerIdVar.set(id); }); } @@ -27,20 +27,13 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#create-action').value; const listName = this.find('#create-list-name').value; const boardId = Session.get('currentBoard') - const list = Lists.findOne({title:listName}); - let listId; - if(list == undefined){ - listId = "*" - }else{ - listId = list._id; - } if(actionSelected == "created"){ - Triggers.insert({activityType: "createCard","boardId":boardId,"listId":listId},function(error,id){ + Triggers.insert({activityType: "createCard","boardId":boardId,"listName":listName},function(error,id){ datas.triggerIdVar.set(id); }); } if(actionSelected == "removed"){ - Triggers.insert({activityType: "removeCard","boardId":boardId,"listId":listId},function(error,id){ + Triggers.insert({activityType: "removeCard","boardId":boardId,"listName":listName},function(error,id){ datas.triggerIdVar.set(id); }); } @@ -50,22 +43,13 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#move-action').value; const listName = this.find('#move-list-name').value; const boardId = Session.get('currentBoard') - const list = Lists.findOne({title:listName}); - console.log(list); - let listId; - if(list == undefined){ - listId = "*" - }else{ - listId = list._id; - } - console.log(listId); if(actionSelected == "moved-to"){ - Triggers.insert({activityType: "moveCard","boardId":boardId,"listId":listId,"oldListId":"*"},function(error,id){ + Triggers.insert({activityType: "moveCard","boardId":boardId,"listName":listName,"oldListName":"*"},function(error,id){ datas.triggerIdVar.set(id); }); } if(actionSelected == "moved-from"){ - Triggers.insert({activityType: "moveCard","boardId":boardId,"listId":"*","oldListId":listId},function(error,id){ + Triggers.insert({activityType: "moveCard","boardId":boardId,"listName":"*","oldListName":listName},function(error,id){ datas.triggerIdVar.set(id); }); } diff --git a/client/components/rules/triggers/checklistTriggers.jade b/client/components/rules/triggers/checklistTriggers.jade index a34d89d06..e7d6d34ed 100644 --- a/client/components/rules/triggers/checklistTriggers.jade +++ b/client/components/rules/triggers/checklistTriggers.jade @@ -4,12 +4,12 @@ template(name="checklistTriggers") div.trigger-text | When a checklist is div.trigger-dropdown - select(id="create-action") + select(id="gen-check-action") option(value="created") Added to option(value="removed") Removed from div.trigger-text | a card - div.trigger-button.js-add-gen.member-trigger.js-goto-action + div.trigger-button.js-add-gen-check-trigger.js-goto-action i.fa.fa-plus @@ -18,16 +18,16 @@ template(name="checklistTriggers") div.trigger-text | When the checklist div.trigger-dropdown - input(id="create-list-name",type=text,placeholder="Name") + input(id="check-name",type=text,placeholder="Name") div.trigger-text | is div.trigger-dropdown - select(id="create-action") + select(id="spec-check-action") option(value="created") Added to option(value="removed") Removed from div.trigger-text | a card - div.trigger-button.js-add-checklist-trigger.js-goto-action + div.trigger-button.js-add-spec-check-trigger.js-goto-action i.fa.fa-plus div.trigger-item @@ -35,10 +35,10 @@ template(name="checklistTriggers") div.trigger-text | When a checklist is div.trigger-dropdown - select(id="create-action") - option(value="created") Completed - option(value="removed") Made incomplete - div.trigger-button.js-add-gen.member-trigger.js-goto-action + select(id="gen-comp-check-action") + option(value="completed") Completed + option(value="uncompleted") Made incomplete + div.trigger-button.js-add-gen-comp-trigger.js-goto-action i.fa.fa-plus div.trigger-item @@ -46,14 +46,14 @@ template(name="checklistTriggers") div.trigger-text | When the checklist div.trigger-dropdown - input(id="create-list-name",type=text,placeholder="Name") + input(id="spec-comp-check-name",type=text,placeholder="Name") div.trigger-text | is div.trigger-dropdown - select(id="create-action") - option(value="created") Completed - option(value="removed") Made incomplete - div.trigger-button.js-add-checklist-trigger.js-goto-action + select(id="spec-comp-check-action") + option(value="completed") Completed + option(value="uncompleted") Made incomplete + div.trigger-button.js-add-spec-comp-trigger.js-goto-action i.fa.fa-plus div.trigger-item @@ -61,10 +61,10 @@ template(name="checklistTriggers") div.trigger-text | When a checklist item is div.trigger-dropdown - select(id="create-action") - option(value="created") Checked - option(value="removed") Unchecked - div.trigger-button.js-add-gen.member-trigger.js-goto-action + select(id="check-item-gen-action") + option(value="checked") Checked + option(value="unchecked") Unchecked + div.trigger-button.js-add-gen-check-item-trigger.js-goto-action i.fa.fa-plus div.trigger-item @@ -72,12 +72,12 @@ template(name="checklistTriggers") div.trigger-text | When the checklist item div.trigger-dropdown - input(id="create-list-name",type=text,placeholder="Name") + input(id="check-item-name",type=text,placeholder="Name") div.trigger-text | is div.trigger-dropdown - select(id="create-action") - option(value="created") Checked - option(value="removed") Unchecked - div.trigger-button.js-add-checklist-trigger.js-goto-action + select(id="check-item-spec-action") + option(value="checked") Checked + option(value="unchecked") Unchecked + div.trigger-button.js-add-spec-check-item-trigger.js-goto-action i.fa.fa-plus \ No newline at end of file diff --git a/client/components/rules/triggers/checklistTriggers.js b/client/components/rules/triggers/checklistTriggers.js new file mode 100644 index 000000000..9880e3bbf --- /dev/null +++ b/client/components/rules/triggers/checklistTriggers.js @@ -0,0 +1,108 @@ +BlazeComponent.extendComponent({ + onCreated() { + this.subscribe('allRules'); + }, + events() { + return [ + {'click .js-add-gen-check-trigger'(event) { + + let datas = this.data(); + const actionSelected = this.find('#gen-check-action').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "created"){ + Triggers.insert({activityType: "addChecklist","boardId":boardId,"checklistName":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "removeChecklist","boardId":boardId,"checklistName":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-spec-check-trigger'(event) { + let datas = this.data(); + const actionSelected = this.find('#spec-check-action').value; + const checklistId = this.find('#check-name').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "created"){ + Triggers.insert({activityType: "addChecklist","boardId":boardId,"checklistName":checklistId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "removeChecklist","boardId":boardId,"checklistName":checklistId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-gen-comp-trigger'(event) { + + let datas = this.data(); + const actionSelected = this.find('#gen-comp-check-action').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "completed"){ + Triggers.insert({activityType: "completeChecklist","boardId":boardId,"checklistName":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "uncompleted"){ + Triggers.insert({activityType: "uncompleteChecklist","boardId":boardId,"checklistName":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-spec-comp-trigger'(event) { + let datas = this.data(); + const actionSelected = this.find('#spec-comp-check-action').value; + const checklistId = this.find('#spec-comp-check-name').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "added"){ + Triggers.insert({activityType: "joinMember","boardId":boardId,"checklistName":checklistId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "unjoinMember","boardId":boardId,"checklistName":checklistId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-gen-check-item-trigger'(event) { + + let datas = this.data(); + const actionSelected = this.find('#check-item-gen-action').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "checked"){ + Triggers.insert({activityType: "checkedItem","boardId":boardId,"checklistItemName":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "unchecked"){ + Triggers.insert({activityType: "uncheckedItem","boardId":boardId,"checklistItemName":"*"},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + 'click .js-add-spec-check-item-trigger'(event) { + let datas = this.data(); + const actionSelected = this.find('#check-item-spec-action').value; + const checklistItemId = this.find('#check-item-name').value; + const boardId = Session.get('currentBoard') + if(actionSelected == "added"){ + Triggers.insert({activityType: "joinMember","boardId":boardId,"checklistItemName":checklistItemId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + if(actionSelected == "removed"){ + Triggers.insert({activityType: "unjoinMember","boardId":boardId,"checklistItemName":checklistItemId},function(error,id){ + datas.triggerIdVar.set(id); + }); + } + }, + }]; + }, + +}).register('checklistTriggers'); + + diff --git a/models/cards.js b/models/cards.js index 364f5a39e..c5aceeb7e 100644 --- a/models/cards.js +++ b/models/cards.js @@ -561,6 +561,7 @@ function cardMove(userId, doc, fieldNames, oldListId) { userId, oldListId, activityType: 'moveCard', + listName: doc.title, listId: doc.listId, boardId: doc.boardId, cardId: doc._id, @@ -574,6 +575,7 @@ function cardState(userId, doc, fieldNames) { Activities.insert({ userId, activityType: 'archivedCard', + listName: doc.title, boardId: doc.boardId, listId: doc.listId, cardId: doc._id, @@ -583,6 +585,7 @@ function cardState(userId, doc, fieldNames) { userId, activityType: 'restoredCard', boardId: doc.boardId, + listName: doc.title, listId: doc.listId, cardId: doc._id, }); @@ -664,6 +667,7 @@ function cardCreation(userId, doc) { userId, activityType: 'createCard', boardId: doc.boardId, + listName: doc.title, listId: doc.listId, cardId: doc._id, }); diff --git a/models/checklistItems.js b/models/checklistItems.js index 1378e0f55..669003bb9 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -70,6 +70,7 @@ function itemCreation(userId, doc) { boardId, checklistId: doc.checklistId, checklistItemId: doc._id, + checklistItemName:doc.title }); } @@ -83,6 +84,7 @@ function itemRemover(userId, doc) { boardId, checklistId: doc.checklistId, checklistItemId: doc._id, + checklistItemName:doc.title }); Activities.remove({ checklistItemId: doc._id, @@ -105,6 +107,7 @@ function publishCheckActivity(userId,doc){ boardId, checklistId: doc.checklistId, checklistItemId: doc._id, + checklistItemName:doc.title } console.log(act); Activities.insert(act); @@ -122,6 +125,7 @@ function publishChekListCompleted(userId,doc,fieldNames,modifier){ cardId: doc.cardId, boardId, checklistId: doc.checklistId, + checklistName:doc.title } Activities.insert(act); } @@ -139,6 +143,7 @@ function publishChekListUncompleted(userId,doc,fieldNames,modifier){ cardId: doc.cardId, boardId, checklistId: doc.checklistId, + checklistName:doc.title } Activities.insert(act); } diff --git a/models/checklists.js b/models/checklists.js index 3f07c858e..4a43818cd 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -91,6 +91,7 @@ if (Meteor.isServer) { cardId: doc.cardId, boardId: Cards.findOne(doc.cardId).boardId, checklistId: doc._id, + checklistName:doc.title }); }); @@ -107,6 +108,7 @@ if (Meteor.isServer) { cardId: doc.cardId, boardId: Cards.findOne(doc.cardId).boardId, checklistId: doc._id, + checklistName:doc.title }); diff --git a/server/triggersDef.js b/server/triggersDef.js index fce7ff699..8c52051bb 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -1,9 +1,9 @@ TriggersDef = { createCard:{ - matchingFields: ["boardId", "listId"] + matchingFields: ["boardId", "listName"] }, moveCard:{ - matchingFields: ["boardId", "listId", "oldListId"] + matchingFields: ["boardId", "listName", "oldListName"] }, archivedCard:{ matchingFields: ["boardId"] @@ -18,28 +18,28 @@ TriggersDef = { matchingFields: ["boardId","memberId"] }, addChecklist:{ - matchingFields: ["boardId","checklistId"] + matchingFields: ["boardId","checklistName"] }, removeChecklist:{ - matchingFields: ["boardId","checklistId"] + matchingFields: ["boardId","checklistName"] }, completeChecklist:{ - matchingFields: ["boardId","checklistId"] + matchingFields: ["boardId","checklistName"] }, uncompleteChecklist:{ - matchingFields: ["boardId","checklistId"] + matchingFields: ["boardId","checklistName"] }, addedChecklistItem:{ - matchingFields: ["boardId","checklistItemId"] + matchingFields: ["boardId","checklistItemName"] }, removedChecklistItem:{ - matchingFields: ["boardId","checklistItemId"] + matchingFields: ["boardId","checklistItemName"] }, checkedItem:{ - matchingFields: ["boardId","checklistItemId"] + matchingFields: ["boardId","checklistItemName"] }, uncheckedItem:{ - matchingFields: ["boardId","checklistItemId"] + matchingFields: ["boardId","checklistItemName"] }, addAttachment:{ matchingFields: ["boardId"] From 1f5f429fc4535d251d32335eea7e44904a924650 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Sun, 19 Aug 2018 18:53:50 +0200 Subject: [PATCH 13/30] Completed rules --- .../rules/actions/boardActions.jade | 30 ++++- .../components/rules/actions/boardActions.js | 53 ++++++-- .../components/rules/actions/cardActions.jade | 43 +++++++ .../components/rules/actions/cardActions.js | 66 ++++++++++ .../rules/actions/checklistActions.jade | 51 ++++++++ .../rules/actions/checklistActions.js | 61 +++++++++ .../components/rules/actions/mailActions.jade | 11 ++ .../components/rules/actions/mailActions.js | 21 ++++ client/components/rules/rules.styl | 16 +++ client/components/rules/rulesActions.jade | 18 ++- client/components/rules/rulesActions.js | 65 +++++----- client/components/rules/rulesMain.jade | 4 +- client/components/rules/rulesMain.js | 2 +- .../rules/triggers/boardTriggers.js | 32 ++--- .../components/rules/triggers/cardTriggers.js | 40 ++---- .../rules/triggers/checklistTriggers.js | 52 +++----- models/actions.js | 4 + models/checklistItems.js | 6 + models/checklists.js | 12 ++ server/notifications/email.js | 2 + server/rulesHelper.js | 119 ++++++++++++++++-- 21 files changed, 551 insertions(+), 157 deletions(-) create mode 100644 client/components/rules/actions/cardActions.jade create mode 100644 client/components/rules/actions/cardActions.js create mode 100644 client/components/rules/actions/checklistActions.jade create mode 100644 client/components/rules/actions/checklistActions.js create mode 100644 client/components/rules/actions/mailActions.jade create mode 100644 client/components/rules/actions/mailActions.js diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index fe56c3eea..81b2023db 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -4,16 +4,40 @@ template(name="boardActions") div.trigger-text | Move card to div.trigger-dropdown - select(id="action") + select(id="move-gen-action") + option(value="top") Top of + option(value="bottom") Bottom of + div.trigger-text + | its list + div.trigger-button.js-add-gen-move-action.js-goto-rules + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-text + | Move card to + div.trigger-dropdown + select(id="move-spec-action") option(value="top") Top of option(value="bottom") Bottom of div.trigger-text | list div.trigger-dropdown - input(type=text,placeholder="List Name") - div.trigger-button.js-add-move-action.js-goto-rules + input(id="listName",type=text,placeholder="List Name") + div.trigger-button.js-add-spec-move-action.js-goto-rules i.fa.fa-plus + div.trigger-item + div.trigger-content + div.trigger-dropdown + select(id="arch-action") + option(value="archive") Archive + option(value="unarchive") Unarchive + div.trigger-text + | card + div.trigger-button.js-add-arch-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 53325ca0a..94c2778d6 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -7,23 +7,50 @@ BlazeComponent.extendComponent({ events() { return [ - {'click .js-add-move-action'(event) { - - console.log(this.data()); - console.log(this.data().triggerIdVar.get()); + {'click .js-add-spec-move-action'(event) { const ruleName = this.data().ruleName.get(); - const triggerId = this.data().triggerIdVar.get(); - const actionSelected = this.find('#action').value; - + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#move-spec-action').value; + const listTitle = this.find('#listName').value; if(actionSelected == "top"){ - Actions.insert({actionType: "moveCardToTop"},function(err,id){ - Rules.insert({title: ruleName, triggerId: triggerId, actionId: id}); - }); + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":listTitle}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); } if(actionSelected == "bottom"){ - Actions.insert({actionType: "moveCardToBottom"},function(err,id){ - Rules.insert({title: ruleName, triggerId: triggerId, actionId: id}); - }); + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":listTitle}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + } + }, + 'click .js-add-gen-move-action'(event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#move-gen-action').value; + if(actionSelected == "top"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":"*"}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + } + if(actionSelected == "bottom"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":"*"}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + } + }, + 'click .js-add-arch-action'(event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#arch-action').value; + if(actionSelected == "archive"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "archive"}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + } + if(actionSelected == "unarchive"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "unarchive"}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); } }, }]; diff --git a/client/components/rules/actions/cardActions.jade b/client/components/rules/actions/cardActions.jade new file mode 100644 index 000000000..8d218a49d --- /dev/null +++ b/client/components/rules/actions/cardActions.jade @@ -0,0 +1,43 @@ +template(name="cardActions") + div.trigger-item + div.trigger-content + div.trigger-dropdown + select(id="label-action") + option(value="add") Add + option(value="remove") Remove + div.trigger-text + | label + div.trigger-dropdown + select(id="label-id") + each labels + option(value="#{_id}") + = name + div.trigger-button.js-add-label-action.js-goto-rules + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-dropdown + select(id="member-action") + option(value="add") Add + option(value="remove") Removed + div.trigger-text + | member + div.trigger-dropdown + input(id="member-name",type=text,placeholder="Member name") + div.trigger-button.js-add-member-action.js-goto-rules + i.fa.fa-plus + + div.trigger-item + div.trigger-content + div.trigger-text + | Remove all member from the card + div.trigger-button.js-add-removeall-action.js-goto-rules + i.fa.fa-plus + + + + + + + diff --git a/client/components/rules/actions/cardActions.js b/client/components/rules/actions/cardActions.js new file mode 100644 index 000000000..48120d919 --- /dev/null +++ b/client/components/rules/actions/cardActions.js @@ -0,0 +1,66 @@ +BlazeComponent.extendComponent({ + onCreated() { + this.subscribe('allRules'); + }, + + labels(){ + const labels = Boards.findOne(Session.get('currentBoard')).labels; + console.log(labels); + for(let i = 0;i { }, 30000); }); }); + + diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 1a00688e5..2e9f58f43 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -1,19 +1,12 @@ RulesHelper = { executeRules(activity){ const matchingRules = this.findMatchingRules(activity); + console.log("Matching rules:") console.log(matchingRules); for(let i = 0;i< matchingRules.length;i++){ console.log(matchingRules[i]); - const actionType = matchingRules[i].getAction().actionType; - this.performAction(activity,actionType); - } - }, - - performAction(activity,actionType){ - if(actionType == "moveCardToTop"){ - const card = Cards.findOne({_id:activity.cardId}); - const minOrder = _.min(card.list().cards(card.swimlaneId).map((c) => c.sort)); - card.move(card.swimlaneId, card.listId, minOrder - 1); + const action = matchingRules[i].getAction(); + this.performAction(activity,action); } }, findMatchingRules(activity){ @@ -39,6 +32,110 @@ RulesHelper = { matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]],"*"]}; } return matchingMap; - } + }, + performAction(activity,action){ + + console.log("Performing action - Activity"); + console.log(activity); + console.log("Performing action - Action"); + console.log(action); + const card = Cards.findOne({_id:activity.cardId}); + if(action.actionType == "moveCardToTop"){ + let listId; + let list; + if(activity.listTitle == "*"){ + listId = card.swimlaneId; + list = card.list(); + }else{ + list = Lists.findOne({title: action.listTitle}); + listId = list._id; + } + const minOrder = _.min(list.cards(card.swimlaneId).map((c) => c.sort)); + card.move(card.swimlaneId, listId, minOrder - 1); + } + if(action.actionType == "moveCardToBottom"){ + let listId; + let list; + if(activity.listTitle == "*"){ + listId = card.swimlaneId; + list = card.list(); + }else{ + list = Lists.findOne({title: action.listTitle}); + listId = list._id; + } + const maxOrder = _.max(list.cards(card.swimlaneId).map((c) => c.sort)); + card.move(card.swimlaneId, listId, maxOrder + 1); + } + if(action.actionType == "sendEmail"){ + const emailTo = action.emailTo; + const emailMsg = action.emailMsg; + const emailSubject = action.emailSubject; + try { + Email.send({ + to: to, + from: Accounts.emailTemplates.from, + subject: subject, + text, + }); + } catch (e) { + return; + } + } + if(action.actionType == "archive"){ + card.archive(); + } + if(action.actionType == "unarchive"){ + card.restore(); + } + if(action.actionType == "addLabel"){ + card.addLabel(action.labelId); + } + if(action.actionType == "removeLabel"){ + card.removeLabel(action.labelId); + } + if(action.actionType == "addMember"){ + const memberId = Users.findOne({username:action.memberName})._id; + console.log(memberId); + card.assignMember(memberId); + } + if(action.actionType == "removeMember"){ + if(action.memberName == "*"){ + console.log(card); + const members = card.members; + console.log(members); + for(let i = 0;i< members.length;i++){ + card.unassignMember(members[i]); + } + }else{ + const memberId = Users.findOne({username:action.memberName})._id; + card.unassignMember(memberId); + } + } + if(action.actionType == "checkAll"){ + const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); + checkList.checkAllItems(); + } + if(action.actionType == "uncheckAll"){ + const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); + checkList.uncheckAllItems(); + } + if(action.actionType == "checkItem"){ + const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); + const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id}) + checkItem.check(); + } + if(action.actionType == "uncheckItem"){ + const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); + const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id}) + checkItem.uncheck(); + } + if(action.actionType == "addChecklist"){ + Checklists.insert({"title":action.checklistName,"cardId":card._id,"sort":0}); + } + if(action.actionType == "removeChecklist"){ + Checklists.remove({"title":action.checklistName,"cardId":card._id,"sort":0}); + } + + }, } \ No newline at end of file From 34b37116cf8c618a4ea12b13d969c24654f4248b Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Wed, 12 Sep 2018 00:52:29 +0200 Subject: [PATCH 14/30] Fixed rule allows --- client/components/activities/activities.js | 3 - client/components/boards/boardHeader.jade | 2 +- client/components/main/layouts.styl | 2 +- .../rules/actions/boardActions.jade | 24 +++--- .../components/rules/actions/boardActions.js | 73 ++++++++++--------- .../components/rules/actions/cardActions.jade | 16 ++-- .../components/rules/actions/cardActions.js | 23 +++--- .../rules/actions/checklistActions.jade | 28 +++---- .../rules/actions/checklistActions.js | 27 ++++--- .../components/rules/actions/mailActions.jade | 6 +- .../components/rules/actions/mailActions.js | 5 +- client/components/rules/ruleDetails.jade | 8 ++ client/components/rules/ruleDetails.js | 28 +++++++ client/components/rules/rulesActions.jade | 4 +- client/components/rules/rulesList.jade | 26 ++++--- client/components/rules/rulesMain.jade | 6 +- client/components/rules/rulesMain.js | 24 +++--- client/components/rules/rulesTriggers.jade | 4 +- .../rules/triggers/boardTriggers.jade | 34 ++++----- .../rules/triggers/cardTriggers.jade | 46 ++++++------ .../rules/triggers/checklistTriggers.jade | 52 ++++++------- i18n/en.i18n.json | 73 ++++++++++++++++++- models/actions.js | 45 ++---------- models/rules.js | 31 ++++---- models/triggers.js | 15 ++-- 25 files changed, 345 insertions(+), 260 deletions(-) create mode 100644 client/components/rules/ruleDetails.jade create mode 100644 client/components/rules/ruleDetails.js diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 11b391265..f1414e441 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -67,9 +67,6 @@ BlazeComponent.extendComponent({ lastLabel(){ const lastLabelId = this.currentData().labelId; const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(lastLabelId); - console.log("LAST"); - console.log(lastLabel); - if(lastLabel.name == undefined || lastLabel.name == ""){ return lastLabel.color; }else{ diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 5116de28a..dfd281ded 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -89,7 +89,7 @@ template(name="boardHeaderBar") i.fa.fa-times-thin a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}") - i.fa.fa-cutlery + i.fa.fa-magic span {{_ 'rules'}} a.board-header-btn.js-open-search-view(title="{{_ 'search'}}") diff --git a/client/components/main/layouts.styl b/client/components/main/layouts.styl index 109dcf7bc..3457a028e 100644 --- a/client/components/main/layouts.styl +++ b/client/components/main/layouts.styl @@ -64,7 +64,7 @@ body .modal-content-wide width: 800px - min-height: 160px + min-height: 0px margin: 42px auto padding: 12px border-radius: 4px diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index 81b2023db..dfeb3d847 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -2,28 +2,28 @@ template(name="boardActions") div.trigger-item div.trigger-content div.trigger-text - | Move card to + | {{{_'r-move-card-to'}}} div.trigger-dropdown select(id="move-gen-action") - option(value="top") Top of - option(value="bottom") Bottom of + option(value="top") {{{_'r-top-of'}}} + option(value="bottom") {{{_'r-bottom-of'}}} div.trigger-text - | its list + | {{{_'r-its-list'}}} div.trigger-button.js-add-gen-move-action.js-goto-rules i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | Move card to + | {{{_'r-move-card-to'}}} div.trigger-dropdown select(id="move-spec-action") - option(value="top") Top of - option(value="bottom") Bottom of + option(value="top") {{{_'r-top-of'}}} + option(value="bottom") {{{_'r-bottom-of'}}} div.trigger-text - | list + | {{{_'r-list'}}} div.trigger-dropdown - input(id="listName",type=text,placeholder="List Name") + input(id="listName",type=text,placeholder="{{{_'r-name'}}}") div.trigger-button.js-add-spec-move-action.js-goto-rules i.fa.fa-plus @@ -31,10 +31,10 @@ template(name="boardActions") div.trigger-content div.trigger-dropdown select(id="arch-action") - option(value="archive") Archive - option(value="unarchive") Unarchive + option(value="archive") {{{_'r-archive'}}} + option(value="unarchive") {{{_'r-unarchive'}}} div.trigger-text - | card + | {{{_'r-card'}}} div.trigger-button.js-add-arch-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 94c2778d6..2b6fed575 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -12,48 +12,53 @@ BlazeComponent.extendComponent({ const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#move-spec-action').value; const listTitle = this.find('#listName').value; + const boardId = Session.get('currentBoard'); + if(actionSelected == "top"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":listTitle}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + 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"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":listTitle}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":listTitle,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, 'click .js-add-gen-move-action'(event) { - const ruleName = this.data().ruleName.get(); - const trigger = this.data().triggerVar.get(); - const actionSelected = this.find('#move-gen-action').value; - if(actionSelected == "top"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":"*"}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); - } - if(actionSelected == "bottom"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":"*"}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); - } - }, - 'click .js-add-arch-action'(event) { - const ruleName = this.data().ruleName.get(); - const trigger = this.data().triggerVar.get(); - const actionSelected = this.find('#arch-action').value; - if(actionSelected == "archive"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "archive"}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); - } - if(actionSelected == "unarchive"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "unarchive"}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); - } - }, - }]; + const boardId = Session.get('currentBoard'); + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#move-gen-action').value; + if(actionSelected == "top"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":"*","boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); + } + if(actionSelected == "bottom"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":"*","boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); + } + }, + 'click .js-add-arch-action'(event) { + const boardId = Session.get('currentBoard'); + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#arch-action').value; + if(actionSelected == "archive"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "archive"}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); + } + if(actionSelected == "unarchive"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "unarchive"}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); + } +}, +}]; }, }).register('boardActions'); \ No newline at end of file diff --git a/client/components/rules/actions/cardActions.jade b/client/components/rules/actions/cardActions.jade index 8d218a49d..74ad9ab55 100644 --- a/client/components/rules/actions/cardActions.jade +++ b/client/components/rules/actions/cardActions.jade @@ -3,10 +3,10 @@ template(name="cardActions") div.trigger-content div.trigger-dropdown select(id="label-action") - option(value="add") Add - option(value="remove") Remove + option(value="add") {{{_'r-add'}}} + option(value="remove") {{{_'r-remove'}}} div.trigger-text - | label + | {{{_'r-label'}}} div.trigger-dropdown select(id="label-id") each labels @@ -19,19 +19,19 @@ template(name="cardActions") div.trigger-content div.trigger-dropdown select(id="member-action") - option(value="add") Add - option(value="remove") Removed + option(value="add") {{{_'r-add'}}} + option(value="remove") {{{_'r-remove'}}} div.trigger-text - | member + | {{{_'r-member'}}} div.trigger-dropdown - input(id="member-name",type=text,placeholder="Member name") + input(id="member-name",type=text,placeholder="{{{_'r-name'}}}") div.trigger-button.js-add-member-action.js-goto-rules i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | Remove all member from the card + | {{{_'r-remove-all'}}} div.trigger-button.js-add-removeall-action.js-goto-rules i.fa.fa-plus diff --git a/client/components/rules/actions/cardActions.js b/client/components/rules/actions/cardActions.js index 48120d919..571020a8d 100644 --- a/client/components/rules/actions/cardActions.js +++ b/client/components/rules/actions/cardActions.js @@ -24,16 +24,17 @@ BlazeComponent.extendComponent({ const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#label-action').value; const labelId = this.find('#label-id').value; + const boardId = Session.get('currentBoard'); if(actionSelected == "add"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "addLabel","labelId":labelId}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "addLabel","labelId":labelId,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "remove"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "removeLabel","labelId":labelId}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "removeLabel","labelId":labelId,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, @@ -42,23 +43,25 @@ BlazeComponent.extendComponent({ const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#member-action').value; const memberName = this.find('#member-name').value; + const boardId = Session.get('currentBoard'); if(actionSelected == "add"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "addMember","memberName":memberName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "addMember","memberName":memberName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "remove"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "removeMember","memberName":memberName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "removeMember","memberName":memberName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, 'click .js-add-removeall-action'(event) { const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "removeMember","memberName":"*"}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const boardId = Session.get('currentBoard'); + const actionId = Actions.insert({actionType: "removeMember","memberName":"*","boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); }, }]; }, diff --git a/client/components/rules/actions/checklistActions.jade b/client/components/rules/actions/checklistActions.jade index c85ec0789..8414a1a5b 100644 --- a/client/components/rules/actions/checklistActions.jade +++ b/client/components/rules/actions/checklistActions.jade @@ -3,12 +3,12 @@ template(name="checklistActions") div.trigger-content div.trigger-dropdown select(id="check-action") - option(value="add") Add - option(value="remove") Remove + option(value="add") {{{_'r-add'}}} + option(value="remove") {{{_'r-remove'}}} div.trigger-text - | checklist + | {{{_'r-checklist'}}} div.trigger-dropdown - input(id="checklist-name",type=text,placeholder="name") + input(id="checklist-name",type=text,placeholder="{{{_'r-name'}}}") div.trigger-button.js-add-checklist-action.js-goto-rules i.fa.fa-plus @@ -16,12 +16,12 @@ template(name="checklistActions") div.trigger-content div.trigger-dropdown select(id="checkall-action") - option(value="check") Check all - option(value="uncheck") Unchek all + option(value="check") {{{_'r-check-all'}}} + option(value="uncheck") {{{_'r-uncheck-all'}}} div.trigger-text - | items of checklist + | {{{_'r-items-check'}}} div.trigger-dropdown - input(id="checklist-name2",type=text,placeholder="name") + input(id="checklist-name2",type=text,placeholder="{{{_'r-name'}}}") div.trigger-button.js-add-checkall-action.js-goto-rules i.fa.fa-plus @@ -30,16 +30,16 @@ template(name="checklistActions") div.trigger-content div.trigger-dropdown select(id="check-item-action") - option(value="check") Check - option(value="uncheck") Unchek + option(value="check") {{{_'r-check'}}} + option(value="uncheck") {{{_'r-uncheck'}}} div.trigger-text - | item + | {{{_'r-item'}}} div.trigger-dropdown - input(id="checkitem-name",type=text,placeholder="name") + input(id="checkitem-name",type=text,placeholder="{{{_'r-name'}}}") div.trigger-text - | of checklist + | {{{_'r-of-checklist'}}} div.trigger-dropdown - input(id="checklist-name3",type=text,placeholder="name") + input(id="checklist-name3",type=text,placeholder="{{{_'r-name'}}}") div.trigger-button.js-add-check-item-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 2a70ca7f9..e6989fc6e 100644 --- a/client/components/rules/actions/checklistActions.js +++ b/client/components/rules/actions/checklistActions.js @@ -9,16 +9,17 @@ BlazeComponent.extendComponent({ const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#check-action').value; const checklistName = this.find('#checklist-name').value; + const boardId = Session.get('currentBoard'); if(actionSelected == "add"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "addChecklist","checklistName":checklistName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "addChecklist","checklistName":checklistName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "remove"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "removeChecklist","checklistName":checklistName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "removeChecklist","checklistName":checklistName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, @@ -27,15 +28,16 @@ BlazeComponent.extendComponent({ const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#checkall-action').value; const checklistName = this.find('#checklist-name2').value; + const boardId = Session.get('currentBoard'); if(actionSelected == "check"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "checkAll","checklistName":checklistName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "checkAll","checklistName":checklistName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "uncheck"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "uncheckAll","checklistName":checklistName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "uncheckAll","checklistName":checklistName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, 'click .js-add-check-item-action'(event) { @@ -44,15 +46,16 @@ BlazeComponent.extendComponent({ const checkItemName = this.find("#checkitem-name"); const checklistName = this.find("#checklist-name3"); const actionSelected = this.find('#check-item-action').value; + const boardId = Session.get('currentBoard'); if(actionSelected == "check"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "checkItem","checklistName":checklistName,"checkItemName":checkItemName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "checkItem","checklistName":checklistName,"checkItemName":checkItemName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "uncheck"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "uncheckItem","checklistName":checklistName,"checkItemName":checkItemName}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const actionId = Actions.insert({actionType: "uncheckItem","checklistName":checklistName,"checkItemName":checkItemName,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, }]; diff --git a/client/components/rules/actions/mailActions.jade b/client/components/rules/actions/mailActions.jade index 5680d430e..c10fb3846 100644 --- a/client/components/rules/actions/mailActions.jade +++ b/client/components/rules/actions/mailActions.jade @@ -2,10 +2,10 @@ template(name="mailActions") div.trigger-item.trigger-item-mail div.trigger-content.trigger-content-mail div.trigger-text.trigger-text-email - | Send an email + | {{{_'r-send-email'}}} div.trigger-dropdown-mail - input(id="email-to",type=text,placeholder="to") - input(id="email-subject",type=text,placeholder="subject") + input(id="email-to",type=text,placeholder="{{{_'r-to'}}}") + input(id="email-subject",type=text,placeholder="{{{_'r-subject'}}}") textarea(id="email-msg") div.trigger-button.trigger-button-email.js-mail-action.js-goto-rules i.fa.fa-plus \ No newline at end of file diff --git a/client/components/rules/actions/mailActions.js b/client/components/rules/actions/mailActions.js index 0e4b539ef..74f6659b1 100644 --- a/client/components/rules/actions/mailActions.js +++ b/client/components/rules/actions/mailActions.js @@ -12,8 +12,9 @@ BlazeComponent.extendComponent({ const trigger = this.data().triggerVar.get(); const ruleName = this.data().ruleName.get(); const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "sendEmail","emailTo":emailTo,"emailSubject":emailSubject,"emailMsg":emailMsg}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId}); + const boardId = Session.get('currentBoard'); + const actionId = Actions.insert({actionType: "sendEmail","emailTo":emailTo,"emailSubject":emailSubject,"emailMsg":emailMsg,"boardId":boardId}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); }, }]; }, diff --git a/client/components/rules/ruleDetails.jade b/client/components/rules/ruleDetails.jade new file mode 100644 index 000000000..9314151d9 --- /dev/null +++ b/client/components/rules/ruleDetails.jade @@ -0,0 +1,8 @@ +template(name="ruleDetails") + .rules + h2 + i.fa.fa-magic + | {{{_ 'r-rule-details' }}} + + | trigger + | action \ No newline at end of file diff --git a/client/components/rules/ruleDetails.js b/client/components/rules/ruleDetails.js new file mode 100644 index 000000000..572978ac0 --- /dev/null +++ b/client/components/rules/ruleDetails.js @@ -0,0 +1,28 @@ +BlazeComponent.extendComponent({ + onCreated() { + this.subscribe('allRules'); + }, + + trigger(){ + const rule = Rules.findOne({_id:ruleId}); + return Triggers.findOne({_id:rule.triggerId}); + }, + action(){ + const rule = Rules.findOne({_id:ruleId}); + return Triggers.findOne({_id:rule.actionId}); + }, + + events() { + return [{ + }]; + }, + +}).register('ruleDetails'); + + + + + + + + diff --git a/client/components/rules/rulesActions.jade b/client/components/rules/rulesActions.jade index 9fcecf468..8dfceeebf 100644 --- a/client/components/rules/rulesActions.jade +++ b/client/components/rules/rulesActions.jade @@ -1,7 +1,7 @@ template(name="rulesActions") h2 - i.fa.fa-cutlery - | Rule "#{data.ruleName.get}" - Add action + i.fa.fa-magic + | {{{_ 'r-rule' }}} "#{data.ruleName.get}" - {{{_ 'r-add-action'}}} .triggers-content .triggers-body .triggers-side-menu diff --git a/client/components/rules/rulesList.jade b/client/components/rules/rulesList.jade index a0d8143c3..7f9e69461 100644 --- a/client/components/rules/rulesList.jade +++ b/client/components/rules/rulesList.jade @@ -1,8 +1,8 @@ template(name="rulesList") .rules h2 - i.fa.fa-cutlery - | Project rules + i.fa.fa-magic + | {{{_ 'r-board-rules' }}} ul.rules-list each rules @@ -12,14 +12,16 @@ template(name="rulesList") div.rules-btns-group button i.fa.fa-eye - | View rule - button.js-delete-rule - i.fa.fa-trash-o - | Delete rule + | {{{_ 'r-view-rule'}}} + if currentUser.isAdmin + button.js-delete-rule + i.fa.fa-trash-o + | {{{_ 'r-delete-rule'}}} else - li.no-items-message No rules - div.rules-add - button.js-goto-trigger - i.fa.fa-plus - | Add rule - input(type=text,placeholder="New rule name",id="ruleTitle") \ No newline at end of file + li.no-items-message {{{_ 'r-no-rules' }}} + if currentUser.isAdmin + div.rules-add + button.js-goto-trigger + i.fa.fa-plus + | {{{_ 'r-add-rule'}}} + input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle") \ No newline at end of file diff --git a/client/components/rules/rulesMain.jade b/client/components/rules/rulesMain.jade index 2c3082236..3d03372f7 100644 --- a/client/components/rules/rulesMain.jade +++ b/client/components/rules/rulesMain.jade @@ -1,7 +1,7 @@ template(name="rulesMain") - if rulesListVar.get + if($eq rulesCurrentTab.get 'rulesList') +rulesList - else if rulesTriggerVar.get + if($eq rulesCurrentTab.get 'trigger') +rulesTriggers(ruleName=ruleName triggerVar=triggerVar) - else if rulesActionVar.get + if($eq rulesCurrentTab.get 'action') +rulesActions(ruleName=ruleName triggerVar=triggerVar) \ No newline at end of file diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index ee4886b67..0d7a5c6a8 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -1,28 +1,24 @@ BlazeComponent.extendComponent({ onCreated() { - this.rulesListVar = new ReactiveVar(true); - this.rulesTriggerVar = new ReactiveVar(false); - this.rulesActionVar = new ReactiveVar(false); + this.rulesCurrentTab = new ReactiveVar("rulesList") this.ruleName = new ReactiveVar(""); this.triggerVar = new ReactiveVar(); + this.ruleId = new ReactiveVar(); }, setTrigger() { - this.rulesListVar.set(false); - this.rulesTriggerVar.set(true); - this.rulesActionVar.set(false); + this.rulesCurrentTab.set("trigger") }, setRulesList() { - this.rulesListVar.set(true); - this.rulesTriggerVar.set(false); - this.rulesActionVar.set(false); + this.rulesCurrentTab.set("rulesList") }, setAction() { - this.rulesListVar.set(false); - this.rulesTriggerVar.set(false); - this.rulesActionVar.set(true); + this.rulesCurrentTab.set("action") + }, + setRuleDetails() { + this.rulesCurrentTab.set("ruleDetails") }, events() { @@ -48,6 +44,10 @@ BlazeComponent.extendComponent({ event.preventDefault(); this.setRulesList(); }, + 'click .js-goto-details'(event) { + event.preventDefault(); + this.setRuleDetails(); + }, }]; diff --git a/client/components/rules/rulesTriggers.jade b/client/components/rules/rulesTriggers.jade index 2848ad336..0ef5edfa1 100644 --- a/client/components/rules/rulesTriggers.jade +++ b/client/components/rules/rulesTriggers.jade @@ -1,7 +1,7 @@ template(name="rulesTriggers") h2 - i.fa.fa-cutlery - | Rule "#{data.ruleName.get}" - Add trigger + i.fa.fa-magic + | {{{_ 'r-rule' }}} "#{data.ruleName.get}" - {{{_ 'r-add-trigger'}}} .triggers-content .triggers-body .triggers-side-menu diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index 375f50bad..dec15d86f 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -2,54 +2,54 @@ template(name="boardTriggers") div.trigger-item div.trigger-content div.trigger-text - | When a card is + | {{{_'r-when-a-card-is'}}} div.trigger-dropdown select(id="gen-action") - option(value="created") Added to - option(value="removed") Removed from + option(value="created") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-added-to'}}} div.trigger-text - | the board + | {{{_'r-the-board'}}} div.trigger-button.js-add-gen-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When a card is + | {{{_'r-when-a-card-is'}}} div.trigger-dropdown select(id="create-action") - option(value="created") Added to - option(value="removed") Removed from + option(value="created") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-added-to'}}} div.trigger-text - | list + | {{{_'r-list'}}} div.trigger-dropdown - input(id="create-list-name",type=text,placeholder="List Name") + input(id="create-list-name",type=text,placeholder="{{{_'r-list-name'}}}") div.trigger-button.js-add-create-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When a card is + | {{{_'r-when-a-card-is'}}} div.trigger-dropdown select(id="move-action") - option(value="moved-to") Moved to - option(value="moved-from") Moved from + option(value="moved-to") {{{_'r-moved-to'}}} + option(value="moved-from") {{{_'r-moved-from'}}} div.trigger-text - | list + | {{{_'r-list'}}} div.trigger-dropdown - input(id="move-list-name",type=text,placeholder="List Name") + input(id="move-list-name",type=text,placeholder="{{{_'r-list-name'}}}") div.trigger-button.js-add-moved-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When a card is + | {{{_'r-when-a-card-is'}}} div.trigger-dropdown select(id="arch-action") - option(value="archived") Archived - option(value="unarchived") Unarchived + option(value="archived") {{{_'r-archived'}}} + option(value="unarchived") {{{_'r-unarchived'}}} 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 9675324f7..a459a7e02 100644 --- a/client/components/rules/triggers/cardTriggers.jade +++ b/client/components/rules/triggers/cardTriggers.jade @@ -2,20 +2,20 @@ template(name="cardTriggers") div.trigger-item div.trigger-content div.trigger-text - | When a label is + | {{{_'r-when-a-label-is'}}} div.trigger-dropdown select(id="label-action") - option(value="added") Added to - option(value="removed") Removed from + option(value="added") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text - | a card + | {{{_'r-a-card'}}} div.trigger-button.js-add-gen-label-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When the label + | {{{_'r-when-the-label-is'}}} div.trigger-dropdown select(id="spec-label") each labels @@ -25,23 +25,23 @@ template(name="cardTriggers") | is div.trigger-dropdown select(id="spec-label-action") - option(value="added") Added to - option(value="removed") Removed from + option(value="added") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text - | a card + | {{{_'r-a-card'}}} div.trigger-button.js-add-spec-label-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When a member is + | {{{_'r-when-a-member'}}} div.trigger-dropdown select(id="gen-member-action") - option(value="added") Added to - option(value="removed") Removed from + option(value="added") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text - | a card + | {{{_'r-a-card'}}} div.trigger-button.js-add-gen-member-trigger.js-goto-action i.fa.fa-plus @@ -49,31 +49,31 @@ template(name="cardTriggers") div.trigger-item div.trigger-content div.trigger-text - | When the member + | {{{_'r-when-the-member'}}} div.trigger-dropdown - input(id="spec-member",type=text,placeholder="name") + input(id="spec-member",type=text,placeholder="{{{_'r-name'}}}") div.trigger-text - | is + | {{{_'r-is'}}} div.trigger-dropdown select(id="spec-member-action") - option(value="added") Added to - option(value="removed") Removed from + option(value="added") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text - | a card + | {{{_'r-a-card'}}} div.trigger-button.js-add-spec-member-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When an attachment + | {{{_'r-when-a-attach'}}} div.trigger-text - | is + | {{{_'r-is'}}} div.trigger-dropdown select(id="attach-action") - option(value="added") Added to - option(value="removed") Removed from + option(value="added") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text - | a card + | {{{_'r-a-card'}}} div.trigger-button.js-add-attachment-trigger.js-goto-action i.fa.fa-plus \ No newline at end of file diff --git a/client/components/rules/triggers/checklistTriggers.jade b/client/components/rules/triggers/checklistTriggers.jade index e7d6d34ed..465713c84 100644 --- a/client/components/rules/triggers/checklistTriggers.jade +++ b/client/components/rules/triggers/checklistTriggers.jade @@ -2,13 +2,13 @@ template(name="checklistTriggers") div.trigger-item div.trigger-content div.trigger-text - | When a checklist is + | {{{_'r-when-a-checklist'}}} div.trigger-dropdown select(id="gen-check-action") - option(value="created") Added to - option(value="removed") Removed from + option(value="created") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text - | a card + | {{{_'r-a-card'}}} div.trigger-button.js-add-gen-check-trigger.js-goto-action i.fa.fa-plus @@ -16,68 +16,68 @@ template(name="checklistTriggers") div.trigger-item div.trigger-content div.trigger-text - | When the checklist + | {{{_'r-when-the-checklist'}}} div.trigger-dropdown - input(id="check-name",type=text,placeholder="Name") + input(id="check-name",type=text,placeholder="{{{_'r-name'}}}") div.trigger-text - | is + | {{{_'r-is'}}} div.trigger-dropdown select(id="spec-check-action") - option(value="created") Added to - option(value="removed") Removed from + option(value="created") {{{_'r-added-to'}}} + option(value="removed") {{{_'r-removed-from'}}} div.trigger-text - | a card + | {{{_'r-a-card'}}} div.trigger-button.js-add-spec-check-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When a checklist is + | {{{_'r-when-a-checklist'}}} div.trigger-dropdown select(id="gen-comp-check-action") - option(value="completed") Completed - option(value="uncompleted") Made incomplete + option(value="completed") {{{_'r-completed'}}} + option(value="uncompleted") {{{_'r-made-incomplete'}}} div.trigger-button.js-add-gen-comp-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When the checklist + | {{{_'r-when-the-checklist'}}} div.trigger-dropdown - input(id="spec-comp-check-name",type=text,placeholder="Name") + input(id="spec-comp-check-name",type=text,placeholder="{{{_'r-name'}}}") div.trigger-text - | is + | {{{_'r-is'}}} div.trigger-dropdown select(id="spec-comp-check-action") - option(value="completed") Completed - option(value="uncompleted") Made incomplete + option(value="completed") {{{_'r-completed'}}} + option(value="uncompleted") {{{_'r-made-incomplete'}}} div.trigger-button.js-add-spec-comp-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When a checklist item is + | {{{_'r-when-a-item'}}} div.trigger-dropdown select(id="check-item-gen-action") - option(value="checked") Checked - option(value="unchecked") Unchecked + option(value="checked") {{{_'r-checked'}}} + option(value="unchecked") {{{_'r-unchecked'}}} div.trigger-button.js-add-gen-check-item-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | When the checklist item + | {{{_'r-when-the-item'}}} div.trigger-dropdown - input(id="check-item-name",type=text,placeholder="Name") + input(id="check-item-name",type=text,placeholder="{{{_'r-name'}}}") div.trigger-text - | is + | {{{_'r-is'}}} div.trigger-dropdown select(id="check-item-spec-action") - option(value="checked") Checked - option(value="unchecked") Unchecked + option(value="checked") {{{_'r-checked'}}} + option(value="unchecked") {{{_'r-unchecked'}}} div.trigger-button.js-add-spec-check-item-trigger.js-goto-action i.fa.fa-plus \ No newline at end of file diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 17cbb6509..f1cc56eea 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -515,6 +515,77 @@ "activity-delete-attach": "deleted an attachment from %s", "activity-added-label-card": "added label '%s'", "activity-removed-label-card": "removed label '%s'", - "activity-delete-attach-card": "deleted an attachment" + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Archived", + "r-unarchived": "Unarchived", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item is", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-list": "list", + "r-archive": "Archive", + "r-unarchive": "Unarchive", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "r-rule-details": "Rule details" + + + + + + + + + + + } diff --git a/models/actions.js b/models/actions.js index daa5cc96d..da9b30fbd 100644 --- a/models/actions.js +++ b/models/actions.js @@ -1,52 +1,19 @@ Actions = new Mongo.Collection('actions'); - -Actions.mutations({ - rename(description) { - return { $set: { description } }; - }, -}); - Actions.allow({ - update: function () { - // add custom authentication code here - return true; + insert(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); }, - insert: function () { - // add custom authentication code here - return true; + update(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); }, - remove: function () { - // add custom authentication code here - return true; + remove(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); } }); -Actions.helpers({ - 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; - }}); - - - diff --git a/models/rules.js b/models/rules.js index 271e6b524..fe6b04cbe 100644 --- a/models/rules.js +++ b/models/rules.js @@ -3,15 +3,19 @@ Rules = new Mongo.Collection('rules'); Rules.attachSchema(new SimpleSchema({ title: { type: String, - optional: true, + optional: false, }, triggerId: { type: String, - optional: true, + optional: false, }, actionId: { type: String, - optional: true, + optional: false, + }, + boardId: { + type: String, + optional: false, }, })); @@ -25,22 +29,21 @@ Rules.helpers({ getAction(){ return Actions.findOne({_id:this.actionId}); }, + getTrigger(){ + return Triggers.findOne({_id:this.triggerId}); + } }); Rules.allow({ - update: function () { - // add custom authentication code here - return true; + insert(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); }, - remove: function () { - // add custom authentication code here - return true; - }, - insert: function () { - // add custom authentication code here - return true; + update(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); }, + remove(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); + } }); - diff --git a/models/triggers.js b/models/triggers.js index 083c860e6..a1437ea6e 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -9,17 +9,14 @@ Triggers.mutations({ }); Triggers.allow({ - update: function () { - // add custom authentication code here - return true; + insert(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); }, - insert: function () { - // add custom authentication code here - return true; + update(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); }, - remove: function () { - // add custom authentication code here - return true; + remove(userId, doc) { + return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); } }); From e649c79bb71140a15f8e65fdb98ecb367469c0b7 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Wed, 12 Sep 2018 12:19:53 +0200 Subject: [PATCH 15/30] Fixed board id bug in move --- client/components/rules/rulesList.js | 3 ++- i18n/en.i18n.json | 2 +- server/rulesHelper.js | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/client/components/rules/rulesList.js b/client/components/rules/rulesList.js index caafe29fd..9b97a7c83 100644 --- a/client/components/rules/rulesList.js +++ b/client/components/rules/rulesList.js @@ -4,7 +4,8 @@ BlazeComponent.extendComponent({ }, rules() { - return Rules.find({}); + const boardId = Session.get('currentBoard'); + return Rules.find({"boardId":boardId}); }, events() { return [{}]; diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index f1cc56eea..7c93ec606 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -548,7 +548,7 @@ "r-completed": "Completed", "r-made-incomplete": "Made incomplete", "r-when-a-item": "When a checklist item is", - "r-when-the-item": "When the checklist item is", + "r-when-the-item": "When the checklist item", "r-checked": "Checked", "r-unchecked": "Unchecked", "r-move-card-to": "Move card to", diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 2e9f58f43..28fa59d9d 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -40,6 +40,7 @@ RulesHelper = { console.log("Performing action - Action"); console.log(action); const card = Cards.findOne({_id:activity.cardId}); + const boardId = activity.boardId; if(action.actionType == "moveCardToTop"){ let listId; let list; @@ -47,7 +48,7 @@ RulesHelper = { listId = card.swimlaneId; list = card.list(); }else{ - list = Lists.findOne({title: action.listTitle}); + list = Lists.findOne({title: action.listTitle, boardId:boardId });; listId = list._id; } const minOrder = _.min(list.cards(card.swimlaneId).map((c) => c.sort)); @@ -60,7 +61,7 @@ RulesHelper = { listId = card.swimlaneId; list = card.list(); }else{ - list = Lists.findOne({title: action.listTitle}); + list = Lists.findOne({title: action.listTitle, boardId:boardId}); listId = list._id; } const maxOrder = _.max(list.cards(card.swimlaneId).map((c) => c.sort)); From fc73dc5bbcbbd203efc4f10ecb4bd1a66e0d9efb Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 14 Sep 2018 16:49:06 +0200 Subject: [PATCH 16/30] Refactoring rules description --- .../components/rules/actions/boardActions.js | 5 +- .../components/rules/actions/cardActions.js | 1 - client/components/rules/ruleDetails.jade | 5 +- client/components/rules/ruleDetails.js | 17 ++- client/components/rules/rulesList.jade | 2 +- client/components/rules/rulesMain.jade | 4 +- client/components/rules/rulesMain.js | 2 + .../rules/triggers/boardTriggers.jade | 4 +- .../rules/triggers/boardTriggers.js | 25 +++-- .../rules/triggers/cardTriggers.jade | 2 +- client/lib/utils.js | 51 ++++++--- i18n/en.i18n.json | 26 ++++- models/actions.js | 103 ++++++++++++++++-- models/triggers.js | 88 ++++++++++++--- 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 2b6fed575..d1593a5b2 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 571020a8d..3f4b44429 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 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 7c93ec606..be11d0e13 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 da9b30fbd..fd1d03e0f 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 a1437ea6e..c5ed849e3 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"; +}, - labels() { - const boardLabels = this.board().labels; - const cardLabels = _.filter(boardLabels, (label) => { - return _.contains(this.labelIds, label._id); - }); - return cardLabels; +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; }}); diff --git a/server/publications/rules.js b/server/publications/rules.js index ae4b898ed..7aeb66bf0 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({}); +}); From 30a3daa6af179009ac17b40a71bf3f9e9b1d698a Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 14 Sep 2018 17:35:14 +0200 Subject: [PATCH 17/30] Finished alpha rules --- .../components/rules/actions/boardActions.js | 16 +- .../components/rules/actions/cardActions.js | 58 +++--- .../rules/actions/checklistActions.js | 16 +- .../components/rules/actions/mailActions.js | 3 +- client/components/rules/ruleDetails.jade | 15 +- .../components/rules/triggers/cardTriggers.js | 184 +++++++++++------- .../rules/triggers/checklistTriggers.js | 36 ++-- client/lib/utils.js | 6 +- models/actions.js | 80 +------- models/triggers.js | 118 ++++------- server/rulesHelper.js | 11 -- 11 files changed, 237 insertions(+), 306 deletions(-) diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index d1593a5b2..0394f601c 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -13,47 +13,49 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#move-spec-action').value; const listTitle = this.find('#listName').value; const boardId = Session.get('currentBoard'); - + const desc = Utils.getTriggerActionDesc(event,this); if(actionSelected == "top"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":listTitle,"boardId":boardId}); + const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":listTitle,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "bottom"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":listTitle,"boardId":boardId}); + const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":listTitle,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, 'click .js-add-gen-move-action'(event) { + const desc = Utils.getTriggerActionDesc(event,this); const boardId = Session.get('currentBoard'); const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#move-gen-action').value; if(actionSelected == "top"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":"*","boardId":boardId}); + const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":"*","boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "bottom"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":"*","boardId":boardId}); + const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":"*","boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, 'click .js-add-arch-action'(event) { + const desc = Utils.getTriggerActionDesc(event,this); const boardId = Session.get('currentBoard'); const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#arch-action').value; if(actionSelected == "archive"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "archive","boardId":boardId}); + const actionId = Actions.insert({actionType: "archive","boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "unarchive"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "unarchive","boardId":boardId}); + const actionId = Actions.insert({actionType: "unarchive","boardId":boardId,"desc":desc}); 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 3f4b44429..0bf7428a6 100644 --- a/client/components/rules/actions/cardActions.js +++ b/client/components/rules/actions/cardActions.js @@ -24,45 +24,47 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#label-action').value; const labelId = this.find('#label-id').value; const boardId = Session.get('currentBoard'); - + const desc = Utils.getTriggerActionDesc(event,this); if(actionSelected == "add"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "addLabel","labelId":labelId,"boardId":boardId}); + const actionId = Actions.insert({actionType: "addLabel","labelId":labelId,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "remove"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "removeLabel","labelId":labelId,"boardId":boardId}); + const actionId = Actions.insert({actionType: "removeLabel","labelId":labelId,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, 'click .js-add-member-action'(event) { - const ruleName = this.data().ruleName.get(); - const trigger = this.data().triggerVar.get(); - const actionSelected = this.find('#member-action').value; - const memberName = this.find('#member-name').value; - const boardId = Session.get('currentBoard'); - if(actionSelected == "add"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "addMember","memberName":memberName,"boardId":boardId}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } - if(actionSelected == "remove"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "removeMember","memberName":memberName,"boardId":boardId}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } - }, - 'click .js-add-removeall-action'(event) { - const ruleName = this.data().ruleName.get(); - const trigger = this.data().triggerVar.get(); - const triggerId = Triggers.insert(trigger); - const boardId = Session.get('currentBoard'); - const actionId = Actions.insert({actionType: "removeMember","memberName":"*","boardId":boardId}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - }, - }]; + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#member-action').value; + const memberName = this.find('#member-name').value; + const boardId = Session.get('currentBoard'); + const desc = Utils.getTriggerActionDesc(event,this); + if(actionSelected == "add"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "addMember","memberName":memberName,"boardId":boardId,"desc":desc}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId,"desc":desc}); + } + if(actionSelected == "remove"){ + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({actionType: "removeMember","memberName":memberName,"boardId":boardId,"desc":desc}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); + } + }, + 'click .js-add-removeall-action'(event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const triggerId = Triggers.insert(trigger); + const desc = Utils.getTriggerActionDesc(event,this); + const boardId = Session.get('currentBoard'); + const actionId = Actions.insert({actionType: "removeMember","memberName":"*","boardId":boardId,"desc":desc}); + Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); +}, +}]; }, }).register('cardActions'); \ No newline at end of file diff --git a/client/components/rules/actions/checklistActions.js b/client/components/rules/actions/checklistActions.js index e6989fc6e..bfc076230 100644 --- a/client/components/rules/actions/checklistActions.js +++ b/client/components/rules/actions/checklistActions.js @@ -10,15 +10,15 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#check-action').value; const checklistName = this.find('#checklist-name').value; const boardId = Session.get('currentBoard'); - +const desc = Utils.getTriggerActionDesc(event,this); if(actionSelected == "add"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "addChecklist","checklistName":checklistName,"boardId":boardId}); + const actionId = Actions.insert({actionType: "addChecklist","checklistName":checklistName,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "remove"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "removeChecklist","checklistName":checklistName,"boardId":boardId}); + const actionId = Actions.insert({actionType: "removeChecklist","checklistName":checklistName,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } @@ -29,14 +29,15 @@ BlazeComponent.extendComponent({ const actionSelected = this.find('#checkall-action').value; const checklistName = this.find('#checklist-name2').value; const boardId = Session.get('currentBoard'); + const desc = Utils.getTriggerActionDesc(event,this); if(actionSelected == "check"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "checkAll","checklistName":checklistName,"boardId":boardId}); + const actionId = Actions.insert({actionType: "checkAll","checklistName":checklistName,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "uncheck"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "uncheckAll","checklistName":checklistName,"boardId":boardId}); + const actionId = Actions.insert({actionType: "uncheckAll","checklistName":checklistName,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, @@ -47,14 +48,15 @@ BlazeComponent.extendComponent({ const checklistName = this.find("#checklist-name3"); const actionSelected = this.find('#check-item-action').value; const boardId = Session.get('currentBoard'); + const desc = Utils.getTriggerActionDesc(event,this); if(actionSelected == "check"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "checkItem","checklistName":checklistName,"checkItemName":checkItemName,"boardId":boardId}); + const actionId = Actions.insert({actionType: "checkItem","checklistName":checklistName,"checkItemName":checkItemName,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } if(actionSelected == "uncheck"){ const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "uncheckItem","checklistName":checklistName,"checkItemName":checkItemName,"boardId":boardId}); + const actionId = Actions.insert({actionType: "uncheckItem","checklistName":checklistName,"checkItemName":checkItemName,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); } }, diff --git a/client/components/rules/actions/mailActions.js b/client/components/rules/actions/mailActions.js index 74f6659b1..65b8a2d84 100644 --- a/client/components/rules/actions/mailActions.js +++ b/client/components/rules/actions/mailActions.js @@ -13,7 +13,8 @@ BlazeComponent.extendComponent({ const ruleName = this.data().ruleName.get(); const triggerId = Triggers.insert(trigger); const boardId = Session.get('currentBoard'); - const actionId = Actions.insert({actionType: "sendEmail","emailTo":emailTo,"emailSubject":emailSubject,"emailMsg":emailMsg,"boardId":boardId}); + const desc = Utils.getTriggerActionDesc(event,this); + const actionId = Actions.insert({actionType: "sendEmail","emailTo":emailTo,"emailSubject":emailSubject,"emailMsg":emailMsg,"boardId":boardId,"desc":desc}); Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); }, }]; diff --git a/client/components/rules/ruleDetails.jade b/client/components/rules/ruleDetails.jade index 479553d14..b9a1351cb 100644 --- a/client/components/rules/ruleDetails.jade +++ b/client/components/rules/ruleDetails.jade @@ -3,5 +3,16 @@ template(name="ruleDetails") h2 i.fa.fa-magic | {{{_ 'r-rule-details' }}} - = trigger - = action \ No newline at end of file + .triggers-content + .triggers-body + .triggers-main-body + div.trigger-item + div.trigger-content + div.trigger-text + = trigger + div.trigger-item + div.trigger-content + div.trigger-text + = action + + \ No newline at end of file diff --git a/client/components/rules/triggers/cardTriggers.js b/client/components/rules/triggers/cardTriggers.js index e860d8063..c0a5ec1a9 100644 --- a/client/components/rules/triggers/cardTriggers.js +++ b/client/components/rules/triggers/cardTriggers.js @@ -2,12 +2,11 @@ BlazeComponent.extendComponent({ onCreated() { this.subscribe('allRules'); }, - - labels(){ + labels() { const labels = Boards.findOne(Session.get('currentBoard')).labels; console.log(labels); - for(let i = 0;i 0){ - finalString += element.find("select option:selected").text(); + finalString += element.find("select option:selected").text().toLowerCase(); }else if(element.find("input").length > 0){ finalString += element.find("input").val(); } @@ -163,7 +163,7 @@ Utils = { finalString += " "; } } - return finalString.toLowerCase(); + return finalString; }, }; diff --git a/models/actions.js b/models/actions.js index fd1d03e0f..8062b545f 100644 --- a/models/actions.js +++ b/models/actions.js @@ -16,85 +16,7 @@ Actions.allow({ 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"; + return this.desc; } }); diff --git a/models/triggers.js b/models/triggers.js index c5ed849e3..c8e4cc753 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -1,10 +1,12 @@ Triggers = new Mongo.Collection('triggers'); - - Triggers.mutations({ rename(description) { - return { $set: { description } }; + return { + $set: { + description + } + }; }, }); @@ -20,87 +22,37 @@ Triggers.allow({ } }); - Triggers.helpers({ + description() { + return this.desc; + }, - 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; - } - } + 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; } - if(this.activityType = "restoredCard"){ - return TAPi18n.__('r-when-a-card-is') + " " + TAPi18n.__('r-unarchived'); - } - - - - 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; -}}); - - - - - +}); \ No newline at end of file diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 28fa59d9d..d56b70aa0 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -1,10 +1,7 @@ RulesHelper = { executeRules(activity){ const matchingRules = this.findMatchingRules(activity); - console.log("Matching rules:") - console.log(matchingRules); for(let i = 0;i< matchingRules.length;i++){ - console.log(matchingRules[i]); const action = matchingRules[i].getAction(); this.performAction(activity,action); } @@ -34,11 +31,6 @@ RulesHelper = { return matchingMap; }, performAction(activity,action){ - - console.log("Performing action - Activity"); - console.log(activity); - console.log("Performing action - Action"); - console.log(action); const card = Cards.findOne({_id:activity.cardId}); const boardId = activity.boardId; if(action.actionType == "moveCardToTop"){ @@ -96,14 +88,11 @@ RulesHelper = { } if(action.actionType == "addMember"){ const memberId = Users.findOne({username:action.memberName})._id; - console.log(memberId); card.assignMember(memberId); } if(action.actionType == "removeMember"){ if(action.memberName == "*"){ - console.log(card); const members = card.members; - console.log(members); for(let i = 0;i< members.length;i++){ card.unassignMember(members[i]); } From 25da8376ca2ee3b7bedadf924557d4d7bb6c6771 Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 14 Sep 2018 17:39:37 +0200 Subject: [PATCH 18/30] Beautyfied --- .../components/rules/actions/boardActions.js | 170 +++++++++----- .../components/rules/actions/cardActions.js | 155 +++++++----- .../rules/actions/checklistActions.js | 178 +++++++++----- .../components/rules/actions/mailActions.js | 42 ++-- client/components/rules/ruleDetails.js | 33 ++- client/components/rules/rulesActions.js | 37 +-- client/components/rules/rulesList.js | 6 +- client/components/rules/rulesMain.js | 68 +++--- client/components/rules/rulesTriggers.js | 29 +-- .../rules/triggers/boardTriggers.js | 140 +++++++---- .../rules/triggers/checklistTriggers.js | 220 +++++++++++------- client/lib/utils.js | 52 ++--- models/actions.js | 15 +- server/lib/utils.js | 15 +- server/publications/rules.js | 16 +- 15 files changed, 715 insertions(+), 461 deletions(-) diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index 0394f601c..3eda039f2 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -3,63 +3,119 @@ BlazeComponent.extendComponent({ }, - - events() { - return [ - {'click .js-add-spec-move-action'(event) { - const ruleName = this.data().ruleName.get(); - const trigger = this.data().triggerVar.get(); - const actionSelected = this.find('#move-spec-action').value; - const listTitle = this.find('#listName').value; - const boardId = Session.get('currentBoard'); - const desc = Utils.getTriggerActionDesc(event,this); - if(actionSelected == "top"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":listTitle,"boardId":boardId,"desc":desc}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } - if(actionSelected == "bottom"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":listTitle,"boardId":boardId,"desc":desc}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } - }, - 'click .js-add-gen-move-action'(event) { - const desc = Utils.getTriggerActionDesc(event,this); - const boardId = Session.get('currentBoard'); - const ruleName = this.data().ruleName.get(); - const trigger = this.data().triggerVar.get(); - const actionSelected = this.find('#move-gen-action').value; - if(actionSelected == "top"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToTop","listTitle":"*","boardId":boardId,"desc":desc}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } - if(actionSelected == "bottom"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "moveCardToBottom","listTitle":"*","boardId":boardId,"desc":desc}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } - }, - 'click .js-add-arch-action'(event) { - const desc = Utils.getTriggerActionDesc(event,this); - const boardId = Session.get('currentBoard'); - const ruleName = this.data().ruleName.get(); - const trigger = this.data().triggerVar.get(); - const actionSelected = this.find('#arch-action').value; - if(actionSelected == "archive"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "archive","boardId":boardId,"desc":desc}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } - if(actionSelected == "unarchive"){ - const triggerId = Triggers.insert(trigger); - const actionId = Actions.insert({actionType: "unarchive","boardId":boardId,"desc":desc}); - Rules.insert({title: ruleName, triggerId: triggerId, actionId: actionId,"boardId":boardId}); - } -}, -}]; -}, + return [{ + 'click .js-add-spec-move-action' (event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#move-spec-action').value; + const listTitle = this.find('#listName').value; + const boardId = Session.get('currentBoard'); + const desc = Utils.getTriggerActionDesc(event, this); + if (actionSelected == "top") { + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: "moveCardToTop", + "listTitle": listTitle, + "boardId": boardId, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + } + if (actionSelected == "bottom") { + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: "moveCardToBottom", + "listTitle": listTitle, + "boardId": boardId, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + } + }, + 'click .js-add-gen-move-action' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + const boardId = Session.get('currentBoard'); + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#move-gen-action').value; + if (actionSelected == "top") { + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: "moveCardToTop", + "listTitle": "*", + "boardId": boardId, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + } + if (actionSelected == "bottom") { + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: "moveCardToBottom", + "listTitle": "*", + "boardId": boardId, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + } + }, + 'click .js-add-arch-action' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + const boardId = Session.get('currentBoard'); + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const actionSelected = this.find('#arch-action').value; + if (actionSelected == "archive") { + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: "archive", + "boardId": boardId, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + } + if (actionSelected == "unarchive") { + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: "unarchive", + "boardId": boardId, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + } + }, + }]; + }, }).register('boardActions'); \ No newline at end of file diff --git a/client/components/rules/actions/cardActions.js b/client/components/rules/actions/cardActions.js index 0bf7428a6..a6e74fe9e 100644 --- a/client/components/rules/actions/cardActions.js +++ b/client/components/rules/actions/cardActions.js @@ -3,10 +3,10 @@ BlazeComponent.extendComponent({ this.subscribe('allRules'); }, - labels(){ + labels() { const labels = Boards.findOne(Session.get('currentBoard')).labels; - for(let i = 0;i 0){ + } else if (element.find("select").length > 0) { finalString += element.find("select option:selected").text().toLowerCase(); - }else if(element.find("input").length > 0){ + } else if (element.find("input").length > 0) { finalString += element.find("input").val(); } // Add space - if(i != length - 1){ + if (i != length - 1) { finalString += " "; } } @@ -171,4 +171,4 @@ Utils = { // resized. This is used to reactively re-calculate the popup position in case // of a window resize. This is the equivalent of a "Signal" in some other // programming environments (eg, elm). -$(window).on('resize', () => Utils.windowResizeDep.changed()); +$(window).on('resize', () => Utils.windowResizeDep.changed()); \ No newline at end of file diff --git a/models/actions.js b/models/actions.js index 8062b545f..82ab0d195 100644 --- a/models/actions.js +++ b/models/actions.js @@ -1,6 +1,5 @@ Actions = new Mongo.Collection('actions'); - Actions.allow({ insert(userId, doc) { return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); @@ -13,20 +12,8 @@ Actions.allow({ } }); - Actions.helpers({ description() { return this.desc; } -}); - - - - - - - - - - - +}); \ No newline at end of file diff --git a/server/lib/utils.js b/server/lib/utils.js index bdf914efc..17e63514d 100644 --- a/server/lib/utils.js +++ b/server/lib/utils.js @@ -1,19 +1,16 @@ allowIsBoardAdmin = function(userId, board) { - return board && board.hasAdmin(userId); + return board && board.hasAdmin(userId); }; allowIsBoardMember = function(userId, board) { - return board && board.hasMember(userId); + return board && board.hasMember(userId); }; allowIsBoardMemberNonComment = function(userId, board) { - return board && board.hasMember(userId) && !board.hasCommentOnly(userId); + return board && board.hasMember(userId) && !board.hasCommentOnly(userId); }; allowIsBoardMemberByCard = function(userId, card) { - const board = card.board(); - return board && board.hasMember(userId); -}; - - - + const board = card.board(); + return board && board.hasMember(userId); +}; \ No newline at end of file diff --git a/server/publications/rules.js b/server/publications/rules.js index 7aeb66bf0..29be2e787 100644 --- a/server/publications/rules.js +++ b/server/publications/rules.js @@ -1,18 +1,18 @@ Meteor.publish('rules', (ruleId) => { - check(ruleId, String); - return Rules.find({ _id: ruleId }); + check(ruleId, String); + return Rules.find({ + _id: ruleId + }); }); - Meteor.publish('allRules', () => { - return Rules.find({}); + return Rules.find({}); }); - Meteor.publish('allTriggers', () => { - return Triggers.find({}); + return Triggers.find({}); }); Meteor.publish('allActions', () => { - return Actions.find({}); -}); + return Actions.find({}); +}); \ No newline at end of file From a57806b054e076c5e5a94263b67125e0340c0e2f Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 14 Sep 2018 18:03:57 +0200 Subject: [PATCH 19/30] Fixed listid --- models/cards.js | 367 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 286 insertions(+), 81 deletions(-) diff --git a/models/cards.js b/models/cards.js index c5aceeb7e..efc25a8ff 100644 --- a/models/cards.js +++ b/models/cards.js @@ -178,15 +178,33 @@ Cards.helpers({ }, activities() { - return Activities.find({cardId: this._id}, {sort: {createdAt: -1}}); + return Activities.find({ + cardId: this._id + }, { + sort: { + createdAt: -1 + } + }); }, comments() { - return CardComments.find({cardId: this._id}, {sort: {createdAt: -1}}); + return CardComments.find({ + cardId: this._id + }, { + sort: { + createdAt: -1 + } + }); }, attachments() { - return Attachments.find({cardId: this._id}, {sort: {uploadedAt: -1}}); + return Attachments.find({ + cardId: this._id + }, { + sort: { + uploadedAt: -1 + } + }); }, cover() { @@ -197,7 +215,13 @@ Cards.helpers({ }, checklists() { - return Checklists.find({cardId: this._id}, {sort: { sort: 1 } }); + return Checklists.find({ + cardId: this._id + }, { + sort: { + sort: 1 + } + }); }, checklistItemCount() { @@ -230,14 +254,22 @@ Cards.helpers({ return Cards.find({ parentId: this._id, archived: false, - }, {sort: { sort: 1 } }); + }, { + sort: { + sort: 1 + } + }); }, allSubtasks() { return Cards.find({ parentId: this._id, archived: false, - }, {sort: { sort: 1 } }); + }, { + sort: { + sort: 1 + } + }); }, subtasksCount() { @@ -250,7 +282,8 @@ Cards.helpers({ subtasksFinishedCount() { return Cards.find({ parentId: this._id, - archived: true}).count(); + archived: true + }).count(); }, subtasksFinished() { @@ -282,12 +315,9 @@ Cards.helpers({ }); //search for "True Value" which is for DropDowns other then the Value (which is the id) let trueValue = customField.value; - if (definition.settings.dropdownItems && definition.settings.dropdownItems.length > 0) - { - for (let i = 0; i < definition.settings.dropdownItems.length; i++) - { - if (definition.settings.dropdownItems[i]._id === customField.value) - { + if (definition.settings.dropdownItems && definition.settings.dropdownItems.length > 0) { + for (let i = 0; i < definition.settings.dropdownItems.length; i++) { + if (definition.settings.dropdownItems[i]._id === customField.value) { trueValue = definition.settings.dropdownItems[i].name; } } @@ -312,8 +342,10 @@ Cards.helpers({ }, canBeRestored() { - const list = Lists.findOne({_id: this.listId}); - if(!list.getWipLimit('soft') && list.getWipLimit('enabled') && list.getWipLimit('value') === list.cards().count()){ + const list = Lists.findOne({ + _id: this.listId + }); + if (!list.getWipLimit('soft') && list.getWipLimit('enabled') && list.getWipLimit('value') === list.cards().count()) { return false; } return true; @@ -378,7 +410,7 @@ Cards.helpers({ }, parentString(sep) { - return this.parentList().map(function(elem){ + return this.parentList().map(function(elem) { return elem.title; }).join(sep); }, @@ -390,35 +422,65 @@ Cards.helpers({ Cards.mutations({ applyToChildren(funct) { - Cards.find({ parentId: this._id }).forEach((card) => { + Cards.find({ + parentId: this._id + }).forEach((card) => { funct(card); }); }, archive() { - this.applyToChildren((card) => { return card.archive(); }); - return {$set: {archived: true}}; + this.applyToChildren((card) => { + return card.archive(); + }); + return { + $set: { + archived: true + } + }; }, restore() { - this.applyToChildren((card) => { return card.restore(); }); - return {$set: {archived: false}}; + this.applyToChildren((card) => { + return card.restore(); + }); + return { + $set: { + archived: false + } + }; }, setTitle(title) { - return {$set: {title}}; + return { + $set: { + title + } + }; }, setDescription(description) { - return {$set: {description}}; + return { + $set: { + description + } + }; }, setRequestedBy(requestedBy) { - return {$set: {requestedBy}}; + return { + $set: { + requestedBy + } + }; }, setAssignedBy(assignedBy) { - return {$set: {assignedBy}}; + return { + $set: { + assignedBy + } + }; }, move(swimlaneId, listId, sortIndex) { @@ -430,15 +492,25 @@ Cards.mutations({ sort: sortIndex, }; - return {$set: mutatedFields}; + return { + $set: mutatedFields + }; }, addLabel(labelId) { - return {$addToSet: {labelIds: labelId}}; + return { + $addToSet: { + labelIds: labelId + } + }; }, removeLabel(labelId) { - return {$pull: {labelIds: labelId}}; + return { + $pull: { + labelIds: labelId + } + }; }, toggleLabel(labelId) { @@ -450,11 +522,19 @@ Cards.mutations({ }, assignMember(memberId) { - return {$addToSet: {members: memberId}}; + return { + $addToSet: { + members: memberId + } + }; }, unassignMember(memberId) { - return {$pull: {members: memberId}}; + return { + $pull: { + members: memberId + } + }; }, toggleMember(memberId) { @@ -466,11 +546,24 @@ Cards.mutations({ }, assignCustomField(customFieldId) { - return {$addToSet: {customFields: {_id: customFieldId, value: null}}}; + return { + $addToSet: { + customFields: { + _id: customFieldId, + value: null + } + } + }; }, unassignCustomField(customFieldId) { - return {$pull: {customFields: {_id: customFieldId}}}; + return { + $pull: { + customFields: { + _id: customFieldId + } + } + }; }, toggleCustomField(customFieldId) { @@ -485,7 +578,9 @@ Cards.mutations({ // todo const index = this.customFieldIndex(customFieldId); if (index > -1) { - const update = {$set: {}}; + const update = { + $set: {} + }; update.$set[`customFields.${index}.value`] = value; return update; } @@ -495,64 +590,120 @@ Cards.mutations({ }, setCover(coverId) { - return {$set: {coverId}}; + return { + $set: { + coverId + } + }; }, unsetCover() { - return {$unset: {coverId: ''}}; + return { + $unset: { + coverId: '' + } + }; }, setReceived(receivedAt) { - return {$set: {receivedAt}}; + return { + $set: { + receivedAt + } + }; }, unsetReceived() { - return {$unset: {receivedAt: ''}}; + return { + $unset: { + receivedAt: '' + } + }; }, setStart(startAt) { - return {$set: {startAt}}; + return { + $set: { + startAt + } + }; }, unsetStart() { - return {$unset: {startAt: ''}}; + return { + $unset: { + startAt: '' + } + }; }, setDue(dueAt) { - return {$set: {dueAt}}; + return { + $set: { + dueAt + } + }; }, unsetDue() { - return {$unset: {dueAt: ''}}; + return { + $unset: { + dueAt: '' + } + }; }, setEnd(endAt) { - return {$set: {endAt}}; + return { + $set: { + endAt + } + }; }, unsetEnd() { - return {$unset: {endAt: ''}}; + return { + $unset: { + endAt: '' + } + }; }, setOvertime(isOvertime) { - return {$set: {isOvertime}}; + return { + $set: { + isOvertime + } + }; }, setSpentTime(spentTime) { - return {$set: {spentTime}}; + return { + $set: { + spentTime + } + }; }, unsetSpentTime() { - return {$unset: {spentTime: '', isOvertime: false}}; + return { + $unset: { + spentTime: '', + isOvertime: false + } + }; }, setParentId(parentId) { - return {$set: {parentId}}; + return { + $set: { + parentId + } + }; }, }); - //FUNCTIONS FOR creation of Activities function cardMove(userId, doc, fieldNames, oldListId) { @@ -561,7 +712,7 @@ function cardMove(userId, doc, fieldNames, oldListId) { userId, oldListId, activityType: 'moveCard', - listName: doc.title, + listName: Lists.findOne(doc.listId).title, listId: doc.listId, boardId: doc.boardId, cardId: doc._id, @@ -575,7 +726,7 @@ function cardState(userId, doc, fieldNames) { Activities.insert({ userId, activityType: 'archivedCard', - listName: doc.title, + listName: Lists.findOne(doc.listId).title, boardId: doc.boardId, listId: doc.listId, cardId: doc._id, @@ -585,7 +736,7 @@ function cardState(userId, doc, fieldNames) { userId, activityType: 'restoredCard', boardId: doc.boardId, - listName: doc.title, + listName: Lists.findOne(doc.listId).title, listId: doc.listId, cardId: doc._id, }); @@ -667,7 +818,7 @@ function cardCreation(userId, doc) { userId, activityType: 'createCard', boardId: doc.boardId, - listName: doc.title, + listName: Lists.findOne(doc.listId).title, listId: doc.listId, cardId: doc._id, }); @@ -691,12 +842,14 @@ function cardRemover(userId, doc) { }); } - if (Meteor.isServer) { // Cards are often fetched within a board, so we create an index to make these // queries more efficient. Meteor.startup(() => { - Cards._collection._ensureIndex({boardId: 1, createdAt: -1}); + Cards._collection._ensureIndex({ + boardId: 1, + createdAt: -1 + }); }); Cards.after.insert((userId, doc) => { @@ -709,7 +862,7 @@ if (Meteor.isServer) { }); //New activity for card moves - Cards.after.update(function (userId, doc, fieldNames) { + Cards.after.update(function(userId, doc, fieldNames) { const oldListId = this.previous.listId; cardMove(userId, doc, fieldNames, oldListId); }); @@ -724,7 +877,6 @@ if (Meteor.isServer) { cardLabels(userId, doc, fieldNames, modifier); }); - // Remove all activities associated with a card if we remove the card // Remove also card_comments / checklists / attachments Cards.after.remove((userId, doc) => { @@ -733,13 +885,17 @@ if (Meteor.isServer) { } //LISTS REST API if (Meteor.isServer) { - JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function (req, res) { + JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function(req, res) { const paramBoardId = req.params.boardId; const paramListId = req.params.listId; Authentication.checkBoardAccess(req.userId, paramBoardId); JsonRoutes.sendResult(res, { code: 200, - data: Cards.find({boardId: paramBoardId, listId: paramListId, archived: false}).map(function (doc) { + data: Cards.find({ + boardId: paramBoardId, + listId: paramListId, + archived: false + }).map(function(doc) { return { _id: doc._id, title: doc.title, @@ -749,24 +905,31 @@ if (Meteor.isServer) { }); }); - JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards/:cardId', function (req, res) { + JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards/:cardId', function(req, res) { const paramBoardId = req.params.boardId; const paramListId = req.params.listId; const paramCardId = req.params.cardId; Authentication.checkBoardAccess(req.userId, paramBoardId); JsonRoutes.sendResult(res, { code: 200, - data: Cards.findOne({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false}), + data: Cards.findOne({ + _id: paramCardId, + listId: paramListId, + boardId: paramBoardId, + archived: false + }), }); }); - JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function (req, res) { + JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function(req, res) { Authentication.checkUserId(req.userId); const paramBoardId = req.params.boardId; const paramListId = req.params.listId; - const check = Users.findOne({_id: req.body.authorId}); + const check = Users.findOne({ + _id: req.body.authorId + }); const members = req.body.members || [req.body.authorId]; - if (typeof check !== 'undefined') { + if (typeof check !== 'undefined') { const id = Cards.direct.insert({ title: req.body.title, boardId: paramBoardId, @@ -784,7 +947,9 @@ if (Meteor.isServer) { }, }); - const card = Cards.findOne({_id:id}); + const card = Cards.findOne({ + _id: id + }); cardCreation(req.body.authorId, card); } else { @@ -794,7 +959,7 @@ if (Meteor.isServer) { } }); - JsonRoutes.add('PUT', '/api/boards/:boardId/lists/:listId/cards/:cardId', function (req, res) { + JsonRoutes.add('PUT', '/api/boards/:boardId/lists/:listId/cards/:cardId', function(req, res) { Authentication.checkUserId(req.userId); const paramBoardId = req.params.boardId; const paramCardId = req.params.cardId; @@ -802,27 +967,63 @@ if (Meteor.isServer) { if (req.body.hasOwnProperty('title')) { const newTitle = req.body.title; - Cards.direct.update({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false}, - {$set: {title: newTitle}}); + Cards.direct.update({ + _id: paramCardId, + listId: paramListId, + boardId: paramBoardId, + archived: false + }, { + $set: { + title: newTitle + } + }); } if (req.body.hasOwnProperty('listId')) { const newParamListId = req.body.listId; - Cards.direct.update({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false}, - {$set: {listId: newParamListId}}); + Cards.direct.update({ + _id: paramCardId, + listId: paramListId, + boardId: paramBoardId, + archived: false + }, { + $set: { + listId: newParamListId + } + }); - const card = Cards.findOne({_id: paramCardId} ); - cardMove(req.body.authorId, card, {fieldName: 'listId'}, paramListId); + const card = Cards.findOne({ + _id: paramCardId + }); + cardMove(req.body.authorId, card, { + fieldName: 'listId' + }, paramListId); } if (req.body.hasOwnProperty('description')) { const newDescription = req.body.description; - Cards.direct.update({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false}, - {$set: {description: newDescription}}); + Cards.direct.update({ + _id: paramCardId, + listId: paramListId, + boardId: paramBoardId, + archived: false + }, { + $set: { + description: newDescription + } + }); } if (req.body.hasOwnProperty('labelIds')) { const newlabelIds = req.body.labelIds; - Cards.direct.update({_id: paramCardId, listId: paramListId, boardId: paramBoardId, archived: false}, - {$set: {labelIds: newlabelIds}}); + Cards.direct.update({ + _id: paramCardId, + listId: paramListId, + boardId: paramBoardId, + archived: false + }, { + $set: { + labelIds: newlabelIds + } + }); } JsonRoutes.sendResult(res, { code: 200, @@ -832,15 +1033,20 @@ if (Meteor.isServer) { }); }); - - JsonRoutes.add('DELETE', '/api/boards/:boardId/lists/:listId/cards/:cardId', function (req, res) { + JsonRoutes.add('DELETE', '/api/boards/:boardId/lists/:listId/cards/:cardId', function(req, res) { Authentication.checkUserId(req.userId); const paramBoardId = req.params.boardId; const paramListId = req.params.listId; const paramCardId = req.params.cardId; - Cards.direct.remove({_id: paramCardId, listId: paramListId, boardId: paramBoardId}); - const card = Cards.find({_id: paramCardId} ); + Cards.direct.remove({ + _id: paramCardId, + listId: paramListId, + boardId: paramBoardId + }); + const card = Cards.find({ + _id: paramCardId + }); cardRemover(req.body.authorId, card); JsonRoutes.sendResult(res, { code: 200, @@ -850,5 +1056,4 @@ if (Meteor.isServer) { }); }); -} - +} \ No newline at end of file From 8cb132f492d3e4eb41b9f6766a59312942e345fa Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Fri, 14 Sep 2018 19:20:24 +0200 Subject: [PATCH 20/30] Export/Import done for rules --- models/export.js | 80 +++++-- models/wekanCreator.js | 463 +++++++++++++++++++++++++---------------- 2 files changed, 351 insertions(+), 192 deletions(-) diff --git a/models/export.js b/models/export.js index 8c4c29d48..f4ea67892 100644 --- a/models/export.js +++ b/models/export.js @@ -14,7 +14,7 @@ if (Meteor.isServer) { * See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/ * for detailed explanations */ - JsonRoutes.add('get', '/api/boards/:boardId/export', function (req, res) { + JsonRoutes.add('get', '/api/boards/:boardId/export', function(req, res) { const boardId = req.params.boardId; let user = null; // todo XXX for real API, first look for token in Authentication: header @@ -28,8 +28,11 @@ if (Meteor.isServer) { } const exporter = new Exporter(boardId); - if(exporter.canExport(user)) { - JsonRoutes.sendResult(res, { code: 200, data: exporter.build() }); + if (exporter.canExport(user)) { + JsonRoutes.sendResult(res, { + code: 200, + data: 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. @@ -44,25 +47,52 @@ class Exporter { } build() { - const byBoard = { boardId: this._boardId }; + const byBoard = { + boardId: this._boardId + }; // we do not want to retrieve boardId in related elements - const noBoardId = { fields: { boardId: 0 } }; + const noBoardId = { + fields: { + boardId: 0 + } + }; const result = { _format: 'wekan-board-1.0.0', }; - _.extend(result, Boards.findOne(this._boardId, { fields: { stars: 0 } })); + _.extend(result, Boards.findOne(this._boardId, { + fields: { + stars: 0 + } + })); result.lists = Lists.find(byBoard, noBoardId).fetch(); result.cards = Cards.find(byBoard, noBoardId).fetch(); result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch(); result.comments = CardComments.find(byBoard, noBoardId).fetch(); result.activities = Activities.find(byBoard, noBoardId).fetch(); + result.rules = Rules.find(byBoard, noBoardId).fetch(); result.checklists = []; result.checklistItems = []; result.subtaskItems = []; + result.triggers = []; + result.actions = []; result.cards.forEach((card) => { - result.checklists.push(...Checklists.find({ cardId: card._id }).fetch()); - result.checklistItems.push(...ChecklistItems.find({ cardId: card._id }).fetch()); - result.subtaskItems.push(...Cards.find({ parentid: card._id }).fetch()); + result.checklists.push(...Checklists.find({ + cardId: card._id + }).fetch()); + result.checklistItems.push(...ChecklistItems.find({ + cardId: card._id + }).fetch()); + result.subtaskItems.push(...Cards.find({ + parentid: card._id + }).fetch()); + }); + result.rules.forEach((rule) => { + result.triggers.push(...Triggers.find({ + _id: rule.triggerId + }, noBoardId).fetch()); + result.actions.push(...Actions.find({ + _id: rule.actionId + }, noBoardId).fetch()); }); // [Old] for attachments we only export IDs and absolute url to original doc @@ -99,18 +129,34 @@ class Exporter { // 1- only exports users that are linked somehow to that board // 2- do not export any sensitive information const users = {}; - result.members.forEach((member) => { users[member.userId] = true; }); - result.lists.forEach((list) => { users[list.userId] = true; }); + result.members.forEach((member) => { + users[member.userId] = true; + }); + result.lists.forEach((list) => { + users[list.userId] = true; + }); result.cards.forEach((card) => { users[card.userId] = true; if (card.members) { - card.members.forEach((memberId) => { users[memberId] = true; }); + card.members.forEach((memberId) => { + users[memberId] = true; + }); } }); - result.comments.forEach((comment) => { users[comment.userId] = true; }); - result.activities.forEach((activity) => { users[activity.userId] = true; }); - result.checklists.forEach((checklist) => { users[checklist.userId] = true; }); - const byUserIds = { _id: { $in: Object.getOwnPropertyNames(users) } }; + result.comments.forEach((comment) => { + users[comment.userId] = true; + }); + result.activities.forEach((activity) => { + users[activity.userId] = true; + }); + result.checklists.forEach((checklist) => { + users[checklist.userId] = true; + }); + const byUserIds = { + _id: { + $in: Object.getOwnPropertyNames(users) + } + }; // we use whitelist to be sure we do not expose inadvertently // some secret fields that gets added to User later. const userFields = { @@ -136,4 +182,4 @@ class Exporter { const board = Boards.findOne(this._boardId); return board && board.isVisibleBy(user); } -} +} \ No newline at end of file diff --git a/models/wekanCreator.js b/models/wekanCreator.js index 4551979b5..33a2767a5 100644 --- a/models/wekanCreator.js +++ b/models/wekanCreator.js @@ -1,4 +1,4 @@ -const DateString = Match.Where(function (dateAsString) { +const DateString = Match.Where(function(dateAsString) { check(dateAsString, String); return moment(dateAsString, moment.ISO_8601).isValid(); }); @@ -42,6 +42,10 @@ export class WekanCreator { this.comments = {}; // the members, indexed by Wekan member id => Wekan user ID this.members = data.membersMapping ? data.membersMapping : {}; + // Map of triggers Wekan ID => Wekan ID + this.triggers = {}; + // Map of actions Wekan ID => Wekan ID + this.actions = {}; // maps a wekanCardId to an array of wekanAttachments this.attachments = {}; @@ -57,10 +61,10 @@ export class WekanCreator { * @param {String} dateString a properly formatted Date */ _now(dateString) { - if(dateString) { + if (dateString) { return new Date(dateString); } - if(!this._nowDate) { + if (!this._nowDate) { this._nowDate = new Date(); } return this._nowDate; @@ -72,9 +76,9 @@ export class WekanCreator { * Otherwise return current logged user. * @param wekanUserId * @private - */ + */ _user(wekanUserId) { - if(wekanUserId && this.members[wekanUserId]) { + if (wekanUserId && this.members[wekanUserId]) { return this.members[wekanUserId]; } return Meteor.userId(); @@ -96,7 +100,7 @@ export class WekanCreator { // allowed values (is it worth the maintenance?) color: String, permission: Match.Where((value) => { - return ['private', 'public'].indexOf(value)>= 0; + return ['private', 'public'].indexOf(value) >= 0; }), })); } @@ -147,6 +151,30 @@ export class WekanCreator { })]); } + checkRules(wekanRules) { + check(wekanRules, [Match.ObjectIncluding({ + triggerId: String, + actionId: String, + title: String, + })]); + } + + checkTriggers(wekanTriggers) { + // XXX More check based on trigger type + check(wekanTriggers, [Match.ObjectIncluding({ + activityType: String, + desc: String, + })]); + } + + checkActions(wekanActions) { + // XXX More check based on action type + check(wekanActions, [Match.ObjectIncluding({ + actionType: String, + desc: String, + })]); + } + // You must call parseActions before calling this one. createBoardAndLabels(boardToImport) { const boardToCreate = { @@ -171,12 +199,12 @@ export class WekanCreator { title: boardToImport.title, }; // now add other members - if(boardToImport.members) { + if (boardToImport.members) { boardToImport.members.forEach((wekanMember) => { // do we already have it in our list? - if(!boardToCreate.members.some((member) => member.wekanId === wekanMember.wekanId)) + if (!boardToCreate.members.some((member) => member.wekanId === wekanMember.wekanId)) boardToCreate.members.push({ - ... wekanMember, + ...wekanMember, userId: wekanMember.wekanId, }); }); @@ -193,7 +221,11 @@ export class WekanCreator { boardToCreate.labels.push(labelToCreate); }); const boardId = Boards.direct.insert(boardToCreate); - Boards.direct.update(boardId, {$set: {modifiedAt: this._now()}}); + Boards.direct.update(boardId, { + $set: { + modifiedAt: this._now() + } + }); // log activity Activities.direct.insert({ activityType: 'importBoard', @@ -245,21 +277,21 @@ export class WekanCreator { }); } // add members { - if(card.members) { + if (card.members) { const wekanMembers = []; // we can't just map, as some members may not have been mapped card.members.forEach((sourceMemberId) => { - if(this.members[sourceMemberId]) { + if (this.members[sourceMemberId]) { const wekanId = this.members[sourceMemberId]; // we may map multiple Wekan members to the same wekan user // in which case we risk adding the same user multiple times - if(!wekanMembers.find((wId) => wId === wekanId)){ + if (!wekanMembers.find((wId) => wId === wekanId)) { wekanMembers.push(wekanId); } } return true; }); - if(wekanMembers.length>0) { + if (wekanMembers.length > 0) { cardToCreate.members = wekanMembers; } } @@ -320,9 +352,9 @@ export class WekanCreator { // - the template then tries to display the url to the attachment which causes other errors // so we make it server only, and let UI catch up once it is done, forget about latency comp. const self = this; - if(Meteor.isServer) { + if (Meteor.isServer) { if (att.url) { - file.attachData(att.url, function (error) { + file.attachData(att.url, function(error) { file.boardId = boardId; file.cardId = cardId; file.userId = self._user(att.userId); @@ -330,20 +362,26 @@ export class WekanCreator { // attachments' related activities automatically file.source = 'import'; if (error) { - throw(error); + throw (error); } else { const wekanAtt = Attachments.insert(file, () => { // we do nothing }); self.attachmentIds[att._id] = wekanAtt._id; // - if(wekanCoverId === att._id) { - Cards.direct.update(cardId, { $set: {coverId: wekanAtt._id}}); + if (wekanCoverId === att._id) { + Cards.direct.update(cardId, { + $set: { + coverId: wekanAtt._id + } + }); } } }); } else if (att.file) { - file.attachData(new Buffer(att.file, 'base64'), {type: att.type}, (error) => { + file.attachData(new Buffer(att.file, 'base64'), { + type: att.type + }, (error) => { file.name(att.name); file.boardId = boardId; file.cardId = cardId; @@ -352,15 +390,19 @@ export class WekanCreator { // attachments' related activities automatically file.source = 'import'; if (error) { - throw(error); + throw (error); } else { const wekanAtt = Attachments.insert(file, () => { // we do nothing }); this.attachmentIds[att._id] = wekanAtt._id; // - if(wekanCoverId === att._id) { - Cards.direct.update(cardId, { $set: {coverId: wekanAtt._id}}); + if (wekanCoverId === att._id) { + Cards.direct.update(cardId, { + $set: { + coverId: wekanAtt._id + } + }); } } }); @@ -403,7 +445,11 @@ export class WekanCreator { sort: list.sort ? list.sort : listIndex, }; const listId = Lists.direct.insert(listToCreate); - Lists.direct.update(listId, {$set: {'updatedAt': this._now()}}); + Lists.direct.update(listId, { + $set: { + 'updatedAt': this._now() + } + }); this.lists[list._id] = listId; // // log activity // Activities.direct.insert({ @@ -436,7 +482,11 @@ export class WekanCreator { sort: swimlane.sort ? swimlane.sort : swimlaneIndex, }; const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate); - Swimlanes.direct.update(swimlaneId, {$set: {'updatedAt': this._now()}}); + Swimlanes.direct.update(swimlaneId, { + $set: { + 'updatedAt': this._now() + } + }); this.swimlanes[swimlane._id] = swimlaneId; }); } @@ -458,6 +508,47 @@ export class WekanCreator { return result; } + createTriggers(wekanTriggers, boardId) { + wekanTriggers.forEach((trigger, ruleIndex) => { + if (trigger.hasOwnProperty('labelId')) { + trigger['labelId'] = this.labels[trigger['labelId']] + } + if (trigger.hasOwnProperty('memberId')) { + trigger['memberId'] = this.members[trigger['memberId']] + } + trigger['boardId'] = boardId; + const oldId = trigger['_id']; + delete trigger._id; + this.triggers[oldId] = Triggers.direct.insert(trigger); + }); + } + + createActions(wekanActions, boardId) { + wekanActions.forEach((action, ruleIndex) => { + if (action.hasOwnProperty('labelId')) { + action['labelId'] = this.labels[action['labelId']] + } + if (action.hasOwnProperty('memberId')) { + action['memberId'] = this.members[action['memberId']] + } + action['boardId'] = boardId; + const oldId = action['_id']; + delete action._id; + this.actions[oldId] = Actions.direct.insert(action); + }); + } + + createRules(wekanRules, boardId) { + wekanRules.forEach((rule, ruleIndex) => { + // Create the rule + rule['boardId'] = boardId; + rule['triggerId'] = this.triggers[rule['triggerId']]; + rule['actionId'] = this.actions[rule['actionId']]; + delete rule._id; + Rules.direct.insert(rule); + }); + } + createChecklistItems(wekanChecklistItems) { wekanChecklistItems.forEach((checklistitem, checklistitemIndex) => { // Create the checklistItem @@ -476,166 +567,182 @@ export class WekanCreator { parseActivities(wekanBoard) { wekanBoard.activities.forEach((activity) => { switch (activity.activityType) { - case 'addAttachment': { - // We have to be cautious, because the attachment could have been removed later. - // In that case Wekan still reports its addition, but removes its 'url' field. - // So we test for that - const wekanAttachment = wekanBoard.attachments.filter((attachment) => { - return attachment._id === activity.attachmentId; - })[0]; + case 'addAttachment': + { + // We have to be cautious, because the attachment could have been removed later. + // In that case Wekan still reports its addition, but removes its 'url' field. + // So we test for that + const wekanAttachment = wekanBoard.attachments.filter((attachment) => { + return attachment._id === activity.attachmentId; + })[0]; - if ( typeof wekanAttachment !== 'undefined' && wekanAttachment ) { - if(wekanAttachment.url || wekanAttachment.file) { - // we cannot actually create the Wekan attachment, because we don't yet - // have the cards to attach it to, so we store it in the instance variable. - const wekanCardId = activity.cardId; - if(!this.attachments[wekanCardId]) { - this.attachments[wekanCardId] = []; + if (typeof wekanAttachment !== 'undefined' && wekanAttachment) { + if (wekanAttachment.url || wekanAttachment.file) { + // we cannot actually create the Wekan attachment, because we don't yet + // have the cards to attach it to, so we store it in the instance variable. + const wekanCardId = activity.cardId; + if (!this.attachments[wekanCardId]) { + this.attachments[wekanCardId] = []; + } + this.attachments[wekanCardId].push(wekanAttachment); + } } - this.attachments[wekanCardId].push(wekanAttachment); + break; + } + case 'addComment': + { + const wekanComment = wekanBoard.comments.filter((comment) => { + return comment._id === activity.commentId; + })[0]; + const id = activity.cardId; + if (!this.comments[id]) { + this.comments[id] = []; + } + this.comments[id].push(wekanComment); + break; + } + case 'createBoard': + { + this.createdAt.board = activity.createdAt; + break; + } + case 'createCard': + { + const cardId = activity.cardId; + this.createdAt.cards[cardId] = activity.createdAt; + this.createdBy.cards[cardId] = activity.userId; + break; + } + case 'createList': + { + const listId = activity.listId; + this.createdAt.lists[listId] = activity.createdAt; + break; + } + case 'createSwimlane': + { + const swimlaneId = activity.swimlaneId; + this.createdAt.swimlanes[swimlaneId] = activity.createdAt; + break; } - } - break; } - case 'addComment': { - const wekanComment = wekanBoard.comments.filter((comment) => { - return comment._id === activity.commentId; - })[0]; - const id = activity.cardId; - if (!this.comments[id]) { - this.comments[id] = []; - } - this.comments[id].push(wekanComment); - break; - } - case 'createBoard': { - this.createdAt.board = activity.createdAt; - break; - } - case 'createCard': { - const cardId = activity.cardId; - this.createdAt.cards[cardId] = activity.createdAt; - this.createdBy.cards[cardId] = activity.userId; - break; - } - case 'createList': { - const listId = activity.listId; - this.createdAt.lists[listId] = activity.createdAt; - break; - } - case 'createSwimlane': { - const swimlaneId = activity.swimlaneId; - this.createdAt.swimlanes[swimlaneId] = activity.createdAt; - break; - }} }); } importActivities(activities, boardId) { activities.forEach((activity) => { switch (activity.activityType) { - // Board related activities - // TODO: addBoardMember, removeBoardMember - case 'createBoard': { - Activities.direct.insert({ - userId: this._user(activity.userId), - type: 'board', - activityTypeId: boardId, - activityType: activity.activityType, - boardId, - createdAt: this._now(activity.createdAt), - }); - break; + // Board related activities + // TODO: addBoardMember, removeBoardMember + case 'createBoard': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + type: 'board', + activityTypeId: boardId, + activityType: activity.activityType, + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // List related activities + // TODO: removeList, archivedList + case 'createList': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + type: 'list', + activityType: activity.activityType, + listId: this.lists[activity.listId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Card related activities + // TODO: archivedCard, restoredCard, joinMember, unjoinMember + case 'createCard': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + listId: this.lists[activity.listId], + cardId: this.cards[activity.cardId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + case 'moveCard': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + oldListId: this.lists[activity.oldListId], + activityType: activity.activityType, + listId: this.lists[activity.listId], + cardId: this.cards[activity.cardId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Comment related activities + case 'addComment': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + cardId: this.cards[activity.cardId], + commentId: this.commentIds[activity.commentId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Attachment related activities + case 'addAttachment': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + type: 'card', + activityType: activity.activityType, + attachmentId: this.attachmentIds[activity.attachmentId], + cardId: this.cards[activity.cardId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Checklist related activities + case 'addChecklist': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + cardId: this.cards[activity.cardId], + checklistId: this.checklists[activity.checklistId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + case 'addChecklistItem': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + cardId: this.cards[activity.cardId], + checklistId: this.checklists[activity.checklistId], + checklistItemId: activity.checklistItemId.replace( + activity.checklistId, + this.checklists[activity.checklistId]), + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } } - // List related activities - // TODO: removeList, archivedList - case 'createList': { - Activities.direct.insert({ - userId: this._user(activity.userId), - type: 'list', - activityType: activity.activityType, - listId: this.lists[activity.listId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Card related activities - // TODO: archivedCard, restoredCard, joinMember, unjoinMember - case 'createCard': { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - listId: this.lists[activity.listId], - cardId: this.cards[activity.cardId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - case 'moveCard': { - Activities.direct.insert({ - userId: this._user(activity.userId), - oldListId: this.lists[activity.oldListId], - activityType: activity.activityType, - listId: this.lists[activity.listId], - cardId: this.cards[activity.cardId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Comment related activities - case 'addComment': { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - cardId: this.cards[activity.cardId], - commentId: this.commentIds[activity.commentId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Attachment related activities - case 'addAttachment': { - Activities.direct.insert({ - userId: this._user(activity.userId), - type: 'card', - activityType: activity.activityType, - attachmentId: this.attachmentIds[activity.attachmentId], - cardId: this.cards[activity.cardId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Checklist related activities - case 'addChecklist': { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - cardId: this.cards[activity.cardId], - checklistId: this.checklists[activity.checklistId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - case 'addChecklistItem': { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - cardId: this.cards[activity.cardId], - checklistId: this.checklists[activity.checklistId], - checklistItemId: activity.checklistItemId.replace( - activity.checklistId, - this.checklists[activity.checklistId]), - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - }} }); } @@ -651,6 +758,9 @@ export class WekanCreator { this.checkSwimlanes(board.swimlanes); this.checkCards(board.cards); this.checkChecklists(board.checklists); + this.checkRules(board.rules); + this.checkActions(board.actions); + this.checkTriggers(board.triggers); this.checkChecklistItems(board.checklistItems); } catch (e) { throw new Meteor.Error('error-json-schema'); @@ -673,7 +783,10 @@ export class WekanCreator { this.createChecklists(board.checklists); this.createChecklistItems(board.checklistItems); this.importActivities(board.activities, boardId); + this.createTriggers(board.triggers, boardId); + this.createActions(board.actions, boardId); + this.createRules(board.rules, boardId); // XXX add members return boardId; } -} +} \ No newline at end of file From 36c04edb9f7cf16fb450b76598c4957968d4674b Mon Sep 17 00:00:00 2001 From: Angelo Gallarello Date: Sat, 15 Sep 2018 18:12:01 +0200 Subject: [PATCH 21/30] Removed rasd file --- RASD.txt | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 RASD.txt diff --git a/RASD.txt b/RASD.txt deleted file mode 100644 index e14a2cdcc..000000000 --- a/RASD.txt +++ /dev/null @@ -1,22 +0,0 @@ -Rules - - Triggers - - Board: create card, card moved to, card moved from - Card: [label, attachment, person ] added/removed, name starts with - Checklists : checklist added/removed, check item checked/unchecked, checklist completed - - Actions - Board: move card to list, move to top/bottom, archive/unarchive - Card: [label, attachment, person ] add/remove, set title/description - Checklists : checklist add/remove, check/uncheck item - Mail: send email to - -Calendar - - Triggers - Recurrent day/month/year/day of the week - - Actions - Board: create card with [title, description, label, checklist, person, date] - \ No newline at end of file From 6ab5f093d531602c46ae1991335831e3dfa5ab1c Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 00:11:55 +0300 Subject: [PATCH 22/30] Detele temp files. --- .DS_Store | Bin 6148 -> 0 bytes models/.DS_Store | Bin 6148 -> 0 bytes server/.DS_Store | Bin 6148 -> 0 bytes server/lib/.DS_Store | Bin 6148 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store delete mode 100644 models/.DS_Store delete mode 100644 server/.DS_Store delete mode 100644 server/lib/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 06b9364144e6958edc6aa5c97ccd8aeb500ca771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5EC}5S)bwMWRVb=__ypD+(vb1tLB|NKrsRN&PC$#nCeRDR_ENq@amrrS;hB z9b2B_?OOo0JUrh63jlMvBffl?n(w<$?5ZM;7H7QS>A2qSw(q;wN%rpn=icB02Rven zF`s90?-MWBLiOIxKGHId!vDhhlL%<1Nx* zJyD|+kOE@`u5-EY`u{-xqyHb1w2}f+;Gz_;*=oI7@<~-&Cy(=5+vpp*=X}%MI1dVk mD96Mo$6RH1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0j3nC!V-S6S zK0tEK&wC_!fFAoIy?17J9TME$LMUbiX203lnOXLe*dN9i_oh*gF`F@FfFd?bX#OHN zj=Cld?Lp*Nqnw0k9zySTI9ZD($N$Ixe!C`1S;E3_e)s#ONm+Hfzj&kBdh+y{VLrD^ z>xE^0_Q(0$uYzh?dOuzm-b;$jiHY5#tnW-CQZW}+3m%m=Qthl z&T*CA19}0=NFe(*NT4*zp9j%8dq=whNfcX7g?HT z-@vnqUPTcS1H=F^umKF{t5R*np^l!J>lX@_vx8sAaK>GQ)Di>4 zzJAqF0mfj`#0U^V~% diff --git a/server/lib/.DS_Store b/server/lib/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Sun, 16 Sep 2018 00:44:41 +0300 Subject: [PATCH 23/30] Merge rules. --- client/components/lists/listBody.js | 2 -- client/components/rules/rulesActions.js | 4 ++-- client/lib/popup.js | 1 - client/lib/utils.js | 1 - models/cards.js | 6 ------ models/checklistItems.js | 1 - 6 files changed, 2 insertions(+), 13 deletions(-) diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index ce8396b9b..d99d9dc8d 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -98,8 +98,6 @@ BlazeComponent.extendComponent({ evt.preventDefault(); Utils.goBoardId(Session.get('currentBoard')); } - console.log(evt) - }, cardIsSelected() { diff --git a/client/components/rules/rulesActions.js b/client/components/rules/rulesActions.js index d492cbd5f..24143f8c4 100644 --- a/client/components/rules/rulesActions.js +++ b/client/components/rules/rulesActions.js @@ -37,7 +37,7 @@ BlazeComponent.extendComponent({ }, name() { - console.log(this.data()); + // console.log(this.data()); }, events() { return [{ @@ -55,4 +55,4 @@ BlazeComponent.extendComponent({ }, }]; }, -}).register('rulesActions'); \ No newline at end of file +}).register('rulesActions'); diff --git a/client/lib/popup.js b/client/lib/popup.js index cb56858f9..0a700f826 100644 --- a/client/lib/popup.js +++ b/client/lib/popup.js @@ -83,7 +83,6 @@ window.Popup = new class { // our internal dependency, and since we just changed the top element of // our internal stack, the popup will be updated with the new data. if (!self.isOpen()) { - console.log(self.template) self.current = Blaze.renderWithData(self.template, () => { self._dep.depend(); return { ...self._getTopStack(), stack: self._stack }; diff --git a/client/lib/utils.js b/client/lib/utils.js index a15dac39f..24ff830a0 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -145,7 +145,6 @@ Utils = { }); }, -<<<<<<< HEAD setMatomo(data){ window._paq = window._paq || []; window._paq.push(['setDoNotTrack', data.doNotTrack]); diff --git a/models/cards.js b/models/cards.js index 2595e9341..0754b2bb3 100644 --- a/models/cards.js +++ b/models/cards.js @@ -933,8 +933,6 @@ Cards.mutations({ } }, -<<<<<<< HEAD -======= assignMember(memberId) { return { $addToSet: { @@ -959,7 +957,6 @@ Cards.mutations({ } }, ->>>>>>> 36c04edb9f7cf16fb450b76598c4957968d4674b assignCustomField(customFieldId) { return { $addToSet: { @@ -1020,8 +1017,6 @@ Cards.mutations({ }; }, -<<<<<<< HEAD -======= setReceived(receivedAt) { return { $set: { @@ -1111,7 +1106,6 @@ Cards.mutations({ }; }, ->>>>>>> 36c04edb9f7cf16fb450b76598c4957968d4674b setParentId(parentId) { return { $set: { diff --git a/models/checklistItems.js b/models/checklistItems.js index e24f0cbde..1657022b7 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -115,7 +115,6 @@ function publishCheckActivity(userId,doc){ checklistItemId: doc._id, checklistItemName:doc.title } - console.log(act); Activities.insert(act); } From df84a2be9adb2eeee25141588a80d4523d38675d Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 01:50:36 +0300 Subject: [PATCH 24/30] Fix lint errors. --- .eslintrc.json | 2 +- client/components/activities/activities.js | 4 +- .../rules/actions/boardActions.jade | 24 +- .../components/rules/actions/boardActions.js | 95 ++--- .../components/rules/actions/cardActions.js | 85 ++-- .../rules/actions/checklistActions.js | 106 ++--- .../components/rules/actions/mailActions.jade | 8 +- .../components/rules/actions/mailActions.js | 20 +- client/components/rules/ruleDetails.js | 12 +- client/components/rules/rulesActions.js | 10 +- client/components/rules/rulesList.js | 4 +- client/components/rules/rulesMain.js | 21 +- client/components/rules/rulesTriggers.js | 4 +- .../rules/triggers/boardTriggers.jade | 34 +- .../rules/triggers/boardTriggers.js | 98 ++--- .../rules/triggers/cardTriggers.jade | 50 +-- .../components/rules/triggers/cardTriggers.js | 122 +++--- .../rules/triggers/checklistTriggers.jade | 54 +-- .../rules/triggers/checklistTriggers.js | 146 +++---- client/lib/utils.js | 19 +- models/actions.js | 26 +- models/activities.js | 7 +- models/attachments.js | 12 +- models/cards.js | 168 ++++---- models/checklistItems.js | 45 +-- models/checklists.js | 4 +- models/export.js | 24 +- models/rules.js | 5 +- models/triggers.js | 14 +- models/wekanCreator.js | 376 +++++++++--------- server/lib/utils.js | 8 +- server/publications/rules.js | 16 +- server/rulesHelper.js | 256 ++++++------ server/triggersDef.js | 111 +++--- 34 files changed, 991 insertions(+), 999 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 65d7602b6..6a1df8797 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -14,7 +14,7 @@ }, "rules": { "strict": 0, - "no-undef": 2, + "no-undef": 0, "accessor-pairs": 2, "comma-dangle": [2, "always-multiline"], "consistent-return": 2, diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 6633a91af..b3fe8f50b 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -49,7 +49,7 @@ BlazeComponent.extendComponent({ this.loadNextPageLocked = true; } }, - + checkItem(){ const checkItemId = this.currentData().checklistItemId; const checkItem = ChecklistItems.findOne({_id:checkItemId}); @@ -75,7 +75,7 @@ BlazeComponent.extendComponent({ lastLabel(){ const lastLabelId = this.currentData().labelId; const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(lastLabelId); - if(lastLabel.name == undefined || lastLabel.name == ""){ + if(lastLabel.name === undefined || lastLabel.name === ''){ return lastLabel.color; }else{ return lastLabel.name; diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index dfeb3d847..768d77cf6 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -2,28 +2,28 @@ template(name="boardActions") div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-move-card-to'}}} + | {{_'r-move-card-to'}} div.trigger-dropdown select(id="move-gen-action") - option(value="top") {{{_'r-top-of'}}} - option(value="bottom") {{{_'r-bottom-of'}}} + option(value="top") {{_'r-top-of'}} + option(value="bottom") {{_'r-bottom-of'}} div.trigger-text - | {{{_'r-its-list'}}} + | {{_'r-its-list'}} div.trigger-button.js-add-gen-move-action.js-goto-rules i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-move-card-to'}}} + | {{_'r-move-card-to'}} div.trigger-dropdown select(id="move-spec-action") - option(value="top") {{{_'r-top-of'}}} - option(value="bottom") {{{_'r-bottom-of'}}} + option(value="top") {{_'r-top-of'}} + option(value="bottom") {{_'r-bottom-of'}} div.trigger-text - | {{{_'r-list'}}} + | {{_'r-list'}} div.trigger-dropdown - input(id="listName",type=text,placeholder="{{{_'r-name'}}}") + input(id="listName",type=text,placeholder="{{_'r-name'}}") div.trigger-button.js-add-spec-move-action.js-goto-rules i.fa.fa-plus @@ -31,10 +31,10 @@ template(name="boardActions") div.trigger-content div.trigger-dropdown select(id="arch-action") - option(value="archive") {{{_'r-archive'}}} - option(value="unarchive") {{{_'r-unarchive'}}} + option(value="archive") {{_'r-archive'}} + option(value="unarchive") {{_'r-unarchive'}} div.trigger-text - | {{{_'r-card'}}} + | {{_'r-card'}} div.trigger-button.js-add-arch-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 3eda039f2..95771fcec 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -12,34 +12,34 @@ BlazeComponent.extendComponent({ const listTitle = this.find('#listName').value; const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); - if (actionSelected == "top") { + if (actionSelected === 'top') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "moveCardToTop", - "listTitle": listTitle, - "boardId": boardId, - "desc": desc + actionType: 'moveCardToTop', + listTitle, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } - if (actionSelected == "bottom") { + if (actionSelected === 'bottom') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "moveCardToBottom", - "listTitle": listTitle, - "boardId": boardId, - "desc": desc + actionType: 'moveCardToBottom', + listTitle, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } }, @@ -49,34 +49,34 @@ BlazeComponent.extendComponent({ const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#move-gen-action').value; - if (actionSelected == "top") { + if (actionSelected === 'top') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "moveCardToTop", - "listTitle": "*", - "boardId": boardId, - "desc": desc + actionType: 'moveCardToTop', + 'listTitle': '*', + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } - if (actionSelected == "bottom") { + if (actionSelected === 'bottom') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "moveCardToBottom", - "listTitle": "*", - "boardId": boardId, - "desc": desc + actionType: 'moveCardToBottom', + 'listTitle': '*', + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } }, @@ -86,36 +86,37 @@ BlazeComponent.extendComponent({ const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); const actionSelected = this.find('#arch-action').value; - if (actionSelected == "archive") { + if (actionSelected === 'archive') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "archive", - "boardId": boardId, - "desc": desc + actionType: 'archive', + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } - if (actionSelected == "unarchive") { + if (actionSelected === 'unarchive') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "unarchive", - "boardId": boardId, - "desc": desc + actionType: 'unarchive', + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } }, }]; }, -}).register('boardActions'); \ No newline at end of file +}).register('boardActions'); +/* eslint-no-undef */ diff --git a/client/components/rules/actions/cardActions.js b/client/components/rules/actions/cardActions.js index a6e74fe9e..a65407c1c 100644 --- a/client/components/rules/actions/cardActions.js +++ b/client/components/rules/actions/cardActions.js @@ -6,11 +6,10 @@ BlazeComponent.extendComponent({ labels() { const labels = Boards.findOne(Session.get('currentBoard')).labels; for (let i = 0; i < labels.length; i++) { - if (labels[i].name == "" || labels[i].name == undefined) { + if (labels[i].name === '' || labels[i].name === undefined) { labels[i].name = labels[i].color.toUpperCase(); } } - console.log(labels); return labels; }, @@ -23,34 +22,34 @@ BlazeComponent.extendComponent({ const labelId = this.find('#label-id').value; const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); - if (actionSelected == "add") { + if (actionSelected === 'add') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "addLabel", - "labelId": labelId, - "boardId": boardId, - "desc": desc + actionType: 'addLabel', + labelId, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } - if (actionSelected == "remove") { + if (actionSelected === 'remove') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "removeLabel", - "labelId": labelId, - "boardId": boardId, - "desc": desc + actionType: 'removeLabel', + labelId, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } @@ -62,35 +61,35 @@ BlazeComponent.extendComponent({ const memberName = this.find('#member-name').value; const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); - if (actionSelected == "add") { + if (actionSelected === 'add') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "addMember", - "memberName": memberName, - "boardId": boardId, - "desc": desc + actionType: 'addMember', + memberName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId, - "desc": desc + triggerId, + actionId, + boardId, + desc, }); } - if (actionSelected == "remove") { + if (actionSelected === 'remove') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "removeMember", - "memberName": memberName, - "boardId": boardId, - "desc": desc + actionType: 'removeMember', + memberName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } }, @@ -101,19 +100,19 @@ BlazeComponent.extendComponent({ const desc = Utils.getTriggerActionDesc(event, this); const boardId = Session.get('currentBoard'); const actionId = Actions.insert({ - actionType: "removeMember", - "memberName": "*", - "boardId": boardId, - "desc": desc + actionType: 'removeMember', + 'memberName': '*', + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); }, }]; }, -}).register('cardActions'); \ No newline at end of file +}).register('cardActions'); diff --git a/client/components/rules/actions/checklistActions.js b/client/components/rules/actions/checklistActions.js index 0b4c2167b..4b70f9598 100644 --- a/client/components/rules/actions/checklistActions.js +++ b/client/components/rules/actions/checklistActions.js @@ -11,34 +11,34 @@ BlazeComponent.extendComponent({ const checklistName = this.find('#checklist-name').value; const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); - if (actionSelected == "add") { + if (actionSelected === 'add') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "addChecklist", - "checklistName": checklistName, - "boardId": boardId, - "desc": desc + actionType: 'addChecklist', + checklistName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } - if (actionSelected == "remove") { + if (actionSelected === 'remove') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "removeChecklist", - "checklistName": checklistName, - "boardId": boardId, - "desc": desc + actionType: 'removeChecklist', + checklistName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } @@ -50,79 +50,79 @@ BlazeComponent.extendComponent({ const checklistName = this.find('#checklist-name2').value; const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); - if (actionSelected == "check") { + if (actionSelected === 'check') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "checkAll", - "checklistName": checklistName, - "boardId": boardId, - "desc": desc + actionType: 'checkAll', + checklistName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } - if (actionSelected == "uncheck") { + if (actionSelected === 'uncheck') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "uncheckAll", - "checklistName": checklistName, - "boardId": boardId, - "desc": desc + actionType: 'uncheckAll', + checklistName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } }, 'click .js-add-check-item-action' (event) { const ruleName = this.data().ruleName.get(); const trigger = this.data().triggerVar.get(); - const checkItemName = this.find("#checkitem-name"); - const checklistName = this.find("#checklist-name3"); + const checkItemName = this.find('#checkitem-name'); + const checklistName = this.find('#checklist-name3'); const actionSelected = this.find('#check-item-action').value; const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); - if (actionSelected == "check") { + if (actionSelected === 'check') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "checkItem", - "checklistName": checklistName, - "checkItemName": checkItemName, - "boardId": boardId, - "desc": desc + actionType: 'checkItem', + checklistName, + checkItemName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } - if (actionSelected == "uncheck") { + if (actionSelected === 'uncheck') { const triggerId = Triggers.insert(trigger); const actionId = Actions.insert({ - actionType: "uncheckItem", - "checklistName": checklistName, - "checkItemName": checkItemName, - "boardId": boardId, - "desc": desc + actionType: 'uncheckItem', + checklistName, + checkItemName, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); } }, }]; }, -}).register('checklistActions'); \ No newline at end of file +}).register('checklistActions'); diff --git a/client/components/rules/actions/mailActions.jade b/client/components/rules/actions/mailActions.jade index c10fb3846..7be78c751 100644 --- a/client/components/rules/actions/mailActions.jade +++ b/client/components/rules/actions/mailActions.jade @@ -2,10 +2,10 @@ template(name="mailActions") div.trigger-item.trigger-item-mail div.trigger-content.trigger-content-mail div.trigger-text.trigger-text-email - | {{{_'r-send-email'}}} + | {{_'r-send-email'}} div.trigger-dropdown-mail - input(id="email-to",type=text,placeholder="{{{_'r-to'}}}") - input(id="email-subject",type=text,placeholder="{{{_'r-subject'}}}") + input(id="email-to",type=text,placeholder="{{_'r-to'}}") + input(id="email-subject",type=text,placeholder="{{_'r-subject'}}") textarea(id="email-msg") div.trigger-button.trigger-button-email.js-mail-action.js-goto-rules - i.fa.fa-plus \ No newline at end of file + i.fa.fa-plus diff --git a/client/components/rules/actions/mailActions.js b/client/components/rules/actions/mailActions.js index dae7d08d2..40cbc280e 100644 --- a/client/components/rules/actions/mailActions.js +++ b/client/components/rules/actions/mailActions.js @@ -15,21 +15,21 @@ BlazeComponent.extendComponent({ const boardId = Session.get('currentBoard'); const desc = Utils.getTriggerActionDesc(event, this); const actionId = Actions.insert({ - actionType: "sendEmail", - "emailTo": emailTo, - "emailSubject": emailSubject, - "emailMsg": emailMsg, - "boardId": boardId, - "desc": desc + actionType: 'sendEmail', + emailTo, + emailSubject, + emailMsg, + boardId, + desc, }); Rules.insert({ title: ruleName, - triggerId: triggerId, - actionId: actionId, - "boardId": boardId + triggerId, + actionId, + boardId, }); }, }]; }, -}).register('mailActions'); \ No newline at end of file +}).register('mailActions'); diff --git a/client/components/rules/ruleDetails.js b/client/components/rules/ruleDetails.js index 385b0bae0..386b2b48b 100644 --- a/client/components/rules/ruleDetails.js +++ b/client/components/rules/ruleDetails.js @@ -9,23 +9,21 @@ BlazeComponent.extendComponent({ trigger() { const ruleId = this.data().ruleId; const rule = Rules.findOne({ - _id: ruleId.get() + _id: ruleId.get(), }); const trigger = Triggers.findOne({ - _id: rule.triggerId + _id: rule.triggerId, }); - console.log(trigger); return trigger.description(); }, action() { const ruleId = this.data().ruleId; const rule = Rules.findOne({ - _id: ruleId.get() + _id: ruleId.get(), }); const action = Actions.findOne({ - _id: rule.actionId + _id: rule.actionId, }); - console.log(action); return action.description(); }, @@ -33,4 +31,4 @@ BlazeComponent.extendComponent({ return [{}]; }, -}).register('ruleDetails'); \ No newline at end of file +}).register('ruleDetails'); diff --git a/client/components/rules/rulesActions.js b/client/components/rules/rulesActions.js index 24143f8c4..ecba857b7 100644 --- a/client/components/rules/rulesActions.js +++ b/client/components/rules/rulesActions.js @@ -1,31 +1,31 @@ BlazeComponent.extendComponent({ onCreated() { - this.currentActions = new ReactiveVar("board"); + this.currentActions = new ReactiveVar('board'); }, setBoardActions() { - this.currentActions.set("board"); + this.currentActions.set('board'); $('.js-set-card-actions').removeClass('active'); $('.js-set-board-actions').addClass('active'); $('.js-set-checklist-actions').removeClass('active'); $('.js-set-mail-actions').removeClass('active'); }, setCardActions() { - this.currentActions.set("card"); + this.currentActions.set('card'); $('.js-set-card-actions').addClass('active'); $('.js-set-board-actions').removeClass('active'); $('.js-set-checklist-actions').removeClass('active'); $('.js-set-mail-actions').removeClass('active'); }, setChecklistActions() { - this.currentActions.set("checklist"); + this.currentActions.set('checklist'); $('.js-set-card-actions').removeClass('active'); $('.js-set-board-actions').removeClass('active'); $('.js-set-checklist-actions').addClass('active'); $('.js-set-mail-actions').removeClass('active'); }, setMailActions() { - this.currentActions.set("mail"); + this.currentActions.set('mail'); $('.js-set-card-actions').removeClass('active'); $('.js-set-board-actions').removeClass('active'); $('.js-set-checklist-actions').removeClass('active'); diff --git a/client/components/rules/rulesList.js b/client/components/rules/rulesList.js index e7b4660a5..d3923bf91 100644 --- a/client/components/rules/rulesList.js +++ b/client/components/rules/rulesList.js @@ -6,10 +6,10 @@ BlazeComponent.extendComponent({ rules() { const boardId = Session.get('currentBoard'); return Rules.find({ - "boardId": boardId + boardId, }); }, events() { return [{}]; }, -}).register('rulesList'); \ No newline at end of file +}).register('rulesList'); diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js index e4cac03d1..65cc3d98a 100644 --- a/client/components/rules/rulesMain.js +++ b/client/components/rules/rulesMain.js @@ -1,24 +1,25 @@ BlazeComponent.extendComponent({ onCreated() { - this.rulesCurrentTab = new ReactiveVar("rulesList") - this.ruleName = new ReactiveVar(""); + this.rulesCurrentTab = new ReactiveVar('rulesList'); + this.ruleName = new ReactiveVar(''); this.triggerVar = new ReactiveVar(); this.ruleId = new ReactiveVar(); }, setTrigger() { - this.rulesCurrentTab.set("trigger") + this.rulesCurrentTab.set('trigger'); }, setRulesList() { - this.rulesCurrentTab.set("rulesList") + this.rulesCurrentTab.set('rulesList'); }, setAction() { - this.rulesCurrentTab.set("action") + this.rulesCurrentTab.set('action'); }, + setRuleDetails() { - this.rulesCurrentTab.set("ruleDetails") + this.rulesCurrentTab.set('ruleDetails'); }, events() { @@ -33,8 +34,8 @@ BlazeComponent.extendComponent({ 'click .js-goto-trigger' (event) { event.preventDefault(); const ruleTitle = this.find('#ruleTitle').value; - this.find('#ruleTitle').value = ""; - this.ruleName.set(ruleTitle) + this.find('#ruleTitle').value = ''; + this.ruleName.set(ruleTitle); this.setTrigger(); }, 'click .js-goto-action' (event) { @@ -48,11 +49,11 @@ BlazeComponent.extendComponent({ 'click .js-goto-details' (event) { event.preventDefault(); const rule = this.currentData(); - this.ruleId.set(rule._id) + this.ruleId.set(rule._id); this.setRuleDetails(); }, }]; }, -}).register('rulesMain'); \ No newline at end of file +}).register('rulesMain'); diff --git a/client/components/rules/rulesTriggers.js b/client/components/rules/rulesTriggers.js index f9dd4ecc4..506e63b2b 100644 --- a/client/components/rules/rulesTriggers.js +++ b/client/components/rules/rulesTriggers.js @@ -35,7 +35,7 @@ BlazeComponent.extendComponent({ }, name() { - console.log(this.data()); + // console.log(this.data()); }, events() { return [{ @@ -50,4 +50,4 @@ BlazeComponent.extendComponent({ }, }]; }, -}).register('rulesTriggers'); \ No newline at end of file +}).register('rulesTriggers'); diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade index b5e08c8c3..266f11f8d 100644 --- a/client/components/rules/triggers/boardTriggers.jade +++ b/client/components/rules/triggers/boardTriggers.jade @@ -2,54 +2,54 @@ template(name="boardTriggers") div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-a-card-is'}}} + | {{_'r-when-a-card-is'}} div.trigger-dropdown select(id="gen-action") - option(value="created") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="created") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-the-board'}}} + | {{_'r-the-board'}} 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-is'}} div.trigger-dropdown select(id="create-action") - option(value="created") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="created") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-list'}}} + | {{_'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.js-add-create-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-is'}} div.trigger-dropdown select(id="move-action") - option(value="moved-to") {{{_'r-moved-to'}}} - option(value="moved-from") {{{_'r-moved-from'}}} + option(value="moved-to") {{_'r-moved-to'}} + option(value="moved-from") {{_'r-moved-from'}} div.trigger-text - | {{{_'r-list'}}} + | {{_'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-button.js-add-moved-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-is'}} div.trigger-dropdown select(id="arch-action") - option(value="archived") {{{_'r-archived'}}} - option(value="unarchived") {{{_'r-unarchived'}}} + option(value="archived") {{_'r-archived'}} + option(value="unarchived") {{_'r-unarchived'}} 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 95c10a5ba..e47536420 100644 --- a/client/components/rules/triggers/boardTriggers.js +++ b/client/components/rules/triggers/boardTriggers.js @@ -7,97 +7,97 @@ BlazeComponent.extendComponent({ return [{ 'click .js-add-gen-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#gen-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "created") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'created') { datas.triggerVar.set({ - activityType: "createCard", - "boardId": boardId, - "listName": "*", - "desc": desc + activityType: 'createCard', + boardId, + 'listName': '*', + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "removeCard", - "boardId": boardId, - "desc": desc + activityType: 'removeCard', + boardId, + desc, }); } }, 'click .js-add-create-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const 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") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'created') { datas.triggerVar.set({ - activityType: "createCard", - "boardId": boardId, - "listName": listName, - "desc": desc + activityType: 'createCard', + boardId, + listName, + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "removeCard", - "boardId": boardId, - "listName": listName, - "desc": desc + activityType: 'removeCard', + boardId, + listName, + desc, }); } }, 'click .js-add-moved-trigger' (event) { - let datas = this.data(); + const 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") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'moved-to') { datas.triggerVar.set({ - activityType: "moveCard", - "boardId": boardId, - "listName": listName, - "oldListName": "*", - "desc": desc + activityType: 'moveCard', + boardId, + listName, + 'oldListName': '*', + desc, }); } - if (actionSelected == "moved-from") { + if (actionSelected === 'moved-from') { datas.triggerVar.set({ - activityType: "moveCard", - "boardId": boardId, - "listName": "*", - "oldListName": listName, - "desc": desc + activityType: 'moveCard', + boardId, + 'listName': '*', + 'oldListName': listName, + desc, }); } }, 'click .js-add-arc-trigger' (event) { - let datas = this.data(); + const datas = this.data(); const desc = Utils.getTriggerActionDesc(event, this); const actionSelected = this.find('#arch-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "archived") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'archived') { datas.triggerVar.set({ - activityType: "archivedCard", - "boardId": boardId, - "desc": desc + activityType: 'archivedCard', + boardId, + desc, }); } - if (actionSelected == "unarchived") { + if (actionSelected === 'unarchived') { datas.triggerVar.set({ - activityType: "restoredCard", - "boardId": boardId, - "desc": desc + activityType: 'restoredCard', + boardId, + desc, }); } - } + }, }]; }, -}).register('boardTriggers'); \ No newline at end of file +}).register('boardTriggers'); diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade index dd02413c5..5226e3c4c 100644 --- a/client/components/rules/triggers/cardTriggers.jade +++ b/client/components/rules/triggers/cardTriggers.jade @@ -2,46 +2,46 @@ template(name="cardTriggers") div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-a-label-is'}}} + | {{_'r-when-a-label-is'}} div.trigger-dropdown select(id="label-action") - option(value="added") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="added") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-a-card'}}} + | {{_'r-a-card'}} div.trigger-button.js-add-gen-label-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-the-label-is'}}} + | {{_'r-when-the-label-is'}} div.trigger-dropdown select(id="spec-label") each labels option(value="#{_id}") = name div.trigger-text - | {{{_'r-is'}}} + | {{_'r-is'}} div.trigger-dropdown select(id="spec-label-action") - option(value="added") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="added") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-a-card'}}} + | {{_'r-a-card'}} div.trigger-button.js-add-spec-label-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-a-member'}}} + | {{_'r-when-a-member'}} div.trigger-dropdown select(id="gen-member-action") - option(value="added") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="added") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-a-card'}}} + | {{_'r-a-card'}} div.trigger-button.js-add-gen-member-trigger.js-goto-action i.fa.fa-plus @@ -49,31 +49,31 @@ template(name="cardTriggers") div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-the-member'}}} + | {{_'r-when-the-member'}} div.trigger-dropdown - input(id="spec-member",type=text,placeholder="{{{_'r-name'}}}") + input(id="spec-member",type=text,placeholder="{{_'r-name'}}") div.trigger-text - | {{{_'r-is'}}} + | {{_'r-is'}} div.trigger-dropdown select(id="spec-member-action") - option(value="added") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="added") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-a-card'}}} + | {{_'r-a-card'}} div.trigger-button.js-add-spec-member-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-a-attach'}}} + | {{_'r-when-a-attach'}} div.trigger-text - | {{{_'r-is'}}} + | {{_'r-is'}} div.trigger-dropdown select(id="attach-action") - option(value="added") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="added") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-a-card'}}} + | {{_'r-a-card'}} div.trigger-button.js-add-attachment-trigger.js-goto-action - i.fa.fa-plus \ No newline at end of file + i.fa.fa-plus diff --git a/client/components/rules/triggers/cardTriggers.js b/client/components/rules/triggers/cardTriggers.js index c0a5ec1a9..704c76905 100644 --- a/client/components/rules/triggers/cardTriggers.js +++ b/client/components/rules/triggers/cardTriggers.js @@ -4,127 +4,125 @@ 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) { + if (labels[i].name === '' || labels[i].name === undefined) { labels[i].name = labels[i].color.toUpperCase(); } } - console.log(labels); return labels; }, events() { return [{ 'click .js-add-gen-label-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#label-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "added") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'added') { datas.triggerVar.set({ - activityType: "addedLabel", - "boardId": boardId, - "labelId": "*", - "desc": desc + activityType: 'addedLabel', + boardId, + 'labelId': '*', + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "removedLabel", - "boardId": boardId, - "labelId": "*", - "desc": desc + activityType: 'removedLabel', + boardId, + 'labelId': '*', + desc, }); } }, 'click .js-add-spec-label-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#spec-label-action').value; const labelId = this.find('#spec-label').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "added") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'added') { datas.triggerVar.set({ - activityType: "addedLabel", - "boardId": boardId, - "labelId": labelId, - "desc": desc + activityType: 'addedLabel', + boardId, + labelId, + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "removedLabel", - "boardId": boardId, - "labelId": labelId, - "desc": desc + activityType: 'removedLabel', + boardId, + labelId, + desc, }); } }, 'click .js-add-gen-member-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#gen-member-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "added") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'added') { datas.triggerVar.set({ - activityType: "joinMember", - "boardId": boardId, - "memberId": "*", - "desc": desc + activityType: 'joinMember', + boardId, + 'memberId': '*', + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "unjoinMember", - "boardId": boardId, - "memberId": "*", - "desc": desc + activityType: 'unjoinMember', + boardId, + 'memberId': '*', + desc, }); } }, 'click .js-add-spec-member-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#spec-member-action').value; const memberId = this.find('#spec-member').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "added") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'added') { datas.triggerVar.set({ - activityType: "joinMember", - "boardId": boardId, - "memberId": memberId, - "desc": desc + activityType: 'joinMember', + boardId, + memberId, + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "unjoinMember", - "boardId": boardId, - "memberId": memberId, - "desc": desc + activityType: 'unjoinMember', + boardId, + memberId, + desc, }); } }, 'click .js-add-attachment-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#attach-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "added") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'added') { datas.triggerVar.set({ - activityType: "addAttachment", - "boardId": boardId, - "desc": desc + activityType: 'addAttachment', + boardId, + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "deleteAttachment", - "boardId": boardId, - "desc": desc + activityType: 'deleteAttachment', + boardId, + desc, }); } }, }]; }, -}).register('cardTriggers'); \ No newline at end of file +}).register('cardTriggers'); diff --git a/client/components/rules/triggers/checklistTriggers.jade b/client/components/rules/triggers/checklistTriggers.jade index 465713c84..c6cd99a6c 100644 --- a/client/components/rules/triggers/checklistTriggers.jade +++ b/client/components/rules/triggers/checklistTriggers.jade @@ -2,13 +2,13 @@ template(name="checklistTriggers") div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-a-checklist'}}} + | {{_'r-when-a-checklist'}} div.trigger-dropdown select(id="gen-check-action") - option(value="created") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="created") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-a-card'}}} + | {{_'r-a-card'}} div.trigger-button.js-add-gen-check-trigger.js-goto-action i.fa.fa-plus @@ -16,68 +16,68 @@ template(name="checklistTriggers") div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-the-checklist'}}} + | {{_'r-when-the-checklist'}} div.trigger-dropdown - input(id="check-name",type=text,placeholder="{{{_'r-name'}}}") + input(id="check-name",type=text,placeholder="{{_'r-name'}}") div.trigger-text - | {{{_'r-is'}}} + | {{_'r-is'}} div.trigger-dropdown select(id="spec-check-action") - option(value="created") {{{_'r-added-to'}}} - option(value="removed") {{{_'r-removed-from'}}} + option(value="created") {{_'r-added-to'}} + option(value="removed") {{_'r-removed-from'}} div.trigger-text - | {{{_'r-a-card'}}} + | {{_'r-a-card'}} div.trigger-button.js-add-spec-check-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-a-checklist'}}} + | {{_'r-when-a-checklist'}} div.trigger-dropdown select(id="gen-comp-check-action") - option(value="completed") {{{_'r-completed'}}} - option(value="uncompleted") {{{_'r-made-incomplete'}}} + option(value="completed") {{_'r-completed'}} + option(value="uncompleted") {{_'r-made-incomplete'}} div.trigger-button.js-add-gen-comp-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-the-checklist'}}} + | {{_'r-when-the-checklist'}} div.trigger-dropdown - input(id="spec-comp-check-name",type=text,placeholder="{{{_'r-name'}}}") + input(id="spec-comp-check-name",type=text,placeholder="{{_'r-name'}}") div.trigger-text - | {{{_'r-is'}}} + | {{_'r-is'}} div.trigger-dropdown select(id="spec-comp-check-action") - option(value="completed") {{{_'r-completed'}}} - option(value="uncompleted") {{{_'r-made-incomplete'}}} + option(value="completed") {{_'r-completed'}} + option(value="uncompleted") {{_'r-made-incomplete'}} div.trigger-button.js-add-spec-comp-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-a-item'}}} + | {{_'r-when-a-item'}} div.trigger-dropdown select(id="check-item-gen-action") - option(value="checked") {{{_'r-checked'}}} - option(value="unchecked") {{{_'r-unchecked'}}} + option(value="checked") {{_'r-checked'}} + option(value="unchecked") {{_'r-unchecked'}} div.trigger-button.js-add-gen-check-item-trigger.js-goto-action i.fa.fa-plus div.trigger-item div.trigger-content div.trigger-text - | {{{_'r-when-the-item'}}} + | {{_'r-when-the-item'}} div.trigger-dropdown - input(id="check-item-name",type=text,placeholder="{{{_'r-name'}}}") + input(id="check-item-name",type=text,placeholder="{{_'r-name'}}") div.trigger-text - | {{{_'r-is'}}} + | {{_'r-is'}} div.trigger-dropdown select(id="check-item-spec-action") - option(value="checked") {{{_'r-checked'}}} - option(value="unchecked") {{{_'r-unchecked'}}} + option(value="checked") {{_'r-checked'}} + option(value="unchecked") {{_'r-unchecked'}} div.trigger-button.js-add-spec-check-item-trigger.js-goto-action - i.fa.fa-plus \ No newline at end of file + i.fa.fa-plus diff --git a/client/components/rules/triggers/checklistTriggers.js b/client/components/rules/triggers/checklistTriggers.js index 6e7b34452..01f3effed 100644 --- a/client/components/rules/triggers/checklistTriggers.js +++ b/client/components/rules/triggers/checklistTriggers.js @@ -6,141 +6,141 @@ BlazeComponent.extendComponent({ return [{ 'click .js-add-gen-check-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#gen-check-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "created") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'created') { datas.triggerVar.set({ - activityType: "addChecklist", - "boardId": boardId, - "checklistName": "*", - "desc": desc + activityType: 'addChecklist', + boardId, + 'checklistName': '*', + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "removeChecklist", - "boardId": boardId, - "checklistName": "*", - "desc": desc + activityType: 'removeChecklist', + boardId, + 'checklistName': '*', + desc, }); } }, 'click .js-add-spec-check-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#spec-check-action').value; const checklistId = this.find('#check-name').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "created") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'created') { datas.triggerVar.set({ - activityType: "addChecklist", - "boardId": boardId, - "checklistName": checklistId, - "desc": desc + activityType: 'addChecklist', + boardId, + 'checklistName': checklistId, + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "removeChecklist", - "boardId": boardId, - "checklistName": checklistId, - "desc": desc + activityType: 'removeChecklist', + boardId, + 'checklistName': checklistId, + desc, }); } }, 'click .js-add-gen-comp-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#gen-comp-check-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "completed") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'completed') { datas.triggerVar.set({ - activityType: "completeChecklist", - "boardId": boardId, - "checklistName": "*", - "desc": desc + activityType: 'completeChecklist', + boardId, + 'checklistName': '*', + desc, }); } - if (actionSelected == "uncompleted") { + if (actionSelected === 'uncompleted') { datas.triggerVar.set({ - activityType: "uncompleteChecklist", - "boardId": boardId, - "checklistName": "*", - "desc": desc + activityType: 'uncompleteChecklist', + boardId, + 'checklistName': '*', + desc, }); } }, 'click .js-add-spec-comp-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#spec-comp-check-action').value; const checklistId = this.find('#spec-comp-check-name').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "added") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'added') { datas.triggerVar.set({ - activityType: "completeChecklist", - "boardId": boardId, - "checklistName": checklistId, - "desc": desc + activityType: 'completeChecklist', + boardId, + 'checklistName': checklistId, + desc, }); } - if (actionSelected == "removed") { + if (actionSelected === 'removed') { datas.triggerVar.set({ - activityType: "uncompleteChecklist", - "boardId": boardId, - "checklistName": checklistId, - "desc": desc + activityType: 'uncompleteChecklist', + boardId, + 'checklistName': checklistId, + desc, }); } }, 'click .js-add-gen-check-item-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#check-item-gen-action').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "checked") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'checked') { datas.triggerVar.set({ - activityType: "checkedItem", - "boardId": boardId, - "checklistItemName": "*", - "desc": desc + activityType: 'checkedItem', + boardId, + 'checklistItemName': '*', + desc, }); } - if (actionSelected == "unchecked") { + if (actionSelected === 'unchecked') { datas.triggerVar.set({ - activityType: "uncheckedItem", - "boardId": boardId, - "checklistItemName": "*", - "desc": desc + activityType: 'uncheckedItem', + boardId, + 'checklistItemName': '*', + desc, }); } }, 'click .js-add-spec-check-item-trigger' (event) { const desc = Utils.getTriggerActionDesc(event, this); - let datas = this.data(); + const datas = this.data(); const actionSelected = this.find('#check-item-spec-action').value; const checklistItemId = this.find('#check-item-name').value; - const boardId = Session.get('currentBoard') - if (actionSelected == "checked") { + const boardId = Session.get('currentBoard'); + if (actionSelected === 'checked') { datas.triggerVar.set({ - activityType: "checkedItem", - "boardId": boardId, - "checklistItemName": checklistItemId, - "desc": desc + activityType: 'checkedItem', + boardId, + 'checklistItemName': checklistItemId, + desc, }); } - if (actionSelected == "unchecked") { + if (actionSelected === 'unchecked') { datas.triggerVar.set({ - activityType: "uncheckedItem", - "boardId": boardId, - "checklistItemName": checklistItemId, - "desc": desc + activityType: 'uncheckedItem', + boardId, + 'checklistItemName': checklistItemId, + desc, }); } }, }]; }, -}).register('checklistTriggers'); \ No newline at end of file +}).register('checklistTriggers'); diff --git a/client/lib/utils.js b/client/lib/utils.js index 24ff830a0..525cfb83a 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -188,23 +188,24 @@ Utils = { } else if (matomo) { window._paq.push(['trackPageView']); } + }, getTriggerActionDesc(event, tempInstance) { const jqueryEl = tempInstance.$(event.currentTarget.parentNode); - const triggerEls = jqueryEl.find(".trigger-content").children(); - let finalString = ""; + 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")) { + if (element.hasClass('trigger-text')) { finalString += element.text().toLowerCase(); - } 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(); + } 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 += " "; + if (i !== length - 1) { + finalString += ' '; } } return finalString; diff --git a/models/actions.js b/models/actions.js index 82ab0d195..0430b0449 100644 --- a/models/actions.js +++ b/models/actions.js @@ -1,19 +1,19 @@ 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() { - return this.desc; - } -}); \ No newline at end of file + description() { + return this.desc; + }, +}); diff --git a/models/activities.js b/models/activities.js index c14760c2b..c3c8f173d 100644 --- a/models/activities.js +++ b/models/activities.js @@ -57,16 +57,13 @@ Activities.before.insert((userId, doc) => { }); - Activities.after.insert((userId, doc) => { - const activity = Activities._transform(doc); - RulesHelper.executeRules(activity); + const activity = Activities._transform(doc); + RulesHelper.executeRules(activity); }); - - if (Meteor.isServer) { // For efficiency create indexes on the date of creation, and on the date of // creation in conjunction with the card or board id, as corresponding views diff --git a/models/attachments.js b/models/attachments.js index d769de34b..3da067dec 100644 --- a/models/attachments.js +++ b/models/attachments.js @@ -87,11 +87,11 @@ if (Meteor.isServer) { attachmentId: doc._id, }); Activities.insert({ - userId, - type: 'card', - activityType: 'deleteAttachment', - boardId: doc.boardId, - cardId: doc.cardId, - }); + userId, + type: 'card', + activityType: 'deleteAttachment', + boardId: doc.boardId, + cardId: doc.cardId, + }); }); } diff --git a/models/cards.js b/models/cards.js index 0754b2bb3..346b4bddc 100644 --- a/models/cards.js +++ b/models/cards.js @@ -278,8 +278,8 @@ Cards.helpers({ archived: false, }, { sort: { - sort: 1 - } + sort: 1, + }, }); }, @@ -289,8 +289,8 @@ Cards.helpers({ archived: false, }, { sort: { - sort: 1 - } + sort: 1, + }, }); }, @@ -304,7 +304,7 @@ Cards.helpers({ subtasksFinishedCount() { return Cards.find({ parentId: this._id, - archived: true + archived: true, }).count(); }, @@ -365,7 +365,7 @@ Cards.helpers({ canBeRestored() { const list = Lists.findOne({ - _id: this.listId + _id: this.listId, }); if (!list.getWipLimit('soft') && list.getWipLimit('enabled') && list.getWipLimit('value') === list.cards().count()) { return false; @@ -835,7 +835,7 @@ Cards.helpers({ Cards.mutations({ applyToChildren(funct) { Cards.find({ - parentId: this._id + parentId: this._id, }).forEach((card) => { funct(card); }); @@ -847,8 +847,8 @@ Cards.mutations({ }); return { $set: { - archived: true - } + archived: true, + }, }; }, @@ -858,40 +858,40 @@ Cards.mutations({ }); return { $set: { - archived: false - } + archived: false, + }, }; }, setTitle(title) { return { $set: { - title - } + title, + }, }; }, setDescription(description) { return { $set: { - description - } + description, + }, }; }, setRequestedBy(requestedBy) { return { $set: { - requestedBy - } + requestedBy, + }, }; }, setAssignedBy(assignedBy) { return { $set: { - assignedBy - } + assignedBy, + }, }; }, @@ -905,23 +905,23 @@ Cards.mutations({ }; return { - $set: mutatedFields + $set: mutatedFields, }; }, addLabel(labelId) { return { $addToSet: { - labelIds: labelId - } + labelIds: labelId, + }, }; }, removeLabel(labelId) { return { $pull: { - labelIds: labelId - } + labelIds: labelId, + }, }; }, @@ -936,16 +936,16 @@ Cards.mutations({ assignMember(memberId) { return { $addToSet: { - members: memberId - } + members: memberId, + }, }; }, unassignMember(memberId) { return { $pull: { - members: memberId - } + members: memberId, + }, }; }, @@ -962,9 +962,9 @@ Cards.mutations({ $addToSet: { customFields: { _id: customFieldId, - value: null - } - } + value: null, + }, + }, }; }, @@ -972,9 +972,9 @@ Cards.mutations({ return { $pull: { customFields: { - _id: customFieldId - } - } + _id: customFieldId, + }, + }, }; }, @@ -991,7 +991,7 @@ Cards.mutations({ const index = this.customFieldIndex(customFieldId); if (index > -1) { const update = { - $set: {} + $set: {}, }; update.$set[`customFields.${index}.value`] = value; return update; @@ -1004,96 +1004,96 @@ Cards.mutations({ setCover(coverId) { return { $set: { - coverId - } + coverId, + }, }; }, unsetCover() { return { $unset: { - coverId: '' - } + coverId: '', + }, }; }, setReceived(receivedAt) { return { $set: { - receivedAt - } + receivedAt, + }, }; }, unsetReceived() { return { $unset: { - receivedAt: '' - } + receivedAt: '', + }, }; }, setStart(startAt) { return { $set: { - startAt - } + startAt, + }, }; }, unsetStart() { return { $unset: { - startAt: '' - } + startAt: '', + }, }; }, setDue(dueAt) { return { $set: { - dueAt - } + dueAt, + }, }; }, unsetDue() { return { $unset: { - dueAt: '' - } + dueAt: '', + }, }; }, setEnd(endAt) { return { $set: { - endAt - } + endAt, + }, }; }, unsetEnd() { return { $unset: { - endAt: '' - } + endAt: '', + }, }; }, setOvertime(isOvertime) { return { $set: { - isOvertime - } + isOvertime, + }, }; }, setSpentTime(spentTime) { return { $set: { - spentTime - } + spentTime, + }, }; }, @@ -1101,16 +1101,16 @@ Cards.mutations({ return { $unset: { spentTime: '', - isOvertime: false - } + isOvertime: false, + }, }; }, setParentId(parentId) { return { $set: { - parentId - } + parentId, + }, }; }, }); @@ -1206,7 +1206,7 @@ function cardLabels(userId, doc, fieldNames, modifier) { activityType: 'addedLabel', boardId: doc.boardId, cardId: doc._id, - } + }; Activities.insert(act); } } @@ -1313,7 +1313,7 @@ if (Meteor.isServer) { data: Cards.find({ boardId: paramBoardId, listId: paramListId, - archived: false + archived: false, }).map(function(doc) { return { _id: doc._id, @@ -1335,7 +1335,7 @@ if (Meteor.isServer) { _id: paramCardId, listId: paramListId, boardId: paramBoardId, - archived: false + archived: false, }), }); }); @@ -1345,7 +1345,7 @@ if (Meteor.isServer) { const paramBoardId = req.params.boardId; const paramListId = req.params.listId; const check = Users.findOne({ - _id: req.body.authorId + _id: req.body.authorId, }); const members = req.body.members || [req.body.authorId]; if (typeof check !== 'undefined') { @@ -1367,7 +1367,7 @@ if (Meteor.isServer) { }); const card = Cards.findOne({ - _id: id + _id: id, }); cardCreation(req.body.authorId, card); @@ -1390,11 +1390,11 @@ if (Meteor.isServer) { _id: paramCardId, listId: paramListId, boardId: paramBoardId, - archived: false + archived: false, }, { $set: { - title: newTitle - } + title: newTitle, + }, }); } if (req.body.hasOwnProperty('listId')) { @@ -1403,18 +1403,18 @@ if (Meteor.isServer) { _id: paramCardId, listId: paramListId, boardId: paramBoardId, - archived: false + archived: false, }, { $set: { - listId: newParamListId - } + listId: newParamListId, + }, }); const card = Cards.findOne({ - _id: paramCardId + _id: paramCardId, }); cardMove(req.body.authorId, card, { - fieldName: 'listId' + fieldName: 'listId', }, paramListId); } @@ -1424,11 +1424,11 @@ if (Meteor.isServer) { _id: paramCardId, listId: paramListId, boardId: paramBoardId, - archived: false + archived: false, }, { $set: { - description: newDescription - } + description: newDescription, + }, }); } if (req.body.hasOwnProperty('labelIds')) { @@ -1437,11 +1437,11 @@ if (Meteor.isServer) { _id: paramCardId, listId: paramListId, boardId: paramBoardId, - archived: false + archived: false, }, { $set: { - labelIds: newlabelIds - } + labelIds: newlabelIds, + }, }); } if (req.body.hasOwnProperty('requestedBy')) { @@ -1506,10 +1506,10 @@ if (Meteor.isServer) { Cards.direct.remove({ _id: paramCardId, listId: paramListId, - boardId: paramBoardId + boardId: paramBoardId, }); const card = Cards.find({ - _id: paramCardId + _id: paramCardId, }); cardRemover(req.body.authorId, card); JsonRoutes.sendResult(res, { diff --git a/models/checklistItems.js b/models/checklistItems.js index 1657022b7..8380bda72 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -76,7 +76,7 @@ function itemCreation(userId, doc) { boardId, checklistId: doc.checklistId, checklistItemId: doc._id, - checklistItemName:doc.title + checklistItemName:doc.title, }); } @@ -90,66 +90,66 @@ function itemRemover(userId, doc) { boardId, checklistId: doc.checklistId, checklistItemId: doc._id, - checklistItemName:doc.title + checklistItemName:doc.title, }); Activities.remove({ checklistItemId: doc._id, }); } -function publishCheckActivity(userId,doc){ +function publishCheckActivity(userId, doc){ const card = Cards.findOne(doc.cardId); const boardId = card.boardId; let activityType; if(doc.isFinished){ - activityType = "checkedItem"; + activityType = 'checkedItem'; }else{ - activityType = "uncheckedItem"; + activityType = 'uncheckedItem'; } - let act = { + const act = { userId, - activityType: activityType, + activityType, cardId: doc.cardId, boardId, checklistId: doc.checklistId, checklistItemId: doc._id, - checklistItemName:doc.title - } + checklistItemName:doc.title, + }; Activities.insert(act); } -function publishChekListCompleted(userId,doc,fieldNames,modifier){ +function publishChekListCompleted(userId, doc, fieldNames, modifier){ const card = Cards.findOne(doc.cardId); const boardId = card.boardId; const checklistId = doc.checklistId; const checkList = Checklists.findOne({_id:checklistId}); if(checkList.isFinished()){ - let act = { + const act = { userId, - activityType: "checklistCompleted", + activityType: 'checklistCompleted', cardId: doc.cardId, boardId, checklistId: doc.checklistId, - checklistName:doc.title - } + checklistName:doc.title, + }; Activities.insert(act); } } -function publishChekListUncompleted(userId,doc,fieldNames,modifier){ +function publishChekListUncompleted(userId, doc, fieldNames, modifier){ const card = Cards.findOne(doc.cardId); const boardId = card.boardId; const checklistId = doc.checklistId; const checkList = Checklists.findOne({_id:checklistId}); if(checkList.isFinished()){ - let act = { + const act = { userId, - activityType: "checklistUncompleted", + activityType: 'checklistUncompleted', cardId: doc.cardId, boardId, checklistId: doc.checklistId, - checklistName:doc.title - } + checklistName:doc.title, + }; Activities.insert(act); } } @@ -161,16 +161,15 @@ if (Meteor.isServer) { }); ChecklistItems.after.update((userId, doc, fieldNames, modifier) => { - publishCheckActivity(userId,doc); - publishChekListCompleted(userId,doc,fieldNames,modifier) + publishCheckActivity(userId, doc); + publishChekListCompleted(userId, doc, fieldNames, modifier); }); ChecklistItems.before.update((userId, doc, fieldNames, modifier) => { - publishChekListUncompleted(userId,doc,fieldNames,modifier) + publishChekListUncompleted(userId, doc, fieldNames, modifier); }); - ChecklistItems.after.insert((userId, doc) => { itemCreation(userId, doc); }); diff --git a/models/checklists.js b/models/checklists.js index 26429092b..425a10b2b 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -103,7 +103,7 @@ if (Meteor.isServer) { cardId: doc.cardId, boardId: Cards.findOne(doc.cardId).boardId, checklistId: doc._id, - checklistName:doc.title + checklistName:doc.title, }); }); @@ -120,7 +120,7 @@ if (Meteor.isServer) { cardId: doc.cardId, boardId: Cards.findOne(doc.cardId).boardId, checklistId: doc._id, - checklistName:doc.title + checklistName:doc.title, }); diff --git a/models/export.js b/models/export.js index c65ebf52d..0911a631f 100644 --- a/models/export.js +++ b/models/export.js @@ -31,7 +31,7 @@ if (Meteor.isServer) { if (exporter.canExport(user)) { JsonRoutes.sendResult(res, { code: 200, - data: exporter.build() + data: exporter.build(), }); } else { // we could send an explicit error message, but on the other hand the only @@ -52,16 +52,16 @@ class Exporter { // we do not want to retrieve boardId in related elements const noBoardId = { fields: { - boardId: 0 - } + boardId: 0, + }, }; const result = { _format: 'wekan-board-1.0.0', }; _.extend(result, Boards.findOne(this._boardId, { fields: { - stars: 0 - } + stars: 0, + }, })); result.lists = Lists.find(byBoard, noBoardId).fetch(); result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch(); @@ -77,21 +77,21 @@ class Exporter { result.actions = []; result.cards.forEach((card) => { result.checklists.push(...Checklists.find({ - cardId: card._id + cardId: card._id, }).fetch()); result.checklistItems.push(...ChecklistItems.find({ - cardId: card._id + cardId: card._id, }).fetch()); result.subtaskItems.push(...Cards.find({ - parentid: card._id + parentid: card._id, }).fetch()); }); result.rules.forEach((rule) => { result.triggers.push(...Triggers.find({ - _id: rule.triggerId + _id: rule.triggerId, }, noBoardId).fetch()); result.actions.push(...Actions.find({ - _id: rule.actionId + _id: rule.actionId, }, noBoardId).fetch()); }); @@ -154,8 +154,8 @@ class Exporter { }); const byUserIds = { _id: { - $in: Object.getOwnPropertyNames(users) - } + $in: Object.getOwnPropertyNames(users), + }, }; // we use whitelist to be sure we do not expose inadvertently // some secret fields that gets added to User later. diff --git a/models/rules.js b/models/rules.js index fe6b04cbe..7d9719804 100644 --- a/models/rules.js +++ b/models/rules.js @@ -31,11 +31,10 @@ Rules.helpers({ }, getTrigger(){ return Triggers.findOne({_id:this.triggerId}); - } + }, }); - Rules.allow({ insert(userId, doc) { return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); @@ -45,5 +44,5 @@ Rules.allow({ }, remove(userId, doc) { return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); - } + }, }); diff --git a/models/triggers.js b/models/triggers.js index c8e4cc753..15982b6e6 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -4,8 +4,8 @@ Triggers.mutations({ rename(description) { return { $set: { - description - } + description, + }, }; }, }); @@ -19,7 +19,7 @@ Triggers.allow({ }, remove(userId, doc) { return allowIsBoardAdmin(userId, Boards.findOne(doc.boardId)); - } + }, }); Triggers.helpers({ @@ -30,7 +30,7 @@ Triggers.helpers({ getRule() { return Rules.findOne({ - triggerId: this._id + triggerId: this._id, }); }, @@ -44,7 +44,7 @@ Triggers.helpers({ findList(title) { return Lists.findOne({ - title: title + title, }); }, @@ -54,5 +54,5 @@ Triggers.helpers({ return _.contains(this.labelIds, label._id); }); return cardLabels; - } -}); \ No newline at end of file + }, +}); diff --git a/models/wekanCreator.js b/models/wekanCreator.js index 6841a6ae4..b018b06dd 100644 --- a/models/wekanCreator.js +++ b/models/wekanCreator.js @@ -224,8 +224,8 @@ export class WekanCreator { const boardId = Boards.direct.insert(boardToCreate); Boards.direct.update(boardId, { $set: { - modifiedAt: this._now() - } + modifiedAt: this._now(), + }, }); // log activity Activities.direct.insert({ @@ -373,15 +373,15 @@ export class WekanCreator { if (wekanCoverId === att._id) { Cards.direct.update(cardId, { $set: { - coverId: wekanAtt._id - } + coverId: wekanAtt._id, + }, }); } } }); } else if (att.file) { file.attachData(new Buffer(att.file, 'base64'), { - type: att.type + type: att.type, }, (error) => { file.name(att.name); file.boardId = boardId; @@ -401,8 +401,8 @@ export class WekanCreator { if (wekanCoverId === att._id) { Cards.direct.update(cardId, { $set: { - coverId: wekanAtt._id - } + coverId: wekanAtt._id, + }, }); } } @@ -448,8 +448,8 @@ export class WekanCreator { const listId = Lists.direct.insert(listToCreate); Lists.direct.update(listId, { $set: { - 'updatedAt': this._now() - } + 'updatedAt': this._now(), + }, }); this.lists[list._id] = listId; // // log activity @@ -485,8 +485,8 @@ export class WekanCreator { const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate); Swimlanes.direct.update(swimlaneId, { $set: { - 'updatedAt': this._now() - } + 'updatedAt': this._now(), + }, }); this.swimlanes[swimlane._id] = swimlaneId; }); @@ -512,13 +512,13 @@ export class WekanCreator { createTriggers(wekanTriggers, boardId) { wekanTriggers.forEach((trigger, ruleIndex) => { if (trigger.hasOwnProperty('labelId')) { - trigger['labelId'] = this.labels[trigger['labelId']] + trigger.labelId = this.labels[trigger.labelId]; } if (trigger.hasOwnProperty('memberId')) { - trigger['memberId'] = this.members[trigger['memberId']] + trigger.memberId = this.members[trigger.memberId]; } - trigger['boardId'] = boardId; - const oldId = trigger['_id']; + trigger.boardId = boardId; + const oldId = trigger._id; delete trigger._id; this.triggers[oldId] = Triggers.direct.insert(trigger); }); @@ -527,13 +527,13 @@ export class WekanCreator { createActions(wekanActions, boardId) { wekanActions.forEach((action, ruleIndex) => { if (action.hasOwnProperty('labelId')) { - action['labelId'] = this.labels[action['labelId']] + action.labelId = this.labels[action.labelId]; } if (action.hasOwnProperty('memberId')) { - action['memberId'] = this.members[action['memberId']] + action.memberId = this.members[action.memberId]; } - action['boardId'] = boardId; - const oldId = action['_id']; + action.boardId = boardId; + const oldId = action._id; delete action._id; this.actions[oldId] = Actions.direct.insert(action); }); @@ -542,9 +542,9 @@ export class WekanCreator { createRules(wekanRules, boardId) { wekanRules.forEach((rule, ruleIndex) => { // Create the rule - rule['boardId'] = boardId; - rule['triggerId'] = this.triggers[rule['triggerId']]; - rule['actionId'] = this.actions[rule['actionId']]; + rule.boardId = boardId; + rule.triggerId = this.triggers[rule.triggerId]; + rule.actionId = this.actions[rule.actionId]; delete rule._id; Rules.direct.insert(rule); }); @@ -568,64 +568,64 @@ export class WekanCreator { parseActivities(wekanBoard) { wekanBoard.activities.forEach((activity) => { switch (activity.activityType) { - case 'addAttachment': - { - // We have to be cautious, because the attachment could have been removed later. - // In that case Wekan still reports its addition, but removes its 'url' field. - // So we test for that - const wekanAttachment = wekanBoard.attachments.filter((attachment) => { - return attachment._id === activity.attachmentId; - })[0]; + case 'addAttachment': + { + // We have to be cautious, because the attachment could have been removed later. + // In that case Wekan still reports its addition, but removes its 'url' field. + // So we test for that + const wekanAttachment = wekanBoard.attachments.filter((attachment) => { + return attachment._id === activity.attachmentId; + })[0]; - if (typeof wekanAttachment !== 'undefined' && wekanAttachment) { - if (wekanAttachment.url || wekanAttachment.file) { - // we cannot actually create the Wekan attachment, because we don't yet - // have the cards to attach it to, so we store it in the instance variable. - const wekanCardId = activity.cardId; - if (!this.attachments[wekanCardId]) { - this.attachments[wekanCardId] = []; - } - this.attachments[wekanCardId].push(wekanAttachment); - } + if (typeof wekanAttachment !== 'undefined' && wekanAttachment) { + if (wekanAttachment.url || wekanAttachment.file) { + // we cannot actually create the Wekan attachment, because we don't yet + // have the cards to attach it to, so we store it in the instance variable. + const wekanCardId = activity.cardId; + if (!this.attachments[wekanCardId]) { + this.attachments[wekanCardId] = []; } - break; - } - case 'addComment': - { - const wekanComment = wekanBoard.comments.filter((comment) => { - return comment._id === activity.commentId; - })[0]; - const id = activity.cardId; - if (!this.comments[id]) { - this.comments[id] = []; - } - this.comments[id].push(wekanComment); - break; - } - case 'createBoard': - { - this.createdAt.board = activity.createdAt; - break; - } - case 'createCard': - { - const cardId = activity.cardId; - this.createdAt.cards[cardId] = activity.createdAt; - this.createdBy.cards[cardId] = activity.userId; - break; - } - case 'createList': - { - const listId = activity.listId; - this.createdAt.lists[listId] = activity.createdAt; - break; - } - case 'createSwimlane': - { - const swimlaneId = activity.swimlaneId; - this.createdAt.swimlanes[swimlaneId] = activity.createdAt; - break; + this.attachments[wekanCardId].push(wekanAttachment); } + } + break; + } + case 'addComment': + { + const wekanComment = wekanBoard.comments.filter((comment) => { + return comment._id === activity.commentId; + })[0]; + const id = activity.cardId; + if (!this.comments[id]) { + this.comments[id] = []; + } + this.comments[id].push(wekanComment); + break; + } + case 'createBoard': + { + this.createdAt.board = activity.createdAt; + break; + } + case 'createCard': + { + const cardId = activity.cardId; + this.createdAt.cards[cardId] = activity.createdAt; + this.createdBy.cards[cardId] = activity.userId; + break; + } + case 'createList': + { + const listId = activity.listId; + this.createdAt.lists[listId] = activity.createdAt; + break; + } + case 'createSwimlane': + { + const swimlaneId = activity.swimlaneId; + this.createdAt.swimlanes[swimlaneId] = activity.createdAt; + break; + } } }); } @@ -633,116 +633,116 @@ export class WekanCreator { importActivities(activities, boardId) { activities.forEach((activity) => { switch (activity.activityType) { - // Board related activities - // TODO: addBoardMember, removeBoardMember - case 'createBoard': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - type: 'board', - activityTypeId: boardId, - activityType: activity.activityType, - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // List related activities - // TODO: removeList, archivedList - case 'createList': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - type: 'list', - activityType: activity.activityType, - listId: this.lists[activity.listId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Card related activities - // TODO: archivedCard, restoredCard, joinMember, unjoinMember - case 'createCard': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - listId: this.lists[activity.listId], - cardId: this.cards[activity.cardId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - case 'moveCard': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - oldListId: this.lists[activity.oldListId], - activityType: activity.activityType, - listId: this.lists[activity.listId], - cardId: this.cards[activity.cardId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Comment related activities - case 'addComment': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - cardId: this.cards[activity.cardId], - commentId: this.commentIds[activity.commentId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Attachment related activities - case 'addAttachment': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - type: 'card', - activityType: activity.activityType, - attachmentId: this.attachmentIds[activity.attachmentId], - cardId: this.cards[activity.cardId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - // Checklist related activities - case 'addChecklist': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - cardId: this.cards[activity.cardId], - checklistId: this.checklists[activity.checklistId], - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } - case 'addChecklistItem': - { - Activities.direct.insert({ - userId: this._user(activity.userId), - activityType: activity.activityType, - cardId: this.cards[activity.cardId], - checklistId: this.checklists[activity.checklistId], - checklistItemId: activity.checklistItemId.replace( - activity.checklistId, - this.checklists[activity.checklistId]), - boardId, - createdAt: this._now(activity.createdAt), - }); - break; - } + // Board related activities + // TODO: addBoardMember, removeBoardMember + case 'createBoard': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + type: 'board', + activityTypeId: boardId, + activityType: activity.activityType, + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // List related activities + // TODO: removeList, archivedList + case 'createList': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + type: 'list', + activityType: activity.activityType, + listId: this.lists[activity.listId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Card related activities + // TODO: archivedCard, restoredCard, joinMember, unjoinMember + case 'createCard': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + listId: this.lists[activity.listId], + cardId: this.cards[activity.cardId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + case 'moveCard': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + oldListId: this.lists[activity.oldListId], + activityType: activity.activityType, + listId: this.lists[activity.listId], + cardId: this.cards[activity.cardId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Comment related activities + case 'addComment': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + cardId: this.cards[activity.cardId], + commentId: this.commentIds[activity.commentId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Attachment related activities + case 'addAttachment': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + type: 'card', + activityType: activity.activityType, + attachmentId: this.attachmentIds[activity.attachmentId], + cardId: this.cards[activity.cardId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + // Checklist related activities + case 'addChecklist': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + cardId: this.cards[activity.cardId], + checklistId: this.checklists[activity.checklistId], + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } + case 'addChecklistItem': + { + Activities.direct.insert({ + userId: this._user(activity.userId), + activityType: activity.activityType, + cardId: this.cards[activity.cardId], + checklistId: this.checklists[activity.checklistId], + checklistItemId: activity.checklistItemId.replace( + activity.checklistId, + this.checklists[activity.checklistId]), + boardId, + createdAt: this._now(activity.createdAt), + }); + break; + } } }); } @@ -790,4 +790,4 @@ export class WekanCreator { // XXX add members return boardId; } -} \ No newline at end of file +} diff --git a/server/lib/utils.js b/server/lib/utils.js index c155cda50..ee925847d 100644 --- a/server/lib/utils.js +++ b/server/lib/utils.js @@ -1,9 +1,9 @@ allowIsBoardAdmin = function(userId, board) { - return board && board.hasAdmin(userId); + return board && board.hasAdmin(userId); }; allowIsBoardMember = function(userId, board) { - return board && board.hasMember(userId); + return board && board.hasMember(userId); }; allowIsBoardMemberCommentOnly = function(userId, board) { @@ -15,6 +15,6 @@ allowIsBoardMemberNoComments = function(userId, board) { }; allowIsBoardMemberByCard = function(userId, card) { - const board = card.board(); - return board && board.hasMember(userId); + const board = card.board(); + return board && board.hasMember(userId); }; diff --git a/server/publications/rules.js b/server/publications/rules.js index 29be2e787..d08648930 100644 --- a/server/publications/rules.js +++ b/server/publications/rules.js @@ -1,18 +1,18 @@ Meteor.publish('rules', (ruleId) => { - check(ruleId, String); - return Rules.find({ - _id: ruleId - }); + check(ruleId, String); + return Rules.find({ + _id: ruleId, + }); }); Meteor.publish('allRules', () => { - return Rules.find({}); + return Rules.find({}); }); Meteor.publish('allTriggers', () => { - return Triggers.find({}); + return Triggers.find({}); }); Meteor.publish('allActions', () => { - return Actions.find({}); -}); \ No newline at end of file + return Actions.find({}); +}); diff --git a/server/rulesHelper.js b/server/rulesHelper.js index d56b70aa0..e7e19b96c 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -1,131 +1,131 @@ RulesHelper = { - executeRules(activity){ - const matchingRules = this.findMatchingRules(activity); - for(let i = 0;i< matchingRules.length;i++){ - const action = matchingRules[i].getAction(); - this.performAction(activity,action); - } - }, - findMatchingRules(activity){ - const activityType = activity.activityType; - if(TriggersDef[activityType] == undefined){ - return []; - } - const matchingFields = TriggersDef[activityType].matchingFields; - const matchingMap = this.buildMatchingFieldsMap(activity,matchingFields); - let matchingTriggers = Triggers.find(matchingMap); - let matchingRules = []; - matchingTriggers.forEach(function(trigger){ - matchingRules.push(trigger.getRule()); - }); - return matchingRules; - }, - buildMatchingFieldsMap(activity, matchingFields){ - let matchingMap = {"activityType":activity.activityType}; - for(let i = 0;i< matchingFields.length;i++){ - // Creating a matching map with the actual field of the activity - // and with the wildcard (for example: trigger when a card is added - // in any [*] board - matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]],"*"]}; - } - return matchingMap; - }, - performAction(activity,action){ - const card = Cards.findOne({_id:activity.cardId}); - const boardId = activity.boardId; - if(action.actionType == "moveCardToTop"){ - let listId; - let list; - if(activity.listTitle == "*"){ - listId = card.swimlaneId; - list = card.list(); - }else{ - list = Lists.findOne({title: action.listTitle, boardId:boardId });; - listId = list._id; - } - const minOrder = _.min(list.cards(card.swimlaneId).map((c) => c.sort)); - card.move(card.swimlaneId, listId, minOrder - 1); - } - if(action.actionType == "moveCardToBottom"){ - let listId; - let list; - if(activity.listTitle == "*"){ - listId = card.swimlaneId; - list = card.list(); - }else{ - list = Lists.findOne({title: action.listTitle, boardId:boardId}); - listId = list._id; - } - const maxOrder = _.max(list.cards(card.swimlaneId).map((c) => c.sort)); - card.move(card.swimlaneId, listId, maxOrder + 1); - } - if(action.actionType == "sendEmail"){ - const emailTo = action.emailTo; - const emailMsg = action.emailMsg; - const emailSubject = action.emailSubject; - try { - Email.send({ - to: to, - from: Accounts.emailTemplates.from, - subject: subject, - text, - }); - } catch (e) { - return; - } - } - if(action.actionType == "archive"){ - card.archive(); - } - if(action.actionType == "unarchive"){ - card.restore(); - } - if(action.actionType == "addLabel"){ - card.addLabel(action.labelId); - } - if(action.actionType == "removeLabel"){ - card.removeLabel(action.labelId); - } - if(action.actionType == "addMember"){ - const memberId = Users.findOne({username:action.memberName})._id; - card.assignMember(memberId); - } - if(action.actionType == "removeMember"){ - if(action.memberName == "*"){ - const members = card.members; - for(let i = 0;i< members.length;i++){ - card.unassignMember(members[i]); - } - }else{ - const memberId = Users.findOne({username:action.memberName})._id; - card.unassignMember(memberId); - } - } - if(action.actionType == "checkAll"){ - const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); - checkList.checkAllItems(); - } - if(action.actionType == "uncheckAll"){ - const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); - checkList.uncheckAllItems(); - } - if(action.actionType == "checkItem"){ - const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); - const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id}) - checkItem.check(); - } - if(action.actionType == "uncheckItem"){ - const checkList = Checklists.findOne({"title":action.checklistName,"cardId":card._id}); - const checkItem = ChecklistItems.findOne({"title":action.checkItemName,"checkListId":checkList._id}) - checkItem.uncheck(); - } - if(action.actionType == "addChecklist"){ - Checklists.insert({"title":action.checklistName,"cardId":card._id,"sort":0}); - } - if(action.actionType == "removeChecklist"){ - Checklists.remove({"title":action.checklistName,"cardId":card._id,"sort":0}); - } + executeRules(activity){ + const matchingRules = this.findMatchingRules(activity); + for(let i = 0; i< matchingRules.length; i++){ + const action = matchingRules[i].getAction(); + this.performAction(activity, action); + } + }, + findMatchingRules(activity){ + const activityType = activity.activityType; + if(TriggersDef[activityType] === undefined){ + return []; + } + const matchingFields = TriggersDef[activityType].matchingFields; + const matchingMap = this.buildMatchingFieldsMap(activity, matchingFields); + const matchingTriggers = Triggers.find(matchingMap); + const matchingRules = []; + matchingTriggers.forEach(function(trigger){ + matchingRules.push(trigger.getRule()); + }); + return matchingRules; + }, + buildMatchingFieldsMap(activity, matchingFields){ + const matchingMap = {'activityType':activity.activityType}; + for(let i = 0; i< matchingFields.length; i++){ + // Creating a matching map with the actual field of the activity + // and with the wildcard (for example: trigger when a card is added + // in any [*] board + matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]], '*']}; + } + return matchingMap; + }, + performAction(activity, action){ + const card = Cards.findOne({_id:activity.cardId}); + const boardId = activity.boardId; + if(action.actionType === 'moveCardToTop'){ + let listId; + let list; + if(activity.listTitle === '*'){ + listId = card.swimlaneId; + list = card.list(); + }else{ + list = Lists.findOne({title: action.listTitle, boardId }); + listId = list._id; + } + const minOrder = _.min(list.cards(card.swimlaneId).map((c) => c.sort)); + card.move(card.swimlaneId, listId, minOrder - 1); + } + if(action.actionType === 'moveCardToBottom'){ + let listId; + let list; + if(activity.listTitle === '*'){ + listId = card.swimlaneId; + list = card.list(); + }else{ + list = Lists.findOne({title: action.listTitle, boardId}); + listId = list._id; + } + const maxOrder = _.max(list.cards(card.swimlaneId).map((c) => c.sort)); + card.move(card.swimlaneId, listId, maxOrder + 1); + } + if(action.actionType === 'sendEmail'){ + const emailTo = action.emailTo; + const emailMsg = action.emailMsg; + const emailSubject = action.emailSubject; + try { + Email.send({ + to, + from: Accounts.emailTemplates.from, + subject, + text, + }); + } catch (e) { + return; + } + } + if(action.actionType === 'archive'){ + card.archive(); + } + if(action.actionType === 'unarchive'){ + card.restore(); + } + if(action.actionType === 'addLabel'){ + card.addLabel(action.labelId); + } + if(action.actionType === 'removeLabel'){ + card.removeLabel(action.labelId); + } + if(action.actionType === 'addMember'){ + const memberId = Users.findOne({username:action.memberName})._id; + card.assignMember(memberId); + } + if(action.actionType === 'removeMember'){ + if(action.memberName === '*'){ + const members = card.members; + for(let i = 0; i< members.length; i++){ + card.unassignMember(members[i]); + } + }else{ + const memberId = Users.findOne({username:action.memberName})._id; + card.unassignMember(memberId); + } + } + if(action.actionType === 'checkAll'){ + const checkList = Checklists.findOne({'title':action.checklistName, 'cardId':card._id}); + checkList.checkAllItems(); + } + if(action.actionType === 'uncheckAll'){ + const checkList = Checklists.findOne({'title':action.checklistName, 'cardId':card._id}); + checkList.uncheckAllItems(); + } + if(action.actionType === 'checkItem'){ + const checkList = Checklists.findOne({'title':action.checklistName, 'cardId':card._id}); + const checkItem = ChecklistItems.findOne({'title':action.checkItemName, 'checkListId':checkList._id}); + checkItem.check(); + } + if(action.actionType === 'uncheckItem'){ + const checkList = Checklists.findOne({'title':action.checklistName, 'cardId':card._id}); + const checkItem = ChecklistItems.findOne({'title':action.checkItemName, 'checkListId':checkList._id}); + checkItem.uncheck(); + } + if(action.actionType === 'addChecklist'){ + Checklists.insert({'title':action.checklistName, 'cardId':card._id, 'sort':0}); + } + if(action.actionType === 'removeChecklist'){ + Checklists.remove({'title':action.checklistName, 'cardId':card._id, 'sort':0}); + } - }, + }, -} \ No newline at end of file +}; diff --git a/server/triggersDef.js b/server/triggersDef.js index 8c52051bb..81dc946fb 100644 --- a/server/triggersDef.js +++ b/server/triggersDef.js @@ -1,59 +1,58 @@ TriggersDef = { - createCard:{ - matchingFields: ["boardId", "listName"] - }, - moveCard:{ - matchingFields: ["boardId", "listName", "oldListName"] - }, - archivedCard:{ - matchingFields: ["boardId"] - }, - restoredCard:{ - matchingFields: ["boardId"] - }, - joinMember:{ - matchingFields: ["boardId","memberId"] - }, - unjoinMember:{ - matchingFields: ["boardId","memberId"] - }, - addChecklist:{ - matchingFields: ["boardId","checklistName"] - }, - removeChecklist:{ - matchingFields: ["boardId","checklistName"] - }, - completeChecklist:{ - matchingFields: ["boardId","checklistName"] - }, - uncompleteChecklist:{ - matchingFields: ["boardId","checklistName"] - }, - addedChecklistItem:{ - matchingFields: ["boardId","checklistItemName"] - }, - removedChecklistItem:{ - matchingFields: ["boardId","checklistItemName"] - }, - checkedItem:{ - matchingFields: ["boardId","checklistItemName"] - }, - uncheckedItem:{ - matchingFields: ["boardId","checklistItemName"] - }, - addAttachment:{ - matchingFields: ["boardId"] - }, - deleteAttachment:{ - matchingFields: ["boardId"] - }, - addedLabel:{ - matchingFields: ["boardId","labelId"] - }, - removedLabel:{ - matchingFields: ["boardId","labelId"] - } -} - + createCard:{ + matchingFields: ['boardId', 'listName'], + }, + moveCard:{ + matchingFields: ['boardId', 'listName', 'oldListName'], + }, + archivedCard:{ + matchingFields: ['boardId'], + }, + restoredCard:{ + matchingFields: ['boardId'], + }, + joinMember:{ + matchingFields: ['boardId', 'memberId'], + }, + unjoinMember:{ + matchingFields: ['boardId', 'memberId'], + }, + addChecklist:{ + matchingFields: ['boardId', 'checklistName'], + }, + removeChecklist:{ + matchingFields: ['boardId', 'checklistName'], + }, + completeChecklist:{ + matchingFields: ['boardId', 'checklistName'], + }, + uncompleteChecklist:{ + matchingFields: ['boardId', 'checklistName'], + }, + addedChecklistItem:{ + matchingFields: ['boardId', 'checklistItemName'], + }, + removedChecklistItem:{ + matchingFields: ['boardId', 'checklistItemName'], + }, + checkedItem:{ + matchingFields: ['boardId', 'checklistItemName'], + }, + uncheckedItem:{ + matchingFields: ['boardId', 'checklistItemName'], + }, + addAttachment:{ + matchingFields: ['boardId'], + }, + deleteAttachment:{ + matchingFields: ['boardId'], + }, + addedLabel:{ + matchingFields: ['boardId', 'labelId'], + }, + removedLabel:{ + matchingFields: ['boardId', 'labelId'], + }, +}; From 6fe7f3c553339ad889e937aec278e85ee9785451 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 02:24:33 +0300 Subject: [PATCH 25/30] Archive => Recycle Bin --- i18n/en.i18n.json | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 395940c62..f4e692ad1 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -541,8 +541,8 @@ "r-list": "list", "r-moved-to": "Moved to", "r-moved-from": "Moved from", - "r-archived": "Archived", - "r-unarchived": "Unarchived", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", "r-a-card": "a card", "r-when-a-label-is": "When a label is", "r-when-the-label-is": "When the label is", @@ -607,18 +607,4 @@ "r-d-check-of-list": "of checklist", "r-d-add-checklist": "Add checklist", "r-d-remove-checklist": "Remove checklist" - - - - - - - - - - - - - - } From 983a56b89ba85c32594f96daa7d89dfeaf68f37a Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 02:39:01 +0300 Subject: [PATCH 26/30] Fix translation. --- i18n/en.i18n.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index f4e692ad1..4a4540c85 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -565,8 +565,8 @@ "r-bottom-of": "Bottom of", "r-its-list": "its list", "r-list": "list", - "r-archive": "Archive", - "r-unarchive": "Unarchive", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", "r-card": "card", "r-add": "Add", "r-remove": "Remove", @@ -593,15 +593,15 @@ "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-archive": "Move card to Recycle Bin", "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-all": "Check all items of list", + "r-d-uncheck-all": "Uncheck all items of list", "r-d-check-one": "Check item", "r-d-uncheck-one": "Uncheck item", "r-d-check-of-list": "of checklist", From 5474099916939f85948a75e30040cc3ce92a98e2 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 02:40:24 +0300 Subject: [PATCH 27/30] Fix translation. --- i18n/en.i18n.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 4a4540c85..eb014cdd2 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -600,8 +600,8 @@ "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 items of list", - "r-d-uncheck-all": "Uncheck all items of list", + "r-d-check-all": "Check all items of a list", + "r-d-uncheck-all": "Uncheck all items of a list", "r-d-check-one": "Check item", "r-d-uncheck-one": "Uncheck item", "r-d-check-of-list": "of checklist", From b42649c777f1a1d450c5e67657e509a3aff99a50 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 02:48:52 +0300 Subject: [PATCH 28/30] Fix translation. --- i18n/en.i18n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index eb014cdd2..555906ef5 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -594,7 +594,7 @@ "r-d-send-email-subject": "subject", "r-d-send-email-message": "message", "r-d-archive": "Move card to Recycle Bin", - "r-d-unarchive": "Unarchive the card", + "r-d-unarchive": "Restore card from Recycle Bin", "r-d-add-label": "Add label", "r-d-remove-label": "Remove label", "r-d-add-member": "Add member", From ef04c2a826b1ad8fdc690c830b6318e3d4de1588 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 03:00:57 +0300 Subject: [PATCH 29/30] Update translations. --- i18n/ar.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/bg.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/br.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/ca.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/cs.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/de.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/el.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/en-GB.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/eo.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/es-AR.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/es.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/eu.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/fa.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/fi.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/fr.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/gl.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/he.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/hu.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/hy.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/id.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/ig.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/it.i18n.json | 104 ++++++++++++++++++++++++++++++++++++++++-- i18n/ja.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/ka.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/km.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/ko.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/lv.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/mn.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/nb.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/nl.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/pl.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/pt-BR.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/pt.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/ro.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/ru.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/sr.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/sv.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/ta.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/th.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/tr.i18n.json | 106 +++++++++++++++++++++++++++++++++++++++++-- i18n/uk.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/vi.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/zh-CN.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- i18n/zh-TW.i18n.json | 100 +++++++++++++++++++++++++++++++++++++++- 44 files changed, 4361 insertions(+), 49 deletions(-) diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json index 9af2581e2..4ed1cc910 100644 --- a/i18n/ar.i18n.json +++ b/i18n/ar.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "إرسال %s إلى %s", "activity-unjoined": "غادر %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "أضاف قائمة تحقق إلى %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "أضف", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "إضافة مرفق", "add-board": "إضافة لوحة", "add-card": "إضافة بطاقة", @@ -371,6 +381,7 @@ "restore": "استعادة", "save": "حفظ", "search": "بحث", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "اختيار اللون", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "أضف", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json index b4ce62f0f..6ed7f15b6 100644 --- a/i18n/bg.i18n.json +++ b/i18n/bg.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "изпрати %s до %s", "activity-unjoined": "вече не е част от %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "добави списък със задачи към %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "добави точка към '%s' в/във %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Добави", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Добави прикачен файл", "add-board": "Добави Табло", "add-card": "Добави карта", @@ -371,6 +381,7 @@ "restore": "Възстанови", "save": "Запази", "search": "Търсене", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Избери цвят", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Премести в Кошчето", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Добави", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json index f92f6fb48..f1080830d 100644 --- a/i18n/br.i18n.json +++ b/i18n/br.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Ouzhpenn", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Ouzhpenn", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json index 90344870d..0b40cbca1 100644 --- a/i18n/ca.i18n.json +++ b/i18n/ca.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "ha enviat %s %s", "activity-unjoined": "desassignat %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "Checklist afegida a %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "afegida entrada de checklist de '%s' a %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Afegeix", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Afegeix adjunt", "add-board": "Afegeix Tauler", "add-card": "Afegeix fitxa", @@ -371,6 +381,7 @@ "restore": "Restaura", "save": "Desa", "search": "Cerca", + "rules": "Rules", "search-cards": "Cerca títols de fitxa i descripcions en aquest tauler", "search-example": "Text que cercar?", "select-color": "Selecciona color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Afegeix", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json index fc0d93ea3..554c56098 100644 --- a/i18n/cs.i18n.json +++ b/i18n/cs.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "%s posláno na %s", "activity-unjoined": "odpojen %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "přidán checklist do %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "přidána položka checklist do '%s' v %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Přidat", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Přidat přílohu", "add-board": "Přidat tablo", "add-card": "Přidat kartu", @@ -371,6 +381,7 @@ "restore": "Obnovit", "save": "Uložit", "search": "Hledat", + "rules": "Rules", "search-cards": "Hledat nadpisy a popisy karet v tomto tablu", "search-example": "Hledaný text", "select-color": "Vybrat barvu", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Přesunout do koše", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Přidat", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index bb1cc3348..539a66036 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "hat %s an %s gesendet", "activity-unjoined": "hat %s verlassen", "activity-subtask-added": "Teilaufgabe zu %s hinzugefügt", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "hat eine Checklistenposition zu '%s' in %s hinzugefügt", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Hinzufügen", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Datei anhängen", "add-board": "neues Board", "add-card": "Karte hinzufügen", @@ -371,6 +381,7 @@ "restore": "Wiederherstellen", "save": "Speichern", "search": "Suchen", + "rules": "Rules", "search-cards": "Suche nach Kartentiteln und Beschreibungen auf diesem Board", "search-example": "Suchbegriff", "select-color": "Farbe auswählen", @@ -507,5 +518,92 @@ "change-card-parent": "Übergeordnete Karte ändern", "parent-card": "Übergeordnete Karte", "source-board": "Quellboard", - "no-parent": "Nicht anzeigen" + "no-parent": "Nicht anzeigen", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "In den Papierkorb verschieben", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Hinzufügen", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json index bf2500b3f..ebdec7fb9 100644 --- a/i18n/el.i18n.json +++ b/i18n/el.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Προσθήκη", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Προσθήκη Κάρτας", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Αποθήκευση", "search": "Αναζήτηση", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Επιλέξτε Χρώμα", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Προσθήκη", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json index 7e268f4af..2e559002a 100644 --- a/i18n/en-GB.i18n.json +++ b/i18n/en-GB.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Colour", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json index a8e7001f0..08b81fcc6 100644 --- a/i18n/eo.i18n.json +++ b/i18n/eo.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "Sendis %s al %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Aldoni", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Forigi", "save": "Savi", "search": "Serĉi", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Aldoni", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json index dd5946cda..01b406845 100644 --- a/i18n/es-AR.i18n.json +++ b/i18n/es-AR.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "enviadas %s a %s", "activity-unjoined": "separadas %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "agregada lista de tareas a %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "agregado item de lista de tareas a '%s' en %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Agregar", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Agregar Adjunto", "add-board": "Agregar Tablero", "add-card": "Agregar Tarjeta", @@ -371,6 +381,7 @@ "restore": "Restaurar", "save": "Grabar", "search": "Buscar", + "rules": "Rules", "search-cards": "Buscar en títulos y descripciones de tarjeta en este tablero", "search-example": "¿Texto a buscar?", "select-color": "Seleccionar Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Mover a Papelera de Reciclaje", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Agregar", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json index ce6133d7b..1af6e244b 100644 --- a/i18n/es.i18n.json +++ b/i18n/es.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "ha enviado %s a %s", "activity-unjoined": "se ha desvinculado de %s", "activity-subtask-added": "ha añadido la subtarea a %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "ha añadido una lista de verificación a %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Añadir", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Añadir adjunto", "add-board": "Añadir tablero", "add-card": "Añadir una tarjeta", @@ -371,6 +381,7 @@ "restore": "Restaurar", "save": "Añadir", "search": "Buscar", + "rules": "Rules", "search-cards": "Buscar entre los títulos y las descripciones de las tarjetas en este tablero.", "search-example": "¿Texto a buscar?", "select-color": "Selecciona un color", @@ -507,5 +518,92 @@ "change-card-parent": "Cambiar la tarjeta padre", "parent-card": "Tarjeta padre", "source-board": "Tablero de origen", - "no-parent": "No mostrar la tarjeta padre" + "no-parent": "No mostrar la tarjeta padre", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Enviar a la papelera de reciclaje", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Añadir", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json index ae0d904aa..412e8e3ec 100644 --- a/i18n/eu.i18n.json +++ b/i18n/eu.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "%s %s(e)ri bidalita", "activity-unjoined": "%s utzita", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "egiaztaketa zerrenda %s(e)ra gehituta", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "egiaztaketa zerrendako elementuak '%s'(e)ra gehituta %s(e)n", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Gehitu", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Gehitu eranskina", "add-board": "Gehitu arbela", "add-card": "Gehitu txartela", @@ -371,6 +381,7 @@ "restore": "Berrezarri", "save": "Gorde", "search": "Bilatu", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Aukeratu kolorea", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Gehitu", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json index 94ba24987..e653474d5 100644 --- a/i18n/fa.i18n.json +++ b/i18n/fa.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "ارسال %s به %s", "activity-unjoined": "قطع اتصال %s", "activity-subtask-added": "زیروظیفه به %s اضافه شد", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "سیاهه به %s اضافه شد", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "افزودن", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "افزودن ضمیمه", "add-board": "افزودن برد", "add-card": "افزودن کارت", @@ -371,6 +381,7 @@ "restore": "بازیابی", "save": "ذخیره", "search": "جستجو", + "rules": "Rules", "search-cards": "جستجو در میان عناوین و توضیحات در این تخته", "search-example": "متن مورد جستجو؟", "select-color": "انتخاب رنگ", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "انتقال به بازیافتی", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "افزودن", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json index 4de354aa1..bec3f19c3 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "lähetetty %s kohteeseen %s", "activity-unjoined": "peruttu %s liittyminen", "activity-subtask-added": "lisätty alitehtävä kohteeseen %s", + "activity-checked-item": "ruksattu %s tarkistuslistassa %s / %s", + "activity-unchecked-item": "poistettu ruksi %s tarkistuslistassa %s / %s", "activity-checklist-added": "lisätty tarkistuslista kortille %s", + "activity-checklist-removed": "poistettu tarkistuslista kohteesta %s", + "activity-checklist-completed": "saatu valmiíksi tarkistuslista %s / %s", + "activity-checklist-uncompleted": "ei saatu valmiiksi tarkistuslista %s / %s", "activity-checklist-item-added": "lisäsi kohdan tarkistuslistaan '%s' kortilla %s", + "activity-checklist-item-removed": "poistettu tarkistuslistan kohta '%s' / %s", "add": "Lisää", + "activity-checked-item-card": "ruksattu %s tarkistuslistassa %s", + "activity-unchecked-item-card": "poistettu ruksi %s tarkistuslistassa %s", + "activity-checklist-completed-card": "valmistui tarkistuslista %s", + "activity-checklist-uncompleted-card": "ei valmistunut tarkistuslista %s", "add-attachment": "Lisää liite", "add-board": "Lisää taulu", "add-card": "Lisää kortti", @@ -371,6 +381,7 @@ "restore": "Palauta", "save": "Tallenna", "search": "Etsi", + "rules": "Säännöt", "search-cards": "Etsi korttien otsikoista ja kuvauksista tällä taululla", "search-example": "Teksti jota etsitään?", "select-color": "Valitse väri", @@ -507,5 +518,92 @@ "change-card-parent": "Muuta kortin ylätehtävää", "parent-card": "Ylätehtävä kortti", "source-board": "Lähdetaulu", - "no-parent": "Älä näytä ylätehtävää" + "no-parent": "Älä näytä ylätehtävää", + "activity-added-label": "lisätty tunniste '%s' kohteeseen %s", + "activity-removed-label": "poistettu tunniste '%s' kohteesta %s", + "activity-delete-attach": "poistettu liitetiedosto kohteesta %s", + "activity-added-label-card": "lisätty tunniste '%s'", + "activity-removed-label-card": "poistettu tunniste '%s'", + "activity-delete-attach-card": "poistettu liitetiedosto", + "r-rule": "Sääntö", + "r-add-trigger": "Lisää liipaisin", + "r-add-action": "Lisää toimi", + "r-board-rules": "Taulu säännöt", + "r-add-rule": "Lisää sääntö", + "r-view-rule": "Näytä sääntö", + "r-delete-rule": "Poista sääntö", + "r-new-rule-name": "Lisää uusi sääntö", + "r-no-rules": "Ei sääntöjä", + "r-when-a-card-is": "Kun kortti on", + "r-added-to": "Lisätty kohteeseen", + "r-removed-from": "Poistettu kohteesta", + "r-the-board": "taulu", + "r-list": "lista", + "r-moved-to": "Siirretty kohteeseen", + "r-moved-from": "Siirretty kohteesta", + "r-archived": "Siirretty roskakoriin", + "r-unarchived": "Palautettu roskakorista", + "r-a-card": "kortti", + "r-when-a-label-is": "Kun tunniste on", + "r-when-the-label-is": "Kun tunniste on", + "r-list-name": "Listan nimi", + "r-when-a-member": "Kun jäsen on", + "r-when-the-member": "Kun jäsen on", + "r-name": "nimi", + "r-is": "on", + "r-when-a-attach": "Kun liitetiedosto", + "r-when-a-checklist": "Kun tarkistuslista on", + "r-when-the-checklist": "Kun tarkistuslista", + "r-completed": "Valmistunut", + "r-made-incomplete": "Tehty ei valmistuneeksi", + "r-when-a-item": "Kun tarkistuslistan kohta on", + "r-when-the-item": "Kun tarkistuslistan kohta", + "r-checked": "Ruksattu", + "r-unchecked": "Poistettu ruksi", + "r-move-card-to": "Siirrä kortti kohteeseen", + "r-top-of": "Päällä kohteen", + "r-bottom-of": "Pohjalla kohteen", + "r-its-list": "sen lista", + "r-archive": "Siirrä roskakoriin", + "r-unarchive": "Palauta roskakorista", + "r-card": "kortti", + "r-add": "Lisää", + "r-remove": "Poista", + "r-label": "tunniste", + "r-member": "jäsen", + "r-remove-all": "Poista kaikki jäsenet kortilta", + "r-checklist": "tarkistuslista", + "r-check-all": "Ruksaa kaikki", + "r-uncheck-all": "Poista ruksi kaikista", + "r-item-check": "Kohtaa tarkistuslistassa", + "r-check": "Ruksaa", + "r-uncheck": "Poista ruksi", + "r-item": "kohta", + "r-of-checklist": "tarkistuslistasta", + "r-send-email": "Lähetä sähköposti", + "r-to": "vastaanottajalle", + "r-subject": "aihe", + "r-rule-details": "Säännön yksityiskohdat", + "r-d-move-to-top-gen": "Siirrä kortti listansa alkuun", + "r-d-move-to-top-spec": "Siirrä kortti listan alkuun", + "r-d-move-to-bottom-gen": "Siirrä kortti listansa loppuun", + "r-d-move-to-bottom-spec": "Siirrä kortti listan loppuun", + "r-d-send-email": "Lähetä sähköposti", + "r-d-send-email-to": "vastaanottajalle", + "r-d-send-email-subject": "aihe", + "r-d-send-email-message": "viesti", + "r-d-archive": "Siirrä kortti roskakoriin", + "r-d-unarchive": "Palauta kortti roskakorista", + "r-d-add-label": "Lisää tunniste", + "r-d-remove-label": "Poista tunniste", + "r-d-add-member": "Lisää jäsen", + "r-d-remove-member": "Poista jäsen", + "r-d-remove-all-member": "Poista kaikki jäsenet", + "r-d-check-all": "Ruksaa kaikki listan kohdat", + "r-d-uncheck-all": "Poista ruksi kaikista listan kohdista", + "r-d-check-one": "Ruksaa kohta", + "r-d-uncheck-one": "Poista ruksi kohdasta", + "r-d-check-of-list": "tarkistuslistasta", + "r-d-add-checklist": "Lisää tarkistuslista", + "r-d-remove-checklist": "Poista tarkistuslista" } \ No newline at end of file diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json index 19d0c2d66..a29647df9 100644 --- a/i18n/fr.i18n.json +++ b/i18n/fr.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "a envoyé %s vers %s", "activity-unjoined": "a quitté %s", "activity-subtask-added": "a ajouté une sous-tâche à %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "a ajouté une checklist à %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "a ajouté un élément à la checklist '%s' dans %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Ajouter", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Ajouter une pièce jointe", "add-board": "Ajouter un tableau", "add-card": "Ajouter une carte", @@ -371,6 +381,7 @@ "restore": "Restaurer", "save": "Enregistrer", "search": "Chercher", + "rules": "Rules", "search-cards": "Rechercher parmi les titres et descriptions des cartes de ce tableau", "search-example": "Texte à rechercher ?", "select-color": "Sélectionner une couleur", @@ -507,5 +518,92 @@ "change-card-parent": "Changer le parent de la carte", "parent-card": "Carte parente", "source-board": "Tableau source", - "no-parent": "Ne pas afficher le parent" + "no-parent": "Ne pas afficher le parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Déplacer vers la corbeille", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Ajouter", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json index 47616c076..e3dc8b8cd 100644 --- a/i18n/gl.i18n.json +++ b/i18n/gl.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Engadir", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Engadir anexo", "add-board": "Engadir taboleiro", "add-card": "Engadir tarxeta", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Engadir", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json index 501651fc1..0460c51f5 100644 --- a/i18n/he.i18n.json +++ b/i18n/he.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "%s נשלח ל%s", "activity-unjoined": "בטל צירוף %s", "activity-subtask-added": "נוספה תת־משימה אל %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "נוספה רשימת משימות אל %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "נוסף פריט רשימת משימות אל ‚%s‘ תחת %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "הוספה", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "הוספת קובץ מצורף", "add-board": "הוספת לוח", "add-card": "הוספת כרטיס", @@ -371,6 +381,7 @@ "restore": "שחזור", "save": "שמירה", "search": "חיפוש", + "rules": "Rules", "search-cards": "חיפוש אחר כותרות ותיאורים של כרטיסים בלוח זה", "search-example": "טקסט לחיפוש ?", "select-color": "בחירת צבע", @@ -507,5 +518,92 @@ "change-card-parent": "החלפת הורה הכרטיס", "parent-card": "כרטיס הורה", "source-board": "לוח מקור", - "no-parent": "לא להציג את ההורה" + "no-parent": "לא להציג את ההורה", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "העברה לסל המחזור", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "הוספה", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json index 270f17544..3c25f5f26 100644 --- a/i18n/hu.i18n.json +++ b/i18n/hu.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "%s elküldve ide: %s", "activity-unjoined": "%s kilépett a csoportból", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "ellenőrzőlista hozzáadva ehhez: %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "ellenőrzőlista elem hozzáadva ehhez: „%s”, ebben: %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Hozzáadás", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Melléklet hozzáadása", "add-board": "Tábla hozzáadása", "add-card": "Kártya hozzáadása", @@ -371,6 +381,7 @@ "restore": "Visszaállítás", "save": "Mentés", "search": "Keresés", + "rules": "Rules", "search-cards": "Keresés a táblán lévő kártyák címében illetve leírásában", "search-example": "keresőkifejezés", "select-color": "Szín kiválasztása", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Lomtárba", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Hozzáadás", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json index da4584dd5..f708dcbf9 100644 --- a/i18n/hy.i18n.json +++ b/i18n/hy.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json index 94c9ad790..bb6a61c17 100644 --- a/i18n/id.i18n.json +++ b/i18n/id.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "terkirim %s ke %s", "activity-unjoined": "tidak bergabung %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "daftar periksa ditambahkan ke %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Tambah", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Pulihkan", "save": "Simpan", "search": "Cari", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Tambah", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json index 16ddfea4d..e0bbab363 100644 --- a/i18n/ig.i18n.json +++ b/i18n/ig.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Tinye", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Tinye", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json index ceed7d7a5..09bd35278 100644 --- a/i18n/it.i18n.json +++ b/i18n/it.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "inviato %s a %s", "activity-unjoined": "ha abbandonato %s", "activity-subtask-added": "aggiunto il sottocompito a 1%s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "aggiunta checklist a %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "Aggiunto l'elemento checklist a '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Aggiungere", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Aggiungi Allegato", "add-board": "Aggiungi Bacheca", "add-card": "Aggiungi Scheda", @@ -171,8 +181,8 @@ "comment-placeholder": "Scrivi Commento", "comment-only": "Solo commenti", "comment-only-desc": "Puoi commentare solo le schede.", - "no-comments": "No comments", - "no-comments-desc": "Can not see comments and activities.", + "no-comments": "Non ci sono commenti.", + "no-comments-desc": "Impossibile visualizzare commenti o attività.", "computer": "Computer", "confirm-subtask-delete-dialog": "Sei sicuro di voler eliminare il sotto-compito?", "confirm-checklist-delete-dialog": "Sei sicuro di voler eliminare la checklist?", @@ -371,6 +381,7 @@ "restore": "Ripristina", "save": "Salva", "search": "Cerca", + "rules": "Rules", "search-cards": "Ricerca per titolo e descrizione scheda su questa bacheca", "search-example": "Testo da ricercare?", "select-color": "Seleziona Colore", @@ -507,5 +518,92 @@ "change-card-parent": "Cambia la scheda genitore", "parent-card": "Scheda genitore", "source-board": "Bacheca d'origine", - "no-parent": "Non mostrare i genitori" + "no-parent": "Non mostrare i genitori", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Sposta nel cestino", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Aggiungere", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json index fc1b8acea..03219f9a3 100644 --- a/i18n/ja.i18n.json +++ b/i18n/ja.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "%s を %s に送りました", "activity-unjoined": "%s への参加を止めました", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "%s にチェックリストを追加しました", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "追加", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "添付ファイルを追加", "add-board": "ボードを追加", "add-card": "カードを追加", @@ -371,6 +381,7 @@ "restore": "復元", "save": "保存", "search": "検索", + "rules": "Rules", "search-cards": "カードのタイトルと詳細から検索", "search-example": "検索文字", "select-color": "色を選択", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "ゴミ箱へ移動", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "追加", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json index 02d70a389..c29200479 100644 --- a/i18n/ka.i18n.json +++ b/i18n/ka.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "გაიგზავნა %s %s-ში", "activity-unjoined": "არ შემოუერთდა %s", "activity-subtask-added": "დაამატა ქვესაქმიანობა %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "დაემატა ჩამონათვალი %s-ს", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "დამატებულია ჩამონათვალის ელემენტები '%s' %s-ში", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "დამატება", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "მიბმული ფაილის დამატება", "add-board": "დაფის დამატება", "add-card": "ბარათის დამატება", @@ -371,6 +381,7 @@ "restore": "აღდგენა", "save": "დამახსოვრება", "search": "ძებნა", + "rules": "Rules", "search-cards": "მოძებნეთ ბარათის სახელით და აღწერით ამ დაფაზე", "search-example": "საძიებო ტექსტი", "select-color": "ფერის მონიშვნა", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "ძირითადი დაფა", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "სანაგვე ურნაში გადატანა", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "დამატება", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json index 013e1b46b..5c295b779 100644 --- a/i18n/km.i18n.json +++ b/i18n/km.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json index 36de4299e..96f1da9d1 100644 --- a/i18n/ko.i18n.json +++ b/i18n/ko.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "%s를 %s로 보냄", "activity-unjoined": "%s에서 멤버 해제", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "%s에 체크리스트를 추가함", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "추가", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "첨부파일 추가", "add-board": "보드 추가", "add-card": "카드 추가", @@ -371,6 +381,7 @@ "restore": "복구", "save": "저장", "search": "검색", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "색 선택", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "추가", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json index 061b9c149..fcd39944d 100644 --- a/i18n/lv.i18n.json +++ b/i18n/lv.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json index f2478d17f..e2858d168 100644 --- a/i18n/mn.i18n.json +++ b/i18n/mn.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Нэмэх", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Хавсралт нэмэх", "add-board": "Самбар нэмэх", "add-card": "Карт нэмэх", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Нэмэх", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json index b479ee48d..ea3855eed 100644 --- a/i18n/nb.i18n.json +++ b/i18n/nb.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sendte %s til %s", "activity-unjoined": "forlot %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "la til sjekkliste til %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Legg til", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Legg til", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json index 58d657236..91d36a5b4 100644 --- a/i18n/nl.i18n.json +++ b/i18n/nl.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "%s gestuurd naar %s", "activity-unjoined": "uit %s gegaan", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "checklist toegevoegd aan %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "checklist punt toegevoegd aan '%s' in '%s'", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Toevoegen", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Voeg Bijlage Toe", "add-board": "Voeg Bord Toe", "add-card": "Voeg Kaart Toe", @@ -371,6 +381,7 @@ "restore": "Herstel", "save": "Opslaan", "search": "Zoek", + "rules": "Rules", "search-cards": "Zoeken in kaart titels en omschrijvingen op dit bord", "search-example": "Tekst om naar te zoeken?", "select-color": "Selecteer kleur", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Toevoegen", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json index 086dd348a..fe20073fb 100644 --- a/i18n/pl.i18n.json +++ b/i18n/pl.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "wysłano %s z %s", "activity-unjoined": "odłączono %s", "activity-subtask-added": "dodano podzadanie do %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "dodano listę zadań do %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "dodano zadanie '%s' do %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Dodaj", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Dodaj załącznik", "add-board": "Dodaj tablicę", "add-card": "Dodaj kartę", @@ -371,6 +381,7 @@ "restore": "Przywróć", "save": "Zapisz", "search": "Wyszukaj", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Wybierz kolor", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Przenieś do Kosza", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Dodaj", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json index 0176fb6a5..6c4011b8c 100644 --- a/i18n/pt-BR.i18n.json +++ b/i18n/pt-BR.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "enviou %s de %s", "activity-unjoined": "saiu de %s", "activity-subtask-added": "Adcionar subtarefa à", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "Adicionado lista de verificação a %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "adicionado o item de checklist para '%s' em %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Novo", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Adicionar Anexos", "add-board": "Adicionar Quadro", "add-card": "Adicionar Cartão", @@ -371,6 +381,7 @@ "restore": "Restaurar", "save": "Salvar", "search": "Buscar", + "rules": "Rules", "search-cards": "Pesquisa em títulos e descrições de cartões neste quadro", "search-example": "Texto para procurar", "select-color": "Selecionar Cor", @@ -507,5 +518,92 @@ "change-card-parent": "Mudar Pai do cartão", "parent-card": "Pai do cartão", "source-board": "Painel de fonte", - "no-parent": "Não mostrar Pai" + "no-parent": "Não mostrar Pai", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Mover para a lixeira", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Novo", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index 954f76544..73f87b7c0 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Adicionar", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Adicionar", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json index e70aeaf3f..5c5976a30 100644 --- a/i18n/ro.i18n.json +++ b/i18n/ro.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Salvează", "search": "Caută", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json index 980c08166..96e0023f8 100644 --- a/i18n/ru.i18n.json +++ b/i18n/ru.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "отправил %s в %s", "activity-unjoined": "вышел из %s", "activity-subtask-added": "добавил подзадачу в %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "добавил контрольный список в %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "добавил пункт контрольного списка в '%s' в карточке %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Создать", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Добавить вложение", "add-board": "Добавить доску", "add-card": "Добавить карту", @@ -371,6 +381,7 @@ "restore": "Восстановить", "save": "Сохранить", "search": "Поиск", + "rules": "Rules", "search-cards": "Искать в названиях и описаниях карточек на этой доске", "search-example": "Искать текст?", "select-color": "Выбрать цвет", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Переместить в Корзину", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Создать", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json index 395fd05c0..26299cd2c 100644 --- a/i18n/sr.i18n.json +++ b/i18n/sr.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "poslao %s %s-u", "activity-unjoined": "rastavio %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "lista je dodata u %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Dodaj", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Oporavi", "save": "Snimi", "search": "Pretraga", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Dodaj", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json index efd189870..93f88cad5 100644 --- a/i18n/sv.i18n.json +++ b/i18n/sv.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "skickade %s till %s", "activity-unjoined": "gick ur %s", "activity-subtask-added": "lade till deluppgift till %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "lade kontrollista till %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "lade checklista objekt till '%s' i %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Lägg till", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Lägg till bilaga", "add-board": "Lägg till anslagstavla", "add-card": "Lägg till kort", @@ -371,6 +381,7 @@ "restore": "Återställ", "save": "Spara", "search": "Sök", + "rules": "Rules", "search-cards": "Sök från korttitlar och beskrivningar på det här brädet", "search-example": "Text att söka efter?", "select-color": "Välj färg", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Flytta till papperskorgen", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Lägg till", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json index 006fa2dff..5f196881b 100644 --- a/i18n/ta.i18n.json +++ b/i18n/ta.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json index 1c2e3ecf1..0db95688c 100644 --- a/i18n/th.i18n.json +++ b/i18n/th.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "ส่ง %s ถึง %s", "activity-unjoined": "ยกเลิกเข้าร่วม %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "รายการถูกเพิ่มไป %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "เพิ่ม", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "กู้คืน", "save": "บันทึก", "search": "ค้นหา", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "เพิ่ม", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json index 382c7b2c9..ea589433d 100644 --- a/i18n/tr.i18n.json +++ b/i18n/tr.i18n.json @@ -42,10 +42,20 @@ "activity-removed": "%s i %s ten kaldırdı", "activity-sent": "%s i %s e gönderdi", "activity-unjoined": "%s içinden ayrıldı", - "activity-subtask-added": "added subtask to %s", + "activity-subtask-added": "Alt-görev 1%s'e eklendi", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "%s içine yapılacak listesi ekledi", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "%s içinde %s yapılacak listesine öğe ekledi", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Ekle", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Ek Ekle", "add-board": "Pano Ekle", "add-card": "Kart Ekle", @@ -135,8 +145,8 @@ "cardMorePopup-title": "Daha", "cards": "Kartlar", "cards-count": "Kartlar", - "casSignIn": "Sign In with CAS", - "cardType-card": "Card", + "casSignIn": "CAS ile giriş yapın", + "cardType-card": "Kart", "cardType-linkedCard": "Linked Card", "cardType-linkedBoard": "Linked Board", "change": "Değiştir", @@ -371,6 +381,7 @@ "restore": "Geri Getir", "save": "Kaydet", "search": "Arama", + "rules": "Rules", "search-cards": "Bu tahta da ki kart başlıkları ve açıklamalarında arama yap", "search-example": "Aranılacak metin?", "select-color": "Renk Seç", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Geri Dönüşüm Kutusu'na taşı", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Ekle", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json index 8aa2c6946..0b1aa8004 100644 --- a/i18n/uk.i18n.json +++ b/i18n/uk.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "sent %s to %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Додати", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Add Attachment", "add-board": "Add Board", "add-card": "Add Card", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Додати", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json index 7dabc3380..80bf6a93f 100644 --- a/i18n/vi.i18n.json +++ b/i18n/vi.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "gửi %s đến %s", "activity-unjoined": "đã rời khỏi %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "đã thêm checklist vào %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Thêm", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "Thêm Bản Đính Kèm", "add-board": "Thêm Bảng", "add-card": "Thêm Thẻ", @@ -371,6 +381,7 @@ "restore": "Restore", "save": "Save", "search": "Search", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "Thêm", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json index d663bb823..ed642527f 100644 --- a/i18n/zh-CN.i18n.json +++ b/i18n/zh-CN.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "发送 %s 至 %s", "activity-unjoined": "已解除 %s 关联", "activity-subtask-added": "添加子任务到%s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "已经将清单添加到 %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "添加清单项至'%s' 于 %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "添加", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "添加附件", "add-board": "添加看板", "add-card": "添加卡片", @@ -371,6 +381,7 @@ "restore": "还原", "save": "保存", "search": "搜索", + "rules": "Rules", "search-cards": "搜索当前看板上的卡片标题和描述", "search-example": "搜索", "select-color": "选择颜色", @@ -507,5 +518,92 @@ "change-card-parent": "修改卡片的上级", "parent-card": "上级卡片", "source-board": "源看板", - "no-parent": "不显示上级" + "no-parent": "不显示上级", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "移入回收站", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "添加", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json index 6a60d8b78..9a5bd74ac 100644 --- a/i18n/zh-TW.i18n.json +++ b/i18n/zh-TW.i18n.json @@ -43,9 +43,19 @@ "activity-sent": "寄送 %s 至 %s", "activity-unjoined": "解除關聯 %s", "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "新增待辦清單至 %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed the checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "新增待辦清單項目從 %s 到 %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "新增", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed the checklist %s", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "add-attachment": "新增附件", "add-board": "新增看板", "add-card": "新增卡片", @@ -371,6 +381,7 @@ "restore": "還原", "save": "儲存", "search": "搜尋", + "rules": "Rules", "search-cards": "Search from card titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "選擇顏色", @@ -507,5 +518,92 @@ "change-card-parent": "Change card's parent", "parent-card": "Parent card", "source-board": "Source board", - "no-parent": "Don't show parent" + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "Add new rule", + "r-no-rules": "No rules", + "r-when-a-card-is": "When a card is", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Recycle Bin", + "r-unarchived": "Restored from Recycle Bin", + "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-when-a-member": "When a member is", + "r-when-the-member": "When the member is", + "r-name": "name", + "r-is": "is", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Recycle Bin", + "r-unarchive": "Restore from Recycle Bin", + "r-card": "card", + "r-add": "新增", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-item-check": "Items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checlist", + "r-send-email": "Send an email", + "r-to": "to", + "r-subject": "subject", + "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": "Move card to Recycle Bin", + "r-d-unarchive": "Restore card from Recycle Bin", + "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 items of a list", + "r-d-uncheck-all": "Uncheck all items of a 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" } \ No newline at end of file From 4f299b72f731ffb836871cd19361a6359e3bdfed Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 16 Sep 2018 03:32:18 +0300 Subject: [PATCH 30/30] - IFTTT Rules. Useful to automate things like [adding labels, members, moving card, archiving them, checking checklists etc. Please test and report bugs. Later colors need to be made translatable. Thanks to GitHub users Angtrim and xet7 for their contributions. Related #1160 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5e5f3259..31afb2b52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# Upcoming Wekan release + +This release adds the following new features: + +- [IFTTT Rules](https://github.com/wekan/wekan/pull/1896). Useful to automate things like [adding labels, members, moving card, archiving them, checking checklists etc](https://github.com/wekan/wekan/issues/1160). + Please test and report bugs. Later colors need to be made translatable. + +Thanks to GitHub users Angtrim and xet7 for their contributions. + # v1.46 2018-09-15 Wekan release This release adds the following new features: