From 672c21bfe043c557c059086561113a6a1dfefb42 Mon Sep 17 00:00:00 2001 From: floatinghotpot Date: Tue, 8 Dec 2015 16:03:31 +0800 Subject: bugfix: only care active members, also optimize some code --- client/components/cards/cardDetails.jade | 2 +- client/components/lists/listBody.js | 2 +- client/components/main/editor.js | 2 +- client/components/sidebar/sidebar.js | 12 +++---- client/components/sidebar/sidebarFilters.jade | 46 +++++++++++++-------------- 5 files changed, 29 insertions(+), 35 deletions(-) (limited to 'client/components') diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 9d2cbec7..5746c92c 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -94,7 +94,7 @@ template(name="moveCardPopup") template(name="cardMembersPopup") ul.pop-over-list.js-card-member-list - each board.members + each board.activeMembers li.item(class="{{#if isCardMember}}active{{/if}}") a.name.js-select-member(href="#") +userAvatar(userId=user._id) diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 36b60d06..1fc84c82 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -186,7 +186,7 @@ BlazeComponent.extendComponent({ match: /\B@(\w*)$/, search(term, callback) { const currentBoard = Boards.findOne(Session.get('currentBoard')); - callback($.map(currentBoard.members, (member) => { + callback($.map(currentBoard.activeMembers(), (member) => { const user = Users.findOne(member.userId); return user.username.indexOf(term) === 0 ? user : null; })); diff --git a/client/components/main/editor.js b/client/components/main/editor.js index 82fce641..a30a5e1d 100644 --- a/client/components/main/editor.js +++ b/client/components/main/editor.js @@ -28,7 +28,7 @@ Template.editor.onRendered(() => { match: /\B@(\w*)$/, search(term, callback) { const currentBoard = Boards.findOne(Session.get('currentBoard')); - callback(currentBoard.members.map((member) => { + callback(currentBoard.activeMembers().map((member) => { const username = Users.findOne(member.userId).username; return username.includes(term) ? username : null; })); diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 5b58dbd9..ec3ebcf6 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -279,7 +279,7 @@ BlazeComponent.extendComponent({ 'click .js-select-member'() { const userId = this.currentData()._id; const currentBoard = Boards.findOne(Session.get('currentBoard')); - if (currentBoard.memberIndex(userId)<0) { + if (!currentBoard.hasMember(userId)) { this.inviteUser(userId); } }, @@ -305,16 +305,12 @@ Template.changePermissionsPopup.events({ Template.changePermissionsPopup.helpers({ isAdmin() { - const user = Users.findOne(this.userId); - return user.isBoardAdmin(); + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return currentBoard.hasAdmin(this.userId); }, isLastAdmin() { - const user = Users.findOne(this.userId); - if (!user.isBoardAdmin()) - return false; const currentBoard = Boards.findOne(Session.get('currentBoard')); - const nbAdmins = _.where(currentBoard.members, { isAdmin: true }).length; - return nbAdmins === 1; + return currentBoard.hasAdmin(this.userId) && (currentBoard.activeAdmins() === 1); }, }); diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index ef26ef76..0e935e3f 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -18,17 +18,16 @@ template(name="filterSidebar") i.fa.fa-check hr ul.sidebar-list - each currentBoard.members - if isActive - with getUser userId - li(class="{{#if Filter.members.isSelected _id}}active{{/if}}") - a.name.js-toggle-member-filter - +userAvatar(userId=this._id) - span.sidebar-list-item-description - = profile.fullname - | ({{ username }}) - if Filter.members.isSelected _id - i.fa.fa-check + each currentBoard.activeMembers + with getUser userId + li(class="{{#if Filter.members.isSelected _id}}active{{/if}}") + a.name.js-toggle-member-filter + +userAvatar(userId=this._id) + span.sidebar-list-item-description + = profile.fullname + | ({{ username }}) + if Filter.members.isSelected _id + i.fa.fa-check if Filter.isActive hr a.sidebar-btn.js-clear-all @@ -55,19 +54,18 @@ template(name="multiselectionSidebar") i.fa.fa-ellipsis-h hr ul.sidebar-list - each currentBoard.members - if isActive - with getUser userId - li(class="{{#if Filter.members.isSelected _id}}active{{/if}}") - a.name.js-toggle-member-multiselection - +userAvatar(userId=this._id) - span.sidebar-list-item-description - = profile.fullname - | ({{ username }}) - if allSelectedElementHave 'member' _id - i.fa.fa-check - else if someSelectedElementHave 'member' _id - i.fa.fa-ellipsis-h + each currentBoard.activeMembers + with getUser userId + li(class="{{#if Filter.members.isSelected _id}}active{{/if}}") + a.name.js-toggle-member-multiselection + +userAvatar(userId=this._id) + span.sidebar-list-item-description + = profile.fullname + | ({{ username }}) + if allSelectedElementHave 'member' _id + i.fa.fa-check + else if someSelectedElementHave 'member' _id + i.fa.fa-ellipsis-h hr a.sidebar-btn.js-archive-selection i.fa.fa-archive -- cgit v1.2.3-1-g7c22 From 5bdf91bd055031b21493db46b2ef38df3b3e07c4 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Wed, 9 Dec 2015 18:45:55 -0500 Subject: Remove the move and archive all cards of a list feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This operation should now be handled using the multi-selection feature, ie “select all cards” and then move them or click the “archive selection” button. This new process add an extra click which I consider reasonable enough for a relatively rare operation -- plus I want to encourage mutli-selection usage. Closes #390. --- client/components/lists/listHeader.jade | 9 --------- client/components/lists/listHeader.js | 19 ------------------- client/components/sidebar/sidebarFilters.js | 1 + 3 files changed, 1 insertion(+), 28 deletions(-) (limited to 'client/components') diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 72cd0fe9..750cf3a2 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -21,16 +21,11 @@ template(name="listActionPopup") li: a.js-add-card {{_ 'add-card'}} if cards.count li: a.js-select-cards {{_ 'list-select-cards'}} - li: a.js-move-cards {{_ 'list-move-cards'}} - li: a.js-archive-cards {{_ 'list-archive-cards'}} hr ul.pop-over-list li: a.js-import-card {{_ 'import-card'}} li: a.js-close-list {{_ 'archive-list'}} -template(name="listMoveCardsPopup") - +boardLists - template(name="boardLists") ul.pop-over-list each currentBoard.lists @@ -39,7 +34,3 @@ template(name="boardLists") a.disabled {{title}} ({{_ 'current'}}) else a.js-select-list= title - -template(name="listArchiveCardsPopup") - p {{_ 'list-archive-cards-pop'}} - input.js-confirm.negate.full(type="submit" value="{{_ 'archive-all'}}") diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index d660508a..5b7c5713 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -34,28 +34,9 @@ Template.listActionPopup.events({ Popup.close(); }, 'click .js-import-card': Popup.open('listImportCard'), - 'click .js-move-cards': Popup.open('listMoveCards'), - 'click .js-archive-cards': Popup.afterConfirm('listArchiveCards', function() { - this.allCards().forEach((card) => { - card.archive(); - }); - Popup.close(); - }), - 'click .js-close-list'(evt) { evt.preventDefault(); this.archive(); Popup.close(); }, }); - -Template.listMoveCardsPopup.events({ - 'click .js-select-list'() { - const fromList = Template.parentData(2).data; - const toList = this._id; - fromList.allCards().forEach((card) => { - card.move(toList); - }); - Popup.close(); - }, -}); diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js index bdecd63e..50e76200 100644 --- a/client/components/sidebar/sidebarFilters.js +++ b/client/components/sidebar/sidebarFilters.js @@ -95,6 +95,7 @@ BlazeComponent.extendComponent({ }, 'click .js-archive-selection'() { mutateSelectedCards('archive'); + EscapeActions.executeUpTo('multiselection'); }, }]; }, -- cgit v1.2.3-1-g7c22 From 3b2eb0ffa12a0b3cc2eaa0a1e26ed6532e3f5d93 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Wed, 9 Dec 2015 19:08:17 -0500 Subject: Fix board archive instructions Fixes #277. --- client/components/boards/boardHeader.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'client/components') diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index a0160382..5e11c3b7 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -124,4 +124,4 @@ template(name="boardChangeTitlePopup") template(name="archiveBoardPopup") p {{_ 'close-board-pop'}} - button.js-confirm.negate.full(type="submit") {{_ 'close'}} + button.js-confirm.negate.full(type="submit") {{_ 'archive'}} -- cgit v1.2.3-1-g7c22 From 71b9a42f00d8871bb09944ec80979c61ad84e655 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Tue, 8 Dec 2015 16:05:59 -0500 Subject: Allow the header bar customization This commit also provide a way to escape the Shorcuts page on Sandstorm. --- client/components/boards/boardArchive.js | 2 +- client/components/boards/boardHeader.jade | 2 +- client/components/boards/boardsList.jade | 9 +++++++++ client/components/main/header.jade | 13 +------------ client/components/main/header.styl | 8 ++++++++ client/components/main/keyboardShortcuts.jade | 19 +++++++++++++++++++ client/components/main/keyboardShortcuts.tpl.jade | 11 ----------- client/components/main/layouts.jade | 1 + client/components/main/layouts.styl | 3 +++ 9 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 client/components/main/keyboardShortcuts.jade delete mode 100644 client/components/main/keyboardShortcuts.tpl.jade (limited to 'client/components') diff --git a/client/components/boards/boardArchive.js b/client/components/boards/boardArchive.js index 35f795f3..6f62daaf 100644 --- a/client/components/boards/boardArchive.js +++ b/client/components/boards/boardArchive.js @@ -1,4 +1,4 @@ -Template.headerTitle.events({ +Template.boardHeaderBar.events({ 'click .js-open-archived-board'() { Modal.open('archivedBoards'); }, diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 5e11c3b7..fc1abc88 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -1,4 +1,4 @@ -template(name="headerBoard") +template(name="boardHeaderBar") h1.header-board-menu with currentBoard a(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}") diff --git a/client/components/boards/boardsList.jade b/client/components/boards/boardsList.jade index 7099cdc9..c11bb2df 100644 --- a/client/components/boards/boardsList.jade +++ b/client/components/boards/boardsList.jade @@ -23,3 +23,12 @@ template(name="boardList") p.board-list-item-desc= description li.js-add-board a.board-list-item.label {{_ 'add-board'}} + + +template(name="boardListHeaderBar") + h1 {{_ 'my-boards'}} + + .board-header-btns.right + a.board-header-btn.js-open-archived-board + i.fa.fa-archive + span {{_ 'archives'}} diff --git a/client/components/main/header.jade b/client/components/main/header.jade index 86dfd6a7..0d178250 100644 --- a/client/components/main/header.jade +++ b/client/components/main/header.jade @@ -32,10 +32,7 @@ template(name="header") current page. This bar is contextual based. If the user is not connected we display "sign in" and "log in" buttons. #header-main-bar(class="{{#if wrappedHeader}}wrapper{{/if}}") - if $.Session.get 'currentBoard' - +headerBoard - else if($eq currentRouteName 'home') - +headerTitle + +Template.dynamic(template=headerBar) //- On sandstorm, the logo shouldn't be clickable, because we only have one @@ -47,11 +44,3 @@ template(name="header") else a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}") img(src="{{pathFor '/wekan-logo-header.png'}}" alt="Wekan") - -template(name="headerTitle") - h1 {{_ 'my-boards'}} - - .board-header-btns.right - a.board-header-btn.js-open-archived-board - i.fa.fa-archive - span {{_ 'archives'}} diff --git a/client/components/main/header.styl b/client/components/main/header.styl index b66eb2da..6decf2df 100644 --- a/client/components/main/header.styl +++ b/client/components/main/header.styl @@ -85,6 +85,14 @@ float: left border-radius: 3px + a.fa, a i.fa + color: white + + .back-btn + font-size: 0.9em + margin-right: 10px + + .wekan-logo display: block margin: 3px auto 0 diff --git a/client/components/main/keyboardShortcuts.jade b/client/components/main/keyboardShortcuts.jade new file mode 100644 index 00000000..bde40819 --- /dev/null +++ b/client/components/main/keyboardShortcuts.jade @@ -0,0 +1,19 @@ +template(name="shortcutsHeaderBar") + h1 + a.back-btn(href="{{pathFor 'home'}}") + i.fa.fa-chevron-left + | {{_ 'keyboard-shortcuts'}} + +template(name="shortcutsModalTitle") + h2 + i.fa.fa-keyboard-o + | {{_ 'keyboard-shortcuts'}} + +template(name="keyboardShortcuts") + .wrapper.shortcuts-list + each mapping + .shortcuts-list-item + .shortcuts-list-item-keys + each keys + kbd= this + .shortcuts-list-item-action {{_ action}} diff --git a/client/components/main/keyboardShortcuts.tpl.jade b/client/components/main/keyboardShortcuts.tpl.jade deleted file mode 100644 index 5b5dae8b..00000000 --- a/client/components/main/keyboardShortcuts.tpl.jade +++ /dev/null @@ -1,11 +0,0 @@ -.wrapper.shortcuts-list - h2 - i.fa.fa-keyboard-o - | {{_ 'keyboard-shortcuts'}} - - each mapping - .shortcuts-list-item - .shortcuts-list-item-keys - each keys - kbd= this - .shortcuts-list-item-action {{_ action}} diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade index 65b53f04..88d178f5 100644 --- a/client/components/main/layouts.jade +++ b/client/components/main/layouts.jade @@ -31,6 +31,7 @@ template(name="defaultLayout") .modal-content a.modal-close-btn.js-close-modal i.fa.fa-times-thin + +Template.dynamic(template=Modal.getHeaderName) +Template.dynamic(template=Modal.getTemplateName) template(name="notFound") diff --git a/client/components/main/layouts.styl b/client/components/main/layouts.styl index fcc94251..0e50dd55 100644 --- a/client/components/main/layouts.styl +++ b/client/components/main/layouts.styl @@ -31,6 +31,9 @@ body .sk-spinner margin-top: 30vh + > .wrapper + margin-top: 25px + #modal position: absolute top: 0 -- cgit v1.2.3-1-g7c22 From 480ef632730b28c9a7ec4d6dfd6e682c8df7c099 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Wed, 9 Dec 2015 23:19:10 -0500 Subject: Fix a regression introduced in 71b9a42f The buttons in the board header were not click-able anymore. --- client/components/boards/boardHeader.js | 4 ++-- client/components/main/header.js | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) (limited to 'client/components') diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index 3dc6d754..9423ecee 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -30,7 +30,7 @@ Template.boardChangeTitlePopup.events({ BlazeComponent.extendComponent({ template() { - return 'headerBoard'; + return 'boardHeaderBar'; }, isStarred() { @@ -74,7 +74,7 @@ BlazeComponent.extendComponent({ }, }]; }, -}).register('headerBoard'); +}).register('boardHeaderBar'); BlazeComponent.extendComponent({ template() { diff --git a/client/components/main/header.js b/client/components/main/header.js index 30cb2d8f..d44fe76d 100644 --- a/client/components/main/header.js +++ b/client/components/main/header.js @@ -1,9 +1,4 @@ Template.header.helpers({ - // Reactively set the color of the page from the color of the current board. - headerTemplate() { - return 'headerBoard'; - }, - wrappedHeader() { return !Session.get('currentBoard'); }, -- cgit v1.2.3-1-g7c22 From 0954ef3e441da585ca0f801301ab7ea6e83e7cbf Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Wed, 9 Dec 2015 22:55:30 -0500 Subject: Dynamically resize the new card form if the title is too long --- client/components/cards/minicard.styl | 3 ++- client/components/lists/listBody.js | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'client/components') diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl index 1c27efff..47d160f4 100644 --- a/client/components/cards/minicard.styl +++ b/client/components/cards/minicard.styl @@ -133,5 +133,6 @@ margin: 0 padding: 0 max-height: 162px - min-height: 54px + min-height: 36px + margin-bottom: 20px overflow-y: auto diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 1fc84c82..c3a85614 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -57,6 +57,7 @@ BlazeComponent.extendComponent({ // We keep the form opened, empty it, and scroll to it. textarea.val('').focus(); + autosize.update(textarea); if (position === 'bottom') { this.scrollToBottom(); } @@ -180,7 +181,11 @@ BlazeComponent.extendComponent({ onRendered() { const editor = this; - this.$('textarea').escapeableTextComplete([ + const $textarea = this.$('textarea'); + + autosize($textarea); + + $textarea.escapeableTextComplete([ // User mentions { match: /\B@(\w*)$/, -- cgit v1.2.3-1-g7c22 From 2733c1d3a065dd4ce0a42ac6f6d8ad60ddeec364 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Thu, 10 Dec 2015 00:34:44 -0500 Subject: Add a button to move selected cards This is an alternative to drag and drop to move a set of selected cards. This feature was available at the list level until I deleted it in 5bdf91b, so it makes sense to add it back at the multi-selection level. --- client/components/sidebar/sidebarFilters.jade | 7 +++++++ client/components/sidebar/sidebarFilters.js | 8 ++++++++ 2 files changed, 15 insertions(+) (limited to 'client/components') diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 0e935e3f..2b326493 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -67,6 +67,9 @@ template(name="multiselectionSidebar") else if someSelectedElementHave 'member' _id i.fa.fa-ellipsis-h hr + a.sidebar-btn.js-move-selection + i.fa.fa-share + span {{_ 'move-selection'}} a.sidebar-btn.js-archive-selection i.fa.fa-archive span {{_ 'archive-selection'}} @@ -80,3 +83,7 @@ template(name="disambiguateMultiMemberPopup") p {{_ 'what-to-do'}} button.wide.js-unassign-member {{_ 'unassign-member'}} button.wide.js-assign-member {{_ 'assign-member'}} + +template(name="moveSelectionPopup") + +boardLists + diff --git a/client/components/sidebar/sidebarFilters.js b/client/components/sidebar/sidebarFilters.js index 50e76200..ba4e4df9 100644 --- a/client/components/sidebar/sidebarFilters.js +++ b/client/components/sidebar/sidebarFilters.js @@ -93,6 +93,7 @@ BlazeComponent.extendComponent({ return popup.call(this.currentData(), evt); } }, + 'click .js-move-selection': Popup.open('moveSelection'), 'click .js-archive-selection'() { mutateSelectedCards('archive'); EscapeActions.executeUpTo('multiselection'); @@ -122,3 +123,10 @@ Template.disambiguateMultiMemberPopup.events({ Popup.close(); }, }); + +Template.moveSelectionPopup.events({ + 'click .js-select-list'() { + mutateSelectedCards('move', this._id); + EscapeActions.executeUpTo('multiselection'); + }, +}); -- cgit v1.2.3-1-g7c22