diff options
Diffstat (limited to 'apps/files')
-rw-r--r-- | apps/files/l10n/it.js | 7 | ||||
-rw-r--r-- | apps/files/l10n/it.json | 7 | ||||
-rw-r--r-- | apps/files/src/newMenu/newFolder.ts | 5 | ||||
-rw-r--r-- | apps/files/src/views/favorites.spec.ts | 26 | ||||
-rw-r--r-- | apps/files/src/views/favorites.ts | 12 |
5 files changed, 40 insertions, 17 deletions
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 39787e39664..f22d1227b9f 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -82,7 +82,7 @@ OC.L10N.register( "Current directory path" : "Percorso della cartella corrente", "Your have used your space quota and cannot upload files anymore" : "Hai esaurito la tua quota di spazio e non puoi più caricare file", "You do not have permission to upload or create files here." : "Non hai l'autorizzazione per caricare o creare file qui.", - "Drag and drop files here to upload" : "Trascina i file qui per caricarli", + "Drag and drop files here to upload" : "Trascina e rilascia i file qui per caricarli", "Favorite" : "Preferito", "Back" : "Indietro", "Toggle selection for file \"{displayName}\"" : "Attiva/disattiva la selezione per il file \"{displayName}\"", @@ -129,6 +129,7 @@ OC.L10N.register( "Search globally by filename …" : "Cerca globalmente per nome file…", "Search here by filename …" : "Cerca qui per nome file…", "Search scope options" : "Opzioni nell'ambito di ricerca", + "Filter and search from this location" : "Filtra e cerca da questa posizione", "Search globally" : "Cerca globalmente", "{usedQuotaByte} used" : "{usedQuotaByte} usato", "{used} of {quota} used" : "{used} di {quota} utilizzati", @@ -141,6 +142,7 @@ OC.L10N.register( "Create new folder" : "Crea una nuova cartella", "This name is already in use." : "Questo nome è già utilizzato.", "Create" : "Crea", + "Files starting with a dot are hidden by default" : "I file che iniziano con un punto sono nascosti per impostazione predefinita", "Fill template fields" : "Compila i campi del modello", "Submitting fields …" : "Invio dei campi …", "Submit" : "Invia", @@ -212,6 +214,7 @@ OC.L10N.register( "Warnings" : "Avvertenze", "Prevent warning dialogs from open or reenable them." : "Impedire l'apertura delle finestre di dialogo di avviso o riattivarle.", "Show a warning dialog when changing a file extension." : "Mostra una finestra di dialogo di avviso quando si modifica l'estensione di un file.", + "Show a warning dialog when deleting files." : "Mostra un dialogo di avviso quando si cancellano dei file.", "Keyboard shortcuts" : "Scorciatoie da tastiera", "Speed up your Files experience with these quick shortcuts." : "Velocizza la tua esperienza con i File con queste rapide scorciatoie.", "Open the actions menu for a file" : "Aprire il menu delle azioni per un file", @@ -330,7 +333,7 @@ OC.L10N.register( "New template folder" : "Nuova cartella dei modelli", "In folder" : "Nella cartella", "Search in folder: {folder}" : "Cerca nella cartella: {folder}", - "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file eliminati", + "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file depositati", "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Il tuo browser non supporta l'API del file system. Le directory non verranno caricate", "No files to upload" : "Nessun file da caricare", "Unable to create the directory {directory}" : "Impossibile creare la directory {directory}", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 40edb4b3f9a..ced369a54d6 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -80,7 +80,7 @@ "Current directory path" : "Percorso della cartella corrente", "Your have used your space quota and cannot upload files anymore" : "Hai esaurito la tua quota di spazio e non puoi più caricare file", "You do not have permission to upload or create files here." : "Non hai l'autorizzazione per caricare o creare file qui.", - "Drag and drop files here to upload" : "Trascina i file qui per caricarli", + "Drag and drop files here to upload" : "Trascina e rilascia i file qui per caricarli", "Favorite" : "Preferito", "Back" : "Indietro", "Toggle selection for file \"{displayName}\"" : "Attiva/disattiva la selezione per il file \"{displayName}\"", @@ -127,6 +127,7 @@ "Search globally by filename …" : "Cerca globalmente per nome file…", "Search here by filename …" : "Cerca qui per nome file…", "Search scope options" : "Opzioni nell'ambito di ricerca", + "Filter and search from this location" : "Filtra e cerca da questa posizione", "Search globally" : "Cerca globalmente", "{usedQuotaByte} used" : "{usedQuotaByte} usato", "{used} of {quota} used" : "{used} di {quota} utilizzati", @@ -139,6 +140,7 @@ "Create new folder" : "Crea una nuova cartella", "This name is already in use." : "Questo nome è già utilizzato.", "Create" : "Crea", + "Files starting with a dot are hidden by default" : "I file che iniziano con un punto sono nascosti per impostazione predefinita", "Fill template fields" : "Compila i campi del modello", "Submitting fields …" : "Invio dei campi …", "Submit" : "Invia", @@ -210,6 +212,7 @@ "Warnings" : "Avvertenze", "Prevent warning dialogs from open or reenable them." : "Impedire l'apertura delle finestre di dialogo di avviso o riattivarle.", "Show a warning dialog when changing a file extension." : "Mostra una finestra di dialogo di avviso quando si modifica l'estensione di un file.", + "Show a warning dialog when deleting files." : "Mostra un dialogo di avviso quando si cancellano dei file.", "Keyboard shortcuts" : "Scorciatoie da tastiera", "Speed up your Files experience with these quick shortcuts." : "Velocizza la tua esperienza con i File con queste rapide scorciatoie.", "Open the actions menu for a file" : "Aprire il menu delle azioni per un file", @@ -328,7 +331,7 @@ "New template folder" : "Nuova cartella dei modelli", "In folder" : "Nella cartella", "Search in folder: {folder}" : "Cerca nella cartella: {folder}", - "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file eliminati", + "One of the dropped files could not be processed" : "Impossibile elaborare uno dei file depositati", "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Il tuo browser non supporta l'API del file system. Le directory non verranno caricate", "No files to upload" : "Nessun file da caricare", "Unable to create the directory {directory}" : "Impossibile creare la directory {directory}", diff --git a/apps/files/src/newMenu/newFolder.ts b/apps/files/src/newMenu/newFolder.ts index 9a8badb4eb7..f2d04fce3c7 100644 --- a/apps/files/src/newMenu/newFolder.ts +++ b/apps/files/src/newMenu/newFolder.ts @@ -43,8 +43,11 @@ export const entry = { id: 'newFolder', displayName: t('files', 'New folder'), enabled: (context: Folder) => Boolean(context.permissions & Permission.CREATE) && Boolean(context.permissions & Permission.READ), - iconSvgInline: FolderPlusSvg, + + // Make the svg icon color match the primary element color + iconSvgInline: FolderPlusSvg.replace(/viewBox/gi, 'style="color: var(--color-primary-element)" viewBox'), order: 0, + async handler(context: Folder, content: Node[]) { const name = await newNodeName(t('files', 'New folder'), content) if (name === null) { diff --git a/apps/files/src/views/favorites.spec.ts b/apps/files/src/views/favorites.spec.ts index 64c3df0500a..e73279f2b31 100644 --- a/apps/files/src/views/favorites.spec.ts +++ b/apps/files/src/views/favorites.spec.ts @@ -7,6 +7,7 @@ import type { Folder as CFolder, Navigation } from '@nextcloud/files' import * as filesUtils from '@nextcloud/files' +import * as filesDavUtils from '@nextcloud/files/dav' import { CancelablePromise } from 'cancelable-promise' import { basename } from 'path' import { beforeEach, describe, expect, test, vi } from 'vitest' @@ -43,7 +44,7 @@ describe('Favorites view definition', () => { test('Default empty favorite view', async () => { vi.spyOn(eventBus, 'subscribe') - vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([])) + vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([])) vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] })) await registerFavoritesView() @@ -89,8 +90,14 @@ describe('Favorites view definition', () => { source: 'http://nextcloud.local/remote.php/dav/files/admin/foo/bar', owner: 'admin', }), + new Folder({ + id: 4, + root: '/files/admin', + source: 'http://nextcloud.local/remote.php/dav/files/admin/foo/bar/yabadaba', + owner: 'admin', + }), ] - vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve(favoriteFolders)) + vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve(favoriteFolders)) vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] })) await registerFavoritesView() @@ -98,9 +105,12 @@ describe('Favorites view definition', () => { const favoriteFoldersViews = Navigation.views.filter(view => view.parent === 'favorites') // one main view and 3 children - expect(Navigation.views.length).toBe(4) + expect(Navigation.views.length).toBe(5) expect(favoritesView).toBeDefined() - expect(favoriteFoldersViews.length).toBe(3) + expect(favoriteFoldersViews.length).toBe(4) + + // Sorted by basename: bar, bar, foo + const expectedOrder = [2, 0, 1, 3] favoriteFolders.forEach((folder, index) => { const favoriteView = favoriteFoldersViews[index] @@ -108,7 +118,7 @@ describe('Favorites view definition', () => { expect(favoriteView?.id).toBeDefined() expect(favoriteView?.name).toBe(basename(folder.path)) expect(favoriteView?.icon).toMatch(/<svg.+<\/svg>/) - expect(favoriteView?.order).toBe(index) + expect(favoriteView?.order).toBe(expectedOrder[index]) expect(favoriteView?.params).toStrictEqual({ dir: folder.path, fileid: String(folder.fileid), @@ -132,7 +142,7 @@ describe('Dynamic update of favorite folders', () => { test('Add a favorite folder creates a new entry in the navigation', async () => { vi.spyOn(eventBus, 'emit') - vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([])) + vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([])) vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] })) await registerFavoritesView() @@ -160,7 +170,7 @@ describe('Dynamic update of favorite folders', () => { test('Remove a favorite folder remove the entry from the navigation column', async () => { vi.spyOn(eventBus, 'emit') - vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([ + vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([ new Folder({ id: 42, root: '/files/admin', @@ -211,7 +221,7 @@ describe('Dynamic update of favorite folders', () => { test('Renaming a favorite folder updates the navigation', async () => { vi.spyOn(eventBus, 'emit') - vi.spyOn(filesUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([])) + vi.spyOn(filesDavUtils, 'getFavoriteNodes').mockReturnValue(CancelablePromise.resolve([])) vi.spyOn(favoritesService, 'getContents').mockReturnValue(CancelablePromise.resolve({ folder: {} as CFolder, contents: [] })) await registerFavoritesView() diff --git a/apps/files/src/views/favorites.ts b/apps/files/src/views/favorites.ts index cadc7704e14..45cd96510a2 100644 --- a/apps/files/src/views/favorites.ts +++ b/apps/files/src/views/favorites.ts @@ -4,13 +4,15 @@ */ import type { Folder, Node } from '@nextcloud/files' +import { FileType, View, getNavigation } from '@nextcloud/files' +import { getCanonicalLocale, getLanguage, t } from '@nextcloud/l10n' +import { getFavoriteNodes } from '@nextcloud/files/dav' import { subscribe } from '@nextcloud/event-bus' -import { FileType, View, getFavoriteNodes, getNavigation } from '@nextcloud/files' -import { getLanguage, translate as t } from '@nextcloud/l10n' -import { client } from '../services/WebdavClient.ts' + import FolderSvg from '@mdi/svg/svg/folder.svg?raw' import StarSvg from '@mdi/svg/svg/star.svg?raw' +import { client } from '../services/WebdavClient.ts' import { getContents } from '../services/Favorites' import { hashCode } from '../utils/hashUtils' import logger from '../logger' @@ -118,7 +120,7 @@ export const registerFavoritesView = async () => { * update the order property of the existing views */ const updateAndSortViews = function() { - favoriteFolders.sort((a, b) => a.path.localeCompare(b.path, getLanguage(), { ignorePunctuation: true })) + favoriteFolders.sort((a, b) => a.basename.localeCompare(b.basename, [getLanguage(), getCanonicalLocale()], { ignorePunctuation: true, numeric: true, usage: 'sort' })) favoriteFolders.forEach((folder, index) => { const view = favoriteFoldersViews.find((view) => view.id === generateIdFromPath(folder.path)) if (view) { @@ -176,4 +178,6 @@ export const registerFavoritesView = async () => { removePathFromFavorites(favoriteFolder.path) addToFavorites(node) } + + updateAndSortViews() } |