From a9c3220e9e151127598e73bff2f72f20281464ca Mon Sep 17 00:00:00 2001 From: samin-z Date: Mon, 16 Feb 2026 15:03:45 +0100 Subject: [PATCH 1/6] show creator and created date in respective card Signed-off-by: samin-z --- src/components/cards/CardItem.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/components/cards/CardItem.vue b/src/components/cards/CardItem.vue index 92f2134c9d..b347603e1e 100644 --- a/src/components/cards/CardItem.vue +++ b/src/components/cards/CardItem.vue @@ -22,6 +22,9 @@

{{ displayTitle }}

+
+ Created by {{ card.owner.displayname }} on {{ formattedCreatedAt }} +

state.compactMode, showArchived: state => state.showArchived, From 1284be29ed958d3805c08c97619f91d6791485c6 Mon Sep 17 00:00:00 2001 From: samin-z Date: Mon, 16 Feb 2026 15:20:39 +0100 Subject: [PATCH 2/6] lint fix Signed-off-by: samin-z --- src/components/cards/CardItem.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/cards/CardItem.vue b/src/components/cards/CardItem.vue index b347603e1e..ff9479c10f 100644 --- a/src/components/cards/CardItem.vue +++ b/src/components/cards/CardItem.vue @@ -129,12 +129,12 @@ export default { editingTitle: TITLE_EDITING_STATE.OFF, } }, - computed: { - formattedCreatedAt() { - if (!this.card.createdAt) return '' - const date = new Date(this.card.createdAt * 1000) - return date.toLocaleDateString() + ' ' + date.toLocaleTimeString() - }, + computed: { + formattedCreatedAt() { + if (!this.card.createdAt) return '' + const date = new Date(this.card.createdAt * 1000) + return date.toLocaleDateString() + ' ' + date.toLocaleTimeString() + }, ...mapState({ compactMode: state => state.compactMode, showArchived: state => state.showArchived, From 2508a4f28df2a6dd521c2e7b8de97135d13bd2fa Mon Sep 17 00:00:00 2001 From: samin-z Date: Wed, 25 Mar 2026 15:07:59 +0100 Subject: [PATCH 3/6] show card owner in card details Signed-off-by: samin-z --- src/components/card/CardSidebar.vue | 15 +++++++++++++-- src/components/cards/CardItem.vue | 10 +--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/components/card/CardSidebar.vue b/src/components/card/CardSidebar.vue index 078996eafd..fa5d8798c9 100644 --- a/src/components/card/CardSidebar.vue +++ b/src/components/card/CardSidebar.vue @@ -153,11 +153,22 @@ export default { currentCard() { return this.$store.getters.cardById(this.id) }, + cardOwnerDisplayName() { + return this.currentCard.owner?.displayname ?? this.currentCard.owner?.uid ?? this.currentCard.owner ?? null + }, subtitle() { - return t('deck', 'Modified') + ': ' + this.relativeDate(this.currentCard.lastModified * 1000) + ' ⸱ ' + t('deck', 'Created') + ': ' + this.relativeDate(this.currentCard.createdAt * 1000) + let subtitle = t('deck', 'Modified') + ': ' + this.relativeDate(this.currentCard.lastModified * 1000) + ' ⸱ ' + t('deck', 'Created') + ': ' + this.relativeDate(this.currentCard.createdAt * 1000) + if (this.cardOwnerDisplayName) { + subtitle += ' ⸱ ' + t('deck', 'by') + ': ' + this.cardOwnerDisplayName + } + return subtitle }, subtitleTooltip() { - return t('deck', 'Modified') + ': ' + this.formatDate(this.currentCard.lastModified) + '\n' + t('deck', 'Created') + ': ' + this.formatDate(this.currentCard.createdAt) + let subtitleTooltip = t('deck', 'Modified') + ': ' + this.formatDate(this.currentCard.lastModified) + '\n' + t('deck', 'Created') + ': ' + this.formatDate(this.currentCard.createdAt) + if (this.cardOwnerDisplayName) { + subtitleTooltip += '\n' + t('deck', 'by') + ': ' + this.cardOwnerDisplayName + } + return subtitleTooltip }, cardDetailsInModal: { get() { diff --git a/src/components/cards/CardItem.vue b/src/components/cards/CardItem.vue index ff9479c10f..92f2134c9d 100644 --- a/src/components/cards/CardItem.vue +++ b/src/components/cards/CardItem.vue @@ -22,9 +22,6 @@

{{ displayTitle }}

-
- Created by {{ card.owner.displayname }} on {{ formattedCreatedAt }} -

state.compactMode, showArchived: state => state.showArchived, From ffb1fd7d9f2719c84bce113c2583029c7bf88cd9 Mon Sep 17 00:00:00 2001 From: samin-z Date: Wed, 25 Mar 2026 15:09:45 +0100 Subject: [PATCH 4/6] owner should not get updated when updating card Signed-off-by: samin-z --- lib/Service/CardService.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Service/CardService.php b/lib/Service/CardService.php index 20fb81fe73..aa09178d85 100644 --- a/lib/Service/CardService.php +++ b/lib/Service/CardService.php @@ -284,7 +284,6 @@ public function update(int $id, string $title, int $stackId, string $type, strin $card->setStackId($stackId); $card->setType($type); $card->setOrder($order); - $card->setOwner($owner); $card->setDuedate($duedate ? new \DateTime($duedate) : null); $card->setStartdate($startdate ? new \DateTime($startdate) : null); $resetDuedateNotification = false; From 75c05890062717fff9914787084b1c1458e8c377 Mon Sep 17 00:00:00 2001 From: samin-z Date: Thu, 2 Apr 2026 17:18:06 +0200 Subject: [PATCH 5/6] apply correct format Signed-off-by: samin-z --- src/components/card/CardSidebar.vue | 40 +++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/components/card/CardSidebar.vue b/src/components/card/CardSidebar.vue index fa5d8798c9..f901f92a88 100644 --- a/src/components/card/CardSidebar.vue +++ b/src/components/card/CardSidebar.vue @@ -157,18 +157,10 @@ export default { return this.currentCard.owner?.displayname ?? this.currentCard.owner?.uid ?? this.currentCard.owner ?? null }, subtitle() { - let subtitle = t('deck', 'Modified') + ': ' + this.relativeDate(this.currentCard.lastModified * 1000) + ' ⸱ ' + t('deck', 'Created') + ': ' + this.relativeDate(this.currentCard.createdAt * 1000) - if (this.cardOwnerDisplayName) { - subtitle += ' ⸱ ' + t('deck', 'by') + ': ' + this.cardOwnerDisplayName - } - return subtitle + return this.buildSubtitle() }, subtitleTooltip() { - let subtitleTooltip = t('deck', 'Modified') + ': ' + this.formatDate(this.currentCard.lastModified) + '\n' + t('deck', 'Created') + ': ' + this.formatDate(this.currentCard.createdAt) - if (this.cardOwnerDisplayName) { - subtitleTooltip += '\n' + t('deck', 'by') + ': ' + this.cardOwnerDisplayName - } - return subtitleTooltip + return this.buildSubtitleTooltip() }, cardDetailsInModal: { get() { @@ -201,6 +193,34 @@ export default { }, }, methods: { + buildSubtitle() { + const modifiedDate = this.relativeDate(this.currentCard.lastModified * 1000) + const createdDate = this.relativeDate(this.currentCard.createdAt * 1000) + const owner = this.cardOwnerDisplayName + const cardMeta = { + generic: t('deck', '{modified}: {modifiedDate} ⸱ {created}: {createdDate}', + { modified: t('deck', 'Modified'), modifiedDate, created: t('deck', 'Created'), createdDate }, + undefined, { escape: false }), + withOwner: t('deck', '{modified}: {modifiedDate} ⸱ {created}: {createdDate} ⸱ {by}: {owner}', + { modified: t('deck', 'Modified'), modifiedDate, created: t('deck', 'Created'), createdDate, by: t('deck', 'by'), owner }, + undefined, { escape: false }), + } + return owner ? cardMeta.withOwner : cardMeta.generic + }, + buildSubtitleTooltip() { + const modifiedDate = this.formatDate(this.currentCard.lastModified) + const createdDate = this.formatDate(this.currentCard.createdAt) + const owner = this.cardOwnerDisplayName + const cardMeta = { + generic: t('deck', '{modified}: {modifiedDate}\n{created}: {createdDate}', + { modified: t('deck', 'Modified'), modifiedDate, created: t('deck', 'Created'), createdDate }, + undefined, { escape: false }), + withOwner: t('deck', '{modified}: {modifiedDate}\n{created}: {createdDate}\n{by}: {owner}', + { modified: t('deck', 'Modified'), modifiedDate, created: t('deck', 'Created'), createdDate, by: t('deck', 'by'), owner }, + undefined, { escape: false }), + } + return owner ? cardMeta.withOwner : cardMeta.generic + }, focusHeader() { this.$nextTick(() => { this.$refs?.cardSidebar.$el.querySelector('.app-sidebar-header__mainname')?.focus() From 4419ca08f93fb0d190303b6cdbcdf8049ab40441 Mon Sep 17 00:00:00 2001 From: samin-z Date: Tue, 14 Apr 2026 17:12:56 +0200 Subject: [PATCH 6/6] use NcUserBubble Signed-off-by: samin-z --- src/components/card/CardSidebar.vue | 59 +++++++++++++---------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/src/components/card/CardSidebar.vue b/src/components/card/CardSidebar.vue index f901f92a88..346aa6cb97 100644 --- a/src/components/card/CardSidebar.vue +++ b/src/components/card/CardSidebar.vue @@ -8,7 +8,6 @@ ref="cardSidebar" :active="tabId" :name="displayTitle" - :subname="subtitle" :subtitle="subtitleTooltip" :name-editable.sync="isEditingTitle" @update:name="(value) => titleEditing = value" @@ -17,6 +16,13 @@ @submit-name="handleSubmitTitle" @opened="focusHeader" @close="closeSidebar"> +