Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>tags/v28.0.0beta1
@@ -44,7 +44,8 @@ describe('Inline unread comments action display name tests', () => { | |||
expect(action).toBeInstanceOf(FileAction) | |||
expect(action.id).toBe('comments-unread') | |||
expect(action.displayName([file], view)).toBe('1 new comment') | |||
expect(action.displayName([file], view)).toBe('') | |||
expect(action.title!([file], view)).toBe('1 new comment') | |||
expect(action.iconSvgInline([], view)).toBe('<svg>SvgMock</svg>') | |||
expect(action.enabled!([file], view)).toBe(true) | |||
expect(action.inline!(file, view)).toBe(true) | |||
@@ -64,7 +65,8 @@ describe('Inline unread comments action display name tests', () => { | |||
}, | |||
}) | |||
expect(action.displayName([file], view)).toBe('2 new comments') | |||
expect(action.displayName([file], view)).toBe('') | |||
expect(action.title!([file], view)).toBe('2 new comments') | |||
}) | |||
}) | |||
@@ -19,15 +19,16 @@ | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
import { FileAction, Node, registerFileAction } from '@nextcloud/files' | |||
import { FileAction, Node } from '@nextcloud/files' | |||
import { translate as t, translatePlural as n } from '@nextcloud/l10n' | |||
import commentProcessingSvg from '@mdi/svg/svg/comment-processing.svg?raw' | |||
import CommentProcessingSvg from '@mdi/svg/svg/comment-processing.svg?raw' | |||
import logger from '../logger' | |||
export const action = new FileAction({ | |||
id: 'comments-unread', | |||
displayName(nodes: Node[]) { | |||
title(nodes: Node[]) { | |||
const unread = nodes[0].attributes['comments-unread'] as number | |||
if (unread >= 0) { | |||
return n('comments', '1 new comment', '{unread} new comments', unread, { unread }) | |||
@@ -35,7 +36,10 @@ export const action = new FileAction({ | |||
return t('comments', 'Comment') | |||
}, | |||
iconSvgInline: () => commentProcessingSvg, | |||
// Empty string when rendered inline | |||
displayName: () => '', | |||
iconSvgInline: () => CommentProcessingSvg, | |||
enabled(nodes: Node[]) { | |||
const unread = nodes[0].attributes['comments-unread'] as number|undefined | |||
@@ -57,5 +61,3 @@ export const action = new FileAction({ | |||
order: -140, | |||
}) | |||
registerFileAction(action) |
@@ -130,12 +130,13 @@ | |||
:class="'files-list__row-action-' + action.id" | |||
:close-after-click="true" | |||
:data-cy-files-list-row-action="action.id" | |||
:title="action.title?.([source], currentView)" | |||
@click="onActionClick(action)"> | |||
<template #icon> | |||
<NcLoadingIcon v-if="loading === action.id" :size="18" /> | |||
<CustomSvgIconRender v-else :svg="action.iconSvgInline([source], currentView)" /> | |||
</template> | |||
{{ action.displayName([source], currentView) }} | |||
{{ actionDisplayName(action) }} | |||
</NcActionButton> | |||
</NcActions> | |||
</td> | |||
@@ -180,7 +181,7 @@ import { debounce } from 'debounce' | |||
import { emit } from '@nextcloud/event-bus' | |||
import { extname } from 'path' | |||
import { generateUrl } from '@nextcloud/router' | |||
import { getFileActions, DefaultType, FileType, formatFileSize, Permission, Folder, File, Node } from '@nextcloud/files' | |||
import { getFileActions, DefaultType, FileType, formatFileSize, Permission, Folder, File, Node, FileAction } from '@nextcloud/files' | |||
import { Type as ShareType } from '@nextcloud/sharing' | |||
import { showError, showSuccess } from '@nextcloud/dialogs' | |||
import { translate } from '@nextcloud/l10n' | |||
@@ -918,6 +919,16 @@ export default Vue.extend({ | |||
return document.querySelector('.app-content > .files-list') | |||
}, | |||
actionDisplayName(action: FileAction) { | |||
if (this.filesListWidth < 768 && action.inline && typeof action.title === 'function') { | |||
// if an inline action is rendered in the menu for | |||
// lack of space we use the title first if defined | |||
const title = action.title([this.source], this.currentView) | |||
if (title) return title | |||
} | |||
return action.displayName([this.source], this.currentView) | |||
}, | |||
t: translate, | |||
formatFileSize, | |||
}, |
@@ -47,17 +47,28 @@ export const action = new FileAction({ | |||
displayName(nodes: Node[]) { | |||
const node = nodes[0] | |||
const shareTypes = Object.values(node?.attributes?.['share-types'] || {}).flat() as number[] | |||
if (shareTypes.length > 0) { | |||
const ownerId = node?.attributes?.['owner-id'] | |||
if (shareTypes.length > 0 | |||
|| (ownerId && ownerId !== getCurrentUser()?.uid)) { | |||
return t('files_sharing', 'Shared') | |||
} | |||
return '' | |||
}, | |||
title(nodes: Node[]) { | |||
const node = nodes[0] | |||
const ownerId = node?.attributes?.['owner-id'] | |||
const ownerDisplayName = node?.attributes?.['owner-display-name'] | |||
if (ownerId && ownerId !== getCurrentUser()?.uid) { | |||
return t('files_sharing', 'Shared') | |||
return t('files_sharing', 'Shared by {ownerDisplayName}', { ownerDisplayName }) | |||
} | |||
return '' | |||
}, | |||
iconSvgInline(nodes: Node[]) { | |||
const node = nodes[0] | |||
const shareTypes = Object.values(node?.attributes?.['share-types'] || {}).flat() as number[] |
@@ -1,5 +1,3 @@ | |||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ | |||
/** | |||
* @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
@@ -23,28 +21,6 @@ | |||
* | |||
*/ | |||
/** | |||
* @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com> | |||
* | |||
* @author Lucas Azevedo <lhs_azevedo@hotmail.com> | |||
* | |||
* @license AGPL-3.0-or-later | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
/** | |||
* Copyright (c) 2016 Vincent Petry <pvince81@owncloud.com> | |||
* |
@@ -0,0 +1,45 @@ | |||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ | |||
/** | |||
* @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com> | |||
* | |||
* @author John Molakvoæ <skjnldsv@protonmail.com> | |||
* | |||
* @license AGPL-3.0-or-later | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
/** | |||
* @copyright Copyright (c) 2023 Lucas Azevedo <lhs_azevedo@hotmail.com> | |||
* | |||
* @author Lucas Azevedo <lhs_azevedo@hotmail.com> | |||
* | |||
* @license AGPL-3.0-or-later | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ |
@@ -1,5 +1,27 @@ | |||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ | |||
/** | |||
* @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev> | |||
* | |||
* @author John Molakvoæ <skjnldsv@protonmail.com> | |||
* | |||
* @license AGPL-3.0-or-later | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
/** | |||
* @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com> | |||
* |
@@ -0,0 +1 @@ | |||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ |
@@ -1,27 +1,5 @@ | |||
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ | |||
/** | |||
* @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com> | |||
* | |||
* @author John Molakvoæ <skjnldsv@protonmail.com> | |||
* | |||
* @license AGPL-3.0-or-later | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
/** | |||
* @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com> | |||
* |
@@ -19,7 +19,7 @@ | |||
"@nextcloud/capabilities": "^1.0.4", | |||
"@nextcloud/dialogs": "^5.0.0-beta.2", | |||
"@nextcloud/event-bus": "^3.1.0", | |||
"@nextcloud/files": "^3.0.0-beta.21", | |||
"@nextcloud/files": "^3.0.0-beta.22", | |||
"@nextcloud/initial-state": "^2.0.0", | |||
"@nextcloud/l10n": "^2.1.0", | |||
"@nextcloud/logger": "^2.5.0", | |||
@@ -3686,16 +3686,16 @@ | |||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | |||
}, | |||
"node_modules/@nextcloud/files": { | |||
"version": "3.0.0-beta.21", | |||
"resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.0.0-beta.21.tgz", | |||
"integrity": "sha512-haydsUhF3t7DTUcC48lveztXZA1KMAkn+DRZUwSWu0S0VF4tTjn/+ZM7pqnNBIqOkPMTW9azAU8h6mmENpvd9w==", | |||
"version": "3.0.0-beta.22", | |||
"resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.0.0-beta.22.tgz", | |||
"integrity": "sha512-Y/F3d3sigGJf/2HOTy8PLMgyQnVtMsQVUM+ul7GXgfdMPEVOpQViU9t6K37UjDAVu5v4CvKA++BVKt09KSGxwA==", | |||
"dependencies": { | |||
"@nextcloud/auth": "^2.1.0", | |||
"@nextcloud/l10n": "^2.2.0", | |||
"@nextcloud/logger": "^2.5.0", | |||
"@nextcloud/router": "^2.1.2", | |||
"is-svg": "^5.0.0", | |||
"webdav": "^5.2.3" | |||
"webdav": "^5.3.0" | |||
}, | |||
"engines": { | |||
"node": "^20.0.0", |
@@ -45,7 +45,7 @@ | |||
"@nextcloud/capabilities": "^1.0.4", | |||
"@nextcloud/dialogs": "^5.0.0-beta.2", | |||
"@nextcloud/event-bus": "^3.1.0", | |||
"@nextcloud/files": "^3.0.0-beta.21", | |||
"@nextcloud/files": "^3.0.0-beta.22", | |||
"@nextcloud/initial-state": "^2.0.0", | |||
"@nextcloud/l10n": "^2.1.0", | |||
"@nextcloud/logger": "^2.5.0", |