From 33545f698d1c130d9dff2a2a934c38ea40ec5456 Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Thu, 22 Jan 2026 12:21:24 +0545 Subject: [PATCH 1/9] chore: bump minimum NC version to 33 Signed-off-by: Saw-jan --- appinfo/info.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index ebc07fae0..71e1da64f 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -49,7 +49,7 @@ For more information on how to set up and use the OpenProject application, pleas https://github.com/nextcloud/integration_openproject/raw/master/img/screenshot1.png https://github.com/nextcloud/integration_openproject/raw/master/img/screenshot2.png - + OCA\OpenProject\BackgroundJob\RemoveExpiredDirectUploadTokens @@ -60,4 +60,4 @@ For more information on how to set up and use the OpenProject application, pleas OCA\OpenProject\Settings\Personal OCA\OpenProject\Settings\PersonalSection - + \ No newline at end of file From f7fcb0e41d493b8d6b8c9a5d8f9db600e02ca223 Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Thu, 22 Jan 2026 12:31:00 +0545 Subject: [PATCH 2/9] fix(file-actions): use object destructuring as per the new files API Signed-off-by: Saw-jan --- package-lock.json | 662 +++++++++++++++++++++++---------- package.json | 2 +- src/filesPlugin/filesPlugin.js | 12 +- 3 files changed, 465 insertions(+), 211 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06e02e75b..5b3179439 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "integration_openproject", - "version": "2.10.1", + "version": "2.11.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "integration_openproject", - "version": "2.10.1", + "version": "2.11.0", "license": "AGPL-3.0-or-later", "dependencies": { "@mdi/svg": "^7.3.67", "@nextcloud/auth": "^2.3.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/dialogs": "^5.3.4", - "@nextcloud/files": "^3.5.1", + "@nextcloud/files": "^4.0.0-rc.0", "@nextcloud/initial-state": "^2.2.0", "@nextcloud/l10n": "^2.2.0", "@nextcloud/moment": "^1.3.1", @@ -2025,6 +2025,16 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@file-type/xml": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@file-type/xml/-/xml-0.4.4.tgz", + "integrity": "sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==", + "license": "MIT", + "dependencies": { + "sax": "^1.4.1", + "strtok3": "^10.3.4" + } + }, "node_modules/@floating-ui/core": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz", @@ -3033,15 +3043,24 @@ } }, "node_modules/@nextcloud/capabilities": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.0.tgz", - "integrity": "sha512-L1NQtOfHWzkfj0Ple1MEJt6HmOHWAi3y4qs+OnwSWexqJT0DtXTVPyRxi7ADyITwRxS5H9R/HMl6USAj4Nr1nQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.1.tgz", + "integrity": "sha512-snZ0/910zzwN6PDsIlx2Uvktr1S5x0ClhDUnfPlCj7ntNvECzuVHNY5wzby22LIkc+9ZjaDKtCwuCt2ye+9p/Q==", + "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/initial-state": "^2.1.0" + "@nextcloud/initial-state": "^3.0.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/capabilities/node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/dialogs": { @@ -3075,22 +3094,67 @@ "vue": "^2.7.16" } }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/files/node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/files/node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" + } + }, "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/l10n": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.1.0.tgz", - "integrity": "sha512-unciqr8QSJ29vFBw9S1bquyoj1PTWHszNL8tcUNuxUAYpq0hX+8o7rpB5gimELA4sj4m9+VCJwgLtBZd1Yj0lg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", + "license": "GPL-3.0-or-later", "dependencies": { "@nextcloud/router": "^3.0.1", - "@nextcloud/typings": "^1.8.0", - "@types/dompurify": "^3.0.5", + "@nextcloud/typings": "^1.9.1", "@types/escape-html": "^1.0.4", - "dompurify": "^3.1.2", - "escape-html": "^1.0.3", - "node-gettext": "^3.0.0" + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20 || ^22 || ^24" } }, "node_modules/@nextcloud/dialogs/node_modules/@vueuse/core": { @@ -3261,42 +3325,88 @@ } }, "node_modules/@nextcloud/files": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.5.1.tgz", - "integrity": "sha512-GkVWUgkBSVt27Carmp/DbnDiqHq03w3VQWt8xszacp/IQSB9G+8/KCvi8zxldac2q7lQ8NpHlB/Bqy8o+OOc0A==", + "version": "4.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-4.0.0-rc.0.tgz", + "integrity": "sha512-zg/TQH4oQQYlntzkcWokjKIkTX39maiYXceDYrE3OnzCYZv0IKmOH3+pQer58/Z9QfsU8huTnzHblhzVNsJvAA==", + "license": "AGPL-3.0-or-later", "dependencies": { - "@nextcloud/auth": "^2.3.0", - "@nextcloud/l10n": "^3.1.0", - "@nextcloud/logger": "^3.0.2", - "@nextcloud/paths": "^2.1.0", - "@nextcloud/router": "^3.0.1", - "@nextcloud/sharing": "^0.2.1", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.2", + "webdav": "^5.8.0" + }, + "engines": { + "node": "^24.0.0" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "license": "AGPL-3.0-or-later", + "optional": true, + "dependencies": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", "cancelable-promise": "^4.3.1", - "is-svg": "^5.0.1", + "is-svg": "^6.1.0", "typescript-event-target": "^1.1.1", - "webdav": "^5.6.0" + "webdav": "^5.8.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/files/node_modules/@nextcloud/l10n": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.1.0.tgz", - "integrity": "sha512-unciqr8QSJ29vFBw9S1bquyoj1PTWHszNL8tcUNuxUAYpq0hX+8o7rpB5gimELA4sj4m9+VCJwgLtBZd1Yj0lg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", + "license": "GPL-3.0-or-later", "dependencies": { "@nextcloud/router": "^3.0.1", - "@nextcloud/typings": "^1.8.0", - "@types/dompurify": "^3.0.5", + "@nextcloud/typings": "^1.9.1", "@types/escape-html": "^1.0.4", - "dompurify": "^3.1.2", - "escape-html": "^1.0.3", - "node-gettext": "^3.0.0" + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" } }, "node_modules/@nextcloud/initial-state": { @@ -3338,15 +3448,15 @@ } }, "node_modules/@nextcloud/logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.2.tgz", - "integrity": "sha512-wByt0R0/6QC44RBpaJr1MWghjjOxk/pRbACHo/ZWWKht1qYbJRHB4GtEi+35KEIHY07ZpqxiDk6dIRuN7sXYWQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", + "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", + "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/auth": "^2.3.0" + "@nextcloud/auth": "^2.5.3" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/moment": { @@ -3364,23 +3474,24 @@ } }, "node_modules/@nextcloud/paths": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-2.1.0.tgz", - "integrity": "sha512-8wX0gqwez0bTuAS8A0OEiqbbp0ZsqLr07zSErmS6OYhh9KZcSt/kO6lQV5tnrFqIqJVsxwz4kHUjtZXh6DSf9Q==", - "dependencies": { - "core-js": "^3.6.4" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.0.0.tgz", + "integrity": "sha512-+sTfTkIbVUa2Ue3bkz3R7F1mhddvHPOWUxkSNg7Q5dAsimVFBaTRgiBAJmsAag3JPsxyuS8kUgeb0zdEssRdTA==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/router": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.0.1.tgz", - "integrity": "sha512-Ci/uD3x8OKHdxSqXL6gRJ+mGJOEXjeiHjj7hqsZqVTsT7kOrCjDf0/J8z5RyLlokKZ0IpSe+hGxgi3YB7Gpw3Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", + "license": "GPL-3.0-or-later", "dependencies": { - "@nextcloud/typings": "^1.7.0" + "@nextcloud/typings": "^1.10.0" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/sharing": { @@ -3423,16 +3534,15 @@ } }, "node_modules/@nextcloud/typings": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.9.1.tgz", - "integrity": "sha512-i0l/L5gKW8EACbXHVxXM6wn3sUhY2qmnL2OijppzU4dENC7/hqySMQDer7/+cJbNSNG7uHF/Z+9JmHtDfRfuGg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.10.0.tgz", + "integrity": "sha512-SMC42rDjOH3SspPTLMZRv76ZliHpj2JJkF8pGLP8l1QrVTZxE47Qz5qeKmbj2VL+dRv2e/NgixlAFmzVnxkhqg==", "license": "GPL-3.0-or-later", "dependencies": { "@types/jquery": "3.5.16" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, "node_modules/@nextcloud/vue": { @@ -3689,6 +3799,12 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -3790,14 +3906,6 @@ "@types/ms": "*" } }, - "node_modules/@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", - "dependencies": { - "@types/trusted-types": "*" - } - }, "node_modules/@types/escape-html": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", @@ -4137,7 +4245,8 @@ "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "optional": true }, "node_modules/@types/unist": { "version": "2.0.6", @@ -7500,6 +7609,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, "engines": { "node": ">=0.12" }, @@ -9054,21 +9164,18 @@ "peer": true }, "node_modules/fast-xml-parser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", - "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "strnum": "^1.1.1" }, "bin": { "fxparser": "src/cli/cli.js" @@ -10902,14 +11009,15 @@ } }, "node_modules/is-svg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-5.0.1.tgz", - "integrity": "sha512-mLYxDsfisQWdS4+gSblAwhATDoNMS/tx8G7BKA+aBIf7F0m1iUwMvuKAo6mW4WMleQAEE50I1Zqef9yMMfHk3w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", + "integrity": "sha512-i7YPdvYuSCYcaLQrKwt8cvKTlwHcdA6Hp8N9SO3Q5jIzo8x6kH3N47W0BvPP7NdxVBmIHx7X9DK36czYYW7lHg==", + "license": "MIT", "dependencies": { - "fast-xml-parser": "^4.1.3" + "@file-type/xml": "^0.4.3" }, "engines": { - "node": ">=14.16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13353,9 +13461,10 @@ } }, "node_modules/layerr": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/layerr/-/layerr-2.1.0.tgz", - "integrity": "sha512-xDD9suWxfBYeXgqffRVH/Wqh+mqZrQcqPRn0I0ijl7iJQ7vu8gMGPt1Qop59pEW/jaIDNUN7+PX1Qk40+vuflg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", + "integrity": "sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==", + "license": "MIT" }, "node_modules/leven": { "version": "3.1.0", @@ -16587,6 +16696,15 @@ } } }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -17465,9 +17583,32 @@ "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" }, "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/strtok3": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } }, "node_modules/style-loader": { "version": "3.3.4", @@ -18436,9 +18577,10 @@ } }, "node_modules/typescript-event-target": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.1.tgz", - "integrity": "sha512-dFSOFBKV6uwaloBCCUhxlD3Pr/P1a/tJdcmPrTXCHlEFD3faj0mztjcGn6VBAhQ0/Bdy8K3VWrrqwbt/ffsYsg==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.2.tgz", + "integrity": "sha512-TvkrTUpv7gCPlcnSoEwUVUBwsdheKm+HF5u2tPAKubkIGMfovdSizCTaZRY/NhR8+Ijy8iZZUapbVQAsNrkFrw==", + "license": "MIT" }, "node_modules/unbox-primitive": { "version": "1.0.2", @@ -19173,19 +19315,20 @@ } }, "node_modules/webdav": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.6.0.tgz", - "integrity": "sha512-1zpC9T+nZAEz3hHrEdis3gybiwoR5LillHmFiylhYWAsGU0bGlWlRZtK5NJ3bTr2wCoKABrRGGqLk24+UxF4Gg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.8.0.tgz", + "integrity": "sha512-iuFG7NamJ41Oshg4930iQgfIpRrUiatPWIekeznYgEf2EOraTRcDPTjy7gIOMtkdpKTaqPk1E68NO5PAGtJahA==", + "license": "MIT", "dependencies": { "@buttercup/fetch": "^0.2.1", "base-64": "^1.0.0", "byte-length": "^1.0.2", - "entities": "^4.5.0", - "fast-xml-parser": "^4.2.4", - "hot-patcher": "^2.0.0", - "layerr": "^2.0.1", + "entities": "^6.0.0", + "fast-xml-parser": "^4.5.1", + "hot-patcher": "^2.0.1", + "layerr": "^3.0.0", "md5": "^2.3.0", - "minimatch": "^7.4.6", + "minimatch": "^9.0.5", "nested-property": "^4.0.0", "node-fetch": "^3.3.2", "path-posix": "^1.0.0", @@ -19193,26 +19336,40 @@ "url-parse": "^1.5.10" }, "engines": { - "node": ">=16" + "node": ">=14" } }, "node_modules/webdav/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, + "node_modules/webdav/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/webdav/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -21146,6 +21303,15 @@ "dev": true, "peer": true }, + "@file-type/xml": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@file-type/xml/-/xml-0.4.4.tgz", + "integrity": "sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==", + "requires": { + "sax": "^1.4.1", + "strtok3": "^10.3.4" + } + }, "@floating-ui/core": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz", @@ -21929,11 +22095,18 @@ "dev": true }, "@nextcloud/capabilities": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.0.tgz", - "integrity": "sha512-L1NQtOfHWzkfj0Ple1MEJt6HmOHWAi3y4qs+OnwSWexqJT0DtXTVPyRxi7ADyITwRxS5H9R/HMl6USAj4Nr1nQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.1.tgz", + "integrity": "sha512-snZ0/910zzwN6PDsIlx2Uvktr1S5x0ClhDUnfPlCj7ntNvECzuVHNY5wzby22LIkc+9ZjaDKtCwuCt2ye+9p/Q==", "requires": { - "@nextcloud/initial-state": "^2.1.0" + "@nextcloud/initial-state": "^3.0.0" + }, + "dependencies": { + "@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==" + } } }, "@nextcloud/dialogs": { @@ -21959,18 +22132,51 @@ "webdav": "^5.6.0" }, "dependencies": { + "@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "requires": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + }, + "dependencies": { + "@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==" + }, + "@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "requires": { + "@nextcloud/files": "^3.12.0", + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + } + } + } + }, "@nextcloud/l10n": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.1.0.tgz", - "integrity": "sha512-unciqr8QSJ29vFBw9S1bquyoj1PTWHszNL8tcUNuxUAYpq0hX+8o7rpB5gimELA4sj4m9+VCJwgLtBZd1Yj0lg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", "requires": { "@nextcloud/router": "^3.0.1", - "@nextcloud/typings": "^1.8.0", - "@types/dompurify": "^3.0.5", + "@nextcloud/typings": "^1.9.1", "@types/escape-html": "^1.0.4", - "dompurify": "^3.1.2", - "escape-html": "^1.0.3", - "node-gettext": "^3.0.0" + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" } }, "@vueuse/core": { @@ -22060,34 +22266,66 @@ } }, "@nextcloud/files": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.5.1.tgz", - "integrity": "sha512-GkVWUgkBSVt27Carmp/DbnDiqHq03w3VQWt8xszacp/IQSB9G+8/KCvi8zxldac2q7lQ8NpHlB/Bqy8o+OOc0A==", - "requires": { - "@nextcloud/auth": "^2.3.0", - "@nextcloud/l10n": "^3.1.0", - "@nextcloud/logger": "^3.0.2", - "@nextcloud/paths": "^2.1.0", - "@nextcloud/router": "^3.0.1", - "@nextcloud/sharing": "^0.2.1", - "cancelable-promise": "^4.3.1", - "is-svg": "^5.0.1", - "typescript-event-target": "^1.1.1", - "webdav": "^5.6.0" - }, - "dependencies": { + "version": "4.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-4.0.0-rc.0.tgz", + "integrity": "sha512-zg/TQH4oQQYlntzkcWokjKIkTX39maiYXceDYrE3OnzCYZv0IKmOH3+pQer58/Z9QfsU8huTnzHblhzVNsJvAA==", + "requires": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.2", + "webdav": "^5.8.0" + }, + "dependencies": { + "@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "optional": true, + "requires": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + } + }, + "@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==" + }, "@nextcloud/l10n": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.1.0.tgz", - "integrity": "sha512-unciqr8QSJ29vFBw9S1bquyoj1PTWHszNL8tcUNuxUAYpq0hX+8o7rpB5gimELA4sj4m9+VCJwgLtBZd1Yj0lg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", "requires": { "@nextcloud/router": "^3.0.1", - "@nextcloud/typings": "^1.8.0", - "@types/dompurify": "^3.0.5", + "@nextcloud/typings": "^1.9.1", "@types/escape-html": "^1.0.4", - "dompurify": "^3.1.2", - "escape-html": "^1.0.3", - "node-gettext": "^3.0.0" + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" + } + }, + "@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "requires": { + "@nextcloud/files": "^3.12.0", + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" } } } @@ -22121,11 +22359,11 @@ } }, "@nextcloud/logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.2.tgz", - "integrity": "sha512-wByt0R0/6QC44RBpaJr1MWghjjOxk/pRbACHo/ZWWKht1qYbJRHB4GtEi+35KEIHY07ZpqxiDk6dIRuN7sXYWQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", + "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", "requires": { - "@nextcloud/auth": "^2.3.0" + "@nextcloud/auth": "^2.5.3" } }, "@nextcloud/moment": { @@ -22139,19 +22377,16 @@ } }, "@nextcloud/paths": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-2.1.0.tgz", - "integrity": "sha512-8wX0gqwez0bTuAS8A0OEiqbbp0ZsqLr07zSErmS6OYhh9KZcSt/kO6lQV5tnrFqIqJVsxwz4kHUjtZXh6DSf9Q==", - "requires": { - "core-js": "^3.6.4" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.0.0.tgz", + "integrity": "sha512-+sTfTkIbVUa2Ue3bkz3R7F1mhddvHPOWUxkSNg7Q5dAsimVFBaTRgiBAJmsAag3JPsxyuS8kUgeb0zdEssRdTA==" }, "@nextcloud/router": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.0.1.tgz", - "integrity": "sha512-Ci/uD3x8OKHdxSqXL6gRJ+mGJOEXjeiHjj7hqsZqVTsT7kOrCjDf0/J8z5RyLlokKZ0IpSe+hGxgi3YB7Gpw3Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", "requires": { - "@nextcloud/typings": "^1.7.0" + "@nextcloud/typings": "^1.10.0" } }, "@nextcloud/sharing": { @@ -22178,9 +22413,9 @@ } }, "@nextcloud/typings": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.9.1.tgz", - "integrity": "sha512-i0l/L5gKW8EACbXHVxXM6wn3sUhY2qmnL2OijppzU4dENC7/hqySMQDer7/+cJbNSNG7uHF/Z+9JmHtDfRfuGg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.10.0.tgz", + "integrity": "sha512-SMC42rDjOH3SspPTLMZRv76ZliHpj2JJkF8pGLP8l1QrVTZxE47Qz5qeKmbj2VL+dRv2e/NgixlAFmzVnxkhqg==", "requires": { "@types/jquery": "3.5.16" } @@ -22377,6 +22612,11 @@ "@sinonjs/commons": "^3.0.0" } }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -22474,14 +22714,6 @@ "@types/ms": "*" } }, - "@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", - "requires": { - "@types/trusted-types": "*" - } - }, "@types/escape-html": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", @@ -22819,7 +23051,8 @@ "@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "optional": true }, "@types/unist": { "version": "2.0.6", @@ -25371,7 +25604,8 @@ "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true }, "envinfo": { "version": "7.13.0", @@ -26518,11 +26752,11 @@ "peer": true }, "fast-xml-parser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz", - "integrity": "sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", "requires": { - "strnum": "^1.0.5" + "strnum": "^1.1.1" } }, "fastest-levenshtein": { @@ -27854,11 +28088,11 @@ } }, "is-svg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-5.0.1.tgz", - "integrity": "sha512-mLYxDsfisQWdS4+gSblAwhATDoNMS/tx8G7BKA+aBIf7F0m1iUwMvuKAo6mW4WMleQAEE50I1Zqef9yMMfHk3w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", + "integrity": "sha512-i7YPdvYuSCYcaLQrKwt8cvKTlwHcdA6Hp8N9SO3Q5jIzo8x6kH3N47W0BvPP7NdxVBmIHx7X9DK36czYYW7lHg==", "requires": { - "fast-xml-parser": "^4.1.3" + "@file-type/xml": "^0.4.3" } }, "is-symbol": { @@ -29708,9 +29942,9 @@ } }, "layerr": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/layerr/-/layerr-2.1.0.tgz", - "integrity": "sha512-xDD9suWxfBYeXgqffRVH/Wqh+mqZrQcqPRn0I0ijl7iJQ7vu8gMGPt1Qop59pEW/jaIDNUN7+PX1Qk40+vuflg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", + "integrity": "sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==" }, "leven": { "version": "3.1.0", @@ -31985,6 +32219,11 @@ "neo-async": "^2.6.2" } }, + "sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==" + }, "saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -32716,9 +32955,17 @@ "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" }, "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==" + }, + "strtok3": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", + "requires": { + "@tokenizer/token": "^0.3.0" + } }, "style-loader": { "version": "3.3.4", @@ -33440,9 +33687,9 @@ "peer": true }, "typescript-event-target": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.1.tgz", - "integrity": "sha512-dFSOFBKV6uwaloBCCUhxlD3Pr/P1a/tJdcmPrTXCHlEFD3faj0mztjcGn6VBAhQ0/Bdy8K3VWrrqwbt/ffsYsg==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.2.tgz", + "integrity": "sha512-TvkrTUpv7gCPlcnSoEwUVUBwsdheKm+HF5u2tPAKubkIGMfovdSizCTaZRY/NhR8+Ijy8iZZUapbVQAsNrkFrw==" }, "unbox-primitive": { "version": "1.0.2", @@ -33996,19 +34243,19 @@ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" }, "webdav": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.6.0.tgz", - "integrity": "sha512-1zpC9T+nZAEz3hHrEdis3gybiwoR5LillHmFiylhYWAsGU0bGlWlRZtK5NJ3bTr2wCoKABrRGGqLk24+UxF4Gg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.8.0.tgz", + "integrity": "sha512-iuFG7NamJ41Oshg4930iQgfIpRrUiatPWIekeznYgEf2EOraTRcDPTjy7gIOMtkdpKTaqPk1E68NO5PAGtJahA==", "requires": { "@buttercup/fetch": "^0.2.1", "base-64": "^1.0.0", "byte-length": "^1.0.2", - "entities": "^4.5.0", - "fast-xml-parser": "^4.2.4", - "hot-patcher": "^2.0.0", - "layerr": "^2.0.1", + "entities": "^6.0.0", + "fast-xml-parser": "^4.5.1", + "hot-patcher": "^2.0.1", + "layerr": "^3.0.0", "md5": "^2.3.0", - "minimatch": "^7.4.6", + "minimatch": "^9.0.5", "nested-property": "^4.0.0", "node-fetch": "^3.3.2", "path-posix": "^1.0.0", @@ -34017,17 +34264,22 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } }, + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + }, "minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "requires": { "brace-expansion": "^2.0.1" } diff --git a/package.json b/package.json index a64856685..22a01f053 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@nextcloud/auth": "^2.3.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/dialogs": "^5.3.4", - "@nextcloud/files": "^3.5.1", + "@nextcloud/files": "^4.0.0-rc.0", "@nextcloud/initial-state": "^2.2.0", "@nextcloud/l10n": "^2.2.0", "@nextcloud/moment": "^1.3.1", diff --git a/src/filesPlugin/filesPlugin.js b/src/filesPlugin/filesPlugin.js index 5de0ac8be..a874b08e6 100644 --- a/src/filesPlugin/filesPlugin.js +++ b/src/filesPlugin/filesPlugin.js @@ -39,14 +39,15 @@ const singleFileAction = new FileAction({ id: 'open-project-single', displayName: () => t('integration_openproject', 'OpenProject'), order: 0, - enabled(nodes, view) { + enabled({ nodes, view }) { // we don't want 'files.public' or any other view return view.id === 'files' && nodes.length === 1 && !nodes.some(({ permissions }) => (permissions & Permission.READ) === 0) }, iconSvgInline: () => OpenProjectIcon, - async exec(node, view, dir) { + async exec({ nodes }) { + const node = nodes[0] window.OCA.Files.Sidebar.setActiveTab('open-project') await window.OCA.Files.Sidebar.open(node.path) return null @@ -59,14 +60,15 @@ const multipleFileAction = new FileAction({ id: 'open-project-multiple', displayName: () => t('integration_openproject', 'Link to work package'), order: 0, - enabled(nodes, view) { + enabled({ nodes, view }) { // we don't want 'files.public' or any other view return view.id === 'files' && nodes.length >= 1 && !nodes.some(({ permissions }) => (permissions & Permission.READ) === 0) }, iconSvgInline: () => OpenProjectIcon, - async exec(node, view, dir) { + async exec({ nodes }) { + const node = nodes[0] console.debug('in the single action handler') OCA.OpenProject.LinkMultipleFilesModalVue.$children[0].setFileInfos([{ id: node.fileid, @@ -76,7 +78,7 @@ const multipleFileAction = new FileAction({ // to avoid the toast message return null }, - async execBatch(nodes, view, dir) { + async execBatch({ nodes }) { console.debug('in the multi action handler') compare(nodes) // to avoid the toast message From 2cc8eccfef68aba5a0e7269e6ed07bda7257253e Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Thu, 22 Jan 2026 15:47:18 +0545 Subject: [PATCH 3/9] fix(file-actions): migrate sidebar tab registion to new API Signed-off-by: Saw-jan Signed-off-by: Louis Chmn --- package-lock.json | 16 ++++++++++++ package.json | 1 + src/projectTab.js | 53 +++++++++++++++------------------------ src/views/ProjectsTab.vue | 22 +++++++++++++--- 4 files changed, 55 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5b3179439..7125bb49f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "dompurify": "^3.1.5", "lodash": "^4.17.21", "vue": "^2.7.16", + "vue-custom-element": "^3.3.0", "vue-material-design-icons": "^5.3.0" }, "devDependencies": { @@ -19059,6 +19060,16 @@ "tinycolor2": "^1.1.2" } }, + "node_modules/vue-custom-element": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/vue-custom-element/-/vue-custom-element-3.3.0.tgz", + "integrity": "sha512-ePuy1EDDJd9/piwXLwsCyMQ964HsdhXPzypM9OX0r4JBa20EVN28U7RXeTWwXkoFKim/b3sP7xT2NEM0Di6tUQ==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/vue-eslint-parser": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", @@ -34050,6 +34061,11 @@ "tinycolor2": "^1.1.2" } }, + "vue-custom-element": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/vue-custom-element/-/vue-custom-element-3.3.0.tgz", + "integrity": "sha512-ePuy1EDDJd9/piwXLwsCyMQ964HsdhXPzypM9OX0r4JBa20EVN28U7RXeTWwXkoFKim/b3sP7xT2NEM0Di6tUQ==" + }, "vue-eslint-parser": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", diff --git a/package.json b/package.json index 22a01f053..b3caa1322 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "dompurify": "^3.1.5", "lodash": "^4.17.21", "vue": "^2.7.16", + "vue-custom-element": "^3.3.0", "vue-material-design-icons": "^5.3.0" }, "devDependencies": { diff --git a/src/projectTab.js b/src/projectTab.js index 01eab3090..cc57b1e16 100644 --- a/src/projectTab.js +++ b/src/projectTab.js @@ -5,46 +5,33 @@ */ import Vue from 'vue' +import vueCustomElement from 'vue-custom-element' +import { registerSidebarTab } from '@nextcloud/files' import './bootstrap.js' +import OpenProjectSvgIcon from '../img/app.svg' import ProjectsTab from './views/ProjectsTab.vue' -// Init OpenProject Tab Service -if (!window.OCA.OpenProject) { - window.OCA.OpenProject = {} -} +Vue.use(vueCustomElement) -const View = Vue.extend(ProjectsTab) -let TabInstance = null +const tagName = 'integration_openproject-files-sidebar-tab' -const projectTab = new OCA.Files.Sidebar.Tab({ - id: 'open-project', - name: t('integration_openproject', 'OpenProject'), - icon: 'icon-openproject', - - async mount(el, fileInfo, context) { - if (TabInstance) { - TabInstance.$destroy() +registerSidebarTab({ + id: 'integration_openproject', + order: 50, + displayName: t('integration_openproject', 'OpenProject'), + iconSvgInline: OpenProjectSvgIcon, + enabled() { + return true + }, + tagName, + onInit: () => { + if (window.customElements.get(tagName)) { + // element already defined + return } - TabInstance = new View({ - // Better integration with vue parent component - parent: context, + Vue.customElement(tagName, ProjectsTab, { + shadow: false, }) - // Only mount after we have all the info we need - await TabInstance.update(fileInfo) - TabInstance.$mount(el) - }, - update(fileInfo) { - TabInstance.update(fileInfo) }, - destroy() { - TabInstance.$destroy() - TabInstance = null - }, -}) - -window.addEventListener('DOMContentLoaded', function() { - if (OCA.Files && OCA.Files.Sidebar) { - OCA.Files.Sidebar.registerTab(projectTab) - } }) diff --git a/src/views/ProjectsTab.vue b/src/views/ProjectsTab.vue index e5746879c..2f2532e4e 100644 --- a/src/views/ProjectsTab.vue +++ b/src/views/ProjectsTab.vue @@ -73,6 +73,12 @@ export default { NcLoadingIcon, LinkOffIcon, }, + props: { + node: { + type: Object, + required: true, + }, + }, data: () => ({ error: '', fileInfo: {}, @@ -103,7 +109,13 @@ export default { }) }, }, + watch: { + node() { + this.update() + }, + }, mounted() { + this.update() if (this.authMethod === AUTH_METHOD.OAUTH2) { checkOauthConnectionResult(this.oauthConnectionResult, this.oauthConnectionErrorMessage) } @@ -111,11 +123,13 @@ export default { methods: { /** * updates current resource - * - * @param {object} fileInfo file information */ - async update(fileInfo) { - this.fileInfo = fileInfo + async update() { + this.fileInfo = { + id: this.node.fileid, + name: this.node.basename, + dir: this.node.dirname, + } this.workpackages = [] this.state = STATE.LOADING if (this.isAdminConfigOk) { From ca13b9db6e7932a514bfbe3999560d2163ba886d Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Fri, 23 Jan 2026 11:46:06 +0545 Subject: [PATCH 4/9] fix: use normalized svg file Signed-off-by: Saw-jan --- img/openproject-icon.svg | 15 +++++++++++++++ src/projectTab.js | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 img/openproject-icon.svg diff --git a/img/openproject-icon.svg b/img/openproject-icon.svg new file mode 100644 index 000000000..f7a577578 --- /dev/null +++ b/img/openproject-icon.svg @@ -0,0 +1,15 @@ + + + + + + diff --git a/src/projectTab.js b/src/projectTab.js index cc57b1e16..f3521361e 100644 --- a/src/projectTab.js +++ b/src/projectTab.js @@ -9,7 +9,7 @@ import vueCustomElement from 'vue-custom-element' import { registerSidebarTab } from '@nextcloud/files' import './bootstrap.js' -import OpenProjectSvgIcon from '../img/app.svg' +import OpenProjectSvgIcon from '../img/openproject-icon.svg' import ProjectsTab from './views/ProjectsTab.vue' Vue.use(vueCustomElement) From c0be68f8c252c41dcdf1e2b3b2a377d038c7bd05 Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Fri, 23 Jan 2026 11:50:19 +0545 Subject: [PATCH 5/9] chore: bump version to 3.0.0-alpha.1 Signed-off-by: Saw-jan --- appinfo/info.xml | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index 71e1da64f..11d76ceee 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -33,7 +33,7 @@ On the OpenProject end, users are able to: For more information on how to set up and use the OpenProject application, please refer to [integration setup guide](https://www.openproject.org/docs/system-admin-guide/integrations/nextcloud/) for administrators and [the user guide](https://www.openproject.org/docs/user-guide/nextcloud-integration/). ]]> - 2.11.0 + 3.0.0-alpha.1 agpl Julien Veyssier OpenProject diff --git a/package-lock.json b/package-lock.json index 7125bb49f..9f0722096 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "integration_openproject", - "version": "2.11.0", + "version": "3.0.0-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "integration_openproject", - "version": "2.11.0", + "version": "3.0.0-alpha.1", "license": "AGPL-3.0-or-later", "dependencies": { "@mdi/svg": "^7.3.67", diff --git a/package.json b/package.json index b3caa1322..0c3e17dd5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "integration_openproject", - "version": "2.11.0", + "version": "3.0.0-alpha.1", "description": "OpenProject Integration", "main": "index.js", "directories": { From 7fd9f3460870882d2eaaa8e2bf5a40d382c4a4e7 Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Fri, 23 Jan 2026 11:59:26 +0545 Subject: [PATCH 6/9] chore: fix reuse compliance Signed-off-by: Saw-jan --- REUSE.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/REUSE.toml b/REUSE.toml index ddfa4618e..12818cfc5 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -48,9 +48,9 @@ SPDX-FileCopyrightText = "2022-2024 Jankari Tech Pvt. Ltd." SPDX-License-Identifier = "AGPL-3.0-or-later" [[annotations]] -path = ["img/app.svg", "img/app-dark.svg"] +path = ["img/app.svg", "img/app-dark.svg", "img/openproject-icon.svg"] precedence = "aggregate" -SPDX-FileCopyrightText = "2018-2024 Google LLC" +SPDX-FileCopyrightText = "2018-2025 Google LLC" SPDX-License-Identifier = "LicenseRef-OpenProjectTrademarks" [[annotations]] From aefa22535921b3ed255f51b1912625657122711f Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Fri, 23 Jan 2026 14:33:50 +0545 Subject: [PATCH 7/9] chore: add changelog entry Signed-off-by: Saw-jan --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 864b85b20..f622f8623 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added +- [BREAKING] Support Nextcloud 33 [#952](https://github.com/nextcloud/integration_openproject/pull/952) + ### Changed ### Removed From a6ff338d43db39fccf3b7ea315fbcbda45b98834 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Fri, 23 Jan 2026 09:53:27 +0100 Subject: [PATCH 8/9] fix(reuse): Fix copyright holder (flipped) Signed-off-by: Andy Scherzinger --- REUSE.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/REUSE.toml b/REUSE.toml index 12818cfc5..25b549162 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -50,11 +50,11 @@ SPDX-License-Identifier = "AGPL-3.0-or-later" [[annotations]] path = ["img/app.svg", "img/app-dark.svg", "img/openproject-icon.svg"] precedence = "aggregate" -SPDX-FileCopyrightText = "2018-2025 Google LLC" +SPDX-FileCopyrightText = "2012-2025 OpenProject GmbH" SPDX-License-Identifier = "LicenseRef-OpenProjectTrademarks" [[annotations]] path = ["img/bell-ring.svg", "img/bell-ring-dark.svg"] precedence = "aggregate" -SPDX-FileCopyrightText = "2012-2024 OpenProject GmbH" +SPDX-FileCopyrightText = "2018-2025 Google LLC" SPDX-License-Identifier = "Apache-2.0" From f6fd2a47f09a77f0d766e6fec612d8955ac7645a Mon Sep 17 00:00:00 2001 From: Saw-jan Date: Fri, 23 Jan 2026 16:16:48 +0545 Subject: [PATCH 9/9] fix: open sidebar from file context menu Signed-off-by: Saw-jan --- css/tab.css | 2 +- src/components/tab/WorkPackage.vue | 2 +- src/fileActions.js | 23 -------- src/filesPlugin/filesPlugin.js | 25 ++++++--- src/filesPlugin/filesPluginLessThan28.js | 70 ------------------------ webpack.js | 2 - 6 files changed, 20 insertions(+), 104 deletions(-) delete mode 100644 src/fileActions.js delete mode 100644 src/filesPlugin/filesPluginLessThan28.js diff --git a/css/tab.css b/css/tab.css index 86dc607d2..80f3d8f76 100644 --- a/css/tab.css +++ b/css/tab.css @@ -6,7 +6,7 @@ @import '../css/dashboard.css'; -#tab-open-project { +#tab-integration_openproject { height: 100%; padding: 0; } diff --git a/src/components/tab/WorkPackage.vue b/src/components/tab/WorkPackage.vue index d8b600e95..23ab8d93a 100644 --- a/src/components/tab/WorkPackage.vue +++ b/src/components/tab/WorkPackage.vue @@ -145,7 +145,7 @@ export default { el = document.getElementById('workpackage-link-previews') } if (el === null) { - el = document.getElementById('tab-open-project') + el = document.getElementById('tab-integration_openproject') } return el }, diff --git a/src/fileActions.js b/src/fileActions.js deleted file mode 100644 index 6dbfe5475..000000000 --- a/src/fileActions.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors - * SPDX-FileCopyrightText: 2022 Jankari Tech Pvt. Ltd. - * SPDX-License-Identifier: AGPL-3.0-or-later - */ - -import './bootstrap.js' - -OCA.Files.fileActions.registerAction({ - name: 'open-project', - displayName: t('integration_openproject', 'OpenProject'), - mime: 'all', - permissions: OC.PERMISSION_READ, - iconClass: 'icon-openproject', - actionHandler: (filename, context) => { - const fileList = context.fileList - if (!fileList._detailsView) { - return - } - // use the sidebar-tab id for the navigation - fileList.showDetailsView(filename, 'open-project') - }, -}) diff --git a/src/filesPlugin/filesPlugin.js b/src/filesPlugin/filesPlugin.js index a874b08e6..17f48f766 100644 --- a/src/filesPlugin/filesPlugin.js +++ b/src/filesPlugin/filesPlugin.js @@ -4,7 +4,7 @@ */ import '../bootstrap.js' -import { registerFileAction, FileAction, Permission } from '@nextcloud/files' +import { registerFileAction, FileAction, Permission, getSidebar } from '@nextcloud/files' import OpenProjectIcon from '../../img/app-dark.svg' import LinkMultipleFilesModal from '../views/LinkMultipleFilesModal.vue' import Vue from 'vue' @@ -36,7 +36,7 @@ const compare = (files) => { // registering file action for single file selection const singleFileAction = new FileAction({ - id: 'open-project-single', + id: 'integration_openproject-single', displayName: () => t('integration_openproject', 'OpenProject'), order: 0, enabled({ nodes, view }) { @@ -47,17 +47,28 @@ const singleFileAction = new FileAction({ }, iconSvgInline: () => OpenProjectIcon, async exec({ nodes }) { - const node = nodes[0] - window.OCA.Files.Sidebar.setActiveTab('open-project') - await window.OCA.Files.Sidebar.open(node.path) - return null + const sidebar = getSidebar() + const [node] = nodes + try { + // If the sidebar is already open for the current file, do nothing + if (sidebar.node?.source === node.source) { + console.debug('Sidebar already open for this file', { node }) + return null + } + + sidebar.open(node, 'integration_openproject') + return null + } catch (error) { + console.error('Error while opening sidebar', { error }) + return false + } }, }) registerFileAction(singleFileAction) // registering file action for multiple file selection const multipleFileAction = new FileAction({ - id: 'open-project-multiple', + id: 'integration_openproject-multiple', displayName: () => t('integration_openproject', 'Link to work package'), order: 0, enabled({ nodes, view }) { diff --git a/src/filesPlugin/filesPluginLessThan28.js b/src/filesPlugin/filesPluginLessThan28.js deleted file mode 100644 index 0a0f9f148..000000000 --- a/src/filesPlugin/filesPluginLessThan28.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * SPDX-FileCopyrightText: 2023 Jankari Tech Pvt. Ltd. - * SPDX-License-Identifier: AGPL-3.0-or-later - */ - -import '../bootstrap.js' -import Vue from 'vue' -import LinkMultipleFilesModal from '../views/LinkMultipleFilesModal.vue' - -(function() { - if (!OCA.OpenProject) { - /** - * @namespace - */ - OCA.OpenProject = { - requestOnFileChange: false, - } - } - - /** - * @namespace - */ - OCA.OpenProject.FilesPlugin = { - ignoreLists: [ - 'trashbin', - 'files.public', - ], - - attach(fileList) { - if (this.ignoreLists.indexOf(fileList.id) >= 0) { - return - } - fileList.registerMultiSelectFileAction({ - name: 'open-project', - displayName: t('integration_openproject', 'Link to work package'), - mime: 'all', - permissions: OC.PERMISSION_READ, - iconClass: 'icon-openproject', - action: (selectedFiles) => { this.signExample(selectedFiles) }, - }) - }, - signExample: (selectedFiles) => { - // store all the file-id in an array and set the file ids - const fileInfos = [] - for (const file of selectedFiles) { - const fileInfo = { - id: file.id, - name: file.name, - } - fileInfos.push(fileInfo) - } - OCA.OpenProject.LinkMultipleFilesModalVue.$children[0].setFileInfos(fileInfos) - OCA.OpenProject.LinkMultipleFilesModalVue.$children[0].showModal() - }, - } -})() - -OC.Plugins.register('OCA.Files.FileList', OCA.OpenProject.FilesPlugin) - -const modalId = 'multipleFileLinkModal' -const modalElement = document.createElement('div') -modalElement.id = modalId -document.body.append(modalElement) - -OCA.OpenProject.LinkMultipleFilesModalVue = new Vue({ - el: modalElement, - render: h => { - return h(LinkMultipleFilesModal) - }, -}) diff --git a/webpack.js b/webpack.js index 8ddb2d02e..9538cd541 100644 --- a/webpack.js +++ b/webpack.js @@ -24,9 +24,7 @@ webpackConfig.entry = { adminSettings: { import: path.join(__dirname, 'src', 'adminSettings.js'), filename: appId + '-adminSettings.js' }, dashboard: { import: path.join(__dirname, 'src', 'dashboard.js'), filename: appId + '-dashboard.js' }, 'openproject-tab': { import: path.join(__dirname, 'src', 'projectTab.js'), filename: appId + '-projectTab.js' }, - fileActions: { import: path.join(__dirname, 'src', 'fileActions.js'), filename: appId + '-fileActions.js' }, filesPlugin: { import: path.join(__dirname, 'src/filesPlugin', 'filesPlugin'), filename: appId + '-filesPlugin.js' }, - filesPluginLessThan28: { import: path.join(__dirname, 'src/filesPlugin', 'filesPluginLessThan28.js'), filename: appId + '-filesPluginLessThan28.js' }, reference: { import: path.join(__dirname, 'src', 'reference.js'), filename: appId + '-reference.js' }, }