From 77f8b76d4e13c35ea3451622176bbb69a4d39a32 Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Thu, 10 Oct 2019 22:57:40 -0400 Subject: [PATCH 1/9] Add Features: allowing lists to be sorted by modifiedAt when not in draggable mode --- client/components/cards/minicard.jade | 2 ++ client/components/lists/listHeader.jade | 1 + client/components/swimlanes/swimlanes.jade | 16 +++++----- client/components/swimlanes/swimlanes.js | 36 +++------------------- models/boards.js | 15 +++++++++ models/cards.js | 17 ++++++++++ models/swimlanes.js | 15 +++++++++ 7 files changed, 63 insertions(+), 39 deletions(-) diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index a3f323048..ba0c57073 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -58,6 +58,8 @@ template(name="minicard") if getDue .date +minicardDueDate + if getEnd + +minicardEndDate if getSpentTime .date +cardSpentTime diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 6a61a66f4..23ae62820 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -9,6 +9,7 @@ template(name="listHeader") if currentList a.list-header-left-icon.fa.fa-angle-left.js-unselect-list h2.list-header-name( + title="{{ moment updatedAt 'LLL' }}" class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}js-open-inlined-form is-editable{{/unless}}{{/if}}") +viewer = title diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 3ad437777..8f07a01c0 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -12,13 +12,13 @@ template(name="swimlane") unless currentUser.isCommentOnly +addListForm else + if currentUser.isBoardMember + unless currentUser.isCommentOnly + +addListForm each lists +list(this) if currentCardIsInThisList _id ../_id +cardDetails(currentCard) - if currentUser.isBoardMember - unless currentUser.isCommentOnly - +addListForm template(name="listsGroup") .swimlane.list-group.js-lists @@ -26,20 +26,20 @@ template(name="listsGroup") if currentList +list(currentList) else - each lists - +miniList(this) if currentUser.isBoardMember unless currentUser.isCommentOnly +addListForm + each lists + +miniList(this) else + if currentUser.isBoardMember + unless currentUser.isCommentOnly + +addListForm each lists if visible this +list(this) if currentCardIsInThisList _id null +cardDetails(currentCard) - if currentUser.isBoardMember - unless currentUser.isCommentOnly - +addListForm template(name="addListForm") .list.list-composer.js-list-composer diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 33a7991e9..1bfc0f791 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -163,37 +163,11 @@ BlazeComponent.extendComponent({ // the user will legitimately expect to be able to select some text with // his mouse. - if (Utils.isMiniScreen) { - const noDragInside = [ - 'a', - 'input', - 'textarea', - 'p', - '.js-list-handle', - '.js-swimlane-header-handle', - ]; - } - - if (!Utils.isMiniScreen && !showDesktopDragHandles) { - const noDragInside = [ - 'a', - 'input', - 'textarea', - 'p', - '.js-list-header', - ]; - } - - if (!Utils.isMiniScreen && showDesktopDragHandles) { - const noDragInside = [ - 'a', - 'input', - 'textarea', - 'p', - '.js-list-handle', - '.js-swimlane-header-handle', - ]; - } + const noDragInside = ['a', 'input', 'textarea', 'p'].concat( + Util.isMiniScreen || (!Util.isMiniScreen && showDesktopDragHandles) + ? ['.js-list-handle', '.js-swimlane-header-handle'] + : ['.js-list-header'], + ); if ( $(evt.target).closest(noDragInside.join(',')).length === 0 && diff --git a/models/boards.js b/models/boards.js index a93484788..c7f930221 100644 --- a/models/boards.js +++ b/models/boards.js @@ -409,6 +409,21 @@ Boards.helpers({ }, lists() { + const enabled = Meteor.user().hasShowDesktopDragHandles(); + return enabled ? this.draggableLists() : this.newestLists(); + }, + + newestLists() { + // sorted lists from newest to the oldest, by its creation date or its cards' last modification date + return Lists.find( + { + boardId: this._id, + archived: false, + }, + { sort: { updatedAt: -1 } }, + ); + }, + draggableLists() { return Lists.find({ boardId: this._id }, { sort: { sort: 1 } }); }, diff --git a/models/cards.js b/models/cards.js index 371ad1854..35d596d6d 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1695,6 +1695,23 @@ if (Meteor.isServer) { const oldvalue = doc[action] || ''; const activityType = `a-${action}`; const card = Cards.findOne(doc._id); + const list = card.list(); + if (list) { + // change list modifiedAt + const modifiedAt = new Date(); + const boardId = list.boardId; + Lists.direct.update( + { + _id: list._id, + }, + { + $set: { + modifiedAt, + boardId, + }, + }, + ); + } const username = Users.findOne(userId).username; const activity = { userId, diff --git a/models/swimlanes.js b/models/swimlanes.js index 46e410da2..4cd35574c 100644 --- a/models/swimlanes.js +++ b/models/swimlanes.js @@ -174,6 +174,21 @@ Swimlanes.helpers({ }, lists() { + const enabled = Meteor.user().hasShowDesktopDragHandles(); + return enabled ? this.draggableLists() : this.newestLists(); + }, + newestLists() { + // sorted lists from newest to the oldest, by its creation date or its cards' last modification date + return Lists.find( + { + boardId: this.boardId, + swimlaneId: { $in: [this._id, ''] }, + archived: false, + }, + { sort: { updatedAt: -1 } }, + ); + }, + draggableLists() { return Lists.find( { boardId: this.boardId, From f53c624b0f6c6ebcc20c378a153e5cda8d73463c Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Fri, 11 Oct 2019 11:01:10 -0400 Subject: [PATCH 2/9] Buf Fix #2093: the broken should be prior to file attachment feature introduced --- models/export.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/models/export.js b/models/export.js index a69be9702..3f4c85909 100644 --- a/models/export.js +++ b/models/export.js @@ -50,12 +50,18 @@ if (Meteor.isServer) { }); } +// exporter maybe is broken since Gridfs introduced, add fs and path + export class Exporter { constructor(boardId) { this._boardId = boardId; } build() { + const fs = Npm.require('fs'); + const os = Npm.require('os'); + const path = Npm.require('path'); + const byBoard = { boardId: this._boardId }; const byBoardNoLinked = { boardId: this._boardId, @@ -134,6 +140,9 @@ export class Exporter { const getBase64Data = function(doc, callback) { let buffer = new Buffer(0); // callback has the form function (err, res) {} + const tmpWriteable = fs.createWriteStream( + path.join(os.tmpdir(), `tmpexport${process.pid}`), + ); const readStream = doc.createReadStream(); readStream.on('data', function(chunk) { buffer = Buffer.concat([buffer, chunk]); @@ -145,6 +154,7 @@ export class Exporter { // done callback(null, buffer.toString('base64')); }); + readStream.pipe(tmpWriteable); }; const getBase64DataSync = Meteor.wrapAsync(getBase64Data); result.attachments = Attachments.find(byBoard) From 2737d6b23f3a0fd2314236a85fbdee536df745a2 Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Fri, 11 Oct 2019 11:56:44 -0400 Subject: [PATCH 3/9] Bug Fix:2093, need to clean up the temporary file --- models/export.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/models/export.js b/models/export.js index 3f4c85909..5d3564876 100644 --- a/models/export.js +++ b/models/export.js @@ -140,9 +140,11 @@ export class Exporter { const getBase64Data = function(doc, callback) { let buffer = new Buffer(0); // callback has the form function (err, res) {} - const tmpWriteable = fs.createWriteStream( - path.join(os.tmpdir(), `tmpexport${process.pid}`), + const tmpFile = path.join( + os.tmpdir(), + `tmpexport${process.pid}${Math.radom()}`, ); + const tmpWriteable = fs.createWriteStream(tmpFile); const readStream = doc.createReadStream(); readStream.on('data', function(chunk) { buffer = Buffer.concat([buffer, chunk]); @@ -152,6 +154,9 @@ export class Exporter { }); readStream.on('end', function() { // done + fs.unlink(tmpFile, () => { + //ignored + }); callback(null, buffer.toString('base64')); }); readStream.pipe(tmpWriteable); From bc2a20f04e32607f8488a9cecd815647fb43e40e Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Fri, 18 Oct 2019 16:44:09 -0400 Subject: [PATCH 4/9] Add Feature: allow user to sort Lists in Board by his own preference, boardadmin can star list --- client/components/boards/boardHeader.jade | 18 ++++ client/components/boards/boardHeader.js | 102 +++++++++++++++++- client/components/lists/listHeader.jade | 4 +- client/components/lists/listHeader.js | 18 ++++ client/components/sidebar/sidebarFilters.jade | 3 + client/components/sidebar/sidebarFilters.js | 4 + client/components/swimlanes/swimlanes.jade | 2 +- client/components/swimlanes/swimlanes.js | 5 + client/lib/filter.js | 18 +++- i18n/en.i18n.json | 12 ++- models/boards.js | 8 +- models/cards.js | 6 +- models/lists.js | 22 +++- models/swimlanes.js | 6 +- models/users.js | 58 ++++++++++ 15 files changed, 272 insertions(+), 14 deletions(-) diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index fe533f955..175cc2c2d 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -77,6 +77,10 @@ template(name="boardHeaderBar") i.fa.fa-archive span {{_ 'archives'}} + if showSort + a.board-header-btn.js-open-sort-view(title="{{_ 'sort-desc'}}") + i.fa(class="{{directionClass}}") + span {{_ 'sort'}}{{_ listSortShortDesc}} a.board-header-btn.js-open-filter-view( title="{{#if Filter.isActive}}{{_ 'filter-on-desc'}}{{else}}{{_ 'filter'}}{{/if}}" class="{{#if Filter.isActive}}emphasis{{/if}}") @@ -194,6 +198,20 @@ template(name="createBoard") | / a.js-board-template {{_ 'template'}} +template(name="listsortPopup") + h2 + | {{_ 'list-sort-by'}} + hr + ul.pop-over-list + each value in allowedSortValues + li + a.js-sort-by(name="{{value.name}}") + if $eq sortby value.name + i(class="fa {{Direction}}") + | {{_ value.label }}{{_ value.shortLabel}} + if $eq sortby value.name + i(class="fa fa-check") + template(name="boardChangeTitlePopup") form label diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index cb84c233a..e14b14446 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -1,3 +1,5 @@ +const DOWNCLS = 'fa-sort-down'; +const UPCLS = 'fa-sort-up'; Template.boardMenuPopup.events({ 'click .js-rename-board': Popup.open('boardChangeTitle'), 'click .js-custom-fields'() { @@ -80,7 +82,25 @@ BlazeComponent.extendComponent({ const currentBoard = Boards.findOne(Session.get('currentBoard')); return currentBoard && currentBoard.stars >= 2; }, - + showSort() { + return Meteor.user().hasSortBy(); + }, + directionClass() { + return this.currentDirection() === -1 ? DOWNCLS : UPCLS; + }, + changeDirection() { + const direction = 0 - this.currentDirection() === -1 ? '-' : ''; + Meteor.call('setListSortBy', direction + this.currentListSortBy()); + }, + currentDirection() { + return Meteor.user().getListSortByDirection(); + }, + currentListSortBy() { + return Meteor.user().getListSortBy(); + }, + listSortShortDesc() { + return `list-label-short-${this.currentListSortBy()}`; + }, events() { return [ { @@ -118,6 +138,16 @@ BlazeComponent.extendComponent({ 'click .js-open-filter-view'() { Sidebar.setView('filter'); }, + 'click .js-open-sort-view'(evt) { + const target = evt.target; + if (target.tagName === 'I') { + // click on the text, popup choices + this.changeDirection(); + } else { + // change the sort order + Popup.open('listsort')(evt); + } + }, 'click .js-filter-reset'(event) { event.stopPropagation(); Sidebar.setView(); @@ -277,3 +307,73 @@ BlazeComponent.extendComponent({ ]; }, }).register('boardChangeWatchPopup'); + +BlazeComponent.extendComponent({ + onCreated() { + //this.sortBy = new ReactiveVar(); + ////this.sortDirection = new ReactiveVar(); + //this.setSortBy(); + this.downClass = DOWNCLS; + this.upClass = UPCLS; + }, + allowedSortValues() { + const types = []; + const pushed = {}; + Meteor.user() + .getListSortTypes() + .forEach(type => { + const key = type.replace(/^-/, ''); + if (pushed[key] === undefined) { + types.push({ + name: key, + label: `list-label-${key}`, + shortLabel: `list-label-short-${key}`, + }); + pushed[key] = 1; + } + }); + return types; + }, + Direction() { + return Meteor.user().getListSortByDirection() === -1 + ? this.downClass + : this.upClass; + }, + sortby() { + return Meteor.user().getListSortBy(); + }, + + setSortBy(type = null) { + const user = Meteor.user(); + if (type === null) { + type = user._getListSortBy(); + } else { + let value = ''; + if (type.map) { + // is an array + value = (type[1] === -1 ? '-' : '') + type[0]; + } + Meteor.call('setListSortBy', value); + } + //this.sortBy.set(type[0]); + //this.sortDirection.set(type[1]); + }, + + events() { + return [ + { + 'click .js-sort-by'(evt) { + evt.preventDefault(); + const target = evt.target; + const sortby = target.getAttribute('name'); + const down = !!target.querySelector(`.${this.upClass}`); + const direction = down ? -1 : 1; + this.setSortBy([sortby, direction]); + if (Utils.isMiniScreen) { + Popup.close(); + } + }, + }, + ]; + }, +}).register('listsortPopup'); diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 23ae62820..3b3a0242c 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -9,7 +9,7 @@ template(name="listHeader") if currentList a.list-header-left-icon.fa.fa-angle-left.js-unselect-list h2.list-header-name( - title="{{ moment updatedAt 'LLL' }}" + title="{{ moment modifiedAt 'LLL' }}" class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}js-open-inlined-form is-editable{{/unless}}{{/if}}") +viewer = title @@ -39,6 +39,8 @@ template(name="listHeader") i.list-header-watch-icon.fa.fa-eye div.list-header-menu unless currentUser.isCommentOnly + if isBoardAdmin + a.fa.js-list-star.list-header-plus-icon(class="fa-star{{#unless starred}}-o{{/unless}}") if canSeeAddCard a.js-add-card.fa.fa-plus.list-header-plus-icon a.fa.fa-navicon.js-open-list-menu diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 5b7232cdc..b524d4e05 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -13,6 +13,20 @@ BlazeComponent.extendComponent({ ); }, + isBoardAdmin() { + return Meteor.user().isBoardAdmin(); + }, + starred(check = undefined) { + const list = Template.currentData(); + const status = list.isStarred(); + if (check === undefined) { + // just check + return status; + } else { + list.star(!status); + return !status; + } + }, editTitle(event) { event.preventDefault(); const newTitle = this.childComponents('inlinedForm')[0] @@ -61,6 +75,10 @@ BlazeComponent.extendComponent({ events() { return [ { + 'click .js-list-star'(event) { + event.preventDefault(); + this.starred(!this.starred()); + }, 'click .js-open-list-menu': Popup.open('listAction'), 'click .js-add-card'(event) { const listDom = $(event.target).parents( diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 55ab213af..0a68719e5 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -4,6 +4,9 @@ and #each x in y constructors to fix this. template(name="filterSidebar") + ul.sidebar-list + span {{_ 'list-filter-label'}} + input.js-list-filter(type="text") ul.sidebar-list li(class="{{#if Filter.labelIds.isSelected undefined}}active{{/if}}") a.name.js-toggle-label-filter diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js index 3483d00cf..ee76ef370 100644 --- a/client/components/sidebar/sidebarFilters.js +++ b/client/components/sidebar/sidebarFilters.js @@ -4,6 +4,10 @@ BlazeComponent.extendComponent({ events() { return [ { + 'change .js-list-filter'(evt) { + evt.preventDefault(); + Filter.lists.set(this.find('.js-list-filter').value.trim()); + }, 'click .js-toggle-label-filter'(evt) { evt.preventDefault(); Filter.labelIds.toggle(this.currentData()._id); diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 8f07a01c0..98af6d542 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -42,7 +42,7 @@ template(name="listsGroup") +cardDetails(currentCard) template(name="addListForm") - .list.list-composer.js-list-composer + .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") .list-header-add +inlinedForm(autoclose=false) input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 1bfc0f791..8faad870b 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -267,6 +267,11 @@ BlazeComponent.extendComponent({ return false; } } + if (Filter.lists._isActive()) { + if (!list.title.match(Filter.lists.getRegexSelector())) { + return false; + } + } if (Filter.hideEmpty.isSelected()) { const swimlaneId = this.parentComponent() .parentComponent() diff --git a/client/lib/filter.js b/client/lib/filter.js index 1ca3a280b..b06956259 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -439,6 +439,14 @@ class AdvancedFilter { const commands = this._filterToCommands(); return this._arrayToSelector(commands); } + getRegexSelector() { + // generate a regex for filter list + this._dep.depend(); + return new RegExp( + `^.*${this._filter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}.*$`, + 'i', + ); + } } // The global Filter object. @@ -455,8 +463,16 @@ Filter = { hideEmpty: new SetFilter(), customFields: new SetFilter('_id'), advanced: new AdvancedFilter(), + lists: new AdvancedFilter(), // we need the ability to filter list by name as well - _fields: ['labelIds', 'members', 'archive', 'hideEmpty', 'customFields'], + _fields: [ + 'labelIds', + 'members', + 'archive', + 'hideEmpty', + 'customFields', + 'lists', + ], // We don't filter cards that have been added after the last filter change. To // implement this we keep the id of these cards in this `_exceptions` fields diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 58fda954c..ab2ea5376 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -300,8 +300,18 @@ "error-username-taken": "This username is already taken", "error-email-taken": "Email has already been taken", "export-board": "Export board", + "sort": "Sort", + "sort-desc": "Click to Sort List", + "list-sort-by": "Sort the List By:", + "list-label-modifiedAt": "Last Access Time", + "list-label-title": "Name of the List", + "list-label-sort": "Your Manual Order", + "list-label-short-modifiedAt": "(L)", + "list-label-short-title": "(N)", + "list-label-short-sort": "(M)", "filter": "Filter", - "filter-cards": "Filter Cards", + "filter-cards": "Filter Cards or Lists", + "list-filter-label": "Filter List by Title", "filter-clear": "Clear filter", "filter-no-label": "No label", "filter-no-member": "No member", diff --git a/models/boards.js b/models/boards.js index c7f930221..85a7558c4 100644 --- a/models/boards.js +++ b/models/boards.js @@ -409,18 +409,20 @@ Boards.helpers({ }, lists() { - const enabled = Meteor.user().hasShowDesktopDragHandles(); - return enabled ? this.draggableLists() : this.newestLists(); + const enabled = Meteor.user().hasSortBy(); + return enabled ? this.newestLists() : this.draggableLists(); }, newestLists() { // sorted lists from newest to the oldest, by its creation date or its cards' last modification date + const value = Meteor.user()._getListSortBy(); + const sortKey = { starred: -1, [value[0]]: value[1] }; // [["starred",-1],value]; return Lists.find( { boardId: this._id, archived: false, }, - { sort: { updatedAt: -1 } }, + { sort: sortKey }, ); }, draggableLists() { diff --git a/models/cards.js b/models/cards.js index 35d596d6d..27dda0ee4 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1696,9 +1696,11 @@ if (Meteor.isServer) { const activityType = `a-${action}`; const card = Cards.findOne(doc._id); const list = card.list(); - if (list) { + if (list && action === 'endAt') { // change list modifiedAt - const modifiedAt = new Date(); + const modifiedAt = new Date( + new Date(value).getTime() - 365 * 24 * 3600 * 1e3, + ); // set it as 1 year before const boardId = list.boardId; Lists.direct.update( { diff --git a/models/lists.js b/models/lists.js index 9136c337c..16ad434ce 100644 --- a/models/lists.js +++ b/models/lists.js @@ -11,6 +11,15 @@ Lists.attachSchema( */ type: String, }, + starred: { + /** + * if a list is stared + * then we put it on the top + */ + type: Boolean, + optional: true, + defaultValue: false, + }, archived: { /** * is the list archived @@ -81,10 +90,14 @@ Lists.attachSchema( denyUpdate: false, // eslint-disable-next-line consistent-return autoValue() { - if (this.isInsert || this.isUpsert || this.isUpdate) { + // this is redundant with updatedAt + /*if (this.isInsert || this.isUpsert || this.isUpdate) { return new Date(); } else { this.unset(); + }*/ + if (!this.isSet) { + return new Date(); } }, }, @@ -252,6 +265,10 @@ Lists.helpers({ return this.type === 'template-list'; }, + isStarred() { + return this.starred === true; + }, + remove() { Lists.remove({ _id: this._id }); }, @@ -261,6 +278,9 @@ Lists.mutations({ rename(title) { return { $set: { title } }; }, + star(enable = true) { + return { $set: { starred: !!enable } }; + }, archive() { if (this.isTemplateList()) { diff --git a/models/swimlanes.js b/models/swimlanes.js index 4cd35574c..831f1effc 100644 --- a/models/swimlanes.js +++ b/models/swimlanes.js @@ -174,8 +174,8 @@ Swimlanes.helpers({ }, lists() { - const enabled = Meteor.user().hasShowDesktopDragHandles(); - return enabled ? this.draggableLists() : this.newestLists(); + const enabled = Meteor.user().hasSortBy(); + return enabled ? this.newestLists() : this.draggableLists(); }, newestLists() { // sorted lists from newest to the oldest, by its creation date or its cards' last modification date @@ -185,7 +185,7 @@ Swimlanes.helpers({ swimlaneId: { $in: [this._id, ''] }, archived: false, }, - { sort: { updatedAt: -1 } }, + { sort: { modifiedAt: -1 } }, ); }, draggableLists() { diff --git a/models/users.js b/models/users.js index 93fb409ed..83a224ba2 100644 --- a/models/users.js +++ b/models/users.js @@ -4,6 +4,16 @@ const isSandstorm = Meteor.settings && Meteor.settings.public && Meteor.settings.public.sandstorm; Users = Meteor.users; +const allowedSortValues = [ + '-modifiedAt', + 'modifiedAt', + '-title', + 'title', + '-sort', + 'sort', +]; +const defaultSortBy = allowedSortValues[0]; + /** * A User in wekan */ @@ -191,6 +201,15 @@ Users.attachSchema( 'board-view-cal', ], }, + 'profile.listSortBy': { + /** + * default sort list for user + */ + type: String, + optional: true, + defaultValue: defaultSortBy, + allowedValues: allowedSortValues, + }, 'profile.templatesBoardId': { /** * Reference to the templates board @@ -365,6 +384,31 @@ Users.helpers({ return _.contains(invitedBoards, boardId); }, + _getListSortBy() { + const profile = this.profile || {}; + const sortBy = profile.listSortBy || defaultSortBy; + const keyPattern = /^(-{0,1})(.*$)/; + const ret = []; + if (keyPattern.exec(sortBy)) { + ret[0] = RegExp.$2; + ret[1] = RegExp.$1 ? -1 : 1; + } + return ret; + }, + hasSortBy() { + // if use doesn't have dragHandle, then we can let user to choose sort list by different order + return !this.hasShowDesktopDragHandles(); + }, + getListSortBy() { + return this._getListSortBy()[0]; + }, + getListSortTypes() { + return allowedSortValues; + }, + getListSortByDirection() { + return this._getListSortBy()[1]; + }, + hasTag(tag) { const { tags = [] } = this.profile || {}; return _.contains(tags, tag); @@ -485,6 +529,13 @@ Users.mutations({ else this.addTag(tag); }, + setListSortBy(value) { + return { + $set: { + 'profile.listSortBy': value, + }, + }; + }, toggleDesktopHandles(value = false) { return { $set: { @@ -569,6 +620,10 @@ Meteor.methods({ Users.update(userId, { $set: { username } }); } }, + setListSortBy(value) { + check(value, String); + Meteor.user().setListSortBy(value); + }, toggleDesktopDragHandles() { const user = Meteor.user(); user.toggleDesktopHandles(user.hasShowDesktopDragHandles()); @@ -800,6 +855,9 @@ if (Meteor.isServer) { if (Meteor.isServer) { // Let mongoDB ensure username unicity Meteor.startup(() => { + allowedSortValues.forEach(value => { + Lists._collection._ensureIndex(value); + }); Users._collection._ensureIndex({ modifiedAt: -1 }); Users._collection._ensureIndex( { From d2d4840758b0f5aed7feb4f6a459bb2b2d1a3f0b Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Fri, 18 Oct 2019 18:06:34 -0400 Subject: [PATCH 5/9] Add Feature: allowing user to filter list in Filter function not just cards --- client/lib/filter.js | 10 +- i18n/en.i18n.json | 435 +++++++++++++++++++++---------------------- 2 files changed, 218 insertions(+), 227 deletions(-) diff --git a/client/lib/filter.js b/client/lib/filter.js index b06956259..9ddea65c9 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -465,14 +465,7 @@ Filter = { advanced: new AdvancedFilter(), lists: new AdvancedFilter(), // we need the ability to filter list by name as well - _fields: [ - 'labelIds', - 'members', - 'archive', - 'hideEmpty', - 'customFields', - 'lists', - ], + _fields: ['labelIds', 'members', 'archive', 'hideEmpty', 'customFields'], // We don't filter cards that have been added after the last filter change. To // implement this we keep the id of these cards in this `_exceptions` fields @@ -549,6 +542,7 @@ Filter = { const filter = this[fieldName]; filter.reset(); }); + this.lists.reset(); this.advanced.reset(); this.resetExceptions(); }, diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index ab2ea5376..db0e16f0f 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -1,45 +1,45 @@ { "accept": "Accept", "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "created board __board__", - "act-createSwimlane": "created swimlane __swimlane__ to board __board__", - "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createList": "added list __list__ to board __board__", - "act-addBoardMember": "added member __member__ to board __board__", - "act-archivedBoard": "Board __board__ moved to Archive", - "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", - "act-importBoard": "imported board __board__", - "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", - "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-removeBoardMember": "removed member __member__ from board __board__", - "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-addAttachment": "added attachment __attachment__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-deleteAttachment": "deleted attachment __attachment__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-addSubtask": "added subtask __subtask__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-addLabel": "Added label __label__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-addedLabel": "Added label __label__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-removeLabel": "Removed label __label__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-removedLabel": "Removed label __label__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-addChecklist": "added checklist __checklist__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-removeChecklist": "removed checklist __checklist__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-completeChecklist": "completed checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-uncompleteChecklist": "uncompleted checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-addComment": "commented on case __card__: __comment__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-editComment": "edited comment on case __card__: __comment__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-deleteComment": "deleted comment on case __card__: __comment__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-createBoard": "created unity __board__", + "act-createSwimlane": "created swimlane __swimlane__ to unity __board__", + "act-createCard": "created case __card__ to patient __list__ at swimlane __swimlane__ at unity __board__", + "act-createCustomField": "created custom field __customField__ at unity __board__", + "act-deleteCustomField": "deleted custom field __customField__ at unity __board__", + "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-createList": "added patient __list__ to unity __board__", + "act-addBoardMember": "added member __member__ to unity __board__", + "act-archivedBoard": "Unity __board__ moved to Archive", + "act-archivedCard": "Case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__ moved to Archive", + "act-archivedList": "Patient __list__ at swimlane __swimlane__ at unity __board__ moved to Archive", + "act-archivedSwimlane": "Swimlane __swimlane__ at unity __board__ moved to Archive", + "act-importBoard": "imported unity __board__", + "act-importCard": "imported case __card__ to patient __list__ at swimlane __swimlane__ at unity __board__", + "act-importList": "imported patient __list__ to swimlane __swimlane__ at unity __board__", + "act-joinMember": "added member __member__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-moveCard": "moved case __card__ at unity __board__ from patient __oldList__ at swimlane __oldSwimlane__ to patient __list__ at swimlane __swimlane__", + "act-moveCardToOtherBoard": "moved case __card__ from patient __oldList__ at swimlane __oldSwimlane__ at unity __oldBoard__ to patient __list__ at swimlane __swimlane__ at unity __board__", + "act-removeBoardMember": "removed member __member__ from unity __board__", + "act-restoredCard": "restored case __card__ to patient __list__ at swimlane __swimlane__ at unity __board__", + "act-unjoinMember": "removed member __member__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", "actions": "Actions", @@ -64,52 +64,52 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed": "completed checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", "activity-checked-item-card": "checked %s in checklist %s", "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "activity-checklist-completed-card": "completed checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "activity-editComment": "edited comment %s", "activity-deleteComment": "deleted comment %s", "add-attachment": "Add Attachment", - "add-board": "Add Board", - "add-card": "Add Card", + "add-board": "Add Unity", + "add-card": "Add Case", "add-swimlane": "Add Swimlane", "add-subtask": "Add Subtask", "add-checklist": "Add Checklist", "add-checklist-item": "Add an item to checklist", "add-cover": "Add Cover", "add-label": "Add Label", - "add-list": "Add List", + "add-list": "Add Patient", "add-members": "Add Members", "added": "Added", "addMemberPopup-title": "Members", "admin": "Admin", - "admin-desc": "Can view and edit cards, remove members, and change settings for the board.", + "admin-desc": "Can view and edit cases, remove members, and change settings for the unity.", "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All boards", - "and-n-other-card": "And __count__ other card", - "and-n-other-card_plural": "And __count__ other cards", + "all-boards": "All unitys", + "and-n-other-card": "And __count__ other case", + "and-n-other-card_plural": "And __count__ other cases", "apply": "Apply", "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", "archive": "Move to Archive", "archive-all": "Move All to Archive", - "archive-board": "Move Board to Archive", - "archive-card": "Move Card to Archive", - "archive-list": "Move List to Archive", + "archive-board": "Move Unity to Archive", + "archive-card": "Move Case to Archive", + "archive-list": "Move Patient to Archive", "archive-swimlane": "Move Swimlane to Archive", "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Board to Archive?", + "archiveBoardPopup-title": "Move Unity to Archive?", "archived-items": "Archive", - "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", + "archived-boards": "Unities in Archive", + "restore-board": "Restore Unity", + "no-archived-boards": "No Unities in Archive.", "archives": "Archive", "template": "Template", "templates": "Templates", @@ -119,32 +119,32 @@ "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.", "attachmentDeletePopup-title": "Delete Attachment?", "attachments": "Attachments", - "auto-watch": "Automatically watch boards when they are created", + "auto-watch": "Automatically watch unitys when they are created", "avatar-too-big": "The avatar is too large (70KB max)", "back": "Back", "board-change-color": "Change color", "board-nb-stars": "%s stars", - "board-not-found": "Board not found", - "board-private-info": "This board will be private.", - "board-public-info": "This board will be public.", - "boardChangeColorPopup-title": "Change Board Background", - "boardChangeTitlePopup-title": "Rename Board", + "board-not-found": "Unity not found", + "board-private-info": "This unity will be private.", + "board-public-info": "This unity will be public.", + "boardChangeColorPopup-title": "Change Unity Background", + "boardChangeTitlePopup-title": "Rename Unity", "boardChangeVisibilityPopup-title": "Change Visibility", "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Board Settings", - "boards": "Boards", - "board-view": "Board View", + "boardMenuPopup-title": "Unity Settings", + "boards": "Unities", + "board-view": "Unity View", "board-view-cal": "Calendar", "board-view-swimlanes": "Swimlanes", - "board-view-lists": "Lists", - "bucket-example": "Like “Bucket List” for example", + "board-view-lists": "Patients", + "bucket-example": "Like “Bucket Patient” for example", "cancel": "Cancel", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", - "card-comments-title": "This card has %s comment.", - "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.", - "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.", - "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.", + "card-archived": "This case is moved to Archive.", + "board-archived": "This unity is moved to Archive.", + "card-comments-title": "This case has %s comment.", + "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this case.", + "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the case. There is no undo.", + "card-delete-suggest-archive": "You can move a case to Archive to remove it from the unity and preserve the activity.", "card-due": "Due", "card-due-on": "Due on", "card-spent": "Spent Time", @@ -152,25 +152,25 @@ "card-edit-custom-fields": "Edit custom fields", "card-edit-labels": "Edit labels", "card-edit-members": "Edit members", - "card-labels-title": "Change the labels for the card.", - "card-members-title": "Add or remove members of the board from the card.", + "card-labels-title": "Change the labels for the case.", + "card-members-title": "Add or remove members of the unity from the case.", "card-start": "Start", "card-start-on": "Starts on", "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", - "cardDeletePopup-title": "Delete Card?", - "cardDetailsActionsPopup-title": "Card Actions", + "cardDeletePopup-title": "Delete Case?", + "cardDetailsActionsPopup-title": "Case Actions", "cardLabelsPopup-title": "Labels", "cardMembersPopup-title": "Members", "cardMorePopup-title": "More", "cardTemplatePopup-title": "Create template", - "cards": "Cards", - "cards-count": "Cards", + "cards": "Cases", + "cards-count": "Cases", "casSignIn": "Sign In with CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", + "cardType-card": "Case", + "cardType-linkedCard": "Linked Case", + "cardType-linkedBoard": "Linked Unity", "change": "Change", "change-avatar": "Change Avatar", "change-password": "Change Password", @@ -183,12 +183,12 @@ "changeSettingsPopup-title": "Change Settings", "subtasks": "Subtasks", "checklists": "Checklists", - "click-to-star": "Click to star this board.", - "click-to-unstar": "Click to unstar this board.", + "click-to-star": "Click to star this unity.", + "click-to-unstar": "Click to unstar this unity.", "clipboard": "Clipboard or drag & drop", "close": "Close", - "close-board": "Close Board", - "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.", + "close-board": "Close Unity", + "close-board-pop": "You will be able to restore the unity by clicking the “Archive” button from the home header.", "color-black": "black", "color-blue": "blue", "color-crimson": "crimson", @@ -218,32 +218,32 @@ "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", - "comment-only-desc": "Can comment on cards only.", + "comment-only-desc": "Can comment on cases only.", "no-comments": "No comments", "no-comments-desc": "Can not see comments and activities.", "computer": "Computer", "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?", "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?", - "copy-card-link-to-clipboard": "Copy card link to clipboard", - "linkCardPopup-title": "Link Card", + "copy-card-link-to-clipboard": "Copy case link to clipboard", + "linkCardPopup-title": "Link Case", "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Card", - "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards", - "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", + "copyCardPopup-title": "Copy Case", + "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cases", + "copyChecklistToManyCardsPopup-instructions": "Destination Case Titles and Descriptions in this JSON format", + "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First case title\", \"description\":\"First case description\"}, {\"title\":\"Second case title\",\"description\":\"Second case description\"},{\"title\":\"Last case title\",\"description\":\"Last case description\"} ]", "create": "Create", - "createBoardPopup-title": "Create Board", - "chooseBoardSourcePopup-title": "Import board", + "createBoardPopup-title": "Create Unity", + "chooseBoardSourcePopup-title": "Import unity", "createLabelPopup-title": "Create Label", "createCustomField": "Create Field", "createCustomFieldPopup-title": "Create Field", "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", + "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cases and destroy its history.", "custom-field-checkbox": "Checkbox", "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown List", + "custom-field-dropdown": "Dropdown Patient", "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "List Options", + "custom-field-dropdown-options": "Patient Options", "custom-field-dropdown-options-placeholder": "Press enter to add more options", "custom-field-dropdown-unknown": "(unknown)", "custom-field-number": "Number", @@ -281,69 +281,69 @@ "email-invalid": "Invalid email", "email-invite": "Invite via Email", "email-invite-subject": "__inviter__ sent you an invitation", - "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.", + "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join unity \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.", "email-resetPassword-subject": "Reset your password on __siteName__", "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.", "email-sent": "Email sent", "email-verifyEmail-subject": "Verify your email address on __siteName__", "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.", "enable-wip-limit": "Enable WIP Limit", - "error-board-doesNotExist": "This board does not exist", - "error-board-notAdmin": "You need to be admin of this board to do that", - "error-board-notAMember": "You need to be a member of this board to do that", + "error-board-doesNotExist": "This unity does not exist", + "error-board-notAdmin": "You need to be admin of this unity to do that", + "error-board-notAMember": "You need to be a member of this unity to do that", "error-json-malformed": "Your text is not valid JSON", "error-json-schema": "Your JSON data does not include the proper information in the correct format", - "error-list-doesNotExist": "This list does not exist", + "error-list-doesNotExist": "This patient does not exist", "error-user-doesNotExist": "This user does not exist", "error-user-notAllowSelf": "You can not invite yourself", "error-user-notCreated": "This user is not created", "error-username-taken": "This username is already taken", "error-email-taken": "Email has already been taken", - "export-board": "Export board", + "export-board": "Export unity", "sort": "Sort", - "sort-desc": "Click to Sort List", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", - "list-label-title": "Name of the List", + "sort-desc": "Click to Sort Patients", + "list-sort-by": "Sort the Patients By:", + "list-label-modifiedAt": "Case Last Access Time", + "list-label-title": "Name of the Patient", "list-label-sort": "Your Manual Order", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", "filter": "Filter", - "filter-cards": "Filter Cards or Lists", - "list-filter-label": "Filter List by Title", + "filter-cards": "Filter Cases or Patients", + "list-filter-label": "Filter Patient by Name", "filter-clear": "Clear filter", "filter-no-label": "No label", "filter-no-member": "No member", "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", + "filter-show-archive": "Show archived patients", + "filter-hide-empty": "Hide empty patients", "filter-on": "Filter is on", - "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", + "filter-on-desc": "You are filtering cases on this unity. Click here to edit filter.", "filter-to-selection": "Filter to selection", "advanced-filter-label": "Advanced Filter", "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", - "header-logo-title": "Go back to your boards page.", + "header-logo-title": "Go back to your unitys page.", "hide-system-messages": "Hide system messages", - "headerBarCreateBoardPopup-title": "Create Board", + "headerBarCreateBoardPopup-title": "Create Unity", "home": "Home", "import": "Import", "link": "Link", - "import-board": "import board", - "import-board-c": "Import board", - "import-board-title-trello": "Import board from Trello", - "import-board-title-wekan": "Import board from previous export", - "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.", - "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.", + "import-board": "import unity", + "import-board-c": "Import unity", + "import-board-title-trello": "Import unity from Trello", + "import-board-title-wekan": "Import unity from previous export", + "import-sandstorm-backup-warning": "Do not delete data you import from original exported unity or Trello before checking does this grain close and open again, or do you get Unity not found error, that means data loss.", + "import-sandstorm-warning": "Imported unity will delete all existing data on unity and replace it with imported unity.", "from-trello": "From Trello", "from-wekan": "From previous export", - "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.", - "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", + "import-board-instruction-trello": "In your Trello unity, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.", + "import-board-instruction-wekan": "In your unity, go to 'Menu', then 'Export unity', and copy the text in the downloaded file.", + "import-board-instruction-about-errors": "If you get errors when importing unity, sometimes importing still works, and unity is at All Unities page.", "import-json-placeholder": "Paste your valid JSON data here", "import-map-members": "Map members", - "import-members-map": "Your imported board has some members. Please map the members you want to import to your users", + "import-members-map": "Your imported unity has some members. Please map the members you want to import to your users", "import-show-user-mapping": "Review members mapping", "import-user-select": "Pick your existing user you want to use as this member", "importMapMembersAddPopup-title": "Select member", @@ -353,32 +353,32 @@ "invalid-time": "Invalid time", "invalid-user": "Invalid user", "joined": "joined", - "just-invited": "You are just invited to this board", + "just-invited": "You are just invited to this unity", "keyboard-shortcuts": "Keyboard shortcuts", "label-create": "Create Label", "label-default": "%s label (default)", - "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.", + "label-delete-pop": "There is no undo. This will remove this label from all cases and destroy its history.", "labels": "Labels", "language": "Language", "last-admin-desc": "You can’t change roles because there must be at least one admin.", - "leave-board": "Leave Board", - "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.", - "leaveBoardPopup-title": "Leave Board ?", - "link-card": "Link to this card", - "list-archive-cards": "Move all cards in this list to Archive", - "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", + "leave-board": "Leave Unity", + "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cases on this unity.", + "leaveBoardPopup-title": "Leave Unity ?", + "link-card": "Link to this case", + "list-archive-cards": "Move all cases in this patient to Archive", + "list-archive-cards-pop": "This will remove all the cases in this patient from the unity. To view cases in Archive and bring them back to the unity, click “Menu” > “Archive”.", + "list-move-cards": "Move all cases in this patient", + "list-select-cards": "Select all cases in this patient", "set-color-list": "Set Color", - "listActionPopup-title": "List Actions", + "listActionPopup-title": "Patient Actions", "swimlaneActionPopup-title": "Swimlane Actions", "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello card", + "listImportCardPopup-title": "Import a Trello case", "listMorePopup-title": "More", - "link-list": "Link to this list", - "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.", - "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.", - "lists": "Lists", + "link-list": "Link to this patient", + "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the patient. There is no undo.", + "list-delete-suggest-archive": "You can move a patient to Archive to remove it from the unity and preserve the activity.", + "lists": "Patients", "swimlanes": "Swimlanes", "log-out": "Log Out", "log-in": "Log In", @@ -387,25 +387,25 @@ "members": "Members", "menu": "Menu", "move-selection": "Move selection", - "moveCardPopup-title": "Move Card", + "moveCardPopup-title": "Move Case", "moveCardToBottom-title": "Move to Bottom", "moveCardToTop-title": "Move to Top", "moveSelectionPopup-title": "Move selection", "multi-selection": "Multi-Selection", "multi-selection-on": "Multi-Selection is on", "muted": "Muted", - "muted-info": "You will never be notified of any changes in this board", - "my-boards": "My Boards", + "muted-info": "You will never be notified of any changes in this unity", + "my-boards": "My Unities", "name": "Name", - "no-archived-cards": "No cards in Archive.", - "no-archived-lists": "No lists in Archive.", + "no-archived-cards": "No cases in Archive.", + "no-archived-lists": "No patients in Archive.", "no-archived-swimlanes": "No swimlanes in Archive.", "no-results": "No results", "normal": "Normal", - "normal-desc": "Can view and edit cards. Can't change settings.", + "normal-desc": "Can view and edit cases. Can't change settings.", "not-accepted-yet": "Invitation not accepted yet", - "notify-participate": "Receive updates to any cards you participate as creater or member", - "notify-watch": "Receive updates to any boards, lists, or cards you’re watching", + "notify-participate": "Receive updates to any cases you participate as creater or member", + "notify-watch": "Receive updates to any unitys, patients, or cases you’re watching", "optional": "optional", "or": "or", "page-maybe-private": "This page may be private. You may be able to view it by logging in.", @@ -417,59 +417,59 @@ "previewAttachedImagePopup-title": "Preview", "previewClipboardImagePopup-title": "Preview", "private": "Private", - "private-desc": "This board is private. Only people added to the board can view and edit it.", + "private-desc": "This unity is private. Only people added to the unity can view and edit it.", "profile": "Profile", "public": "Public", - "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.", - "quick-access-description": "Star a board to add a shortcut in this bar.", + "public-desc": "This unity is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the unity can edit.", + "quick-access-description": "Star a unity to add a shortcut in this bar.", "remove-cover": "Remove Cover", - "remove-from-board": "Remove from Board", + "remove-from-board": "Remove from Unity", "remove-label": "Remove Label", - "listDeletePopup-title": "Delete List ?", + "listDeletePopup-title": "Delete Patient ?", "remove-member": "Remove Member", - "remove-member-from-card": "Remove from Card", - "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.", + "remove-member-from-card": "Remove from Case", + "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cases on this unity. They will receive a notification.", "removeMemberPopup-title": "Remove Member?", "rename": "Rename", - "rename-board": "Rename Board", + "rename-board": "Rename Unity", "restore": "Restore", "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from card titles and descriptions on this board", + "search-cards": "Search from case titles and descriptions on this unity", "search-example": "Text to search for?", "select-color": "Select Color", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", + "set-wip-limit-value": "Set a limit for the maximum number of tasks in this patient", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-assign-self": "Assign yourself to current card", + "shortcut-assign-self": "Assign yourself to current case", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete members", "shortcut-clear-filters": "Clear all filters", "shortcut-close-dialog": "Close Dialog", - "shortcut-filter-my-cards": "Filter my cards", - "shortcut-show-shortcuts": "Bring up this shortcuts list", + "shortcut-filter-my-cards": "Filter my cases", + "shortcut-show-shortcuts": "Bring up this shortcuts patient", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-sidebar": "Toggle Board Sidebar", - "show-cards-minimum-count": "Show cards count if list contains more than", + "shortcut-toggle-sidebar": "Toggle Unity Sidebar", + "show-cards-minimum-count": "Show cases count if patient contains more than", "sidebar-open": "Open Sidebar", "sidebar-close": "Close Sidebar", "signupPopup-title": "Create an Account", - "star-board-title": "Click to star this board. It will show up at top of your boards list.", - "starred-boards": "Starred Boards", - "starred-boards-description": "Starred boards show up at the top of your boards list.", + "star-board-title": "Click to star this unity. It will show up at top of your unitys patient.", + "starred-boards": "Starred Unities", + "starred-boards-description": "Starred unitys show up at the top of your unitys patient.", "subscribe": "Subscribe", "team": "Team", - "this-board": "this board", - "this-card": "this card", + "this-board": "this unity", + "this-card": "this case", "spent-time-hours": "Spent time (hours)", "overtime-hours": "Overtime (hours)", "overtime": "Overtime", - "has-overtime-cards": "Has overtime cards", - "has-spenttime-cards": "Has spent time cards", + "has-overtime-cards": "Has overtime cases", + "has-spenttime-cards": "Has spent time cases", "time": "Time", "title": "Title", "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", + "tracking-info": "You will be notified of any changes to those cases you are involved as creator or member.", "type": "Type", "unassign-member": "Unassign member", "unsaved-description": "You have an unsaved description.", @@ -479,21 +479,21 @@ "uploaded-avatar": "Uploaded an avatar", "username": "Username", "view-it": "View it", - "warn-list-archived": "warning: this card is in an list at Archive", + "warn-list-archived": "warning: this case is in an patient at Archive", "watch": "Watch", "watching": "Watching", - "watching-info": "You will be notified of any change in this board", - "welcome-board": "Welcome Board", + "watching-info": "You will be notified of any change in this unity", + "welcome-board": "Welcome Unity", "welcome-swimlane": "Milestone 1", "welcome-list1": "Basics", "welcome-list2": "Advanced", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", + "card-templates-swimlane": "Case Templates", + "list-templates-swimlane": "Patient Templates", + "board-templates-swimlane": "Unity Templates", "what-to-do": "What do you want to do?", "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", + "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this patient is higher than the WIP limit you've defined.", + "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this patient, or set a higher WIP limit.", "admin-panel": "Admin Panel", "settings": "Settings", "people": "People", @@ -501,7 +501,7 @@ "disable-self-registration": "Disable Self-Registration", "invite": "Invite", "invite-people": "Invite People", - "to-boards": "To board(s)", + "to-boards": "To unity(s)", "email-addresses": "Email Addresses", "smtp-host-description": "The address of the SMTP server that handles your emails.", "smtp-port-description": "The port your SMTP server uses for outgoing emails.", @@ -515,7 +515,7 @@ "send-smtp-test": "Send a test email to yourself", "invitation-code": "Invitation Code", "email-invite-register-subject": "__inviter__ sent you an invitation", - "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", + "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to case collaborations management system.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", "email-smtp-test-subject": "SMTP Test Email", "email-smtp-test-text": "You have successfully sent an email", "error-invitation-code-not-exist": "Invitation code doesn't exist", @@ -525,7 +525,7 @@ "outgoing-webhooks": "Outgoing Webhooks", "bidirectional-webhooks": "Two-Way Webhooks", "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Card Title Filter", + "boardCardTitlePopup-title": "Case Title Filter", "disable-webhook": "Disable This Webhook", "global-webhook": "Global Webhooks", "new-outgoing-webhook": "New Outgoing Webhook", @@ -548,8 +548,8 @@ "hours": "hours", "minutes": "minutes", "seconds": "seconds", - "show-field-on-card": "Show this field on card", - "automatically-field-on-card": "Auto create field to all cards", + "show-field-on-card": "Show this field on case", + "automatically-field-on-card": "Auto create field to all cases", "showLabel-field-on-card": "Show field label on minicard", "yes": "Yes", "no": "No", @@ -571,26 +571,26 @@ "setListColorPopup-title": "Choose a color", "assigned-by": "Assigned By", "requested-by": "Requested By", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", + "board-delete-notice": "Deleting is permanent. You will lose all patients, cases and actions associated with this unity.", + "delete-board-confirm-popup": "All patients, cases, labels, and activities will be deleted and you won't be able to recover the unity contents. There is no undo.", + "boardDeletePopup-title": "Delete Unity?", + "delete-board": "Delete Unity", + "default-subtasks-board": "Subtasks for __board__ unity", "default": "Default", "queue": "Queue", "subtask-settings": "Subtasks Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "show-subtasks-field": "Cards can have subtasks", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", + "boardSubtaskSettingsPopup-title": "Unity Subtasks Settings", + "show-subtasks-field": "Cases can have subtasks", + "deposit-subtasks-board": "Deposit subtasks to this unity:", + "deposit-subtasks-list": "Landing patient for subtasks deposited here:", "show-parent-in-minicard": "Show parent in minicard:", "prefix-with-full-path": "Prefix with full path", "prefix-with-parent": "Prefix with parent", "subtext-with-full-path": "Subtext with full path", "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", + "change-card-parent": "Change case's parent", + "parent-card": "Parent case", + "source-board": "Source unity", "no-parent": "Don't show parent", "activity-added-label": "added label '%s' to %s", "activity-removed-label": "removed label '%s' from %s", @@ -603,32 +603,31 @@ "r-rule": "Rule", "r-add-trigger": "Add trigger", "r-add-action": "Add action", - "r-board-rules": "Board rules", + "r-board-rules": "Unity rules", "r-add-rule": "Add rule", "r-view-rule": "View rule", "r-delete-rule": "Delete rule", "r-new-rule-name": "New rule title", "r-no-rules": "No rules", - "r-when-a-card": "When a card", + "r-when-a-card": "When a case", "r-is": "is", "r-is-moved": "is moved", - "r-added-to": "Added to", + "r-added-to": "added to", "r-removed-from": "Removed from", - "r-the-board": "the board", + "r-the-board": "the unity", "r-list": "list", "set-filter": "Set Filter", "r-moved-to": "Moved to", "r-moved-from": "Moved from", "r-archived": "Moved to Archive", "r-unarchived": "Restored from Archive", - "r-a-card": "a card", + "r-a-card": "a case", "r-when-a-label-is": "When a label is", "r-when-the-label": "When the label", "r-list-name": "list name", "r-when-a-member": "When a member is", "r-when-the-member": "When the member", "r-name": "name", - "r-is": "is", "r-when-a-attach": "When an attachment", "r-when-a-checklist": "When a checklist is", "r-when-the-checklist": "When the checklist", @@ -638,11 +637,10 @@ "r-when-the-item": "When the checklist item", "r-checked": "Checked", "r-unchecked": "Unchecked", - "r-move-card-to": "Move card to", + "r-move-card-to": "Move case to", "r-top-of": "Top of", "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-list": "list", + "r-its-list": "its patient", "r-archive": "Move to Archive", "r-unarchive": "Restore from Archive", "r-card": "card", @@ -650,7 +648,7 @@ "r-remove": "Remove", "r-label": "label", "r-member": "member", - "r-remove-all": "Remove all members from the card", + "r-remove-all": "Remove all members from the case", "r-set-color": "Set color to", "r-checklist": "checklist", "r-check-all": "Check all", @@ -664,26 +662,26 @@ "r-to": "to", "r-subject": "subject", "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move card to top of its list", - "r-d-move-to-top-spec": "Move card to top of list", - "r-d-move-to-bottom-gen": "Move card to bottom of its list", - "r-d-move-to-bottom-spec": "Move card to bottom of list", + "r-d-move-to-top-gen": "Move case to top of its patient", + "r-d-move-to-top-spec": "Move case to top of patient", + "r-d-move-to-bottom-gen": "Move case to bottom of its patient", + "r-d-move-to-bottom-spec": "Move case to bottom of patient", "r-d-send-email": "Send email", "r-d-send-email-to": "to", "r-d-send-email-subject": "subject", "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", + "r-d-archive": "Move case to Archive", + "r-d-unarchive": "Restore case from Archive", "r-d-add-label": "Add label", "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", + "r-create-card": "Create new case", + "r-in-list": "in patient", "r-in-swimlane": "in swimlane", "r-d-add-member": "Add member", "r-d-remove-member": "Remove member", "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a list", - "r-d-uncheck-all": "Uncheck all items of a list", + "r-d-check-all": "Check all items of a patient", + "r-d-uncheck-all": "Uncheck all items of a patient", "r-d-check-one": "Check item", "r-d-uncheck-one": "Uncheck item", "r-d-check-of-list": "of checklist", @@ -697,8 +695,7 @@ "r-swimlane-name": "swimlane name", "r-board-note": "Note: leave a field empty to match every possible value. ", "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-added-to": "added to", - "r-when-a-card-is-moved": "When a card is moved to another list", + "r-when-a-card-is-moved": "When a case is moved to another patient", "r-set": "Set", "r-update": "Update", "r-datefield": "date field", @@ -722,7 +719,7 @@ "error-ldap-login": "An error occurred while trying to login", "display-authentication-method": "Display Authentication Method", "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", + "duplicate-board": "Duplicate Unity", "people-number": "The number of people is: ", "swimlaneDeletePopup-title": "Delete Swimlane ?", "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", From 32f50e16586696ec7d100ce0438d1030ae1f606e Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Sat, 19 Oct 2019 00:28:49 -0400 Subject: [PATCH 6/9] Add Feature: allow user to search Lists in Board --- client/components/sidebar/sidebarFilters.jade | 3 +- client/components/sidebar/sidebarFilters.js | 4 +- .../components/sidebar/sidebarSearches.jade | 4 + client/components/sidebar/sidebarSearches.js | 5 + i18n/en.i18n.json | 435 +++++++++--------- models/lists.js | 4 + 6 files changed, 236 insertions(+), 219 deletions(-) diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 0a68719e5..ff2cd9486 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -6,7 +6,8 @@ template(name="filterSidebar") ul.sidebar-list span {{_ 'list-filter-label'}} - input.js-list-filter(type="text") + form.js-list-filter + input(type="text") ul.sidebar-list li(class="{{#if Filter.labelIds.isSelected undefined}}active{{/if}}") a.name.js-toggle-label-filter diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js index ee76ef370..ee0176b97 100644 --- a/client/components/sidebar/sidebarFilters.js +++ b/client/components/sidebar/sidebarFilters.js @@ -4,9 +4,9 @@ BlazeComponent.extendComponent({ events() { return [ { - 'change .js-list-filter'(evt) { + 'submit .js-list-filter'(evt) { evt.preventDefault(); - Filter.lists.set(this.find('.js-list-filter').value.trim()); + Filter.lists.set(this.find('.js-list-filter input').value.trim()); }, 'click .js-toggle-label-filter'(evt) { evt.preventDefault(); diff --git a/client/components/sidebar/sidebarSearches.jade b/client/components/sidebar/sidebarSearches.jade index 96877c508..4ee7fc9c0 100644 --- a/client/components/sidebar/sidebarSearches.jade +++ b/client/components/sidebar/sidebarSearches.jade @@ -2,6 +2,10 @@ template(name="searchSidebar") form.js-search-term-form input(type="text" name="searchTerm" placeholder="{{_ 'search-example'}}" autofocus dir="auto") .list-body.js-perfect-scrollbar + .minilists.clearfix.js-minilists + each (lists) + a.minilist-wrapper.js-minilist(href=absoluteUrl) + +minilist(this) .minicards.clearfix.js-minicards each (results) a.minicard-wrapper.js-minicard(href=absoluteUrl) diff --git a/client/components/sidebar/sidebarSearches.js b/client/components/sidebar/sidebarSearches.js index 8944c04e8..026772601 100644 --- a/client/components/sidebar/sidebarSearches.js +++ b/client/components/sidebar/sidebarSearches.js @@ -8,6 +8,11 @@ BlazeComponent.extendComponent({ return currentBoard.searchCards(this.term.get()); }, + lists() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return currentBoard.searchLists(this.term.get()); + }, + events() { return [ { diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index db0e16f0f..dd8b71305 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -1,45 +1,45 @@ { "accept": "Accept", "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-addSubtask": "added subtask __subtask__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-addLabel": "Added label __label__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-addedLabel": "Added label __label__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-removeLabel": "Removed label __label__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-removedLabel": "Removed label __label__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-addChecklist": "added checklist __checklist__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-removeChecklist": "removed checklist __checklist__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-completeChecklist": "completed checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-addComment": "commented on case __card__: __comment__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-editComment": "edited comment on case __card__: __comment__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-deleteComment": "deleted comment on case __card__: __comment__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-createBoard": "created unity __board__", - "act-createSwimlane": "created swimlane __swimlane__ to unity __board__", - "act-createCard": "created case __card__ to patient __list__ at swimlane __swimlane__ at unity __board__", - "act-createCustomField": "created custom field __customField__ at unity __board__", - "act-deleteCustomField": "deleted custom field __customField__ at unity __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-createList": "added patient __list__ to unity __board__", - "act-addBoardMember": "added member __member__ to unity __board__", - "act-archivedBoard": "Unity __board__ moved to Archive", - "act-archivedCard": "Case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__ moved to Archive", - "act-archivedList": "Patient __list__ at swimlane __swimlane__ at unity __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at unity __board__ moved to Archive", - "act-importBoard": "imported unity __board__", - "act-importCard": "imported case __card__ to patient __list__ at swimlane __swimlane__ at unity __board__", - "act-importList": "imported patient __list__ to swimlane __swimlane__ at unity __board__", - "act-joinMember": "added member __member__ to case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", - "act-moveCard": "moved case __card__ at unity __board__ from patient __oldList__ at swimlane __oldSwimlane__ to patient __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved case __card__ from patient __oldList__ at swimlane __oldSwimlane__ at unity __oldBoard__ to patient __list__ at swimlane __swimlane__ at unity __board__", - "act-removeBoardMember": "removed member __member__ from unity __board__", - "act-restoredCard": "restored case __card__ to patient __list__ at swimlane __swimlane__ at unity __board__", - "act-unjoinMember": "removed member __member__ from case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-createBoard": "created board __board__", + "act-createSwimlane": "created swimlane __swimlane__ to board __board__", + "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-createCustomField": "created custom field __customField__ at board __board__", + "act-deleteCustomField": "deleted custom field __customField__ at board __board__", + "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-createList": "added list __list__ to board __board__", + "act-addBoardMember": "added member __member__ to board __board__", + "act-archivedBoard": "Board __board__ moved to Archive", + "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", + "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", + "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", + "act-importBoard": "imported board __board__", + "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", + "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", + "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-removeBoardMember": "removed member __member__ from board __board__", + "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", "actions": "Actions", @@ -64,52 +64,52 @@ "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "added checklist to %s", "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", "activity-checklist-item-added": "added checklist item to '%s' in %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Add", "activity-checked-item-card": "checked %s in checklist %s", "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at case __card__ at patient __list__ at swimlane __swimlane__ at unity __board__", + "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "activity-editComment": "edited comment %s", "activity-deleteComment": "deleted comment %s", "add-attachment": "Add Attachment", - "add-board": "Add Unity", - "add-card": "Add Case", + "add-board": "Add Board", + "add-card": "Add Card", "add-swimlane": "Add Swimlane", "add-subtask": "Add Subtask", "add-checklist": "Add Checklist", "add-checklist-item": "Add an item to checklist", "add-cover": "Add Cover", "add-label": "Add Label", - "add-list": "Add Patient", + "add-list": "Add List", "add-members": "Add Members", "added": "Added", "addMemberPopup-title": "Members", "admin": "Admin", - "admin-desc": "Can view and edit cases, remove members, and change settings for the unity.", + "admin-desc": "Can view and edit cards, remove members, and change settings for the board.", "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All unitys", - "and-n-other-card": "And __count__ other case", - "and-n-other-card_plural": "And __count__ other cases", + "all-boards": "All boards", + "and-n-other-card": "And __count__ other card", + "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", "archive": "Move to Archive", "archive-all": "Move All to Archive", - "archive-board": "Move Unity to Archive", - "archive-card": "Move Case to Archive", - "archive-list": "Move Patient to Archive", + "archive-board": "Move Board to Archive", + "archive-card": "Move Card to Archive", + "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Unity to Archive?", + "archiveBoardPopup-title": "Move Board to Archive?", "archived-items": "Archive", - "archived-boards": "Unities in Archive", - "restore-board": "Restore Unity", - "no-archived-boards": "No Unities in Archive.", + "archived-boards": "Boards in Archive", + "restore-board": "Restore Board", + "no-archived-boards": "No Boards in Archive.", "archives": "Archive", "template": "Template", "templates": "Templates", @@ -119,32 +119,32 @@ "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.", "attachmentDeletePopup-title": "Delete Attachment?", "attachments": "Attachments", - "auto-watch": "Automatically watch unitys when they are created", + "auto-watch": "Automatically watch boards when they are created", "avatar-too-big": "The avatar is too large (70KB max)", "back": "Back", "board-change-color": "Change color", "board-nb-stars": "%s stars", - "board-not-found": "Unity not found", - "board-private-info": "This unity will be private.", - "board-public-info": "This unity will be public.", - "boardChangeColorPopup-title": "Change Unity Background", - "boardChangeTitlePopup-title": "Rename Unity", + "board-not-found": "Board not found", + "board-private-info": "This board will be private.", + "board-public-info": "This board will be public.", + "boardChangeColorPopup-title": "Change Board Background", + "boardChangeTitlePopup-title": "Rename Board", "boardChangeVisibilityPopup-title": "Change Visibility", "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Unity Settings", - "boards": "Unities", - "board-view": "Unity View", + "boardMenuPopup-title": "Board Settings", + "boards": "Boards", + "board-view": "Board View", "board-view-cal": "Calendar", "board-view-swimlanes": "Swimlanes", - "board-view-lists": "Patients", - "bucket-example": "Like “Bucket Patient” for example", + "board-view-lists": "Lists", + "bucket-example": "Like “Bucket List” for example", "cancel": "Cancel", - "card-archived": "This case is moved to Archive.", - "board-archived": "This unity is moved to Archive.", - "card-comments-title": "This case has %s comment.", - "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this case.", - "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the case. There is no undo.", - "card-delete-suggest-archive": "You can move a case to Archive to remove it from the unity and preserve the activity.", + "card-archived": "This card is moved to Archive.", + "board-archived": "This board is moved to Archive.", + "card-comments-title": "This card has %s comment.", + "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.", + "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.", + "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.", "card-due": "Due", "card-due-on": "Due on", "card-spent": "Spent Time", @@ -152,25 +152,25 @@ "card-edit-custom-fields": "Edit custom fields", "card-edit-labels": "Edit labels", "card-edit-members": "Edit members", - "card-labels-title": "Change the labels for the case.", - "card-members-title": "Add or remove members of the unity from the case.", + "card-labels-title": "Change the labels for the card.", + "card-members-title": "Add or remove members of the board from the card.", "card-start": "Start", "card-start-on": "Starts on", "cardAttachmentsPopup-title": "Attach From", "cardCustomField-datePopup-title": "Change date", "cardCustomFieldsPopup-title": "Edit custom fields", - "cardDeletePopup-title": "Delete Case?", - "cardDetailsActionsPopup-title": "Case Actions", + "cardDeletePopup-title": "Delete Card?", + "cardDetailsActionsPopup-title": "Card Actions", "cardLabelsPopup-title": "Labels", "cardMembersPopup-title": "Members", "cardMorePopup-title": "More", "cardTemplatePopup-title": "Create template", - "cards": "Cases", - "cards-count": "Cases", + "cards": "Cards", + "cards-count": "Cards", "casSignIn": "Sign In with CAS", - "cardType-card": "Case", - "cardType-linkedCard": "Linked Case", - "cardType-linkedBoard": "Linked Unity", + "cardType-card": "Card", + "cardType-linkedCard": "Linked Card", + "cardType-linkedBoard": "Linked Board", "change": "Change", "change-avatar": "Change Avatar", "change-password": "Change Password", @@ -183,12 +183,12 @@ "changeSettingsPopup-title": "Change Settings", "subtasks": "Subtasks", "checklists": "Checklists", - "click-to-star": "Click to star this unity.", - "click-to-unstar": "Click to unstar this unity.", + "click-to-star": "Click to star this board.", + "click-to-unstar": "Click to unstar this board.", "clipboard": "Clipboard or drag & drop", "close": "Close", - "close-board": "Close Unity", - "close-board-pop": "You will be able to restore the unity by clicking the “Archive” button from the home header.", + "close-board": "Close Board", + "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.", "color-black": "black", "color-blue": "blue", "color-crimson": "crimson", @@ -218,32 +218,32 @@ "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", - "comment-only-desc": "Can comment on cases only.", + "comment-only-desc": "Can comment on cards only.", "no-comments": "No comments", "no-comments-desc": "Can not see comments and activities.", "computer": "Computer", "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?", "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?", - "copy-card-link-to-clipboard": "Copy case link to clipboard", - "linkCardPopup-title": "Link Case", + "copy-card-link-to-clipboard": "Copy card link to clipboard", + "linkCardPopup-title": "Link Card", "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Case", - "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cases", - "copyChecklistToManyCardsPopup-instructions": "Destination Case Titles and Descriptions in this JSON format", - "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First case title\", \"description\":\"First case description\"}, {\"title\":\"Second case title\",\"description\":\"Second case description\"},{\"title\":\"Last case title\",\"description\":\"Last case description\"} ]", + "copyCardPopup-title": "Copy Card", + "copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards", + "copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", + "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", "create": "Create", - "createBoardPopup-title": "Create Unity", - "chooseBoardSourcePopup-title": "Import unity", + "createBoardPopup-title": "Create Board", + "chooseBoardSourcePopup-title": "Import board", "createLabelPopup-title": "Create Label", "createCustomField": "Create Field", "createCustomFieldPopup-title": "Create Field", "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cases and destroy its history.", + "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", "custom-field-checkbox": "Checkbox", "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown Patient", + "custom-field-dropdown": "Dropdown List", "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "Patient Options", + "custom-field-dropdown-options": "List Options", "custom-field-dropdown-options-placeholder": "Press enter to add more options", "custom-field-dropdown-unknown": "(unknown)", "custom-field-number": "Number", @@ -281,69 +281,69 @@ "email-invalid": "Invalid email", "email-invite": "Invite via Email", "email-invite-subject": "__inviter__ sent you an invitation", - "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join unity \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.", + "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.", "email-resetPassword-subject": "Reset your password on __siteName__", "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.", "email-sent": "Email sent", "email-verifyEmail-subject": "Verify your email address on __siteName__", "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.", "enable-wip-limit": "Enable WIP Limit", - "error-board-doesNotExist": "This unity does not exist", - "error-board-notAdmin": "You need to be admin of this unity to do that", - "error-board-notAMember": "You need to be a member of this unity to do that", + "error-board-doesNotExist": "This board does not exist", + "error-board-notAdmin": "You need to be admin of this board to do that", + "error-board-notAMember": "You need to be a member of this board to do that", "error-json-malformed": "Your text is not valid JSON", "error-json-schema": "Your JSON data does not include the proper information in the correct format", - "error-list-doesNotExist": "This patient does not exist", + "error-list-doesNotExist": "This list does not exist", "error-user-doesNotExist": "This user does not exist", "error-user-notAllowSelf": "You can not invite yourself", "error-user-notCreated": "This user is not created", "error-username-taken": "This username is already taken", "error-email-taken": "Email has already been taken", - "export-board": "Export unity", + "export-board": "Export board", "sort": "Sort", - "sort-desc": "Click to Sort Patients", - "list-sort-by": "Sort the Patients By:", - "list-label-modifiedAt": "Case Last Access Time", - "list-label-title": "Name of the Patient", + "sort-desc": "Click to Sort List", + "list-sort-by": "Sort the List By:", + "list-label-modifiedAt": "Last Access Time", + "list-label-title": "Name of the List", "list-label-sort": "Your Manual Order", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", "filter": "Filter", - "filter-cards": "Filter Cases or Patients", - "list-filter-label": "Filter Patient by Name", + "filter-cards": "Filter Cards or Lists", + "list-filter-label": "Filter List by Title", "filter-clear": "Clear filter", "filter-no-label": "No label", "filter-no-member": "No member", "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived patients", - "filter-hide-empty": "Hide empty patients", + "filter-show-archive": "Show archived lists", + "filter-hide-empty": "Hide empty lists", "filter-on": "Filter is on", - "filter-on-desc": "You are filtering cases on this unity. Click here to edit filter.", + "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", "filter-to-selection": "Filter to selection", "advanced-filter-label": "Advanced Filter", "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", - "header-logo-title": "Go back to your unitys page.", + "header-logo-title": "Go back to your boards page.", "hide-system-messages": "Hide system messages", - "headerBarCreateBoardPopup-title": "Create Unity", + "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", "link": "Link", - "import-board": "import unity", - "import-board-c": "Import unity", - "import-board-title-trello": "Import unity from Trello", - "import-board-title-wekan": "Import unity from previous export", - "import-sandstorm-backup-warning": "Do not delete data you import from original exported unity or Trello before checking does this grain close and open again, or do you get Unity not found error, that means data loss.", - "import-sandstorm-warning": "Imported unity will delete all existing data on unity and replace it with imported unity.", + "import-board": "import board", + "import-board-c": "Import board", + "import-board-title-trello": "Import board from Trello", + "import-board-title-wekan": "Import board from previous export", + "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.", + "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.", "from-trello": "From Trello", "from-wekan": "From previous export", - "import-board-instruction-trello": "In your Trello unity, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.", - "import-board-instruction-wekan": "In your unity, go to 'Menu', then 'Export unity', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing unity, sometimes importing still works, and unity is at All Unities page.", + "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.", + "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", + "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", "import-json-placeholder": "Paste your valid JSON data here", "import-map-members": "Map members", - "import-members-map": "Your imported unity has some members. Please map the members you want to import to your users", + "import-members-map": "Your imported board has some members. Please map the members you want to import to your users", "import-show-user-mapping": "Review members mapping", "import-user-select": "Pick your existing user you want to use as this member", "importMapMembersAddPopup-title": "Select member", @@ -353,32 +353,32 @@ "invalid-time": "Invalid time", "invalid-user": "Invalid user", "joined": "joined", - "just-invited": "You are just invited to this unity", + "just-invited": "You are just invited to this board", "keyboard-shortcuts": "Keyboard shortcuts", "label-create": "Create Label", "label-default": "%s label (default)", - "label-delete-pop": "There is no undo. This will remove this label from all cases and destroy its history.", + "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.", "labels": "Labels", "language": "Language", "last-admin-desc": "You can’t change roles because there must be at least one admin.", - "leave-board": "Leave Unity", - "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cases on this unity.", - "leaveBoardPopup-title": "Leave Unity ?", - "link-card": "Link to this case", - "list-archive-cards": "Move all cases in this patient to Archive", - "list-archive-cards-pop": "This will remove all the cases in this patient from the unity. To view cases in Archive and bring them back to the unity, click “Menu” > “Archive”.", - "list-move-cards": "Move all cases in this patient", - "list-select-cards": "Select all cases in this patient", + "leave-board": "Leave Board", + "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.", + "leaveBoardPopup-title": "Leave Board ?", + "link-card": "Link to this card", + "list-archive-cards": "Move all cards in this list to Archive", + "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", + "list-move-cards": "Move all cards in this list", + "list-select-cards": "Select all cards in this list", "set-color-list": "Set Color", - "listActionPopup-title": "Patient Actions", + "listActionPopup-title": "List Actions", "swimlaneActionPopup-title": "Swimlane Actions", "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello case", + "listImportCardPopup-title": "Import a Trello card", "listMorePopup-title": "More", - "link-list": "Link to this patient", - "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the patient. There is no undo.", - "list-delete-suggest-archive": "You can move a patient to Archive to remove it from the unity and preserve the activity.", - "lists": "Patients", + "link-list": "Link to this list", + "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.", + "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.", + "lists": "Lists", "swimlanes": "Swimlanes", "log-out": "Log Out", "log-in": "Log In", @@ -387,25 +387,25 @@ "members": "Members", "menu": "Menu", "move-selection": "Move selection", - "moveCardPopup-title": "Move Case", + "moveCardPopup-title": "Move Card", "moveCardToBottom-title": "Move to Bottom", "moveCardToTop-title": "Move to Top", "moveSelectionPopup-title": "Move selection", "multi-selection": "Multi-Selection", "multi-selection-on": "Multi-Selection is on", "muted": "Muted", - "muted-info": "You will never be notified of any changes in this unity", - "my-boards": "My Unities", + "muted-info": "You will never be notified of any changes in this board", + "my-boards": "My Boards", "name": "Name", - "no-archived-cards": "No cases in Archive.", - "no-archived-lists": "No patients in Archive.", + "no-archived-cards": "No cards in Archive.", + "no-archived-lists": "No lists in Archive.", "no-archived-swimlanes": "No swimlanes in Archive.", "no-results": "No results", "normal": "Normal", - "normal-desc": "Can view and edit cases. Can't change settings.", + "normal-desc": "Can view and edit cards. Can't change settings.", "not-accepted-yet": "Invitation not accepted yet", - "notify-participate": "Receive updates to any cases you participate as creater or member", - "notify-watch": "Receive updates to any unitys, patients, or cases you’re watching", + "notify-participate": "Receive updates to any cards you participate as creater or member", + "notify-watch": "Receive updates to any boards, lists, or cards you’re watching", "optional": "optional", "or": "or", "page-maybe-private": "This page may be private. You may be able to view it by logging in.", @@ -417,59 +417,59 @@ "previewAttachedImagePopup-title": "Preview", "previewClipboardImagePopup-title": "Preview", "private": "Private", - "private-desc": "This unity is private. Only people added to the unity can view and edit it.", + "private-desc": "This board is private. Only people added to the board can view and edit it.", "profile": "Profile", "public": "Public", - "public-desc": "This unity is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the unity can edit.", - "quick-access-description": "Star a unity to add a shortcut in this bar.", + "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.", + "quick-access-description": "Star a board to add a shortcut in this bar.", "remove-cover": "Remove Cover", - "remove-from-board": "Remove from Unity", + "remove-from-board": "Remove from Board", "remove-label": "Remove Label", - "listDeletePopup-title": "Delete Patient ?", + "listDeletePopup-title": "Delete List ?", "remove-member": "Remove Member", - "remove-member-from-card": "Remove from Case", - "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cases on this unity. They will receive a notification.", + "remove-member-from-card": "Remove from Card", + "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.", "removeMemberPopup-title": "Remove Member?", "rename": "Rename", - "rename-board": "Rename Unity", + "rename-board": "Rename Board", "restore": "Restore", "save": "Save", "search": "Search", "rules": "Rules", - "search-cards": "Search from case titles and descriptions on this unity", + "search-cards": "Search from card/list titles and descriptions on this board", "search-example": "Text to search for?", "select-color": "Select Color", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this patient", + "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-assign-self": "Assign yourself to current case", + "shortcut-assign-self": "Assign yourself to current card", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete members", "shortcut-clear-filters": "Clear all filters", "shortcut-close-dialog": "Close Dialog", - "shortcut-filter-my-cards": "Filter my cases", - "shortcut-show-shortcuts": "Bring up this shortcuts patient", + "shortcut-filter-my-cards": "Filter my cards", + "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-sidebar": "Toggle Unity Sidebar", - "show-cards-minimum-count": "Show cases count if patient contains more than", + "shortcut-toggle-sidebar": "Toggle Board Sidebar", + "show-cards-minimum-count": "Show cards count if list contains more than", "sidebar-open": "Open Sidebar", "sidebar-close": "Close Sidebar", "signupPopup-title": "Create an Account", - "star-board-title": "Click to star this unity. It will show up at top of your unitys patient.", - "starred-boards": "Starred Unities", - "starred-boards-description": "Starred unitys show up at the top of your unitys patient.", + "star-board-title": "Click to star this board. It will show up at top of your boards list.", + "starred-boards": "Starred Boards", + "starred-boards-description": "Starred boards show up at the top of your boards list.", "subscribe": "Subscribe", "team": "Team", - "this-board": "this unity", - "this-card": "this case", + "this-board": "this board", + "this-card": "this card", "spent-time-hours": "Spent time (hours)", "overtime-hours": "Overtime (hours)", "overtime": "Overtime", - "has-overtime-cards": "Has overtime cases", - "has-spenttime-cards": "Has spent time cases", + "has-overtime-cards": "Has overtime cards", + "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cases you are involved as creator or member.", + "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", "type": "Type", "unassign-member": "Unassign member", "unsaved-description": "You have an unsaved description.", @@ -479,21 +479,21 @@ "uploaded-avatar": "Uploaded an avatar", "username": "Username", "view-it": "View it", - "warn-list-archived": "warning: this case is in an patient at Archive", + "warn-list-archived": "warning: this card is in an list at Archive", "watch": "Watch", "watching": "Watching", - "watching-info": "You will be notified of any change in this unity", - "welcome-board": "Welcome Unity", + "watching-info": "You will be notified of any change in this board", + "welcome-board": "Welcome Board", "welcome-swimlane": "Milestone 1", "welcome-list1": "Basics", "welcome-list2": "Advanced", - "card-templates-swimlane": "Case Templates", - "list-templates-swimlane": "Patient Templates", - "board-templates-swimlane": "Unity Templates", + "card-templates-swimlane": "Card Templates", + "list-templates-swimlane": "List Templates", + "board-templates-swimlane": "Board Templates", "what-to-do": "What do you want to do?", "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this patient is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this patient, or set a higher WIP limit.", + "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", + "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", "admin-panel": "Admin Panel", "settings": "Settings", "people": "People", @@ -501,7 +501,7 @@ "disable-self-registration": "Disable Self-Registration", "invite": "Invite", "invite-people": "Invite People", - "to-boards": "To unity(s)", + "to-boards": "To board(s)", "email-addresses": "Email Addresses", "smtp-host-description": "The address of the SMTP server that handles your emails.", "smtp-port-description": "The port your SMTP server uses for outgoing emails.", @@ -515,7 +515,7 @@ "send-smtp-test": "Send a test email to yourself", "invitation-code": "Invitation Code", "email-invite-register-subject": "__inviter__ sent you an invitation", - "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to case collaborations management system.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", + "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", "email-smtp-test-subject": "SMTP Test Email", "email-smtp-test-text": "You have successfully sent an email", "error-invitation-code-not-exist": "Invitation code doesn't exist", @@ -525,7 +525,7 @@ "outgoing-webhooks": "Outgoing Webhooks", "bidirectional-webhooks": "Two-Way Webhooks", "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Case Title Filter", + "boardCardTitlePopup-title": "Card Title Filter", "disable-webhook": "Disable This Webhook", "global-webhook": "Global Webhooks", "new-outgoing-webhook": "New Outgoing Webhook", @@ -548,8 +548,8 @@ "hours": "hours", "minutes": "minutes", "seconds": "seconds", - "show-field-on-card": "Show this field on case", - "automatically-field-on-card": "Auto create field to all cases", + "show-field-on-card": "Show this field on card", + "automatically-field-on-card": "Auto create field to all cards", "showLabel-field-on-card": "Show field label on minicard", "yes": "Yes", "no": "No", @@ -571,26 +571,26 @@ "setListColorPopup-title": "Choose a color", "assigned-by": "Assigned By", "requested-by": "Requested By", - "board-delete-notice": "Deleting is permanent. You will lose all patients, cases and actions associated with this unity.", - "delete-board-confirm-popup": "All patients, cases, labels, and activities will be deleted and you won't be able to recover the unity contents. There is no undo.", - "boardDeletePopup-title": "Delete Unity?", - "delete-board": "Delete Unity", - "default-subtasks-board": "Subtasks for __board__ unity", + "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", + "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", + "boardDeletePopup-title": "Delete Board?", + "delete-board": "Delete Board", + "default-subtasks-board": "Subtasks for __board__ board", "default": "Default", "queue": "Queue", "subtask-settings": "Subtasks Settings", - "boardSubtaskSettingsPopup-title": "Unity Subtasks Settings", - "show-subtasks-field": "Cases can have subtasks", - "deposit-subtasks-board": "Deposit subtasks to this unity:", - "deposit-subtasks-list": "Landing patient for subtasks deposited here:", + "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", + "show-subtasks-field": "Cards can have subtasks", + "deposit-subtasks-board": "Deposit subtasks to this board:", + "deposit-subtasks-list": "Landing list for subtasks deposited here:", "show-parent-in-minicard": "Show parent in minicard:", "prefix-with-full-path": "Prefix with full path", "prefix-with-parent": "Prefix with parent", "subtext-with-full-path": "Subtext with full path", "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change case's parent", - "parent-card": "Parent case", - "source-board": "Source unity", + "change-card-parent": "Change card's parent", + "parent-card": "Parent card", + "source-board": "Source board", "no-parent": "Don't show parent", "activity-added-label": "added label '%s' to %s", "activity-removed-label": "removed label '%s' from %s", @@ -603,31 +603,32 @@ "r-rule": "Rule", "r-add-trigger": "Add trigger", "r-add-action": "Add action", - "r-board-rules": "Unity rules", + "r-board-rules": "Board rules", "r-add-rule": "Add rule", "r-view-rule": "View rule", "r-delete-rule": "Delete rule", "r-new-rule-name": "New rule title", "r-no-rules": "No rules", - "r-when-a-card": "When a case", + "r-when-a-card": "When a card", "r-is": "is", "r-is-moved": "is moved", - "r-added-to": "added to", + "r-added-to": "Added to", "r-removed-from": "Removed from", - "r-the-board": "the unity", + "r-the-board": "the board", "r-list": "list", "set-filter": "Set Filter", "r-moved-to": "Moved to", "r-moved-from": "Moved from", "r-archived": "Moved to Archive", "r-unarchived": "Restored from Archive", - "r-a-card": "a case", + "r-a-card": "a card", "r-when-a-label-is": "When a label is", "r-when-the-label": "When the label", "r-list-name": "list name", "r-when-a-member": "When a member is", "r-when-the-member": "When the member", "r-name": "name", + "r-is": "is", "r-when-a-attach": "When an attachment", "r-when-a-checklist": "When a checklist is", "r-when-the-checklist": "When the checklist", @@ -637,10 +638,11 @@ "r-when-the-item": "When the checklist item", "r-checked": "Checked", "r-unchecked": "Unchecked", - "r-move-card-to": "Move case to", + "r-move-card-to": "Move card to", "r-top-of": "Top of", "r-bottom-of": "Bottom of", - "r-its-list": "its patient", + "r-its-list": "its list", + "r-list": "list", "r-archive": "Move to Archive", "r-unarchive": "Restore from Archive", "r-card": "card", @@ -648,7 +650,7 @@ "r-remove": "Remove", "r-label": "label", "r-member": "member", - "r-remove-all": "Remove all members from the case", + "r-remove-all": "Remove all members from the card", "r-set-color": "Set color to", "r-checklist": "checklist", "r-check-all": "Check all", @@ -662,26 +664,26 @@ "r-to": "to", "r-subject": "subject", "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move case to top of its patient", - "r-d-move-to-top-spec": "Move case to top of patient", - "r-d-move-to-bottom-gen": "Move case to bottom of its patient", - "r-d-move-to-bottom-spec": "Move case to bottom of patient", + "r-d-move-to-top-gen": "Move card to top of its list", + "r-d-move-to-top-spec": "Move card to top of list", + "r-d-move-to-bottom-gen": "Move card to bottom of its list", + "r-d-move-to-bottom-spec": "Move card to bottom of list", "r-d-send-email": "Send email", "r-d-send-email-to": "to", "r-d-send-email-subject": "subject", "r-d-send-email-message": "message", - "r-d-archive": "Move case to Archive", - "r-d-unarchive": "Restore case from Archive", + "r-d-archive": "Move card to Archive", + "r-d-unarchive": "Restore card from Archive", "r-d-add-label": "Add label", "r-d-remove-label": "Remove label", - "r-create-card": "Create new case", - "r-in-list": "in patient", + "r-create-card": "Create new card", + "r-in-list": "in list", "r-in-swimlane": "in swimlane", "r-d-add-member": "Add member", "r-d-remove-member": "Remove member", "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a patient", - "r-d-uncheck-all": "Uncheck all items of a patient", + "r-d-check-all": "Check all items of a list", + "r-d-uncheck-all": "Uncheck all items of a list", "r-d-check-one": "Check item", "r-d-uncheck-one": "Uncheck item", "r-d-check-of-list": "of checklist", @@ -695,7 +697,8 @@ "r-swimlane-name": "swimlane name", "r-board-note": "Note: leave a field empty to match every possible value. ", "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-when-a-card-is-moved": "When a case is moved to another patient", + "r-added-to": "added to", + "r-when-a-card-is-moved": "When a card is moved to another list", "r-set": "Set", "r-update": "Update", "r-datefield": "date field", @@ -719,7 +722,7 @@ "error-ldap-login": "An error occurred while trying to login", "display-authentication-method": "Display Authentication Method", "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Unity", + "duplicate-board": "Duplicate Board", "people-number": "The number of people is: ", "swimlaneDeletePopup-title": "Delete Swimlane ?", "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", diff --git a/models/lists.js b/models/lists.js index 16ad434ce..f06b15b12 100644 --- a/models/lists.js +++ b/models/lists.js @@ -269,6 +269,10 @@ Lists.helpers({ return this.starred === true; }, + absoluteUrl() { + const card = Cards.findOne({ listId: this._id }); + return card && card.absoluteUrl(); + }, remove() { Lists.remove({ _id: this._id }); }, From e195c731de88aba4026c239f4552ae821d522ec7 Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Tue, 29 Oct 2019 17:45:06 -0400 Subject: [PATCH 7/9] Change the radom to random typo in export.js --- models/cards.js | 8 +++++--- models/export.js | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/models/cards.js b/models/cards.js index 27dda0ee4..a43402bb0 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1696,10 +1696,12 @@ if (Meteor.isServer) { const activityType = `a-${action}`; const card = Cards.findOne(doc._id); const list = card.list(); - if (list && action === 'endAt') { - // change list modifiedAt + if (list) { + // change list modifiedAt, when user modified the key values in timingaction array, if it's endAt, put the modifiedAt of list back to one year ago for sorting purpose const modifiedAt = new Date( - new Date(value).getTime() - 365 * 24 * 3600 * 1e3, + new Date(value).getTime() - (action === 'endAt') + ? 365 * 24 * 3600 * 1e3 + : 0, ); // set it as 1 year before const boardId = list.boardId; Lists.direct.update( diff --git a/models/export.js b/models/export.js index 5d3564876..056eefdc7 100644 --- a/models/export.js +++ b/models/export.js @@ -142,7 +142,7 @@ export class Exporter { // callback has the form function (err, res) {} const tmpFile = path.join( os.tmpdir(), - `tmpexport${process.pid}${Math.radom()}`, + `tmpexport${process.pid}${Math.random()}`, ); const tmpWriteable = fs.createWriteStream(tmpFile); const readStream = doc.createReadStream(); From b26504f4145e1968f18389982210f60c1f1fa725 Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Wed, 30 Oct 2019 09:45:50 -0400 Subject: [PATCH 8/9] Fix: lists filter didn't get added into filter active checklist --- client/lib/filter.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/lib/filter.js b/client/lib/filter.js index 9ddea65c9..592eb4ab4 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -477,7 +477,9 @@ Filter = { return ( _.any(this._fields, fieldName => { return this[fieldName]._isActive(); - }) || this.advanced._isActive() + }) || + this.advanced._isActive() || + this.lists._isActive() ); }, From 3308d90a3a6a1ddeed33966767937cd2c2c90cb5 Mon Sep 17 00:00:00 2001 From: "Sam X. Chen" Date: Wed, 30 Oct 2019 12:26:39 -0400 Subject: [PATCH 9/9] Fix: List last modify time will be affected by cards dueAt, endAt --- models/cards.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/models/cards.js b/models/cards.js index a43402bb0..1c56a6d2a 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1699,9 +1699,8 @@ if (Meteor.isServer) { if (list) { // change list modifiedAt, when user modified the key values in timingaction array, if it's endAt, put the modifiedAt of list back to one year ago for sorting purpose const modifiedAt = new Date( - new Date(value).getTime() - (action === 'endAt') - ? 365 * 24 * 3600 * 1e3 - : 0, + new Date(value).getTime() - + (action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0), ); // set it as 1 year before const boardId = list.boardId; Lists.direct.update(