summaryrefslogtreecommitdiffstats
path: root/client/components
diff options
context:
space:
mode:
Diffstat (limited to 'client/components')
-rw-r--r--client/components/activities/activities.jade51
-rw-r--r--client/components/activities/activities.js16
-rw-r--r--client/components/boards/boardHeader.jade9
-rw-r--r--client/components/boards/boardHeader.js3
-rw-r--r--client/components/forms/forms.styl1
-rw-r--r--client/components/main/layouts.jade17
-rw-r--r--client/components/main/layouts.styl17
-rw-r--r--client/components/rules/.DS_Storebin0 -> 6148 bytes
-rw-r--r--client/components/rules/actions/boardActions.jade46
-rw-r--r--client/components/rules/actions/boardActions.js122
-rw-r--r--client/components/rules/actions/cardActions.jade43
-rw-r--r--client/components/rules/actions/cardActions.js118
-rw-r--r--client/components/rules/actions/checklistActions.jade51
-rw-r--r--client/components/rules/actions/checklistActions.js128
-rw-r--r--client/components/rules/actions/mailActions.jade11
-rw-r--r--client/components/rules/actions/mailActions.js35
-rw-r--r--client/components/rules/ruleDetails.jade18
-rw-r--r--client/components/rules/ruleDetails.js34
-rw-r--r--client/components/rules/rules.styl156
-rw-r--r--client/components/rules/rulesActions.jade25
-rw-r--r--client/components/rules/rulesActions.js58
-rw-r--r--client/components/rules/rulesList.jade27
-rw-r--r--client/components/rules/rulesList.js15
-rw-r--r--client/components/rules/rulesMain.jade9
-rw-r--r--client/components/rules/rulesMain.js59
-rw-r--r--client/components/rules/rulesTriggers.jade21
-rw-r--r--client/components/rules/rulesTriggers.js53
-rw-r--r--client/components/rules/triggers/boardTriggers.jade61
-rw-r--r--client/components/rules/triggers/boardTriggers.js103
-rw-r--r--client/components/rules/triggers/cardTriggers.jade79
-rw-r--r--client/components/rules/triggers/cardTriggers.js128
-rw-r--r--client/components/rules/triggers/checklistTriggers.jade83
-rw-r--r--client/components/rules/triggers/checklistTriggers.js146
33 files changed, 1738 insertions, 5 deletions
diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade
index d3e3d5ba..bddc4dad 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}}}.
@@ -31,12 +34,28 @@ 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}}}.
@@ -89,6 +108,12 @@ 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}}}.
@@ -119,6 +144,28 @@ 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 'removeChecklist')
+ | {{{_ 'activity-checklist-removed' cardLabel}}}.
+
+ 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')
@@ -127,6 +174,10 @@ template(name="cardActivities")
| {{{_ 'activity-attached' attachmentLink cardLabel}}}.
if attachment.isImage
img.attachment-image-preview(src=attachment.url)
+ if($eq activityType 'deleteAttachment')
+ | {{{_ '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/client/components/activities/activities.js b/client/components/activities/activities.js
index 25e151fd..b3fe8f50 100644
--- a/client/components/activities/activities.js
+++ b/client/components/activities/activities.js
@@ -50,6 +50,12 @@ BlazeComponent.extendComponent({
}
},
+ checkItem(){
+ const checkItemId = this.currentData().checklistItemId;
+ const checkItem = ChecklistItems.findOne({_id:checkItemId});
+ return checkItem.title;
+ },
+
boardLabel() {
return TAPi18n.__('this-board');
},
@@ -66,6 +72,16 @@ BlazeComponent.extendComponent({
}, card.title));
},
+ lastLabel(){
+ const lastLabelId = this.currentData().labelId;
+ const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(lastLabelId);
+ 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.jade b/client/components/boards/boardHeader.jade
index 1c6c8f8c..dfd281de 100644
--- a/client/components/boards/boardHeader.jade
+++ b/client/components/boards/boardHeader.jade
@@ -88,6 +88,10 @@ template(name="boardHeaderBar")
a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}")
i.fa.fa-times-thin
+ a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}")
+ i.fa.fa-magic
+ span {{_ 'rules'}}
+
a.board-header-btn.js-open-search-view(title="{{_ 'search'}}")
i.fa.fa-search
span {{_ 'search'}}
@@ -290,6 +294,11 @@ template(name="boardChangeTitlePopup")
textarea.js-board-desc= description
input.primary.wide(type="submit" value="{{_ 'rename'}}")
+template(name="boardCreateRulePopup")
+ p {{_ 'close-board-pop'}}
+ button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
+
+
template(name="archiveBoardPopup")
p {{_ 'close-board-pop'}}
button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js
index 2dfd58c1..89f686ab 100644
--- a/client/components/boards/boardHeader.js
+++ b/client/components/boards/boardHeader.js
@@ -108,6 +108,9 @@ BlazeComponent.extendComponent({
'click .js-open-search-view'() {
Sidebar.setView('search');
},
+ 'click .js-open-rules-view'() {
+ Modal.openWide('rulesMain');
+ },
'click .js-multiselection-activate'() {
const currentCard = Session.get('currentCard');
MultiSelection.activate();
diff --git a/client/components/forms/forms.styl b/client/components/forms/forms.styl
index 5be70b7a..892a6e74 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/main/layouts.jade b/client/components/main/layouts.jade
index b0024b33..ac7da3af 100644
--- a/client/components/main/layouts.jade
+++ b/client/components/main/layouts.jade
@@ -36,11 +36,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 a79ff337..3457a028 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: 0px
+ 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/.DS_Store b/client/components/rules/.DS_Store
new file mode 100644
index 00000000..5008ddfc
--- /dev/null
+++ b/client/components/rules/.DS_Store
Binary files differ
diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade
new file mode 100644
index 00000000..768d77cf
--- /dev/null
+++ b/client/components/rules/actions/boardActions.jade
@@ -0,0 +1,46 @@
+template(name="boardActions")
+ div.trigger-item
+ div.trigger-content
+ div.trigger-text
+ | {{_'r-move-card-to'}}
+ div.trigger-dropdown
+ select(id="move-gen-action")
+ option(value="top") {{_'r-top-of'}}
+ option(value="bottom") {{_'r-bottom-of'}}
+ div.trigger-text
+ | {{_'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'}}
+ div.trigger-dropdown
+ select(id="move-spec-action")
+ option(value="top") {{_'r-top-of'}}
+ option(value="bottom") {{_'r-bottom-of'}}
+ div.trigger-text
+ | {{_'r-list'}}
+ div.trigger-dropdown
+ input(id="listName",type=text,placeholder="{{_'r-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") {{_'r-archive'}}
+ option(value="unarchive") {{_'r-unarchive'}}
+ div.trigger-text
+ | {{_'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
new file mode 100644
index 00000000..95771fce
--- /dev/null
+++ b/client/components/rules/actions/boardActions.js
@@ -0,0 +1,122 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+
+ },
+
+ 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,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ if (actionSelected === 'bottom') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'moveCardToBottom',
+ listTitle,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ 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,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ if (actionSelected === 'bottom') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'moveCardToBottom',
+ 'listTitle': '*',
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ 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,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ if (actionSelected === 'unarchive') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'unarchive',
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ },
+ }];
+ },
+
+}).register('boardActions');
+/* eslint-no-undef */
diff --git a/client/components/rules/actions/cardActions.jade b/client/components/rules/actions/cardActions.jade
new file mode 100644
index 00000000..74ad9ab5
--- /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") {{{_'r-add'}}}
+ option(value="remove") {{{_'r-remove'}}}
+ div.trigger-text
+ | {{{_'r-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") {{{_'r-add'}}}
+ option(value="remove") {{{_'r-remove'}}}
+ div.trigger-text
+ | {{{_'r-member'}}}
+ div.trigger-dropdown
+ 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
+ | {{{_'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
new file mode 100644
index 00000000..a65407c1
--- /dev/null
+++ b/client/components/rules/actions/cardActions.js
@@ -0,0 +1,118 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.subscribe('allRules');
+ },
+
+ 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) {
+ labels[i].name = labels[i].color.toUpperCase();
+ }
+ }
+ return labels;
+ },
+
+ events() {
+ return [{
+ 'click .js-add-label-action' (event) {
+ const ruleName = this.data().ruleName.get();
+ 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');
+ const desc = Utils.getTriggerActionDesc(event, this);
+ if (actionSelected === 'add') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'addLabel',
+ labelId,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ if (actionSelected === 'remove') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'removeLabel',
+ labelId,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ 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');
+ const desc = Utils.getTriggerActionDesc(event, this);
+ if (actionSelected === 'add') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'addMember',
+ memberName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ desc,
+ });
+ }
+ if (actionSelected === 'remove') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'removeMember',
+ memberName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ 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,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ },
+ }];
+ },
+
+}).register('cardActions');
diff --git a/client/components/rules/actions/checklistActions.jade b/client/components/rules/actions/checklistActions.jade
new file mode 100644
index 00000000..8414a1a5
--- /dev/null
+++ b/client/components/rules/actions/checklistActions.jade
@@ -0,0 +1,51 @@
+template(name="checklistActions")
+ div.trigger-item
+ div.trigger-content
+ div.trigger-dropdown
+ select(id="check-action")
+ option(value="add") {{{_'r-add'}}}
+ option(value="remove") {{{_'r-remove'}}}
+ div.trigger-text
+ | {{{_'r-checklist'}}}
+ div.trigger-dropdown
+ input(id="checklist-name",type=text,placeholder="{{{_'r-name'}}}")
+ div.trigger-button.js-add-checklist-action.js-goto-rules
+ i.fa.fa-plus
+
+ div.trigger-item
+ div.trigger-content
+ div.trigger-dropdown
+ select(id="checkall-action")
+ option(value="check") {{{_'r-check-all'}}}
+ option(value="uncheck") {{{_'r-uncheck-all'}}}
+ div.trigger-text
+ | {{{_'r-items-check'}}}
+ div.trigger-dropdown
+ input(id="checklist-name2",type=text,placeholder="{{{_'r-name'}}}")
+ div.trigger-button.js-add-checkall-action.js-goto-rules
+ i.fa.fa-plus
+
+
+ div.trigger-item
+ div.trigger-content
+ div.trigger-dropdown
+ select(id="check-item-action")
+ option(value="check") {{{_'r-check'}}}
+ option(value="uncheck") {{{_'r-uncheck'}}}
+ div.trigger-text
+ | {{{_'r-item'}}}
+ div.trigger-dropdown
+ input(id="checkitem-name",type=text,placeholder="{{{_'r-name'}}}")
+ div.trigger-text
+ | {{{_'r-of-checklist'}}}
+ div.trigger-dropdown
+ 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
new file mode 100644
index 00000000..4b70f959
--- /dev/null
+++ b/client/components/rules/actions/checklistActions.js
@@ -0,0 +1,128 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.subscribe('allRules');
+ },
+ events() {
+ return [{
+ 'click .js-add-checklist-action' (event) {
+ const ruleName = this.data().ruleName.get();
+ 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');
+ const desc = Utils.getTriggerActionDesc(event, this);
+ if (actionSelected === 'add') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'addChecklist',
+ checklistName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ if (actionSelected === 'remove') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'removeChecklist',
+ checklistName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+
+ },
+ 'click .js-add-checkall-action' (event) {
+ const ruleName = this.data().ruleName.get();
+ 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');
+ const desc = Utils.getTriggerActionDesc(event, this);
+ if (actionSelected === 'check') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'checkAll',
+ checklistName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ if (actionSelected === 'uncheck') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'uncheckAll',
+ checklistName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ 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 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,
+ checkItemName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ if (actionSelected === 'uncheck') {
+ const triggerId = Triggers.insert(trigger);
+ const actionId = Actions.insert({
+ actionType: 'uncheckItem',
+ checklistName,
+ checkItemName,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ }
+ },
+ }];
+ },
+
+}).register('checklistActions');
diff --git a/client/components/rules/actions/mailActions.jade b/client/components/rules/actions/mailActions.jade
new file mode 100644
index 00000000..7be78c75
--- /dev/null
+++ b/client/components/rules/actions/mailActions.jade
@@ -0,0 +1,11 @@
+template(name="mailActions")
+ div.trigger-item.trigger-item-mail
+ div.trigger-content.trigger-content-mail
+ div.trigger-text.trigger-text-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'}}")
+ textarea(id="email-msg")
+ div.trigger-button.trigger-button-email.js-mail-action.js-goto-rules
+ i.fa.fa-plus
diff --git a/client/components/rules/actions/mailActions.js b/client/components/rules/actions/mailActions.js
new file mode 100644
index 00000000..40cbc280
--- /dev/null
+++ b/client/components/rules/actions/mailActions.js
@@ -0,0 +1,35 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+
+ },
+
+ events() {
+ return [{
+ 'click .js-mail-action' (event) {
+ const emailTo = this.find('#email-to').value;
+ const emailSubject = this.find('#email-subject').value;
+ const emailMsg = this.find('#email-msg').value;
+ const trigger = this.data().triggerVar.get();
+ const ruleName = this.data().ruleName.get();
+ const triggerId = Triggers.insert(trigger);
+ const boardId = Session.get('currentBoard');
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const actionId = Actions.insert({
+ actionType: 'sendEmail',
+ emailTo,
+ emailSubject,
+ emailMsg,
+ boardId,
+ desc,
+ });
+ Rules.insert({
+ title: ruleName,
+ triggerId,
+ actionId,
+ boardId,
+ });
+ },
+ }];
+ },
+
+}).register('mailActions');
diff --git a/client/components/rules/ruleDetails.jade b/client/components/rules/ruleDetails.jade
new file mode 100644
index 00000000..b9a1351c
--- /dev/null
+++ b/client/components/rules/ruleDetails.jade
@@ -0,0 +1,18 @@
+template(name="ruleDetails")
+ .rules
+ h2
+ i.fa.fa-magic
+ | {{{_ 'r-rule-details' }}}
+ .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/ruleDetails.js b/client/components/rules/ruleDetails.js
new file mode 100644
index 00000000..386b2b48
--- /dev/null
+++ b/client/components/rules/ruleDetails.js
@@ -0,0 +1,34 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.subscribe('allRules');
+ this.subscribe('allTriggers');
+ this.subscribe('allActions');
+
+ },
+
+ trigger() {
+ const ruleId = this.data().ruleId;
+ const rule = Rules.findOne({
+ _id: ruleId.get(),
+ });
+ const trigger = Triggers.findOne({
+ _id: rule.triggerId,
+ });
+ return trigger.description();
+ },
+ action() {
+ const ruleId = this.data().ruleId;
+ const rule = Rules.findOne({
+ _id: ruleId.get(),
+ });
+ const action = Actions.findOne({
+ _id: rule.actionId,
+ });
+ return action.description();
+ },
+
+ events() {
+ return [{}];
+ },
+
+}).register('ruleDetails');
diff --git a/client/components/rules/rules.styl b/client/components/rules/rules.styl
new file mode 100644
index 00000000..68d74d32
--- /dev/null
+++ b/client/components/rules/rules.styl
@@ -0,0 +1,156 @@
+.rules-list
+ overflow:hidden
+ overflow-y:scroll
+ max-height: 400px
+.rules-lists-item
+ display: block
+ position: relative
+ overflow: auto
+ p
+ display: inline-block
+ float: left
+ margin: revert
+
+.rules-btns-group
+ position: absolute
+ right: 0
+ top: 50%
+ transform: translateY(-50%)
+ button
+ margin: auto
+.rules-add
+ display: block
+ overflow: auto
+ margin-top: 15px
+ margin-bottom: 5px
+ input
+ display: inline-block
+ float: right
+ margin: auto
+ margin-right: 10px
+ button
+ 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
+ height: intrinsic
+ 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:40px
+ margin-bottom:5px
+ 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-text.trigger-text-email
+ margin-left: 5px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ .trigger-dropdown
+ display:inline-block
+ select
+ width:100px
+ height:30px
+ margin:0px
+ margin-left:5px
+ input
+ display: inline-block
+ width: 80px;
+ margin: 0;
+ .trigger-content-mail
+ left:20px
+ right:100px
+ .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%)
+ &:hover, &.is-active
+ box-shadow: 0 0 0 2px darken(white, 60%) inset
+ .trigger-button.trigger-button-email
+ top:30px
+ .trigger-item.trigger-item-mail
+ height:300px
+
+
+
diff --git a/client/components/rules/rulesActions.jade b/client/components/rules/rulesActions.jade
new file mode 100644
index 00000000..8dfceeeb
--- /dev/null
+++ b/client/components/rules/rulesActions.jade
@@ -0,0 +1,25 @@
+template(name="rulesActions")
+ h2
+ i.fa.fa-magic
+ | {{{_ 'r-rule' }}} "#{data.ruleName.get}" - {{{_ 'r-add-action'}}}
+ .triggers-content
+ .triggers-body
+ .triggers-side-menu
+ ul
+ li.active.js-set-board-actions
+ i.fa.fa-columns
+ li.js-set-card-actions
+ i.fa.fa-sticky-note
+ li.js-set-checklist-actions
+ i.fa.fa-check
+ li.js-set-mail-actions
+ i.fa.fa-at
+ .triggers-main-body
+ if ($eq currentActions.get 'board')
+ +boardActions(ruleName=data.ruleName triggerVar=data.triggerVar)
+ else if ($eq currentActions.get 'card')
+ +cardActions(ruleName=data.ruleName triggerVar=data.triggerVar)
+ else if ($eq currentActions.get 'checklist')
+ +checklistActions(ruleName=data.ruleName triggerVar=data.triggerVar)
+ else if ($eq currentActions.get 'mail')
+ +mailActions(ruleName=data.ruleName triggerVar=data.triggerVar) \ No newline at end of file
diff --git a/client/components/rules/rulesActions.js b/client/components/rules/rulesActions.js
new file mode 100644
index 00000000..ecba857b
--- /dev/null
+++ b/client/components/rules/rulesActions.js
@@ -0,0 +1,58 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.currentActions = new ReactiveVar('board');
+ },
+
+ setBoardActions() {
+ 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');
+ $('.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');
+ $('.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');
+ $('.js-set-card-actions').removeClass('active');
+ $('.js-set-board-actions').removeClass('active');
+ $('.js-set-checklist-actions').removeClass('active');
+ $('.js-set-mail-actions').addClass('active');
+ },
+
+ rules() {
+ return Rules.find({});
+ },
+
+ name() {
+ // console.log(this.data());
+ },
+ events() {
+ return [{
+ 'click .js-set-board-actions' (event) {
+ this.setBoardActions();
+ },
+ 'click .js-set-card-actions' (event) {
+ this.setCardActions();
+ },
+ 'click .js-set-mail-actions' (event) {
+ this.setMailActions();
+ },
+ 'click .js-set-checklist-actions' (event) {
+ this.setChecklistActions();
+ },
+ }];
+ },
+}).register('rulesActions');
diff --git a/client/components/rules/rulesList.jade b/client/components/rules/rulesList.jade
new file mode 100644
index 00000000..c2676aa7
--- /dev/null
+++ b/client/components/rules/rulesList.jade
@@ -0,0 +1,27 @@
+template(name="rulesList")
+ .rules
+ h2
+ i.fa.fa-magic
+ | {{{_ 'r-board-rules' }}}
+
+ ul.rules-list
+ each rules
+ li.rules-lists-item
+ p
+ = title
+ div.rules-btns-group
+ button.js-goto-details
+ i.fa.fa-eye
+ | {{{_ 'r-view-rule'}}}
+ if currentUser.isAdmin
+ button.js-delete-rule
+ i.fa.fa-trash-o
+ | {{{_ 'r-delete-rule'}}}
+ else
+ 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/rulesList.js b/client/components/rules/rulesList.js
new file mode 100644
index 00000000..d3923bf9
--- /dev/null
+++ b/client/components/rules/rulesList.js
@@ -0,0 +1,15 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.subscribe('allRules');
+ },
+
+ rules() {
+ const boardId = Session.get('currentBoard');
+ return Rules.find({
+ boardId,
+ });
+ },
+ events() {
+ return [{}];
+ },
+}).register('rulesList');
diff --git a/client/components/rules/rulesMain.jade b/client/components/rules/rulesMain.jade
new file mode 100644
index 00000000..dc33ee4e
--- /dev/null
+++ b/client/components/rules/rulesMain.jade
@@ -0,0 +1,9 @@
+template(name="rulesMain")
+ if($eq rulesCurrentTab.get 'rulesList')
+ +rulesList
+ if($eq rulesCurrentTab.get 'trigger')
+ +rulesTriggers(ruleName=ruleName triggerVar=triggerVar)
+ if($eq rulesCurrentTab.get 'action')
+ +rulesActions(ruleName=ruleName triggerVar=triggerVar)
+ if($eq rulesCurrentTab.get 'ruleDetails')
+ +ruleDetails(ruleId=ruleId) \ No newline at end of file
diff --git a/client/components/rules/rulesMain.js b/client/components/rules/rulesMain.js
new file mode 100644
index 00000000..65cc3d98
--- /dev/null
+++ b/client/components/rules/rulesMain.js
@@ -0,0 +1,59 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.rulesCurrentTab = new ReactiveVar('rulesList');
+ this.ruleName = new ReactiveVar('');
+ this.triggerVar = new ReactiveVar();
+ this.ruleId = new ReactiveVar();
+ },
+
+ setTrigger() {
+ this.rulesCurrentTab.set('trigger');
+ },
+
+ setRulesList() {
+ this.rulesCurrentTab.set('rulesList');
+ },
+
+ setAction() {
+ this.rulesCurrentTab.set('action');
+ },
+
+ setRuleDetails() {
+ this.rulesCurrentTab.set('ruleDetails');
+ },
+
+ events() {
+ 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) {
+ event.preventDefault();
+ const ruleTitle = this.find('#ruleTitle').value;
+ this.find('#ruleTitle').value = '';
+ this.ruleName.set(ruleTitle);
+ this.setTrigger();
+ },
+ 'click .js-goto-action' (event) {
+ event.preventDefault();
+ this.setAction();
+ },
+ 'click .js-goto-rules' (event) {
+ event.preventDefault();
+ this.setRulesList();
+ },
+ 'click .js-goto-details' (event) {
+ event.preventDefault();
+ const rule = this.currentData();
+ this.ruleId.set(rule._id);
+ this.setRuleDetails();
+ },
+
+ }];
+ },
+
+}).register('rulesMain');
diff --git a/client/components/rules/rulesTriggers.jade b/client/components/rules/rulesTriggers.jade
new file mode 100644
index 00000000..0ef5edfa
--- /dev/null
+++ b/client/components/rules/rulesTriggers.jade
@@ -0,0 +1,21 @@
+template(name="rulesTriggers")
+ h2
+ i.fa.fa-magic
+ | {{{_ 'r-rule' }}} "#{data.ruleName.get}" - {{{_ 'r-add-trigger'}}}
+ .triggers-content
+ .triggers-body
+ .triggers-side-menu
+ ul
+ li.active.js-set-board-triggers
+ i.fa.fa-columns
+ li.js-set-card-triggers
+ i.fa.fa-sticky-note
+ li.js-set-checklist-triggers
+ i.fa.fa-check
+ .triggers-main-body
+ if showBoardTrigger.get
+ +boardTriggers
+ else if showCardTrigger.get
+ +cardTriggers
+ else if showChecklistTrigger.get
+ +checklistTriggers \ No newline at end of file
diff --git a/client/components/rules/rulesTriggers.js b/client/components/rules/rulesTriggers.js
new file mode 100644
index 00000000..506e63b2
--- /dev/null
+++ b/client/components/rules/rulesTriggers.js
@@ -0,0 +1,53 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.showBoardTrigger = new ReactiveVar(true);
+ this.showCardTrigger = new ReactiveVar(false);
+ this.showChecklistTrigger = new ReactiveVar(false);
+ },
+
+ setBoardTriggers() {
+ this.showBoardTrigger.set(true);
+ this.showCardTrigger.set(false);
+ this.showChecklistTrigger.set(false);
+ $('.js-set-card-triggers').removeClass('active');
+ $('.js-set-board-triggers').addClass('active');
+ $('.js-set-checklist-triggers').removeClass('active');
+ },
+ setCardTriggers() {
+ this.showBoardTrigger.set(false);
+ this.showCardTrigger.set(true);
+ this.showChecklistTrigger.set(false);
+ $('.js-set-card-triggers').addClass('active');
+ $('.js-set-board-triggers').removeClass('active');
+ $('.js-set-checklist-triggers').removeClass('active');
+ },
+ setChecklistTriggers() {
+ this.showBoardTrigger.set(false);
+ this.showCardTrigger.set(false);
+ this.showChecklistTrigger.set(true);
+ $('.js-set-card-triggers').removeClass('active');
+ $('.js-set-board-triggers').removeClass('active');
+ $('.js-set-checklist-triggers').addClass('active');
+ },
+
+ rules() {
+ return Rules.find({});
+ },
+
+ name() {
+ // console.log(this.data());
+ },
+ events() {
+ return [{
+ 'click .js-set-board-triggers' (event) {
+ this.setBoardTriggers();
+ },
+ 'click .js-set-card-triggers' (event) {
+ this.setCardTriggers();
+ },
+ 'click .js-set-checklist-triggers' (event) {
+ this.setChecklistTriggers();
+ },
+ }];
+ },
+}).register('rulesTriggers');
diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade
new file mode 100644
index 00000000..266f11f8
--- /dev/null
+++ b/client/components/rules/triggers/boardTriggers.jade
@@ -0,0 +1,61 @@
+template(name="boardTriggers")
+ div.trigger-item
+ div.trigger-content
+ div.trigger-text
+ | {{_'r-when-a-card-is'}}
+ div.trigger-dropdown
+ select(id="gen-action")
+ option(value="created") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'r-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'}}
+ div.trigger-dropdown
+ select(id="create-action")
+ option(value="created") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'r-list'}}
+ div.trigger-dropdown
+ 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'}}
+ div.trigger-dropdown
+ select(id="move-action")
+ option(value="moved-to") {{_'r-moved-to'}}
+ option(value="moved-from") {{_'r-moved-from'}}
+ div.trigger-text
+ | {{_'r-list'}}
+ div.trigger-dropdown
+ 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'}}
+ div.trigger-dropdown
+ select(id="arch-action")
+ 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
new file mode 100644
index 00000000..e4753642
--- /dev/null
+++ b/client/components/rules/triggers/boardTriggers.js
@@ -0,0 +1,103 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+
+ },
+
+ events() {
+ return [{
+ 'click .js-add-gen-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const datas = this.data();
+ const actionSelected = this.find('#gen-action').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'created') {
+ datas.triggerVar.set({
+ activityType: 'createCard',
+ boardId,
+ 'listName': '*',
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'removeCard',
+ boardId,
+ desc,
+ });
+ }
+
+ },
+ 'click .js-add-create-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const datas = this.data();
+ const actionSelected = this.find('#create-action').value;
+ const listName = this.find('#create-list-name').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'created') {
+ datas.triggerVar.set({
+ activityType: 'createCard',
+ boardId,
+ listName,
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'removeCard',
+ boardId,
+ listName,
+ desc,
+ });
+ }
+ },
+ 'click .js-add-moved-trigger' (event) {
+ const datas = this.data();
+ const desc = Utils.getTriggerActionDesc(event, this);
+
+ const actionSelected = this.find('#move-action').value;
+ const listName = this.find('#move-list-name').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'moved-to') {
+ datas.triggerVar.set({
+ activityType: 'moveCard',
+ boardId,
+ listName,
+ 'oldListName': '*',
+ desc,
+ });
+ }
+ if (actionSelected === 'moved-from') {
+ datas.triggerVar.set({
+ activityType: 'moveCard',
+ boardId,
+ 'listName': '*',
+ 'oldListName': listName,
+ desc,
+ });
+ }
+ },
+ 'click .js-add-arc-trigger' (event) {
+ 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') {
+ datas.triggerVar.set({
+ activityType: 'archivedCard',
+ boardId,
+ desc,
+ });
+ }
+ if (actionSelected === 'unarchived') {
+ datas.triggerVar.set({
+ activityType: 'restoredCard',
+ boardId,
+ desc,
+ });
+ }
+ },
+
+ }];
+ },
+
+}).register('boardTriggers');
diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade
new file mode 100644
index 00000000..5226e3c4
--- /dev/null
+++ b/client/components/rules/triggers/cardTriggers.jade
@@ -0,0 +1,79 @@
+template(name="cardTriggers")
+ div.trigger-item
+ div.trigger-content
+ div.trigger-text
+ | {{_'r-when-a-label-is'}}
+ div.trigger-dropdown
+ select(id="label-action")
+ option(value="added") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'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'}}
+ div.trigger-dropdown
+ select(id="spec-label")
+ each labels
+ option(value="#{_id}")
+ = name
+ div.trigger-text
+ | {{_'r-is'}}
+ div.trigger-dropdown
+ select(id="spec-label-action")
+ option(value="added") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'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'}}
+ div.trigger-dropdown
+ select(id="gen-member-action")
+ option(value="added") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'r-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
+ | {{_'r-when-the-member'}}
+ div.trigger-dropdown
+ input(id="spec-member",type=text,placeholder="{{_'r-name'}}")
+ div.trigger-text
+ | {{_'r-is'}}
+ div.trigger-dropdown
+ select(id="spec-member-action")
+ option(value="added") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'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'}}
+ div.trigger-text
+ | {{_'r-is'}}
+ div.trigger-dropdown
+ select(id="attach-action")
+ option(value="added") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'r-a-card'}}
+ div.trigger-button.js-add-attachment-trigger.js-goto-action
+ i.fa.fa-plus
diff --git a/client/components/rules/triggers/cardTriggers.js b/client/components/rules/triggers/cardTriggers.js
new file mode 100644
index 00000000..704c7690
--- /dev/null
+++ b/client/components/rules/triggers/cardTriggers.js
@@ -0,0 +1,128 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.subscribe('allRules');
+ },
+ 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) {
+ labels[i].name = labels[i].color.toUpperCase();
+ }
+ }
+ return labels;
+ },
+ events() {
+ return [{
+ 'click .js-add-gen-label-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const datas = this.data();
+ const actionSelected = this.find('#label-action').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'added') {
+ datas.triggerVar.set({
+ activityType: 'addedLabel',
+ boardId,
+ 'labelId': '*',
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'removedLabel',
+ boardId,
+ 'labelId': '*',
+ desc,
+ });
+ }
+ },
+ 'click .js-add-spec-label-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ 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') {
+ datas.triggerVar.set({
+ activityType: 'addedLabel',
+ boardId,
+ labelId,
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'removedLabel',
+ boardId,
+ labelId,
+ desc,
+ });
+ }
+ },
+ 'click .js-add-gen-member-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const datas = this.data();
+ const actionSelected = this.find('#gen-member-action').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'added') {
+ datas.triggerVar.set({
+ activityType: 'joinMember',
+ boardId,
+ 'memberId': '*',
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'unjoinMember',
+ boardId,
+ 'memberId': '*',
+ desc,
+ });
+ }
+ },
+ 'click .js-add-spec-member-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ 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') {
+ datas.triggerVar.set({
+ activityType: 'joinMember',
+ boardId,
+ memberId,
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'unjoinMember',
+ boardId,
+ memberId,
+ desc,
+ });
+ }
+ },
+ 'click .js-add-attachment-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const datas = this.data();
+ const actionSelected = this.find('#attach-action').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'added') {
+ datas.triggerVar.set({
+ activityType: 'addAttachment',
+ boardId,
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'deleteAttachment',
+ boardId,
+ desc,
+ });
+ }
+ },
+ }];
+ },
+}).register('cardTriggers');
diff --git a/client/components/rules/triggers/checklistTriggers.jade b/client/components/rules/triggers/checklistTriggers.jade
new file mode 100644
index 00000000..c6cd99a6
--- /dev/null
+++ b/client/components/rules/triggers/checklistTriggers.jade
@@ -0,0 +1,83 @@
+template(name="checklistTriggers")
+ div.trigger-item
+ div.trigger-content
+ div.trigger-text
+ | {{_'r-when-a-checklist'}}
+ div.trigger-dropdown
+ select(id="gen-check-action")
+ option(value="created") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'r-a-card'}}
+ div.trigger-button.js-add-gen-check-trigger.js-goto-action
+ i.fa.fa-plus
+
+
+ div.trigger-item
+ div.trigger-content
+ div.trigger-text
+ | {{_'r-when-the-checklist'}}
+ div.trigger-dropdown
+ input(id="check-name",type=text,placeholder="{{_'r-name'}}")
+ div.trigger-text
+ | {{_'r-is'}}
+ div.trigger-dropdown
+ select(id="spec-check-action")
+ option(value="created") {{_'r-added-to'}}
+ option(value="removed") {{_'r-removed-from'}}
+ div.trigger-text
+ | {{_'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'}}
+ div.trigger-dropdown
+ select(id="gen-comp-check-action")
+ 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'}}
+ div.trigger-dropdown
+ input(id="spec-comp-check-name",type=text,placeholder="{{_'r-name'}}")
+ div.trigger-text
+ | {{_'r-is'}}
+ div.trigger-dropdown
+ select(id="spec-comp-check-action")
+ 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'}}
+ div.trigger-dropdown
+ select(id="check-item-gen-action")
+ 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'}}
+ div.trigger-dropdown
+ input(id="check-item-name",type=text,placeholder="{{_'r-name'}}")
+ div.trigger-text
+ | {{_'r-is'}}
+ div.trigger-dropdown
+ select(id="check-item-spec-action")
+ 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
diff --git a/client/components/rules/triggers/checklistTriggers.js b/client/components/rules/triggers/checklistTriggers.js
new file mode 100644
index 00000000..01f3effe
--- /dev/null
+++ b/client/components/rules/triggers/checklistTriggers.js
@@ -0,0 +1,146 @@
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.subscribe('allRules');
+ },
+ events() {
+ return [{
+ 'click .js-add-gen-check-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const datas = this.data();
+ const actionSelected = this.find('#gen-check-action').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'created') {
+ datas.triggerVar.set({
+ activityType: 'addChecklist',
+ boardId,
+ 'checklistName': '*',
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'removeChecklist',
+ boardId,
+ 'checklistName': '*',
+ desc,
+ });
+ }
+ },
+ 'click .js-add-spec-check-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ 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') {
+ datas.triggerVar.set({
+ activityType: 'addChecklist',
+ boardId,
+ 'checklistName': checklistId,
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'removeChecklist',
+ boardId,
+ 'checklistName': checklistId,
+ desc,
+ });
+ }
+ },
+ 'click .js-add-gen-comp-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+
+ const datas = this.data();
+ const actionSelected = this.find('#gen-comp-check-action').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'completed') {
+ datas.triggerVar.set({
+ activityType: 'completeChecklist',
+ boardId,
+ 'checklistName': '*',
+ desc,
+ });
+ }
+ if (actionSelected === 'uncompleted') {
+ datas.triggerVar.set({
+ activityType: 'uncompleteChecklist',
+ boardId,
+ 'checklistName': '*',
+ desc,
+ });
+ }
+ },
+ 'click .js-add-spec-comp-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ 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') {
+ datas.triggerVar.set({
+ activityType: 'completeChecklist',
+ boardId,
+ 'checklistName': checklistId,
+ desc,
+ });
+ }
+ if (actionSelected === 'removed') {
+ datas.triggerVar.set({
+ activityType: 'uncompleteChecklist',
+ boardId,
+ 'checklistName': checklistId,
+ desc,
+ });
+ }
+ },
+ 'click .js-add-gen-check-item-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ const datas = this.data();
+ const actionSelected = this.find('#check-item-gen-action').value;
+ const boardId = Session.get('currentBoard');
+ if (actionSelected === 'checked') {
+ datas.triggerVar.set({
+ activityType: 'checkedItem',
+ boardId,
+ 'checklistItemName': '*',
+ desc,
+ });
+ }
+ if (actionSelected === 'unchecked') {
+ datas.triggerVar.set({
+ activityType: 'uncheckedItem',
+ boardId,
+ 'checklistItemName': '*',
+ desc,
+ });
+ }
+ },
+ 'click .js-add-spec-check-item-trigger' (event) {
+ const desc = Utils.getTriggerActionDesc(event, this);
+ 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') {
+ datas.triggerVar.set({
+ activityType: 'checkedItem',
+ boardId,
+ 'checklistItemName': checklistItemId,
+ desc,
+ });
+ }
+ if (actionSelected === 'unchecked') {
+ datas.triggerVar.set({
+ activityType: 'uncheckedItem',
+ boardId,
+ 'checklistItemName': checklistItemId,
+ desc,
+ });
+ }
+ },
+ }];
+ },
+
+}).register('checklistTriggers');