diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index 9e2e91dd7..e943e338f 100644 --- a/client/components/cards/checklists.jade +++ b/client/components/cards/checklists.jade @@ -120,7 +120,7 @@ template(name="checklistItems") i.fa.fa-plus template(name='checklistItemDetail') - .js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if checklist.hideCheckedChecklistItems}} invisible{{/if}}{{/if}}" + .js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if checklist.hideCheckedChecklistItems}} invisible{{/if}}{{/if}}{{#if checklist.hideAllChecklistItems}} is-checked invisible{{/if}}" role="checkbox" aria-checked="{{#if item.isFinished }}true{{else}}false{{/if}}" tabindex="0") if canModifyCard .check-box-container @@ -157,6 +157,15 @@ template(name="checklistActionsPopup") else input.toggle-switch(type="checkbox" id="toggleHideCheckedChecklistItems_{{checklist._id}}") label.toggle-label(for="toggleHideCheckedChecklistItems_{{checklist._id}}") + a.js-hide-all-checklist-items + i.fa.fa-ban + | {{_ "hideAllChecklistItems"}} ... + .material-toggle-switch(title="{{_ 'hideAllChecklistItems'}}") + if checklist.hideAllChecklistItems + input.toggle-switch(type="checkbox" id="toggleHideAllChecklistItems_{{checklist._id}}" checked="checked") + else + input.toggle-switch(type="checkbox" id="toggleHideAllChecklistItems_{{checklist._id}}") + label.toggle-label(for="toggleHideAllChecklistItems_{{checklist._id}}") template(name="copyChecklistPopup") +copyAndMoveChecklist diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index f539c4005..6762eab02 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -317,6 +317,11 @@ BlazeComponent.extendComponent({ this.data().checklist.toggleHideCheckedChecklistItems(); Popup.back(); }, + 'click .js-hide-all-checklist-items'(event) { + event.preventDefault(); + this.data().checklist.toggleHideAllChecklistItems(); + Popup.back(); + }, } ] } diff --git a/imports/i18n/data/en.i18n.json b/imports/i18n/data/en.i18n.json index f47f16b57..f9b0afaae 100644 --- a/imports/i18n/data/en.i18n.json +++ b/imports/i18n/data/en.i18n.json @@ -1253,5 +1253,6 @@ "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", "collapse": "Collapse", "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items" + "hideCheckedChecklistItems": "Hide checked checklist items", + "hideAllChecklistItems": "Hide all checklist items" } diff --git a/models/checklists.js b/models/checklists.js index 2326eceeb..d30dcc1be 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -70,6 +70,13 @@ Checklists.attachSchema( type: Boolean, optional: true, }, + hideAllChecklistItems: { + /** + * hide all checklist items ? + */ + type: Boolean, + optional: true, + }, }), ); @@ -123,7 +130,11 @@ Checklists.helpers({ return ret; }, isFinished() { - return 0 !== this.itemCount() && this.itemCount() === this.finishedCount(); + let ret = this.hideAllChecklistItems; + if (!ret) { + ret = 0 !== this.itemCount() && this.itemCount() === this.finishedCount(); + } + return ret; }, showChecklist(hideFinishedChecklistIfItemsAreHidden) { let ret = true; @@ -212,6 +223,13 @@ Checklists.mutations({ } }; }, + toggleHideAllChecklistItems() { + return { + $set: { + hideAllChecklistItems: !this.hideAllChecklistItems, + } + }; + }, }); if (Meteor.isServer) {