Compare commits
356 Commits
v1.15.2
...
test/base-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9301281b13 | ||
|
|
0a14a0dfd8 | ||
|
|
72d3cfa771 | ||
|
|
411c0d9d46 | ||
|
|
ec33c26fe4 | ||
|
|
8fcb4a47ae | ||
|
|
3ed1fbcc40 | ||
|
|
7394cb2d48 | ||
|
|
4f39328d59 | ||
|
|
b877c58343 | ||
|
|
6334b36666 | ||
|
|
f08eeec3a8 | ||
|
|
eec2ccd9ed | ||
|
|
3c8728c9ee | ||
|
|
684cf519ce | ||
|
|
215a4637b0 | ||
|
|
cab45170e5 | ||
|
|
cd50becc49 | ||
|
|
d778a48afb | ||
|
|
0a1ed8e0c2 | ||
|
|
a200afa168 | ||
|
|
3277de5cb4 | ||
|
|
34effdc00e | ||
|
|
014372a21a | ||
|
|
7674a85f68 | ||
|
|
357c6c1c5a | ||
|
|
23be704099 | ||
|
|
2571d48290 | ||
|
|
c513b1d5b5 | ||
|
|
b80e0d9297 | ||
|
|
382c05ed8d | ||
|
|
1283b8d78a | ||
|
|
465f24f2f1 | ||
|
|
ba0d211720 | ||
|
|
23f56be988 | ||
|
|
87f2d65a96 | ||
|
|
c95b3b746d | ||
|
|
da850b18ae | ||
|
|
771cf93cf6 | ||
|
|
0ed8b21b3c | ||
|
|
6f4f59a976 | ||
|
|
f80d7a5e79 | ||
|
|
e3843f9808 | ||
|
|
1ec7f1a971 | ||
|
|
18eea3584e | ||
|
|
844d492c8d | ||
|
|
840e9f309f | ||
|
|
fe53440ee4 | ||
|
|
162dbf25dd | ||
|
|
17de153ec8 | ||
|
|
58027c8294 | ||
|
|
79eba77b49 | ||
|
|
0efdfab232 | ||
|
|
ba9d2a4514 | ||
|
|
5744944957 | ||
|
|
1c1e3e944e | ||
|
|
85bb603103 | ||
|
|
90f10190ac | ||
|
|
ab3b2aa23c | ||
|
|
b9c0d454d5 | ||
|
|
438825530c | ||
|
|
c346c3cdf8 | ||
|
|
f1da8b30a4 | ||
|
|
8229d40981 | ||
|
|
244d61c783 | ||
|
|
879e59c003 | ||
|
|
10dc1fe9c1 | ||
|
|
4741817594 | ||
|
|
af99211d6b | ||
|
|
b120ce868d | ||
|
|
f0ea3f3ce5 | ||
|
|
2f0caac403 | ||
|
|
cc93386da6 | ||
|
|
5573a8bb1a | ||
|
|
c2e2e73b88 | ||
|
|
e509ac77d4 | ||
|
|
909af7e1bb | ||
|
|
6828144815 | ||
|
|
1d9382429e | ||
|
|
f68f7b54d6 | ||
|
|
dd4da2dd34 | ||
|
|
327bfff315 | ||
|
|
0b6c492c75 | ||
|
|
bbe1b37dfe | ||
|
|
3b5bf56049 | ||
|
|
97ab42ad5c | ||
|
|
42d3e54841 | ||
|
|
8dd62dd8d9 | ||
|
|
160900f2bb | ||
|
|
020107d3f4 | ||
|
|
68fb689df9 | ||
|
|
97d8018cd1 | ||
|
|
d666cba097 | ||
|
|
a8c337eb07 | ||
|
|
a3a46012a4 | ||
|
|
1aa7105ceb | ||
|
|
a042a4b076 | ||
|
|
d0f992ecbb | ||
|
|
fc245759a3 | ||
|
|
60bba3332b | ||
|
|
c93e07e0bd | ||
|
|
9e6975b22b | ||
|
|
979f9b2c53 | ||
|
|
307bdf5e68 | ||
|
|
4380533a66 | ||
|
|
3a1fbb90c3 | ||
|
|
dd64e0c73d | ||
|
|
8a9751ac6b | ||
|
|
c16f26d8d2 | ||
|
|
c7edec8f6e | ||
|
|
a6de59fe9c | ||
|
|
81e2c4768b | ||
|
|
3c917f3b2d | ||
|
|
6fd24ffa45 | ||
|
|
8c891c7f57 | ||
|
|
b73c2becda | ||
|
|
a9235e00c7 | ||
|
|
f8ad05b55b | ||
|
|
be497a741c | ||
|
|
62a9ce3131 | ||
|
|
7799854df4 | ||
|
|
bf961c3de4 | ||
|
|
5f73d97e4e | ||
|
|
32f0852a23 | ||
|
|
d80c9b3eec | ||
|
|
002bac60b1 | ||
|
|
08756b6c5d | ||
|
|
71bb838964 | ||
|
|
6c55e3cd70 | ||
|
|
8391d843d5 | ||
|
|
7cb9f8b966 | ||
|
|
1dfbec4278 | ||
|
|
26861c890d | ||
|
|
6841d4c068 | ||
|
|
4e70286629 | ||
|
|
54a5a1ecb2 | ||
|
|
4139f8b94a | ||
|
|
5c21cd2cf5 | ||
|
|
af253270aa | ||
|
|
6a64b4fc75 | ||
|
|
4b260a047c | ||
|
|
8d41f9730f | ||
|
|
2adacaa39e | ||
|
|
69fcd9bfdf | ||
|
|
c0b3775232 | ||
|
|
df0e909be4 | ||
|
|
96905c891c | ||
|
|
58c8dd5221 | ||
|
|
e21c82b38e | ||
|
|
02afc218ff | ||
|
|
50d199dd08 | ||
|
|
ff74bfbf13 | ||
|
|
a64bec0ecd | ||
|
|
d66e6408b1 | ||
|
|
324eb05598 | ||
|
|
9938a6d57f | ||
|
|
c2e4165bf7 | ||
|
|
7de0d6f1c4 | ||
|
|
5631741b6b | ||
|
|
724ad74c47 | ||
|
|
c8897477a7 | ||
|
|
7ac93d311c | ||
|
|
be8806102a | ||
|
|
f6a5877b85 | ||
|
|
9360a49d50 | ||
|
|
3aee848221 | ||
|
|
2f53f8a1d6 | ||
|
|
d63764fa78 | ||
|
|
d06ec0ad98 | ||
|
|
4bf086b55e | ||
|
|
99e2912d7c | ||
|
|
10aed3660c | ||
|
|
6628c42eca | ||
|
|
dbe1ced6b0 | ||
|
|
04b4da39c9 | ||
|
|
530a695e6f | ||
|
|
02d7dd469e | ||
|
|
71340b1217 | ||
|
|
153a9d2b7d | ||
|
|
e18f73a333 | ||
|
|
127f1b2d40 | ||
|
|
fe4c8df97e | ||
|
|
d5582535d6 | ||
|
|
7ec112ae1d | ||
|
|
aa747d7d62 | ||
|
|
d97f6c1a5f | ||
|
|
8e0b585662 | ||
|
|
c0f7e16463 | ||
|
|
71b4700a07 | ||
|
|
688649f5a8 | ||
|
|
03cdc47540 | ||
|
|
9f06a43d4b | ||
|
|
d31e31735d | ||
|
|
4a05762c0a | ||
|
|
a72f48f9ce | ||
|
|
7e6f23fa82 | ||
|
|
a72f4e3aa3 | ||
|
|
ec8945bb54 | ||
|
|
760f771e11 | ||
|
|
f0a443cbb6 | ||
|
|
69b9c09a14 | ||
|
|
7c93108172 | ||
|
|
899d8a6531 | ||
|
|
60b34d190a | ||
|
|
438a149304 | ||
|
|
9a2fcf6925 | ||
|
|
e3c802c0f3 | ||
|
|
ea84743864 | ||
|
|
abd38e0c15 | ||
|
|
0ec1f7151c | ||
|
|
a27cbf8bad | ||
|
|
f4a1424e90 | ||
|
|
a92dc282a8 | ||
|
|
e3ffbf73c3 | ||
|
|
c6e075af92 | ||
|
|
144f293231 | ||
|
|
6d78bc70f3 | ||
|
|
bf15865957 | ||
|
|
d2e5c0c515 | ||
|
|
933f2515db | ||
|
|
17bf361767 | ||
|
|
1df731396f | ||
|
|
968ea30fd4 | ||
|
|
8f75c7f92d | ||
|
|
234be011cc | ||
|
|
fa2f5bcab8 | ||
|
|
685014ec48 | ||
|
|
1cd6c55d30 | ||
|
|
6dbcf5d17b | ||
|
|
f84d7c372b | ||
|
|
8be8647f6d | ||
|
|
eb878055ae | ||
|
|
00b334d3d9 | ||
|
|
5905154fe0 | ||
|
|
8280f0796f | ||
|
|
18ea2f9a7e | ||
|
|
3cbddae6bc | ||
|
|
aac11e96b5 | ||
|
|
2e62a9c82a | ||
|
|
ec18ec758b | ||
|
|
8f3e2ae1d9 | ||
|
|
7f00601007 | ||
|
|
175c10c146 | ||
|
|
8dc0933c47 | ||
|
|
8c52b9bad9 | ||
|
|
a1c9396946 | ||
|
|
b0fbb386b8 | ||
|
|
e77a2fcd79 | ||
|
|
89152325be | ||
|
|
03cb9e2bc5 | ||
|
|
3c6f8ec419 | ||
|
|
3cfb1f6bfe | ||
|
|
96ad191ce2 | ||
|
|
52d4039dc8 | ||
|
|
73b3517840 | ||
|
|
3d78802446 | ||
|
|
8a99e6d539 | ||
|
|
0e08ad16e1 | ||
|
|
d04ab25315 | ||
|
|
19d35c65a0 | ||
|
|
1783914d3a | ||
|
|
c837dd4db6 | ||
|
|
db22052729 | ||
|
|
116babcaaf | ||
|
|
94da732bfb | ||
|
|
86d42b7060 | ||
|
|
122387a195 | ||
|
|
028f26a969 | ||
|
|
13c13b8dde | ||
|
|
5df4a49ff5 | ||
|
|
97902d2f6a | ||
|
|
db6221d1c9 | ||
|
|
0223dd9a3a | ||
|
|
974a4c979a | ||
|
|
51ba51fe33 | ||
|
|
4d5c69f250 | ||
|
|
9bddab4928 | ||
|
|
6dcb1d4b8b | ||
|
|
9ed384fa20 | ||
|
|
7cdc79a9ef | ||
|
|
852770c574 | ||
|
|
74afeb85d0 | ||
|
|
12a494720b | ||
|
|
b3261e0b56 | ||
|
|
88dbb010d0 | ||
|
|
d8adaf5fe6 | ||
|
|
2a36b45072 | ||
|
|
4e6474fa99 | ||
|
|
dbe7536339 | ||
|
|
b5e08110ab | ||
|
|
a7f2558aab | ||
|
|
3c3e6fa7d2 | ||
|
|
6a2b092ad6 | ||
|
|
5f2c300b21 | ||
|
|
439e44128a | ||
|
|
55056e27f1 | ||
|
|
22c36a0d77 | ||
|
|
1ebaa0c41f | ||
|
|
a2dbb94179 | ||
|
|
6f6f54965c | ||
|
|
5a833ec367 | ||
|
|
f1161be49f | ||
|
|
c0731ce142 | ||
|
|
4534ad5a92 | ||
|
|
6788210c27 | ||
|
|
1051dea281 | ||
|
|
eb9fce2e5f | ||
|
|
955a16f1c5 | ||
|
|
f38773473b | ||
|
|
b15254f1ed | ||
|
|
6dd623f796 | ||
|
|
41e97d7281 | ||
|
|
1b2a352df1 | ||
|
|
7fcad2425d | ||
|
|
5fb43086b6 | ||
|
|
7b4586a43a | ||
|
|
aaa76f7bd0 | ||
|
|
8260296d64 | ||
|
|
b02bc530f1 | ||
|
|
1b4e859431 | ||
|
|
acc61ad584 | ||
|
|
cb1d5c49e0 | ||
|
|
0c7b1c4731 | ||
|
|
629ef85d64 | ||
|
|
914f1d76ac | ||
|
|
0923070c45 | ||
|
|
bbf51952e0 | ||
|
|
1d1c2df8f3 | ||
|
|
0780b10170 | ||
|
|
fd6ef9b6eb | ||
|
|
da4a54900c | ||
|
|
53bd32d6b6 | ||
|
|
f7fa419105 | ||
|
|
023ab01e93 | ||
|
|
615d5ef871 | ||
|
|
a52b7b9742 | ||
|
|
dcbc6bc604 | ||
|
|
ce13d89e07 | ||
|
|
7114b10871 | ||
|
|
100404d25f | ||
|
|
60bfc192d3 | ||
|
|
fd090c7749 | ||
|
|
d735308bd3 | ||
|
|
4ec068ca62 | ||
|
|
f5e3e5e0f8 | ||
|
|
94aee3e07a | ||
|
|
b1f7c623a1 | ||
|
|
afa95d3c50 | ||
|
|
ba8e77abfe | ||
|
|
8c09047203 | ||
|
|
baa85e8947 | ||
|
|
f1e5acc52e | ||
|
|
d76b7a4667 | ||
|
|
df32a3ee34 | ||
|
|
2fa74662db | ||
|
|
d5fd80d116 |
76
.github/dependabot.yml
vendored
76
.github/dependabot.yml
vendored
@@ -13,6 +13,40 @@ updates:
|
||||
- juliushaertl
|
||||
- luka-nextcloud
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable32
|
||||
versioning-strategy: lockfile-only
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:15"
|
||||
timezone: Europe/Paris
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
open-pull-requests-limit: 30
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable31
|
||||
versioning-strategy: lockfile-only
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:15"
|
||||
timezone: Europe/Paris
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
open-pull-requests-limit: 30
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable30
|
||||
versioning-strategy: lockfile-only
|
||||
@@ -20,41 +54,7 @@ updates:
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
open-pull-requests-limit: 30
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable29
|
||||
versioning-strategy: lockfile-only
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
open-pull-requests-limit: 30
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable28
|
||||
versioning-strategy: lockfile-only
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
time: "03:30"
|
||||
timezone: Europe/Paris
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
@@ -69,7 +69,7 @@ updates:
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
time: "03:45"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
@@ -81,7 +81,7 @@ updates:
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
@@ -93,7 +93,7 @@ updates:
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
time: "04:15"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
|
||||
4
.github/workflows/appbuild.yml
vendored
4
.github/workflows/appbuild.yml
vendored
@@ -18,13 +18,13 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.1.0
|
||||
uses: actions/setup-node@v4.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.31.1
|
||||
uses: shivammathur/setup-php@2.34.1
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
|
||||
6
.github/workflows/appstore-build-publish.yml
vendored
6
.github/workflows/appstore-build-publish.yml
vendored
@@ -71,7 +71,7 @@ jobs:
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
# Skip if no package.json
|
||||
if: ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -87,7 +87,7 @@ jobs:
|
||||
filename: ${{ env.APP_NAME }}/appinfo/info.xml
|
||||
|
||||
- name: Set up php ${{ steps.php-versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: ${{ steps.php-versions.outputs.php-min }}
|
||||
coverage: none
|
||||
@@ -173,7 +173,7 @@ jobs:
|
||||
tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }}
|
||||
|
||||
- name: Attach tarball to github release
|
||||
uses: svenstaro/upload-release-action@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # v2
|
||||
uses: svenstaro/upload-release-action@81c65b7cd4de9b2570615ce3aad67a41de5b1a13 # v2
|
||||
id: attach_to_release
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
6
.github/workflows/cypress-e2e.yml
vendored
6
.github/workflows/cypress-e2e.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
node-version: [20.x]
|
||||
# containers: [1, 2, 3]
|
||||
php-versions: [ '8.2' ]
|
||||
server-versions: [ 'stable31' ]
|
||||
server-versions: [ 'master' ]
|
||||
|
||||
env:
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.1.0
|
||||
uses: actions/setup-node@v4.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
restore-keys: ${{ steps.extcache.outputs.key }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.31.1
|
||||
uses: shivammathur/setup-php@2.34.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: ${{ env.extensions }}
|
||||
|
||||
6
.github/workflows/integration.yml
vendored
6
.github/workflows/integration.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
||||
matrix:
|
||||
php-versions: ['8.1']
|
||||
databases: ['sqlite', 'mysql', 'pgsql']
|
||||
server-versions: ['master']
|
||||
server-versions: ['perf/base/basic-auth-fs-setup']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||
|
||||
@@ -74,11 +74,11 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
repository: nextcloud/activity
|
||||
ref: ${{ matrix.server-versions }}
|
||||
ref: master
|
||||
path: apps/activity
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.31.1
|
||||
uses: shivammathur/setup-php@2.34.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, apcu, gd
|
||||
|
||||
2
.github/workflows/lint-eslint.yml
vendored
2
.github/workflows/lint-eslint.yml
vendored
@@ -68,7 +68,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
4
.github/workflows/lint-php-cs.yml
vendored
4
.github/workflows/lint-php-cs.yml
vendored
@@ -33,8 +33,8 @@ jobs:
|
||||
id: versions
|
||||
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
|
||||
|
||||
- name: Set up php${{ steps.versions.outputs.php-available }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
- name: Set up php${{ steps.versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: ${{ steps.versions.outputs.php-min }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
2
.github/workflows/lint-php.yml
vendored
2
.github/workflows/lint-php.yml
vendored
@@ -48,7 +48,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
2
.github/workflows/lint-stylelint.yml
vendored
2
.github/workflows/lint-stylelint.yml
vendored
@@ -37,7 +37,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
2
.github/workflows/nodejs.yml
vendored
2
.github/workflows/nodejs.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.1.0
|
||||
uses: actions/setup-node@v4.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
|
||||
18
.github/workflows/npm-audit-fix.yml
vendored
18
.github/workflows/npm-audit-fix.yml
vendored
@@ -14,6 +14,9 @@ on:
|
||||
# At 2:30 on Sundays
|
||||
- cron: '30 2 * * 0'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -21,15 +24,18 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['main', 'master', 'stable30', 'stable29', 'stable28']
|
||||
branches: ['main', 'master', 'stable32', 'stable31', 'stable30']
|
||||
|
||||
name: npm-audit-fix-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
id: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
@@ -39,7 +45,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -48,10 +54,10 @@ jobs:
|
||||
|
||||
- name: Fix npm audit
|
||||
id: npm-audit
|
||||
uses: nextcloud-libraries/npm-audit-action@2a60bd2e79cc77f2cc4d9a3fe40f1a69896f3a87 # v0.1.0
|
||||
uses: nextcloud-libraries/npm-audit-action@1b1728b2b4a7a78d69de65608efcf4db0e3e42d0 # v0.2.0
|
||||
|
||||
- name: Run npm ci and npm run build
|
||||
if: always()
|
||||
if: steps.checkout.outcome == 'success'
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: |
|
||||
@@ -59,8 +65,8 @@ jobs:
|
||||
npm run build --if-present
|
||||
|
||||
- name: Create Pull Request
|
||||
if: always()
|
||||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(deps): Fix npm audit'
|
||||
|
||||
2
.github/workflows/phpunit-mysql.yml
vendored
2
.github/workflows/phpunit-mysql.yml
vendored
@@ -103,7 +103,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
2
.github/workflows/phpunit-pgsql.yml
vendored
2
.github/workflows/phpunit-pgsql.yml
vendored
@@ -106,7 +106,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
2
.github/workflows/phpunit-sqlite.yml
vendored
2
.github/workflows/phpunit-sqlite.yml
vendored
@@ -95,7 +95,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
5
.github/workflows/pr-feedback.yml
vendored
5
.github/workflows/pr-feedback.yml
vendored
@@ -15,8 +15,13 @@ on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
pr-feedback:
|
||||
if: ${{ github.repository_owner == 'nextcloud' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: The get-github-handles-from-website action
|
||||
|
||||
4
.github/workflows/psalm.yml
vendored
4
.github/workflows/psalm.yml
vendored
@@ -35,8 +35,8 @@ jobs:
|
||||
- name: Check enforcement of minimum PHP version ${{ steps.versions.outputs.php-min }} in psalm.xml
|
||||
run: grep 'phpVersion="${{ steps.versions.outputs.php-min }}' psalm.xml
|
||||
|
||||
- name: Set up php${{ steps.versions.outputs.php-available }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
- name: Set up php${{ steps.versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: ${{ steps.versions.outputs.php-min }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
2
.github/workflows/reuse.yml
vendored
2
.github/workflows/reuse.yml
vendored
@@ -16,7 +16,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
reuse-compliance-check:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-latest-low
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
6
.github/workflows/update-nextcloud-ocp.yml
vendored
6
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['main', 'master', 'stable30', 'stable29', 'stable28']
|
||||
branches: ['main', 'master', 'stable32', 'stable31', 'stable30']
|
||||
|
||||
name: update-nextcloud-ocp-${{ matrix.branches }}
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
|
||||
- name: Set up php8.2
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
|
||||
with:
|
||||
php-version: 8.2
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -107,7 +107,7 @@ jobs:
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'chore(dev-deps): Bump nextcloud/ocp package'
|
||||
|
||||
46
CHANGELOG.md
46
CHANGELOG.md
@@ -5,48 +5,16 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
# 1.15.2
|
||||
### Fixed
|
||||
* [stable31] fix: update DeleteCron to remove deleted lists by @backportbot[bot] in https://github.com/nextcloud/deck/pull/7029
|
||||
* [stable31] fix: not show Share with a Deck card for unauthorized users by @backportbot[bot] in https://github.com/nextcloud/deck/pull/7061
|
||||
* [stable31] fix: unstable cypress test by @backportbot[bot] in https://github.com/nextcloud/deck/pull/7063
|
||||
* [stable31] fix: add retry and show warning on description saving error by @backportbot[bot] in https://github.com/nextcloud/deck/pull/7091
|
||||
* [stable31] fix: styling for new stack input field by @backportbot[bot] in https://github.com/nextcloud/deck/pull/7113
|
||||
* [stable31] fix:allow foreign label deletion by @backportbot[bot] in https://github.com/nextcloud/deck/pull/7130
|
||||
* [stable31] fix: acl check when delete, update board acl by @backportbot[bot] in https://github.com/nextcloud/deck/pull/7132
|
||||
|
||||
### Improvements
|
||||
* [stable31] perf: don't enrich cards when finding calendar entries by @backportbot[bot] in https://github.com/nextcloud/deck/pull/6959
|
||||
|
||||
## 1.15.1
|
||||
### Fixed
|
||||
* [stable31] fix: Properly show attachment extension by @backportbot in https://github.com/nextcloud/deck/pull/6701
|
||||
* [stable31] Clear selected stack when selected board changed by @backportbot in https://github.com/nextcloud/deck/pull/6915
|
||||
* [stable31] fix: Use strings as rich object ids by @backportbot in https://github.com/nextcloud/deck/pull/6951
|
||||
* [stable31] fix: Limit label actions to labels of the cards board by @backportbot in https://github.com/nextcloud/deck/pull/6954
|
||||
* [stable31] fix: only delete assignments on unshared board by @grnd-alt in https://github.com/nextcloud/deck/pull/6934
|
||||
|
||||
### Improvements
|
||||
* [stable31] perf: Skip doing a query just to check if a board is deleted by @backportbot in https://github.com/nextcloud/deck/pull/6894
|
||||
|
||||
## 1.15.0
|
||||
### Fixed
|
||||
- Fix: Adapt URLs generated in the backend to new routes #6743
|
||||
- Fix npm audit #6719
|
||||
- Fix: skip exporting a deleted card #6723
|
||||
|
||||
## 1.15.0-beta.2
|
||||
## 1.16.0-beta.1
|
||||
|
||||
### Added
|
||||
- feat: update default content @luka-nextcloud [#6740](https://github.com/nextcloud/deck/pull/6740)
|
||||
- feat: add board import and export @luka-nextcloud [#6872](https://github.com/nextcloud/deck/pull/6872)
|
||||
- feat: use outline icons @luka-nextcloud [#7114](https://github.com/nextcloud/deck/pull/7114)
|
||||
- Add OCC commands for global calendar feature opt-in and opt-out in Deck @Fledermaus-20 [#7080](https://github.com/nextcloud/deck/pull/7080)
|
||||
|
||||
- feat: Implement reference resolving for cards that have a link in the title @juliusknorr [#6286](https://github.com/nextcloud/deck/pull/6286)
|
||||
|
||||
### Other
|
||||
|
||||
- Remove old project from README @edent [#6658](https://github.com/nextcloud/deck/pull/6658)
|
||||
- devcontainer(image): Fix package path @niclasheinz [#6653](https://github.com/nextcloud/deck/pull/6653)
|
||||
- remove deprecated nextcloud-vue-collections @grnd-alt [#6664](https://github.com/nextcloud/deck/pull/6664)
|
||||
- fix: set cypress ci server version to stable31 @grnd-alt [#6705](https://github.com/nextcloud/deck/pull/6705)
|
||||
### Fixed
|
||||
- CSV export fixes @gidan80 [#6800](https://github.com/nextcloud/deck/pull/6800)
|
||||
|
||||
## 1.15.0-beta.1
|
||||
### Fixed
|
||||
|
||||
@@ -12,7 +12,7 @@ SPDX-FileCopyrightText = "none"
|
||||
SPDX-License-Identifier = "CC0-1.0"
|
||||
|
||||
[[annotations]]
|
||||
path = ["l10n/**.js", "l10n/**.json", "js/**.js.map", "js/**.js", "js/**.mjs", "js/**.mjs.map", "js/templates/**.handlebars", "lib/Service/Importer/fixtures/config-deckJson-schema.json", "lib/Service/Importer/fixtures/config-trelloApi-schema.json", "lib/Service/Importer/fixtures/config-trelloJson-schema.json", "screenshots/screenshot1.png", "src/assets/file-placeholder.svg", "img/favicon.ico", "img/favicon.png", "img/favicon.svg", "img/activity.svg", "img/activity-dark.svg", "img/deck.svg", "img/deck-current.svg", "img/deck-dark.svg", "img/details-white.svg", "img/card.svg"]
|
||||
path = ["l10n/**.js", "l10n/**.json", "js/**.js.map", "js/**.js", "js/**.mjs", "js/**.mjs.map", "js/templates/**.handlebars", "lib/Service/Importer/fixtures/config-deckJson-schema.json", "lib/Service/Importer/fixtures/config-trelloApi-schema.json", "lib/Service/Importer/fixtures/config-trelloJson-schema.json", "lib/Service/fixtures/default-board.json", "screenshots/screenshot1.png", "src/assets/file-placeholder.svg", "img/favicon.ico", "img/favicon.png", "img/favicon.svg", "img/activity.svg", "img/activity-dark.svg", "img/deck.svg", "img/deck-current.svg", "img/deck-dark.svg", "img/details-white.svg", "img/card.svg", "img/sample-image.jpg"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2019 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>1.15.2</version>
|
||||
<version>2.0.0-dev.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<namespace>Deck</namespace>
|
||||
@@ -42,7 +42,7 @@
|
||||
<database min-version="9.4">pgsql</database>
|
||||
<database>sqlite</database>
|
||||
<database min-version="8.0">mysql</database>
|
||||
<nextcloud min-version="31" max-version="31"/>
|
||||
<nextcloud min-version="33" max-version="33"/>
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\Deck\Cron\DeleteCron</job>
|
||||
@@ -54,11 +54,15 @@
|
||||
<live-migration>
|
||||
<step>OCA\Deck\Migration\DeletedCircleCleanup</step>
|
||||
</live-migration>
|
||||
<post-migration>
|
||||
<step>OCA\Deck\Migration\LabelMismatchCleanup</step>
|
||||
</post-migration>
|
||||
</repair-steps>
|
||||
<commands>
|
||||
<command>OCA\Deck\Command\UserExport</command>
|
||||
<command>OCA\Deck\Command\BoardImport</command>
|
||||
<command>OCA\Deck\Command\TransferOwnership</command>
|
||||
<command>OCA\Deck\Command\CalendarToggle</command>
|
||||
</commands>
|
||||
<activity>
|
||||
<settings>
|
||||
|
||||
@@ -29,6 +29,7 @@ return [
|
||||
['name' => 'board#clone', 'url' => '/boards/{boardId}/clone', 'verb' => 'POST'],
|
||||
['name' => 'board#transferOwner', 'url' => '/boards/{boardId}/transferOwner', 'verb' => 'PUT'],
|
||||
['name' => 'board#export', 'url' => '/boards/{boardId}/export', 'verb' => 'GET'],
|
||||
['name' => 'board#import', 'url' => '/boards/import', 'verb' => 'POST'],
|
||||
|
||||
// stacks
|
||||
['name' => 'stack#index', 'url' => '/stacks/{boardId}', 'verb' => 'GET'],
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"roave/security-advisories": "dev-master",
|
||||
"phpunit/phpunit": "^9",
|
||||
"nextcloud/coding-standard": "^1.1",
|
||||
"nextcloud/ocp": "dev-stable31",
|
||||
"nextcloud/ocp": "dev-master",
|
||||
"psalm/phar": "^5.13"
|
||||
},
|
||||
"config": {
|
||||
|
||||
157
composer.lock
generated
157
composer.lock
generated
@@ -4,146 +4,34 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "c89537a172cee5c19093b4ea0cb5365c",
|
||||
"content-hash": "6950663d9d213151028e780637480220",
|
||||
"packages": [
|
||||
{
|
||||
"name": "icecave/parity",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/icecave/parity.git",
|
||||
"reference": "0109fef58b3230d23b20b2ac52ecdf477218d300"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/icecave/parity/zipball/0109fef58b3230d23b20b2ac52ecdf477218d300",
|
||||
"reference": "0109fef58b3230d23b20b2ac52ecdf477218d300",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"icecave/repr": "~1",
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"eloquent/liberator": "~1",
|
||||
"icecave/archer": "~1"
|
||||
},
|
||||
"suggest": {
|
||||
"eloquent/asplode": "Drop-in exception-based error handling."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Icecave\\Parity": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "James Harris",
|
||||
"email": "james.harris@icecave.com.au",
|
||||
"homepage": "https://github.com/jmalloc"
|
||||
}
|
||||
],
|
||||
"description": "A customizable deep comparison library.",
|
||||
"homepage": "https://github.com/IcecaveStudios/parity",
|
||||
"keywords": [
|
||||
"compare",
|
||||
"comparison",
|
||||
"equal",
|
||||
"equality",
|
||||
"greater",
|
||||
"less",
|
||||
"sort",
|
||||
"sorting"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/icecave/parity/issues",
|
||||
"source": "https://github.com/icecave/parity/tree/1.0.0"
|
||||
},
|
||||
"time": "2014-01-17T05:56:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "icecave/repr",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/icecave/repr.git",
|
||||
"reference": "8a3d2953adf5f464a06e3e2587aeacc97e2bed07"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/icecave/repr/zipball/8a3d2953adf5f464a06e3e2587aeacc97e2bed07",
|
||||
"reference": "8a3d2953adf5f464a06e3e2587aeacc97e2bed07",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"icecave/archer": "~1"
|
||||
},
|
||||
"suggest": {
|
||||
"eloquent/asplode": "Drop-in exception-based error handling."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Icecave\\Repr\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "James Harris",
|
||||
"email": "james.harris@icecave.com.au",
|
||||
"homepage": "https://github.com/jmalloc"
|
||||
}
|
||||
],
|
||||
"description": "A library for generating string representations of any value, inspired by Python's reprlib library.",
|
||||
"homepage": "https://github.com/IcecaveStudios/repr",
|
||||
"keywords": [
|
||||
"human",
|
||||
"readable",
|
||||
"repr",
|
||||
"representation",
|
||||
"string"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/icecave/repr/issues",
|
||||
"source": "https://github.com/icecave/repr/tree/1.0.1"
|
||||
},
|
||||
"time": "2014-07-25T05:44:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "justinrainbow/json-schema",
|
||||
"version": "6.0.0",
|
||||
"version": "6.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jsonrainbow/json-schema.git",
|
||||
"reference": "a38c6198d53b09c0702f440585a4f4a5d9137bd9"
|
||||
"reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/a38c6198d53b09c0702f440585a4f4a5d9137bd9",
|
||||
"reference": "a38c6198d53b09c0702f440585a4f4a5d9137bd9",
|
||||
"url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ce1fd2d47799bb60668643bc6220f6278a4c1d02",
|
||||
"reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"icecave/parity": "1.0.0",
|
||||
"marc-mabe/php-enum": "^2.0 || ^3.0 || ^4.0",
|
||||
"php": ">=5.3.3"
|
||||
"ext-json": "*",
|
||||
"marc-mabe/php-enum": "^4.0",
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "~2.2.20 || ~2.19.0",
|
||||
"friendsofphp/php-cs-fixer": "3.3.0",
|
||||
"json-schema/json-schema-test-suite": "1.2.0",
|
||||
"phpunit/phpunit": "^4.8.35"
|
||||
"marc-mabe/php-enum-phpstan": "^2.0",
|
||||
"phpspec/prophecy": "^1.19",
|
||||
"phpstan/phpstan": "^1.12",
|
||||
"phpunit/phpunit": "^8.5"
|
||||
},
|
||||
"bin": [
|
||||
"bin/validate-json"
|
||||
@@ -189,9 +77,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/jsonrainbow/json-schema/issues",
|
||||
"source": "https://github.com/jsonrainbow/json-schema/tree/6.0.0"
|
||||
"source": "https://github.com/jsonrainbow/json-schema/tree/6.4.2"
|
||||
},
|
||||
"time": "2024-07-30T17:49:21+00:00"
|
||||
"time": "2025-06-03T18:27:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "marc-mabe/php-enum",
|
||||
@@ -488,16 +376,16 @@
|
||||
},
|
||||
{
|
||||
"name": "nextcloud/ocp",
|
||||
"version": "dev-stable31",
|
||||
"version": "dev-master",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nextcloud-deps/ocp.git",
|
||||
"reference": "77679c75abf21dfc48a75fd282dea09b09ac096c"
|
||||
"reference": "6a5219dda0583a45fb5541719de83c9b673b3efa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/77679c75abf21dfc48a75fd282dea09b09ac096c",
|
||||
"reference": "77679c75abf21dfc48a75fd282dea09b09ac096c",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/6a5219dda0583a45fb5541719de83c9b673b3efa",
|
||||
"reference": "6a5219dda0583a45fb5541719de83c9b673b3efa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -507,10 +395,11 @@
|
||||
"psr/event-dispatcher": "^1.0",
|
||||
"psr/log": "^3.0.2"
|
||||
},
|
||||
"default-branch": true,
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-stable31": "31.0.0-dev"
|
||||
"dev-master": "33.0.0-dev"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
@@ -530,9 +419,9 @@
|
||||
"description": "Composer package containing Nextcloud's public OCP API and the unstable NCU API",
|
||||
"support": {
|
||||
"issues": "https://github.com/nextcloud-deps/ocp/issues",
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/stable31"
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
|
||||
},
|
||||
"time": "2025-07-04T00:53:40+00:00"
|
||||
"time": "2025-09-06T00:45:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
|
||||
@@ -129,3 +129,81 @@ describe('Board cloning', function() {
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('Board export', function() {
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
})
|
||||
|
||||
it('Exports a board as JSON', function() {
|
||||
const boardName = 'Export JSON board'
|
||||
const board = sampleBoard(boardName)
|
||||
cy.createExampleBoard({ user, board }).then((board) => {
|
||||
const boardId = board.id
|
||||
cy.visit(`/apps/deck/board/${boardId}`)
|
||||
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + '")')
|
||||
.parent()
|
||||
.find('button[aria-label="Actions"]')
|
||||
.click()
|
||||
cy.get('button:contains("Export board")')
|
||||
.click()
|
||||
cy.get('.modal-container .checkbox-radio-switch__text:contains("Export as JSON")')
|
||||
.click()
|
||||
cy.get('.modal-container button:contains("Export")')
|
||||
.click()
|
||||
|
||||
const downloadsFolder = Cypress.config('downloadsFolder')
|
||||
cy.readFile(`${downloadsFolder}/${boardName}.json`)
|
||||
})
|
||||
})
|
||||
|
||||
it('Exports a board as CSV', function() {
|
||||
const boardName = 'Export CSV board'
|
||||
const board = sampleBoard(boardName)
|
||||
cy.createExampleBoard({ user, board }).then((board) => {
|
||||
const boardId = board.id
|
||||
cy.visit(`/apps/deck/board/${boardId}`)
|
||||
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + '")')
|
||||
.parent()
|
||||
.find('button[aria-label="Actions"]')
|
||||
.click()
|
||||
cy.get('button:contains("Export board")')
|
||||
.click()
|
||||
cy.get('.modal-container .checkbox-radio-switch__text:contains("Export as CSV")')
|
||||
.click()
|
||||
cy.get('.modal-container button:contains("Export")')
|
||||
.click()
|
||||
|
||||
const downloadsFolder = Cypress.config('downloadsFolder')
|
||||
cy.readFile(`${downloadsFolder}/${boardName}.csv`)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('Board import', function() {
|
||||
before(function () {
|
||||
cy.createUser(user)
|
||||
})
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
cy.visit('/apps/deck')
|
||||
})
|
||||
|
||||
it('Imports a board from JSON', function() {
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry:contains("Import board")')
|
||||
.should('be.visible')
|
||||
.click()
|
||||
|
||||
// Upload a JSON file
|
||||
cy.get('input[type="file"]')
|
||||
.selectFile([
|
||||
{
|
||||
contents: 'cypress/fixtures/import-board.json',
|
||||
fileName: 'import-board.json',
|
||||
},
|
||||
], { force: true })
|
||||
|
||||
cy.get('.app-navigation__list .app-navigation-entry:contains("Imported board")')
|
||||
.should('be.visible')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -302,6 +302,9 @@ describe('Card', function () {
|
||||
.first().click()
|
||||
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible').click()
|
||||
|
||||
// Add delay to ensure the events are bound
|
||||
cy.wait(1000)
|
||||
|
||||
cy.get('#app-sidebar-vue [data-test="tag-selector"] .vs__dropdown-toggle').should('be.visible').click()
|
||||
cy.get('.vs__dropdown-menu .tag:contains("Action needed")').should('be.visible').click()
|
||||
cy.get('.vs__dropdown-menu .tag:contains("Later")').should('be.visible').click()
|
||||
|
||||
@@ -22,10 +22,10 @@ describe('Deck dashboard', function() {
|
||||
.should($el => expect($el.text().trim()).to.equal('Upcoming cards'))
|
||||
})
|
||||
|
||||
it('Can see the default "Personal Board" created for user by default', function() {
|
||||
it('Can see the default "Welcome Board" created for user by default', function() {
|
||||
cy.visit('/apps/deck')
|
||||
|
||||
const defaultBoard = 'Personal'
|
||||
const defaultBoard = 'Welcome to Nextcloud Deck!'
|
||||
|
||||
cy.get('.app-navigation-entry-wrapper[icon=icon-deck]')
|
||||
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + defaultBoard + ')')
|
||||
|
||||
102
cypress/fixtures/import-board.json
Normal file
102
cypress/fixtures/import-board.json
Normal file
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"boards": [
|
||||
{
|
||||
"id": 70,
|
||||
"title": "Imported board",
|
||||
"owner": "unvjrmwuag",
|
||||
"color": "00ff00",
|
||||
"archived": false,
|
||||
"labels": [
|
||||
{
|
||||
"id": 293,
|
||||
"title": "Finished",
|
||||
"color": "31CC7C",
|
||||
"boardId": 70,
|
||||
"cardId": null,
|
||||
"lastModified": 0,
|
||||
"ETag": "cfcd208495d565ef66e7dff9f98764da"
|
||||
},
|
||||
{
|
||||
"id": 294,
|
||||
"title": "To review",
|
||||
"color": "317CCC",
|
||||
"boardId": 70,
|
||||
"cardId": null,
|
||||
"lastModified": 0,
|
||||
"ETag": "cfcd208495d565ef66e7dff9f98764da"
|
||||
},
|
||||
{
|
||||
"id": 295,
|
||||
"title": "Action needed",
|
||||
"color": "FF7A66",
|
||||
"boardId": 70,
|
||||
"cardId": null,
|
||||
"lastModified": 0,
|
||||
"ETag": "cfcd208495d565ef66e7dff9f98764da"
|
||||
},
|
||||
{
|
||||
"id": 296,
|
||||
"title": "Later",
|
||||
"color": "F1DB50",
|
||||
"boardId": 70,
|
||||
"cardId": null,
|
||||
"lastModified": 0,
|
||||
"ETag": "cfcd208495d565ef66e7dff9f98764da"
|
||||
}
|
||||
],
|
||||
"acl": [],
|
||||
"permissions": [],
|
||||
"users": [],
|
||||
"stacks": {
|
||||
"114": {
|
||||
"id": 114,
|
||||
"title": "TestList",
|
||||
"boardId": 70,
|
||||
"deletedAt": 0,
|
||||
"lastModified": 1743495533,
|
||||
"cards": [
|
||||
{
|
||||
"id": 124,
|
||||
"title": "Hello world",
|
||||
"description": "# Hello world",
|
||||
"descriptionPrev": null,
|
||||
"stackId": 114,
|
||||
"type": "plain",
|
||||
"lastModified": 1743495533,
|
||||
"lastEditor": null,
|
||||
"createdAt": 1743495533,
|
||||
"labels": [],
|
||||
"assignedUsers": null,
|
||||
"attachments": null,
|
||||
"attachmentCount": null,
|
||||
"owner": {
|
||||
"primaryKey": "unvjrmwuag",
|
||||
"uid": "unvjrmwuag",
|
||||
"displayname": "unvjrmwuag",
|
||||
"type": 0
|
||||
},
|
||||
"order": 999,
|
||||
"archived": false,
|
||||
"done": null,
|
||||
"duedate": null,
|
||||
"notified": false,
|
||||
"deletedAt": 0,
|
||||
"commentsUnread": 0,
|
||||
"commentsCount": 0,
|
||||
"relatedStack": null,
|
||||
"relatedBoard": null,
|
||||
"ETag": "aa85bb973089e7fbc0bbf122e926c23f"
|
||||
}
|
||||
],
|
||||
"order": 0,
|
||||
"ETag": "aa85bb973089e7fbc0bbf122e926c23f"
|
||||
}
|
||||
},
|
||||
"activeSessions": [],
|
||||
"deletedAt": 0,
|
||||
"lastModified": 1743495533,
|
||||
"settings": [],
|
||||
"ETag": "aa85bb973089e7fbc0bbf122e926c23f"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -102,7 +102,11 @@ Cypress.Commands.add('shareBoardWithUi', (query, userId=query) => {
|
||||
cy.intercept({ method: 'GET', url: `**/ocs/v2.php/apps/files_sharing/api/v1/sharees?search=${query}*` }).as('fetchRecipients')
|
||||
cy.get('[aria-label="Open details"]').click()
|
||||
cy.get('.app-sidebar').should('be.visible')
|
||||
cy.get('.select input').type(`${query}`)
|
||||
|
||||
// Add delay to ensure the events are bound
|
||||
cy.wait(1000)
|
||||
|
||||
cy.get('.select input').click().type(`${query}`)
|
||||
cy.wait('@fetchRecipients', { timeout: 7000 })
|
||||
|
||||
cy.get('.vs__dropdown-menu .option').first().contains(query)
|
||||
|
||||
BIN
img/sample-image.jpg
Normal file
BIN
img/sample-image.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 188 KiB |
30
l10n/be.js
30
l10n/be.js
@@ -1,33 +1,63 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"The file was uploaded" : "Файл быў запампаваны.",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Памер запампаванага файла перавышае значэнне дырэктывы upload_max_filesize у php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Памер запампаванага файла перавышае значэнне дырэктывы MAX_FILE_SIZE у HTML форме",
|
||||
"The file was only partially uploaded" : "Файл быў запампаваны толькі часткова",
|
||||
"No file was uploaded" : "Ніводзін файл не быў запампаваны",
|
||||
"Missing a temporary folder" : "Адсутнічае часовая папка",
|
||||
"Could not write file to disk" : "Не ўдалося запісаць файл на дыск",
|
||||
"A PHP extension stopped the file upload" : "Пашырэнне PHP спыніла запампоўванне файла",
|
||||
"copy" : "копія",
|
||||
"Done" : "Гатова",
|
||||
"File" : "Файл",
|
||||
"Cancel" : "Скасаваць",
|
||||
"File already exists" : "Файл ужо існуе",
|
||||
"A file with the name {filename} already exists." : "Файл з назвай {filename} ужо існуе.",
|
||||
"Do you want to overwrite it?" : "Хочаце перазапісаць яго?",
|
||||
"Overwrite file" : "Перазапісаць файл",
|
||||
"Keep existing file" : "Пакінуць існуючы файл",
|
||||
"Active filters" : "Актыўныя фільтры",
|
||||
"Apply filter" : "Ужыць фільтр",
|
||||
"Open" : "Адкрыць",
|
||||
"Clear filter" : "Ачысціць фільтр",
|
||||
"Open details" : "Адкрыць падрабязнасці",
|
||||
"Details" : "Падрабязнасці",
|
||||
"Sharing" : "Абагульванне",
|
||||
"Tags" : "Тэгі",
|
||||
"Activity" : "Актыўнасць",
|
||||
"Undo" : "Адрабіць",
|
||||
"Transfer" : "Перадаць",
|
||||
"(Group)" : "(Група)",
|
||||
"Can edit" : "Можа рэдагаваць",
|
||||
"Can share" : "Можа абагульваць",
|
||||
"Owner" : "Уладальнік",
|
||||
"Delete" : "Выдаліць",
|
||||
"Edit" : "Рэдагаваць",
|
||||
"Members" : "Удзельнікі",
|
||||
"Invalid path selected" : "Выбраны памылковы шлях",
|
||||
"Show in Files" : "Паказаць у Файлах",
|
||||
"Download" : "Спампаваць",
|
||||
"Modified" : "Зменены",
|
||||
"Comments" : "Каментарыі",
|
||||
"Save" : "Захаваць",
|
||||
"Created:" : "Створана:",
|
||||
"Reply" : "Адказаць",
|
||||
"Update" : "Абнавіць",
|
||||
"Description" : "Апісанне",
|
||||
"(group)" : "(група)",
|
||||
"Open link" : "Адкрыць спасылку",
|
||||
"seconds ago" : "с таму",
|
||||
"Keyboard shortcuts" : "Спалучэнні клавіш",
|
||||
"Keyboard shortcut" : "Спалучэнне клавіш",
|
||||
"Action" : "Дзеянне",
|
||||
"Search" : "Пошук",
|
||||
"Shared with you" : "Абагулена з вамі",
|
||||
"Cancel edit" : "Скасаваць рэдагаванне",
|
||||
"An error occurred" : "Узнікла памылка",
|
||||
"No notifications" : "Няма апавяшчэнняў",
|
||||
"Export" : "Экспарт",
|
||||
"Today" : "Сёння",
|
||||
"Close" : "Закрыць",
|
||||
"Share" : "Абагуліць"
|
||||
|
||||
30
l10n/be.json
30
l10n/be.json
@@ -1,31 +1,61 @@
|
||||
{ "translations": {
|
||||
"The file was uploaded" : "Файл быў запампаваны.",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Памер запампаванага файла перавышае значэнне дырэктывы upload_max_filesize у php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Памер запампаванага файла перавышае значэнне дырэктывы MAX_FILE_SIZE у HTML форме",
|
||||
"The file was only partially uploaded" : "Файл быў запампаваны толькі часткова",
|
||||
"No file was uploaded" : "Ніводзін файл не быў запампаваны",
|
||||
"Missing a temporary folder" : "Адсутнічае часовая папка",
|
||||
"Could not write file to disk" : "Не ўдалося запісаць файл на дыск",
|
||||
"A PHP extension stopped the file upload" : "Пашырэнне PHP спыніла запампоўванне файла",
|
||||
"copy" : "копія",
|
||||
"Done" : "Гатова",
|
||||
"File" : "Файл",
|
||||
"Cancel" : "Скасаваць",
|
||||
"File already exists" : "Файл ужо існуе",
|
||||
"A file with the name {filename} already exists." : "Файл з назвай {filename} ужо існуе.",
|
||||
"Do you want to overwrite it?" : "Хочаце перазапісаць яго?",
|
||||
"Overwrite file" : "Перазапісаць файл",
|
||||
"Keep existing file" : "Пакінуць існуючы файл",
|
||||
"Active filters" : "Актыўныя фільтры",
|
||||
"Apply filter" : "Ужыць фільтр",
|
||||
"Open" : "Адкрыць",
|
||||
"Clear filter" : "Ачысціць фільтр",
|
||||
"Open details" : "Адкрыць падрабязнасці",
|
||||
"Details" : "Падрабязнасці",
|
||||
"Sharing" : "Абагульванне",
|
||||
"Tags" : "Тэгі",
|
||||
"Activity" : "Актыўнасць",
|
||||
"Undo" : "Адрабіць",
|
||||
"Transfer" : "Перадаць",
|
||||
"(Group)" : "(Група)",
|
||||
"Can edit" : "Можа рэдагаваць",
|
||||
"Can share" : "Можа абагульваць",
|
||||
"Owner" : "Уладальнік",
|
||||
"Delete" : "Выдаліць",
|
||||
"Edit" : "Рэдагаваць",
|
||||
"Members" : "Удзельнікі",
|
||||
"Invalid path selected" : "Выбраны памылковы шлях",
|
||||
"Show in Files" : "Паказаць у Файлах",
|
||||
"Download" : "Спампаваць",
|
||||
"Modified" : "Зменены",
|
||||
"Comments" : "Каментарыі",
|
||||
"Save" : "Захаваць",
|
||||
"Created:" : "Створана:",
|
||||
"Reply" : "Адказаць",
|
||||
"Update" : "Абнавіць",
|
||||
"Description" : "Апісанне",
|
||||
"(group)" : "(група)",
|
||||
"Open link" : "Адкрыць спасылку",
|
||||
"seconds ago" : "с таму",
|
||||
"Keyboard shortcuts" : "Спалучэнні клавіш",
|
||||
"Keyboard shortcut" : "Спалучэнне клавіш",
|
||||
"Action" : "Дзеянне",
|
||||
"Search" : "Пошук",
|
||||
"Shared with you" : "Абагулена з вамі",
|
||||
"Cancel edit" : "Скасаваць рэдагаванне",
|
||||
"An error occurred" : "Узнікла памылка",
|
||||
"No notifications" : "Няма апавяшчэнняў",
|
||||
"Export" : "Экспарт",
|
||||
"Today" : "Сёння",
|
||||
"Close" : "Закрыць",
|
||||
"Share" : "Абагуліць"
|
||||
|
||||
@@ -128,8 +128,8 @@ OC.L10N.register(
|
||||
"Card not found" : "Card not found",
|
||||
"Path is already shared with this card" : "Path is already shared with this card",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD",
|
||||
"Personal planning and team project organization" : "Personal planning and team project organization",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized",
|
||||
"Personal planning and team project organization" : "Personal planning and team project organisation",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is a kanban style organisation tool aimed at personal planning and project organisation for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organisation\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organised",
|
||||
"Add board" : "Add board",
|
||||
"Card details" : "Card details",
|
||||
"Select the board to link to a project" : "Select the board to link to a project",
|
||||
|
||||
@@ -126,8 +126,8 @@
|
||||
"Card not found" : "Card not found",
|
||||
"Path is already shared with this card" : "Path is already shared with this card",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD",
|
||||
"Personal planning and team project organization" : "Personal planning and team project organization",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized",
|
||||
"Personal planning and team project organization" : "Personal planning and team project organisation",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck is a kanban style organisation tool aimed at personal planning and project organisation for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organisation\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organised",
|
||||
"Add board" : "Add board",
|
||||
"Card details" : "Card details",
|
||||
"Select the board to link to a project" : "Select the board to link to a project",
|
||||
|
||||
66
l10n/es.js
66
l10n/es.js
@@ -37,9 +37,9 @@ OC.L10N.register(
|
||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} ha archivado la tarjeta {card} en la lista {stack} del tablero {board}",
|
||||
"You have unarchived card {card} in list {stack} on board {board}" : "Has desarchivado la tarjeta {card} en la lista {stack} del tablero {board}",
|
||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} ha desarchivado la tarjeta {card} en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as done in list {stack} on board {board}" : "Has marcado la tarjeta {card} como completada en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as done in list {stack} on board {board}" : "Ud. ha marcado la tarjeta {card} como completada en la lista {stack} del tablero {board}",
|
||||
"{user} has marked card {card} as done in list {stack} on board {board}" : "{user} ha marcado la tarjeta {card} como completada en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as undone in list {stack} on board {board}" : "Has marcado la tarjeta {card} como no completada en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as undone in list {stack} on board {board}" : "Ud. ha marcado la tarjeta {card} como no completada en la lista {stack} del tablero {board}",
|
||||
"{user} has marked the card {card} as undone in list {stack} on board {board}" : "{user} ha marcado la tarjeta {card} como no completada en la lista {stack} del tablero {board}",
|
||||
"You have removed the due date of card {card}" : "Has eliminado la fecha de vencimiento de {card}",
|
||||
"{user} has removed the due date of card {card}" : "{user} ha eliminado la fecha de vencimiento de {card}",
|
||||
@@ -81,10 +81,14 @@ OC.L10N.register(
|
||||
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No se ha subido ningún archivo, o el tamaño del archivo excede el máximo de %s",
|
||||
"Invalid file type. Only JSON files are allowed." : "Tipo de archivo inválido. Solo se permiten archivos JSON",
|
||||
"Invalid JSON data" : "Datos JSON inválidos",
|
||||
"Failed to import board" : "Fallo al importar tablero",
|
||||
"Cards due today" : "Tarjetas que vencen hoy",
|
||||
"Cards due tomorrow" : "Tarjetas que vencen mañana",
|
||||
"Upcoming cards" : "Próximas tarjetas",
|
||||
"Load more" : "Cargar más",
|
||||
"Welcome to Nextcloud Deck!" : "¡Bienvenido a Nextcloud Deck!",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "La tarjeta \"%s\" en \"%s\" te ha sido asignada por %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} te ha asigando la tarjeta {deck-card} de {deck-board} a ti.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
|
||||
@@ -94,7 +98,7 @@ OC.L10N.register(
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} ha compartido {deck-board} contigo.",
|
||||
"Deck board" : "Tablero Deck",
|
||||
"Owned by %1$s" : "Apropiado por %1$s",
|
||||
"Owned by %1$s" : "Propiedad de %1$s",
|
||||
"Deck boards, cards and comments" : "Tableros Deck, tarjetas y comentarios",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "De %1$s, en %2$s/%3$s, propiedad de %4$s",
|
||||
"Create a new deck card" : "Crear una nueva tarjeta de tablero",
|
||||
@@ -107,17 +111,25 @@ OC.L10N.register(
|
||||
"Action needed" : "Acción necesaria",
|
||||
"Later" : "Después",
|
||||
"copy" : "copiar",
|
||||
"Read more inside" : "Lea más, adentro",
|
||||
"Custom lists - click to rename!" : "Listas personalizadas - ¡Haga clic para renombrar!",
|
||||
"To Do" : "Por hacer",
|
||||
"In Progress" : "En progreso",
|
||||
"Done" : "Hecho",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentario tiene más de %s caracteres.\nAñadido como adjunto a la tarjeta con el nombre %s.\nAccesible en la URL: %s.",
|
||||
"1. Open to learn more about boards and cards" : "1. Abra aquí para aprender más sobre los tableros y las tarjetas",
|
||||
"2. Drag cards left and right, up and down" : "2. Arrastre las tarjetas a la izquierda y derecha, arriba y abajo",
|
||||
"3. Apply rich formatting and link content" : "3. Aplique formato enriquecido y contenido a los enlaces",
|
||||
"4. Share, comment and collaborate!" : "4. ¡Comparta, comente y colabore!",
|
||||
"Create your first card!" : "¡Cree su primera tarjeta!",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentario tiene más de %s caracteres.\nSe ha añadido como adjunto a la tarjeta con el nombre %s.\nAccesible en la URL: %s.",
|
||||
"Attachments" : "Adjuntos",
|
||||
"File" : "Archivo",
|
||||
"date" : "fecha",
|
||||
"Card not found" : "Tarjeta no encontrada",
|
||||
"Path is already shared with this card" : "La ruta ya se ha compartido con esta tarjeta",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Fecha no válida, el formato de las fechas debe ser AAAA-MM-DD",
|
||||
"Personal planning and team project organization" : "Planificación personal y organización de proyecto de equipo",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck es una herramienta de organización de estilo kanban dirigida a la planificación personal y la organización de proyectos para equipos integrados con Nextcloud.\n\n\n- 📥 Agrega tus tareas a las tarjetas y ordénalas.\n- 📄 Escriba notas adicionales\n- 🔖 Asignar etiquetas para una organización mejor\n- 👥 Comparte con tu equipo, amigos o familia.\n- 📎 Adjuntar archivos e incrustarlos en su descripción\n- 💬 Discuta con su equipo usando comentarios.\n- ⚡ Mantenga un registro de los cambios en el flujo de actividad\n- 🚀 Organiza tu proyecto",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck es una herramienta de organización de estilo kanban dirigida a la planificación personal y la organización de proyectos para equipos, integrada a Nextcloud.\n\n\n- 📥 Agregue sus tareas a las tarjetas y póngalas en orden.\n- 📄 Escriba notas adicionales en Markdown\n- 🔖 Asigne etiquetas para una organización mejor\n- 👥 Comparta con su equipo, amigos o familia.\n- 📎 Adjunte archivos e incruste los mismos en su descripción Markdown\n- 💬 Discuta con su equipo usando comentarios.\n- ⚡ Mantenga un registro de los cambios en el flujo de actividad\n- 🚀 Organice su proyecto",
|
||||
"Add board" : "Añadir tablero",
|
||||
"Card details" : "Detalles de la tarjeta",
|
||||
"Select the board to link to a project" : "Selecciona el tablero que enlazar a un proyecto",
|
||||
@@ -165,8 +177,8 @@ OC.L10N.register(
|
||||
"Hide archived cards" : "Ocultar tarjetas archivadas",
|
||||
"Show archived cards" : "Mostrar tarjetas archivadas",
|
||||
"Toggle compact mode" : "Mostrar/ocultar modo compacto",
|
||||
"Hide card cover images" : "Ocultar la imagen principal de las tarjetas",
|
||||
"Show card cover images" : "Mostrar la imagen principal de las tarjetas",
|
||||
"Hide card cover images" : "Ocultar la imagen de portada de las tarjetas",
|
||||
"Show card cover images" : "Mostrar la imagen de portada de las tarjetas",
|
||||
"Open details" : "Abrir detalles",
|
||||
"Details" : "Detalles",
|
||||
"Currently present people" : "Personas presentes actualmente",
|
||||
@@ -181,11 +193,11 @@ OC.L10N.register(
|
||||
"Undo" : "Deshacer",
|
||||
"Deleted cards" : "Cartas eliminadas",
|
||||
"Failed to create share with {displayName}" : "Fallo al crear el recurso compartido denominado {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "¿Estás seguro de que quieres transferir el tablero {título} a {usuario}?",
|
||||
"Transfer the board." : "Transfiere el tablero.",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "¿Está seguro de que quiere transferir el tablero {title} a {user}?",
|
||||
"Transfer the board." : "Transfiera el tablero.",
|
||||
"Transfer" : "Transferir",
|
||||
"The board has been transferred to {user}" : "El tablero ha sido transferido a {usuario}",
|
||||
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
|
||||
"The board has been transferred to {user}" : "El tablero ha sido transferido a {user}",
|
||||
"Failed to transfer the board to {user}" : "Fallo al transferir el tablero a {user}",
|
||||
"Share board with a user, group or team …" : "Compartir tablero con un usuario, grupo o equipo …",
|
||||
"Searching for users, groups and teams …" : "Buscando usuarios, grupos y equipos …",
|
||||
"No participants found" : "No se encontraron participantes",
|
||||
@@ -218,7 +230,7 @@ OC.L10N.register(
|
||||
"Invalid path selected" : "Ruta seleccionada no válida",
|
||||
"Upload new files" : "Subir nuevos archivos",
|
||||
"Share from Files" : "Compartir desde Archivos",
|
||||
"Pending share" : "Pendiente de compartir",
|
||||
"Pending share" : "Recurso compartido pendiente",
|
||||
"Add this attachment" : "Añadir este adjunto",
|
||||
"Show in Files" : "Mostrar en Archivos",
|
||||
"Download" : "Descargar",
|
||||
@@ -228,6 +240,7 @@ OC.L10N.register(
|
||||
"Modified" : "Modificado",
|
||||
"Created" : "Creado",
|
||||
"The title cannot be empty." : "El título no puede estar vacío.",
|
||||
"Cannot close unsaved card!" : "¡No se puede cerrar esta tarjeta no guardada!",
|
||||
"Open in sidebar view" : "Abrir en vista de barra lateral",
|
||||
"Open in bigger view" : "Abrir en vista más grande",
|
||||
"Comments" : "Comentarios",
|
||||
@@ -242,6 +255,7 @@ OC.L10N.register(
|
||||
"Reply" : "Responder",
|
||||
"Update" : "Actualizar",
|
||||
"Write a description …" : "Escribe una descripción...",
|
||||
"Could not save description" : "No se pudo guardar la descripción",
|
||||
"Description" : "Descripción",
|
||||
"(Unsaved)" : "(Sin salvar)",
|
||||
"(Saving…)" : "(Guardando...)",
|
||||
@@ -259,12 +273,12 @@ OC.L10N.register(
|
||||
"Set due date for this weekend" : "Establecer este fin de semana como fecha de vencimiento",
|
||||
"Next week – {timeLocale}" : "Próxima semana – {timeLocale}",
|
||||
"Set due date for next week" : "Establecer la próxima semana como fecha de vencimiento",
|
||||
"Assign a due date to this card…" : "Asignar una fecha de caducidad a esta tarjeta…",
|
||||
"Assign a due date to this card…" : "Asignar una fecha de vencimiento a esta tarjeta…",
|
||||
"Set a due date" : "Fijar una fecha límite",
|
||||
"Add due date" : "Añadir fecha de vencimiento",
|
||||
"Choose a date" : "Elija una fecha",
|
||||
"Remove due date" : "Eliminar fecha límite",
|
||||
"Mark as done" : "Marcar como hecho",
|
||||
"Mark as done" : "Marcar como completado",
|
||||
"Due at:" : "Vence el:",
|
||||
"Not done" : "No está finalizado",
|
||||
"Unarchive card" : "Desarchivar tarjeta",
|
||||
@@ -328,6 +342,7 @@ OC.L10N.register(
|
||||
"An error occurred" : "Ocurrió un error",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "¿Está seguro de querer eliminar el tablero {title}? Esto eliminará todos los datos del tablero incluyendo las tarjetas archivadas.",
|
||||
"Delete the board?" : "¿Borrar el tablero?",
|
||||
"Exporting board..." : "Exportando tablero...",
|
||||
"Board details" : "Detalles del tablero",
|
||||
"Edit board" : "Editar tablero",
|
||||
"Clone board" : "Clonar tablero",
|
||||
@@ -340,16 +355,22 @@ OC.L10N.register(
|
||||
"Assigned cards" : "Tarjetas asignadas",
|
||||
"No notifications" : "No hay notificaciones",
|
||||
"Delete board" : "Eliminar tablero",
|
||||
"Importing board..." : "Importando tablero...",
|
||||
"Board imported successfully" : "Se importó el tablero exitosamente",
|
||||
"Import board" : "Importar tablero",
|
||||
"Clone {boardTitle}" : "Clonar {boardTitle}",
|
||||
"Clone cards" : "Clonar tarjetas",
|
||||
"Clone assignments" : "Clonar asignaciones",
|
||||
"Clone labels" : "Clonar etiquetas",
|
||||
"Clone due dates" : "Clonar fechas límite",
|
||||
"Clone due dates" : "Clonar fechas de vencimiento",
|
||||
"Advanced options" : "Opciones avanzadas",
|
||||
"Move all cards to the first list" : "Mover todas las tarjetas a la primera lista",
|
||||
"Restore archived cards" : "Restaurar tarjetas archivadas",
|
||||
"Clone" : "Clonar",
|
||||
"Export {boardTitle}" : "Exportar {boardTitle}",
|
||||
"Export as JSON" : "Exportar como JSON",
|
||||
"Export as CSV" : "Exportar como CSV",
|
||||
"Note: Only the JSON format is supported for importing back into the Deck app." : "Nota: Solo el formato JSON es soportar al importar de vuelta en la app Deck.",
|
||||
"Export" : "Exportar",
|
||||
"Loading filtered view" : "Cargando vista filtrada",
|
||||
"Today" : "Hoy",
|
||||
@@ -357,17 +378,17 @@ OC.L10N.register(
|
||||
"No due" : "Sin finalizar",
|
||||
"Search for {searchQuery} in all boards" : "Buscar {searchQuery} en todos los tableros",
|
||||
"No results found" : "No se encontraron resultados",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Tablero Deck {name}\n* Última modificación en {lastMod}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creada en {created}\n* Ultima moficiación en {lastMod}\n* {nbAttachments} adjuntos\n* {nbComments} comentarios",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Tablero Deck {name}\n* Se modificó por última vez el {lastMod}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creado en {created}\n* Se modificó por última vez el {lastMod}\n* {nbAttachments} adjuntos\n* {nbComments} comentarios",
|
||||
"{nbCards} cards" : "{nbCards} tarjetas",
|
||||
"Due on {date}" : "Vence en {date}",
|
||||
"{stack} in {board}" : "{stack} en {board}",
|
||||
"Click to expand description" : "Pulse para expandir la descripción",
|
||||
"Click to expand comment" : "Pulse para expandir el comentario",
|
||||
"Click to expand description" : "Haga clic para expandir la descripción",
|
||||
"Click to expand comment" : "Haga clic para expandir el comentario",
|
||||
"Create card" : "Crear tarjeta",
|
||||
"Create a new card" : "Crear una nueva tarjeta",
|
||||
"Create a new card" : "Crear una tarjeta nueva",
|
||||
"Card title" : "Título de la tarjeta",
|
||||
"Creating the new card …" : "Creando una nueva tarjeta …",
|
||||
"Creating the new card …" : "Creando una tarjeta nueva …",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "La tarjeta \"{card}\" fue añadida a \"{board}\"",
|
||||
"Open card" : "Abrir tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -383,7 +404,8 @@ OC.L10N.register(
|
||||
"Something went wrong" : "Algo ha ido mal",
|
||||
"Failed to upload {name}" : "Error al subir {name}",
|
||||
"Maximum file size of {size} exceeded" : "Tamaño máximo de archivo de {size} excedido",
|
||||
"Due date" : "Fecha de fin",
|
||||
"Assigned users" : "Usuarios asignados",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Error creating the share" : "Error creando el recurso compartido",
|
||||
"Share with a Deck card" : "Compartir con una tarjeta de Deck",
|
||||
"Share {file} with a Deck card" : "Compartir {file} con una tarjeta de Deck",
|
||||
|
||||
66
l10n/es.json
66
l10n/es.json
@@ -35,9 +35,9 @@
|
||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} ha archivado la tarjeta {card} en la lista {stack} del tablero {board}",
|
||||
"You have unarchived card {card} in list {stack} on board {board}" : "Has desarchivado la tarjeta {card} en la lista {stack} del tablero {board}",
|
||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} ha desarchivado la tarjeta {card} en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as done in list {stack} on board {board}" : "Has marcado la tarjeta {card} como completada en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as done in list {stack} on board {board}" : "Ud. ha marcado la tarjeta {card} como completada en la lista {stack} del tablero {board}",
|
||||
"{user} has marked card {card} as done in list {stack} on board {board}" : "{user} ha marcado la tarjeta {card} como completada en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as undone in list {stack} on board {board}" : "Has marcado la tarjeta {card} como no completada en la lista {stack} del tablero {board}",
|
||||
"You have marked the card {card} as undone in list {stack} on board {board}" : "Ud. ha marcado la tarjeta {card} como no completada en la lista {stack} del tablero {board}",
|
||||
"{user} has marked the card {card} as undone in list {stack} on board {board}" : "{user} ha marcado la tarjeta {card} como no completada en la lista {stack} del tablero {board}",
|
||||
"You have removed the due date of card {card}" : "Has eliminado la fecha de vencimiento de {card}",
|
||||
"{user} has removed the due date of card {card}" : "{user} ha eliminado la fecha de vencimiento de {card}",
|
||||
@@ -79,10 +79,14 @@
|
||||
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No se ha subido ningún archivo, o el tamaño del archivo excede el máximo de %s",
|
||||
"Invalid file type. Only JSON files are allowed." : "Tipo de archivo inválido. Solo se permiten archivos JSON",
|
||||
"Invalid JSON data" : "Datos JSON inválidos",
|
||||
"Failed to import board" : "Fallo al importar tablero",
|
||||
"Cards due today" : "Tarjetas que vencen hoy",
|
||||
"Cards due tomorrow" : "Tarjetas que vencen mañana",
|
||||
"Upcoming cards" : "Próximas tarjetas",
|
||||
"Load more" : "Cargar más",
|
||||
"Welcome to Nextcloud Deck!" : "¡Bienvenido a Nextcloud Deck!",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "La tarjeta \"%s\" en \"%s\" te ha sido asignada por %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} te ha asigando la tarjeta {deck-card} de {deck-board} a ti.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
|
||||
@@ -92,7 +96,7 @@
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} ha compartido {deck-board} contigo.",
|
||||
"Deck board" : "Tablero Deck",
|
||||
"Owned by %1$s" : "Apropiado por %1$s",
|
||||
"Owned by %1$s" : "Propiedad de %1$s",
|
||||
"Deck boards, cards and comments" : "Tableros Deck, tarjetas y comentarios",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "De %1$s, en %2$s/%3$s, propiedad de %4$s",
|
||||
"Create a new deck card" : "Crear una nueva tarjeta de tablero",
|
||||
@@ -105,17 +109,25 @@
|
||||
"Action needed" : "Acción necesaria",
|
||||
"Later" : "Después",
|
||||
"copy" : "copiar",
|
||||
"Read more inside" : "Lea más, adentro",
|
||||
"Custom lists - click to rename!" : "Listas personalizadas - ¡Haga clic para renombrar!",
|
||||
"To Do" : "Por hacer",
|
||||
"In Progress" : "En progreso",
|
||||
"Done" : "Hecho",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentario tiene más de %s caracteres.\nAñadido como adjunto a la tarjeta con el nombre %s.\nAccesible en la URL: %s.",
|
||||
"1. Open to learn more about boards and cards" : "1. Abra aquí para aprender más sobre los tableros y las tarjetas",
|
||||
"2. Drag cards left and right, up and down" : "2. Arrastre las tarjetas a la izquierda y derecha, arriba y abajo",
|
||||
"3. Apply rich formatting and link content" : "3. Aplique formato enriquecido y contenido a los enlaces",
|
||||
"4. Share, comment and collaborate!" : "4. ¡Comparta, comente y colabore!",
|
||||
"Create your first card!" : "¡Cree su primera tarjeta!",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentario tiene más de %s caracteres.\nSe ha añadido como adjunto a la tarjeta con el nombre %s.\nAccesible en la URL: %s.",
|
||||
"Attachments" : "Adjuntos",
|
||||
"File" : "Archivo",
|
||||
"date" : "fecha",
|
||||
"Card not found" : "Tarjeta no encontrada",
|
||||
"Path is already shared with this card" : "La ruta ya se ha compartido con esta tarjeta",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Fecha no válida, el formato de las fechas debe ser AAAA-MM-DD",
|
||||
"Personal planning and team project organization" : "Planificación personal y organización de proyecto de equipo",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck es una herramienta de organización de estilo kanban dirigida a la planificación personal y la organización de proyectos para equipos integrados con Nextcloud.\n\n\n- 📥 Agrega tus tareas a las tarjetas y ordénalas.\n- 📄 Escriba notas adicionales\n- 🔖 Asignar etiquetas para una organización mejor\n- 👥 Comparte con tu equipo, amigos o familia.\n- 📎 Adjuntar archivos e incrustarlos en su descripción\n- 💬 Discuta con su equipo usando comentarios.\n- ⚡ Mantenga un registro de los cambios en el flujo de actividad\n- 🚀 Organiza tu proyecto",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck es una herramienta de organización de estilo kanban dirigida a la planificación personal y la organización de proyectos para equipos, integrada a Nextcloud.\n\n\n- 📥 Agregue sus tareas a las tarjetas y póngalas en orden.\n- 📄 Escriba notas adicionales en Markdown\n- 🔖 Asigne etiquetas para una organización mejor\n- 👥 Comparta con su equipo, amigos o familia.\n- 📎 Adjunte archivos e incruste los mismos en su descripción Markdown\n- 💬 Discuta con su equipo usando comentarios.\n- ⚡ Mantenga un registro de los cambios en el flujo de actividad\n- 🚀 Organice su proyecto",
|
||||
"Add board" : "Añadir tablero",
|
||||
"Card details" : "Detalles de la tarjeta",
|
||||
"Select the board to link to a project" : "Selecciona el tablero que enlazar a un proyecto",
|
||||
@@ -163,8 +175,8 @@
|
||||
"Hide archived cards" : "Ocultar tarjetas archivadas",
|
||||
"Show archived cards" : "Mostrar tarjetas archivadas",
|
||||
"Toggle compact mode" : "Mostrar/ocultar modo compacto",
|
||||
"Hide card cover images" : "Ocultar la imagen principal de las tarjetas",
|
||||
"Show card cover images" : "Mostrar la imagen principal de las tarjetas",
|
||||
"Hide card cover images" : "Ocultar la imagen de portada de las tarjetas",
|
||||
"Show card cover images" : "Mostrar la imagen de portada de las tarjetas",
|
||||
"Open details" : "Abrir detalles",
|
||||
"Details" : "Detalles",
|
||||
"Currently present people" : "Personas presentes actualmente",
|
||||
@@ -179,11 +191,11 @@
|
||||
"Undo" : "Deshacer",
|
||||
"Deleted cards" : "Cartas eliminadas",
|
||||
"Failed to create share with {displayName}" : "Fallo al crear el recurso compartido denominado {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "¿Estás seguro de que quieres transferir el tablero {título} a {usuario}?",
|
||||
"Transfer the board." : "Transfiere el tablero.",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "¿Está seguro de que quiere transferir el tablero {title} a {user}?",
|
||||
"Transfer the board." : "Transfiera el tablero.",
|
||||
"Transfer" : "Transferir",
|
||||
"The board has been transferred to {user}" : "El tablero ha sido transferido a {usuario}",
|
||||
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
|
||||
"The board has been transferred to {user}" : "El tablero ha sido transferido a {user}",
|
||||
"Failed to transfer the board to {user}" : "Fallo al transferir el tablero a {user}",
|
||||
"Share board with a user, group or team …" : "Compartir tablero con un usuario, grupo o equipo …",
|
||||
"Searching for users, groups and teams …" : "Buscando usuarios, grupos y equipos …",
|
||||
"No participants found" : "No se encontraron participantes",
|
||||
@@ -216,7 +228,7 @@
|
||||
"Invalid path selected" : "Ruta seleccionada no válida",
|
||||
"Upload new files" : "Subir nuevos archivos",
|
||||
"Share from Files" : "Compartir desde Archivos",
|
||||
"Pending share" : "Pendiente de compartir",
|
||||
"Pending share" : "Recurso compartido pendiente",
|
||||
"Add this attachment" : "Añadir este adjunto",
|
||||
"Show in Files" : "Mostrar en Archivos",
|
||||
"Download" : "Descargar",
|
||||
@@ -226,6 +238,7 @@
|
||||
"Modified" : "Modificado",
|
||||
"Created" : "Creado",
|
||||
"The title cannot be empty." : "El título no puede estar vacío.",
|
||||
"Cannot close unsaved card!" : "¡No se puede cerrar esta tarjeta no guardada!",
|
||||
"Open in sidebar view" : "Abrir en vista de barra lateral",
|
||||
"Open in bigger view" : "Abrir en vista más grande",
|
||||
"Comments" : "Comentarios",
|
||||
@@ -240,6 +253,7 @@
|
||||
"Reply" : "Responder",
|
||||
"Update" : "Actualizar",
|
||||
"Write a description …" : "Escribe una descripción...",
|
||||
"Could not save description" : "No se pudo guardar la descripción",
|
||||
"Description" : "Descripción",
|
||||
"(Unsaved)" : "(Sin salvar)",
|
||||
"(Saving…)" : "(Guardando...)",
|
||||
@@ -257,12 +271,12 @@
|
||||
"Set due date for this weekend" : "Establecer este fin de semana como fecha de vencimiento",
|
||||
"Next week – {timeLocale}" : "Próxima semana – {timeLocale}",
|
||||
"Set due date for next week" : "Establecer la próxima semana como fecha de vencimiento",
|
||||
"Assign a due date to this card…" : "Asignar una fecha de caducidad a esta tarjeta…",
|
||||
"Assign a due date to this card…" : "Asignar una fecha de vencimiento a esta tarjeta…",
|
||||
"Set a due date" : "Fijar una fecha límite",
|
||||
"Add due date" : "Añadir fecha de vencimiento",
|
||||
"Choose a date" : "Elija una fecha",
|
||||
"Remove due date" : "Eliminar fecha límite",
|
||||
"Mark as done" : "Marcar como hecho",
|
||||
"Mark as done" : "Marcar como completado",
|
||||
"Due at:" : "Vence el:",
|
||||
"Not done" : "No está finalizado",
|
||||
"Unarchive card" : "Desarchivar tarjeta",
|
||||
@@ -326,6 +340,7 @@
|
||||
"An error occurred" : "Ocurrió un error",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "¿Está seguro de querer eliminar el tablero {title}? Esto eliminará todos los datos del tablero incluyendo las tarjetas archivadas.",
|
||||
"Delete the board?" : "¿Borrar el tablero?",
|
||||
"Exporting board..." : "Exportando tablero...",
|
||||
"Board details" : "Detalles del tablero",
|
||||
"Edit board" : "Editar tablero",
|
||||
"Clone board" : "Clonar tablero",
|
||||
@@ -338,16 +353,22 @@
|
||||
"Assigned cards" : "Tarjetas asignadas",
|
||||
"No notifications" : "No hay notificaciones",
|
||||
"Delete board" : "Eliminar tablero",
|
||||
"Importing board..." : "Importando tablero...",
|
||||
"Board imported successfully" : "Se importó el tablero exitosamente",
|
||||
"Import board" : "Importar tablero",
|
||||
"Clone {boardTitle}" : "Clonar {boardTitle}",
|
||||
"Clone cards" : "Clonar tarjetas",
|
||||
"Clone assignments" : "Clonar asignaciones",
|
||||
"Clone labels" : "Clonar etiquetas",
|
||||
"Clone due dates" : "Clonar fechas límite",
|
||||
"Clone due dates" : "Clonar fechas de vencimiento",
|
||||
"Advanced options" : "Opciones avanzadas",
|
||||
"Move all cards to the first list" : "Mover todas las tarjetas a la primera lista",
|
||||
"Restore archived cards" : "Restaurar tarjetas archivadas",
|
||||
"Clone" : "Clonar",
|
||||
"Export {boardTitle}" : "Exportar {boardTitle}",
|
||||
"Export as JSON" : "Exportar como JSON",
|
||||
"Export as CSV" : "Exportar como CSV",
|
||||
"Note: Only the JSON format is supported for importing back into the Deck app." : "Nota: Solo el formato JSON es soportar al importar de vuelta en la app Deck.",
|
||||
"Export" : "Exportar",
|
||||
"Loading filtered view" : "Cargando vista filtrada",
|
||||
"Today" : "Hoy",
|
||||
@@ -355,17 +376,17 @@
|
||||
"No due" : "Sin finalizar",
|
||||
"Search for {searchQuery} in all boards" : "Buscar {searchQuery} en todos los tableros",
|
||||
"No results found" : "No se encontraron resultados",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Tablero Deck {name}\n* Última modificación en {lastMod}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creada en {created}\n* Ultima moficiación en {lastMod}\n* {nbAttachments} adjuntos\n* {nbComments} comentarios",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Tablero Deck {name}\n* Se modificó por última vez el {lastMod}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creado en {created}\n* Se modificó por última vez el {lastMod}\n* {nbAttachments} adjuntos\n* {nbComments} comentarios",
|
||||
"{nbCards} cards" : "{nbCards} tarjetas",
|
||||
"Due on {date}" : "Vence en {date}",
|
||||
"{stack} in {board}" : "{stack} en {board}",
|
||||
"Click to expand description" : "Pulse para expandir la descripción",
|
||||
"Click to expand comment" : "Pulse para expandir el comentario",
|
||||
"Click to expand description" : "Haga clic para expandir la descripción",
|
||||
"Click to expand comment" : "Haga clic para expandir el comentario",
|
||||
"Create card" : "Crear tarjeta",
|
||||
"Create a new card" : "Crear una nueva tarjeta",
|
||||
"Create a new card" : "Crear una tarjeta nueva",
|
||||
"Card title" : "Título de la tarjeta",
|
||||
"Creating the new card …" : "Creando una nueva tarjeta …",
|
||||
"Creating the new card …" : "Creando una tarjeta nueva …",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "La tarjeta \"{card}\" fue añadida a \"{board}\"",
|
||||
"Open card" : "Abrir tarjeta",
|
||||
"Close" : "Cerrar",
|
||||
@@ -381,7 +402,8 @@
|
||||
"Something went wrong" : "Algo ha ido mal",
|
||||
"Failed to upload {name}" : "Error al subir {name}",
|
||||
"Maximum file size of {size} exceeded" : "Tamaño máximo de archivo de {size} excedido",
|
||||
"Due date" : "Fecha de fin",
|
||||
"Assigned users" : "Usuarios asignados",
|
||||
"Due date" : "Fecha de vencimiento",
|
||||
"Error creating the share" : "Error creando el recurso compartido",
|
||||
"Share with a Deck card" : "Compartir con una tarjeta de Deck",
|
||||
"Share {file} with a Deck card" : "Compartir {file} con una tarjeta de Deck",
|
||||
|
||||
@@ -17,12 +17,29 @@ OC.L10N.register(
|
||||
"{user} has archived the board {before}" : "{user} on {before} tahvli arhiveerinud",
|
||||
"You have unarchived the board {board}" : "Sa oled „{board}“ tahvli arhiivist eemaldanud",
|
||||
"{user} has unarchived the board {before}" : "{user} on „{before}“ tahvli arhiivist eemaldanud",
|
||||
"{user} has created a new list {stack} on board {board}" : "{user} on „{board}“ tahvlil koostanud uue loendi „{stack}“ ",
|
||||
"You have renamed the card {before} to {card}" : "Sa oled muutnud kaardi nime: {before} → {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} on muutnud kaardi nime: {before} → {card}",
|
||||
"You have marked the card {card} as done in list {stack} on board {board}" : "Sa oled märkinud {board} tahvli {stack} loendi {card} kaardi tehtuks",
|
||||
"{user} has marked card {card} as done in list {stack} on board {board}" : "{user} on märkinud {board} tahvli {stack} loendi {card} kaardi tehtuks",
|
||||
"You have marked the card {card} as undone in list {stack} on board {board}" : "Sa oled märkinud {board} tahvli {stack} loendi {card} kaardi mittetehtuks",
|
||||
"{user} has marked the card {card} as undone in list {stack} on board {board}" : "{user} on märkinud {board} tahvli {stack} loendi {card} kaardi mittetehtuks",
|
||||
"You have removed the due date of card {card}" : "Sina oled eemaldanud „{card}“ kaardi tähtaja",
|
||||
"{user} has removed the due date of card {card}" : "{user} on eemaldanud „{card}“ kaardi tähtaja",
|
||||
"You have set the due date of card {card} to {after}" : "Sina oled määranud „{card}“ kaardi tähtajaks {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} on määranud „{card}“ kaardi tähtajaks {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Sina oled muutnud „{card}“ kaardi tähtajaks {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} on muutnud „{card}“ kaardi tähtajaks {after}",
|
||||
"You have added the attachment {attachment} to card {card}" : "Sa oled lisanud „{card}“ kaardile „{attachment}“ manuse",
|
||||
"{user} has added the attachment {attachment} to card {card}" : "{user} on lisanud „{card}“ kaardile „{attachment}“ manuse",
|
||||
"You have updated the attachment {attachment} on card {card}" : "Sina oled uuendanud „{card}“ kaardil „{attachment}“ manust",
|
||||
"{user} has updated the attachment {attachment} on card {card}" : "{user} on uuendanud „{card}“ kaardil „{attachment}“ manust",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "Sina oled kustutanud „{card}“ kaardilt „{attachment}“ manuse",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} on kustutanud „{card}“ kaardilt „{attachment}“ manuse",
|
||||
"You have restored the attachment {attachment} to card {card}" : "Sa oled taastanud „{card}“ kaardile „{attachment}“ manuse",
|
||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} on taastanud „{card}“ kaardi „{attachment}“ manuse",
|
||||
"You have commented on card {card}" : "Sina oled kommenteerinud „{card}“ kaarti",
|
||||
"{user} has commented on card {card}" : "{user} on kommenteerinud „{card}“ kaarti",
|
||||
"Deck" : "Deck",
|
||||
"Changes in the <strong>Deck app</strong>" : "Muudatused <strong>Kanbani rakenduses</strong>",
|
||||
"A <strong>board, list or card</strong> was changed" : "<strong>Tahvel, loend või kaart</strong> on muutunud",
|
||||
@@ -64,9 +81,15 @@ OC.L10N.register(
|
||||
"Action needed" : "Tegevus on vajalik",
|
||||
"Later" : "Hiljem",
|
||||
"copy" : "koopia",
|
||||
"Read more inside" : "Loe lisateavet järgnevast",
|
||||
"Custom lists - click to rename!" : "Kohandatud loendid - klõpsi nime muutmiseks!",
|
||||
"To Do" : "Tegemiseks",
|
||||
"In Progress" : "Töös",
|
||||
"Done" : "Valmis",
|
||||
"1. Open to learn more about boards and cards" : "1. Ava lugemaks lisateavet tahvlite ja kaartide kohta",
|
||||
"2. Drag cards left and right, up and down" : "2. Lohista kaarte vasakule ja paremale ning üles ja alla",
|
||||
"3. Apply rich formatting and link content" : "3. Kasuta teksti vormindamise ja linkide lisamise võimalust",
|
||||
"4. Share, comment and collaborate!" : "4. Jaga, kommenteeri ning osale ühistegevuses!",
|
||||
"Create your first card!" : "Koosta oma esimene kaart!",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Sellel kommentaari pikkus on üle %s tähemärgi.\nTa on kaardile lisatud „%s“ nimega manusena.\nVõrguaadress: %s.",
|
||||
"Attachments" : "Manused",
|
||||
@@ -201,7 +224,7 @@ OC.L10N.register(
|
||||
"Reply" : "Vasta",
|
||||
"Update" : "Uuenda",
|
||||
"Write a description …" : "Koosta kirjeldus…",
|
||||
"Could not save description" : "Kirjelduse salvetamine ei õnnestunud",
|
||||
"Could not save description" : "Kirjelduse salvestamine ei õnnestunud",
|
||||
"Description" : "Kirjeldus",
|
||||
"(Unsaved)" : "(Salvestamata)",
|
||||
"(Saving…)" : "(Salvestan…)",
|
||||
|
||||
@@ -15,12 +15,29 @@
|
||||
"{user} has archived the board {before}" : "{user} on {before} tahvli arhiveerinud",
|
||||
"You have unarchived the board {board}" : "Sa oled „{board}“ tahvli arhiivist eemaldanud",
|
||||
"{user} has unarchived the board {before}" : "{user} on „{before}“ tahvli arhiivist eemaldanud",
|
||||
"{user} has created a new list {stack} on board {board}" : "{user} on „{board}“ tahvlil koostanud uue loendi „{stack}“ ",
|
||||
"You have renamed the card {before} to {card}" : "Sa oled muutnud kaardi nime: {before} → {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} on muutnud kaardi nime: {before} → {card}",
|
||||
"You have marked the card {card} as done in list {stack} on board {board}" : "Sa oled märkinud {board} tahvli {stack} loendi {card} kaardi tehtuks",
|
||||
"{user} has marked card {card} as done in list {stack} on board {board}" : "{user} on märkinud {board} tahvli {stack} loendi {card} kaardi tehtuks",
|
||||
"You have marked the card {card} as undone in list {stack} on board {board}" : "Sa oled märkinud {board} tahvli {stack} loendi {card} kaardi mittetehtuks",
|
||||
"{user} has marked the card {card} as undone in list {stack} on board {board}" : "{user} on märkinud {board} tahvli {stack} loendi {card} kaardi mittetehtuks",
|
||||
"You have removed the due date of card {card}" : "Sina oled eemaldanud „{card}“ kaardi tähtaja",
|
||||
"{user} has removed the due date of card {card}" : "{user} on eemaldanud „{card}“ kaardi tähtaja",
|
||||
"You have set the due date of card {card} to {after}" : "Sina oled määranud „{card}“ kaardi tähtajaks {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} on määranud „{card}“ kaardi tähtajaks {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Sina oled muutnud „{card}“ kaardi tähtajaks {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} on muutnud „{card}“ kaardi tähtajaks {after}",
|
||||
"You have added the attachment {attachment} to card {card}" : "Sa oled lisanud „{card}“ kaardile „{attachment}“ manuse",
|
||||
"{user} has added the attachment {attachment} to card {card}" : "{user} on lisanud „{card}“ kaardile „{attachment}“ manuse",
|
||||
"You have updated the attachment {attachment} on card {card}" : "Sina oled uuendanud „{card}“ kaardil „{attachment}“ manust",
|
||||
"{user} has updated the attachment {attachment} on card {card}" : "{user} on uuendanud „{card}“ kaardil „{attachment}“ manust",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "Sina oled kustutanud „{card}“ kaardilt „{attachment}“ manuse",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} on kustutanud „{card}“ kaardilt „{attachment}“ manuse",
|
||||
"You have restored the attachment {attachment} to card {card}" : "Sa oled taastanud „{card}“ kaardile „{attachment}“ manuse",
|
||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} on taastanud „{card}“ kaardi „{attachment}“ manuse",
|
||||
"You have commented on card {card}" : "Sina oled kommenteerinud „{card}“ kaarti",
|
||||
"{user} has commented on card {card}" : "{user} on kommenteerinud „{card}“ kaarti",
|
||||
"Deck" : "Deck",
|
||||
"Changes in the <strong>Deck app</strong>" : "Muudatused <strong>Kanbani rakenduses</strong>",
|
||||
"A <strong>board, list or card</strong> was changed" : "<strong>Tahvel, loend või kaart</strong> on muutunud",
|
||||
@@ -62,9 +79,15 @@
|
||||
"Action needed" : "Tegevus on vajalik",
|
||||
"Later" : "Hiljem",
|
||||
"copy" : "koopia",
|
||||
"Read more inside" : "Loe lisateavet järgnevast",
|
||||
"Custom lists - click to rename!" : "Kohandatud loendid - klõpsi nime muutmiseks!",
|
||||
"To Do" : "Tegemiseks",
|
||||
"In Progress" : "Töös",
|
||||
"Done" : "Valmis",
|
||||
"1. Open to learn more about boards and cards" : "1. Ava lugemaks lisateavet tahvlite ja kaartide kohta",
|
||||
"2. Drag cards left and right, up and down" : "2. Lohista kaarte vasakule ja paremale ning üles ja alla",
|
||||
"3. Apply rich formatting and link content" : "3. Kasuta teksti vormindamise ja linkide lisamise võimalust",
|
||||
"4. Share, comment and collaborate!" : "4. Jaga, kommenteeri ning osale ühistegevuses!",
|
||||
"Create your first card!" : "Koosta oma esimene kaart!",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Sellel kommentaari pikkus on üle %s tähemärgi.\nTa on kaardile lisatud „%s“ nimega manusena.\nVõrguaadress: %s.",
|
||||
"Attachments" : "Manused",
|
||||
@@ -199,7 +222,7 @@
|
||||
"Reply" : "Vasta",
|
||||
"Update" : "Uuenda",
|
||||
"Write a description …" : "Koosta kirjeldus…",
|
||||
"Could not save description" : "Kirjelduse salvetamine ei õnnestunud",
|
||||
"Could not save description" : "Kirjelduse salvestamine ei õnnestunud",
|
||||
"Description" : "Kirjeldus",
|
||||
"(Unsaved)" : "(Salvestamata)",
|
||||
"(Saving…)" : "(Salvestan…)",
|
||||
|
||||
@@ -124,6 +124,7 @@ OC.L10N.register(
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ce commentaire comporte plus de %s caractères.\nAjouté en pièce jointe à la carte intitulée %s.\nAccessible depuis l'URL: %s.",
|
||||
"Attachments" : "Pièces jointes",
|
||||
"File" : "Fichier",
|
||||
"date" : "date",
|
||||
"Card not found" : "Carte introuvable",
|
||||
"Path is already shared with this card" : "Le chemin est déjà partagé avec cette carte",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Date non valable, le format de la date doit être AAAA-MM-JJ",
|
||||
@@ -239,6 +240,7 @@ OC.L10N.register(
|
||||
"Modified" : "Modifiée",
|
||||
"Created" : "Créée",
|
||||
"The title cannot be empty." : "Le titre ne peut pas être vide.",
|
||||
"Cannot close unsaved card!" : "Impossible de fermer une carte non enregistrée !",
|
||||
"Open in sidebar view" : "Ouvrir dans le panneau latéral",
|
||||
"Open in bigger view" : "Ouvrir dans la vue large",
|
||||
"Comments" : "Commentaires",
|
||||
@@ -253,6 +255,7 @@ OC.L10N.register(
|
||||
"Reply" : "Répondre",
|
||||
"Update" : "Mettre à jour",
|
||||
"Write a description …" : "Écrire une description…",
|
||||
"Could not save description" : "Impossible d'enregistrer la description",
|
||||
"Description" : "Description",
|
||||
"(Unsaved)" : "(Non enregistré)",
|
||||
"(Saving…)" : "(Enregistrement ...)",
|
||||
@@ -386,7 +389,7 @@ OC.L10N.register(
|
||||
"Create a new card" : "Créer une nouvelle carte",
|
||||
"Card title" : "Titre de la carte",
|
||||
"Creating the new card …" : "Création de la nouvelle carte…",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "La carte « {card} » a été ajoutée au tableau « {board} »",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "La carte \"{card}\" a été ajoutée au tableau \"{board}\"",
|
||||
"Open card" : "Ouvrir la carte",
|
||||
"Close" : "Fermer",
|
||||
"No upcoming cards" : "Pas de cartes à venir",
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ce commentaire comporte plus de %s caractères.\nAjouté en pièce jointe à la carte intitulée %s.\nAccessible depuis l'URL: %s.",
|
||||
"Attachments" : "Pièces jointes",
|
||||
"File" : "Fichier",
|
||||
"date" : "date",
|
||||
"Card not found" : "Carte introuvable",
|
||||
"Path is already shared with this card" : "Le chemin est déjà partagé avec cette carte",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Date non valable, le format de la date doit être AAAA-MM-JJ",
|
||||
@@ -237,6 +238,7 @@
|
||||
"Modified" : "Modifiée",
|
||||
"Created" : "Créée",
|
||||
"The title cannot be empty." : "Le titre ne peut pas être vide.",
|
||||
"Cannot close unsaved card!" : "Impossible de fermer une carte non enregistrée !",
|
||||
"Open in sidebar view" : "Ouvrir dans le panneau latéral",
|
||||
"Open in bigger view" : "Ouvrir dans la vue large",
|
||||
"Comments" : "Commentaires",
|
||||
@@ -251,6 +253,7 @@
|
||||
"Reply" : "Répondre",
|
||||
"Update" : "Mettre à jour",
|
||||
"Write a description …" : "Écrire une description…",
|
||||
"Could not save description" : "Impossible d'enregistrer la description",
|
||||
"Description" : "Description",
|
||||
"(Unsaved)" : "(Non enregistré)",
|
||||
"(Saving…)" : "(Enregistrement ...)",
|
||||
@@ -384,7 +387,7 @@
|
||||
"Create a new card" : "Créer une nouvelle carte",
|
||||
"Card title" : "Titre de la carte",
|
||||
"Creating the new card …" : "Création de la nouvelle carte…",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "La carte « {card} » a été ajoutée au tableau « {board} »",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "La carte \"{card}\" a été ajoutée au tableau \"{board}\"",
|
||||
"Open card" : "Ouvrir la carte",
|
||||
"Close" : "Fermer",
|
||||
"No upcoming cards" : "Pas de cartes à venir",
|
||||
|
||||
@@ -124,6 +124,7 @@ OC.L10N.register(
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ez a megjegyzés több mint %s karakter hosszú.\nMellékletként lett hozzáadva a(z) %s nevű kártyához.\nEzen az URL-en érhető el: %s.",
|
||||
"Attachments" : "Mellékletek",
|
||||
"File" : "Fájl",
|
||||
"date" : "dátum",
|
||||
"Card not found" : "A kártya nem található",
|
||||
"Path is already shared with this card" : "Az útvonal már meg van osztva ezzel a kártyával",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátumnak YYYY-MM-DD formátumúnak kell lennie",
|
||||
@@ -239,6 +240,7 @@ OC.L10N.register(
|
||||
"Modified" : "Módosítva",
|
||||
"Created" : "Létrehozva",
|
||||
"The title cannot be empty." : "A cím nem lehet üres.",
|
||||
"Cannot close unsaved card!" : "A mentetlen kártya nem zárható be!",
|
||||
"Open in sidebar view" : "Oldalsáv nézet megnyitása",
|
||||
"Open in bigger view" : "Megtekintés nagyobb nézetben",
|
||||
"Comments" : "Hozzászólások",
|
||||
@@ -253,6 +255,7 @@ OC.L10N.register(
|
||||
"Reply" : "Válasz",
|
||||
"Update" : "Frissítés",
|
||||
"Write a description …" : "Leírás megadása…",
|
||||
"Could not save description" : "A leírás mentése sikertelen",
|
||||
"Description" : "Leírás",
|
||||
"(Unsaved)" : "(Nem mentett)",
|
||||
"(Saving…)" : "(Mentés…)",
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ez a megjegyzés több mint %s karakter hosszú.\nMellékletként lett hozzáadva a(z) %s nevű kártyához.\nEzen az URL-en érhető el: %s.",
|
||||
"Attachments" : "Mellékletek",
|
||||
"File" : "Fájl",
|
||||
"date" : "dátum",
|
||||
"Card not found" : "A kártya nem található",
|
||||
"Path is already shared with this card" : "Az útvonal már meg van osztva ezzel a kártyával",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátumnak YYYY-MM-DD formátumúnak kell lennie",
|
||||
@@ -237,6 +238,7 @@
|
||||
"Modified" : "Módosítva",
|
||||
"Created" : "Létrehozva",
|
||||
"The title cannot be empty." : "A cím nem lehet üres.",
|
||||
"Cannot close unsaved card!" : "A mentetlen kártya nem zárható be!",
|
||||
"Open in sidebar view" : "Oldalsáv nézet megnyitása",
|
||||
"Open in bigger view" : "Megtekintés nagyobb nézetben",
|
||||
"Comments" : "Hozzászólások",
|
||||
@@ -251,6 +253,7 @@
|
||||
"Reply" : "Válasz",
|
||||
"Update" : "Frissítés",
|
||||
"Write a description …" : "Leírás megadása…",
|
||||
"Could not save description" : "A leírás mentése sikertelen",
|
||||
"Description" : "Leírás",
|
||||
"(Unsaved)" : "(Nem mentett)",
|
||||
"(Saving…)" : "(Mentés…)",
|
||||
|
||||
@@ -274,6 +274,7 @@ OC.L10N.register(
|
||||
"{count} comments, {unread} unread" : "コメント {count} 件あり、 {unread} 件未読",
|
||||
"Todo items" : "Todo項目",
|
||||
"Edit card title" : "カードタイトルを編集する",
|
||||
"Open link" : "リンクを開く",
|
||||
"Card deleted" : "カードが削除されました",
|
||||
"Edit title" : "タイトルを編集",
|
||||
"Assign to me" : "自分に割り当てる",
|
||||
|
||||
@@ -272,6 +272,7 @@
|
||||
"{count} comments, {unread} unread" : "コメント {count} 件あり、 {unread} 件未読",
|
||||
"Todo items" : "Todo項目",
|
||||
"Edit card title" : "カードタイトルを編集する",
|
||||
"Open link" : "リンクを開く",
|
||||
"Card deleted" : "カードが削除されました",
|
||||
"Edit title" : "タイトルを編集",
|
||||
"Assign to me" : "自分に割り当てる",
|
||||
|
||||
@@ -26,6 +26,7 @@ OC.L10N.register(
|
||||
"Save" : "Sekles",
|
||||
"Cancel reply" : "Semmet tiririt.",
|
||||
"Reply" : "Err",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Nadi",
|
||||
"Cancel edit" : "Sefsex aseẓreg",
|
||||
"No notifications" : "Ulac tisezmal",
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
"Save" : "Sekles",
|
||||
"Cancel reply" : "Semmet tiririt.",
|
||||
"Reply" : "Err",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Nadi",
|
||||
"Cancel edit" : "Sefsex aseẓreg",
|
||||
"No notifications" : "Ulac tisezmal",
|
||||
|
||||
@@ -63,8 +63,9 @@ OC.L10N.register(
|
||||
"Reply" : "Atbildēt",
|
||||
"Update" : "Atjaunināt",
|
||||
"Description" : "Apraksts",
|
||||
"Select Date" : "Izvēlieties datumu",
|
||||
"Select Date" : "Atlasīt datumu",
|
||||
"Later today – {timeLocale}" : "Vēlāk šodien – {timeLocale}",
|
||||
"Set due date for later today" : "Iestatīt beigu datumu vēlāk šodienā",
|
||||
"(group)" : "(grupa)",
|
||||
"Open link" : "Atvērt saiti",
|
||||
"seconds ago" : "pirms vairākām sekundēm",
|
||||
@@ -80,6 +81,8 @@ OC.L10N.register(
|
||||
"Export" : "Izgūt",
|
||||
"Today" : "Šodien",
|
||||
"Tomorrow" : "Rīt",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Kavas dēlis {name}\n* Pēdējoreiz izmainīts {lastMod}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Izveidots {created}\n* Pēdējoreiz izmainīts {lastMod}\n* {nbAttachments} pielikumi\n* {nbComments} piebildes",
|
||||
"Close" : "Aizvērt",
|
||||
"Due date" : "Izpildes datums",
|
||||
"Share" : "Koplietot",
|
||||
|
||||
@@ -61,8 +61,9 @@
|
||||
"Reply" : "Atbildēt",
|
||||
"Update" : "Atjaunināt",
|
||||
"Description" : "Apraksts",
|
||||
"Select Date" : "Izvēlieties datumu",
|
||||
"Select Date" : "Atlasīt datumu",
|
||||
"Later today – {timeLocale}" : "Vēlāk šodien – {timeLocale}",
|
||||
"Set due date for later today" : "Iestatīt beigu datumu vēlāk šodienā",
|
||||
"(group)" : "(grupa)",
|
||||
"Open link" : "Atvērt saiti",
|
||||
"seconds ago" : "pirms vairākām sekundēm",
|
||||
@@ -78,6 +79,8 @@
|
||||
"Export" : "Izgūt",
|
||||
"Today" : "Šodien",
|
||||
"Tomorrow" : "Rīt",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Kavas dēlis {name}\n* Pēdējoreiz izmainīts {lastMod}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Izveidots {created}\n* Pēdējoreiz izmainīts {lastMod}\n* {nbAttachments} pielikumi\n* {nbComments} piebildes",
|
||||
"Close" : "Aizvērt",
|
||||
"Due date" : "Izpildes datums",
|
||||
"Share" : "Koplietot",
|
||||
|
||||
58
l10n/pl.js
58
l10n/pl.js
@@ -81,10 +81,14 @@ OC.L10N.register(
|
||||
"Could not write file to disk" : "Nie można zapisać pliku na dysk",
|
||||
"A PHP extension stopped the file upload" : "Rozszerzenie PHP zatrzymało wysyłanie pliku",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Brak wysłanego pliku lub rozmiar pliku przekracza maksymalny limit %s",
|
||||
"Invalid file type. Only JSON files are allowed." : "Nieprawidłowy typ pliku. Dozwolone są tylko pliki JSON.",
|
||||
"Invalid JSON data" : "Nieprawidłowe dane JSON",
|
||||
"Failed to import board" : "Nie udało się zaimportować tablicy",
|
||||
"Cards due today" : "Karty na dzisiaj",
|
||||
"Cards due tomorrow" : "Karty na jutro",
|
||||
"Upcoming cards" : "Nadchodzące karty",
|
||||
"Load more" : "Wczytaj więcej",
|
||||
"Welcome to Nextcloud Deck!" : "Witamy w Nextcloud Deck!",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Karta \"%s\" na \"%s\" została przydzielona Tobie przez %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} przydzielił Tobie kartę {deck-card} na {deck-board}.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Karta \"%s\" na \"%s\" wygasła.",
|
||||
@@ -107,12 +111,20 @@ OC.L10N.register(
|
||||
"Action needed" : "Wymagana akcja",
|
||||
"Later" : "Później",
|
||||
"copy" : "kopiuj",
|
||||
"Read more inside" : "Czytaj więcej w środku",
|
||||
"Custom lists - click to rename!" : "Listy niestandardowe – kliknij, aby zmienić nazwę!",
|
||||
"To Do" : "Do zrobienia",
|
||||
"In Progress" : "W trakcie",
|
||||
"Done" : "Zrobione",
|
||||
"1. Open to learn more about boards and cards" : "1. Otwórz, aby dowiedzieć się więcej o tablicach i kartach",
|
||||
"2. Drag cards left and right, up and down" : "2. Przeciągaj karty w lewo, prawo, w górę i w dół",
|
||||
"3. Apply rich formatting and link content" : "3. Zastosuj formatowanie i dodaj linki",
|
||||
"4. Share, comment and collaborate!" : "4. Udostępniaj, komentuj i współpracuj!",
|
||||
"Create your first card!" : "Utwórz swoją pierwszą kartę!",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ten komentarz ma więcej niż %s znaków.\nDodany jako załącznik do karty o nazwie %s.\nDostępne pod adresem URL: %s.",
|
||||
"Attachments" : "Załączniki",
|
||||
"File" : "Plik",
|
||||
"date" : "data",
|
||||
"Card not found" : "Nie znaleziono karty",
|
||||
"Path is already shared with this card" : "Ścieżka jest już udostępniona dla tej karty",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty to RRRR-MM-DD",
|
||||
@@ -123,10 +135,12 @@ OC.L10N.register(
|
||||
"Select the board to link to a project" : "Wybierz tablicę, aby połączyć się z projektem",
|
||||
"Search by board title" : "Szukaj według tytułu tablicy",
|
||||
"Select board" : "Wybierz tablicę",
|
||||
"Move/copy card" : "Przenieś/skopiuj kartę",
|
||||
"Select a board" : "Wybierz tablicę",
|
||||
"No lists available" : "Brak dostępnych list",
|
||||
"Select a list" : "Wybierz listę",
|
||||
"Move card" : "Przenieś kartę",
|
||||
"Copy card" : "Skopiuj kartę",
|
||||
"Select the card to link to a project" : "Wybierz kartę, aby połączyć z projektem",
|
||||
"Link to card" : "Link do karty",
|
||||
"Select a card" : "Wybierz kartę",
|
||||
@@ -147,6 +161,8 @@ OC.L10N.register(
|
||||
"Filter by tag" : "Filtruj według etykiety",
|
||||
"Filter by assigned user" : "Filtruj według przydzielonego użytkownika",
|
||||
"Unassigned" : "Nieprzydzielone",
|
||||
"Filter by status" : "Filtruj według statusu",
|
||||
"Open and completed" : "Otwarte i zakończone",
|
||||
"Open" : "Otwórz",
|
||||
"Completed" : "Zakończone",
|
||||
"Filter by due date" : "Filtruj według terminu",
|
||||
@@ -182,9 +198,12 @@ OC.L10N.register(
|
||||
"Transfer" : "Przenieś",
|
||||
"The board has been transferred to {user}" : "Tablica została przeniesiona do {user}",
|
||||
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
|
||||
"Share board with a user, group or team …" : "Udostępnij tablicę użytkownikowi, grupie lub zespołowi…",
|
||||
"Searching for users, groups and teams …" : "Wyszukiwanie użytkowników, grup i zespołów…",
|
||||
"No participants found" : "Nie znaleziono uczestników",
|
||||
"Board owner" : "Właściciel tablicy",
|
||||
"(Group)" : "(Grupa)",
|
||||
"(Team)" : "(Zespół)",
|
||||
"Can edit" : "Może edytować",
|
||||
"Can share" : "Może udostępnić",
|
||||
"Can manage" : "Może zarządzać",
|
||||
@@ -204,7 +223,9 @@ OC.L10N.register(
|
||||
"Add a new tag" : "Dodaj nową etykietę",
|
||||
"Board name" : "Nazwa tablicy",
|
||||
"Members" : "Członkowie",
|
||||
"Assign to users/groups/team" : "Przypisz do użytkowników/grup/zespołu",
|
||||
"Assign a user to this card…" : "Przypisz użytkownika do tej karty…",
|
||||
"Select a user to assign to this card…" : "Wybierz użytkownika, aby przypisać do tej karty…",
|
||||
"File to share" : "Plik do udostępnienia",
|
||||
"Invalid path selected" : "Wybrano nieprawidłową ścieżkę",
|
||||
"Upload new files" : "Wyślij nowe pliki",
|
||||
@@ -219,6 +240,7 @@ OC.L10N.register(
|
||||
"Modified" : "Zmodyfikowany",
|
||||
"Created" : "Utworzono",
|
||||
"The title cannot be empty." : "Tytuł nie może być pusty.",
|
||||
"Cannot close unsaved card!" : "Nie można zamknąć niezapisanej karty!",
|
||||
"Open in sidebar view" : "Otwórz w widoku paska bocznego",
|
||||
"Open in bigger view" : "Otwórz w dużym widoku",
|
||||
"Comments" : "Komentarze",
|
||||
@@ -233,6 +255,7 @@ OC.L10N.register(
|
||||
"Reply" : "Odpowiedz",
|
||||
"Update" : "Aktualizuj",
|
||||
"Write a description …" : "Napisz opis…",
|
||||
"Could not save description" : "Nie udało się zapisać opisu",
|
||||
"Description" : "Opis",
|
||||
"(Unsaved)" : "(Niezapisane)",
|
||||
"(Saving…)" : "(Zapisywanie…)",
|
||||
@@ -261,6 +284,7 @@ OC.L10N.register(
|
||||
"Unarchive card" : "Nie archiwizuj karty",
|
||||
"Archive card" : "Zarchiwizuj kartę",
|
||||
"Assign a tag to this card…" : "Przypisz etykietę do tej karty…",
|
||||
"Select or create a tag…" : "Wybierz lub utwórz tag…",
|
||||
"Create a new tag:" : "Utwórz nową etykietę:",
|
||||
"(group)" : "(grupa)",
|
||||
"{count} comments, {unread} unread" : "Komentarze: {count}, nieprzeczytane: {unread}",
|
||||
@@ -275,12 +299,31 @@ OC.L10N.register(
|
||||
"Delete card" : "Usuń kartę",
|
||||
"seconds ago" : "przed chwilą",
|
||||
"Keyboard shortcuts" : "Skróty klawiaturowe",
|
||||
"Boost your productivity using Deck with keyboard shortcuts." : "Zwiększ swoją produktywność, korzystając z Deck i skrótów klawiaturowych.",
|
||||
"Board actions" : "Akcje tablicy",
|
||||
"Keyboard shortcut" : "Skrót klawiaturowy",
|
||||
"Action" : "Akcja",
|
||||
"Shift" : "Shift",
|
||||
"Scroll" : "Przewijanie",
|
||||
"Scroll sideways" : "Przewijanie w bok",
|
||||
"Navigate between cards" : "Nawigacja między kartami",
|
||||
"Esc" : "Esc",
|
||||
"Close card details" : "Zamknij szczegóły karty",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Szukaj",
|
||||
"Show card filters" : "Pokaż filtry kart",
|
||||
"Clear card filters" : "Wyczyść filtry kart",
|
||||
"Show help dialog" : "Pokaż okno pomocy",
|
||||
"Card actions" : "Akcje karty",
|
||||
"The following actions can be triggered on the currently highlighted card" : "Poniższe akcje mogą być wykonane na aktualnie podświetlonej karcie",
|
||||
"Enter" : "Wpisz",
|
||||
"Space" : "Spacja",
|
||||
"Open card details" : "Otwórz szczegóły karty",
|
||||
"Edit the card title" : "Edytuj tytuł karty",
|
||||
"Assign yourself to the current card" : "Przypisz siebie do tej karty",
|
||||
"Archive/unarchive the current card" : "Archiwizuj/odarchiwizuj tę kartę",
|
||||
"Mark card as completed/not completed" : "Oznacz kartę jako ukończoną/nieukończoną",
|
||||
"Open card menu" : "Otwórz menu karty",
|
||||
"All boards" : "Wszystkie tablice",
|
||||
"Archived boards" : "Zarchiwizowane tablice",
|
||||
"Shared with you" : "Udostępnione Tobie",
|
||||
@@ -291,6 +334,7 @@ OC.L10N.register(
|
||||
"Limit board creation to some groups" : "Ogranicz tworzenie tablic dla niektórych grup",
|
||||
"Users outside of those groups will not be able to create their own boards, but will still be able to work on boards that have been shared with them." : "Użytkownicy spoza tych grup nie będą mogli tworzyć własnych tablic, ale nadal będą mogli pracować na tablicach, które zostały im udostępnione.",
|
||||
"Cancel edit" : "Anuluj edycję",
|
||||
"Save board" : "Zapisz tablicę",
|
||||
"Board {0} deleted" : "Tablica {0} została usunięta",
|
||||
"All cards" : "Wszystkie karty",
|
||||
"Only assigned cards" : "Tylko przydzielone karty",
|
||||
@@ -298,6 +342,7 @@ OC.L10N.register(
|
||||
"An error occurred" : "Wystąpił błąd",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Czy na pewno chcesz usunąć tablicę {title}? Spowoduje to usunięcie wszystkich danych z tej tablicy łącznie z zarchiwizowanymi kartami.",
|
||||
"Delete the board?" : "Usunąć tablicę?",
|
||||
"Exporting board..." : "Eksportowanie tablicy…",
|
||||
"Board details" : "Szczegóły tablicy",
|
||||
"Edit board" : "Edytuj tablicę",
|
||||
"Clone board" : "Klonuj tablicę",
|
||||
@@ -310,10 +355,22 @@ OC.L10N.register(
|
||||
"Assigned cards" : "Przydzielone karty",
|
||||
"No notifications" : "Brak powiadomień",
|
||||
"Delete board" : "Usuń tablicę",
|
||||
"Importing board..." : "Importowanie tablicy…",
|
||||
"Board imported successfully" : "Tablica została pomyślnie zaimportowana",
|
||||
"Import board" : "Importuj tablicę",
|
||||
"Clone {boardTitle}" : "Klonuj {boardTitle}",
|
||||
"Clone cards" : "Klonuj karty",
|
||||
"Clone assignments" : "Klonuj przypisania",
|
||||
"Clone labels" : "Klonuj etykiety",
|
||||
"Clone due dates" : "Klonuj terminy",
|
||||
"Advanced options" : "Opcje zaawansowane",
|
||||
"Move all cards to the first list" : "Przenieś wszystkie karty na pierwszą listę",
|
||||
"Restore archived cards" : "Przywróć zarchiwizowane karty",
|
||||
"Clone" : "Klonuj",
|
||||
"Export {boardTitle}" : "Eksportuj {boardTitle}",
|
||||
"Export as JSON" : "Eksportuj jako JSON",
|
||||
"Export as CSV" : "Eksportuj jako CSV",
|
||||
"Note: Only the JSON format is supported for importing back into the Deck app." : "Uwaga: tylko format JSON jest obsługiwany przy imporcie z powrotem do aplikacji Deck.",
|
||||
"Export" : "Eksportuj",
|
||||
"Loading filtered view" : "Wczytywanie przefiltrowanego widoku",
|
||||
"Today" : "Dzisiaj",
|
||||
@@ -347,6 +404,7 @@ OC.L10N.register(
|
||||
"Something went wrong" : "Coś poszło nie tak",
|
||||
"Failed to upload {name}" : "Nie udało się wysłać {name}",
|
||||
"Maximum file size of {size} exceeded" : "Przekroczono maksymalny rozmiar pliku {size}",
|
||||
"Assigned users" : "Przypisani użytkownicy",
|
||||
"Due date" : "Data realizacji",
|
||||
"Error creating the share" : "Błąd podczas tworzenia udostępnienia",
|
||||
"Share with a Deck card" : "Udostępnij za pomocą karty Tablicy",
|
||||
|
||||
58
l10n/pl.json
58
l10n/pl.json
@@ -79,10 +79,14 @@
|
||||
"Could not write file to disk" : "Nie można zapisać pliku na dysk",
|
||||
"A PHP extension stopped the file upload" : "Rozszerzenie PHP zatrzymało wysyłanie pliku",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Brak wysłanego pliku lub rozmiar pliku przekracza maksymalny limit %s",
|
||||
"Invalid file type. Only JSON files are allowed." : "Nieprawidłowy typ pliku. Dozwolone są tylko pliki JSON.",
|
||||
"Invalid JSON data" : "Nieprawidłowe dane JSON",
|
||||
"Failed to import board" : "Nie udało się zaimportować tablicy",
|
||||
"Cards due today" : "Karty na dzisiaj",
|
||||
"Cards due tomorrow" : "Karty na jutro",
|
||||
"Upcoming cards" : "Nadchodzące karty",
|
||||
"Load more" : "Wczytaj więcej",
|
||||
"Welcome to Nextcloud Deck!" : "Witamy w Nextcloud Deck!",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Karta \"%s\" na \"%s\" została przydzielona Tobie przez %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} przydzielił Tobie kartę {deck-card} na {deck-board}.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Karta \"%s\" na \"%s\" wygasła.",
|
||||
@@ -105,12 +109,20 @@
|
||||
"Action needed" : "Wymagana akcja",
|
||||
"Later" : "Później",
|
||||
"copy" : "kopiuj",
|
||||
"Read more inside" : "Czytaj więcej w środku",
|
||||
"Custom lists - click to rename!" : "Listy niestandardowe – kliknij, aby zmienić nazwę!",
|
||||
"To Do" : "Do zrobienia",
|
||||
"In Progress" : "W trakcie",
|
||||
"Done" : "Zrobione",
|
||||
"1. Open to learn more about boards and cards" : "1. Otwórz, aby dowiedzieć się więcej o tablicach i kartach",
|
||||
"2. Drag cards left and right, up and down" : "2. Przeciągaj karty w lewo, prawo, w górę i w dół",
|
||||
"3. Apply rich formatting and link content" : "3. Zastosuj formatowanie i dodaj linki",
|
||||
"4. Share, comment and collaborate!" : "4. Udostępniaj, komentuj i współpracuj!",
|
||||
"Create your first card!" : "Utwórz swoją pierwszą kartę!",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Ten komentarz ma więcej niż %s znaków.\nDodany jako załącznik do karty o nazwie %s.\nDostępne pod adresem URL: %s.",
|
||||
"Attachments" : "Załączniki",
|
||||
"File" : "Plik",
|
||||
"date" : "data",
|
||||
"Card not found" : "Nie znaleziono karty",
|
||||
"Path is already shared with this card" : "Ścieżka jest już udostępniona dla tej karty",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty to RRRR-MM-DD",
|
||||
@@ -121,10 +133,12 @@
|
||||
"Select the board to link to a project" : "Wybierz tablicę, aby połączyć się z projektem",
|
||||
"Search by board title" : "Szukaj według tytułu tablicy",
|
||||
"Select board" : "Wybierz tablicę",
|
||||
"Move/copy card" : "Przenieś/skopiuj kartę",
|
||||
"Select a board" : "Wybierz tablicę",
|
||||
"No lists available" : "Brak dostępnych list",
|
||||
"Select a list" : "Wybierz listę",
|
||||
"Move card" : "Przenieś kartę",
|
||||
"Copy card" : "Skopiuj kartę",
|
||||
"Select the card to link to a project" : "Wybierz kartę, aby połączyć z projektem",
|
||||
"Link to card" : "Link do karty",
|
||||
"Select a card" : "Wybierz kartę",
|
||||
@@ -145,6 +159,8 @@
|
||||
"Filter by tag" : "Filtruj według etykiety",
|
||||
"Filter by assigned user" : "Filtruj według przydzielonego użytkownika",
|
||||
"Unassigned" : "Nieprzydzielone",
|
||||
"Filter by status" : "Filtruj według statusu",
|
||||
"Open and completed" : "Otwarte i zakończone",
|
||||
"Open" : "Otwórz",
|
||||
"Completed" : "Zakończone",
|
||||
"Filter by due date" : "Filtruj według terminu",
|
||||
@@ -180,9 +196,12 @@
|
||||
"Transfer" : "Przenieś",
|
||||
"The board has been transferred to {user}" : "Tablica została przeniesiona do {user}",
|
||||
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
|
||||
"Share board with a user, group or team …" : "Udostępnij tablicę użytkownikowi, grupie lub zespołowi…",
|
||||
"Searching for users, groups and teams …" : "Wyszukiwanie użytkowników, grup i zespołów…",
|
||||
"No participants found" : "Nie znaleziono uczestników",
|
||||
"Board owner" : "Właściciel tablicy",
|
||||
"(Group)" : "(Grupa)",
|
||||
"(Team)" : "(Zespół)",
|
||||
"Can edit" : "Może edytować",
|
||||
"Can share" : "Może udostępnić",
|
||||
"Can manage" : "Może zarządzać",
|
||||
@@ -202,7 +221,9 @@
|
||||
"Add a new tag" : "Dodaj nową etykietę",
|
||||
"Board name" : "Nazwa tablicy",
|
||||
"Members" : "Członkowie",
|
||||
"Assign to users/groups/team" : "Przypisz do użytkowników/grup/zespołu",
|
||||
"Assign a user to this card…" : "Przypisz użytkownika do tej karty…",
|
||||
"Select a user to assign to this card…" : "Wybierz użytkownika, aby przypisać do tej karty…",
|
||||
"File to share" : "Plik do udostępnienia",
|
||||
"Invalid path selected" : "Wybrano nieprawidłową ścieżkę",
|
||||
"Upload new files" : "Wyślij nowe pliki",
|
||||
@@ -217,6 +238,7 @@
|
||||
"Modified" : "Zmodyfikowany",
|
||||
"Created" : "Utworzono",
|
||||
"The title cannot be empty." : "Tytuł nie może być pusty.",
|
||||
"Cannot close unsaved card!" : "Nie można zamknąć niezapisanej karty!",
|
||||
"Open in sidebar view" : "Otwórz w widoku paska bocznego",
|
||||
"Open in bigger view" : "Otwórz w dużym widoku",
|
||||
"Comments" : "Komentarze",
|
||||
@@ -231,6 +253,7 @@
|
||||
"Reply" : "Odpowiedz",
|
||||
"Update" : "Aktualizuj",
|
||||
"Write a description …" : "Napisz opis…",
|
||||
"Could not save description" : "Nie udało się zapisać opisu",
|
||||
"Description" : "Opis",
|
||||
"(Unsaved)" : "(Niezapisane)",
|
||||
"(Saving…)" : "(Zapisywanie…)",
|
||||
@@ -259,6 +282,7 @@
|
||||
"Unarchive card" : "Nie archiwizuj karty",
|
||||
"Archive card" : "Zarchiwizuj kartę",
|
||||
"Assign a tag to this card…" : "Przypisz etykietę do tej karty…",
|
||||
"Select or create a tag…" : "Wybierz lub utwórz tag…",
|
||||
"Create a new tag:" : "Utwórz nową etykietę:",
|
||||
"(group)" : "(grupa)",
|
||||
"{count} comments, {unread} unread" : "Komentarze: {count}, nieprzeczytane: {unread}",
|
||||
@@ -273,12 +297,31 @@
|
||||
"Delete card" : "Usuń kartę",
|
||||
"seconds ago" : "przed chwilą",
|
||||
"Keyboard shortcuts" : "Skróty klawiaturowe",
|
||||
"Boost your productivity using Deck with keyboard shortcuts." : "Zwiększ swoją produktywność, korzystając z Deck i skrótów klawiaturowych.",
|
||||
"Board actions" : "Akcje tablicy",
|
||||
"Keyboard shortcut" : "Skrót klawiaturowy",
|
||||
"Action" : "Akcja",
|
||||
"Shift" : "Shift",
|
||||
"Scroll" : "Przewijanie",
|
||||
"Scroll sideways" : "Przewijanie w bok",
|
||||
"Navigate between cards" : "Nawigacja między kartami",
|
||||
"Esc" : "Esc",
|
||||
"Close card details" : "Zamknij szczegóły karty",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Szukaj",
|
||||
"Show card filters" : "Pokaż filtry kart",
|
||||
"Clear card filters" : "Wyczyść filtry kart",
|
||||
"Show help dialog" : "Pokaż okno pomocy",
|
||||
"Card actions" : "Akcje karty",
|
||||
"The following actions can be triggered on the currently highlighted card" : "Poniższe akcje mogą być wykonane na aktualnie podświetlonej karcie",
|
||||
"Enter" : "Wpisz",
|
||||
"Space" : "Spacja",
|
||||
"Open card details" : "Otwórz szczegóły karty",
|
||||
"Edit the card title" : "Edytuj tytuł karty",
|
||||
"Assign yourself to the current card" : "Przypisz siebie do tej karty",
|
||||
"Archive/unarchive the current card" : "Archiwizuj/odarchiwizuj tę kartę",
|
||||
"Mark card as completed/not completed" : "Oznacz kartę jako ukończoną/nieukończoną",
|
||||
"Open card menu" : "Otwórz menu karty",
|
||||
"All boards" : "Wszystkie tablice",
|
||||
"Archived boards" : "Zarchiwizowane tablice",
|
||||
"Shared with you" : "Udostępnione Tobie",
|
||||
@@ -289,6 +332,7 @@
|
||||
"Limit board creation to some groups" : "Ogranicz tworzenie tablic dla niektórych grup",
|
||||
"Users outside of those groups will not be able to create their own boards, but will still be able to work on boards that have been shared with them." : "Użytkownicy spoza tych grup nie będą mogli tworzyć własnych tablic, ale nadal będą mogli pracować na tablicach, które zostały im udostępnione.",
|
||||
"Cancel edit" : "Anuluj edycję",
|
||||
"Save board" : "Zapisz tablicę",
|
||||
"Board {0} deleted" : "Tablica {0} została usunięta",
|
||||
"All cards" : "Wszystkie karty",
|
||||
"Only assigned cards" : "Tylko przydzielone karty",
|
||||
@@ -296,6 +340,7 @@
|
||||
"An error occurred" : "Wystąpił błąd",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Czy na pewno chcesz usunąć tablicę {title}? Spowoduje to usunięcie wszystkich danych z tej tablicy łącznie z zarchiwizowanymi kartami.",
|
||||
"Delete the board?" : "Usunąć tablicę?",
|
||||
"Exporting board..." : "Eksportowanie tablicy…",
|
||||
"Board details" : "Szczegóły tablicy",
|
||||
"Edit board" : "Edytuj tablicę",
|
||||
"Clone board" : "Klonuj tablicę",
|
||||
@@ -308,10 +353,22 @@
|
||||
"Assigned cards" : "Przydzielone karty",
|
||||
"No notifications" : "Brak powiadomień",
|
||||
"Delete board" : "Usuń tablicę",
|
||||
"Importing board..." : "Importowanie tablicy…",
|
||||
"Board imported successfully" : "Tablica została pomyślnie zaimportowana",
|
||||
"Import board" : "Importuj tablicę",
|
||||
"Clone {boardTitle}" : "Klonuj {boardTitle}",
|
||||
"Clone cards" : "Klonuj karty",
|
||||
"Clone assignments" : "Klonuj przypisania",
|
||||
"Clone labels" : "Klonuj etykiety",
|
||||
"Clone due dates" : "Klonuj terminy",
|
||||
"Advanced options" : "Opcje zaawansowane",
|
||||
"Move all cards to the first list" : "Przenieś wszystkie karty na pierwszą listę",
|
||||
"Restore archived cards" : "Przywróć zarchiwizowane karty",
|
||||
"Clone" : "Klonuj",
|
||||
"Export {boardTitle}" : "Eksportuj {boardTitle}",
|
||||
"Export as JSON" : "Eksportuj jako JSON",
|
||||
"Export as CSV" : "Eksportuj jako CSV",
|
||||
"Note: Only the JSON format is supported for importing back into the Deck app." : "Uwaga: tylko format JSON jest obsługiwany przy imporcie z powrotem do aplikacji Deck.",
|
||||
"Export" : "Eksportuj",
|
||||
"Loading filtered view" : "Wczytywanie przefiltrowanego widoku",
|
||||
"Today" : "Dzisiaj",
|
||||
@@ -345,6 +402,7 @@
|
||||
"Something went wrong" : "Coś poszło nie tak",
|
||||
"Failed to upload {name}" : "Nie udało się wysłać {name}",
|
||||
"Maximum file size of {size} exceeded" : "Przekroczono maksymalny rozmiar pliku {size}",
|
||||
"Assigned users" : "Przypisani użytkownicy",
|
||||
"Due date" : "Data realizacji",
|
||||
"Error creating the share" : "Błąd podczas tworzenia udostępnienia",
|
||||
"Share with a Deck card" : "Udostępnij za pomocą karty Tablicy",
|
||||
|
||||
@@ -107,6 +107,7 @@ OC.L10N.register(
|
||||
"Action needed" : "Требуется действие",
|
||||
"Later" : "Позже",
|
||||
"copy" : "Копировать",
|
||||
"Custom lists - click to rename!" : "Пользовательские списки — нажмите, чтобы переименовать!",
|
||||
"To Do" : "Задачи",
|
||||
"In Progress" : "Выполянется",
|
||||
"Done" : "Выполненные",
|
||||
@@ -274,6 +275,7 @@ OC.L10N.register(
|
||||
"{count} comments, {unread} unread" : "{count} комментариев, {unread} непрочитано",
|
||||
"Todo items" : "Элементы списка задач",
|
||||
"Edit card title" : "Изменить заголовок карточки",
|
||||
"Open link" : "Открыть ссылку",
|
||||
"Card deleted" : "Карточка удалена",
|
||||
"Edit title" : "Редактировать заголовок",
|
||||
"Assign to me" : "Назначить себе",
|
||||
|
||||
@@ -105,6 +105,7 @@
|
||||
"Action needed" : "Требуется действие",
|
||||
"Later" : "Позже",
|
||||
"copy" : "Копировать",
|
||||
"Custom lists - click to rename!" : "Пользовательские списки — нажмите, чтобы переименовать!",
|
||||
"To Do" : "Задачи",
|
||||
"In Progress" : "Выполянется",
|
||||
"Done" : "Выполненные",
|
||||
@@ -272,6 +273,7 @@
|
||||
"{count} comments, {unread} unread" : "{count} комментариев, {unread} непрочитано",
|
||||
"Todo items" : "Элементы списка задач",
|
||||
"Edit card title" : "Изменить заголовок карточки",
|
||||
"Open link" : "Открыть ссылку",
|
||||
"Card deleted" : "Карточка удалена",
|
||||
"Edit title" : "Редактировать заголовок",
|
||||
"Assign to me" : "Назначить себе",
|
||||
|
||||
@@ -88,7 +88,7 @@ OC.L10N.register(
|
||||
"Cards due tomorrow" : "Картки на завтра",
|
||||
"Upcoming cards" : "Очікують на виконання",
|
||||
"Load more" : "Більше",
|
||||
"Welcome to Nextcloud Deck!" : "Ласкаво просимо до колоди Nextcloud!",
|
||||
"Welcome to Nextcloud Deck!" : "Ласкаво просимо до Колоди для Nextcloud!",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Картка \"%s\" на \"%s\" була призначена вам %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} призначив вам карту {deck-card} на {deck-board}.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Термін дії картки \"%s\" на \"%s\" закінчився.",
|
||||
@@ -97,7 +97,7 @@ OC.L10N.register(
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} згадав вас у коментарі до {deck-card}.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Дошку \"%s\" з вами поділився %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} поділився з вами {deck-board}.",
|
||||
"Deck board" : "Дошка Deck",
|
||||
"Deck board" : "Дошка колоди",
|
||||
"Owned by %1$s" : "Належить %1$s",
|
||||
"Deck boards, cards and comments" : "Дошки колод, карти та коментарі",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "З %1$s, в %2$s/%3$s, у власності %4$s",
|
||||
@@ -327,7 +327,7 @@ OC.L10N.register(
|
||||
"All boards" : "Усі дошки",
|
||||
"Archived boards" : "Архівні дошки",
|
||||
"Shared with you" : "Вам надано доступ",
|
||||
"Deck settings" : "Налаштування колоди",
|
||||
"Deck settings" : "Налаштування",
|
||||
"Use bigger card view" : "Режим перегляду зі збільшеними картками",
|
||||
"Show card ID badge" : "Покажіть бейдж з ідентифікаційною карткою",
|
||||
"Show boards in calendar/tasks" : "Показувати дошки в календарі та завданнях",
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
"Cards due tomorrow" : "Картки на завтра",
|
||||
"Upcoming cards" : "Очікують на виконання",
|
||||
"Load more" : "Більше",
|
||||
"Welcome to Nextcloud Deck!" : "Ласкаво просимо до колоди Nextcloud!",
|
||||
"Welcome to Nextcloud Deck!" : "Ласкаво просимо до Колоди для Nextcloud!",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Картка \"%s\" на \"%s\" була призначена вам %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} призначив вам карту {deck-card} на {deck-board}.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Термін дії картки \"%s\" на \"%s\" закінчився.",
|
||||
@@ -95,7 +95,7 @@
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} згадав вас у коментарі до {deck-card}.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Дошку \"%s\" з вами поділився %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} поділився з вами {deck-board}.",
|
||||
"Deck board" : "Дошка Deck",
|
||||
"Deck board" : "Дошка колоди",
|
||||
"Owned by %1$s" : "Належить %1$s",
|
||||
"Deck boards, cards and comments" : "Дошки колод, карти та коментарі",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "З %1$s, в %2$s/%3$s, у власності %4$s",
|
||||
@@ -325,7 +325,7 @@
|
||||
"All boards" : "Усі дошки",
|
||||
"Archived boards" : "Архівні дошки",
|
||||
"Shared with you" : "Вам надано доступ",
|
||||
"Deck settings" : "Налаштування колоди",
|
||||
"Deck settings" : "Налаштування",
|
||||
"Use bigger card view" : "Режим перегляду зі збільшеними картками",
|
||||
"Show card ID badge" : "Покажіть бейдж з ідентифікаційною карткою",
|
||||
"Show boards in calendar/tasks" : "Показувати дошки в календарі та завданнях",
|
||||
|
||||
67
lib/Command/CalendarToggle.php
Normal file
67
lib/Command/CalendarToggle.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCA\Deck\Command;
|
||||
|
||||
use OCP\IConfig;
|
||||
use OCP\IUserManager;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class CalendarToggle extends Command {
|
||||
private IUserManager $userManager;
|
||||
private IConfig $config;
|
||||
|
||||
public function __construct(IUserManager $userManager, IConfig $config) {
|
||||
parent::__construct();
|
||||
$this->userManager = $userManager;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
protected function configure() {
|
||||
$this
|
||||
->setName('deck:calendar-toggle')
|
||||
->setDescription('Enable or disable Deck calendar/tasks integration for all existing users. Users can still change their own setting afterwards. Only affects users that already exist at the time of execution.')
|
||||
->addOption(
|
||||
'on',
|
||||
null,
|
||||
InputOption::VALUE_NONE,
|
||||
'Enable calendar/tasks integration for all existing users (users can opt-out later)'
|
||||
)
|
||||
->addOption(
|
||||
'off',
|
||||
null,
|
||||
InputOption::VALUE_NONE,
|
||||
'Disable calendar/tasks integration for all existing users (users can opt-in later)'
|
||||
);
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int {
|
||||
$enable = $input->getOption('on');
|
||||
$disable = $input->getOption('off');
|
||||
if ($enable && $disable) {
|
||||
$output->writeln('<error>Cannot use --on and --off together.</error>');
|
||||
return 1;
|
||||
}
|
||||
if (!$enable && !$disable) {
|
||||
$output->writeln('<error>Please specify either --on or --off.</error>');
|
||||
return 1;
|
||||
}
|
||||
$value = $enable ? 'yes' : '';
|
||||
$users = $this->userManager->search('');
|
||||
$count = 0;
|
||||
foreach ($users as $user) {
|
||||
$uid = $user->getUID();
|
||||
$this->config->setUserValue($uid, 'deck', 'calendar', $value);
|
||||
$output->writeln("Set calendar integration to '" . ($enable ? 'on' : 'off') . "' for user: $uid");
|
||||
$count++;
|
||||
}
|
||||
$output->writeln("Done. Updated $count existing users.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,12 @@ namespace OCA\Deck\Controller;
|
||||
use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\Board;
|
||||
use OCA\Deck\Service\BoardService;
|
||||
use OCA\Deck\Service\Importer\BoardImportService;
|
||||
use OCA\Deck\Service\PermissionService;
|
||||
use OCP\AppFramework\ApiController;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\IL10N;
|
||||
use OCP\IRequest;
|
||||
|
||||
class BoardController extends ApiController {
|
||||
@@ -22,6 +24,8 @@ class BoardController extends ApiController {
|
||||
IRequest $request,
|
||||
private BoardService $boardService,
|
||||
private PermissionService $permissionService,
|
||||
private BoardImportService $boardImportService,
|
||||
private IL10N $l10n,
|
||||
private $userId,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
@@ -163,4 +167,62 @@ class BoardController extends ApiController {
|
||||
public function export($boardId) {
|
||||
return $this->boardService->export($boardId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function import(): DataResponse {
|
||||
$file = $this->request->getUploadedFile('file');
|
||||
$error = null;
|
||||
$phpFileUploadErrors = [
|
||||
UPLOAD_ERR_OK => $this->l10n->t('The file was uploaded'),
|
||||
UPLOAD_ERR_INI_SIZE => $this->l10n->t('The uploaded file exceeds the upload_max_filesize directive in php.ini'),
|
||||
UPLOAD_ERR_FORM_SIZE => $this->l10n->t('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'),
|
||||
UPLOAD_ERR_PARTIAL => $this->l10n->t('The file was only partially uploaded'),
|
||||
UPLOAD_ERR_NO_FILE => $this->l10n->t('No file was uploaded'),
|
||||
UPLOAD_ERR_NO_TMP_DIR => $this->l10n->t('Missing a temporary folder'),
|
||||
UPLOAD_ERR_CANT_WRITE => $this->l10n->t('Could not write file to disk'),
|
||||
UPLOAD_ERR_EXTENSION => $this->l10n->t('A PHP extension stopped the file upload'),
|
||||
];
|
||||
|
||||
if (empty($file)) {
|
||||
$error = $this->l10n->t('No file uploaded or file size exceeds maximum of %s', [\OCP\Util::humanFileSize(\OCP\Util::uploadLimit())]);
|
||||
}
|
||||
if (!empty($file) && array_key_exists('error', $file) && $file['error'] !== UPLOAD_ERR_OK) {
|
||||
$error = $phpFileUploadErrors[$file['error']];
|
||||
}
|
||||
if (!empty($file) && $file['error'] === UPLOAD_ERR_OK && !in_array($file['type'], ['application/json', 'text/plain'])) {
|
||||
$error = $this->l10n->t('Invalid file type. Only JSON files are allowed.');
|
||||
}
|
||||
if ($error !== null) {
|
||||
return new DataResponse([
|
||||
'status' => 'error',
|
||||
'message' => $error,
|
||||
], Http::STATUS_BAD_REQUEST);
|
||||
}
|
||||
|
||||
try {
|
||||
$fileContent = file_get_contents($file['tmp_name']);
|
||||
$this->boardImportService->setSystem('DeckJson');
|
||||
$config = new \stdClass();
|
||||
$config->owner = $this->userId;
|
||||
$this->boardImportService->setConfigInstance($config);
|
||||
$this->boardImportService->setData(json_decode($fileContent));
|
||||
$this->boardImportService->import();
|
||||
$importedBoard = $this->boardImportService->getBoard();
|
||||
$board = $this->boardService->find($importedBoard->getId());
|
||||
|
||||
return new DataResponse($board, Http::STATUS_OK);
|
||||
} catch (\TypeError $e) {
|
||||
return new DataResponse([
|
||||
'status' => 'error',
|
||||
'message' => $this->l10n->t('Invalid JSON data'),
|
||||
], Http::STATUS_BAD_REQUEST);
|
||||
} catch (\Exception $e) {
|
||||
return new DataResponse([
|
||||
'status' => 'error',
|
||||
'message' => $this->l10n->t('Failed to import board'),
|
||||
], Http::STATUS_BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,11 +65,11 @@ class CardController extends Controller {
|
||||
$card = $this->cardService->create($title, $stackId, $type, $order, $this->userId, $description, $duedate);
|
||||
|
||||
foreach ($labels as $label) {
|
||||
$this->assignLabel($card->id, $label);
|
||||
$this->assignLabel($card->getId(), $label);
|
||||
}
|
||||
|
||||
foreach ($users as $user) {
|
||||
$this->assignmentService->assignUser($card->id, $user['id'], $user['type']);
|
||||
$this->assignmentService->assignUser($card->getId(), $user['id'], $user['type']);
|
||||
}
|
||||
|
||||
return $card;
|
||||
|
||||
@@ -14,6 +14,7 @@ use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Db\StackMapper;
|
||||
use OCA\Deck\InvalidAttachmentType;
|
||||
use OCA\Deck\Service\AttachmentService;
|
||||
use OCA\Deck\Sharing\DeckShareProvider;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\BackgroundJob\IJob;
|
||||
use OCP\BackgroundJob\TimedJob;
|
||||
@@ -30,14 +31,25 @@ class DeleteCron extends TimedJob {
|
||||
private $attachmentMapper;
|
||||
/** @var StackMapper */
|
||||
private $stackMapper;
|
||||
/** @var DeckShareProvider */
|
||||
private $deckShareProvider;
|
||||
|
||||
public function __construct(ITimeFactory $time, BoardMapper $boardMapper, CardMapper $cardMapper, AttachmentService $attachmentService, AttachmentMapper $attachmentMapper, StackMapper $stackMapper) {
|
||||
public function __construct(
|
||||
ITimeFactory $time,
|
||||
BoardMapper $boardMapper,
|
||||
CardMapper $cardMapper,
|
||||
AttachmentService $attachmentService,
|
||||
AttachmentMapper $attachmentMapper,
|
||||
StackMapper $stackMapper,
|
||||
DeckShareProvider $deckShareProvider,
|
||||
) {
|
||||
parent::__construct($time);
|
||||
$this->boardMapper = $boardMapper;
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->attachmentService = $attachmentService;
|
||||
$this->attachmentMapper = $attachmentMapper;
|
||||
$this->stackMapper = $stackMapper;
|
||||
$this->deckShareProvider = $deckShareProvider;
|
||||
|
||||
$this->setInterval(60 * 60 * 24);
|
||||
$this->setTimeSensitivity(IJob::TIME_INSENSITIVE);
|
||||
@@ -70,6 +82,12 @@ class DeleteCron extends TimedJob {
|
||||
$this->attachmentMapper->delete($attachment);
|
||||
}
|
||||
|
||||
// Delete orphaned attachment shares
|
||||
$shares = $this->deckShareProvider->getOrphanedAttachmentShares();
|
||||
foreach ($shares as $share) {
|
||||
$this->deckShareProvider->delete($share);
|
||||
}
|
||||
|
||||
$stacks = $this->stackMapper->findToDelete();
|
||||
foreach ($stacks as $stack) {
|
||||
$this->stackMapper->delete($stack);
|
||||
|
||||
@@ -645,4 +645,16 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
||||
|
||||
$result->closeCursor();
|
||||
}
|
||||
|
||||
public function getAllCardIds(): array {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('deck_cards');
|
||||
$result = $qb->executeQuery();
|
||||
$ids = [];
|
||||
while ($row = $result->fetch()) {
|
||||
$ids[] = (int)$row['id'];
|
||||
}
|
||||
return $ids;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ class DefaultBoardMiddleware extends Middleware {
|
||||
public function beforeController($controller, $methodName) {
|
||||
try {
|
||||
if ($this->userId !== null && $this->defaultBoardService->checkFirstRun($this->userId) && $this->permissionService->canCreate()) {
|
||||
$this->defaultBoardService->createDefaultBoard($this->l10n->t('Personal'), $this->userId, '0087C5');
|
||||
$this->defaultBoardService->createDefaultBoard($this->l10n->t('Welcome to Nextcloud Deck!'), $this->userId, 'bf678b');
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$this->logger->error('Could not create default board', ['exception' => $e]);
|
||||
|
||||
78
lib/Migration/LabelMismatchCleanup.php
Normal file
78
lib/Migration/LabelMismatchCleanup.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCA\Deck\Migration;
|
||||
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Migration\IOutput;
|
||||
use OCP\Migration\IRepairStep;
|
||||
|
||||
class LabelMismatchCleanup implements IRepairStep {
|
||||
|
||||
public function __construct(
|
||||
private IDBConnection $db,
|
||||
) {
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Migrate labels with wrong board mapping';
|
||||
}
|
||||
|
||||
public function run(IOutput $output) {
|
||||
// Find assingments where a label of another (wrong) board is used
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('al.id', 'al.label_id', 'al.card_id', 's.board_id as actual_board_id', 'l.board_id as wrong_id', 'l.color', 'l.title')
|
||||
->from('deck_assigned_labels', 'al')
|
||||
->innerJoin('al', 'deck_cards', 'c', 'c.id = al.card_id')
|
||||
->innerJoin('c', 'deck_stacks', 's', 'c.stack_id = s.id')
|
||||
->innerJoin('al', 'deck_labels', 'l', 'l.id = al.label_id')
|
||||
->where($qb->expr()->neq('l.board_id', 's.board_id'));
|
||||
|
||||
$labels = $qb->executeQUery()->fetchAll();
|
||||
if (count($labels) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$output->info('Found ' . count($labels) . ' labels with wrong board mapping');
|
||||
|
||||
foreach ($labels as $label) {
|
||||
// Select existing label on the correct board
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('deck_labels')
|
||||
->where($qb->expr()->eq('title', $qb->createNamedParameter($label['title'])))
|
||||
->andWhere($qb->expr()->eq('color', $qb->createNamedParameter($label['color'])))
|
||||
->andWhere($qb->expr()->eq('board_id', $qb->createNamedParameter($label['actual_board_id'])));
|
||||
$result = $qb->executeQuery();
|
||||
$newLabel = $result->fetchOne();
|
||||
$result->closeCursor();
|
||||
|
||||
if (!$newLabel) {
|
||||
// Create a new label with the same title and color on the correct board
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->insert('deck_labels')
|
||||
->values([
|
||||
'title' => $qb->createNamedParameter($label['title']),
|
||||
'color' => $qb->createNamedParameter($label['color']),
|
||||
'board_id' => $qb->createNamedParameter($label['actual_board_id']),
|
||||
]);
|
||||
$qb->executeStatement();
|
||||
$newLabel = $qb->getLastInsertId();
|
||||
$output->debug('Created new label ' . $label['title'] . ' on board ' . $label['actual_board_id']);
|
||||
} else {
|
||||
$output->debug('Found existing label ' . $label['title'] . ' on board ' . $label['actual_board_id']);
|
||||
}
|
||||
|
||||
// Update the assignment to use the new label
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->update('deck_assigned_labels')
|
||||
->set('label_id', $qb->createNamedParameter($newLabel))
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($label['id'])));
|
||||
$qb->executeStatement();
|
||||
$output->debug('Updated label assignment ' . $label['id'] . ' to use label ' . $newLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -762,6 +762,8 @@ class BoardService {
|
||||
$fullCards = [];
|
||||
foreach ($cards as $card) {
|
||||
$fullCard = $this->cardMapper->find($card->getId());
|
||||
$assignedUsers = $this->assignedUsersMapper->findAll($card->getId());
|
||||
$fullCard->setAssignedUsers($assignedUsers);
|
||||
array_push($fullCards, $fullCard);
|
||||
}
|
||||
$stack->setCards($fullCards);
|
||||
|
||||
@@ -356,7 +356,7 @@ class CardService {
|
||||
if ($resetDuedateNotification) {
|
||||
$this->notificationHelper->markDuedateAsRead($card);
|
||||
}
|
||||
$this->changeHelper->cardChanged($card->getId(), true);
|
||||
$this->changeHelper->cardChanged($card->getId());
|
||||
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card, $changes->getBefore()));
|
||||
|
||||
@@ -418,11 +418,12 @@ class CardService {
|
||||
if ($card->getArchived()) {
|
||||
throw new StatusException('Operation not allowed. This card is archived.');
|
||||
}
|
||||
$changes = new ChangeSet($card);
|
||||
$card->setTitle($title);
|
||||
$this->changeHelper->cardChanged($card->getId(), false);
|
||||
$update = $this->cardMapper->update($card);
|
||||
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card));
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card, $changes->getBefore()));
|
||||
|
||||
return $update;
|
||||
}
|
||||
@@ -441,7 +442,6 @@ class CardService {
|
||||
public function reorder($id, $stackId, $order) {
|
||||
$this->cardServiceValidator->check(compact('id', 'stackId', 'order'));
|
||||
|
||||
|
||||
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
|
||||
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
|
||||
|
||||
@@ -459,30 +459,30 @@ class CardService {
|
||||
$changes->setAfter($card);
|
||||
$this->activityManager->triggerUpdateEvents(ActivityManager::DECK_OBJECT_CARD, $changes, ActivityManager::SUBJECT_CARD_UPDATE);
|
||||
|
||||
$cards = $this->cardMapper->findAll($stackId);
|
||||
$cardsToReorder = $this->cardMapper->findAll($stackId);
|
||||
$result = [];
|
||||
$i = 0;
|
||||
foreach ($cards as $card) {
|
||||
if ($card->getArchived()) {
|
||||
foreach ($cardsToReorder as $cardToReorder) {
|
||||
if ($cardToReorder->getArchived()) {
|
||||
throw new StatusException('Operation not allowed. This card is archived.');
|
||||
}
|
||||
if ($card->id === $id) {
|
||||
$card->setOrder($order);
|
||||
$card->setLastModified(time());
|
||||
if ($cardToReorder->id === $id) {
|
||||
$cardToReorder->setOrder($order);
|
||||
$cardToReorder->setLastModified(time());
|
||||
}
|
||||
|
||||
if ($i === $order) {
|
||||
$i++;
|
||||
}
|
||||
|
||||
if ($card->id !== $id) {
|
||||
$card->setOrder($i++);
|
||||
if ($cardToReorder->id !== $id) {
|
||||
$cardToReorder->setOrder($i++);
|
||||
}
|
||||
$this->cardMapper->update($card);
|
||||
$result[$card->getOrder()] = $card;
|
||||
$this->cardMapper->update($cardToReorder);
|
||||
$result[$cardToReorder->getOrder()] = $cardToReorder;
|
||||
}
|
||||
$this->changeHelper->cardChanged($id, false);
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card));
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card, $changes->getBefore()));
|
||||
|
||||
return array_values($result);
|
||||
}
|
||||
@@ -499,19 +499,19 @@ class CardService {
|
||||
public function archive($id) {
|
||||
$this->cardServiceValidator->check(compact('id'));
|
||||
|
||||
|
||||
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
|
||||
if ($this->boardService->isArchived($this->cardMapper, $id)) {
|
||||
throw new StatusException('Operation not allowed. This board is archived.');
|
||||
}
|
||||
$card = $this->cardMapper->find($id);
|
||||
$changes = new ChangeSet($card);
|
||||
$card->setArchived(true);
|
||||
$newCard = $this->cardMapper->update($card);
|
||||
$this->notificationHelper->markDuedateAsRead($card);
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $newCard, ActivityManager::SUBJECT_CARD_UPDATE_ARCHIVE);
|
||||
$this->changeHelper->cardChanged($id, false);
|
||||
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card));
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card, $changes->getBefore()));
|
||||
|
||||
return $newCard;
|
||||
}
|
||||
@@ -534,12 +534,13 @@ class CardService {
|
||||
throw new StatusException('Operation not allowed. This board is archived.');
|
||||
}
|
||||
$card = $this->cardMapper->find($id);
|
||||
$changes = new ChangeSet($card);
|
||||
$card->setArchived(false);
|
||||
$newCard = $this->cardMapper->update($card);
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $newCard, ActivityManager::SUBJECT_CARD_UPDATE_UNARCHIVE);
|
||||
$this->changeHelper->cardChanged($id, false);
|
||||
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card));
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card, $changes->getBefore()));
|
||||
|
||||
return $newCard;
|
||||
}
|
||||
@@ -559,13 +560,14 @@ class CardService {
|
||||
throw new StatusException('Operation not allowed. This board is archived.');
|
||||
}
|
||||
$card = $this->cardMapper->find($id);
|
||||
$changes = new ChangeSet($card);
|
||||
$card->setDone(new \DateTime());
|
||||
$newCard = $this->cardMapper->update($card);
|
||||
$this->notificationHelper->markDuedateAsRead($card);
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $newCard, ActivityManager::SUBJECT_CARD_UPDATE_DONE);
|
||||
$this->changeHelper->cardChanged($id, false);
|
||||
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card));
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card, $changes->getBefore()));
|
||||
|
||||
return $newCard;
|
||||
}
|
||||
@@ -585,12 +587,13 @@ class CardService {
|
||||
throw new StatusException('Operation not allowed. This board is archived.');
|
||||
}
|
||||
$card = $this->cardMapper->find($id);
|
||||
$changes = new ChangeSet($card);
|
||||
$card->setDone(null);
|
||||
$newCard = $this->cardMapper->update($card);
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $newCard, ActivityManager::SUBJECT_CARD_UPDATE_UNDONE);
|
||||
$this->changeHelper->cardChanged($id, false);
|
||||
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card));
|
||||
$this->eventDispatcher->dispatchTyped(new CardUpdatedEvent($card, $changes->getBefore()));
|
||||
|
||||
return $newCard;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ namespace OCA\Deck\Service;
|
||||
|
||||
use OCA\Deck\AppInfo\Application;
|
||||
use OCA\Deck\BadRequestException;
|
||||
use OCA\Deck\Db\Board;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
@@ -21,6 +22,8 @@ class DefaultBoardService {
|
||||
private $cardService;
|
||||
private $config;
|
||||
private $l10n;
|
||||
private LabelService $labelService;
|
||||
private AttachmentService $attachmentService;
|
||||
|
||||
public function __construct(
|
||||
IL10N $l10n,
|
||||
@@ -29,6 +32,8 @@ class DefaultBoardService {
|
||||
StackService $stackService,
|
||||
CardService $cardService,
|
||||
IConfig $config,
|
||||
LabelService $labelService,
|
||||
AttachmentService $attachmentService,
|
||||
) {
|
||||
$this->boardService = $boardService;
|
||||
$this->stackService = $stackService;
|
||||
@@ -36,6 +41,8 @@ class DefaultBoardService {
|
||||
$this->config = $config;
|
||||
$this->boardMapper = $boardMapper;
|
||||
$this->l10n = $l10n;
|
||||
$this->labelService = $labelService;
|
||||
$this->attachmentService = $attachmentService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,10 +66,13 @@ class DefaultBoardService {
|
||||
return false;
|
||||
}
|
||||
|
||||
private function getDefaultBoardData(): array {
|
||||
$defaultBoardDataJson = file_get_contents(__DIR__ . '/fixtures/default-board.json');
|
||||
return json_decode($defaultBoardDataJson, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $title
|
||||
* @param $userId
|
||||
* @param $color
|
||||
* @return \OCP\AppFramework\Db\Entity
|
||||
* @throws \OCA\Deck\NoPermissionException
|
||||
* @throws \OCA\Deck\StatusException
|
||||
@@ -71,19 +81,71 @@ class DefaultBoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function createDefaultBoard(string $title, string $userId, string $color) {
|
||||
$defaultBoard = $this->boardService->create($title, $userId, $color);
|
||||
$defaultStacks = [];
|
||||
$defaultCards = [];
|
||||
$boardData = $this->getDefaultBoardData();
|
||||
|
||||
/** @var Board $defaultBoard */
|
||||
$defaultBoard = $this->boardService->create(
|
||||
$boardData['title'] ?? $title,
|
||||
$userId,
|
||||
$boardData['color'] ?? $color,
|
||||
);
|
||||
$boardId = $defaultBoard->getId();
|
||||
$additionLabels = [];
|
||||
$translatedLabelTitles = [
|
||||
'Read more inside' => $this->l10n->t('Read more inside'),
|
||||
];
|
||||
$translatedStackTitles = [
|
||||
'Custom lists - click to rename!' => $this->l10n->t('Custom lists - click to rename!'),
|
||||
'To Do' => $this->l10n->t('To Do'),
|
||||
'In Progress' => $this->l10n->t('In Progress'),
|
||||
'Done' => $this->l10n->t('Done'),
|
||||
];
|
||||
$translatedCardTitles = [
|
||||
'1. Open to learn more about boards and cards' => $this->l10n->t('1. Open to learn more about boards and cards'),
|
||||
'2. Drag cards left and right, up and down' => $this->l10n->t('2. Drag cards left and right, up and down'),
|
||||
'3. Apply rich formatting and link content' => $this->l10n->t('3. Apply rich formatting and link content'),
|
||||
'4. Share, comment and collaborate!' => $this->l10n->t('4. Share, comment and collaborate!'),
|
||||
'Create your first card!' => $this->l10n->t('Create your first card!'),
|
||||
];
|
||||
|
||||
$defaultStacks[] = $this->stackService->create($this->l10n->t('To do'), $boardId, 1);
|
||||
$defaultStacks[] = $this->stackService->create($this->l10n->t('Doing'), $boardId, 1);
|
||||
$defaultStacks[] = $this->stackService->create($this->l10n->t('Done'), $boardId, 1);
|
||||
foreach ($boardData['addition_labels'] as $labelData) {
|
||||
$additionLabels[] = $this->labelService->create(
|
||||
$translatedLabelTitles[$labelData['title']] ?? $labelData['title'],
|
||||
$labelData['color'],
|
||||
$boardId
|
||||
);
|
||||
}
|
||||
|
||||
$defaultCards[] = $this->cardService->create($this->l10n->t('Example Task 3'), $defaultStacks[0]->getId(), 'text', 0, $userId);
|
||||
$defaultCards[] = $this->cardService->create($this->l10n->t('Example Task 2'), $defaultStacks[1]->getId(), 'text', 0, $userId);
|
||||
$defaultCards[] = $this->cardService->create($this->l10n->t('Example Task 1'), $defaultStacks[2]->getId(), 'text', 0, $userId);
|
||||
$defaultLabels = array_merge($defaultBoard->getLabels() ?? [], $additionLabels);
|
||||
|
||||
foreach ($boardData['stacks'] as $stackData) {
|
||||
$stack = $this->stackService->create(
|
||||
$translatedStackTitles[$stackData['title']] ?? $stackData['title'],
|
||||
$boardId,
|
||||
$stackData['order']
|
||||
);
|
||||
|
||||
foreach ($stackData['cards'] as $cardData) {
|
||||
$card = $this->cardService->create(
|
||||
$translatedCardTitles[$cardData['title']] ?? $cardData['title'],
|
||||
$stack->getId(),
|
||||
$cardData['type'],
|
||||
$cardData['order'],
|
||||
$userId,
|
||||
$cardData['description'],
|
||||
);
|
||||
|
||||
foreach ($defaultLabels as $defaultLabel) {
|
||||
if ($defaultLabel && in_array($defaultLabel->getTitle(), $cardData['labels'])) {
|
||||
$this->cardService->assignLabel($card->getId(), $defaultLabel->getId());
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($cardData['has_example_attachment'])) {
|
||||
$this->attachmentService->create($card->getId(), 'file', 'DEFAULT_SAMPLE_FILE');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $defaultBoard;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,15 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
|
||||
}
|
||||
|
||||
public function create(Attachment $attachment) {
|
||||
$file = $this->getUploadedFile();
|
||||
if ($attachment->getData() === 'DEFAULT_SAMPLE_FILE' && !$this->request->getUploadedFile('file')) {
|
||||
$file = [
|
||||
'name' => 'Nextcloud sample image - add your image here!.jpg',
|
||||
'tmp_name' => __DIR__ . '/../../img/sample-image.jpg',
|
||||
];
|
||||
} else {
|
||||
$file = $this->getUploadedFile();
|
||||
}
|
||||
|
||||
$fileName = $file['name'];
|
||||
|
||||
// get shares for current card
|
||||
|
||||
81
lib/Service/fixtures/default-board.json
Normal file
81
lib/Service/fixtures/default-board.json
Normal file
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"color": "bf678b",
|
||||
"addition_labels": [
|
||||
{
|
||||
"title": "Read more inside",
|
||||
"color": "CC317C"
|
||||
}
|
||||
],
|
||||
"stacks": [
|
||||
{
|
||||
"title": "Custom lists - click to rename!",
|
||||
"order": 0,
|
||||
"cards": [
|
||||
{
|
||||
"title": "1. Open to learn more about boards and cards",
|
||||
"description": "## Welcome to Nextcloud Deck!\n\nNextcloud Deck is a kanban style project management app that integrates seamlessly with the Nextcloud ecosystem. Here, you can create and manage boards to streamline your projects and organize project tasks visually using cards. A versatile tool, Nextcloud Deck will help you stay efficient in both personal and collaborative settings!\n\n### \ud83d\udccc How to set up a new board?\n\nAdd a new board via the \u201c+\u201d button or \u201cAdd board\u201d. Name your board and add a description to clarify its purpose if you wish.\n\nAdd task lists to your board via \u201cAdd List\u201d (e.g., \"To Do\"). Add cards to these lists to represent individual tasks or items. Organize your cards visually by assigning labels or colors.\n\nManage your board list: In the board menu next to the board name, you can edit, clone, archive and export your boards.\n\n### \ud83d\uddc2\ufe0f How to create and edit task cards?\n\nAdd cards via the \u201c+\u201d button on top of the list of your choice. Name your card and add a description using the available rich text formatting instruments.\n\nSet a due date to track deadlines and add responsible team members. Label your cards with tags for better navigation. You can create and manage tags in the sidebar, which is accessible via the toolbar button.\n\n### \ud83d\udca1Useful tips for Nextcloud Deck\n\n- Integrate Nextcloud Deck with Nextcloud Calendar and track the upcoming card deadlines.\n- Use comments to keep discussions around a task within its dedicated card.\n- Enable Nextcloud Deck notifications to always stay updated on changes to your boards.",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "To Do",
|
||||
"order": 1,
|
||||
"cards": [
|
||||
{
|
||||
"title": "2. Drag cards left and right, up and down",
|
||||
"description": "## \ud83d\udea6 Manage your boards and cards\n\nDrag your cards around the board to change position in the list or move them to other lists.\n\nArchive cards to remove them from the board without losing your content. You can always access archived cards and put them back by going to \"Show archived cards\" in the board menu.\n\nUse tags to assign types, statuses and other special attributes to your cards to aid visual navigation. Open the \"Tags\" tab in the sidebar of Nextcloud Deck to manage tags you can add to your cards.\n\n## \ud83d\udc53 Change how you view your boards\n\nTo navigate large boards easily, you can filter your cards by tags, team members, statuses and due dates. Open filter menu via Nextcloud Deck toolbar.\n\nEnable compact display mode in the Deck Board menu via the three dots menu in the toolbar. In the same menu, you can disable and enable cover images.",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0
|
||||
},
|
||||
{
|
||||
"title": "Create your first card!",
|
||||
"description": "",
|
||||
"labels": [
|
||||
"Action needed"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "In Progress",
|
||||
"order": 2,
|
||||
"cards": [
|
||||
{
|
||||
"title": "3. Apply rich formatting and link content",
|
||||
"description": "## \ud83c\udfa8 Make use of rich formatting in card descriptions\n\nYou can use various instruments to make your content more structured and informative. Try all the instruments yourself - use this checklist!\n\n- [ ] Apply headings of different hierarchy (H1-H6).\n- [ ] Use **bold** *italic* __underline__ and ~~strikethrough~~ text formatting.\n- [ ] Create unordered, ordered and to-do lists.\n- [ ] Highlight code and blockquotes, add various illustrated callouts.\n- [ ] Create and format tables\n- [ ] Add details\n- [ ] Add links, for example to [the Nextcloud website](https:\/\/nextcloud.com\/)\n- [ ] Insert attachments\n- [ ] Add emojis \ud83d\udd76\ufe0f \n\n## \ud83d\udd17 Attach files to cards\n\nYou can upload any files from your machine or pick from your Nextcloud Files, such as documents, presentations, images, video clips and anything else. Add files via \"Attachments\" tab.\n\n## \ud83c\udf04 Illustrate cards with images\n\nAttach images to your cards - they will automatically work as card covers.",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0,
|
||||
"has_example_attachment": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Done",
|
||||
"order": 3,
|
||||
"cards": [
|
||||
{
|
||||
"title": "4. Share, comment and collaborate!",
|
||||
"description": "## \ud83e\udd1d How to collaborate in your board?\n\nShare your cards and boards with others. In many Nextcloud apps, linked Nextcloud Deck items will appear as rich, interactive widgets. Once you assign someone to a card, they will receive a notification.\n\nEdit cards together, leave notes for your teammates, share task-related files by adding attachments and discuss your tasks using card comments.\n\n### ",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1046,4 +1046,21 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
||||
}
|
||||
$cursor->closeCursor();
|
||||
}
|
||||
|
||||
public function getOrphanedAttachmentShares(): array {
|
||||
$allCardIds = $this->cardMapper->getAllCardIds();
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('share', 's')
|
||||
->where($qb->expr()->eq('s.share_type', $qb->createNamedParameter(IShare::TYPE_DECK)))
|
||||
->andWhere($qb->expr()->notIn('s.share_with', $qb->createNamedParameter($allCardIds, IQueryBuilder::PARAM_STR_ARRAY)));
|
||||
|
||||
$cursor = $qb->execute();
|
||||
$shares = [];
|
||||
while ($data = $cursor->fetch()) {
|
||||
$shares[] = $this->createShareObject($data);
|
||||
}
|
||||
|
||||
return $shares;
|
||||
}
|
||||
}
|
||||
|
||||
587
package-lock.json
generated
587
package-lock.json
generated
@@ -1,31 +1,31 @@
|
||||
{
|
||||
"name": "deck",
|
||||
"version": "1.15.2",
|
||||
"version": "2.0.0-dev.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "deck",
|
||||
"version": "1.15.2",
|
||||
"version": "2.0.0-dev.0",
|
||||
"license": "agpl",
|
||||
"dependencies": {
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/runtime": "^7.26.0",
|
||||
"@babel/runtime": "^7.27.1",
|
||||
"@nextcloud/auth": "^2.4.0",
|
||||
"@nextcloud/axios": "^2.5.1",
|
||||
"@nextcloud/capabilities": "^1.2.0",
|
||||
"@nextcloud/dialogs": "^6.0.1",
|
||||
"@nextcloud/event-bus": "^3.3.1",
|
||||
"@nextcloud/dialogs": "^6.3.1",
|
||||
"@nextcloud/event-bus": "^3.3.2",
|
||||
"@nextcloud/files": "^3.10.1",
|
||||
"@nextcloud/initial-state": "^2.2.0",
|
||||
"@nextcloud/l10n": "^3.1.0",
|
||||
"@nextcloud/moment": "^1.3.2",
|
||||
"@nextcloud/moment": "^1.3.4",
|
||||
"@nextcloud/notify_push": "^1.3.0",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/vue": "^8.22.0",
|
||||
"@nextcloud/vue": "^8.27.0",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"chroma-js": "^3.1.2",
|
||||
"dompurify": "^3.2.3",
|
||||
"dompurify": "^3.2.5",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
@@ -47,16 +47,16 @@
|
||||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.2.0",
|
||||
"@nextcloud/browserslist-config": "^3.0.1",
|
||||
"@nextcloud/cypress": "^1.0.0-beta.12",
|
||||
"@nextcloud/eslint-config": "^8.4.1",
|
||||
"@nextcloud/cypress": "^1.0.0-beta.15",
|
||||
"@nextcloud/eslint-config": "^8.4.2",
|
||||
"@nextcloud/stylelint-config": "^3.0.1",
|
||||
"@nextcloud/webpack-vue-config": "^6.2.0",
|
||||
"@relative-ci/agent": "^4.2.14",
|
||||
"@nextcloud/webpack-vue-config": "^6.3.0",
|
||||
"@relative-ci/agent": "^4.3.1",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"@vue/vue2-jest": "^29.2.6",
|
||||
"cypress": "^13.17.0",
|
||||
"eslint-plugin-cypress": "^3.6.0",
|
||||
"eslint-webpack-plugin": "^4.2.0",
|
||||
"eslint-webpack-plugin": "^5.0.1",
|
||||
"jest": "^29.7.0",
|
||||
"jest-serializer-vue": "^3.1.0",
|
||||
"stylelint-webpack-plugin": "^5.0.1",
|
||||
@@ -104,15 +104,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
|
||||
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
|
||||
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.25.9",
|
||||
"js-tokens": "^4.0.0",
|
||||
"picocolors": "^1.1.1"
|
||||
"picocolors": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -535,18 +535,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
|
||||
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
|
||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -578,26 +578,26 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
|
||||
"integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz",
|
||||
"integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.27.2",
|
||||
"@babel/types": "^7.27.6"
|
||||
"@babel/template": "^7.27.0",
|
||||
"@babel/types": "^7.27.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.27.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
|
||||
"integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz",
|
||||
"integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.27.3"
|
||||
"@babel/types": "^7.27.0"
|
||||
},
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@@ -1927,15 +1927,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
|
||||
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz",
|
||||
"integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/parser": "^7.27.2",
|
||||
"@babel/types": "^7.27.1"
|
||||
"@babel/code-frame": "^7.26.2",
|
||||
"@babel/parser": "^7.27.0",
|
||||
"@babel/types": "^7.27.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1961,13 +1961,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
|
||||
"integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz",
|
||||
"integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.27.1"
|
||||
"@babel/helper-string-parser": "^7.25.9",
|
||||
"@babel/helper-validator-identifier": "^7.25.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -2360,9 +2360,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@grpc/grpc-js": {
|
||||
"version": "1.13.4",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz",
|
||||
"integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==",
|
||||
"version": "1.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.2.tgz",
|
||||
"integrity": "sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -2374,9 +2374,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@grpc/proto-loader": {
|
||||
"version": "0.7.15",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz",
|
||||
"integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==",
|
||||
"version": "0.7.13",
|
||||
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz",
|
||||
"integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -4841,10 +4841,11 @@
|
||||
"integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg=="
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
"version": "8.56.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
|
||||
"integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
|
||||
"version": "9.6.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
|
||||
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/estree": "*",
|
||||
"@types/json-schema": "*"
|
||||
@@ -4919,11 +4920,10 @@
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@types/http-proxy": {
|
||||
"version": "1.17.16",
|
||||
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz",
|
||||
"integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==",
|
||||
"version": "1.17.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz",
|
||||
"integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
@@ -5064,9 +5064,9 @@
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@types/semver": {
|
||||
"version": "7.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz",
|
||||
"integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==",
|
||||
"version": "7.5.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
|
||||
"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/send": {
|
||||
@@ -5359,11 +5359,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
@@ -6391,11 +6390,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/available-typed-arrays": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
|
||||
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
|
||||
"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"possible-typed-array-names": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
@@ -6419,9 +6422,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz",
|
||||
"integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==",
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz",
|
||||
"integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
@@ -6870,9 +6873,7 @@
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||
"version": "1.1.11",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -7237,16 +7238,48 @@
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
|
||||
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
|
||||
"integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.0",
|
||||
"es-define-property": "^1.0.0",
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2",
|
||||
"get-intrinsic": "^1.2.4",
|
||||
"set-function-length": "^1.2.1"
|
||||
"set-function-length": "^1.2.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind-apply-helpers": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
||||
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0",
|
||||
"function-bind": "^1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bound": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
|
||||
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"get-intrinsic": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -8821,9 +8854,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/dockerode": {
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.7.tgz",
|
||||
"integrity": "sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==",
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.5.tgz",
|
||||
"integrity": "sha512-ZPmKSr1k1571Mrh7oIBS/j0AqAccoecY2yH420ni5j1KyNMgnoTh4Nu4FWunh0HZIJmRSmSysJjBIpa/zyWUEA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -8959,6 +8992,21 @@
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"gopd": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/eastasianwidth": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||
@@ -9017,11 +9065,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/editorconfig/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
@@ -9287,13 +9334,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/es-define-property": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
|
||||
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"get-intrinsic": "^1.2.4"
|
||||
},
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
@@ -9314,6 +9359,19 @@
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/es-object-atoms": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-errors": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-set-tostringtag": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
|
||||
@@ -9846,19 +9904,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-webpack-plugin": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz",
|
||||
"integrity": "sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-5.0.1.tgz",
|
||||
"integrity": "sha512-Ur100Vi+z0uP7j4Z8Ccah0pXmNHhl3f7P2hCYZj3mZCOSc33G5c1R/vZ4KCapwWikPgRyD4dkangx6JW3KaVFQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/eslint": "^8.56.10",
|
||||
"@types/eslint": "^9.6.1",
|
||||
"jest-worker": "^29.7.0",
|
||||
"micromatch": "^4.0.5",
|
||||
"micromatch": "^4.0.8",
|
||||
"normalize-path": "^3.0.0",
|
||||
"schema-utils": "^4.2.0"
|
||||
"schema-utils": "^4.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.15.0"
|
||||
"node": ">= 18.12.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
@@ -9870,15 +9929,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-webpack-plugin/node_modules/ajv": {
|
||||
"version": "8.12.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
|
||||
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
|
||||
"version": "8.17.1",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
|
||||
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"fast-uri": "^3.0.1",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
"require-from-string": "^2.0.2",
|
||||
"uri-js": "^4.2.2"
|
||||
"require-from-string": "^2.0.2"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
@@ -9890,6 +9950,7 @@
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
|
||||
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3"
|
||||
},
|
||||
@@ -9925,13 +9986,15 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/eslint-webpack-plugin/node_modules/schema-utils": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
|
||||
"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
|
||||
"integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/json-schema": "^7.0.9",
|
||||
"ajv": "^8.9.0",
|
||||
@@ -9939,7 +10002,7 @@
|
||||
"ajv-keywords": "^5.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12.13.0"
|
||||
"node": ">= 10.13.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
@@ -10283,7 +10346,6 @@
|
||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
|
||||
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/events": {
|
||||
@@ -10538,8 +10600,7 @@
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
|
||||
"integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/fast-xml-parser": {
|
||||
"version": "4.5.3",
|
||||
@@ -10794,13 +10855,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/for-each": {
|
||||
"version": "0.3.3",
|
||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
|
||||
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
|
||||
"integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"is-callable": "^1.1.3"
|
||||
"is-callable": "^1.2.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/foreground-child": {
|
||||
@@ -11001,16 +11069,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
|
||||
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"call-bind-apply-helpers": "^1.0.2",
|
||||
"es-define-property": "^1.0.1",
|
||||
"es-errors": "^1.3.0",
|
||||
"es-object-atoms": "^1.1.1",
|
||||
"function-bind": "^1.1.2",
|
||||
"has-proto": "^1.0.1",
|
||||
"has-symbols": "^1.0.3",
|
||||
"hasown": "^2.0.0"
|
||||
"get-proto": "^1.0.1",
|
||||
"gopd": "^1.2.0",
|
||||
"has-symbols": "^1.1.0",
|
||||
"hasown": "^2.0.2",
|
||||
"math-intrinsics": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -11028,6 +11102,20 @@
|
||||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/get-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"dunder-proto": "^1.0.1",
|
||||
"es-object-atoms": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/get-stream": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
|
||||
@@ -11239,12 +11327,13 @@
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/gopd": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
||||
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"get-intrinsic": "^1.1.3"
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
@@ -11316,6 +11405,7 @@
|
||||
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
|
||||
"integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
@@ -11324,10 +11414,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
|
||||
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
@@ -11336,13 +11427,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/has-tostringtag": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
|
||||
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
||||
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"has-symbols": "^1.0.2"
|
||||
"has-symbols": "^1.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -11619,7 +11711,6 @@
|
||||
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
|
||||
"integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"eventemitter3": "^4.0.0",
|
||||
@@ -11661,7 +11752,6 @@
|
||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
|
||||
"integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
@@ -12355,13 +12445,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/is-typed-array": {
|
||||
"version": "1.1.12",
|
||||
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
|
||||
"integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
|
||||
"version": "1.1.15",
|
||||
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
|
||||
"integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"which-typed-array": "^1.1.11"
|
||||
"which-typed-array": "^1.1.16"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -14285,11 +14376,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/js-beautify/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
@@ -14572,9 +14662,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/linkifyjs": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.1.3.tgz",
|
||||
"integrity": "sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg==",
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz",
|
||||
"integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/listr2": {
|
||||
@@ -14824,9 +14914,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/long": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
|
||||
"integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz",
|
||||
"integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
@@ -14932,6 +15022,16 @@
|
||||
"version": "1.2.6",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/mathml-tag-names": {
|
||||
"version": "2.1.3",
|
||||
"dev": true,
|
||||
@@ -16558,22 +16658,83 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pbkdf2": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
|
||||
"integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz",
|
||||
"integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"create-hash": "^1.1.2",
|
||||
"create-hmac": "^1.1.4",
|
||||
"ripemd160": "^2.0.1",
|
||||
"safe-buffer": "^5.0.1",
|
||||
"sha.js": "^2.4.8"
|
||||
"create-hash": "~1.1.3",
|
||||
"create-hmac": "^1.1.7",
|
||||
"ripemd160": "=2.0.1",
|
||||
"safe-buffer": "^5.2.1",
|
||||
"sha.js": "^2.4.11",
|
||||
"to-buffer": "^1.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.12"
|
||||
}
|
||||
},
|
||||
"node_modules/pbkdf2/node_modules/create-hash": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
|
||||
"integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"cipher-base": "^1.0.1",
|
||||
"inherits": "^2.0.1",
|
||||
"ripemd160": "^2.0.0",
|
||||
"sha.js": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pbkdf2/node_modules/hash-base": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
|
||||
"integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/pbkdf2/node_modules/ripemd160": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
|
||||
"integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"hash-base": "^2.0.0",
|
||||
"inherits": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/pbkdf2/node_modules/safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/pend": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
||||
@@ -16689,6 +16850,17 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/possible-typed-array-names": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
|
||||
"integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.38",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
|
||||
@@ -17011,9 +17183,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/protobufjs": {
|
||||
"version": "7.5.3",
|
||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz",
|
||||
"integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==",
|
||||
"version": "7.4.0",
|
||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz",
|
||||
"integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "BSD-3-Clause",
|
||||
@@ -19695,6 +19867,52 @@
|
||||
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/to-buffer": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz",
|
||||
"integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"isarray": "^2.0.5",
|
||||
"safe-buffer": "^5.2.1",
|
||||
"typed-array-buffer": "^1.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/to-buffer/node_modules/isarray": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
|
||||
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/to-buffer/node_modules/safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
@@ -20017,15 +20235,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typed-array-buffer": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
|
||||
"integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
|
||||
"integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"call-bind": "^1.0.2",
|
||||
"get-intrinsic": "^1.2.1",
|
||||
"is-typed-array": "^1.1.10"
|
||||
"call-bound": "^1.0.3",
|
||||
"es-errors": "^1.3.0",
|
||||
"is-typed-array": "^1.1.14"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
@@ -20998,18 +21217,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/webdav/node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"license": "MIT",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webdav/node_modules/entities": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
|
||||
"integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
|
||||
"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"
|
||||
@@ -21505,17 +21723,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/which-typed-array": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
|
||||
"integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
|
||||
"version": "1.1.19",
|
||||
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
|
||||
"integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"available-typed-arrays": "^1.0.5",
|
||||
"call-bind": "^1.0.2",
|
||||
"for-each": "^0.3.3",
|
||||
"gopd": "^1.0.1",
|
||||
"has-tostringtag": "^1.0.0"
|
||||
"available-typed-arrays": "^1.0.7",
|
||||
"call-bind": "^1.0.8",
|
||||
"call-bound": "^1.0.4",
|
||||
"for-each": "^0.3.5",
|
||||
"get-proto": "^1.0.1",
|
||||
"gopd": "^1.2.0",
|
||||
"has-tostringtag": "^1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
|
||||
26
package.json
26
package.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "deck",
|
||||
"description": "",
|
||||
"version": "1.15.2",
|
||||
"version": "2.0.0-dev.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Julius Härtl",
|
||||
@@ -31,22 +31,22 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/runtime": "^7.26.0",
|
||||
"@babel/runtime": "^7.27.1",
|
||||
"@nextcloud/auth": "^2.4.0",
|
||||
"@nextcloud/axios": "^2.5.1",
|
||||
"@nextcloud/capabilities": "^1.2.0",
|
||||
"@nextcloud/dialogs": "^6.0.1",
|
||||
"@nextcloud/event-bus": "^3.3.1",
|
||||
"@nextcloud/dialogs": "^6.3.1",
|
||||
"@nextcloud/event-bus": "^3.3.2",
|
||||
"@nextcloud/files": "^3.10.1",
|
||||
"@nextcloud/initial-state": "^2.2.0",
|
||||
"@nextcloud/l10n": "^3.1.0",
|
||||
"@nextcloud/moment": "^1.3.2",
|
||||
"@nextcloud/moment": "^1.3.4",
|
||||
"@nextcloud/notify_push": "^1.3.0",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/vue": "^8.22.0",
|
||||
"@nextcloud/vue": "^8.27.0",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"chroma-js": "^3.1.2",
|
||||
"dompurify": "^3.2.3",
|
||||
"dompurify": "^3.2.5",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
@@ -75,16 +75,16 @@
|
||||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.2.0",
|
||||
"@nextcloud/browserslist-config": "^3.0.1",
|
||||
"@nextcloud/cypress": "^1.0.0-beta.12",
|
||||
"@nextcloud/eslint-config": "^8.4.1",
|
||||
"@nextcloud/cypress": "^1.0.0-beta.15",
|
||||
"@nextcloud/eslint-config": "^8.4.2",
|
||||
"@nextcloud/stylelint-config": "^3.0.1",
|
||||
"@nextcloud/webpack-vue-config": "^6.2.0",
|
||||
"@relative-ci/agent": "^4.2.14",
|
||||
"@nextcloud/webpack-vue-config": "^6.3.0",
|
||||
"@relative-ci/agent": "^4.3.1",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"@vue/vue2-jest": "^29.2.6",
|
||||
"cypress": "^13.17.0",
|
||||
"eslint-plugin-cypress": "^3.6.0",
|
||||
"eslint-webpack-plugin": "^4.2.0",
|
||||
"eslint-webpack-plugin": "^5.0.1",
|
||||
"jest": "^29.7.0",
|
||||
"jest-serializer-vue": "^3.1.0",
|
||||
"stylelint-webpack-plugin": "^5.0.1",
|
||||
@@ -106,4 +106,4 @@
|
||||
"<rootDir>/node_modules/jest-serializer-vue"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ export default {
|
||||
// to tell the backend to fetch all activites related to cards of a given board
|
||||
activities = activities.filter((activity) => {
|
||||
return (activity.object_type === 'deck_board' && activity.object_id === this.objectId)
|
||||
|| (activity.object_type === 'deck_card' && activity.subject_rich[1].board.id === this.objectId)
|
||||
|| (activity.object_type === 'deck_card' && activity.subject_rich[1].board.id === this.objectId.toString())
|
||||
})
|
||||
}
|
||||
this.activities.push(...activities)
|
||||
|
||||
@@ -263,10 +263,10 @@ import { mapState, mapGetters } from 'vuex'
|
||||
import { subscribe, unsubscribe } from '@nextcloud/event-bus'
|
||||
import { NcActions, NcActionButton, NcAvatar, NcButton, NcPopover, NcModal } from '@nextcloud/vue'
|
||||
import labelStyle from '../mixins/labelStyle.js'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import ImageIcon from 'vue-material-design-icons/ImageMultiple.vue'
|
||||
import FilterIcon from 'vue-material-design-icons/Filter.vue'
|
||||
import FilterOffIcon from 'vue-material-design-icons/FilterOff.vue'
|
||||
import ArchiveIcon from 'vue-material-design-icons/ArchiveOutline.vue'
|
||||
import ImageIcon from 'vue-material-design-icons/ImageMultipleOutline.vue'
|
||||
import FilterIcon from 'vue-material-design-icons/FilterOutline.vue'
|
||||
import FilterOffIcon from 'vue-material-design-icons/FilterOffOutline.vue'
|
||||
import TableColumnPlusAfter from 'vue-material-design-icons/TableColumnPlusAfter.vue'
|
||||
import ArrowCollapseVerticalIcon from 'vue-material-design-icons/ArrowCollapseVertical.vue'
|
||||
import ArrowExpandVerticalIcon from 'vue-material-design-icons/ArrowExpandVertical.vue'
|
||||
|
||||
@@ -56,9 +56,9 @@ import DeletedTabSidebar from './DeletedTabSidebar.vue'
|
||||
import TimelineTabSidebar from './TimelineTabSidebar.vue'
|
||||
import { NcAppSidebar, NcAppSidebarTab } from '@nextcloud/vue'
|
||||
import ActivityIcon from 'vue-material-design-icons/LightningBolt.vue'
|
||||
import SharingIcon from 'vue-material-design-icons/ShareVariant.vue'
|
||||
import TagsIcon from 'vue-material-design-icons/TagMultiple.vue'
|
||||
import TrashIcon from 'vue-material-design-icons/Delete.vue'
|
||||
import SharingIcon from 'vue-material-design-icons/ShareVariantOutline.vue'
|
||||
import TagsIcon from 'vue-material-design-icons/TagMultipleOutline.vue'
|
||||
import TrashIcon from 'vue-material-design-icons/DeleteOutline.vue'
|
||||
const capabilities = window.OC.getCapabilities()
|
||||
|
||||
export default {
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
import ClickOutside from 'vue-click-outside'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import { Container, Draggable } from 'vue-smooth-dnd'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import ArchiveIcon from 'vue-material-design-icons/ArchiveOutline.vue'
|
||||
import CardPlusOutline from 'vue-material-design-icons/CardPlusOutline.vue'
|
||||
import { NcActions, NcActionButton, NcModal } from '@nextcloud/vue'
|
||||
import { showError, showUndo } from '@nextcloud/dialogs'
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<script>
|
||||
import { defineComponent } from 'vue'
|
||||
import { NcAvatar, NcSelect } from '@nextcloud/vue'
|
||||
import AccountMultiple from 'vue-material-design-icons/AccountMultiple.vue'
|
||||
import AccountMultiple from 'vue-material-design-icons/AccountMultipleOutline.vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'AssignmentSelector',
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
:subtitle="subtitleTooltip"
|
||||
:name-editable.sync="isEditingTitle"
|
||||
@update:name="(value) => titleEditing = value"
|
||||
@update:active="(value) => activeTabId = value"
|
||||
@dismiss-editing="titleEditing = currentCard.title"
|
||||
@submit-name="handleSubmitTitle"
|
||||
@opened="focusHeader"
|
||||
@@ -37,7 +38,8 @@
|
||||
:name="t('deck', 'Details')">
|
||||
<CardSidebarTabDetails :card="currentCard" />
|
||||
<template #icon>
|
||||
<HomeIcon :size="20" />
|
||||
<HomeIcon v-if="activeTabId === 'details'" :size="20" />
|
||||
<HomeOutlineIcon v-else :size="20" />
|
||||
</template>
|
||||
</NcAppSidebarTab>
|
||||
|
||||
@@ -54,7 +56,8 @@
|
||||
:order="2"
|
||||
:name="t('deck', 'Comments')">
|
||||
<template #icon>
|
||||
<CommentIcon :size="20" />
|
||||
<CommentIcon v-if="activeTabId === 'comments'" :size="20" />
|
||||
<CommentOutlineIcon v-else :size="20" />
|
||||
</template>
|
||||
<CardSidebarTabComments :card="currentCard" :tab-query="tabQuery" />
|
||||
</NcAppSidebarTab>
|
||||
@@ -84,7 +87,9 @@ import relativeDate from '../../mixins/relativeDate.js'
|
||||
import moment from '@nextcloud/moment'
|
||||
import AttachmentIcon from 'vue-material-design-icons/Paperclip.vue'
|
||||
import HomeIcon from 'vue-material-design-icons/Home.vue'
|
||||
import HomeOutlineIcon from 'vue-material-design-icons/HomeOutline.vue'
|
||||
import CommentIcon from 'vue-material-design-icons/Comment.vue'
|
||||
import CommentOutlineIcon from 'vue-material-design-icons/CommentOutline.vue'
|
||||
import ActivityIcon from 'vue-material-design-icons/LightningBolt.vue'
|
||||
|
||||
import { showError, showWarning } from '@nextcloud/dialogs'
|
||||
@@ -107,7 +112,9 @@ export default {
|
||||
ActivityIcon,
|
||||
AttachmentIcon,
|
||||
CommentIcon,
|
||||
CommentOutlineIcon,
|
||||
HomeIcon,
|
||||
HomeOutlineIcon,
|
||||
CardMenuEntries,
|
||||
},
|
||||
mixins: [relativeDate],
|
||||
@@ -133,6 +140,7 @@ export default {
|
||||
titleEditing: '',
|
||||
hasActivity: capabilities && capabilities.activity,
|
||||
locale: getLocale(),
|
||||
activeTabId: this.tabId || 'details',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -170,7 +178,8 @@ export default {
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
currentCard() {
|
||||
currentCard(newCard, oldCard) {
|
||||
if (newCard.id === oldCard.id) return
|
||||
this.focusHeader()
|
||||
},
|
||||
'currentCard.title': {
|
||||
|
||||
@@ -121,7 +121,12 @@ export default {
|
||||
// do it or not based on the next element instead of always
|
||||
// adding it.
|
||||
// FIXME user names can contain spaces, in that case they need to be wrapped @"user name" [a-zA-Z0-9\ _\.@\-']+
|
||||
const mentionValue = mention.firstElementChild.attributes['data-mention-id'].value
|
||||
let mentionValue
|
||||
if (mention.attributes['data-at-embedded'].value === 'true') {
|
||||
mentionValue = mention.parentNode.parentNode.querySelector('.user-bubble__wrapper').attributes['data-mention-id'].value
|
||||
} else {
|
||||
mentionValue = mention.firstChild.attributes['data-mention-id'].value
|
||||
}
|
||||
if (mentionValue.indexOf(' ') !== -1) {
|
||||
mention.replaceWith(' @"' + mentionValue + '" ')
|
||||
} else {
|
||||
|
||||
@@ -82,7 +82,7 @@ import CommentForm from './CommentForm.vue'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import md5 from 'blueimp-md5'
|
||||
import relativeDate from '../../mixins/relativeDate.js'
|
||||
import ReplyIcon from 'vue-material-design-icons/Reply.vue'
|
||||
import ReplyIcon from 'vue-material-design-icons/ReplyOutline.vue'
|
||||
import moment from 'moment'
|
||||
|
||||
const AtMention = {
|
||||
|
||||
@@ -99,10 +99,10 @@ import {
|
||||
import readableDate from '../../mixins/readableDate.js'
|
||||
import { getDayNamesMin, getFirstDay, getMonthNamesShort } from '@nextcloud/l10n'
|
||||
import moment from '@nextcloud/moment'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import ArchiveIcon from 'vue-material-design-icons/ArchiveOutline.vue'
|
||||
import Plus from 'vue-material-design-icons/Plus.vue'
|
||||
import Calendar from 'vue-material-design-icons/Calendar.vue'
|
||||
import CalendarCheck from 'vue-material-design-icons/CalendarCheck.vue'
|
||||
import Calendar from 'vue-material-design-icons/CalendarOutline.vue'
|
||||
import CalendarCheck from 'vue-material-design-icons/CalendarCheckOutline.vue'
|
||||
import CheckIcon from 'vue-material-design-icons/Check.vue'
|
||||
import ClearIcon from 'vue-material-design-icons/Close.vue'
|
||||
import CardDetailEntry from './CardDetailEntry.vue'
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<script>
|
||||
import { NcSelect } from '@nextcloud/vue'
|
||||
import Color from '../../mixins/color.js'
|
||||
import TagMultiple from 'vue-material-design-icons/TagMultiple.vue'
|
||||
import TagMultiple from 'vue-material-design-icons/TagMultipleOutline.vue'
|
||||
|
||||
export default {
|
||||
name: 'TagSelector',
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<script>
|
||||
import { NcAvatar, NcPopover } from '@nextcloud/vue'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import AccountMultiple from 'vue-material-design-icons/AccountMultiple.vue'
|
||||
import AccountMultiple from 'vue-material-design-icons/AccountMultipleOutline.vue'
|
||||
|
||||
export default {
|
||||
name: 'AvatarList',
|
||||
|
||||
@@ -49,8 +49,8 @@ import CardId from './badges/CardId.vue'
|
||||
import TextIcon from 'vue-material-design-icons/Text.vue'
|
||||
import AttachmentIcon from 'vue-material-design-icons/Paperclip.vue'
|
||||
import CheckmarkIcon from 'vue-material-design-icons/CheckboxMarked.vue'
|
||||
import CommentIcon from 'vue-material-design-icons/Comment.vue'
|
||||
import CommentUnreadIcon from 'vue-material-design-icons/CommentAccount.vue'
|
||||
import CommentIcon from 'vue-material-design-icons/CommentOutline.vue'
|
||||
import CommentUnreadIcon from 'vue-material-design-icons/CommentAccountOutline.vue'
|
||||
import DueDate from './badges/DueDate.vue'
|
||||
|
||||
export default {
|
||||
|
||||
@@ -63,9 +63,9 @@
|
||||
<script>
|
||||
import { NcActionButton } from '@nextcloud/vue'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import CardBulletedIcon from 'vue-material-design-icons/CardBulleted.vue'
|
||||
import PencilIcon from 'vue-material-design-icons/Pencil.vue'
|
||||
import ArchiveIcon from 'vue-material-design-icons/ArchiveOutline.vue'
|
||||
import CardBulletedIcon from 'vue-material-design-icons/CardBulletedOutline.vue'
|
||||
import PencilIcon from 'vue-material-design-icons/PencilOutline.vue'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { showUndo } from '@nextcloud/dialogs'
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
:exact="true"
|
||||
to="/">
|
||||
<template #icon>
|
||||
<CalendarIcon :size="20" />
|
||||
<CalendarIcon v-if="$route.path === '/'" :size="20" />
|
||||
<CalendarOutlineIcon v-else :size="20" />
|
||||
</template>
|
||||
</NcAppNavigationItem>
|
||||
<AppNavigationBoardCategory id="deck-navigation-all"
|
||||
@@ -29,7 +30,8 @@
|
||||
:text="t('deck', 'Archived boards')"
|
||||
:boards="archivedBoards">
|
||||
<template #icon>
|
||||
<ArchiveIcon :size="20" decorative />
|
||||
<ArchiveIcon v-if="$route.path === '/board/archived'" :size="20" decorative />
|
||||
<ArchiveOutlineIcon v-else :size="20" decorative />
|
||||
</template>
|
||||
</AppNavigationBoardCategory>
|
||||
<AppNavigationBoardCategory id="deck-navigation-shared"
|
||||
@@ -42,6 +44,7 @@
|
||||
</template>
|
||||
</AppNavigationBoardCategory>
|
||||
<AppNavigationAddBoard v-if="canCreate" />
|
||||
<AppNavigationImportBoard v-if="canCreate" />
|
||||
</template>
|
||||
<template #footer>
|
||||
<NcAppNavigationSettings :name="t('deck', 'Deck settings')">
|
||||
@@ -111,11 +114,14 @@ import { loadState } from '@nextcloud/initial-state'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import ArchiveOutlineIcon from 'vue-material-design-icons/ArchiveOutline.vue'
|
||||
import CalendarIcon from 'vue-material-design-icons/Calendar.vue'
|
||||
import CalendarOutlineIcon from 'vue-material-design-icons/CalendarOutline.vue'
|
||||
import DeckIcon from './../icons/DeckIcon.vue'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/Share.vue'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/ShareOutline.vue'
|
||||
import HelpModal from './../modals/HelpModal.vue'
|
||||
import { subscribe } from '@nextcloud/event-bus'
|
||||
import AppNavigationImportBoard from './AppNavigationImportBoard.vue'
|
||||
|
||||
const canCreateState = loadState('deck', 'canCreate')
|
||||
|
||||
@@ -127,10 +133,13 @@ export default {
|
||||
NcButton,
|
||||
AppNavigationAddBoard,
|
||||
AppNavigationBoardCategory,
|
||||
AppNavigationImportBoard,
|
||||
NcSelect,
|
||||
NcAppNavigationItem,
|
||||
ArchiveIcon,
|
||||
ArchiveOutlineIcon,
|
||||
CalendarIcon,
|
||||
CalendarOutlineIcon,
|
||||
DeckIcon,
|
||||
ShareVariantIcon,
|
||||
HelpModal,
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
<template #icon>
|
||||
<NcAppNavigationIconBullet :color="board.color" />
|
||||
<BoardCloneModal v-if="cloneModalOpen" :board-title="board.title" @close="onCloseCloneModal" />
|
||||
<BoardExportModal v-if="exportModalOpen"
|
||||
:board-title="board.title"
|
||||
@export="onExportBoard"
|
||||
@close="onCloseExportBoard" />
|
||||
</template>
|
||||
|
||||
<template #counter>
|
||||
@@ -150,9 +154,9 @@
|
||||
<script>
|
||||
import { NcAppNavigationIconBullet, NcAppNavigationItem, NcColorPicker, NcButton, NcTextField, NcActionButton } from '@nextcloud/vue'
|
||||
import ClickOutside from 'vue-click-outside'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import ArchiveIcon from 'vue-material-design-icons/ArchiveOutline.vue'
|
||||
import CloneIcon from 'vue-material-design-icons/ContentDuplicate.vue'
|
||||
import AccountIcon from 'vue-material-design-icons/Account.vue'
|
||||
import AccountIcon from 'vue-material-design-icons/AccountOutline.vue'
|
||||
import CloseIcon from 'vue-material-design-icons/Close.vue'
|
||||
import CheckIcon from 'vue-material-design-icons/Check.vue'
|
||||
|
||||
@@ -161,6 +165,8 @@ import { emit } from '@nextcloud/event-bus'
|
||||
|
||||
import isTouchDevice from '../../mixins/isTouchDevice.js'
|
||||
import BoardCloneModal from './BoardCloneModal.vue'
|
||||
import BoardExportModal from './BoardExportModal.vue'
|
||||
import { showLoading } from '@nextcloud/dialogs'
|
||||
|
||||
const canCreateState = loadState('deck', 'canCreate')
|
||||
|
||||
@@ -179,6 +185,7 @@ export default {
|
||||
CloseIcon,
|
||||
CheckIcon,
|
||||
BoardCloneModal,
|
||||
BoardExportModal,
|
||||
},
|
||||
directives: {
|
||||
ClickOutside,
|
||||
@@ -207,6 +214,7 @@ export default {
|
||||
updateDueSetting: null,
|
||||
canCreate: canCreateState,
|
||||
cloneModalOpen: false,
|
||||
exportModalOpen: false,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -346,7 +354,16 @@ export default {
|
||||
this.updateDueSetting = null
|
||||
},
|
||||
actionExport() {
|
||||
this.boardApi.exportBoard(this.board)
|
||||
this.exportModalOpen = true
|
||||
},
|
||||
async onExportBoard(format) {
|
||||
this.exportModalOpen = false
|
||||
const loadingToast = showLoading(t('deck', 'Exporting board...'))
|
||||
await this.boardApi.exportBoard(this.board, format)
|
||||
loadingToast.hideToast()
|
||||
},
|
||||
onCloseExportBoard() {
|
||||
this.exportModalOpen = false
|
||||
},
|
||||
onNavigate() {
|
||||
if (this.isTouchDevice) {
|
||||
|
||||
55
src/components/navigation/AppNavigationImportBoard.vue
Normal file
55
src/components/navigation/AppNavigationImportBoard.vue
Normal file
@@ -0,0 +1,55 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
<template>
|
||||
<div>
|
||||
<NcAppNavigationItem :name="t('deck', 'Import board')" icon="icon-upload" @click.prevent.stop="startImportBoard" />
|
||||
<input ref="fileInput"
|
||||
type="file"
|
||||
accept="application/json"
|
||||
style="display: none;"
|
||||
@change="doImportBoard">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { NcAppNavigationItem } from '@nextcloud/vue'
|
||||
import { showError } from '../../helpers/errors.js'
|
||||
import { showSuccess, showLoading } from '@nextcloud/dialogs'
|
||||
|
||||
export default {
|
||||
name: 'AppNavigationImportBoard',
|
||||
components: { NcAppNavigationItem },
|
||||
props: {
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
value: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
startImportBoard() {
|
||||
this.$refs.fileInput.value = ''
|
||||
this.$refs.fileInput.click()
|
||||
},
|
||||
async doImportBoard(event) {
|
||||
const file = event.target.files[0]
|
||||
if (file) {
|
||||
const loadingToast = showLoading(t('deck', 'Importing board...'))
|
||||
const result = await this.$store.dispatch('importBoard', file)
|
||||
loadingToast.hideToast()
|
||||
if (result?.message) {
|
||||
showError(result)
|
||||
} else {
|
||||
showSuccess(t('deck', 'Board imported successfully'))
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
78
src/components/navigation/BoardExportModal.vue
Normal file
78
src/components/navigation/BoardExportModal.vue
Normal file
@@ -0,0 +1,78 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
<template>
|
||||
<NcDialog :name="t('deck', 'Export {boardTitle}', {boardTitle: boardTitle})" @update:open="close">
|
||||
<div class="modal__content">
|
||||
<NcCheckboxRadioSwitch :checked.sync="exportFormat"
|
||||
value="json"
|
||||
type="radio"
|
||||
name="board_export_format">
|
||||
{{ t('deck', 'Export as JSON') }}
|
||||
</NcCheckboxRadioSwitch>
|
||||
<NcCheckboxRadioSwitch :checked.sync="exportFormat"
|
||||
value="csv"
|
||||
type="radio"
|
||||
name="board_export_format">
|
||||
{{ t('deck', 'Export as CSV') }}
|
||||
</NcCheckboxRadioSwitch>
|
||||
|
||||
<p class="note">
|
||||
{{ t('deck', 'Note: Only the JSON format is supported for importing back into the Deck app.') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<template #actions>
|
||||
<NcButton @click="close">
|
||||
{{ t('deck', 'Cancel') }}
|
||||
</NcButton>
|
||||
<NcButton type="primary" @click="exportBoard">
|
||||
{{ t('deck', 'Export') }}
|
||||
</NcButton>
|
||||
</template>
|
||||
</NcDialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { NcButton, NcCheckboxRadioSwitch, NcDialog } from '@nextcloud/vue'
|
||||
|
||||
export default {
|
||||
name: 'BoardExportModal',
|
||||
components: {
|
||||
NcDialog,
|
||||
NcCheckboxRadioSwitch,
|
||||
NcButton,
|
||||
},
|
||||
props: {
|
||||
boardTitle: {
|
||||
type: String,
|
||||
default: 'Board',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
exportFormat: 'json',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
exportBoard() {
|
||||
this.$emit('export', this.exportFormat)
|
||||
this.close()
|
||||
},
|
||||
close() {
|
||||
this.$emit('close')
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.modal__content {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
p.note {
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
@@ -139,11 +139,30 @@ export class BoardApi {
|
||||
}
|
||||
}
|
||||
|
||||
exportBoard(board) {
|
||||
exportBoard(board, format) {
|
||||
return axios.get(this.url(`/boards/${board.id}/export`))
|
||||
.then(
|
||||
(response) => {
|
||||
const fields = { title: t('deck', 'Card title'), description: t('deck', 'Description'), stackId: t('deck', 'List name'), labels: t('deck', 'Tags'), duedate: t('deck', 'Due date'), createdAt: t('deck', 'Created'), lastModified: t('deck', 'Modified') }
|
||||
if (format === 'json') {
|
||||
const exportData = {
|
||||
boards: [response.data],
|
||||
}
|
||||
const stacks = {}
|
||||
for (const stack of response.data.stacks) {
|
||||
stacks[stack.id] = stack
|
||||
}
|
||||
exportData.boards[0].stacks = stacks
|
||||
const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: 'application/json' })
|
||||
const blobUrl = URL.createObjectURL(blob)
|
||||
const a = document.createElement('a')
|
||||
a.href = blobUrl
|
||||
a.download = response.data.title + '.json'
|
||||
a.click()
|
||||
a.remove()
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
const fields = { title: t('deck', 'Card title'), description: t('deck', 'Description'), stackId: t('deck', 'List name'), labels: t('deck', 'Tags'), assignedUsers: t('deck', 'Assigned users'), duedate: t('deck', 'Due date'), createdAt: t('deck', 'Created'), lastModified: t('deck', 'Modified') }
|
||||
let row = ''
|
||||
Object.keys(fields).forEach(field => {
|
||||
row += '"' + fields[field] + '"' + '\t'
|
||||
@@ -160,16 +179,27 @@ export class BoardApi {
|
||||
const date = new Date(Number(card[field]) * 1000)
|
||||
row += '"' + date.toLocaleDateString() + '"' + '\t'
|
||||
} else if (field === 'stackId') {
|
||||
row += '"' + stack.title + '"' + '\t'
|
||||
row += '"' + stack.title.replaceAll('"', '""') + '"' + '\t'
|
||||
} else if (field === 'labels') {
|
||||
row += '"'
|
||||
card[field].forEach(label => {
|
||||
row += label.title + ', '
|
||||
row += label.title.replaceAll('"', '""') + ', '
|
||||
})
|
||||
if (card[field].length > 0) {
|
||||
row = row.slice(0, -1)
|
||||
}
|
||||
row += '"' + '\t'
|
||||
} else if (field === 'assignedUsers') {
|
||||
row += '"'
|
||||
card[field].forEach(assignedUsers => {
|
||||
row += assignedUsers.participant.displayname.replaceAll('"', '""') + ', '
|
||||
})
|
||||
if (card[field].length > 0) {
|
||||
row = row.slice(0, -1)
|
||||
}
|
||||
row += '"' + '\t'
|
||||
} else if (field === 'description' || field === 'title') {
|
||||
row += '"' + card[field].replaceAll('"', '""') + '"' + '\t'
|
||||
} else {
|
||||
row += '"' + card[field] + '"' + '\t'
|
||||
}
|
||||
@@ -204,6 +234,27 @@ export class BoardApi {
|
||||
})
|
||||
}
|
||||
|
||||
importBoard(file) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return axios.post(this.url('/boards/import'), formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
})
|
||||
.then(
|
||||
(response) => {
|
||||
return Promise.resolve(response.data)
|
||||
},
|
||||
(err) => {
|
||||
return Promise.reject(err)
|
||||
},
|
||||
)
|
||||
.catch((err) => {
|
||||
return Promise.reject(err)
|
||||
})
|
||||
}
|
||||
|
||||
// Label API Calls
|
||||
deleteLabel(id) {
|
||||
return axios.delete(this.url(`/labels/${id}`))
|
||||
|
||||
@@ -402,6 +402,14 @@ export default new Vuex.Store({
|
||||
return err
|
||||
}
|
||||
},
|
||||
async importBoard({ commit }, file) {
|
||||
try {
|
||||
const board = await apiClient.importBoard(file)
|
||||
commit('addBoard', board)
|
||||
} catch (err) {
|
||||
return err
|
||||
}
|
||||
},
|
||||
async cloneBoard({ commit }, { boardData, settings }) {
|
||||
const { withCards, withAssignments, withLabels, withDueDate, moveCardsToLeftStack, restoreArchivedCards } = settings
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CalendarBlankIcon from 'vue-material-design-icons/CalendarBlank.vue'
|
||||
import CalendarBlankIcon from 'vue-material-design-icons/CalendarBlankOutline.vue'
|
||||
import TextIcon from 'vue-material-design-icons/Text.vue'
|
||||
import CardBulletedOutlineIcon from 'vue-material-design-icons/CardBulletedOutline.vue'
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CalendarBlankIcon from 'vue-material-design-icons/CalendarBlank.vue'
|
||||
import CalendarBlankIcon from 'vue-material-design-icons/CalendarBlankOutline.vue'
|
||||
import TextIcon from 'vue-material-design-icons/Text.vue'
|
||||
import CardBulletedOutlineIcon from 'vue-material-design-icons/CardBulletedOutline.vue'
|
||||
import CommentProcessingOutlineIcon from 'vue-material-design-icons/CommentProcessingOutline.vue'
|
||||
|
||||
@@ -276,10 +276,11 @@ export default {
|
||||
}
|
||||
},
|
||||
onSelectLabel(label) {
|
||||
if (!label.id) return
|
||||
this.card.labels.push(label)
|
||||
},
|
||||
onRemoveLabel(removedLabel) {
|
||||
this.card.labels = this.card.label.filter(label => label.id !== removedLabel.id)
|
||||
this.card.labels = this.card.labels.filter(label => label.id !== removedLabel.id)
|
||||
},
|
||||
onSelectUser(user) {
|
||||
this.card.assignedUsers.push(user)
|
||||
|
||||
@@ -1 +1 @@
|
||||
72460
|
||||
81373
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~9",
|
||||
"behat/behat": "~3.15.0",
|
||||
"behat/gherkin": "4.11.0",
|
||||
"behat/behat": "~3.23.0",
|
||||
"guzzlehttp/guzzle": "7.9.2",
|
||||
"jarnaiz/behat-junit-formatter": "^1.3",
|
||||
"sabre/dav": "4.7.0",
|
||||
|
||||
@@ -35,6 +35,7 @@ use OCA\Deck\Db\StackMapper;
|
||||
use OCA\Deck\InvalidAttachmentType;
|
||||
use OCA\Deck\Service\AttachmentService;
|
||||
use OCA\Deck\Service\IAttachmentService;
|
||||
use OCA\Deck\Sharing\DeckShareProvider;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
@@ -53,6 +54,8 @@ class DeleteCronTest extends TestCase {
|
||||
private $attachmentMapper;
|
||||
/** @var StackMapper|MockObject */
|
||||
private $stackMapper;
|
||||
/** @var DeckShareProvider */
|
||||
private $deckShareProvider;
|
||||
/** @var DeleteCron */
|
||||
protected $deleteCron;
|
||||
|
||||
@@ -64,7 +67,16 @@ class DeleteCronTest extends TestCase {
|
||||
$this->attachmentService = $this->createMock(AttachmentService::class);
|
||||
$this->attachmentMapper = $this->createMock(AttachmentMapper::class);
|
||||
$this->stackMapper = $this->createMock(StackMapper::class);
|
||||
$this->deleteCron = new DeleteCron($this->timeFactory, $this->boardMapper, $this->cardMapper, $this->attachmentService, $this->attachmentMapper, $this->stackMapper);
|
||||
$this->deckShareProvider = $this->createMock(DeckShareProvider::class);
|
||||
$this->deleteCron = new DeleteCron(
|
||||
$this->timeFactory,
|
||||
$this->boardMapper,
|
||||
$this->cardMapper,
|
||||
$this->attachmentService,
|
||||
$this->attachmentMapper,
|
||||
$this->stackMapper,
|
||||
$this->deckShareProvider,
|
||||
);
|
||||
}
|
||||
|
||||
protected function getBoard($id) {
|
||||
|
||||
@@ -29,6 +29,7 @@ use OCA\Deck\Controller\PageController;
|
||||
use OCA\Deck\NoPermissionException;
|
||||
use OCA\Deck\NotFoundException;
|
||||
use OCA\Deck\Service\BoardService;
|
||||
use OCA\Deck\Service\Importer\BoardImportService;
|
||||
use OCA\Deck\Service\PermissionService;
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
@@ -86,7 +87,15 @@ class ExceptionMiddlewareTest extends \Test\TestCase {
|
||||
public function testAfterExceptionFail() {
|
||||
$this->request->expects($this->any())->method('getId')->willReturn('abc123');
|
||||
// BoardService $boardService, PermissionService $permissionService, $userId
|
||||
$boardController = new BoardController('deck', $this->createMock(IRequest::class), $this->createMock(BoardService::class), $this->createMock(PermissionService::class), 'admin');
|
||||
$boardController = new BoardController(
|
||||
'deck',
|
||||
$this->createMock(IRequest::class),
|
||||
$this->createMock(BoardService::class),
|
||||
$this->createMock(PermissionService::class),
|
||||
$this->createMock(BoardImportService::class),
|
||||
$this->createMock(\OCP\IL10N::class),
|
||||
'admin'
|
||||
);
|
||||
$result = $this->exceptionMiddleware->afterException($boardController, 'bar', new \Exception('other exception message'));
|
||||
$this->assertEquals('Internal server error: Please contact the server administrator if this error reappears multiple times, please include the request ID "abc123" below in your report.', $result->getData()['message']);
|
||||
$this->assertEquals(500, $result->getData()['status']);
|
||||
|
||||
@@ -46,6 +46,12 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
/** @var CardService */
|
||||
private $cardService;
|
||||
|
||||
/** @var LabelService */
|
||||
private $labelService;
|
||||
|
||||
/** @var AttachmentService */
|
||||
private $attachmentService;
|
||||
|
||||
/** @var BoardMapper */
|
||||
private $boardMapper;
|
||||
|
||||
@@ -62,6 +68,8 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
$this->boardService = $this->createMock(BoardService::class);
|
||||
$this->stackService = $this->createMock(StackService::class);
|
||||
$this->cardService = $this->createMock(CardService::class);
|
||||
$this->labelService = $this->createMock(LabelService::class);
|
||||
$this->attachmentService = $this->createMock(AttachmentService::class);
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
$this->userId = 'admin';
|
||||
@@ -72,7 +80,9 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
$this->boardService,
|
||||
$this->stackService,
|
||||
$this->cardService,
|
||||
$this->config
|
||||
$this->config,
|
||||
$this->labelService,
|
||||
$this->attachmentService,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -109,8 +119,8 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testCreateDefaultBoard() {
|
||||
$title = 'Personal';
|
||||
$color = '317CCC';
|
||||
$title = 'Welcome to Nextcloud Deck!';
|
||||
$color = 'bf678b';
|
||||
$boardId = 5;
|
||||
|
||||
$board = new Board();
|
||||
@@ -128,34 +138,70 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
return $text;
|
||||
});
|
||||
|
||||
$stackCustomId = '122';
|
||||
$stackCustom = $this->assembleTestStack('Custom lists - click to rename!', $stackCustomId, $boardId);
|
||||
|
||||
$stackToDoId = '123';
|
||||
$stackToDo = $this->assembleTestStack('To do', $stackToDoId, $boardId);
|
||||
$stackToDo = $this->assembleTestStack('To Do', $stackToDoId, $boardId);
|
||||
|
||||
$stackDoingId = '124';
|
||||
$stackDoing = $this->assembleTestStack('Doing', $stackDoingId, $boardId);
|
||||
$stackDoing = $this->assembleTestStack('In Progress', $stackDoingId, $boardId);
|
||||
|
||||
$stackDoneId = '125';
|
||||
$stackDone = $this->assembleTestStack('Done', $stackDoneId, $boardId);
|
||||
$this->stackService->expects($this->exactly(3))
|
||||
->method('create')
|
||||
->withConsecutive(
|
||||
[$this->l10n->t('To do'), $boardId, 1],
|
||||
[$this->l10n->t('Doing'), $boardId, 1],
|
||||
[$this->l10n->t('Done'), $boardId, 1]
|
||||
)
|
||||
->willReturnOnConsecutiveCalls($stackToDo, $stackDoing, $stackDone);
|
||||
|
||||
$cardExampleTask3 = $this->assembleTestCard('Example Task 3', $stackToDoId, $this->userId);
|
||||
$cardExampleTask2 = $this->assembleTestCard('Example Task 2', $stackDoingId, $this->userId);
|
||||
$cardExampleTask1 = $this->assembleTestCard('Example Task 1', $stackDoneId, $this->userId);
|
||||
$this->cardService->expects($this->exactly(3))
|
||||
$this->stackService->expects($this->exactly(4))
|
||||
->method('create')
|
||||
->withConsecutive(
|
||||
['Example Task 3', $stackToDoId, 'text', 0, $this->userId],
|
||||
['Example Task 2', $stackDoingId, 'text', 0, $this->userId],
|
||||
['Example Task 1', $stackDoneId, 'text', 0, $this->userId]
|
||||
[$this->l10n->t('Custom lists - click to rename!'), $boardId, 0],
|
||||
[$this->l10n->t('To Do'), $boardId, 1],
|
||||
[$this->l10n->t('In Progress'), $boardId, 2],
|
||||
[$this->l10n->t('Done'), $boardId, 3]
|
||||
)
|
||||
->willReturnonConsecutiveCalls($cardExampleTask3, $cardExampleTask2, $cardExampleTask1);
|
||||
->willReturnOnConsecutiveCalls($stackCustom, $stackToDo, $stackDoing, $stackDone);
|
||||
|
||||
$cardExampleTask1 = $this->assembleTestCard(
|
||||
'1. Open to learn more about boards and cards',
|
||||
$stackCustomId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask2 = $this->assembleTestCard(
|
||||
'2. Drag cards left and right, up and down',
|
||||
$stackToDoId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask3 = $this->assembleTestCard(
|
||||
'Create your first card!',
|
||||
$stackToDoId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask4 = $this->assembleTestCard(
|
||||
'3. Apply rich formatting and link content',
|
||||
$stackDoingId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask5 = $this->assembleTestCard(
|
||||
'4. Share, comment and collaborate!',
|
||||
$stackDoneId,
|
||||
$this->userId
|
||||
);
|
||||
|
||||
$this->cardService->expects($this->exactly(5))
|
||||
->method('create')
|
||||
->withConsecutive(
|
||||
['1. Open to learn more about boards and cards', $stackCustomId, 'text', 0, $this->userId],
|
||||
['2. Drag cards left and right, up and down', $stackToDoId, 'text', 0, $this->userId],
|
||||
['Create your first card!', $stackToDoId, 'text', 1, $this->userId],
|
||||
['3. Apply rich formatting and link content', $stackDoingId, 'text', 0, $this->userId],
|
||||
['4. Share, comment and collaborate!', $stackDoneId, 'text', 0, $this->userId]
|
||||
)
|
||||
->willReturnonConsecutiveCalls(
|
||||
$cardExampleTask1,
|
||||
$cardExampleTask2,
|
||||
$cardExampleTask3,
|
||||
$cardExampleTask4,
|
||||
$cardExampleTask5
|
||||
);
|
||||
|
||||
$result = $this->service->createDefaultBoard($title, $this->userId, $color);
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ class BoardControllerTest extends \Test\TestCase {
|
||||
private $groupManager;
|
||||
private $boardService;
|
||||
private $permissionService;
|
||||
private $boardImportService;
|
||||
private $userId = 'user';
|
||||
|
||||
public function setUp(): void {
|
||||
@@ -63,6 +64,10 @@ class BoardControllerTest extends \Test\TestCase {
|
||||
'\OCA\Deck\Service\PermissionService')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$this->boardImportService = $this->getMockBuilder(
|
||||
'\OCA\Deck\Service\Importer\BoardImportService')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$user = $this->createMock(IUser::class);
|
||||
$this->groupManager->method('getUserGroupIds')
|
||||
@@ -76,6 +81,8 @@ class BoardControllerTest extends \Test\TestCase {
|
||||
$this->request,
|
||||
$this->boardService,
|
||||
$this->permissionService,
|
||||
$this->boardImportService,
|
||||
$this->l10n,
|
||||
$this->userId
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user