diff options
author | Lauri Ojansivu <x@xet7.org> | 2018-09-16 00:10:40 +0300 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2018-09-16 00:10:40 +0300 |
commit | 6673b79738720651f186039808d4e22ef14e4c3c (patch) | |
tree | 464eb186f382f14b93c9c9ca7b21a14851746770 /client | |
parent | 053757f135b54241b4899a83cd3bb749b1e81bc9 (diff) | |
parent | 36c04edb9f7cf16fb450b76598c4957968d4674b (diff) | |
download | wekan-6673b79738720651f186039808d4e22ef14e4c3c.tar.gz wekan-6673b79738720651f186039808d4e22ef14e4c3c.tar.bz2 wekan-6673b79738720651f186039808d4e22ef14e4c3c.zip |
Merge branch 'feature-rules' of https://github.com/Angtrim/wekan into Angtrim-feature-rules
Diffstat (limited to 'client')
37 files changed, 1782 insertions, 10 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..6633a91a 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -49,6 +49,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'); @@ -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/lists/listBody.js b/client/components/lists/listBody.js index d99d9dc8..ce8396b9 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -98,6 +98,8 @@ BlazeComponent.extendComponent({ evt.preventDefault(); Utils.goBoardId(Session.get('currentBoard')); } + console.log(evt) + }, cardIsSelected() { 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 Binary files differnew file mode 100644 index 00000000..5008ddfc --- /dev/null +++ b/client/components/rules/.DS_Store diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade new file mode 100644 index 00000000..dfeb3d84 --- /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..3eda039f --- /dev/null +++ b/client/components/rules/actions/boardActions.js @@ -0,0 +1,121 @@ +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": 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.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..a6e74fe9 --- /dev/null +++ b/client/components/rules/actions/cardActions.js @@ -0,0 +1,119 @@ +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(); + } + } + console.log(labels); + 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": 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, + "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'); + 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.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..0b4c2167 --- /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": 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, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": 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": 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, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": 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": 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, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + } + }, + }]; + }, + +}).register('checklistActions');
\ No newline at end of file diff --git a/client/components/rules/actions/mailActions.jade b/client/components/rules/actions/mailActions.jade new file mode 100644 index 00000000..c10fb384 --- /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
\ No newline at end of file diff --git a/client/components/rules/actions/mailActions.js b/client/components/rules/actions/mailActions.js new file mode 100644 index 00000000..dae7d08d --- /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": emailTo, + "emailSubject": emailSubject, + "emailMsg": emailMsg, + "boardId": boardId, + "desc": desc + }); + Rules.insert({ + title: ruleName, + triggerId: triggerId, + actionId: actionId, + "boardId": boardId + }); + }, + }]; + }, + +}).register('mailActions');
\ No newline at end of file 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..385b0bae --- /dev/null +++ b/client/components/rules/ruleDetails.js @@ -0,0 +1,36 @@ +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 + }); + console.log(trigger); + return trigger.description(); + }, + action() { + const ruleId = this.data().ruleId; + const rule = Rules.findOne({ + _id: ruleId.get() + }); + const action = Actions.findOne({ + _id: rule.actionId + }); + console.log(action); + return action.description(); + }, + + events() { + return [{}]; + }, + +}).register('ruleDetails');
\ No newline at end of file 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..d492cbd5 --- /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');
\ No newline at end of file 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..e7b4660a --- /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": boardId + }); + }, + events() { + return [{}]; + }, +}).register('rulesList');
\ No newline at end of file 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..e4cac03d --- /dev/null +++ b/client/components/rules/rulesMain.js @@ -0,0 +1,58 @@ +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');
\ No newline at end of file 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..f9dd4ecc --- /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');
\ No newline at end of file diff --git a/client/components/rules/triggers/boardTriggers.jade b/client/components/rules/triggers/boardTriggers.jade new file mode 100644 index 00000000..b5e08c8c --- /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..95c10a5b --- /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); + let datas = this.data(); + const actionSelected = this.find('#gen-action').value; + const boardId = Session.get('currentBoard') + if (actionSelected == "created") { + datas.triggerVar.set({ + activityType: "createCard", + "boardId": boardId, + "listName": "*", + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "removeCard", + "boardId": boardId, + "desc": desc + }); + } + + }, + 'click .js-add-create-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + let datas = this.data(); + const actionSelected = this.find('#create-action').value; + const listName = this.find('#create-list-name').value; + const boardId = Session.get('currentBoard') + if (actionSelected == "created") { + datas.triggerVar.set({ + activityType: "createCard", + "boardId": boardId, + "listName": listName, + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "removeCard", + "boardId": boardId, + "listName": listName, + "desc": desc + }); + } + }, + 'click .js-add-moved-trigger' (event) { + let datas = this.data(); + const desc = Utils.getTriggerActionDesc(event, this); + + const actionSelected = this.find('#move-action').value; + const listName = this.find('#move-list-name').value; + const boardId = Session.get('currentBoard') + if (actionSelected == "moved-to") { + datas.triggerVar.set({ + activityType: "moveCard", + "boardId": boardId, + "listName": listName, + "oldListName": "*", + "desc": desc + }); + } + if (actionSelected == "moved-from") { + datas.triggerVar.set({ + activityType: "moveCard", + "boardId": boardId, + "listName": "*", + "oldListName": listName, + "desc": desc + }); + } + }, + 'click .js-add-arc-trigger' (event) { + let datas = this.data(); + const desc = Utils.getTriggerActionDesc(event, this); + const actionSelected = this.find('#arch-action').value; + const boardId = Session.get('currentBoard') + if (actionSelected == "archived") { + datas.triggerVar.set({ + activityType: "archivedCard", + "boardId": boardId, + "desc": desc + }); + } + if (actionSelected == "unarchived") { + datas.triggerVar.set({ + activityType: "restoredCard", + "boardId": boardId, + "desc": desc + }); + } + } + + }]; + }, + +}).register('boardTriggers');
\ No newline at end of file diff --git a/client/components/rules/triggers/cardTriggers.jade b/client/components/rules/triggers/cardTriggers.jade new file mode 100644 index 00000000..dd02413c --- /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
\ 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 00000000..c0a5ec1a --- /dev/null +++ b/client/components/rules/triggers/cardTriggers.js @@ -0,0 +1,130 @@ +BlazeComponent.extendComponent({ + onCreated() { + this.subscribe('allRules'); + }, + labels() { + const labels = Boards.findOne(Session.get('currentBoard')).labels; + console.log(labels); + for (let i = 0; i < labels.length; i++) { + if (labels[i].name == "" || labels[i].name == undefined) { + labels[i].name = labels[i].color.toUpperCase(); + } + } + 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 actionSelected = this.find('#label-action').value; + const boardId = Session.get('currentBoard') + if (actionSelected == "added") { + datas.triggerVar.set({ + activityType: "addedLabel", + "boardId": boardId, + "labelId": "*", + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "removedLabel", + "boardId": boardId, + "labelId": "*", + "desc": desc + }); + } + }, + 'click .js-add-spec-label-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + let 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": boardId, + "labelId": labelId, + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "removedLabel", + "boardId": boardId, + "labelId": labelId, + "desc": desc + }); + } + }, + 'click .js-add-gen-member-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + let 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": boardId, + "memberId": "*", + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "unjoinMember", + "boardId": boardId, + "memberId": "*", + "desc": desc + }); + } + }, + 'click .js-add-spec-member-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + 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") { + datas.triggerVar.set({ + activityType: "joinMember", + "boardId": boardId, + "memberId": memberId, + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "unjoinMember", + "boardId": boardId, + "memberId": memberId, + "desc": desc + }); + } + }, + 'click .js-add-attachment-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + let datas = this.data(); + const actionSelected = this.find('#attach-action').value; + const boardId = Session.get('currentBoard') + if (actionSelected == "added") { + datas.triggerVar.set({ + activityType: "addAttachment", + "boardId": boardId, + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "deleteAttachment", + "boardId": boardId, + "desc": desc + }); + } + }, + }]; + }, +}).register('cardTriggers');
\ No newline at end of file diff --git a/client/components/rules/triggers/checklistTriggers.jade b/client/components/rules/triggers/checklistTriggers.jade new file mode 100644 index 00000000..465713c8 --- /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
\ 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 00000000..6e7b3445 --- /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); + let 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": boardId, + "checklistName": "*", + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "removeChecklist", + "boardId": boardId, + "checklistName": "*", + "desc": desc + }); + } + }, + 'click .js-add-spec-check-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + 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") { + datas.triggerVar.set({ + activityType: "addChecklist", + "boardId": boardId, + "checklistName": checklistId, + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "removeChecklist", + "boardId": boardId, + "checklistName": checklistId, + "desc": desc + }); + } + }, + 'click .js-add-gen-comp-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + + let 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": boardId, + "checklistName": "*", + "desc": desc + }); + } + if (actionSelected == "uncompleted") { + datas.triggerVar.set({ + activityType: "uncompleteChecklist", + "boardId": boardId, + "checklistName": "*", + "desc": desc + }); + } + }, + 'click .js-add-spec-comp-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + 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") { + datas.triggerVar.set({ + activityType: "completeChecklist", + "boardId": boardId, + "checklistName": checklistId, + "desc": desc + }); + } + if (actionSelected == "removed") { + datas.triggerVar.set({ + activityType: "uncompleteChecklist", + "boardId": boardId, + "checklistName": checklistId, + "desc": desc + }); + } + }, + 'click .js-add-gen-check-item-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + let 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": boardId, + "checklistItemName": "*", + "desc": desc + }); + } + if (actionSelected == "unchecked") { + datas.triggerVar.set({ + activityType: "uncheckedItem", + "boardId": boardId, + "checklistItemName": "*", + "desc": desc + }); + } + }, + 'click .js-add-spec-check-item-trigger' (event) { + const desc = Utils.getTriggerActionDesc(event, this); + 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 == "checked") { + datas.triggerVar.set({ + activityType: "checkedItem", + "boardId": boardId, + "checklistItemName": checklistItemId, + "desc": desc + }); + } + if (actionSelected == "unchecked") { + datas.triggerVar.set({ + activityType: "uncheckedItem", + "boardId": boardId, + "checklistItemName": checklistItemId, + "desc": desc + }); + } + }, + }]; + }, + +}).register('checklistTriggers');
\ No newline at end of file diff --git a/client/lib/modal.js b/client/lib/modal.js index d5350264..3c27a179 100644 --- a/client/lib/modal.js +++ b/client/lib/modal.js @@ -4,6 +4,7 @@ window.Modal = new class { constructor() { this._currentModal = new ReactiveVar(closedValue); this._onCloseGoTo = ''; + this._isWideModal = false; } getHeaderName() { @@ -20,6 +21,10 @@ window.Modal = new class { return this.getTemplateName() !== closedValue; } + isWide(){ + return this._isWideModal; + } + close() { this._currentModal.set(closedValue); if (this._onCloseGoTo) { @@ -27,9 +32,16 @@ window.Modal = new class { } } + openWide(modalName, { header = '', onCloseGoTo = ''} = {}) { + this._currentModal.set({ header, modalName }); + this._onCloseGoTo = onCloseGoTo; + this._isWideModal = true; + } + open(modalName, { header = '', onCloseGoTo = ''} = {}) { this._currentModal.set({ header, modalName }); this._onCloseGoTo = onCloseGoTo; + } }(); @@ -38,5 +50,5 @@ Blaze.registerHelper('Modal', Modal); EscapeActions.register('modalWindow', () => Modal.close(), () => Modal.isOpen(), - { noClickEscapeOn: '.modal-content' } + { noClickEscapeOn: '.modal-container' } ); diff --git a/client/lib/popup.js b/client/lib/popup.js index 0a700f82..cb56858f 100644 --- a/client/lib/popup.js +++ b/client/lib/popup.js @@ -83,6 +83,7 @@ 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 5349e500..a15dac39 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -39,11 +39,11 @@ Utils = { if (!prevData && !nextData) { base = 0; increment = 1; - // If we drop the card in the first position + // If we drop the card in the first position } else if (!prevData) { base = nextData.sort - 1; increment = -1; - // If we drop the card in the last position + // If we drop the card in the last position } else if (!nextData) { base = prevData.sort + 1; increment = 1; @@ -71,11 +71,11 @@ Utils = { if (!prevCardDomElement && !nextCardDomElement) { base = 0; increment = 1; - // If we drop the card in the first position + // If we drop the card in the first position } else if (!prevCardDomElement) { base = Blaze.getData(nextCardDomElement).sort - 1; increment = -1; - // If we drop the card in the last position + // If we drop the card in the last position } else if (!nextCardDomElement) { base = Blaze.getData(prevCardDomElement).sort + 1; increment = 1; @@ -145,6 +145,7 @@ Utils = { }); }, +<<<<<<< HEAD setMatomo(data){ window._paq = window._paq || []; window._paq.push(['setDoNotTrack', data.doNotTrack]); @@ -188,6 +189,26 @@ 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 = ""; + for (let i = 0; i < triggerEls.length; i++) { + const element = tempInstance.$(triggerEls[i]); + 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(); + } + // Add space + if (i != length - 1) { + finalString += " "; + } + } + return finalString; }, }; |