From 55710835fe8879775b73c8bc921bac5febf552a2 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 7 Feb 2026 03:52:16 +0200 Subject: [PATCH] Fix No Add Card + etc. Thanks to mimZD and xet7 ! Fixes #6108 --- client/components/cards/cardDetails.jade | 3 ++- client/components/cards/checklists.js | 2 +- client/components/cards/minicard.css | 2 +- client/components/cards/minicard.jade | 3 ++- client/components/lists/list.css | 4 ++-- client/components/lists/listBody.jade | 7 +++++++ client/components/lists/listHeader.jade | 9 +++++++++ client/components/lists/listHeader.js | 9 +++++++++ client/components/main/dueCards.jade | 5 +++-- client/components/rules/actions/cardActions.jade | 3 ++- client/components/sidebar/sidebarFilters.jade | 3 ++- client/components/swimlanes/swimlaneHeader.jade | 5 ++++- client/components/swimlanes/swimlaneHeader.js | 1 + client/components/swimlanes/swimlanes.css | 3 ++- client/components/swimlanes/swimlanes.jade | 6 ++++++ 15 files changed, 53 insertions(+), 12 deletions(-) diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 0fc865435..8ac96dd16 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -925,7 +925,8 @@ template(name="cardAssigneesPopup") if userData.username | (#{userData.username}) if isCardAssignee - i.fa.fa-check if currentUser.isWorker + i.fa.fa-check + if currentUser.isWorker ul.pop-over-list.js-card-assignee-list li.item(class="{{#if currentUser.isCardAssignee}}active{{/if}}") a.name.js-select-assignee(href="#") diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 6762eab02..16fd74402 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -157,7 +157,7 @@ BlazeComponent.extendComponent({ textarea.focus(); }, - deleteItem() { + async deleteItem() { const checklist = this.currentData().checklist; const item = this.currentData().item; if (checklist && item && item._id) { diff --git a/client/components/cards/minicard.css b/client/components/cards/minicard.css index 8c8df682b..32dea839d 100644 --- a/client/components/cards/minicard.css +++ b/client/components/cards/minicard.css @@ -137,7 +137,7 @@ height: clamp(20px, 2.5vw, 28px); position: absolute; right: 0vw; - top: 6vh; + top: 4vh; display: none; z-index: 1; } diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index 468d14af2..2a1d4162d 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -46,7 +46,8 @@ template(name="minicard") span {{_ 'upload-failed'}} else if $eq status 'completed' .upload-progress-success - i.fa.fa-check span {{_ 'upload-completed'}} + i.fa.fa-check + span {{_ 'upload-completed'}} .minicard-title if $eq 'prefix-with-full-path' currentBoard.presentParentTask diff --git a/client/components/lists/list.css b/client/components/lists/list.css index fd548a9b6..1cfd6ca6f 100644 --- a/client/components/lists/list.css +++ b/client/components/lists/list.css @@ -198,7 +198,7 @@ body.list-resizing-active * { .list-header .list-header-plus-top { position: absolute !important; top: 5px !important; - right: 10px !important; + right: 30px !important; z-index: 15 !important; display: inline-block !important; padding: 4px !important; @@ -207,7 +207,7 @@ body.list-resizing-active * { .list-header .list-header-handle-desktop { position: absolute !important; top: 5px !important; - right: 40px !important; + right: 80px !important; z-index: 15 !important; display: inline-block !important; cursor: move !important; diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade index dccab05d0..3d23a49ce 100644 --- a/client/components/lists/listBody.jade +++ b/client/components/lists/listBody.jade @@ -25,6 +25,13 @@ template(name="listBody") +minicard(this) if (showSpinner (idOrNull ../../_id)) +spinnerList + if canSeeAddCard + +inlinedForm(autoclose=false position="bottom") + +addCardForm(listId=_id position="bottom") + else + a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}") + i.fa.fa-plus + | {{_ 'add-card'}} +inlinedForm(autoclose=false position="bottom") +addCardForm(listId=_id position="bottom") diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 34c0f31c5..2dee5749f 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -59,6 +59,9 @@ template(name="listHeader") unless currentUser.isCommentOnly unless currentUser.isReadOnly unless currentUser.isReadAssignedOnly + if canSeeAddCard + a.js-add-card.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}") + i.fa.fa-plus a.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") i.fa.fa-bars else @@ -84,6 +87,12 @@ template(name="listHeader") unless currentUser.isReadAssignedOnly //if isBoardAdmin // a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}") + if isTouchScreenOrShowDesktopDragHandles + a.list-header-handle-desktop.handle.js-list-handle(title="{{_ 'drag-list'}}") + i.fa.fa-arrows + if canSeeAddCard + a.js-add-card.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}") + i.fa.fa-plus a.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") i.fa.fa-bars diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 0b0205384..90e5a0b3f 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -123,6 +123,15 @@ BlazeComponent.extendComponent({ this.collapsed(!this.collapsed()); }, 'click .js-open-list-menu': Popup.open('listAction'), + 'click .js-add-card.list-header-plus-top'(event) { + const listDom = $(event.target).parents( + `#js-list-${this.currentData()._id}`, + )[0]; + const listComponent = BlazeComponent.getComponentForElement(listDom); + listComponent.openForm({ + position: 'top', + }); + }, 'click .js-unselect-list'() { Session.set('currentList', null); }, diff --git a/client/components/main/dueCards.jade b/client/components/main/dueCards.jade index 6d9b46e5e..8a972c441 100644 --- a/client/components/main/dueCards.jade +++ b/client/components/main/dueCards.jade @@ -52,7 +52,8 @@ template(name="dueCardsViewChangePopup") i.fa.fa-user | {{_ 'dueCardsViewChange-choice-me'}} if $eq Utils.dueCardsView "me" - i.fa.fa-check hr + i.fa.fa-check + hr li with "dueCardsViewChange-choice-all" a.js-due-cards-view-all @@ -62,4 +63,4 @@ template(name="dueCardsViewChangePopup") +viewer | {{_ 'dueCardsViewChange-choice-all-description' }} if $eq Utils.dueCardsView "all" - i.fa.fa-check \ No newline at end of file + i.fa.fa-check diff --git a/client/components/rules/actions/cardActions.jade b/client/components/rules/actions/cardActions.jade index b5c834469..aa31ca6da 100644 --- a/client/components/rules/actions/cardActions.jade +++ b/client/components/rules/actions/cardActions.jade @@ -84,4 +84,5 @@ template(name="setCardActionsColorPopup") .palette-colors: each colors span.card-label.palette-color.js-palette-color(class="card-details-{{color}}") if(isSelected color) - i.fa.fa-check button.primary.confirm.js-submit {{_ 'save'}} + i.fa.fa-check + button.primary.confirm.js-submit {{_ 'save'}} diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade index 069e759eb..a450c959a 100644 --- a/client/components/sidebar/sidebarFilters.jade +++ b/client/components/sidebar/sidebarFilters.jade @@ -57,7 +57,8 @@ template(name="filterSidebar") = profile.fullname | ({{ username }}) if Filter.members.isSelected _id - i.fa.fa-check hr + i.fa.fa-check + hr h3 i.fa.fa-user | {{_ 'filter-assignee-label'}} diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade index b7b6988b0..3f62749bc 100644 --- a/client/components/swimlanes/swimlaneHeader.jade +++ b/client/components/swimlanes/swimlaneHeader.jade @@ -35,6 +35,8 @@ template(name="swimlaneFixedHeader") i.fa.fa-caret-down a.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}") i.fa.fa-bars + a.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}") + i.fa.fa-plus if isTouchScreenOrShowDesktopDragHandles unless isTouchScreen a.swimlane-header-handle.handle.js-swimlane-header-handle @@ -114,7 +116,8 @@ template(name="setSwimlaneColorPopup") each colors span.card-label.palette-color.js-palette-color(class="card-details-{{color}}") if(isSelected color) - i.fa.fa-check // Buttons aligned left too + i.fa.fa-check + // Buttons aligned left too .flush-left button.primary.confirm.js-submit(style="margin-left:0") {{_ 'save'}} button.js-remove-color.negate.wide.right(style="margin-left:8px") {{_ 'unset-color'}} diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js index 0c57bd47e..08993dbf9 100644 --- a/client/components/swimlanes/swimlaneHeader.js +++ b/client/components/swimlanes/swimlaneHeader.js @@ -39,6 +39,7 @@ BlazeComponent.extendComponent({ this.collapsed(!this.collapsed()); }, 'click .js-open-swimlane-menu': Popup.open('swimlaneAction'), + 'click .js-open-add-swimlane-menu': Popup.open('swimlaneAdd'), submit: this.editTitle, }, ]; diff --git a/client/components/swimlanes/swimlanes.css b/client/components/swimlanes/swimlanes.css index 81e130c8a..4c35b3580 100644 --- a/client/components/swimlanes/swimlanes.css +++ b/client/components/swimlanes/swimlanes.css @@ -109,12 +109,13 @@ .swimlane .swimlane-header-wrap .swimlane-header-plus-icon { top: calc(50% + 6px); padding: 5px; + margin-left: 20px; font-size: 22px; color: #a6a6a6; } .swimlane .swimlane-header-wrap .swimlane-header-menu-icon { top: calc(50% + 6px); - padding: 5px; + padding-left: 5px; font-size: 22px; } .swimlane .swimlane-header-wrap .swimlane-header-handle { diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index beec47185..4f3ae4ed6 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -9,9 +9,15 @@ template(name="swimlane") if currentListIsInThisSwimlane _id +list(currentList) unless currentList + 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)