Compare commits
268 Commits
v1.8.2
...
bug/use-di
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
be27d3ed01 | ||
|
|
21c4955001 | ||
|
|
67adda5f84 | ||
|
|
1f8fc6661c | ||
|
|
97e7d2b2d7 | ||
|
|
84c96a00b2 | ||
|
|
bf5cd72361 | ||
|
|
2f0c89e513 | ||
|
|
59e816124a | ||
|
|
632d3c1ef2 | ||
|
|
a6d39488a4 | ||
|
|
d998a30235 | ||
|
|
8432efddde | ||
|
|
a70bf65032 | ||
|
|
68361c517b | ||
|
|
8bfdd72e37 | ||
|
|
71afaaefc3 | ||
|
|
15f8353ecd | ||
|
|
6907d87d32 | ||
|
|
35413d5154 | ||
|
|
9bde070b9b | ||
|
|
610ea1d36b | ||
|
|
21c5383f6f | ||
|
|
b58807363b | ||
|
|
04a6c83d2b | ||
|
|
c1b4708a74 | ||
|
|
286605ff01 | ||
|
|
790ecaac67 | ||
|
|
40b4ed2e1c | ||
|
|
844c4d8d9b | ||
|
|
1aefc990a5 | ||
|
|
329ebc1aec | ||
|
|
5fca656e50 | ||
|
|
c453721d75 | ||
|
|
06939a7362 | ||
|
|
b2e7709092 | ||
|
|
d2c2e0bd11 | ||
|
|
2b7e8d683b | ||
|
|
356c8fe518 | ||
|
|
316bc29d70 | ||
|
|
b6dc2cb1bf | ||
|
|
01ab56bada | ||
|
|
0d66944a5f | ||
|
|
4d91364028 | ||
|
|
a839a95821 | ||
|
|
103e86499e | ||
|
|
c52a7a42c4 | ||
|
|
b366eea8eb | ||
|
|
89a24151ee | ||
|
|
1438127c7b | ||
|
|
c781d29065 | ||
|
|
9094d611ae | ||
|
|
70be562fe3 | ||
|
|
761f2421ba | ||
|
|
6d68c0d0e3 | ||
|
|
3f8895077d | ||
|
|
42e756150d | ||
|
|
cbb9269920 | ||
|
|
a42f0a9b26 | ||
|
|
4ccfc6c1d1 | ||
|
|
a1834f97a8 | ||
|
|
86145c6095 | ||
|
|
3a839da89a | ||
|
|
baf381965c | ||
|
|
51231ac971 | ||
|
|
93fb32904b | ||
|
|
2d1d38804a | ||
|
|
ab12b0fab1 | ||
|
|
a8aa1a44e7 | ||
|
|
dd2e47bb0f | ||
|
|
e01fb76151 | ||
|
|
7288168dd7 | ||
|
|
2a48b4606b | ||
|
|
fd3fef9ccf | ||
|
|
847e2da3c7 | ||
|
|
56935b708a | ||
|
|
2ba8fb9afc | ||
|
|
76fd901062 | ||
|
|
b42076ccb8 | ||
|
|
4239571455 | ||
|
|
afc23d3f2c | ||
|
|
e0a02609af | ||
|
|
78039f8fcb | ||
|
|
1a654925e8 | ||
|
|
071cfca241 | ||
|
|
e93006ded0 | ||
|
|
4bc7a61f8f | ||
|
|
e55b3a0a26 | ||
|
|
0c59a85c9c | ||
|
|
09e0d2e143 | ||
|
|
0fd9e62340 | ||
|
|
ccf669bc85 | ||
|
|
5eb0091c35 | ||
|
|
6ea0e24d44 | ||
|
|
cd5753f247 | ||
|
|
467a3a454e | ||
|
|
0ae73b57d5 | ||
|
|
95837d0626 | ||
|
|
8698e2ce3f | ||
|
|
19f466fd4d | ||
|
|
07bc1456cd | ||
|
|
6bd89da255 | ||
|
|
c3c886ed7e | ||
|
|
f28b25c6ba | ||
|
|
fba496ea68 | ||
|
|
71ca523745 | ||
|
|
56f9d8db1d | ||
|
|
95b1f4ed5e | ||
|
|
f0bf0d448b | ||
|
|
ed282479a1 | ||
|
|
b648947ad7 | ||
|
|
723fb807da | ||
|
|
7a23f3b0d2 | ||
|
|
8fc4238bd9 | ||
|
|
d5dfd2c80c | ||
|
|
c32a6070f5 | ||
|
|
1405220d81 | ||
|
|
ae73912343 | ||
|
|
d8e423b45e | ||
|
|
805f185191 | ||
|
|
a231061043 | ||
|
|
1f66c66ad3 | ||
|
|
39c59a3bd6 | ||
|
|
bfec6f5ad4 | ||
|
|
f35a9d08e5 | ||
|
|
bb8b8c7bb7 | ||
|
|
10495e5fe1 | ||
|
|
9caacda036 | ||
|
|
7c960cbc5f | ||
|
|
df10c7b2fe | ||
|
|
96c7fe3b94 | ||
|
|
f7717aa02a | ||
|
|
1598896157 | ||
|
|
54f70bc5d0 | ||
|
|
a740c7ce0d | ||
|
|
26ff25af72 | ||
|
|
31da745700 | ||
|
|
566f0f923a | ||
|
|
e78fb49cf9 | ||
|
|
2c7878b910 | ||
|
|
43d28eb68a | ||
|
|
03832ee93e | ||
|
|
bbac134b0f | ||
|
|
f13c260e9b | ||
|
|
eb4c572226 | ||
|
|
1c75744f4a | ||
|
|
e5959fa8da | ||
|
|
b47c7aca34 | ||
|
|
ca91e7a2ed | ||
|
|
b92fddaf65 | ||
|
|
b7de565bac | ||
|
|
9c8e1a9f6e | ||
|
|
7e479b0505 | ||
|
|
8f65ec2ede | ||
|
|
6912ae09cf | ||
|
|
eaa3315348 | ||
|
|
5669bd73cc | ||
|
|
57989384fa | ||
|
|
74c04b2d71 | ||
|
|
74565debbb | ||
|
|
a2744823c1 | ||
|
|
a918459105 | ||
|
|
1217b37b19 | ||
|
|
f9acf7778f | ||
|
|
8537bd00c7 | ||
|
|
4b62c34cc3 | ||
|
|
94d84f2b16 | ||
|
|
14e7c33886 | ||
|
|
60ee9f77ca | ||
|
|
3eaba6fe1a | ||
|
|
cef14ed254 | ||
|
|
0828ae6017 | ||
|
|
3af54d7186 | ||
|
|
f01a4433ed | ||
|
|
4f5eeffdf9 | ||
|
|
86ab64160c | ||
|
|
b64b29cf6e | ||
|
|
d93b431554 | ||
|
|
d00bd159d2 | ||
|
|
816a8c08f0 | ||
|
|
2c3113334a | ||
|
|
857a0797b4 | ||
|
|
efc3511e15 | ||
|
|
aaccd2e7d2 | ||
|
|
1921143bfd | ||
|
|
07b7df8e68 | ||
|
|
c4804cfcb7 | ||
|
|
6bc5f1df47 | ||
|
|
f8a8cc691c | ||
|
|
a4b2a137e5 | ||
|
|
96b5c3da1d | ||
|
|
a716c0968a | ||
|
|
48c8333ed1 | ||
|
|
8224ff13c3 | ||
|
|
e150cd25e8 | ||
|
|
6206a0cdd1 | ||
|
|
d66b54dd13 | ||
|
|
5491c9444e | ||
|
|
0fc5708253 | ||
|
|
918342eeb7 | ||
|
|
ec66e0f291 | ||
|
|
d76a1f539b | ||
|
|
c81501c2ea | ||
|
|
d62bd4e99a | ||
|
|
863ce50a27 | ||
|
|
a9c4e626ac | ||
|
|
982df96c3c | ||
|
|
bc070cbeb9 | ||
|
|
dbac5f82d3 | ||
|
|
58c7786cf7 | ||
|
|
14db941950 | ||
|
|
36a531c204 | ||
|
|
0fa1f74699 | ||
|
|
9189723970 | ||
|
|
d7bcdeb5a7 | ||
|
|
4d9e81e22f | ||
|
|
466c39d12a | ||
|
|
86e7d04c80 | ||
|
|
a6b5ae3fde | ||
|
|
bb3f41dd69 | ||
|
|
b2bdf4a49d | ||
|
|
91268cdd4c | ||
|
|
6b621d2faa | ||
|
|
93db4fd2d8 | ||
|
|
f166552de0 | ||
|
|
aab3352624 | ||
|
|
26f33e5bc6 | ||
|
|
da4db42380 | ||
|
|
aa46b49ab7 | ||
|
|
b70e893364 | ||
|
|
a6bb454df5 | ||
|
|
099e76aeab | ||
|
|
309b00f2d9 | ||
|
|
acd181133c | ||
|
|
86f8999d30 | ||
|
|
661a64656e | ||
|
|
3380103a8f | ||
|
|
7ebf6e4150 | ||
|
|
05fdd9765c | ||
|
|
72a8c4dd83 | ||
|
|
423630bea6 | ||
|
|
2c9bcbae0b | ||
|
|
f70747ea15 | ||
|
|
b4c1525958 | ||
|
|
ed5df26704 | ||
|
|
d8253d41fd | ||
|
|
4eb7988e2c | ||
|
|
4f68aed812 | ||
|
|
322d01d3e1 | ||
|
|
aa34a0cce3 | ||
|
|
93a988f8f1 | ||
|
|
630fa5b07e | ||
|
|
77f623d261 | ||
|
|
30a4e88cff | ||
|
|
01b897bd8b | ||
|
|
be36e6de6a | ||
|
|
96b7a7ccb3 | ||
|
|
d8dd65d7ee | ||
|
|
aecdcb847d | ||
|
|
a383d389c4 | ||
|
|
565b2edfdd | ||
|
|
c1b4beeb64 | ||
|
|
9d489564d6 | ||
|
|
24a4260e55 | ||
|
|
71e5c0d743 | ||
|
|
48d28dc317 | ||
|
|
ad007bd51a | ||
|
|
6ed7f672fc |
52
.github/dependabot.yml
vendored
52
.github/dependabot.yml
vendored
@@ -11,6 +11,58 @@ updates:
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
- juliushaertl
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable25
|
||||
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: stable24
|
||||
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: stable23
|
||||
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: composer
|
||||
directory: "/"
|
||||
schedule:
|
||||
|
||||
2
.github/workflows/appbuild.yml
vendored
2
.github/workflows/appbuild.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
|
||||
6
.github/workflows/appstore-build-publish.yml
vendored
6
.github/workflows/appstore-build-publish.yml
vendored
@@ -44,7 +44,7 @@ jobs:
|
||||
expression: "//info//dependencies//nextcloud/@min-version"
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@v1.2
|
||||
uses: skjnldsv/read-package-engines-version-actions@v2.0
|
||||
id: versions
|
||||
# Continue if no package.json
|
||||
continue-on-error: true
|
||||
@@ -66,14 +66,14 @@ jobs:
|
||||
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
|
||||
|
||||
- name: Set up php ${{ env.PHP_VERSION }}
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: ${{ env.PHP_VERSION }}
|
||||
coverage: none
|
||||
|
||||
- name: Check composer.json
|
||||
id: check_composer
|
||||
uses: andstor/file-existence-action@v1
|
||||
uses: andstor/file-existence-action@v2
|
||||
with:
|
||||
files: "${{ env.APP_NAME }}/composer.json"
|
||||
|
||||
|
||||
2
.github/workflows/command-rebase.yml
vendored
2
.github/workflows/command-rebase.yml
vendored
@@ -37,7 +37,7 @@ jobs:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Automatic Rebase
|
||||
uses: cirrus-actions/rebase@1.7
|
||||
uses: cirrus-actions/rebase@1.8
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
|
||||
10
.github/workflows/cypress.yml
vendored
10
.github/workflows/cypress.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
# containers: [1, 2, 3]
|
||||
php-versions: [ '7.4' ]
|
||||
databases: [ 'sqlite' ]
|
||||
server-versions: [ 'stable25' ]
|
||||
server-versions: [ 'master' ]
|
||||
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu
|
||||
@@ -84,7 +84,7 @@ jobs:
|
||||
curl -v http://localhost:8081/index.php/login
|
||||
|
||||
- name: Cypress run
|
||||
uses: cypress-io/github-action@v4
|
||||
uses: cypress-io/github-action@v5
|
||||
with:
|
||||
record: true
|
||||
parallel: false
|
||||
@@ -96,7 +96,7 @@ jobs:
|
||||
npm_package_name: ${{ env.APP_NAME }}
|
||||
|
||||
- name: Upload test failure screenshots
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload screenshots
|
||||
@@ -104,7 +104,7 @@ jobs:
|
||||
retention-days: 5
|
||||
|
||||
- name: Upload nextcloud logs
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload nextcloud log
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
# Github actions bot approve
|
||||
- uses: hmarr/auto-approve-action@v2
|
||||
- uses: hmarr/auto-approve-action@v3
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
6
.github/workflows/integration.yml
vendored
6
.github/workflows/integration.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
matrix:
|
||||
php-versions: ['7.4']
|
||||
databases: ['sqlite', 'mysql', 'pgsql']
|
||||
server-versions: ['stable25']
|
||||
server-versions: ['master']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
|
||||
- name: Set up PHPUnit
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer i
|
||||
run: composer i --no-dev
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
|
||||
4
.github/workflows/lint.yml
vendored
4
.github/workflows/lint.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up php${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
|
||||
2
.github/workflows/nightly.yml
vendored
2
.github/workflows/nightly.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
|
||||
4
.github/workflows/phpunit.yml
vendored
4
.github/workflows/phpunit.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
databases: ['sqlite', 'mysql', 'pgsql']
|
||||
server-versions: ['stable25']
|
||||
server-versions: ['master']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit
|
||||
|
||||
2
.github/workflows/psalm.yml
vendored
2
.github/workflows/psalm.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@v2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
|
||||
4
.github/workflows/update-nextcloud-ocp.yml
vendored
4
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -28,7 +28,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php7.4
|
||||
uses: shivammathur/setup-php@v2
|
||||
uses: shivammathur/setup-php@2.22.0
|
||||
with:
|
||||
php-version: 7.4
|
||||
extensions: ctype,curl,dom,fileinfo,gd,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
@@ -49,7 +49,7 @@ jobs:
|
||||
continue-on-error: true
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v3
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: Update psalm baseline
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,3 +9,4 @@ tests/.phpunit.result.cache
|
||||
vendor/
|
||||
.php_cs.cache
|
||||
\.idea/
|
||||
settings.json
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
|
||||
lang_map = hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:deck]
|
||||
file_filter = translationfiles/<lang>/deck.po
|
||||
|
||||
48
CHANGELOG.md
48
CHANGELOG.md
@@ -1,24 +1,8 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 1.8.2
|
||||
|
||||
### Fixed
|
||||
|
||||
- minor style fixes [#4201](https://github.com/nextcloud/deck/pull/4201)
|
||||
- feat: add validators to check values in services [#4174](https://github.com/nextcloud/deck/pull/4174)
|
||||
- Add integration test for attachment handling on cards [#4179](https://github.com/nextcloud/deck/pull/4179)
|
||||
- Add missing userId property [#4198](https://github.com/nextcloud/deck/pull/4198)
|
||||
|
||||
## 1.8.1
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix Duedate activity @nickvergessen [#4155](https://github.com/nextcloud/deck/pull/4155)
|
||||
|
||||
## 1.8.0
|
||||
|
||||
### Added
|
||||
## 1.8.0-beta.1
|
||||
### Enhancements
|
||||
|
||||
- Nextcloud 25 compatibility
|
||||
- Performance improvements
|
||||
@@ -30,26 +14,10 @@ All notable changes to this project will be documented in this file.
|
||||
- Improve filter popover accessibility @juliushaertl [#3820](https://github.com/nextcloud/deck/pull/3820)
|
||||
- Set ids to skip to content/navigation @juliushaertl [#3924](https://github.com/nextcloud/deck/pull/3924)
|
||||
- Invert icons properly in dark mode @juliushaertl [#3939](https://github.com/nextcloud/deck/pull/3939)
|
||||
- Implement card reference widget @eneiluj [#4031](https://github.com/nextcloud/deck/pull/4031)
|
||||
- Implement new dashboard widget interfaces @eneiluj [#4033](https://github.com/nextcloud/deck/pull/4033)
|
||||
- Add related resources panel to board sharing tab sidebar @Pytal [#4000](https://github.com/nextcloud/deck/pull/4000)
|
||||
- Bump dependencies
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix sorting stacks [#4116](https://github.com/nextcloud/deck/pull/4116)
|
||||
- Fix issue with duedate format [#4140](https://github.com/nextcloud/deck/pull/4140)
|
||||
- Fix missing icon for activity rendering [#4090](https://github.com/nextcloud/deck/pull/4090)
|
||||
- disables autocomplete on card creation [#4142](https://github.com/nextcloud/deck/pull/4142)
|
||||
- Set event link also for notifications that get emitted from activities [#4117](https://github.com/nextcloud/deck/pull/4117)
|
||||
- Fix attachment creator name: show display name @eneiluj [#4036](https://github.com/nextcloud/deck/pull/4036)
|
||||
- Fix reference provider when caching @eneiluj [#4056](https://github.com/nextcloud/deck/pull/4056)
|
||||
- Use global import for nextcloud-vue [#4072](https://github.com/nextcloud/deck/pull/4072)
|
||||
- Disable Create card button while no stack is chosen @icewind1991 [#4014](https://github.com/nextcloud/deck/pull/4014)
|
||||
- Adjust testing matrix for Nextcloud 25 on stable25 @nickvergessen [#4068](https://github.com/nextcloud/deck/pull/4068)
|
||||
- Fix Card menu not displaying when description is not set @marcelklehr [#4105](https://github.com/nextcloud/deck/pull/4105)
|
||||
- Reference widget adjustments for Text [#4075](https://github.com/nextcloud/deck/pull/4075)
|
||||
- use OCP\Collaboration\Reference\Reference [#4078](https://github.com/nextcloud/deck/pull/4078)
|
||||
- Cache user membership for circles [#4141](https://github.com/nextcloud/deck/pull/4141)
|
||||
- set last modified when the card was found. Fixes #3763 @ylebre [#3796](https://github.com/nextcloud/deck/pull/3796)
|
||||
- Increase file count after sharing @luka-nextcloud [#3682](https://github.com/nextcloud/deck/pull/3682)
|
||||
- Align Duedate-delete icon properly - fixes nextcloud/deck#3791 @Ben-Ro [#3811](https://github.com/nextcloud/deck/pull/3811)
|
||||
@@ -494,7 +462,7 @@ Android app team for helping to improve our REST API:
|
||||
- Fix comment activities on Nextcloud 15
|
||||
- Fix issues with Edge
|
||||
- API: Fix numeric types that were returned as strings
|
||||
- API: Fix If-Modified-Since header parsing
|
||||
- API: Fix If-Modified-Since header parsing
|
||||
|
||||
|
||||
## 0.5.1 - 2018-12-05
|
||||
@@ -621,7 +589,7 @@ Android app team for helping to improve our REST API:
|
||||
### Fixed
|
||||
- Various frontend fixes
|
||||
- Fix sidebar drag issues
|
||||
- Improvements for IE11
|
||||
- Improvements for IE11
|
||||
- Fix bug when draging a card to an empty stack
|
||||
|
||||
## 0.2.1 - 2017-07-04
|
||||
@@ -695,7 +663,7 @@ Android app team for helping to improve our REST API:
|
||||
|
||||
### Fixed
|
||||
- Various styling improvements
|
||||
- Fix problems with MySQL and PostgreSQL
|
||||
- Fix problems with MySQL and PostgreSQL
|
||||
- Select first color by default when creating boards
|
||||
- Fix error when changing board permissions
|
||||
|
||||
@@ -703,9 +671,9 @@ Android app team for helping to improve our REST API:
|
||||
|
||||
### Added
|
||||
- Sharing boards with other users
|
||||
- Create and manage boards
|
||||
- Create and manage boards
|
||||
- Sort cards on stacks by drag-and-drop
|
||||
- Assign labels
|
||||
- Markdown notes for each card
|
||||
- Archive cards
|
||||
- Archive cards
|
||||
|
||||
|
||||
10
Makefile
10
Makefile
@@ -30,6 +30,16 @@ build: clean-dist install-deps build-js
|
||||
|
||||
release: clean-dist install-deps-nodev build-js
|
||||
|
||||
lint: lint-js lint-php
|
||||
|
||||
lint-js:
|
||||
npm run lint
|
||||
npm run stylelint
|
||||
|
||||
lint-php:
|
||||
composer run lint 1>/dev/null
|
||||
composer run cs:check
|
||||
|
||||
build-js: install-deps-js
|
||||
npm run build
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ Deck is a kanban style organization tool aimed at personal planning and project
|
||||
### Mobile apps
|
||||
|
||||
- [Nextcloud Deck app for Android](https://github.com/stefan-niedermann/nextcloud-deck) - It is available in [F-Droid](https://f-droid.org/de/packages/it.niedermann.nextcloud.deck/) and the [Google Play Store](https://play.google.com/store/apps/details?id=it.niedermann.nextcloud.deck.play)
|
||||
- [deck NG for Android and iOS](https://github.com/meltzow/deck-ng) - It is available in [Google Play Store](https://play.google.com/store/apps/details?id=net.meltzow.deckng) and [Apple App Store](https://apps.apple.com/us/app/deck-ng/id6443334702)
|
||||
|
||||
### 3rd-Party Integrations
|
||||
|
||||
@@ -65,13 +66,18 @@ Improvements on Nextcloud server and Deck itself will improve the situation.
|
||||
|
||||
## Developing
|
||||
|
||||
### Nextcloud environment
|
||||
|
||||
You need to setup a [development environment](https://docs.nextcloud.com/server/latest/developer_manual//getting_started/devenv.html) of the current nextcloud version. You can also alternatively install & run the [nextcloud docker container](https://github.com/juliushaertl/nextcloud-docker-dev).
|
||||
After the finished installation, you can clone the deck project directly in the `/[nextcloud-docker-dev-dir]/workspace/server/apps/` folder.
|
||||
|
||||
### PHP
|
||||
|
||||
Nothing to prepare, just dig into the code.
|
||||
|
||||
### JavaScript
|
||||
|
||||
This requires at least Node 14 and npm 7 to be installed.
|
||||
This requires at least Node 16 and npm 7 to be installed.
|
||||
|
||||
Deck requires running a `make build-js` to install npm dependencies and build the JavaScript code using webpack. While developing you can also use `make watch` to rebuild everytime the code changes.
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>1.8.2</version>
|
||||
<version>1.9.0-beta.1</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<namespace>Deck</namespace>
|
||||
@@ -34,13 +34,18 @@
|
||||
<database min-version="9.4">pgsql</database>
|
||||
<database>sqlite</database>
|
||||
<database min-version="8.0">mysql</database>
|
||||
<nextcloud min-version="25" max-version="25"/>
|
||||
<nextcloud min-version="26" max-version="26"/>
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\Deck\Cron\DeleteCron</job>
|
||||
<job>OCA\Deck\Cron\ScheduledNotifications</job>
|
||||
<job>OCA\Deck\Cron\CardDescriptionActivity</job>
|
||||
</background-jobs>
|
||||
<repair-steps>
|
||||
<live-migration>
|
||||
<step>OCA\Deck\Migration\DeletedCircleCleanup</step>
|
||||
</live-migration>
|
||||
</repair-steps>
|
||||
<commands>
|
||||
<command>OCA\Deck\Command\UserExport</command>
|
||||
<command>OCA\Deck\Command\BoardImport</command>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"symfony/event-dispatcher": "^4.0",
|
||||
"vimeo/psalm": "^4.3",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.2",
|
||||
"nextcloud/ocp": "dev-stable25"
|
||||
"nextcloud/ocp": "dev-master"
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
|
||||
241
composer.lock
generated
241
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "445858d371d9a1c7057d0603c566966a",
|
||||
"content-hash": "ef9413dedd4d47de717c4dea87a07000",
|
||||
"packages": [
|
||||
{
|
||||
"name": "cogpowered/finediff",
|
||||
@@ -1192,16 +1192,16 @@
|
||||
},
|
||||
{
|
||||
"name": "nextcloud/ocp",
|
||||
"version": "dev-stable25",
|
||||
"version": "dev-master",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nextcloud-deps/ocp.git",
|
||||
"reference": "9b19a5a12c990cafe832aa8ccc95be4f57f24c9d"
|
||||
"reference": "bf16e87ef27d0c3d5812cc2352ecf50f2b96e669"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/9b19a5a12c990cafe832aa8ccc95be4f57f24c9d",
|
||||
"reference": "9b19a5a12c990cafe832aa8ccc95be4f57f24c9d",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/bf16e87ef27d0c3d5812cc2352ecf50f2b96e669",
|
||||
"reference": "bf16e87ef27d0c3d5812cc2352ecf50f2b96e669",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1210,6 +1210,7 @@
|
||||
"psr/event-dispatcher": "^1.0",
|
||||
"psr/log": "^1.1"
|
||||
},
|
||||
"default-branch": true,
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@@ -1229,22 +1230,22 @@
|
||||
"description": "Composer package containing Nextcloud's public API (classes, interfaces)",
|
||||
"support": {
|
||||
"issues": "https://github.com/nextcloud-deps/ocp/issues",
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/stable25"
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
|
||||
},
|
||||
"time": "2022-11-11T00:48:02+00:00"
|
||||
"time": "2022-12-17T00:35:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
"version": "v4.14.0",
|
||||
"version": "v4.15.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
|
||||
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
|
||||
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
|
||||
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1285,9 +1286,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0"
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2"
|
||||
},
|
||||
"time": "2022-05-31T20:59:12+00:00"
|
||||
"time": "2022-11-12T15:38:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "openlss/lib-array2xml",
|
||||
@@ -1674,25 +1675,30 @@
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/type-resolver",
|
||||
"version": "1.6.1",
|
||||
"version": "1.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
||||
"reference": "77a32518733312af16a44300404e945338981de3"
|
||||
"reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
|
||||
"reference": "77a32518733312af16a44300404e945338981de3",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d",
|
||||
"reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.2 || ^8.0",
|
||||
"php": "^7.4 || ^8.0",
|
||||
"phpdocumentor/reflection-common": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-tokenizer": "*",
|
||||
"psalm/phar": "^4.8"
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
"phpstan/phpstan": "^1.8",
|
||||
"phpstan/phpstan-phpunit": "^1.1",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"rector/rector": "^0.13.9",
|
||||
"vimeo/psalm": "^4.25"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -1718,22 +1724,22 @@
|
||||
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
|
||||
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
|
||||
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2"
|
||||
},
|
||||
"time": "2022-03-15T21:29:03+00:00"
|
||||
"time": "2022-10-14T12:47:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "9.2.17",
|
||||
"version": "9.2.19",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8"
|
||||
"reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8",
|
||||
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559",
|
||||
"reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1789,7 +1795,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17"
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1797,7 +1803,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-30T12:24:04+00:00"
|
||||
"time": "2022-11-18T07:47:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
@@ -2042,16 +2048,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "9.5.24",
|
||||
"version": "9.5.27",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5"
|
||||
"reference": "a2bc7ffdca99f92d959b3f2270529334030bba38"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5",
|
||||
"reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38",
|
||||
"reference": "a2bc7ffdca99f92d959b3f2270529334030bba38",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2073,14 +2079,14 @@
|
||||
"phpunit/php-timer": "^5.0.2",
|
||||
"sebastian/cli-parser": "^1.0.1",
|
||||
"sebastian/code-unit": "^1.0.6",
|
||||
"sebastian/comparator": "^4.0.5",
|
||||
"sebastian/comparator": "^4.0.8",
|
||||
"sebastian/diff": "^4.0.3",
|
||||
"sebastian/environment": "^5.1.3",
|
||||
"sebastian/exporter": "^4.0.3",
|
||||
"sebastian/exporter": "^4.0.5",
|
||||
"sebastian/global-state": "^5.0.1",
|
||||
"sebastian/object-enumerator": "^4.0.3",
|
||||
"sebastian/resource-operations": "^3.0.3",
|
||||
"sebastian/type": "^3.1",
|
||||
"sebastian/type": "^3.2",
|
||||
"sebastian/version": "^3.0.2"
|
||||
},
|
||||
"suggest": {
|
||||
@@ -2124,7 +2130,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2134,9 +2140,13 @@
|
||||
{
|
||||
"url": "https://github.com/sebastianbergmann",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-30T07:42:16+00:00"
|
||||
"time": "2022-12-09T07:31:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
@@ -2936,16 +2946,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/comparator",
|
||||
"version": "4.0.6",
|
||||
"version": "4.0.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/comparator.git",
|
||||
"reference": "55f4261989e546dc112258c7a75935a81a7ce382"
|
||||
"reference": "fa0f136dd2334583309d32b62544682ee972b51a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
|
||||
"reference": "55f4261989e546dc112258c7a75935a81a7ce382",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
|
||||
"reference": "fa0f136dd2334583309d32b62544682ee972b51a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2998,7 +3008,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/comparator/issues",
|
||||
"source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
|
||||
"source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3006,7 +3016,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-26T15:49:45+00:00"
|
||||
"time": "2022-09-14T12:41:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/complexity",
|
||||
@@ -3196,16 +3206,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
"version": "4.0.4",
|
||||
"version": "4.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/exporter.git",
|
||||
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
|
||||
"reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
|
||||
"reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3261,7 +3271,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/exporter/issues",
|
||||
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
|
||||
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3269,7 +3279,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-11-11T14:18:36+00:00"
|
||||
"time": "2022-09-14T06:03:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/global-state",
|
||||
@@ -3624,16 +3634,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/type",
|
||||
"version": "3.1.0",
|
||||
"version": "3.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/type.git",
|
||||
"reference": "fb44e1cc6e557418387ad815780360057e40753e"
|
||||
"reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e",
|
||||
"reference": "fb44e1cc6e557418387ad815780360057e40753e",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
|
||||
"reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3645,7 +3655,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.1-dev"
|
||||
"dev-master": "3.2-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -3668,7 +3678,7 @@
|
||||
"homepage": "https://github.com/sebastianbergmann/type",
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/type/issues",
|
||||
"source": "https://github.com/sebastianbergmann/type/tree/3.1.0"
|
||||
"source": "https://github.com/sebastianbergmann/type/tree/3.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3676,7 +3686,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-29T06:55:37+00:00"
|
||||
"time": "2022-09-12T14:47:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/version",
|
||||
@@ -3733,16 +3743,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v5.4.12",
|
||||
"version": "v5.4.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1"
|
||||
"reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1",
|
||||
"reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/ea59bb0edfaf9f28d18d8791410ee0355f317669",
|
||||
"reference": "ea59bb0edfaf9f28d18d8791410ee0355f317669",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3812,7 +3822,7 @@
|
||||
"terminal"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/console/tree/v5.4.12"
|
||||
"source": "https://github.com/symfony/console/tree/v5.4.15"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3828,7 +3838,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-17T13:18:05+00:00"
|
||||
"time": "2022-10-26T21:41:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
@@ -4258,16 +4268,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.26.0",
|
||||
"version": "v1.27.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
|
||||
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
|
||||
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
|
||||
"reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4282,7 +4292,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
"dev-main": "1.27-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -4320,7 +4330,7 @@
|
||||
"portable"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4336,20 +4346,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-grapheme",
|
||||
"version": "v1.26.0",
|
||||
"version": "v1.27.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
|
||||
"reference": "433d05519ce6990bf3530fba6957499d327395c2"
|
||||
"reference": "511a08c03c1960e08a883f4cffcacd219b758354"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2",
|
||||
"reference": "433d05519ce6990bf3530fba6957499d327395c2",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
|
||||
"reference": "511a08c03c1960e08a883f4cffcacd219b758354",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4361,7 +4371,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
"dev-main": "1.27-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -4401,7 +4411,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4417,20 +4427,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.26.0",
|
||||
"version": "v1.27.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
"reference": "219aa369ceff116e673852dce47c3a41794c14bd"
|
||||
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
|
||||
"reference": "219aa369ceff116e673852dce47c3a41794c14bd",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
|
||||
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4442,7 +4452,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
"dev-main": "1.27-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -4485,7 +4495,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4501,20 +4511,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.26.0",
|
||||
"version": "v1.27.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
|
||||
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
|
||||
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4529,7 +4539,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
"dev-main": "1.27-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -4568,7 +4578,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4584,20 +4594,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php73",
|
||||
"version": "v1.26.0",
|
||||
"version": "v1.27.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php73.git",
|
||||
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85"
|
||||
"reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85",
|
||||
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
|
||||
"reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4606,7 +4616,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
"dev-main": "1.27-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -4647,7 +4657,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0"
|
||||
"source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4663,20 +4673,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.26.0",
|
||||
"version": "v1.27.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
|
||||
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
|
||||
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
|
||||
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4685,7 +4695,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
"dev-main": "1.27-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -4730,7 +4740,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4746,7 +4756,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-10T07:21:04+00:00"
|
||||
"time": "2022-11-03T14:55:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php81",
|
||||
@@ -5036,16 +5046,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/string",
|
||||
"version": "v5.4.12",
|
||||
"version": "v5.4.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "2fc515e512d721bf31ea76bd02fe23ada4640058"
|
||||
"reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/2fc515e512d721bf31ea76bd02fe23ada4640058",
|
||||
"reference": "2fc515e512d721bf31ea76bd02fe23ada4640058",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed",
|
||||
"reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5102,7 +5112,7 @@
|
||||
"utf8"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/string/tree/v5.4.12"
|
||||
"source": "https://github.com/symfony/string/tree/v5.4.15"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5118,7 +5128,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-08-12T17:03:11+00:00"
|
||||
"time": "2022-10-05T15:16:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "theseer/tokenizer",
|
||||
@@ -5172,16 +5182,16 @@
|
||||
},
|
||||
{
|
||||
"name": "vimeo/psalm",
|
||||
"version": "4.27.0",
|
||||
"version": "4.30.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vimeo/psalm.git",
|
||||
"reference": "faf106e717c37b8c81721845dba9de3d8deed8ff"
|
||||
"reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vimeo/psalm/zipball/faf106e717c37b8c81721845dba9de3d8deed8ff",
|
||||
"reference": "faf106e717c37b8c81721845dba9de3d8deed8ff",
|
||||
"url": "https://api.github.com/repos/vimeo/psalm/zipball/d0bc6e25d89f649e4f36a534f330f8bb4643dd69",
|
||||
"reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5220,6 +5230,7 @@
|
||||
"phpdocumentor/reflection-docblock": "^5",
|
||||
"phpmyadmin/sql-parser": "5.1.0||dev-master",
|
||||
"phpspec/prophecy": ">=1.9.0",
|
||||
"phpstan/phpdoc-parser": "1.2.* || 1.6.4",
|
||||
"phpunit/phpunit": "^9.0",
|
||||
"psalm/plugin-phpunit": "^0.16",
|
||||
"slevomat/coding-standard": "^7.0",
|
||||
@@ -5273,9 +5284,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/vimeo/psalm/issues",
|
||||
"source": "https://github.com/vimeo/psalm/tree/4.27.0"
|
||||
"source": "https://github.com/vimeo/psalm/tree/4.30.0"
|
||||
},
|
||||
"time": "2022-08-31T13:47:09+00:00"
|
||||
"time": "2022-11-06T20:37:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
The REST API provides access for authenticated users to their data inside the Deck app. To get a better understanding of Decks data models and their relations, please have a look at the [data structure](structure.md) documentation.
|
||||
|
||||
# Prequisited
|
||||
# Prerequisites
|
||||
|
||||
- All requests require a `OCS-APIRequest` HTTP header to be set to `true` and a `Content-Type` of `application/json`.
|
||||
- The API is located at https://nextcloud.local/index.php/apps/deck/api/v1.0
|
||||
@@ -9,7 +9,7 @@ The REST API provides access for authenticated users to their data inside the De
|
||||
|
||||
## Naming
|
||||
|
||||
- Board is the the project like grouping of tasks that can be shared to different users and groups
|
||||
- Board is the project like grouping of tasks that can be shared to different users and groups
|
||||
|
||||
- Stack is the grouping of cards which is rendered in vertical columns in the UI
|
||||
|
||||
@@ -1066,6 +1066,7 @@ Deck stores user and app configuration values globally and per board. The GET en
|
||||
| --- | --- |
|
||||
| calendar | Determines if the calendar/tasks integration through the CalDAV backend is enabled for the user (boolean) |
|
||||
| cardDetailsInModal | Determines if the bigger view is used (boolean) |
|
||||
| cardIdBadge | Determines if the ID badges are displayed on cards (boolean) |
|
||||
| groupLimit | Determines if creating new boards is limited to certain groups of the instance. The resulting output is an array of group objects with the id and the displayname (Admin only)|
|
||||
|
||||
```
|
||||
@@ -1079,6 +1080,7 @@ Deck stores user and app configuration values globally and per board. The GET en
|
||||
"data": {
|
||||
"calendar": true,
|
||||
"cardDetailsInModal": true,
|
||||
"cardIdBadge": true,
|
||||
"groupLimit": [
|
||||
{
|
||||
"id": "admin",
|
||||
@@ -1109,6 +1111,7 @@ Deck stores user and app configuration values globally and per board. The GET en
|
||||
| notify-due | `off`, `assigned` or `all` |
|
||||
| calendar | Boolean |
|
||||
| cardDetailsInModal | Boolean |
|
||||
| cardIdBadge | Boolean |
|
||||
|
||||
#### Example request
|
||||
|
||||
|
||||
65
l10n/ca.js
65
l10n/ca.js
@@ -29,7 +29,7 @@ OC.L10N.register(
|
||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} ha suprimit la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have renamed the card {before} to {card}" : "Heu reanomenat la targeta {before} a {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} ha reanomenat la targeta {before} a {card}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} del tauler {board}",
|
||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} ha afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have updated the description of card {card} in list {stack} on board {board}" : "Heu actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} ha actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
|
||||
@@ -37,12 +37,12 @@ OC.L10N.register(
|
||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} té la targeta arxivada {card} a la llista {stack} al tauler {board}",
|
||||
"You have unarchived card {card} in list {stack} on board {board}" : "Teniu una targeta no-arxchivada {card} a la llista {stack} al tauler {board}",
|
||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} té una targeta no-arxivada {card} a la llista {stack} al tauler {board}",
|
||||
"You have removed the due date of card {card}" : "Heu suprimit la data de venciment de la targeta {targeta}",
|
||||
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de venciment de la targeta {targeta}",
|
||||
"You have set the due date of card {card} to {after}" : "Heu establert la data de venciment de la targeta {card} a {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de venciment de la targeta {card} a {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de venciment de la targeta {card} a {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de venciment de la targeta {card} a {after}",
|
||||
"You have removed the due date of card {card}" : "Heu suprimit la data de caducitat de la targeta {targeta}",
|
||||
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de caducitat de la targeta {targeta}",
|
||||
"You have set the due date of card {card} to {after}" : "Heu establert la data de caducitat de la targeta {card} a {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de caducitat de la targeta {card} a {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de caducitat de la targeta {card} a {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de caducitat de la targeta {card} a {after}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Heu afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} ha afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Heu eliminat l'etiqueta {label} de la targeta {card} a la llista {stack} al tauler {board}",
|
||||
@@ -66,13 +66,13 @@ OC.L10N.register(
|
||||
"A <strong>card description</strong> inside the Deck app has been changed" : "S'ha canviat una <strong>descripció de targeta</strong> a l'aplicació Tauler",
|
||||
"Deck" : "Targetes",
|
||||
"Changes in the <strong>Deck app</strong>" : "Canvis a l'<strong>aplicació Targetes</strong>",
|
||||
"A <strong>comment</strong> was created on a card" : "S'ha afegit un <strong>comentari</strong> a una targeta",
|
||||
"A <strong>comment</strong> was created on a card" : "S'ha creat un <strong>comentari</strong> a una targeta",
|
||||
"Upcoming cards" : "Pròximes targetes",
|
||||
"Load more" : "Carrega'n més",
|
||||
"Personal" : "Personal",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "La targeta \"%s\" sobre \"%s\" se us ha assignat per %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} us ha assignat la targeta {deck-card} a {deck-board}.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de venciment.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de caducitat.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "La targeta {deck-card} a {deck-board} ha assolit la seva data de caducitat.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s us ha anomenat en un comentari sobre \"%s\".",
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} us ha mencionat en un comentari a {deck-card}.",
|
||||
@@ -88,7 +88,7 @@ OC.L10N.register(
|
||||
"copy" : "còpia",
|
||||
"To do" : "Pendent",
|
||||
"Doing" : "En procés",
|
||||
"Done" : "Finalitzat",
|
||||
"Done" : "Fet",
|
||||
"Example Task 3" : "Tasca d'exemple 3",
|
||||
"Example Task 2" : "Tasca d'exemple 2",
|
||||
"Example Task 1" : "Tasca d'exemple 1",
|
||||
@@ -99,7 +99,7 @@ OC.L10N.register(
|
||||
"No file was uploaded" : "No s'ha pujat cap fitxer",
|
||||
"Missing a temporary folder" : "Falta una carpeta temporal",
|
||||
"Could not write file to disk" : "No s’ha pogut escriure el fitxer al disc",
|
||||
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer",
|
||||
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la pujada del fitxer",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Aquest comentari té més de %s caràcters.\nS'ha afegit com a fitxer adjunt a la targeta amb el nom %s.\nAccessible a l'URL: %s.",
|
||||
"Card not found" : "No s'ha trobat la targeta",
|
||||
@@ -131,7 +131,7 @@ OC.L10N.register(
|
||||
"Overwrite file" : "Sobreescriu el fitxer",
|
||||
"Keep existing file" : "Mantén el fitxer existent",
|
||||
"This board is read only" : "Aquest tauler és només de lectura",
|
||||
"Drop your files to upload" : "Deixeu anar els fitxers per penjar-los",
|
||||
"Drop your files to upload" : "Deixeu anar els fitxers per pujar-los",
|
||||
"Add card" : "Afegeix una targeta",
|
||||
"Archived cards" : "Targetes arxivades",
|
||||
"Add list" : "Afegeix una llista",
|
||||
@@ -174,36 +174,38 @@ OC.L10N.register(
|
||||
"Can share" : "Pot compartir",
|
||||
"Can manage" : "Pot gestionar",
|
||||
"Owner" : "Propietari",
|
||||
"Delete" : "Eliminar",
|
||||
"Delete" : "Suprimeix",
|
||||
"Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Esteu segur que voleu transferir el tauler {title} a {user}?",
|
||||
"Transfer the board." : "Transfereix el tauler.",
|
||||
"Transfer" : "Transferència",
|
||||
"The board has been transferred to {user}" : "El tauler s'ha transferit a {user}",
|
||||
"Failed to transfer the board to {user}" : "No s'ha pogut transferir el tauler a {user}",
|
||||
"Add a new list" : "Afegir una llista nova",
|
||||
"Add a new list" : "Afegeix una llista nova",
|
||||
"Archive all cards" : "Arxiva totes les targetes",
|
||||
"Unarchive all cards" : "Desarxivar totes les targetes",
|
||||
"Delete list" : "Suprimeix la llista",
|
||||
"Archive all cards in this list" : "Arxiva totes les targetes d'aquesta llista",
|
||||
"Add a new card" : "Afegir una nova targeta",
|
||||
"Unarchive all cards in this list" : "Desarxivar totes les targetes d'aquesta llista",
|
||||
"Add a new card" : "Afegeix una nova targeta",
|
||||
"Card name" : "Nom de la targeta",
|
||||
"List deleted" : "Llista suprimida",
|
||||
"Edit" : "Edita",
|
||||
"Add a new tag" : "Afegir una etiqueta nova",
|
||||
"Edit" : "Edició",
|
||||
"Add a new tag" : "Afegeix una etiqueta nova",
|
||||
"title and color value must be provided" : "s’ha de proporcionar el valor del títol i del color",
|
||||
"Board name" : "Nom del taulell",
|
||||
"Members" : "Membres",
|
||||
"Upload new files" : "Puja nous fitxers",
|
||||
"Upload new files" : "Pujada de nous fitxers",
|
||||
"Share from Files" : "Comparteix des de Fitxers",
|
||||
"Pending share" : "Compartició pendent",
|
||||
"Add this attachment" : "Afegeix aquest adjunt",
|
||||
"Show in Files" : "Mostra a Fitxers",
|
||||
"Download" : "Baixa",
|
||||
"Download" : "Baixada",
|
||||
"Remove attachment" : "Treu l'adjunt",
|
||||
"Delete Attachment" : "Suprimeix l’adjunt",
|
||||
"Restore Attachment" : "Restaura l'adjunt",
|
||||
"File to share" : "Fitxer a compartir",
|
||||
"Invalid path selected" : "S'ha seleccionat una ruta invàlida",
|
||||
"Invalid path selected" : "S'ha seleccionat un camí no vàlid",
|
||||
"Open in sidebar view" : "Obre a la vista de la barra lateral",
|
||||
"Open in bigger view" : "Obre a la vista més gran",
|
||||
"Attachments" : "Adjunts",
|
||||
@@ -213,13 +215,13 @@ OC.L10N.register(
|
||||
"The title cannot be empty." : "El títol no pot estar buit.",
|
||||
"No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!",
|
||||
"Failed to load comments" : "No s'han pogut carregar els comentaris",
|
||||
"Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…",
|
||||
"Assign to users" : "Assigna als usuaris",
|
||||
"Assign to users/groups/circles" : "Assigna a usuaris/grups/cercles",
|
||||
"Assign a user to this card…" : "Assigneu un usuari a aquesta targeta…",
|
||||
"Due date" : "Per la data",
|
||||
"Set a due date" : "Definir una data de venciment",
|
||||
"Remove due date" : "Elimina la data de venciment",
|
||||
"Assign a tag to this card…" : "Assignació d'una etiqueta a aquesta targeta…",
|
||||
"Assign to users" : "Assignació als usuaris",
|
||||
"Assign to users/groups/circles" : "Assignació a usuaris/grups/cercles",
|
||||
"Assign a user to this card…" : "Assignació d'un usuari a aquesta targeta…",
|
||||
"Due date" : "Data de caducitat",
|
||||
"Set a due date" : "Definir una data de caducitat",
|
||||
"Remove due date" : "Suprimeix la data de caducitat",
|
||||
"Select Date" : "Selecciona la data",
|
||||
"Today" : "Avui",
|
||||
"Tomorrow" : "Demà",
|
||||
@@ -236,15 +238,15 @@ OC.L10N.register(
|
||||
"(Unsaved)" : "(No desat)",
|
||||
"(Saving…)" : "(Desant…)",
|
||||
"Formatting help" : "Format d'ajuda",
|
||||
"Edit description" : "Edita descripció",
|
||||
"Edit description" : "Edició descripció",
|
||||
"View description" : "Veure descripció",
|
||||
"Add Attachment" : "Afegeix un adjunt",
|
||||
"Write a description …" : "Escriviu una descripció …",
|
||||
"Choose attachment" : "Triar adjunt",
|
||||
"(group)" : "(grup)",
|
||||
"Todo items" : "Elements pendents",
|
||||
"Todo items" : "Tasques pendents",
|
||||
"{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits",
|
||||
"Edit card title" : "Edita el títol de la targeta",
|
||||
"Edit card title" : "Edició del títol de la targeta",
|
||||
"Assign to me" : "Assigna'm a mi",
|
||||
"Unassign myself" : "Desasignar a mi mateix",
|
||||
"Move card" : "Mou la targeta",
|
||||
@@ -258,8 +260,9 @@ OC.L10N.register(
|
||||
"All boards" : "Tots els taulers",
|
||||
"Archived boards" : "Taulers arxivats",
|
||||
"Shared with you" : "Us han compartit",
|
||||
"Deck settings" : "Configuració del Tauler",
|
||||
"Deck settings" : "Paràmetres del Tauler",
|
||||
"Use bigger card view" : "Utilitza la visualització de targetes més gran",
|
||||
"Show card ID badge" : "Mostra el distintiu d’ID de la targeta",
|
||||
"Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques",
|
||||
"Limit deck usage of groups" : "Limitar l'ús del tauler de grups",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitant el Tauler bloquejarà la creació de taulers als usuaris que no són part d'aquests grups. Els usuaris podran seguir treballant en els taulers que hagin estat compartits amb ells.",
|
||||
|
||||
65
l10n/ca.json
65
l10n/ca.json
@@ -27,7 +27,7 @@
|
||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} ha suprimit la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have renamed the card {before} to {card}" : "Heu reanomenat la targeta {before} a {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} ha reanomenat la targeta {before} a {card}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "Heu afegit una descripció a la targeta {card} a la llista {stack} del tauler {board}",
|
||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} ha afegit una descripció a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have updated the description of card {card} in list {stack} on board {board}" : "Heu actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} ha actualitzat la descripció de la targeta {card} a la llista {stack} al tauler {board}",
|
||||
@@ -35,12 +35,12 @@
|
||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} té la targeta arxivada {card} a la llista {stack} al tauler {board}",
|
||||
"You have unarchived card {card} in list {stack} on board {board}" : "Teniu una targeta no-arxchivada {card} a la llista {stack} al tauler {board}",
|
||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} té una targeta no-arxivada {card} a la llista {stack} al tauler {board}",
|
||||
"You have removed the due date of card {card}" : "Heu suprimit la data de venciment de la targeta {targeta}",
|
||||
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de venciment de la targeta {targeta}",
|
||||
"You have set the due date of card {card} to {after}" : "Heu establert la data de venciment de la targeta {card} a {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de venciment de la targeta {card} a {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de venciment de la targeta {card} a {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de venciment de la targeta {card} a {after}",
|
||||
"You have removed the due date of card {card}" : "Heu suprimit la data de caducitat de la targeta {targeta}",
|
||||
"{user} has removed the due date of card {card}" : "{user} ha suprimit la data de caducitat de la targeta {targeta}",
|
||||
"You have set the due date of card {card} to {after}" : "Heu establert la data de caducitat de la targeta {card} a {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} ha establert la data de caducitat de la targeta {card} a {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Heu actualitzat la data de caducitat de la targeta {card} a {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} ha actualitzat la data de caducitat de la targeta {card} a {after}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Heu afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} ha afegit l'etiqueta {label} a la targeta {card} a la llista {stack} al tauler {board}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Heu eliminat l'etiqueta {label} de la targeta {card} a la llista {stack} al tauler {board}",
|
||||
@@ -64,13 +64,13 @@
|
||||
"A <strong>card description</strong> inside the Deck app has been changed" : "S'ha canviat una <strong>descripció de targeta</strong> a l'aplicació Tauler",
|
||||
"Deck" : "Targetes",
|
||||
"Changes in the <strong>Deck app</strong>" : "Canvis a l'<strong>aplicació Targetes</strong>",
|
||||
"A <strong>comment</strong> was created on a card" : "S'ha afegit un <strong>comentari</strong> a una targeta",
|
||||
"A <strong>comment</strong> was created on a card" : "S'ha creat un <strong>comentari</strong> a una targeta",
|
||||
"Upcoming cards" : "Pròximes targetes",
|
||||
"Load more" : "Carrega'n més",
|
||||
"Personal" : "Personal",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "La targeta \"%s\" sobre \"%s\" se us ha assignat per %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} us ha assignat la targeta {deck-card} a {deck-board}.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de venciment.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La targeta \"%s\" sobre \"%s\" ha assolit la seva data de caducitat.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "La targeta {deck-card} a {deck-board} ha assolit la seva data de caducitat.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s us ha anomenat en un comentari sobre \"%s\".",
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} us ha mencionat en un comentari a {deck-card}.",
|
||||
@@ -86,7 +86,7 @@
|
||||
"copy" : "còpia",
|
||||
"To do" : "Pendent",
|
||||
"Doing" : "En procés",
|
||||
"Done" : "Finalitzat",
|
||||
"Done" : "Fet",
|
||||
"Example Task 3" : "Tasca d'exemple 3",
|
||||
"Example Task 2" : "Tasca d'exemple 2",
|
||||
"Example Task 1" : "Tasca d'exemple 1",
|
||||
@@ -97,7 +97,7 @@
|
||||
"No file was uploaded" : "No s'ha pujat cap fitxer",
|
||||
"Missing a temporary folder" : "Falta una carpeta temporal",
|
||||
"Could not write file to disk" : "No s’ha pogut escriure el fitxer al disc",
|
||||
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer",
|
||||
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la pujada del fitxer",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Aquest comentari té més de %s caràcters.\nS'ha afegit com a fitxer adjunt a la targeta amb el nom %s.\nAccessible a l'URL: %s.",
|
||||
"Card not found" : "No s'ha trobat la targeta",
|
||||
@@ -129,7 +129,7 @@
|
||||
"Overwrite file" : "Sobreescriu el fitxer",
|
||||
"Keep existing file" : "Mantén el fitxer existent",
|
||||
"This board is read only" : "Aquest tauler és només de lectura",
|
||||
"Drop your files to upload" : "Deixeu anar els fitxers per penjar-los",
|
||||
"Drop your files to upload" : "Deixeu anar els fitxers per pujar-los",
|
||||
"Add card" : "Afegeix una targeta",
|
||||
"Archived cards" : "Targetes arxivades",
|
||||
"Add list" : "Afegeix una llista",
|
||||
@@ -172,36 +172,38 @@
|
||||
"Can share" : "Pot compartir",
|
||||
"Can manage" : "Pot gestionar",
|
||||
"Owner" : "Propietari",
|
||||
"Delete" : "Eliminar",
|
||||
"Delete" : "Suprimeix",
|
||||
"Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Esteu segur que voleu transferir el tauler {title} a {user}?",
|
||||
"Transfer the board." : "Transfereix el tauler.",
|
||||
"Transfer" : "Transferència",
|
||||
"The board has been transferred to {user}" : "El tauler s'ha transferit a {user}",
|
||||
"Failed to transfer the board to {user}" : "No s'ha pogut transferir el tauler a {user}",
|
||||
"Add a new list" : "Afegir una llista nova",
|
||||
"Add a new list" : "Afegeix una llista nova",
|
||||
"Archive all cards" : "Arxiva totes les targetes",
|
||||
"Unarchive all cards" : "Desarxivar totes les targetes",
|
||||
"Delete list" : "Suprimeix la llista",
|
||||
"Archive all cards in this list" : "Arxiva totes les targetes d'aquesta llista",
|
||||
"Add a new card" : "Afegir una nova targeta",
|
||||
"Unarchive all cards in this list" : "Desarxivar totes les targetes d'aquesta llista",
|
||||
"Add a new card" : "Afegeix una nova targeta",
|
||||
"Card name" : "Nom de la targeta",
|
||||
"List deleted" : "Llista suprimida",
|
||||
"Edit" : "Edita",
|
||||
"Add a new tag" : "Afegir una etiqueta nova",
|
||||
"Edit" : "Edició",
|
||||
"Add a new tag" : "Afegeix una etiqueta nova",
|
||||
"title and color value must be provided" : "s’ha de proporcionar el valor del títol i del color",
|
||||
"Board name" : "Nom del taulell",
|
||||
"Members" : "Membres",
|
||||
"Upload new files" : "Puja nous fitxers",
|
||||
"Upload new files" : "Pujada de nous fitxers",
|
||||
"Share from Files" : "Comparteix des de Fitxers",
|
||||
"Pending share" : "Compartició pendent",
|
||||
"Add this attachment" : "Afegeix aquest adjunt",
|
||||
"Show in Files" : "Mostra a Fitxers",
|
||||
"Download" : "Baixa",
|
||||
"Download" : "Baixada",
|
||||
"Remove attachment" : "Treu l'adjunt",
|
||||
"Delete Attachment" : "Suprimeix l’adjunt",
|
||||
"Restore Attachment" : "Restaura l'adjunt",
|
||||
"File to share" : "Fitxer a compartir",
|
||||
"Invalid path selected" : "S'ha seleccionat una ruta invàlida",
|
||||
"Invalid path selected" : "S'ha seleccionat un camí no vàlid",
|
||||
"Open in sidebar view" : "Obre a la vista de la barra lateral",
|
||||
"Open in bigger view" : "Obre a la vista més gran",
|
||||
"Attachments" : "Adjunts",
|
||||
@@ -211,13 +213,13 @@
|
||||
"The title cannot be empty." : "El títol no pot estar buit.",
|
||||
"No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!",
|
||||
"Failed to load comments" : "No s'han pogut carregar els comentaris",
|
||||
"Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…",
|
||||
"Assign to users" : "Assigna als usuaris",
|
||||
"Assign to users/groups/circles" : "Assigna a usuaris/grups/cercles",
|
||||
"Assign a user to this card…" : "Assigneu un usuari a aquesta targeta…",
|
||||
"Due date" : "Per la data",
|
||||
"Set a due date" : "Definir una data de venciment",
|
||||
"Remove due date" : "Elimina la data de venciment",
|
||||
"Assign a tag to this card…" : "Assignació d'una etiqueta a aquesta targeta…",
|
||||
"Assign to users" : "Assignació als usuaris",
|
||||
"Assign to users/groups/circles" : "Assignació a usuaris/grups/cercles",
|
||||
"Assign a user to this card…" : "Assignació d'un usuari a aquesta targeta…",
|
||||
"Due date" : "Data de caducitat",
|
||||
"Set a due date" : "Definir una data de caducitat",
|
||||
"Remove due date" : "Suprimeix la data de caducitat",
|
||||
"Select Date" : "Selecciona la data",
|
||||
"Today" : "Avui",
|
||||
"Tomorrow" : "Demà",
|
||||
@@ -234,15 +236,15 @@
|
||||
"(Unsaved)" : "(No desat)",
|
||||
"(Saving…)" : "(Desant…)",
|
||||
"Formatting help" : "Format d'ajuda",
|
||||
"Edit description" : "Edita descripció",
|
||||
"Edit description" : "Edició descripció",
|
||||
"View description" : "Veure descripció",
|
||||
"Add Attachment" : "Afegeix un adjunt",
|
||||
"Write a description …" : "Escriviu una descripció …",
|
||||
"Choose attachment" : "Triar adjunt",
|
||||
"(group)" : "(grup)",
|
||||
"Todo items" : "Elements pendents",
|
||||
"Todo items" : "Tasques pendents",
|
||||
"{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits",
|
||||
"Edit card title" : "Edita el títol de la targeta",
|
||||
"Edit card title" : "Edició del títol de la targeta",
|
||||
"Assign to me" : "Assigna'm a mi",
|
||||
"Unassign myself" : "Desasignar a mi mateix",
|
||||
"Move card" : "Mou la targeta",
|
||||
@@ -256,8 +258,9 @@
|
||||
"All boards" : "Tots els taulers",
|
||||
"Archived boards" : "Taulers arxivats",
|
||||
"Shared with you" : "Us han compartit",
|
||||
"Deck settings" : "Configuració del Tauler",
|
||||
"Deck settings" : "Paràmetres del Tauler",
|
||||
"Use bigger card view" : "Utilitza la visualització de targetes més gran",
|
||||
"Show card ID badge" : "Mostra el distintiu d’ID de la targeta",
|
||||
"Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques",
|
||||
"Limit deck usage of groups" : "Limitar l'ús del tauler de grups",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitant el Tauler bloquejarà la creació de taulers als usuaris que no són part d'aquests grups. Els usuaris podran seguir treballant en els taulers que hagin estat compartits amb ells.",
|
||||
|
||||
@@ -37,6 +37,7 @@ OC.L10N.register(
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin forfaldsdato.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : " %s har nævnt dig i en kommentar på \"%s\".",
|
||||
"The board \"%s\" has been shared with you by %s." : "Tavlen \"%s\" er blevet delt med dig af %s.",
|
||||
"%s on %s" : "%s på %s",
|
||||
"No data was provided to create an attachment." : "Ingen data blev givet som kunne vedhæftes",
|
||||
"Finished" : "Færdiggjort",
|
||||
"To review" : "Til gennemgang",
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin forfaldsdato.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : " %s har nævnt dig i en kommentar på \"%s\".",
|
||||
"The board \"%s\" has been shared with you by %s." : "Tavlen \"%s\" er blevet delt med dig af %s.",
|
||||
"%s on %s" : "%s på %s",
|
||||
"No data was provided to create an attachment." : "Ingen data blev givet som kunne vedhæftes",
|
||||
"Finished" : "Færdiggjort",
|
||||
"To review" : "Til gennemgang",
|
||||
|
||||
@@ -245,7 +245,7 @@ OC.L10N.register(
|
||||
"Archive card" : "Αρχειοθέτηση καρτέλας",
|
||||
"Delete card" : "Διαγραφή καρτέλας",
|
||||
"Move card to another board" : "Μετακίνηση καρτέλας σε άλλο πίνακα",
|
||||
"List is empty" : "Η λίστα είναι άδεια.",
|
||||
"List is empty" : "Η λίστα είναι κενή",
|
||||
"Card deleted" : "Η καρτέλα διαγράφηκε",
|
||||
"seconds ago" : " δευτερόλεπτα πριν ",
|
||||
"All boards" : "Όλοι οι πίνακες",
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
"Archive card" : "Αρχειοθέτηση καρτέλας",
|
||||
"Delete card" : "Διαγραφή καρτέλας",
|
||||
"Move card to another board" : "Μετακίνηση καρτέλας σε άλλο πίνακα",
|
||||
"List is empty" : "Η λίστα είναι άδεια.",
|
||||
"List is empty" : "Η λίστα είναι κενή",
|
||||
"Card deleted" : "Η καρτέλα διαγράφηκε",
|
||||
"seconds ago" : " δευτερόλεπτα πριν ",
|
||||
"All boards" : "Όλοι οι πίνακες",
|
||||
|
||||
237
l10n/en_GB.js
237
l10n/en_GB.js
@@ -1,17 +1,97 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"You have created a new board {board}" : "You have created a new board {board}",
|
||||
"{user} has created a new board {board}" : "{user} has created a new board {board}",
|
||||
"You have deleted the board {board}" : "You have deleted the board {board}",
|
||||
"{user} has deleted the board {board}" : "{user} has deleted the board {board}",
|
||||
"You have restored the board {board}" : "You have restored the board {board}",
|
||||
"{user} has restored the board {board}" : "{user} has restored the board {board}",
|
||||
"You have shared the board {board} with {acl}" : "You have shared the board {board} with {acl}",
|
||||
"{user} has shared the board {board} with {acl}" : "{user} has shared the board {board} with {acl}",
|
||||
"You have removed {acl} from the board {board}" : "You have removed {acl} from the board {board}",
|
||||
"{user} has removed {acl} from the board {board}" : "{user} has removed {acl} from the board {board}",
|
||||
"You have renamed the board {before} to {board}" : "You have renamed the board {before} to {board}",
|
||||
"{user} has renamed the board {before} to {board}" : "{user} has renamed the board {before} to {board}",
|
||||
"You have archived the board {board}" : "You have archived the board {board}",
|
||||
"{user} has archived the board {before}" : "{user} has archived the board {before}",
|
||||
"You have unarchived the board {board}" : "You have unarchived the board {board}",
|
||||
"{user} has unarchived the board {before}" : "{user} has unarchived the board {before}",
|
||||
"You have created a new list {stack} on board {board}" : "You have created a new list {stack} on board {board}",
|
||||
"{user} has created a new list {stack} on board {board}" : "{user} has created a new list {stack} on board {board}",
|
||||
"You have renamed list {before} to {stack} on board {board}" : "You have renamed list {before} to {stack} on board {board}",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} has renamed list {before} to {stack} on board {board}",
|
||||
"You have deleted list {stack} on board {board}" : "You have deleted list {stack} on board {board}",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} has deleted list {stack} on board {board}",
|
||||
"You have created card {card} in list {stack} on board {board}" : "You have created card {card} in list {stack} on board {board}",
|
||||
"{user} has created card {card} in list {stack} on board {board}" : "{user} has created card {card} in list {stack} on board {board}",
|
||||
"You have deleted card {card} in list {stack} on board {board}" : "You have deleted card {card} in list {stack} on board {board}",
|
||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} has deleted card {card} in list {stack} on board {board}",
|
||||
"You have renamed the card {before} to {card}" : "You have renamed the card {before} to {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} has renamed the card {before} to {card}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "You have added a description to card {card} in list {stack} on board {board}",
|
||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} has added a description to card {card} in list {stack} on board {board}",
|
||||
"You have updated the description of card {card} in list {stack} on board {board}" : "You have updated the description of card {card} in list {stack} on board {board}",
|
||||
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} has updated the description of the card {card} in list {stack} on board {board}",
|
||||
"You have archived card {card} in list {stack} on board {board}" : "You have archived card {card} in list {stack} on board {board}",
|
||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} has archived card {card} in list {stack} on board {board}",
|
||||
"You have unarchived card {card} in list {stack} on board {board}" : "You have unarchived card {card} in list {stack} on board {board}",
|
||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} has unarchived card {card} in list {stack} on board {board}",
|
||||
"You have removed the due date of card {card}" : "You have removed the due date of card {card}",
|
||||
"{user} has removed the due date of card {card}" : "{user} has removed the due date of card {card}",
|
||||
"You have set the due date of card {card} to {after}" : "You have set the due date of card {card} to {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} has set the due date of card {card} to {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "You have updated the due date of card {card} to {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} has updated the due date of card {card} to {after}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "You have added the tag {label} to card {card} in list {stack} on board {board}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} has added the tag {label} to card {card} in list {stack} on board {board}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "You have removed the tag {label} from card {card} in list {stack} on board {board}",
|
||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} has removed the tag {label} from card {card} in list {stack} on board {board}",
|
||||
"You have assigned {assigneduser} to card {card} on board {board}" : "You have assigned {assigneduser} to card {card} on board {board}",
|
||||
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} has assigned {assigneduser} to card {card} on board {board}",
|
||||
"You have unassigned {assigneduser} from card {card} on board {board}" : "You have unassigned {assigneduser} from card {card} on board {board}",
|
||||
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} has unassigned {assigneduser} from card {card} on board {board}",
|
||||
"You have moved the card {card} from list {stackBefore} to {stack}" : "You have moved the card {card} from list {stackBefore} to {stack}",
|
||||
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} has moved the card {card} from list {stackBefore} to {stack}",
|
||||
"You have added the attachment {attachment} to card {card}" : "You have added the attachment {attachment} to card {card}",
|
||||
"{user} has added the attachment {attachment} to card {card}" : "{user} has added the attachment {attachment} to card {card}",
|
||||
"You have updated the attachment {attachment} on card {card}" : "You have updated the attachment {attachment} on card {card}",
|
||||
"{user} has updated the attachment {attachment} on card {card}" : "{user} has updated the attachment {attachment} on card {card}",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "You have deleted the attachment {attachment} from card {card}",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} has deleted the attachment {attachment} from card {card}",
|
||||
"You have restored the attachment {attachment} to card {card}" : "You have restored the attachment {attachment} to card {card}",
|
||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} has restored the attachment {attachment} to card {card}",
|
||||
"You have commented on card {card}" : "You have commented on card {card}",
|
||||
"{user} has commented on card {card}" : "{user} has commented on card {card}",
|
||||
"A <strong>card description</strong> inside the Deck app has been changed" : "A <strong>card description</strong> inside the Deck app has been changed",
|
||||
"Deck" : "Deck",
|
||||
"Changes in the <strong>Deck app</strong>" : "Changes in the <strong>Deck app</strong>",
|
||||
"A <strong>comment</strong> was created on a card" : "A <strong>comment</strong> was created on a card",
|
||||
"Upcoming cards" : "Upcoming cards",
|
||||
"Load more" : "Load more",
|
||||
"Personal" : "Personal",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "The card \"%s\" on \"%s\" has been assigned to you by %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} has assigned the card {deck-card} on {deck-board} to you.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "The card {deck-card} on {deck-board} has reached its due date.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s has mentioned you in a comment on \"%s\".",
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} has mentioned you in a comment on {deck-card}.",
|
||||
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} has shared {deck-board} with you.",
|
||||
"Card comments" : "Card comments",
|
||||
"%s on %s" : "%s on %s",
|
||||
"No data was provided to create an attachment." : "No data was provided to create an attachment.",
|
||||
"Finished" : "Finished",
|
||||
"To review" : "To review",
|
||||
"Action needed" : "Action needed",
|
||||
"Later" : "Later",
|
||||
"copy" : "copy",
|
||||
"To do" : "To do",
|
||||
"Doing" : "Doing",
|
||||
"Done" : "Done",
|
||||
"Example Task 3" : "Example Task 3",
|
||||
"Example Task 2" : "Example Task 2",
|
||||
"Example Task 1" : "Example Task 1",
|
||||
"The file was uploaded" : "The file was uploaded",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
|
||||
@@ -20,63 +100,218 @@ OC.L10N.register(
|
||||
"Missing a temporary folder" : "Missing a temporary folder",
|
||||
"Could not write file to disk" : "Could not write file to disk",
|
||||
"A PHP extension stopped the file upload" : "A PHP extension stopped the file upload",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No file uploaded or file size exceeds maximum of %s",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s.",
|
||||
"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",
|
||||
"Card details" : "Card details",
|
||||
"Add board" : "Add board",
|
||||
"Select the board to link to a project" : "Select the board to link to a project",
|
||||
"Search by board title" : "Search by board title",
|
||||
"Select board" : "Select board",
|
||||
"Create a new card" : "Create a new card",
|
||||
"Select a board" : "Select a board",
|
||||
"Select a list" : "Select a list",
|
||||
"Card title" : "Card title",
|
||||
"Cancel" : "Cancel",
|
||||
"Creating the new card …" : "Creating the new card …",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "Card \"{card}\" was added to \"{board}\"",
|
||||
"Open card" : "Open card",
|
||||
"Close" : "Close",
|
||||
"Create card" : "Create card",
|
||||
"Select a card" : "Select a card",
|
||||
"Select the card to link to a project" : "Select the card to link to a project",
|
||||
"Link to card" : "Link to card",
|
||||
"File already exists" : "File already exists",
|
||||
"A file with the name {filename} already exists." : "A file with the name {filename} already exists.",
|
||||
"Do you want to overwrite it?" : "Do you want to overwrite it?",
|
||||
"Overwrite file" : "Overwrite file",
|
||||
"Keep existing file" : "Keep existing file",
|
||||
"This board is read only" : "This board is read only",
|
||||
"Drop your files to upload" : "Drop your files to upload",
|
||||
"Add card" : "Add card",
|
||||
"Archived cards" : "Archived cards",
|
||||
"Add list" : "Add list",
|
||||
"List name" : "List name",
|
||||
"Active filters" : "Active filters",
|
||||
"Apply filter" : "Apply filter",
|
||||
"Filter by tag" : "Filter by tag",
|
||||
"Filter by assigned user" : "Filter by assigned user",
|
||||
"Unassigned" : "Unassigned",
|
||||
"Filter by due date" : "Filter by due date",
|
||||
"Overdue" : "Overdue",
|
||||
"Next 24 hours" : "Next 24 hours",
|
||||
"Next 7 days" : "Next 7 days",
|
||||
"Next 30 days" : "Next 30 days",
|
||||
"No due date" : "No due date",
|
||||
"Clear filter" : "Clear filter",
|
||||
"Hide archived cards" : "Hide archived cards",
|
||||
"Show archived cards" : "Show archived cards",
|
||||
"Toggle compact mode" : "Toggle compact mode",
|
||||
"Open details" : "Open details",
|
||||
"Details" : "Details",
|
||||
"Loading board" : "Loading board",
|
||||
"No lists available" : "No lists available",
|
||||
"Create a new list to add cards to this board" : "Create a new list to add cards to this board",
|
||||
"Board not found" : "Board not found",
|
||||
"Sharing" : "Sharing",
|
||||
"Tags" : "Tags",
|
||||
"Deleted items" : "Deleted items",
|
||||
"Timeline" : "Timeline",
|
||||
"Deleted lists" : "Deleted lists",
|
||||
"Undo" : "Undo",
|
||||
"Deleted cards" : "Deleted cards",
|
||||
"Share board with a user, group or circle …" : "Share board with a user, group or circle …",
|
||||
"Searching for users, groups and circles …" : "Searching for users, groups and circles …",
|
||||
"No participants found" : "No participants found",
|
||||
"Board owner" : "Board owner",
|
||||
"(Group)" : "(Group)",
|
||||
"(Circle)" : "(Circle)",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Can manage" : "Can manage",
|
||||
"Owner" : "Owner",
|
||||
"Delete" : "Delete",
|
||||
"Failed to create share with {displayName}" : "Failed to create share with {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Are you sure you want to transfer the board {title} to {user}?",
|
||||
"Transfer the board." : "Transfer the board.",
|
||||
"Transfer" : "Transfer",
|
||||
"The board has been transferred to {user}" : "The board has been transferred to {user}",
|
||||
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
|
||||
"Add a new list" : "Add a new list",
|
||||
"Archive all cards" : "Archive all cards",
|
||||
"Unarchive all cards" : "Unarchive all cards",
|
||||
"Delete list" : "Delete list",
|
||||
"Archive all cards in this list" : "Archive all cards in this list",
|
||||
"Unarchive all cards in this list" : "Unarchive all cards in this list",
|
||||
"Add a new card" : "Add a new card",
|
||||
"Card name" : "Card name",
|
||||
"List deleted" : "List deleted",
|
||||
"Edit" : "Edit",
|
||||
"Add a new tag" : "Add a new tag",
|
||||
"title and color value must be provided" : "title and colour value must be provided",
|
||||
"Board name" : "Board name",
|
||||
"Members" : "Members",
|
||||
"Upload new files" : "Upload new files",
|
||||
"Share from Files" : "Share from Files",
|
||||
"Pending share" : "Pending share",
|
||||
"Add this attachment" : "Add this attachment",
|
||||
"Show in Files" : "Show in Files",
|
||||
"Download" : "Download",
|
||||
"Remove attachment" : "Remove attachment",
|
||||
"Delete Attachment" : "Delete Attachment",
|
||||
"Restore Attachment" : "Restore Attachment",
|
||||
"File to share" : "File to share",
|
||||
"Invalid path selected" : "Invalid path selected",
|
||||
"Open in sidebar view" : "Open in sidebar view",
|
||||
"Open in bigger view" : "Open in bigger view",
|
||||
"Attachments" : "Attachments",
|
||||
"Comments" : "Comments",
|
||||
"Modified" : "Modified",
|
||||
"Created" : "Created",
|
||||
"The title cannot be empty." : "The title cannot be empty.",
|
||||
"No comments yet. Begin the discussion!" : "No comments yet. Begin the discussion!",
|
||||
"Failed to load comments" : "Failed to load comments",
|
||||
"Assign a tag to this card…" : "Assign a tag to this card…",
|
||||
"Assign to users" : "Assign to users",
|
||||
"Assign to users/groups/circles" : "Assign to users/groups/circles",
|
||||
"Assign a user to this card…" : "Assign a user to this card…",
|
||||
"Due date" : "Due date",
|
||||
"Set a due date" : "Set a due date",
|
||||
"Remove due date" : "Remove due date",
|
||||
"Select Date" : "Select Date",
|
||||
"Today" : "Today",
|
||||
"Tomorrow" : "Tomorrow",
|
||||
"Next week" : "Next week",
|
||||
"Next month" : "Next month",
|
||||
"Save" : "Save",
|
||||
"The comment cannot be empty." : "The comment cannot be empty.",
|
||||
"The comment cannot be longer than 1000 characters." : "The comment cannot be longer than 1000 characters.",
|
||||
"In reply to" : "In reply to",
|
||||
"Cancel reply" : "Cancel reply",
|
||||
"Reply" : "Reply",
|
||||
"Update" : "Update",
|
||||
"Description" : "Description",
|
||||
"(Unsaved)" : "(Unsaved)",
|
||||
"(Saving…)" : "(Saving…)",
|
||||
"Formatting help" : "Formatting help",
|
||||
"Edit description" : "Edit description",
|
||||
"View description" : "View description",
|
||||
"Add Attachment" : "Add Attachment",
|
||||
"Write a description …" : "Write a description …",
|
||||
"Choose attachment" : "Choose attachment",
|
||||
"(group)" : "(group)",
|
||||
"Todo items" : "Todo items",
|
||||
"{count} comments, {unread} unread" : "{count} comments, {unread} unread",
|
||||
"Edit card title" : "Edit card title",
|
||||
"Assign to me" : "Assign to me",
|
||||
"Unassign myself" : "Unassign myself",
|
||||
"Move card" : "Move card",
|
||||
"Unarchive card" : "Unarchive card",
|
||||
"Archive card" : "Archive card",
|
||||
"Delete card" : "Delete card",
|
||||
"Move card to another board" : "Move card to another board",
|
||||
"List is empty" : "List is empty",
|
||||
"Card deleted" : "Card deleted",
|
||||
"seconds ago" : "seconds ago",
|
||||
"All boards" : "All boards",
|
||||
"Archived boards" : "Archived boards",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Deck settings" : "Deck settings",
|
||||
"Use bigger card view" : "Use bigger card view",
|
||||
"Show card ID badge" : "Show card ID badge",
|
||||
"Show boards in calendar/tasks" : "Show boards in calendar/tasks",
|
||||
"Limit deck usage of groups" : "Limit deck usage of groups",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them.",
|
||||
"Board details" : "Board details",
|
||||
"Edit board" : "Edit board",
|
||||
"Clone board" : "Clone board",
|
||||
"Unarchive board" : "Unarchive board",
|
||||
"Archive board" : "Archive board",
|
||||
"Turn on due date reminders" : "Turn on due date reminders",
|
||||
"Turn off due date reminders" : "Turn off due date reminders",
|
||||
"Due date reminders" : "Due date reminders",
|
||||
"All cards" : "All cards",
|
||||
"Assigned cards" : "Assigned cards",
|
||||
"No notifications" : "No notifications",
|
||||
"Delete board" : "Delete board",
|
||||
"Board {0} deleted" : "Board {0} deleted",
|
||||
"Only assigned cards" : "Only assigned cards",
|
||||
"No reminder" : "No reminder",
|
||||
"An error occurred" : "An error occurred",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards.",
|
||||
"Delete the board?" : "Delete the board?",
|
||||
"Loading filtered view" : "Loading filtered view",
|
||||
"No due" : "No due",
|
||||
"Search for {searchQuery} in all boards" : "Search for {searchQuery} in all boards",
|
||||
"No results found" : "No results found",
|
||||
"{stack} in {board}" : "{stack} in {board}",
|
||||
"Click to expand description" : "Click to expand description",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments",
|
||||
"{nbCards} cards" : "{nbCards} cards",
|
||||
"No upcoming cards" : "No upcoming cards",
|
||||
"upcoming cards" : "upcoming cards",
|
||||
"Due on {date}" : "Due on {date}",
|
||||
"Link to a board" : "Link to a board",
|
||||
"Link to a card" : "Link to a card",
|
||||
"Create a card" : "Create a card",
|
||||
"Message from {author} in {conversationName}" : "Message from {author} in {conversationName}",
|
||||
"Something went wrong" : "Something went wrong",
|
||||
"Failed to upload {name}" : "Failed to upload {name}",
|
||||
"Maximum file size of {size} exceeded" : "Maximum file size of {size} exceeded",
|
||||
"Error creating the share" : "Error creating the share",
|
||||
"Share with a Deck card" : "Share with a Deck card",
|
||||
"Share {file} with a Deck card" : "Share {file} with a Deck card",
|
||||
"Share" : "Share",
|
||||
"This week" : "This week"
|
||||
"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",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Are you sure you want to transfer the board {title} for {user} ?",
|
||||
"Transfer the board for {user} successfully" : "Transfer the board for {user} successfully",
|
||||
"Failed to transfer the board for {user}" : "Failed to transfer the board for {user}",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Are you sure you want to delete the board {title}? This will delete all the data of this board.",
|
||||
"This week" : "This week",
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Are you sure you want to transfer the board {title} for {user}?"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
237
l10n/en_GB.json
237
l10n/en_GB.json
@@ -1,15 +1,95 @@
|
||||
{ "translations": {
|
||||
"You have created a new board {board}" : "You have created a new board {board}",
|
||||
"{user} has created a new board {board}" : "{user} has created a new board {board}",
|
||||
"You have deleted the board {board}" : "You have deleted the board {board}",
|
||||
"{user} has deleted the board {board}" : "{user} has deleted the board {board}",
|
||||
"You have restored the board {board}" : "You have restored the board {board}",
|
||||
"{user} has restored the board {board}" : "{user} has restored the board {board}",
|
||||
"You have shared the board {board} with {acl}" : "You have shared the board {board} with {acl}",
|
||||
"{user} has shared the board {board} with {acl}" : "{user} has shared the board {board} with {acl}",
|
||||
"You have removed {acl} from the board {board}" : "You have removed {acl} from the board {board}",
|
||||
"{user} has removed {acl} from the board {board}" : "{user} has removed {acl} from the board {board}",
|
||||
"You have renamed the board {before} to {board}" : "You have renamed the board {before} to {board}",
|
||||
"{user} has renamed the board {before} to {board}" : "{user} has renamed the board {before} to {board}",
|
||||
"You have archived the board {board}" : "You have archived the board {board}",
|
||||
"{user} has archived the board {before}" : "{user} has archived the board {before}",
|
||||
"You have unarchived the board {board}" : "You have unarchived the board {board}",
|
||||
"{user} has unarchived the board {before}" : "{user} has unarchived the board {before}",
|
||||
"You have created a new list {stack} on board {board}" : "You have created a new list {stack} on board {board}",
|
||||
"{user} has created a new list {stack} on board {board}" : "{user} has created a new list {stack} on board {board}",
|
||||
"You have renamed list {before} to {stack} on board {board}" : "You have renamed list {before} to {stack} on board {board}",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} has renamed list {before} to {stack} on board {board}",
|
||||
"You have deleted list {stack} on board {board}" : "You have deleted list {stack} on board {board}",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} has deleted list {stack} on board {board}",
|
||||
"You have created card {card} in list {stack} on board {board}" : "You have created card {card} in list {stack} on board {board}",
|
||||
"{user} has created card {card} in list {stack} on board {board}" : "{user} has created card {card} in list {stack} on board {board}",
|
||||
"You have deleted card {card} in list {stack} on board {board}" : "You have deleted card {card} in list {stack} on board {board}",
|
||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} has deleted card {card} in list {stack} on board {board}",
|
||||
"You have renamed the card {before} to {card}" : "You have renamed the card {before} to {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} has renamed the card {before} to {card}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "You have added a description to card {card} in list {stack} on board {board}",
|
||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} has added a description to card {card} in list {stack} on board {board}",
|
||||
"You have updated the description of card {card} in list {stack} on board {board}" : "You have updated the description of card {card} in list {stack} on board {board}",
|
||||
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} has updated the description of the card {card} in list {stack} on board {board}",
|
||||
"You have archived card {card} in list {stack} on board {board}" : "You have archived card {card} in list {stack} on board {board}",
|
||||
"{user} has archived card {card} in list {stack} on board {board}" : "{user} has archived card {card} in list {stack} on board {board}",
|
||||
"You have unarchived card {card} in list {stack} on board {board}" : "You have unarchived card {card} in list {stack} on board {board}",
|
||||
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} has unarchived card {card} in list {stack} on board {board}",
|
||||
"You have removed the due date of card {card}" : "You have removed the due date of card {card}",
|
||||
"{user} has removed the due date of card {card}" : "{user} has removed the due date of card {card}",
|
||||
"You have set the due date of card {card} to {after}" : "You have set the due date of card {card} to {after}",
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} has set the due date of card {card} to {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "You have updated the due date of card {card} to {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} has updated the due date of card {card} to {after}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "You have added the tag {label} to card {card} in list {stack} on board {board}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} has added the tag {label} to card {card} in list {stack} on board {board}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "You have removed the tag {label} from card {card} in list {stack} on board {board}",
|
||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} has removed the tag {label} from card {card} in list {stack} on board {board}",
|
||||
"You have assigned {assigneduser} to card {card} on board {board}" : "You have assigned {assigneduser} to card {card} on board {board}",
|
||||
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} has assigned {assigneduser} to card {card} on board {board}",
|
||||
"You have unassigned {assigneduser} from card {card} on board {board}" : "You have unassigned {assigneduser} from card {card} on board {board}",
|
||||
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} has unassigned {assigneduser} from card {card} on board {board}",
|
||||
"You have moved the card {card} from list {stackBefore} to {stack}" : "You have moved the card {card} from list {stackBefore} to {stack}",
|
||||
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} has moved the card {card} from list {stackBefore} to {stack}",
|
||||
"You have added the attachment {attachment} to card {card}" : "You have added the attachment {attachment} to card {card}",
|
||||
"{user} has added the attachment {attachment} to card {card}" : "{user} has added the attachment {attachment} to card {card}",
|
||||
"You have updated the attachment {attachment} on card {card}" : "You have updated the attachment {attachment} on card {card}",
|
||||
"{user} has updated the attachment {attachment} on card {card}" : "{user} has updated the attachment {attachment} on card {card}",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "You have deleted the attachment {attachment} from card {card}",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} has deleted the attachment {attachment} from card {card}",
|
||||
"You have restored the attachment {attachment} to card {card}" : "You have restored the attachment {attachment} to card {card}",
|
||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} has restored the attachment {attachment} to card {card}",
|
||||
"You have commented on card {card}" : "You have commented on card {card}",
|
||||
"{user} has commented on card {card}" : "{user} has commented on card {card}",
|
||||
"A <strong>card description</strong> inside the Deck app has been changed" : "A <strong>card description</strong> inside the Deck app has been changed",
|
||||
"Deck" : "Deck",
|
||||
"Changes in the <strong>Deck app</strong>" : "Changes in the <strong>Deck app</strong>",
|
||||
"A <strong>comment</strong> was created on a card" : "A <strong>comment</strong> was created on a card",
|
||||
"Upcoming cards" : "Upcoming cards",
|
||||
"Load more" : "Load more",
|
||||
"Personal" : "Personal",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "The card \"%s\" on \"%s\" has been assigned to you by %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} has assigned the card {deck-card} on {deck-board} to you.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "The card {deck-card} on {deck-board} has reached its due date.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s has mentioned you in a comment on \"%s\".",
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} has mentioned you in a comment on {deck-card}.",
|
||||
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} has shared {deck-board} with you.",
|
||||
"Card comments" : "Card comments",
|
||||
"%s on %s" : "%s on %s",
|
||||
"No data was provided to create an attachment." : "No data was provided to create an attachment.",
|
||||
"Finished" : "Finished",
|
||||
"To review" : "To review",
|
||||
"Action needed" : "Action needed",
|
||||
"Later" : "Later",
|
||||
"copy" : "copy",
|
||||
"To do" : "To do",
|
||||
"Doing" : "Doing",
|
||||
"Done" : "Done",
|
||||
"Example Task 3" : "Example Task 3",
|
||||
"Example Task 2" : "Example Task 2",
|
||||
"Example Task 1" : "Example Task 1",
|
||||
"The file was uploaded" : "The file was uploaded",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "The uploaded file exceeds the upload_max_filesize directive in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
|
||||
@@ -18,63 +98,218 @@
|
||||
"Missing a temporary folder" : "Missing a temporary folder",
|
||||
"Could not write file to disk" : "Could not write file to disk",
|
||||
"A PHP extension stopped the file upload" : "A PHP extension stopped the file upload",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No file uploaded or file size exceeds maximum of %s",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s.",
|
||||
"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",
|
||||
"Card details" : "Card details",
|
||||
"Add board" : "Add board",
|
||||
"Select the board to link to a project" : "Select the board to link to a project",
|
||||
"Search by board title" : "Search by board title",
|
||||
"Select board" : "Select board",
|
||||
"Create a new card" : "Create a new card",
|
||||
"Select a board" : "Select a board",
|
||||
"Select a list" : "Select a list",
|
||||
"Card title" : "Card title",
|
||||
"Cancel" : "Cancel",
|
||||
"Creating the new card …" : "Creating the new card …",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "Card \"{card}\" was added to \"{board}\"",
|
||||
"Open card" : "Open card",
|
||||
"Close" : "Close",
|
||||
"Create card" : "Create card",
|
||||
"Select a card" : "Select a card",
|
||||
"Select the card to link to a project" : "Select the card to link to a project",
|
||||
"Link to card" : "Link to card",
|
||||
"File already exists" : "File already exists",
|
||||
"A file with the name {filename} already exists." : "A file with the name {filename} already exists.",
|
||||
"Do you want to overwrite it?" : "Do you want to overwrite it?",
|
||||
"Overwrite file" : "Overwrite file",
|
||||
"Keep existing file" : "Keep existing file",
|
||||
"This board is read only" : "This board is read only",
|
||||
"Drop your files to upload" : "Drop your files to upload",
|
||||
"Add card" : "Add card",
|
||||
"Archived cards" : "Archived cards",
|
||||
"Add list" : "Add list",
|
||||
"List name" : "List name",
|
||||
"Active filters" : "Active filters",
|
||||
"Apply filter" : "Apply filter",
|
||||
"Filter by tag" : "Filter by tag",
|
||||
"Filter by assigned user" : "Filter by assigned user",
|
||||
"Unassigned" : "Unassigned",
|
||||
"Filter by due date" : "Filter by due date",
|
||||
"Overdue" : "Overdue",
|
||||
"Next 24 hours" : "Next 24 hours",
|
||||
"Next 7 days" : "Next 7 days",
|
||||
"Next 30 days" : "Next 30 days",
|
||||
"No due date" : "No due date",
|
||||
"Clear filter" : "Clear filter",
|
||||
"Hide archived cards" : "Hide archived cards",
|
||||
"Show archived cards" : "Show archived cards",
|
||||
"Toggle compact mode" : "Toggle compact mode",
|
||||
"Open details" : "Open details",
|
||||
"Details" : "Details",
|
||||
"Loading board" : "Loading board",
|
||||
"No lists available" : "No lists available",
|
||||
"Create a new list to add cards to this board" : "Create a new list to add cards to this board",
|
||||
"Board not found" : "Board not found",
|
||||
"Sharing" : "Sharing",
|
||||
"Tags" : "Tags",
|
||||
"Deleted items" : "Deleted items",
|
||||
"Timeline" : "Timeline",
|
||||
"Deleted lists" : "Deleted lists",
|
||||
"Undo" : "Undo",
|
||||
"Deleted cards" : "Deleted cards",
|
||||
"Share board with a user, group or circle …" : "Share board with a user, group or circle …",
|
||||
"Searching for users, groups and circles …" : "Searching for users, groups and circles …",
|
||||
"No participants found" : "No participants found",
|
||||
"Board owner" : "Board owner",
|
||||
"(Group)" : "(Group)",
|
||||
"(Circle)" : "(Circle)",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Can manage" : "Can manage",
|
||||
"Owner" : "Owner",
|
||||
"Delete" : "Delete",
|
||||
"Failed to create share with {displayName}" : "Failed to create share with {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Are you sure you want to transfer the board {title} to {user}?",
|
||||
"Transfer the board." : "Transfer the board.",
|
||||
"Transfer" : "Transfer",
|
||||
"The board has been transferred to {user}" : "The board has been transferred to {user}",
|
||||
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
|
||||
"Add a new list" : "Add a new list",
|
||||
"Archive all cards" : "Archive all cards",
|
||||
"Unarchive all cards" : "Unarchive all cards",
|
||||
"Delete list" : "Delete list",
|
||||
"Archive all cards in this list" : "Archive all cards in this list",
|
||||
"Unarchive all cards in this list" : "Unarchive all cards in this list",
|
||||
"Add a new card" : "Add a new card",
|
||||
"Card name" : "Card name",
|
||||
"List deleted" : "List deleted",
|
||||
"Edit" : "Edit",
|
||||
"Add a new tag" : "Add a new tag",
|
||||
"title and color value must be provided" : "title and colour value must be provided",
|
||||
"Board name" : "Board name",
|
||||
"Members" : "Members",
|
||||
"Upload new files" : "Upload new files",
|
||||
"Share from Files" : "Share from Files",
|
||||
"Pending share" : "Pending share",
|
||||
"Add this attachment" : "Add this attachment",
|
||||
"Show in Files" : "Show in Files",
|
||||
"Download" : "Download",
|
||||
"Remove attachment" : "Remove attachment",
|
||||
"Delete Attachment" : "Delete Attachment",
|
||||
"Restore Attachment" : "Restore Attachment",
|
||||
"File to share" : "File to share",
|
||||
"Invalid path selected" : "Invalid path selected",
|
||||
"Open in sidebar view" : "Open in sidebar view",
|
||||
"Open in bigger view" : "Open in bigger view",
|
||||
"Attachments" : "Attachments",
|
||||
"Comments" : "Comments",
|
||||
"Modified" : "Modified",
|
||||
"Created" : "Created",
|
||||
"The title cannot be empty." : "The title cannot be empty.",
|
||||
"No comments yet. Begin the discussion!" : "No comments yet. Begin the discussion!",
|
||||
"Failed to load comments" : "Failed to load comments",
|
||||
"Assign a tag to this card…" : "Assign a tag to this card…",
|
||||
"Assign to users" : "Assign to users",
|
||||
"Assign to users/groups/circles" : "Assign to users/groups/circles",
|
||||
"Assign a user to this card…" : "Assign a user to this card…",
|
||||
"Due date" : "Due date",
|
||||
"Set a due date" : "Set a due date",
|
||||
"Remove due date" : "Remove due date",
|
||||
"Select Date" : "Select Date",
|
||||
"Today" : "Today",
|
||||
"Tomorrow" : "Tomorrow",
|
||||
"Next week" : "Next week",
|
||||
"Next month" : "Next month",
|
||||
"Save" : "Save",
|
||||
"The comment cannot be empty." : "The comment cannot be empty.",
|
||||
"The comment cannot be longer than 1000 characters." : "The comment cannot be longer than 1000 characters.",
|
||||
"In reply to" : "In reply to",
|
||||
"Cancel reply" : "Cancel reply",
|
||||
"Reply" : "Reply",
|
||||
"Update" : "Update",
|
||||
"Description" : "Description",
|
||||
"(Unsaved)" : "(Unsaved)",
|
||||
"(Saving…)" : "(Saving…)",
|
||||
"Formatting help" : "Formatting help",
|
||||
"Edit description" : "Edit description",
|
||||
"View description" : "View description",
|
||||
"Add Attachment" : "Add Attachment",
|
||||
"Write a description …" : "Write a description …",
|
||||
"Choose attachment" : "Choose attachment",
|
||||
"(group)" : "(group)",
|
||||
"Todo items" : "Todo items",
|
||||
"{count} comments, {unread} unread" : "{count} comments, {unread} unread",
|
||||
"Edit card title" : "Edit card title",
|
||||
"Assign to me" : "Assign to me",
|
||||
"Unassign myself" : "Unassign myself",
|
||||
"Move card" : "Move card",
|
||||
"Unarchive card" : "Unarchive card",
|
||||
"Archive card" : "Archive card",
|
||||
"Delete card" : "Delete card",
|
||||
"Move card to another board" : "Move card to another board",
|
||||
"List is empty" : "List is empty",
|
||||
"Card deleted" : "Card deleted",
|
||||
"seconds ago" : "seconds ago",
|
||||
"All boards" : "All boards",
|
||||
"Archived boards" : "Archived boards",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Deck settings" : "Deck settings",
|
||||
"Use bigger card view" : "Use bigger card view",
|
||||
"Show card ID badge" : "Show card ID badge",
|
||||
"Show boards in calendar/tasks" : "Show boards in calendar/tasks",
|
||||
"Limit deck usage of groups" : "Limit deck usage of groups",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them.",
|
||||
"Board details" : "Board details",
|
||||
"Edit board" : "Edit board",
|
||||
"Clone board" : "Clone board",
|
||||
"Unarchive board" : "Unarchive board",
|
||||
"Archive board" : "Archive board",
|
||||
"Turn on due date reminders" : "Turn on due date reminders",
|
||||
"Turn off due date reminders" : "Turn off due date reminders",
|
||||
"Due date reminders" : "Due date reminders",
|
||||
"All cards" : "All cards",
|
||||
"Assigned cards" : "Assigned cards",
|
||||
"No notifications" : "No notifications",
|
||||
"Delete board" : "Delete board",
|
||||
"Board {0} deleted" : "Board {0} deleted",
|
||||
"Only assigned cards" : "Only assigned cards",
|
||||
"No reminder" : "No reminder",
|
||||
"An error occurred" : "An error occurred",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards.",
|
||||
"Delete the board?" : "Delete the board?",
|
||||
"Loading filtered view" : "Loading filtered view",
|
||||
"No due" : "No due",
|
||||
"Search for {searchQuery} in all boards" : "Search for {searchQuery} in all boards",
|
||||
"No results found" : "No results found",
|
||||
"{stack} in {board}" : "{stack} in {board}",
|
||||
"Click to expand description" : "Click to expand description",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments",
|
||||
"{nbCards} cards" : "{nbCards} cards",
|
||||
"No upcoming cards" : "No upcoming cards",
|
||||
"upcoming cards" : "upcoming cards",
|
||||
"Due on {date}" : "Due on {date}",
|
||||
"Link to a board" : "Link to a board",
|
||||
"Link to a card" : "Link to a card",
|
||||
"Create a card" : "Create a card",
|
||||
"Message from {author} in {conversationName}" : "Message from {author} in {conversationName}",
|
||||
"Something went wrong" : "Something went wrong",
|
||||
"Failed to upload {name}" : "Failed to upload {name}",
|
||||
"Maximum file size of {size} exceeded" : "Maximum file size of {size} exceeded",
|
||||
"Error creating the share" : "Error creating the share",
|
||||
"Share with a Deck card" : "Share with a Deck card",
|
||||
"Share {file} with a Deck card" : "Share {file} with a Deck card",
|
||||
"Share" : "Share",
|
||||
"This week" : "This week"
|
||||
"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",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Are you sure you want to transfer the board {title} for {user} ?",
|
||||
"Transfer the board for {user} successfully" : "Transfer the board for {user} successfully",
|
||||
"Failed to transfer the board for {user}" : "Failed to transfer the board for {user}",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Are you sure you want to delete the board {title}? This will delete all the data of this board.",
|
||||
"This week" : "This week",
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Are you sure you want to transfer the board {title} for {user}?"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -18,6 +18,7 @@ OC.L10N.register(
|
||||
"Details" : "Üksikasjad",
|
||||
"Sharing" : "Jagamine",
|
||||
"Tags" : "Sildid",
|
||||
"Undo" : "Tühista",
|
||||
"Can edit" : "Võib redigeerida",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "Omanik",
|
||||
@@ -42,6 +43,7 @@ OC.L10N.register(
|
||||
"Shared with you" : "Sinuga jagatud",
|
||||
"No notifications" : "Märguandeid pole",
|
||||
"An error occurred" : "Tekkis tõrge",
|
||||
"Share" : "Jaga"
|
||||
"Share" : "Jaga",
|
||||
"This week" : "Käesolev nädal"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"Details" : "Üksikasjad",
|
||||
"Sharing" : "Jagamine",
|
||||
"Tags" : "Sildid",
|
||||
"Undo" : "Tühista",
|
||||
"Can edit" : "Võib redigeerida",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "Omanik",
|
||||
@@ -40,6 +41,7 @@
|
||||
"Shared with you" : "Sinuga jagatud",
|
||||
"No notifications" : "Märguandeid pole",
|
||||
"An error occurred" : "Tekkis tõrge",
|
||||
"Share" : "Jaga"
|
||||
"Share" : "Jaga",
|
||||
"This week" : "Käesolev nädal"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -131,7 +131,7 @@ OC.L10N.register(
|
||||
"Overwrite file" : "Remplacer le fichier",
|
||||
"Keep existing file" : "Conserver le fichier existant",
|
||||
"This board is read only" : "Ce tableau est en lecture seule",
|
||||
"Drop your files to upload" : "Glissez vos fichiers pour les envoyer",
|
||||
"Drop your files to upload" : "Glissez vos fichiers pour les téléverser",
|
||||
"Add card" : "Ajouter une carte",
|
||||
"Archived cards" : "Cartes archivées",
|
||||
"Add list" : "Ajouter une liste",
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
"Overwrite file" : "Remplacer le fichier",
|
||||
"Keep existing file" : "Conserver le fichier existant",
|
||||
"This board is read only" : "Ce tableau est en lecture seule",
|
||||
"Drop your files to upload" : "Glissez vos fichiers pour les envoyer",
|
||||
"Drop your files to upload" : "Glissez vos fichiers pour les téléverser",
|
||||
"Add card" : "Ajouter une carte",
|
||||
"Archived cards" : "Cartes archivées",
|
||||
"Add list" : "Ajouter une liste",
|
||||
|
||||
@@ -71,14 +71,14 @@ OC.L10N.register(
|
||||
"Load more" : "Carregar mais",
|
||||
"Personal" : "Pessoal",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "O cartão \"%s\" em \"%s\" foi vinculado com você por %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{usuário} atribuiu a carta {deck-card} no {deck-board} para você.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} atribuiu o cartão {deck-card} no {deck-board} a você.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "A carta {deck-card} em {deck-board} atingiu sua data de vencimento.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "O cartão {deck-card} em {deck-board} atingiu sua data de vencimento.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s citou você num comentário em \"%s\".",
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} mencionou você em um comentário em {deck-card}.",
|
||||
"The board \"%s\" has been shared with you by %s." : "O painel \"%s\" foi compartilhado com você por %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} compartilhou {deck-board} com você.",
|
||||
"Card comments" : "Comentários nos Cards",
|
||||
"{user} has shared {deck-board} with you." : "{user} compartilhou o {deck-board} com você.",
|
||||
"Card comments" : "Comentários do cartão",
|
||||
"%s on %s" : "%s em %s",
|
||||
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
|
||||
"Finished" : "Terminado",
|
||||
@@ -101,12 +101,12 @@ OC.L10N.register(
|
||||
"Could not write file to disk" : "Não foi possível escrever no disco",
|
||||
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Nenhum arquivo enviado ou o tamanho excede o máximo de %s",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nAdicionado como um anexo ao cartão com o nome %s.\nAcessível no URL: %s.",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nEle foi adicionado como um anexo ao cartão de nome %s.\nAcessível na URL: %s.",
|
||||
"Card not found" : "Cartão não encontrado",
|
||||
"Path is already shared with this card" : "O caminho já é compartilhado com este cartão",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD",
|
||||
"Personal planning and team project organization" : "Planejamento pessoal e organização de projetos em equipe",
|
||||
"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 é uma ferramenta de organização do estilo kanban voltada para o planejamento pessoal e organização de projetos para equipes integradas ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-as em ordem\n- 📄 Escreva notas adicionais em Anotar \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, amigos ou família\n- 📎 Anexar arquivos e incorporá-los à descrição da Nota\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as mudanças no fluxo de atividades \n- 🚀 Organize seu projeto ",
|
||||
"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" : "O Deck é uma ferramenta de organização ao estilo kanban voltada para o planejamento pessoal e para a organização de projetos para equipes, integrada ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Escreva notas adicionais formatadas em Markdown \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, seus amigos ou sua família\n- 📎 Anexe arquivos e incorpore-os à sua descrição em Markdown\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades \n- 🚀 Organize seu projeto ",
|
||||
"Card details" : "Detalhes do cartão",
|
||||
"Add board" : "Adicionar painel",
|
||||
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto",
|
||||
@@ -117,7 +117,7 @@ OC.L10N.register(
|
||||
"Select a list" : "Selecione uma lista",
|
||||
"Card title" : "Título do cartão",
|
||||
"Cancel" : "Cancelar",
|
||||
"Creating the new card …" : "Criando o novo cartão …",
|
||||
"Creating the new card …" : "Criando o novo cartão…",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "O cartão \"{card}\" foi adicionado a \"{board}\" ",
|
||||
"Open card" : "Abrir o cartão",
|
||||
"Close" : "Fechar",
|
||||
@@ -150,7 +150,7 @@ OC.L10N.register(
|
||||
"Clear filter" : "Limpar filtro",
|
||||
"Hide archived cards" : "Ocultar cartões arquivados",
|
||||
"Show archived cards" : "Exibir cartões arquivados",
|
||||
"Toggle compact mode" : "Alternar para modo compacto",
|
||||
"Toggle compact mode" : "Alternar modo compacto",
|
||||
"Open details" : "Abrir detalhes",
|
||||
"Details" : "Detalhes",
|
||||
"Loading board" : "Carregando painel",
|
||||
@@ -176,15 +176,17 @@ OC.L10N.register(
|
||||
"Owner" : "Proprietário",
|
||||
"Delete" : "Excluir",
|
||||
"Failed to create share with {displayName}" : "Falha ao criar compartilhamento com {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
|
||||
"Transfer the board." : "Transfira a reunião.",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Deseja realmente transferir o painel {title} para {user}?",
|
||||
"Transfer the board." : "Transferir o painel.",
|
||||
"Transfer" : "Transferir",
|
||||
"The board has been transferred to {user}" : "A quadro foi transferida para {user}",
|
||||
"Failed to transfer the board to {user}" : "Falha ao transferir o quadro para {user}",
|
||||
"The board has been transferred to {user}" : "A painel foi transferida para {user}",
|
||||
"Failed to transfer the board to {user}" : "Não foi possível transferir o painel para {user}",
|
||||
"Add a new list" : "Adicionar nova lista",
|
||||
"Archive all cards" : "Arquivar todos os cartões",
|
||||
"Unarchive all cards" : "Desarquivar todos os cartões",
|
||||
"Delete list" : "Excluir lista",
|
||||
"Archive all cards in this list" : "Arquivar todos os cartões desta lista",
|
||||
"Unarchive all cards in this list" : "Desarquivar todos os cartões desta lista",
|
||||
"Add a new card" : "Adicionar um novo cartão",
|
||||
"Card name" : "Nome do cartão",
|
||||
"List deleted" : "Lista excluída",
|
||||
@@ -197,7 +199,7 @@ OC.L10N.register(
|
||||
"Share from Files" : "Compartilhar de Arquivos",
|
||||
"Pending share" : "Compartilhamento pendente",
|
||||
"Add this attachment" : "Adicionar este anexo",
|
||||
"Show in Files" : "Mostrar em Arquivos",
|
||||
"Show in Files" : "Exibir em Arquivos",
|
||||
"Download" : "Baixar",
|
||||
"Remove attachment" : "Remover anexo",
|
||||
"Delete Attachment" : "Excluir Anexo",
|
||||
@@ -212,13 +214,13 @@ OC.L10N.register(
|
||||
"Created" : "Criado",
|
||||
"The title cannot be empty." : "O título não pode ficar em branco.",
|
||||
"No comments yet. Begin the discussion!" : "Nenhum comentário ainda. Inicie a conversa!",
|
||||
"Failed to load comments" : "Falha ao carregar comentários",
|
||||
"Failed to load comments" : "Não foi possível carregar os comentários",
|
||||
"Assign a tag to this card…" : "Atribuir uma etiqueta a este cartão...",
|
||||
"Assign to users" : "Atribuir a usuários",
|
||||
"Assign to users/groups/circles" : "Atribuir a usuários/grupos/círculos",
|
||||
"Assign a user to this card…" : "Atribuir um usuário a este cartão...",
|
||||
"Due date" : "Data de vencimento",
|
||||
"Set a due date" : "Definir uma data de finalização",
|
||||
"Set a due date" : "Definir uma data de vencimento",
|
||||
"Remove due date" : "Remover data de vencimento",
|
||||
"Select Date" : "Selecionar Data",
|
||||
"Today" : "Hoje",
|
||||
@@ -242,7 +244,7 @@ OC.L10N.register(
|
||||
"Write a description …" : "Escreva uma descrição...",
|
||||
"Choose attachment" : "Escolher anexo",
|
||||
"(group)" : "(grupo)",
|
||||
"Todo items" : "Itens para fazer",
|
||||
"Todo items" : "Itens a fazer",
|
||||
"{count} comments, {unread} unread" : "{count} comentários, {unread} não lidos",
|
||||
"Edit card title" : "Editar título do cartão",
|
||||
"Assign to me" : "Atribuir a mim",
|
||||
@@ -252,7 +254,7 @@ OC.L10N.register(
|
||||
"Archive card" : "Arquivar cartão",
|
||||
"Delete card" : "Excluir cartão",
|
||||
"Move card to another board" : "Mover o cartão para outro painel",
|
||||
"List is empty" : "A Lista está vazia",
|
||||
"List is empty" : "A lista está vazia",
|
||||
"Card deleted" : "Cartão excluído",
|
||||
"seconds ago" : "segundos atrás",
|
||||
"All boards" : "Todos os painéis",
|
||||
@@ -260,7 +262,8 @@ OC.L10N.register(
|
||||
"Shared with you" : "Compartilhado com você",
|
||||
"Deck settings" : "Configurações do Deck",
|
||||
"Use bigger card view" : "Use uma exibição de cartão maior",
|
||||
"Show boards in calendar/tasks" : "Mostrar painéis em calendários/tarefas",
|
||||
"Show card ID badge" : "Exibir o distintivo de identificação do cartão",
|
||||
"Show boards in calendar/tasks" : "Exibir os painéis em calendários/tarefas",
|
||||
"Limit deck usage of groups" : "Limitar o uso de grupos no deck",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar o Deck impedirá que usuários que não fazem parte desses grupos criem seus próprios painéis. Os usuários ainda poderão trabalhar em pastas que foram compartilhadas com eles.",
|
||||
"Board details" : "Detalhes do painel",
|
||||
@@ -279,20 +282,20 @@ OC.L10N.register(
|
||||
"Only assigned cards" : "Apenas cartões atribuídos",
|
||||
"No reminder" : "Nenhum lembrete",
|
||||
"An error occurred" : "Ocorreu um erro",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Tem certeza de que deseja excluir o quadro {title}? Isso excluirá todos os dados deste quadro, incluindo cartões arquivados.",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Deseja realmente excluir o painel {title}? Isso excluirá todos os dados deste painel, inclusive os cartões arquivados.",
|
||||
"Delete the board?" : "Excluir o painel?",
|
||||
"Loading filtered view" : "Carregando exibição filtrada",
|
||||
"No due" : "Sem vencimento",
|
||||
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
|
||||
"No results found" : "Nenhum resultado encontrado",
|
||||
"{stack} in {board}" : "{stack} de {board}",
|
||||
"{stack} in {board}" : "{stack} em {board}",
|
||||
"Click to expand description" : "Clique para expandir a descrição",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários",
|
||||
"{nbCards} cards" : "{nbCards} cartões",
|
||||
"No upcoming cards" : "Não há mais cartões",
|
||||
"upcoming cards" : "próximos cartões",
|
||||
"Due on {date}" : "Vencimento em {date}",
|
||||
"Link to a board" : "Linkar a um painel",
|
||||
"Link to a board" : "Vincular a um painel",
|
||||
"Link to a card" : "Vincular a um cartão",
|
||||
"Create a card" : "Criar um cartão",
|
||||
"Message from {author} in {conversationName}" : "Mensagem de {author} em {conversationName}",
|
||||
@@ -304,11 +307,11 @@ OC.L10N.register(
|
||||
"Share {file} with a Deck card" : "Compartilhar {file} com um cartão Deck",
|
||||
"Share" : "Compartilhar",
|
||||
"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 é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Insira notas adicionais em markdown\n- 🔖 Atribua etiquetas para melhorar a organização\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 📎 Anexe arquivos e incorpore-os em sua descrição no markdown\n- 💬 Discuta com sua equipe usando os comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades\n- 🚀 Mantenha seu projeto organizado",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
|
||||
"Transfer the board for {user} successfully" : "Transferida a reunião para {user} com sucesso",
|
||||
"Failed to transfer the board for {user}" : "Falha ao transferir a reunião para {user}",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Deseja realmente transferir o painel {title} para {user}?",
|
||||
"Transfer the board for {user} successfully" : "O painel foi transferido para {user} com sucesso",
|
||||
"Failed to transfer the board for {user}" : "Não foi possível transferir o painel para {user}",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Deseja realmente excluir o painel {title}? Isto excluirá todos os dados deste painel.",
|
||||
"This week" : "Esta semana",
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?"
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Deseja realmente transferir o painel {title} para {user}?"
|
||||
},
|
||||
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -69,14 +69,14 @@
|
||||
"Load more" : "Carregar mais",
|
||||
"Personal" : "Pessoal",
|
||||
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "O cartão \"%s\" em \"%s\" foi vinculado com você por %s.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{usuário} atribuiu a carta {deck-card} no {deck-board} para você.",
|
||||
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} atribuiu o cartão {deck-card} no {deck-board} a você.",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "A carta {deck-card} em {deck-board} atingiu sua data de vencimento.",
|
||||
"The card {deck-card} on {deck-board} has reached its due date." : "O cartão {deck-card} em {deck-board} atingiu sua data de vencimento.",
|
||||
"%s has mentioned you in a comment on \"%s\"." : "%s citou você num comentário em \"%s\".",
|
||||
"{user} has mentioned you in a comment on {deck-card}." : "{user} mencionou você em um comentário em {deck-card}.",
|
||||
"The board \"%s\" has been shared with you by %s." : "O painel \"%s\" foi compartilhado com você por %s.",
|
||||
"{user} has shared {deck-board} with you." : "{user} compartilhou {deck-board} com você.",
|
||||
"Card comments" : "Comentários nos Cards",
|
||||
"{user} has shared {deck-board} with you." : "{user} compartilhou o {deck-board} com você.",
|
||||
"Card comments" : "Comentários do cartão",
|
||||
"%s on %s" : "%s em %s",
|
||||
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
|
||||
"Finished" : "Terminado",
|
||||
@@ -99,12 +99,12 @@
|
||||
"Could not write file to disk" : "Não foi possível escrever no disco",
|
||||
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Nenhum arquivo enviado ou o tamanho excede o máximo de %s",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nAdicionado como um anexo ao cartão com o nome %s.\nAcessível no URL: %s.",
|
||||
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Este comentário tem mais de %s caracteres.\nEle foi adicionado como um anexo ao cartão de nome %s.\nAcessível na URL: %s.",
|
||||
"Card not found" : "Cartão não encontrado",
|
||||
"Path is already shared with this card" : "O caminho já é compartilhado com este cartão",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD",
|
||||
"Personal planning and team project organization" : "Planejamento pessoal e organização de projetos em equipe",
|
||||
"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 é uma ferramenta de organização do estilo kanban voltada para o planejamento pessoal e organização de projetos para equipes integradas ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-as em ordem\n- 📄 Escreva notas adicionais em Anotar \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, amigos ou família\n- 📎 Anexar arquivos e incorporá-los à descrição da Nota\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as mudanças no fluxo de atividades \n- 🚀 Organize seu projeto ",
|
||||
"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" : "O Deck é uma ferramenta de organização ao estilo kanban voltada para o planejamento pessoal e para a organização de projetos para equipes, integrada ao Nextcloud.\n\n\n- 📥Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Escreva notas adicionais formatadas em Markdown \n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, seus amigos ou sua família\n- 📎 Anexe arquivos e incorpore-os à sua descrição em Markdown\n- 💬 Discuta com sua equipe usando comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades \n- 🚀 Organize seu projeto ",
|
||||
"Card details" : "Detalhes do cartão",
|
||||
"Add board" : "Adicionar painel",
|
||||
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto",
|
||||
@@ -115,7 +115,7 @@
|
||||
"Select a list" : "Selecione uma lista",
|
||||
"Card title" : "Título do cartão",
|
||||
"Cancel" : "Cancelar",
|
||||
"Creating the new card …" : "Criando o novo cartão …",
|
||||
"Creating the new card …" : "Criando o novo cartão…",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "O cartão \"{card}\" foi adicionado a \"{board}\" ",
|
||||
"Open card" : "Abrir o cartão",
|
||||
"Close" : "Fechar",
|
||||
@@ -148,7 +148,7 @@
|
||||
"Clear filter" : "Limpar filtro",
|
||||
"Hide archived cards" : "Ocultar cartões arquivados",
|
||||
"Show archived cards" : "Exibir cartões arquivados",
|
||||
"Toggle compact mode" : "Alternar para modo compacto",
|
||||
"Toggle compact mode" : "Alternar modo compacto",
|
||||
"Open details" : "Abrir detalhes",
|
||||
"Details" : "Detalhes",
|
||||
"Loading board" : "Carregando painel",
|
||||
@@ -174,15 +174,17 @@
|
||||
"Owner" : "Proprietário",
|
||||
"Delete" : "Excluir",
|
||||
"Failed to create share with {displayName}" : "Falha ao criar compartilhamento com {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
|
||||
"Transfer the board." : "Transfira a reunião.",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Deseja realmente transferir o painel {title} para {user}?",
|
||||
"Transfer the board." : "Transferir o painel.",
|
||||
"Transfer" : "Transferir",
|
||||
"The board has been transferred to {user}" : "A quadro foi transferida para {user}",
|
||||
"Failed to transfer the board to {user}" : "Falha ao transferir o quadro para {user}",
|
||||
"The board has been transferred to {user}" : "A painel foi transferida para {user}",
|
||||
"Failed to transfer the board to {user}" : "Não foi possível transferir o painel para {user}",
|
||||
"Add a new list" : "Adicionar nova lista",
|
||||
"Archive all cards" : "Arquivar todos os cartões",
|
||||
"Unarchive all cards" : "Desarquivar todos os cartões",
|
||||
"Delete list" : "Excluir lista",
|
||||
"Archive all cards in this list" : "Arquivar todos os cartões desta lista",
|
||||
"Unarchive all cards in this list" : "Desarquivar todos os cartões desta lista",
|
||||
"Add a new card" : "Adicionar um novo cartão",
|
||||
"Card name" : "Nome do cartão",
|
||||
"List deleted" : "Lista excluída",
|
||||
@@ -195,7 +197,7 @@
|
||||
"Share from Files" : "Compartilhar de Arquivos",
|
||||
"Pending share" : "Compartilhamento pendente",
|
||||
"Add this attachment" : "Adicionar este anexo",
|
||||
"Show in Files" : "Mostrar em Arquivos",
|
||||
"Show in Files" : "Exibir em Arquivos",
|
||||
"Download" : "Baixar",
|
||||
"Remove attachment" : "Remover anexo",
|
||||
"Delete Attachment" : "Excluir Anexo",
|
||||
@@ -210,13 +212,13 @@
|
||||
"Created" : "Criado",
|
||||
"The title cannot be empty." : "O título não pode ficar em branco.",
|
||||
"No comments yet. Begin the discussion!" : "Nenhum comentário ainda. Inicie a conversa!",
|
||||
"Failed to load comments" : "Falha ao carregar comentários",
|
||||
"Failed to load comments" : "Não foi possível carregar os comentários",
|
||||
"Assign a tag to this card…" : "Atribuir uma etiqueta a este cartão...",
|
||||
"Assign to users" : "Atribuir a usuários",
|
||||
"Assign to users/groups/circles" : "Atribuir a usuários/grupos/círculos",
|
||||
"Assign a user to this card…" : "Atribuir um usuário a este cartão...",
|
||||
"Due date" : "Data de vencimento",
|
||||
"Set a due date" : "Definir uma data de finalização",
|
||||
"Set a due date" : "Definir uma data de vencimento",
|
||||
"Remove due date" : "Remover data de vencimento",
|
||||
"Select Date" : "Selecionar Data",
|
||||
"Today" : "Hoje",
|
||||
@@ -240,7 +242,7 @@
|
||||
"Write a description …" : "Escreva uma descrição...",
|
||||
"Choose attachment" : "Escolher anexo",
|
||||
"(group)" : "(grupo)",
|
||||
"Todo items" : "Itens para fazer",
|
||||
"Todo items" : "Itens a fazer",
|
||||
"{count} comments, {unread} unread" : "{count} comentários, {unread} não lidos",
|
||||
"Edit card title" : "Editar título do cartão",
|
||||
"Assign to me" : "Atribuir a mim",
|
||||
@@ -250,7 +252,7 @@
|
||||
"Archive card" : "Arquivar cartão",
|
||||
"Delete card" : "Excluir cartão",
|
||||
"Move card to another board" : "Mover o cartão para outro painel",
|
||||
"List is empty" : "A Lista está vazia",
|
||||
"List is empty" : "A lista está vazia",
|
||||
"Card deleted" : "Cartão excluído",
|
||||
"seconds ago" : "segundos atrás",
|
||||
"All boards" : "Todos os painéis",
|
||||
@@ -258,7 +260,8 @@
|
||||
"Shared with you" : "Compartilhado com você",
|
||||
"Deck settings" : "Configurações do Deck",
|
||||
"Use bigger card view" : "Use uma exibição de cartão maior",
|
||||
"Show boards in calendar/tasks" : "Mostrar painéis em calendários/tarefas",
|
||||
"Show card ID badge" : "Exibir o distintivo de identificação do cartão",
|
||||
"Show boards in calendar/tasks" : "Exibir os painéis em calendários/tarefas",
|
||||
"Limit deck usage of groups" : "Limitar o uso de grupos no deck",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar o Deck impedirá que usuários que não fazem parte desses grupos criem seus próprios painéis. Os usuários ainda poderão trabalhar em pastas que foram compartilhadas com eles.",
|
||||
"Board details" : "Detalhes do painel",
|
||||
@@ -277,20 +280,20 @@
|
||||
"Only assigned cards" : "Apenas cartões atribuídos",
|
||||
"No reminder" : "Nenhum lembrete",
|
||||
"An error occurred" : "Ocorreu um erro",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Tem certeza de que deseja excluir o quadro {title}? Isso excluirá todos os dados deste quadro, incluindo cartões arquivados.",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Deseja realmente excluir o painel {title}? Isso excluirá todos os dados deste painel, inclusive os cartões arquivados.",
|
||||
"Delete the board?" : "Excluir o painel?",
|
||||
"Loading filtered view" : "Carregando exibição filtrada",
|
||||
"No due" : "Sem vencimento",
|
||||
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
|
||||
"No results found" : "Nenhum resultado encontrado",
|
||||
"{stack} in {board}" : "{stack} de {board}",
|
||||
"{stack} in {board}" : "{stack} em {board}",
|
||||
"Click to expand description" : "Clique para expandir a descrição",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários",
|
||||
"{nbCards} cards" : "{nbCards} cartões",
|
||||
"No upcoming cards" : "Não há mais cartões",
|
||||
"upcoming cards" : "próximos cartões",
|
||||
"Due on {date}" : "Vencimento em {date}",
|
||||
"Link to a board" : "Linkar a um painel",
|
||||
"Link to a board" : "Vincular a um painel",
|
||||
"Link to a card" : "Vincular a um cartão",
|
||||
"Create a card" : "Criar um cartão",
|
||||
"Message from {author} in {conversationName}" : "Mensagem de {author} em {conversationName}",
|
||||
@@ -302,11 +305,11 @@
|
||||
"Share {file} with a Deck card" : "Compartilhar {file} com um cartão Deck",
|
||||
"Share" : "Compartilhar",
|
||||
"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 é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Insira notas adicionais em markdown\n- 🔖 Atribua etiquetas para melhorar a organização\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 📎 Anexe arquivos e incorpore-os em sua descrição no markdown\n- 💬 Discuta com sua equipe usando os comentários\n- ⚡ Acompanhe as alterações no fluxo de atividades\n- 🚀 Mantenha seu projeto organizado",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?",
|
||||
"Transfer the board for {user} successfully" : "Transferida a reunião para {user} com sucesso",
|
||||
"Failed to transfer the board for {user}" : "Falha ao transferir a reunião para {user}",
|
||||
"Are you sure you want to transfer the board {title} for {user} ?" : "Deseja realmente transferir o painel {title} para {user}?",
|
||||
"Transfer the board for {user} successfully" : "O painel foi transferido para {user} com sucesso",
|
||||
"Failed to transfer the board for {user}" : "Não foi possível transferir o painel para {user}",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Deseja realmente excluir o painel {title}? Isto excluirá todos os dados deste painel.",
|
||||
"This week" : "Esta semana",
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Tem certeza de que deseja transferir o quadro {title} para {user}?"
|
||||
"Are you sure you want to transfer the board {title} for {user}?" : "Deseja realmente transferir o painel {title} para {user}?"
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -183,8 +183,10 @@ OC.L10N.register(
|
||||
"Failed to transfer the board to {user}" : "Не удалось передать доску пользователю {user}",
|
||||
"Add a new list" : "Создать список",
|
||||
"Archive all cards" : "Переместить все карточки в архив",
|
||||
"Unarchive all cards" : "Восстановить все карточки из архива",
|
||||
"Delete list" : "Удалить список",
|
||||
"Archive all cards in this list" : "Переместить в архив все карточки текущего списка",
|
||||
"Unarchive all cards in this list" : "Восстановить из архива все карточки списка",
|
||||
"Add a new card" : "Создать карточку",
|
||||
"Card name" : "Название карточки",
|
||||
"List deleted" : "Список удалён",
|
||||
@@ -242,7 +244,9 @@ OC.L10N.register(
|
||||
"Write a description …" : "Добавьте описание...",
|
||||
"Choose attachment" : "Выберите вложение",
|
||||
"(group)" : "(группа)",
|
||||
"Todo items" : "Элементы списка задач",
|
||||
"{count} comments, {unread} unread" : "{count} комментариев, {unread} непрочитано",
|
||||
"Edit card title" : "Изменить заголовок карточки",
|
||||
"Assign to me" : "Назначить себе",
|
||||
"Unassign myself" : "Отказаться от назначения",
|
||||
"Move card" : "Переместить карточку",
|
||||
@@ -256,7 +260,9 @@ OC.L10N.register(
|
||||
"All boards" : "Все доски",
|
||||
"Archived boards" : "Архив досок",
|
||||
"Shared with you" : "Предоставленные вам",
|
||||
"Deck settings" : "Параметры карточек",
|
||||
"Use bigger card view" : "Режим просмотра с увеличенными карточками",
|
||||
"Show card ID badge" : "Показывать идентификатор карточки",
|
||||
"Show boards in calendar/tasks" : "Показывать карточки в календаре и задачах",
|
||||
"Limit deck usage of groups" : "Разрешить использовать приложение Карточки только участникам заданных групп",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Создание собственных рабочих досок пользователям, не входящим в заданные группы, будет заблокировано. Тем не менее, такие пользователи смогут продолжить работать с общими досками, к которым у них есть доступ. ",
|
||||
@@ -276,12 +282,15 @@ OC.L10N.register(
|
||||
"Only assigned cards" : "Только для назначенных карточек",
|
||||
"No reminder" : "Не напоминать",
|
||||
"An error occurred" : "Произошла ошибка",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Подтвердите удаление доски «{title}»; это действие приведёт к удалению также все данных, принадлежащих этой доске, включая карточки в архиве.",
|
||||
"Delete the board?" : "Удалить доску?",
|
||||
"Loading filtered view" : "Выполняется отбор",
|
||||
"No due" : "Без назначенной даты",
|
||||
"Search for {searchQuery} in all boards" : "Искать {searchQuery} на всех досках",
|
||||
"No results found" : "Результаты отсутствуют",
|
||||
"{stack} in {board}" : "«{stack}» с доски «{board}»",
|
||||
"Click to expand description" : "Нажмите, чтобы развернуть поле описания",
|
||||
"{nbCards} cards" : "карточек: {nbCards}",
|
||||
"No upcoming cards" : "Отсутствуют карточки, ожидающие выполнения",
|
||||
"upcoming cards" : "карточки, ожидающие выполнения",
|
||||
"Link to a board" : "Ссылка на доску",
|
||||
|
||||
@@ -181,8 +181,10 @@
|
||||
"Failed to transfer the board to {user}" : "Не удалось передать доску пользователю {user}",
|
||||
"Add a new list" : "Создать список",
|
||||
"Archive all cards" : "Переместить все карточки в архив",
|
||||
"Unarchive all cards" : "Восстановить все карточки из архива",
|
||||
"Delete list" : "Удалить список",
|
||||
"Archive all cards in this list" : "Переместить в архив все карточки текущего списка",
|
||||
"Unarchive all cards in this list" : "Восстановить из архива все карточки списка",
|
||||
"Add a new card" : "Создать карточку",
|
||||
"Card name" : "Название карточки",
|
||||
"List deleted" : "Список удалён",
|
||||
@@ -240,7 +242,9 @@
|
||||
"Write a description …" : "Добавьте описание...",
|
||||
"Choose attachment" : "Выберите вложение",
|
||||
"(group)" : "(группа)",
|
||||
"Todo items" : "Элементы списка задач",
|
||||
"{count} comments, {unread} unread" : "{count} комментариев, {unread} непрочитано",
|
||||
"Edit card title" : "Изменить заголовок карточки",
|
||||
"Assign to me" : "Назначить себе",
|
||||
"Unassign myself" : "Отказаться от назначения",
|
||||
"Move card" : "Переместить карточку",
|
||||
@@ -254,7 +258,9 @@
|
||||
"All boards" : "Все доски",
|
||||
"Archived boards" : "Архив досок",
|
||||
"Shared with you" : "Предоставленные вам",
|
||||
"Deck settings" : "Параметры карточек",
|
||||
"Use bigger card view" : "Режим просмотра с увеличенными карточками",
|
||||
"Show card ID badge" : "Показывать идентификатор карточки",
|
||||
"Show boards in calendar/tasks" : "Показывать карточки в календаре и задачах",
|
||||
"Limit deck usage of groups" : "Разрешить использовать приложение Карточки только участникам заданных групп",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Создание собственных рабочих досок пользователям, не входящим в заданные группы, будет заблокировано. Тем не менее, такие пользователи смогут продолжить работать с общими досками, к которым у них есть доступ. ",
|
||||
@@ -274,12 +280,15 @@
|
||||
"Only assigned cards" : "Только для назначенных карточек",
|
||||
"No reminder" : "Не напоминать",
|
||||
"An error occurred" : "Произошла ошибка",
|
||||
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Подтвердите удаление доски «{title}»; это действие приведёт к удалению также все данных, принадлежащих этой доске, включая карточки в архиве.",
|
||||
"Delete the board?" : "Удалить доску?",
|
||||
"Loading filtered view" : "Выполняется отбор",
|
||||
"No due" : "Без назначенной даты",
|
||||
"Search for {searchQuery} in all boards" : "Искать {searchQuery} на всех досках",
|
||||
"No results found" : "Результаты отсутствуют",
|
||||
"{stack} in {board}" : "«{stack}» с доски «{board}»",
|
||||
"Click to expand description" : "Нажмите, чтобы развернуть поле описания",
|
||||
"{nbCards} cards" : "карточек: {nbCards}",
|
||||
"No upcoming cards" : "Отсутствуют карточки, ожидающие выполнения",
|
||||
"upcoming cards" : "карточки, ожидающие выполнения",
|
||||
"Link to a board" : "Ссылка на доску",
|
||||
|
||||
@@ -125,7 +125,7 @@ OC.L10N.register(
|
||||
"Upload new files" : "Додати файл",
|
||||
"Share from Files" : "Відкрити Файли",
|
||||
"Add this attachment" : "Долучити вкладення",
|
||||
"Download" : "Завантажити",
|
||||
"Download" : "Звантажити",
|
||||
"Delete Attachment" : "Забрати вкладення",
|
||||
"Restore Attachment" : "Відновити вкладення",
|
||||
"File to share" : "Виберіть файл для надання доступу",
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
"Upload new files" : "Додати файл",
|
||||
"Share from Files" : "Відкрити Файли",
|
||||
"Add this attachment" : "Долучити вкладення",
|
||||
"Download" : "Завантажити",
|
||||
"Download" : "Звантажити",
|
||||
"Delete Attachment" : "Забрати вкладення",
|
||||
"Restore Attachment" : "Відновити вкладення",
|
||||
"File to share" : "Виберіть файл для надання доступу",
|
||||
|
||||
@@ -134,6 +134,7 @@ OC.L10N.register(
|
||||
"Archived cards" : "已归档卡片",
|
||||
"Add list" : "添加列表",
|
||||
"List name" : "列表名称",
|
||||
"Active filters" : "已开启的过滤器",
|
||||
"Apply filter" : "应用筛选",
|
||||
"Filter by tag" : "按标签筛选",
|
||||
"Filter by assigned user" : "按指派的用户筛选",
|
||||
@@ -235,7 +236,9 @@ OC.L10N.register(
|
||||
"Write a description …" : "写一段描述",
|
||||
"Choose attachment" : "选择附件",
|
||||
"(group)" : "(组)",
|
||||
"Todo items" : "待办事项",
|
||||
"{count} comments, {unread} unread" : "{count} 条评论,{unread} 未读",
|
||||
"Edit card title" : "编辑卡片标题",
|
||||
"Assign to me" : "指派给我",
|
||||
"Unassign myself" : "不再指派给我",
|
||||
"Move card" : "移动卡片",
|
||||
|
||||
@@ -132,6 +132,7 @@
|
||||
"Archived cards" : "已归档卡片",
|
||||
"Add list" : "添加列表",
|
||||
"List name" : "列表名称",
|
||||
"Active filters" : "已开启的过滤器",
|
||||
"Apply filter" : "应用筛选",
|
||||
"Filter by tag" : "按标签筛选",
|
||||
"Filter by assigned user" : "按指派的用户筛选",
|
||||
@@ -233,7 +234,9 @@
|
||||
"Write a description …" : "写一段描述",
|
||||
"Choose attachment" : "选择附件",
|
||||
"(group)" : "(组)",
|
||||
"Todo items" : "待办事项",
|
||||
"{count} comments, {unread} unread" : "{count} 条评论,{unread} 未读",
|
||||
"Edit card title" : "编辑卡片标题",
|
||||
"Assign to me" : "指派给我",
|
||||
"Unassign myself" : "不再指派给我",
|
||||
"Move card" : "移动卡片",
|
||||
|
||||
@@ -26,15 +26,13 @@ namespace OCA\Deck\AppInfo;
|
||||
use Closure;
|
||||
use Exception;
|
||||
use OC\EventDispatcher\SymfonyAdapter;
|
||||
use OCA\Circles\Events\CircleDestroyedEvent;
|
||||
use OCA\Deck\Activity\CommentEventHandler;
|
||||
use OCA\Deck\Capabilities;
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProvider;
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProviderCard;
|
||||
use OCA\Deck\Dashboard\DeckWidget;
|
||||
use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\AclMapper;
|
||||
use OCA\Deck\Db\AssignmentMapper;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Event\AclCreatedEvent;
|
||||
use OCA\Deck\Event\AclDeletedEvent;
|
||||
@@ -43,7 +41,9 @@ use OCA\Deck\Event\CardCreatedEvent;
|
||||
use OCA\Deck\Event\CardDeletedEvent;
|
||||
use OCA\Deck\Event\CardUpdatedEvent;
|
||||
use OCA\Deck\Listeners\BeforeTemplateRenderedListener;
|
||||
use OCA\Deck\Listeners\ParticipantCleanupListener;
|
||||
use OCA\Deck\Listeners\FullTextSearchEventListener;
|
||||
use OCA\Deck\Listeners\ResourceListener;
|
||||
use OCA\Deck\Middleware\DefaultBoardMiddleware;
|
||||
use OCA\Deck\Middleware\ExceptionMiddleware;
|
||||
use OCA\Deck\Notification\Notifier;
|
||||
@@ -62,15 +62,12 @@ use OCP\Collaboration\Reference\RenderReferenceEvent;
|
||||
use OCP\Collaboration\Resources\IProviderManager;
|
||||
use OCP\Comments\CommentsEntityEvent;
|
||||
use OCP\Comments\ICommentsManager;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Group\Events\GroupDeletedEvent;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IRequest;
|
||||
use OCP\Server;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Notification\IManager as NotificationManager;
|
||||
use OCP\Share\IManager;
|
||||
use OCP\User\Events\UserDeletedEvent;
|
||||
@@ -95,7 +92,6 @@ class Application extends App implements IBootstrap {
|
||||
}
|
||||
|
||||
public function boot(IBootContext $context): void {
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerUserGroupHooks']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerCommentsEntity']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerCommentsEventHandler']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerNotifications']));
|
||||
@@ -143,59 +139,20 @@ class Application extends App implements IBootstrap {
|
||||
$context->registerEventListener(AclCreatedEvent::class, FullTextSearchEventListener::class);
|
||||
$context->registerEventListener(AclUpdatedEvent::class, FullTextSearchEventListener::class);
|
||||
$context->registerEventListener(AclDeletedEvent::class, FullTextSearchEventListener::class);
|
||||
|
||||
// Handling cache invalidation for collections
|
||||
$context->registerEventListener(AclCreatedEvent::class, ResourceListener::class);
|
||||
$context->registerEventListener(AclDeletedEvent::class, ResourceListener::class);
|
||||
|
||||
$context->registerEventListener(UserDeletedEvent::class, ParticipantCleanupListener::class);
|
||||
$context->registerEventListener(GroupDeletedEvent::class, ParticipantCleanupListener::class);
|
||||
$context->registerEventListener(CircleDestroyedEvent::class, ParticipantCleanupListener::class);
|
||||
}
|
||||
|
||||
public function registerNotifications(NotificationManager $notificationManager): void {
|
||||
$notificationManager->registerNotifierService(Notifier::class);
|
||||
}
|
||||
|
||||
private function registerUserGroupHooks(IUserManager $userManager, IGroupManager $groupManager): void {
|
||||
$container = $this->getContainer();
|
||||
/** @var IEventDispatcher $eventDispatcher */
|
||||
$eventDispatcher = $container->get(IEventDispatcher::class);
|
||||
// Delete user/group acl entries when they get deleted
|
||||
$eventDispatcher->addListener(UserDeletedEvent::class, static function (Event $event) use ($container): void {
|
||||
if (!($event instanceof UserDeletedEvent)) {
|
||||
return;
|
||||
}
|
||||
$user = $event->getUser();
|
||||
// delete existing acl entries for deleted user
|
||||
/** @var AclMapper $aclMapper */
|
||||
$aclMapper = $container->get(AclMapper::class);
|
||||
$acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_USER, $user->getUID());
|
||||
foreach ($acls as $acl) {
|
||||
$aclMapper->delete($acl);
|
||||
}
|
||||
// delete existing user assignments
|
||||
$assignmentMapper = $container->get(AssignmentMapper::class);
|
||||
$assignments = $assignmentMapper->findByParticipant($user->getUID());
|
||||
foreach ($assignments as $assignment) {
|
||||
$assignmentMapper->delete($assignment);
|
||||
}
|
||||
|
||||
/** @var BoardMapper $boardMapper */
|
||||
$boardMapper = $container->get(BoardMapper::class);
|
||||
$boards = $boardMapper->findAllByOwner($user->getUID());
|
||||
foreach ($boards as $board) {
|
||||
$boardMapper->delete($board);
|
||||
}
|
||||
});
|
||||
|
||||
$eventDispatcher->addListener(GroupDeletedEvent::class, static function (Event $event) use ($container): void {
|
||||
if (!($event instanceof GroupDeletedEvent)) {
|
||||
return;
|
||||
}
|
||||
$group = $event->getGroup();
|
||||
/** @var AclMapper $aclMapper */
|
||||
$aclMapper = $container->get(AclMapper::class);
|
||||
$aclMapper->findByParticipant(Acl::PERMISSION_TYPE_GROUP, $group->getGID());
|
||||
$acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_GROUP, $group->getGID());
|
||||
foreach ($acls as $acl) {
|
||||
$aclMapper->delete($acl);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function registerCommentsEntity(IEventDispatcher $eventDispatcher): void {
|
||||
$eventDispatcher->addListener(CommentsEntityEvent::EVENT_ENTITY, function (CommentsEntityEvent $event) {
|
||||
$event->addEntityCollection(self::COMMENT_ENTITY_TYPE, function ($name) {
|
||||
|
||||
@@ -28,6 +28,7 @@ use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\BackgroundJob\TimedJob;
|
||||
use OCA\Deck\Db\AttachmentMapper;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\InvalidAttachmentType;
|
||||
use OCA\Deck\Service\AttachmentService;
|
||||
use OCP\BackgroundJob\IJob;
|
||||
@@ -36,14 +37,17 @@ class DeleteCron extends TimedJob {
|
||||
|
||||
/** @var BoardMapper */
|
||||
private $boardMapper;
|
||||
/** @var CardMapper */
|
||||
private $cardMapper;
|
||||
/** @var AttachmentService */
|
||||
private $attachmentService;
|
||||
/** @var AttachmentMapper */
|
||||
private $attachmentMapper;
|
||||
|
||||
public function __construct(ITimeFactory $time, BoardMapper $boardMapper, AttachmentService $attachmentService, AttachmentMapper $attachmentMapper) {
|
||||
public function __construct(ITimeFactory $time, BoardMapper $boardMapper, CardMapper $cardMapper, AttachmentService $attachmentService, AttachmentMapper $attachmentMapper) {
|
||||
parent::__construct($time);
|
||||
$this->boardMapper = $boardMapper;
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->attachmentService = $attachmentService;
|
||||
$this->attachmentMapper = $attachmentMapper;
|
||||
|
||||
@@ -61,6 +65,12 @@ class DeleteCron extends TimedJob {
|
||||
$this->boardMapper->delete($board);
|
||||
}
|
||||
|
||||
$timeLimit = time() - (60 * 5); // 5 min buffer
|
||||
$cards = $this->cardMapper->findToDelete($timeLimit, 500);
|
||||
foreach ($cards as $card) {
|
||||
$this->cardMapper->delete($card);
|
||||
}
|
||||
|
||||
$attachments = $this->attachmentMapper->findToDelete();
|
||||
foreach ($attachments as $attachment) {
|
||||
try {
|
||||
|
||||
@@ -110,4 +110,12 @@ class AclMapper extends DeckMapper implements IPermissionMapper {
|
||||
->andWhere($qb->expr()->eq('board_id', $qb->createNamedParameter($boardId, IQueryBuilder::PARAM_INT)));
|
||||
$qb->executeStatement();
|
||||
}
|
||||
|
||||
public function findByType(int $type): array {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('deck_board_acl')
|
||||
->where($qb->expr()->eq('type', $qb->createNamedParameter($type, IQueryBuilder::PARAM_INT)));
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,6 +177,17 @@ class CardMapper extends QBMapper implements IPermissionMapper {
|
||||
return $qb;
|
||||
}
|
||||
|
||||
public function findToDelete($timeLimit, $limit = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('id', 'title', 'owner', 'archived', 'deleted_at', 'last_modified')
|
||||
->from('deck_cards')
|
||||
->where($qb->expr()->gt('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
|
||||
->andWhere($qb->expr()->lt('deleted_at', $qb->createNamedParameter($timeLimit, IQueryBuilder::PARAM_INT)))
|
||||
->orderBy('deleted_at')
|
||||
->setMaxResults($limit);
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
|
||||
public function findDeleted($boardId, $limit = null, $offset = null) {
|
||||
$qb = $this->queryCardsByBoard($boardId);
|
||||
$qb->andWhere($qb->expr()->neq('c.deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
|
||||
|
||||
57
lib/Listeners/ParticipantCleanupListener.php
Normal file
57
lib/Listeners/ParticipantCleanupListener.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace OCA\Deck\Listeners;
|
||||
|
||||
use OCA\Circles\Events\CircleDestroyedEvent;
|
||||
use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\AclMapper;
|
||||
use OCA\Deck\Db\AssignmentMapper;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\Group\Events\GroupDeletedEvent;
|
||||
use OCP\User\Events\UserDeletedEvent;
|
||||
|
||||
class ParticipantCleanupListener implements IEventListener {
|
||||
private AclMapper $aclMapper;
|
||||
private AssignmentMapper $assignmentMapper;
|
||||
private BoardMapper $boardMapper;
|
||||
|
||||
public function __construct(AclMapper $aclMapper, AssignmentMapper $assignmentMapper, BoardMapper $boardMapper) {
|
||||
$this->aclMapper = $aclMapper;
|
||||
$this->assignmentMapper = $assignmentMapper;
|
||||
$this->boardMapper = $boardMapper;
|
||||
}
|
||||
|
||||
public function handle(Event $event): void {
|
||||
if ($event instanceof UserDeletedEvent) {
|
||||
$boards = $this->boardMapper->findAllByOwner($event->getUser()->getUID());
|
||||
foreach ($boards as $board) {
|
||||
$this->boardMapper->delete($board);
|
||||
}
|
||||
|
||||
$this->cleanupByParticipant(Acl::PERMISSION_TYPE_USER, $event->getUser()->getUID());
|
||||
}
|
||||
|
||||
if ($event instanceof GroupDeletedEvent) {
|
||||
$this->cleanupByParticipant(Acl::PERMISSION_TYPE_GROUP, $event->getGroup()->getGID());
|
||||
}
|
||||
|
||||
if ($event instanceof CircleDestroyedEvent) {
|
||||
$circleId = $event->getCircle()->getSingleId();
|
||||
$this->cleanupByParticipant(Acl::PERMISSION_TYPE_CIRCLE, $circleId);
|
||||
}
|
||||
}
|
||||
|
||||
private function cleanupByParticipant(int $type, string $participant): void {
|
||||
$acls = $this->aclMapper->findByParticipant($type, $participant);
|
||||
foreach ($acls as $acl) {
|
||||
$this->aclMapper->delete($acl);
|
||||
}
|
||||
|
||||
$assignments = $this->assignmentMapper->findByParticipant($participant, $type);
|
||||
foreach ($assignments as $assignment) {
|
||||
$this->assignmentMapper->delete($assignment);
|
||||
}
|
||||
}
|
||||
}
|
||||
42
lib/Listeners/ResourceListener.php
Normal file
42
lib/Listeners/ResourceListener.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace OCA\Deck\Listeners;
|
||||
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProvider;
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProviderCard;
|
||||
use OCA\Deck\Event\AclCreatedEvent;
|
||||
use OCA\Deck\Event\AclDeletedEvent;
|
||||
use OCP\Collaboration\Resources\IManager;
|
||||
use OCP\Collaboration\Resources\ResourceException;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
|
||||
class ResourceListener implements IEventListener {
|
||||
|
||||
/** @var IManager */
|
||||
private $resourceManager;
|
||||
/** @var ResourceProviderCard */
|
||||
private $resourceProviderCard;
|
||||
|
||||
public function __construct(IManager $resourceManager, ResourceProviderCard $resourceProviderCard) {
|
||||
$this->resourceManager = $resourceManager;
|
||||
$this->resourceProviderCard = $resourceProviderCard;
|
||||
}
|
||||
|
||||
public function handle(Event $event): void {
|
||||
if (!$event instanceof AclDeletedEvent && !$event instanceof AclCreatedEvent) {
|
||||
return;
|
||||
}
|
||||
|
||||
$boardId = $event->getAcl()->getBoardId();
|
||||
|
||||
$this->resourceManager->invalidateAccessCacheForProvider($this->resourceProviderCard);
|
||||
|
||||
try {
|
||||
$resource = $this->resourceManager->getResourceForUser(ResourceProvider::RESOURCE_TYPE, $boardId, null);
|
||||
$this->resourceManager->invalidateAccessCacheForResource($resource);
|
||||
} catch (ResourceException $e) {
|
||||
// If there is no resource we don't need to invalidate anything, but this should not happen anyways
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,6 @@ use OCP\AppFramework\OCS\OCSException;
|
||||
use OCP\AppFramework\OCSController;
|
||||
use OCP\ILogger;
|
||||
use OCP\IRequest;
|
||||
use OCP\Util;
|
||||
use OCP\IConfig;
|
||||
|
||||
class ExceptionMiddleware extends Middleware {
|
||||
@@ -85,9 +84,9 @@ class ExceptionMiddleware extends Middleware {
|
||||
'message' => 'Permission denied'
|
||||
], 403);
|
||||
}
|
||||
|
||||
|
||||
if ($exception instanceof StatusException) {
|
||||
if ($this->config->getSystemValue('loglevel', Util::WARN) === Util::DEBUG) {
|
||||
if ($this->config->getSystemValue('loglevel', ILogger::WARN) === ILogger::DEBUG) {
|
||||
$this->logger->logException($exception);
|
||||
}
|
||||
|
||||
|
||||
36
lib/Migration/DeletedCircleCleanup.php
Normal file
36
lib/Migration/DeletedCircleCleanup.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace OCA\Deck\Migration;
|
||||
|
||||
use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\AclMapper;
|
||||
use OCA\Deck\Service\CirclesService;
|
||||
use OCP\Migration\IOutput;
|
||||
use OCP\Migration\IRepairStep;
|
||||
|
||||
class DeletedCircleCleanup implements IRepairStep {
|
||||
private AclMapper $aclMapper;
|
||||
private CirclesService $circleService;
|
||||
|
||||
public function __construct(AclMapper $aclMapper, CirclesService $circlesService) {
|
||||
$this->aclMapper = $aclMapper;
|
||||
$this->circleService = $circlesService;
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Cleanup Deck ACL entries for circles which have been already deleted';
|
||||
}
|
||||
|
||||
public function run(IOutput $output) {
|
||||
if (!$this->circleService->isCirclesEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($this->aclMapper->findByType(Acl::PERMISSION_TYPE_CIRCLE) as $acl) {
|
||||
if ($this->circleService->getCircle($acl->getParticipant()) === null) {
|
||||
$this->aclMapper->delete($acl);
|
||||
$output->info('Removed circle with id ' . $acl->getParticipant());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -83,7 +83,7 @@ class CardReferenceProvider implements IReferenceProvider {
|
||||
$card = $this->sanitizeSerializedCard($card);
|
||||
$board = $this->sanitizeSerializedBoard($board);
|
||||
$stack = $this->sanitizeSerializedStack($stack);
|
||||
|
||||
/** @var IReference $reference */
|
||||
$reference = new Reference($referenceText);
|
||||
$reference->setRichObject(Application::APP_ID . '-card', [
|
||||
'id' => $boardId . '/' . $cardId,
|
||||
|
||||
@@ -60,6 +60,7 @@ class AttachmentService {
|
||||
private $activityManager;
|
||||
/** @var ChangeHelper */
|
||||
private $changeHelper;
|
||||
/** @var IUserManager */
|
||||
private IUserManager $userManager;
|
||||
/** @var AttachmentServiceValidator */
|
||||
private AttachmentServiceValidator $attachmentServiceValidator;
|
||||
@@ -71,6 +72,7 @@ class AttachmentService {
|
||||
ChangeHelper $changeHelper,
|
||||
PermissionService $permissionService,
|
||||
Application $application,
|
||||
ICacheFactory $cacheFactory,
|
||||
AttachmentCacheHelper $attachmentCacheHelper,
|
||||
$userId,
|
||||
IL10N $l10n,
|
||||
|
||||
@@ -42,6 +42,7 @@ use OCA\Deck\Event\AclUpdatedEvent;
|
||||
use OCA\Deck\NoPermissionException;
|
||||
use OCA\Deck\Notification\NotificationHelper;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
@@ -56,6 +57,8 @@ use OCA\Deck\BadRequestException;
|
||||
use OCA\Deck\Validators\BoardServiceValidator;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\Server;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
|
||||
class BoardService {
|
||||
private BoardMapper $boardMapper;
|
||||
@@ -523,12 +526,14 @@ class BoardService {
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws DbException
|
||||
* @throws DoesNotExistException
|
||||
* @throws \OCA\Deck\NoPermissionException
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||
* @throws BadRequestException
|
||||
* @throws NoPermissionException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function deleteAcl(int $id): bool {
|
||||
public function deleteAcl(int $id): ?Acl {
|
||||
$this->permissionService->checkPermission($this->aclMapper, $id, Acl::PERMISSION_SHARE);
|
||||
/** @var Acl $acl */
|
||||
$acl = $this->aclMapper->find($id);
|
||||
@@ -553,8 +558,10 @@ class BoardService {
|
||||
}
|
||||
}
|
||||
|
||||
$deletedAcl = $this->aclMapper->delete($acl);
|
||||
$this->eventDispatcher->dispatchTyped(new AclDeletedEvent($acl));
|
||||
return (bool) $this->aclMapper->delete($acl);
|
||||
|
||||
return $deletedAcl;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -71,6 +71,7 @@ class ConfigService {
|
||||
$data = [
|
||||
'calendar' => $this->isCalendarEnabled(),
|
||||
'cardDetailsInModal' => $this->isCardDetailsInModal(),
|
||||
'cardIdBadge' => $this->isCardIdBadgeEnabled()
|
||||
];
|
||||
if ($this->groupManager->isAdmin($this->getUserId())) {
|
||||
$data['groupLimit'] = $this->get('groupLimit');
|
||||
@@ -100,6 +101,11 @@ class ConfigService {
|
||||
return false;
|
||||
}
|
||||
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'cardDetailsInModal', true);
|
||||
case 'cardIdBadge':
|
||||
if ($this->getUserId() === null) {
|
||||
return false;
|
||||
}
|
||||
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'cardIdBadge', false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -131,6 +137,16 @@ class ConfigService {
|
||||
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'board:' . $boardId . ':cardDetailsInModal', $defaultState);
|
||||
}
|
||||
|
||||
public function isCardIdBadgeEnabled(): bool {
|
||||
if ($this->getUserId() === null) {
|
||||
return false;
|
||||
}
|
||||
$appConfigState = $this->config->getAppValue(Application::APP_ID, 'cardIdBadge', 'yes') === 'no';
|
||||
$defaultState = (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'cardIdBadge', $appConfigState);
|
||||
|
||||
return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'cardIdBadge', $defaultState);
|
||||
}
|
||||
|
||||
public function set($key, $value) {
|
||||
if ($this->getUserId() === null) {
|
||||
throw new NoPermissionException('Must be logged in to set user config');
|
||||
@@ -153,6 +169,10 @@ class ConfigService {
|
||||
$this->config->setUserValue($this->getUserId(), Application::APP_ID, 'cardDetailsInModal', (string)$value);
|
||||
$result = $value;
|
||||
break;
|
||||
case 'cardIdBadge':
|
||||
$this->config->setUserValue($this->getUserId(), Application::APP_ID, 'cardIdBadge', (string)$value);
|
||||
$result = $value;
|
||||
break;
|
||||
case 'board':
|
||||
[$boardId, $boardConfigKey] = explode(':', $key);
|
||||
if ($boardConfigKey === 'notify-due' && !in_array($value, [self::SETTING_BOARD_NOTIFICATION_DUE_ALL, self::SETTING_BOARD_NOTIFICATION_DUE_ASSIGNED, self::SETTING_BOARD_NOTIFICATION_DUE_OFF], true)) {
|
||||
|
||||
6934
package-lock.json
generated
6934
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
209
package.json
209
package.json
@@ -1,106 +1,105 @@
|
||||
{
|
||||
"name": "deck",
|
||||
"description": "",
|
||||
"version": "1.8.2",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Julius Härtl",
|
||||
"email": "jus@bitgrid.net",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Michael Weimann",
|
||||
"email": "mail@michael-weimann.eu",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"license": "agpl",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production webpack --progress --config webpack.js",
|
||||
"dev": "NODE_ENV=development webpack --progress --config webpack.js",
|
||||
"watch": "NODE_ENV=development webpack --progress --watch --config webpack.js",
|
||||
"lint": "eslint --ext .js,.vue src",
|
||||
"lint:fix": "eslint --ext .js,.vue src --fix",
|
||||
"stylelint": "stylelint src",
|
||||
"stylelint:fix": "stylelint src --fix",
|
||||
"test": "jest",
|
||||
"test:coverage": "jest --coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/runtime": "^7.19.0",
|
||||
"@juliushaertl/vue-richtext": "^1.0.1",
|
||||
"@nextcloud/auth": "^2.0.0",
|
||||
"@nextcloud/axios": "^2.0.0",
|
||||
"@nextcloud/dialogs": "^3.2.0",
|
||||
"@nextcloud/event-bus": "^3.0.2",
|
||||
"@nextcloud/files": "^2.1.0",
|
||||
"@nextcloud/initial-state": "^2.0.0",
|
||||
"@nextcloud/l10n": "^1.6.0",
|
||||
"@nextcloud/moment": "^1.2.1",
|
||||
"@nextcloud/router": "^2.0.0",
|
||||
"@nextcloud/vue": "^7.0.0-beta.4",
|
||||
"@nextcloud/vue-dashboard": "^2.0.1",
|
||||
"@nextcloud/vue-richtext": "^2.0.1",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"dompurify": "^2.4.0",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
"markdown-it-task-checkbox": "^1.0.6",
|
||||
"moment": "^2.29.4",
|
||||
"nextcloud-vue-collections": "^0.10.0",
|
||||
"p-queue": "^7.3.0",
|
||||
"url-search-params-polyfill": "^8.1.1",
|
||||
"vue": "^2.7.9",
|
||||
"vue-at": "^2.5.0",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-easymde": "^2.0.0",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-material-design-icons": "^5.1.2",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue-smooth-dnd": "^0.8.1",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-router-sync": "^5.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^16.0.0",
|
||||
"npm": "^7.0.0 || ^8.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.0.0",
|
||||
"@nextcloud/browserslist-config": "^2.3.0",
|
||||
"@nextcloud/eslint-config": "^8.0.0",
|
||||
"@nextcloud/stylelint-config": "^2.2.0",
|
||||
"@nextcloud/webpack-vue-config": "^5.3.0",
|
||||
"@relative-ci/agent": "^4.1.0",
|
||||
"@vue/test-utils": "^1.3.0",
|
||||
"cypress": "^10.8.0",
|
||||
"eslint-webpack-plugin": "^3.2.0",
|
||||
"jest": "^29.0.1",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"stylelint-webpack-plugin": "^3.3.0",
|
||||
"vue-jest": "^3.0.7",
|
||||
"vue-template-compiler": "^2.7.9"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
"js",
|
||||
"vue"
|
||||
],
|
||||
"moduleNameMapper": {
|
||||
"^@/(.*)$": "<rootDir>/src/$1"
|
||||
},
|
||||
"transform": {
|
||||
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
|
||||
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
|
||||
},
|
||||
"snapshotSerializers": [
|
||||
"<rootDir>/node_modules/jest-serializer-vue"
|
||||
]
|
||||
}
|
||||
}
|
||||
"name": "deck",
|
||||
"description": "",
|
||||
"version": "1.9.0-beta.1",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Julius Härtl",
|
||||
"email": "jus@bitgrid.net",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Michael Weimann",
|
||||
"email": "mail@michael-weimann.eu",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"license": "agpl",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production webpack --progress --config webpack.js",
|
||||
"dev": "NODE_ENV=development webpack --progress --config webpack.js",
|
||||
"watch": "NODE_ENV=development webpack --progress --watch --config webpack.js",
|
||||
"lint": "eslint --ext .js,.vue src",
|
||||
"lint:fix": "eslint --ext .js,.vue src --fix",
|
||||
"stylelint": "stylelint src",
|
||||
"stylelint:fix": "stylelint src --fix",
|
||||
"test": "jest",
|
||||
"test:coverage": "jest --coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/runtime": "^7.20.6",
|
||||
"@nextcloud/auth": "^2.0.0",
|
||||
"@nextcloud/axios": "^2.3.0",
|
||||
"@nextcloud/dialogs": "^3.2.0",
|
||||
"@nextcloud/event-bus": "^3.0.2",
|
||||
"@nextcloud/files": "^2.1.0",
|
||||
"@nextcloud/initial-state": "^2.0.0",
|
||||
"@nextcloud/l10n": "^1.6.0",
|
||||
"@nextcloud/moment": "^1.2.1",
|
||||
"@nextcloud/router": "^2.0.0",
|
||||
"@nextcloud/vue": "^7.2.0",
|
||||
"@nextcloud/vue-dashboard": "^2.0.1",
|
||||
"@nextcloud/vue-richtext": "^2.0.4",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"dompurify": "^2.4.1",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
"markdown-it-task-checkbox": "^1.0.6",
|
||||
"moment": "^2.29.4",
|
||||
"nextcloud-vue-collections": "^0.10.0",
|
||||
"p-queue": "^7.3.0",
|
||||
"url-search-params-polyfill": "^8.1.1",
|
||||
"vue": "^2.7.14",
|
||||
"vue-at": "^2.5.1",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-easymde": "^2.0.0",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-material-design-icons": "^5.1.2",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue-smooth-dnd": "^0.8.1",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-router-sync": "^5.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^16.0.0",
|
||||
"npm": "^7.0.0 || ^8.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.0.0",
|
||||
"@nextcloud/browserslist-config": "^2.3.0",
|
||||
"@nextcloud/eslint-config": "^8.1.4",
|
||||
"@nextcloud/stylelint-config": "^2.3.0",
|
||||
"@nextcloud/webpack-vue-config": "^5.4.0",
|
||||
"@relative-ci/agent": "^4.1.3",
|
||||
"@vue/test-utils": "^1.3.3",
|
||||
"cypress": "^12.1.0",
|
||||
"eslint-webpack-plugin": "^3.2.0",
|
||||
"jest": "^29.3.1",
|
||||
"jest-serializer-vue": "^3.1.0",
|
||||
"stylelint-webpack-plugin": "^3.3.0",
|
||||
"vue-jest": "^3.0.7",
|
||||
"vue-template-compiler": "^2.7.14"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
"js",
|
||||
"vue"
|
||||
],
|
||||
"moduleNameMapper": {
|
||||
"^@/(.*)$": "<rootDir>/src/$1"
|
||||
},
|
||||
"transform": {
|
||||
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
|
||||
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
|
||||
},
|
||||
"snapshotSerializers": [
|
||||
"<rootDir>/node_modules/jest-serializer-vue"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,14 +237,14 @@ export default {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.card-selector::v-deep .modal-container {
|
||||
.card-selector:deep(.modal-container) {
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
.empty-content {
|
||||
margin-top: 5vh !important;
|
||||
|
||||
&::v-deep h2 {
|
||||
&:deep(h2) {
|
||||
margin-bottom: 5vh;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,7 +169,7 @@ export default {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.card-selector::v-deep .modal-container {
|
||||
.card-selector:deep(.modal-container) {
|
||||
overflow: visible !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import RichText from '@juliushaertl/vue-richtext'
|
||||
import { RichText } from '@nextcloud/vue-richtext'
|
||||
import { NcUserBubble } from '@nextcloud/vue'
|
||||
import moment from '@nextcloud/moment'
|
||||
import DOMPurify from 'dompurify'
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
-->
|
||||
|
||||
<template>
|
||||
<router-view v-if="visible" name="sidebar" />
|
||||
<router-view v-if="visible" v-click-outside="onClickOutside" name="sidebar" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@@ -37,6 +37,12 @@ export default {
|
||||
closeSidebar() {
|
||||
this.$router.push({ name: 'board' })
|
||||
},
|
||||
onClickOutside(e) {
|
||||
if (Array.from(document.querySelectorAll('.card')).some(node => node.contains(e.target))) {
|
||||
return
|
||||
}
|
||||
this.closeSidebar()
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -53,9 +53,11 @@
|
||||
<Container lock-axix="y"
|
||||
orientation="horizontal"
|
||||
:drag-handle-selector="dragHandleSelector"
|
||||
@drag-start="draggingStack = true"
|
||||
@drag-end="draggingStack = false"
|
||||
@drop="onDropStack">
|
||||
<Draggable v-for="stack in stacksByBoard" :key="stack.id">
|
||||
<Stack :stack="stack" />
|
||||
<Stack :stack="stack" :dragging="draggingStack" />
|
||||
</Draggable>
|
||||
</Container>
|
||||
</div>
|
||||
@@ -100,6 +102,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
draggingStack: false,
|
||||
loading: true,
|
||||
newStackTitle: '',
|
||||
}
|
||||
@@ -117,7 +120,7 @@ export default {
|
||||
return this.$store.getters.stacksByBoard(this.board.id)
|
||||
},
|
||||
dragHandleSelector() {
|
||||
return this.canEdit ? null : '.no-drag'
|
||||
return this.canEdit ? '.stack__title' : '.no-drag'
|
||||
},
|
||||
isEmpty() {
|
||||
return this.stacksByBoard.length === 0
|
||||
@@ -206,7 +209,7 @@ export default {
|
||||
align-items: stretch;
|
||||
height: 100%;
|
||||
|
||||
.smooth-dnd-draggable-wrapper::v-deep {
|
||||
&:deep(.smooth-dnd-draggable-wrapper) {
|
||||
display: flex;
|
||||
height: auto;
|
||||
|
||||
|
||||
@@ -86,8 +86,6 @@ export default {
|
||||
|
||||
li {
|
||||
display: flex;
|
||||
height: 44px;
|
||||
|
||||
&:hover, &:active, &.focus {
|
||||
button {
|
||||
opacity: 1;
|
||||
@@ -106,7 +104,10 @@ export default {
|
||||
.title {
|
||||
flex-grow: 2;
|
||||
padding: 3px 0px;
|
||||
|
||||
> span:not(.timestamp) {
|
||||
line-height: 1.2em;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.timestamp {
|
||||
font-size: 0.9em;
|
||||
color: var(--color-text-lighter);
|
||||
|
||||
@@ -45,15 +45,15 @@
|
||||
{{ t('deck', 'Can edit') }}
|
||||
</NcActionCheckbox>
|
||||
<NcActions v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0)" :force-menu="true">
|
||||
<ActionCheckbox v-if="canManage || canShare" :checked="acl.permissionShare" @change="clickShareAcl(acl)">
|
||||
<NcActionCheckbox v-if="canManage || canShare" :checked="acl.permissionShare" @change="clickShareAcl(acl)">
|
||||
{{ t('deck', 'Can share') }}
|
||||
</ActionCheckbox>
|
||||
<ActionCheckbox v-if="canManage" :checked="acl.permissionManage" @change="clickManageAcl(acl)">
|
||||
</NcActionCheckbox>
|
||||
<NcActionCheckbox v-if="canManage" :checked="acl.permissionManage" @change="clickManageAcl(acl)">
|
||||
{{ t('deck', 'Can manage') }}
|
||||
</ActionCheckbox>
|
||||
<ActionCheckbox v-if="acl.type === 0 && isCurrentUser(board.owner.uid)" :checked="acl.owner" @change="clickTransferOwner(acl.participant.uid)">
|
||||
</NcActionCheckbox>
|
||||
<NcActionCheckbox v-if="acl.type === 0 && isCurrentUser(board.owner.uid)" :checked="acl.owner" @change="clickTransferOwner(acl.participant.uid)">
|
||||
{{ t('deck', 'Owner') }}
|
||||
</ActionCheckbox>
|
||||
</NcActionCheckbox>
|
||||
<NcActionButton v-if="canManage" icon="icon-delete" @click="clickDeleteAcl(acl)">
|
||||
{{ t('deck', 'Delete') }}
|
||||
</NcActionButton>
|
||||
@@ -79,7 +79,7 @@ import { mapGetters, mapState } from 'vuex'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { showError, showSuccess } from '@nextcloud/dialogs'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import debounce from 'lodash/debounce'
|
||||
import debounce from 'lodash/debounce.js'
|
||||
|
||||
export default {
|
||||
name: 'SharingTabSidebar',
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<div class="stack">
|
||||
<div v-click-outside="stopCardCreation"
|
||||
class="stack__header"
|
||||
:class="{'stack__header--add': showAddCard }"
|
||||
:class="{'stack__header--add': showAddCard}"
|
||||
tabindex="0"
|
||||
:aria-label="stack.title">
|
||||
<transition name="fade" mode="out-in">
|
||||
@@ -41,7 +41,10 @@
|
||||
@keydown.enter="startEditing(stack)">
|
||||
{{ stack.title }}
|
||||
</h3>
|
||||
<form v-else @submit.prevent="finishedEdit(stack)">
|
||||
<form v-else-if="editing"
|
||||
v-click-outside="cancelEdit"
|
||||
@submit.prevent="finishedEdit(stack)"
|
||||
@keyup.esc="cancelEdit">
|
||||
<input v-model="copiedStack.title"
|
||||
v-focus
|
||||
type="text"
|
||||
@@ -53,12 +56,18 @@
|
||||
</form>
|
||||
</transition>
|
||||
<NcActions v-if="canManage && !isArchived" :force-menu="true">
|
||||
<NcActionButton @click="modalArchivAllCardsShow=true">
|
||||
<NcActionButton v-if="!showArchived" icon="icon-archive" @click="modalArchivAllCardsShow=true">
|
||||
<template #icon>
|
||||
<ArchiveIcon decorative />
|
||||
</template>
|
||||
{{ t('deck', 'Archive all cards') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton v-if="showArchived" @click="modalArchivAllCardsShow=true">
|
||||
<template #icon>
|
||||
<ArchiveIcon decorative />
|
||||
</template>
|
||||
{{ t('deck', 'Unarchive all cards') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton icon="icon-delete" @click="deleteStack(stack)">
|
||||
{{ t('deck', 'Delete list') }}
|
||||
</NcActionButton>
|
||||
@@ -72,11 +81,20 @@
|
||||
|
||||
<NcModal v-if="modalArchivAllCardsShow" @close="modalArchivAllCardsShow=false">
|
||||
<div class="modal__content">
|
||||
<h3>{{ t('deck', 'Archive all cards in this list') }}</h3>
|
||||
<h3 v-if="!showArchived">
|
||||
{{ t('deck', 'Archive all cards in this list') }}
|
||||
</h3>
|
||||
<h3 v-else>
|
||||
{{ t('deck', 'Unarchive all cards in this list') }}
|
||||
</h3>
|
||||
|
||||
<progress :value="stackTransfer.current" :max="stackTransfer.total" />
|
||||
<button class="primary" @click="archiveAllCardsFromStack(stack)">
|
||||
<button v-if="!showArchived" class="primary" @click="setArchivedToAllCardsFromStack(stack, !showArchived)">
|
||||
{{ t('deck', 'Archive all cards') }}
|
||||
</button>
|
||||
<button v-else class="primary" @click="setArchivedToAllCardsFromStack(stack, !showArchived)">
|
||||
{{ t('deck', 'Unarchive all cards') }}
|
||||
</button>
|
||||
<button @click="modalArchivAllCardsShow=false">
|
||||
{{ t('deck', 'Cancel') }}
|
||||
</button>
|
||||
@@ -127,7 +145,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import ClickOutside from 'vue-click-outside'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import { Container, Draggable } from 'vue-smooth-dnd'
|
||||
|
||||
@@ -149,8 +167,14 @@ export default {
|
||||
NcModal,
|
||||
ArchiveIcon,
|
||||
},
|
||||
|
||||
directives: {
|
||||
ClickOutside,
|
||||
},
|
||||
props: {
|
||||
dragging: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
stack: {
|
||||
type: Object,
|
||||
default: undefined,
|
||||
@@ -240,16 +264,20 @@ export default {
|
||||
this.$store.dispatch('deleteStack', stack)
|
||||
showUndo(t('deck', 'List deleted'), () => this.$store.dispatch('stackUndoDelete', stack))
|
||||
},
|
||||
archiveAllCardsFromStack(stack) {
|
||||
setArchivedToAllCardsFromStack(stack, isArchived) {
|
||||
|
||||
this.stackTransfer.total = this.cardsByStack.length
|
||||
this.cardsByStack.forEach((card, index) => {
|
||||
this.stackTransfer.current = index
|
||||
this.$store.dispatch('archiveUnarchiveCard', { ...card, archived: true })
|
||||
this.$store.dispatch('archiveUnarchiveCard', { ...card, archived: isArchived })
|
||||
})
|
||||
this.modalArchivAllCardsShow = false
|
||||
},
|
||||
startEditing(stack) {
|
||||
if (this.dragging) {
|
||||
return
|
||||
}
|
||||
|
||||
this.copiedStack = Object.assign({}, stack)
|
||||
this.editing = true
|
||||
},
|
||||
@@ -259,6 +287,9 @@ export default {
|
||||
}
|
||||
this.editing = false
|
||||
},
|
||||
cancelEdit() {
|
||||
this.editing = false
|
||||
},
|
||||
async clickAddCard() {
|
||||
this.stateCardCreating = true
|
||||
try {
|
||||
@@ -359,7 +390,7 @@ export default {
|
||||
margin: 6px;
|
||||
padding: 4px 4px;
|
||||
|
||||
&:focus {
|
||||
&:focus-visible {
|
||||
outline: 2px solid var(--color-border-dark);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ export default {
|
||||
}
|
||||
|
||||
.color-picker-wrapper {
|
||||
&, &::v-deep > .trigger {
|
||||
&, &:deep > .trigger {
|
||||
width: $clickable-area;
|
||||
padding: 3px;
|
||||
display: flex;
|
||||
|
||||
@@ -208,53 +208,54 @@ export default {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
section.app-sidebar__tab--active {
|
||||
min-height: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
section.app-sidebar__tab--active {
|
||||
min-height: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
// FIXME: Obivously we should at some point not randomly reuse the sidebar component
|
||||
// since this is not oficially supported
|
||||
.modal__card .app-sidebar {
|
||||
$modal-padding: 14px;
|
||||
border: 0;
|
||||
min-width: calc(100% - #{$modal-padding * 2});
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
max-width: calc(100% - #{$modal-padding * 2});
|
||||
padding: 0 14px;
|
||||
max-height: 100%;
|
||||
overflow: initial;
|
||||
user-select: text;
|
||||
-webkit-user-select: text;
|
||||
// FIXME: Obivously we should at some point not randomly reuse the sidebar component
|
||||
// since this is not oficially supported
|
||||
.modal__card .app-sidebar {
|
||||
$modal-padding: 14px;
|
||||
border: 0;
|
||||
min-width: calc(100% - #{$modal-padding * 2});
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
max-width: calc(100% - #{$modal-padding * 2});
|
||||
padding: 0 14px;
|
||||
max-height: 100%;
|
||||
overflow: initial;
|
||||
user-select: text;
|
||||
-webkit-user-select: text;
|
||||
|
||||
&::v-deep {
|
||||
.app-sidebar-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
background-color: var(--color-main-background);
|
||||
}
|
||||
.app-sidebar-tabs__nav {
|
||||
position: sticky;
|
||||
top: 87px;
|
||||
margin: 0;
|
||||
z-index: 100;
|
||||
background-color: var(--color-main-background);
|
||||
}
|
||||
// FIXME: test
|
||||
&:deep {
|
||||
.app-sidebar-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
background-color: var(--color-main-background);
|
||||
}
|
||||
.app-sidebar-tabs__nav {
|
||||
position: sticky;
|
||||
top: 87px;
|
||||
margin: 0;
|
||||
z-index: 100;
|
||||
background-color: var(--color-main-background);
|
||||
}
|
||||
|
||||
.app-sidebar__tab {
|
||||
overflow: initial;
|
||||
}
|
||||
.app-sidebar__tab {
|
||||
overflow: initial;
|
||||
}
|
||||
|
||||
#emptycontent, .emptycontent {
|
||||
margin-top: 88px;
|
||||
}
|
||||
#emptycontent, .emptycontent {
|
||||
margin-top: 88px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -368,11 +368,11 @@ export default {
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
.section-wrapper::v-deep .mx-datepicker-main.mx-datepicker-popup {
|
||||
.section-wrapper:deep(.mx-datepicker-main.mx-datepicker-popup) {
|
||||
left: 0 !important;
|
||||
}
|
||||
|
||||
.section-wrapper::v-deep .mx-datepicker-main.mx-datepicker-popup.mx-datepicker-sidebar {
|
||||
.section-wrapper:deep(.mx-datepicker-main.mx-datepicker-popup.mx-datepicker-sidebar) {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
@@ -413,7 +413,7 @@ export default {
|
||||
padding: 6px
|
||||
}
|
||||
|
||||
.section-details::v-deep .multiselect__tags-wrap {
|
||||
.section-details:deep(.multiselect__tags-wrap) {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
@@ -430,11 +430,11 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
.multiselect::v-deep .multiselect__tags-wrap {
|
||||
.multiselect:deep(.multiselect__tags-wrap) {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.multiselect.multiselect--active::v-deep .multiselect__tags-wrap {
|
||||
.multiselect.multiselect--active:deep(.multiselect__tags-wrap) {
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -186,13 +186,13 @@ export default {
|
||||
& > div[contenteditable] {
|
||||
width: 100%;
|
||||
|
||||
&::v-deep > span > div {
|
||||
&:deep > span > div {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.comment-form::v-deep .atwho-li {
|
||||
.comment-form:deep(.atwho-li) {
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
|
||||
@@ -65,12 +65,12 @@
|
||||
|
||||
<script>
|
||||
import { NcAvatar, NcActions, NcActionButton, NcUserBubble } from '@nextcloud/vue'
|
||||
import RichText from '@juliushaertl/vue-richtext'
|
||||
import { RichText } from '@nextcloud/vue-richtext'
|
||||
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'
|
||||
import ReplyIcon from 'vue-material-design-icons/Reply.vue'
|
||||
|
||||
const AtMention = {
|
||||
name: 'AtMention',
|
||||
@@ -222,7 +222,7 @@ export default {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
&::v-deep .rich-text--wrapper {
|
||||
&:deep(.rich-text--wrapper) {
|
||||
margin-top: -3px;
|
||||
color: var(--color-text-lighter);
|
||||
}
|
||||
@@ -241,7 +241,7 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
.comment--content::v-deep {
|
||||
.comment--content:deep {
|
||||
a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
ref="markdownEditor"
|
||||
v-model="description"
|
||||
:configs="mdeConfig"
|
||||
@initialized="addKeyListeners"
|
||||
@update:modelValue="updateDescription"
|
||||
@blur="saveDescription" />
|
||||
|
||||
@@ -83,7 +84,7 @@ import { NcActions, NcActionButton, NcModal } from '@nextcloud/vue'
|
||||
import { formatFileSize } from '@nextcloud/files'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import PaperclipIcon from 'vue-material-design-icons/Paperclip'
|
||||
import PaperclipIcon from 'vue-material-design-icons/Paperclip.vue'
|
||||
|
||||
const markdownIt = new MarkdownIt({
|
||||
linkify: true,
|
||||
@@ -100,7 +101,7 @@ markdownIt.use(MarkdownItLinkAttributes, {
|
||||
export default {
|
||||
name: 'Description',
|
||||
components: {
|
||||
VueEasymde: () => import('vue-easymde/dist/VueEasyMDE.common'),
|
||||
VueEasymde: () => import('vue-easymde/dist/VueEasyMDE.common.js'),
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
NcModal,
|
||||
@@ -115,6 +116,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
keyExitState: 0,
|
||||
description: '',
|
||||
markdownIt: null,
|
||||
descriptionEditing: false,
|
||||
@@ -174,14 +176,37 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
addKeyListeners() {
|
||||
this.$refs.markdownEditor.easymde.codemirror.on('keydown', (a, b) => {
|
||||
|
||||
if (this.keyExitState === 0 && (b.key === 'Meta' || b.key === 'Alt')) {
|
||||
this.keyExitState = 1
|
||||
}
|
||||
if (this.keyExitState === 1 && b.key === 'Enter') {
|
||||
this.keyExitState = 0
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keydown', undefined)
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keyup', undefined)
|
||||
this.hideEditor()
|
||||
}
|
||||
})
|
||||
this.$refs.markdownEditor.easymde.codemirror.on('keyup', (a, b) => {
|
||||
if (b.key === 'Meta' || b.key === 'Control') {
|
||||
this.keyExitState = 0
|
||||
}
|
||||
|
||||
})
|
||||
},
|
||||
showEditor() {
|
||||
if (!this.canEdit) {
|
||||
return
|
||||
}
|
||||
this.descriptionEditing = true
|
||||
this.description = this.card.description
|
||||
|
||||
},
|
||||
hideEditor() {
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keydown', undefined)
|
||||
this.$refs.markdownEditor.easymde.codemirror.off('keyup', undefined)
|
||||
this.descriptionEditing = false
|
||||
},
|
||||
showAttachmentModal() {
|
||||
@@ -252,7 +277,7 @@ export default {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&::v-deep .attachment-list {
|
||||
&:deep(.attachment-list) {
|
||||
flex-shrink: 1;
|
||||
}
|
||||
}
|
||||
@@ -267,16 +292,16 @@ export default {
|
||||
width: auto;
|
||||
overflow-x: auto;
|
||||
|
||||
&::v-deep {
|
||||
&:deep {
|
||||
/* stylelint-disable-next-line no-invalid-position-at-import-rule */
|
||||
@import './../../css/markdown';
|
||||
}
|
||||
|
||||
&::v-deep input {
|
||||
&:deep(input) {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
&::v-deep a {
|
||||
&:deep(a) {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ export default {
|
||||
margin-top: 5px;
|
||||
position: relative;
|
||||
flex-grow: 1;
|
||||
::v-deep .popovermenu {
|
||||
:deep(.popovermenu) {
|
||||
margin-right: -4px;
|
||||
img {
|
||||
padding: 0;
|
||||
@@ -174,7 +174,7 @@ export default {
|
||||
padding-right: $avatar-offset;
|
||||
flex-direction: row-reverse;
|
||||
.avatardiv,
|
||||
::v-deep .avatardiv {
|
||||
:deep(.avatardiv) {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
box-sizing: content-box !important;
|
||||
@@ -189,7 +189,7 @@ export default {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
&:hover div:nth-child(n+2) ::v-deep .avatardiv {
|
||||
&:hover div:nth-child(n+2) :deep(.avatardiv) {
|
||||
margin-right: 1px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
<template>
|
||||
<div v-if="card" class="badges">
|
||||
<CardId v-if="idBadge" class="icon-badge" :card="card" />
|
||||
<div v-if="card.commentsCount > 0"
|
||||
v-tooltip="commentsHint"
|
||||
class="icon-badge"
|
||||
@@ -50,6 +51,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import NcAvatarList from './AvatarList.vue'
|
||||
import CardId from './badges/CardId.vue'
|
||||
import CardMenu from './CardMenu.vue'
|
||||
import TextIcon from 'vue-material-design-icons/Text.vue'
|
||||
import AttachmentIcon from 'vue-material-design-icons/Paperclip.vue'
|
||||
@@ -59,7 +61,7 @@ import CommentUnreadIcon from 'vue-material-design-icons/CommentAccount.vue'
|
||||
|
||||
export default {
|
||||
name: 'CardBadges',
|
||||
components: { NcAvatarList, CardMenu, TextIcon, AttachmentIcon, CheckmarkIcon, CommentIcon, CommentUnreadIcon },
|
||||
components: { NcAvatarList, CardMenu, TextIcon, AttachmentIcon, CheckmarkIcon, CommentIcon, CommentUnreadIcon, CardId },
|
||||
props: {
|
||||
card: {
|
||||
type: Object,
|
||||
@@ -82,6 +84,9 @@ export default {
|
||||
}
|
||||
return null
|
||||
},
|
||||
idBadge() {
|
||||
return this.$store.getters.config('cardIdBadge')
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
openComments() {
|
||||
@@ -103,7 +108,8 @@ export default {
|
||||
display: flex;
|
||||
margin-right: 2px;
|
||||
|
||||
span {
|
||||
span,
|
||||
&:deep(span) {
|
||||
padding: 10px 2px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@
|
||||
<span @click.stop="applyLabelFilter(label)">{{ label.title }}</span>
|
||||
</li>
|
||||
</transition-group>
|
||||
|
||||
<div v-show="!compactMode" class="card-controls compact-item" @click="openCard">
|
||||
<CardBadges :card="card" />
|
||||
</div>
|
||||
@@ -207,7 +208,7 @@ export default {
|
||||
background-color: var(--color-main-background);
|
||||
margin-bottom: $card-spacing;
|
||||
|
||||
&::v-deep * {
|
||||
&:deep(*) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
@@ -94,8 +94,8 @@ import { generateUrl } from '@nextcloud/router'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { showUndo } from '@nextcloud/dialogs'
|
||||
import '@nextcloud/dialogs/styles/toast.scss'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive'
|
||||
import CardBulletedIcon from 'vue-material-design-icons/CardBulleted'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import CardBulletedIcon from 'vue-material-design-icons/CardBulleted.vue'
|
||||
|
||||
export default {
|
||||
name: 'CardMenu',
|
||||
|
||||
46
src/components/cards/badges/CardId.vue
Normal file
46
src/components/cards/badges/CardId.vue
Normal file
@@ -0,0 +1,46 @@
|
||||
<!--
|
||||
- @copyright Copyright (c) 2022 Adrian Missy <adrian.missy@onewavestudios.com>
|
||||
-
|
||||
- @author Adrian Missy <adrian.missy@onewavestudios.com>
|
||||
-
|
||||
- @license GNU AGPL version 3 or any later version
|
||||
-
|
||||
- This program is free software: you can redistribute it and/or modify
|
||||
- it under the terms of the GNU Affero General Public License as
|
||||
- published by the Free Software Foundation, either version 3 of the
|
||||
- License, or (at your option) any later version.
|
||||
-
|
||||
- This program is distributed in the hope that it will be useful,
|
||||
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- GNU Affero General Public License for more details.
|
||||
-
|
||||
- You should have received a copy of the GNU Affero General Public License
|
||||
- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div v-if="card" class="cardid">
|
||||
<span>#{{ card.id }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'CardId',
|
||||
props: {
|
||||
card: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.cardid {
|
||||
font-size: .9em;
|
||||
}
|
||||
</style>
|
||||
@@ -72,6 +72,16 @@
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input id="toggle-idbadge"
|
||||
v-model="cardIdBadge"
|
||||
type="checkbox"
|
||||
class="checkbox">
|
||||
<label for="toggle-idbadge">
|
||||
{{ t('deck', 'Show card ID badge') }}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input id="toggle-calendar"
|
||||
v-model="configCalendar"
|
||||
@@ -168,6 +178,14 @@ export default {
|
||||
this.$store.dispatch('setConfig', { cardDetailsInModal: newValue })
|
||||
},
|
||||
},
|
||||
cardIdBadge: {
|
||||
get() {
|
||||
return this.$store.getters.config('cardIdBadge')
|
||||
},
|
||||
set(newValue) {
|
||||
this.$store.dispatch('setConfig', { cardIdBadge: newValue })
|
||||
},
|
||||
},
|
||||
configCalendar: {
|
||||
get() {
|
||||
return this.$store.getters.config('calendar')
|
||||
|
||||
@@ -140,8 +140,8 @@
|
||||
<script>
|
||||
import { NcAppNavigationIconBullet, NcAppNavigationCounter, NcAppNavigationItem, NcColorPicker, NcActions, NcActionButton } from '@nextcloud/vue'
|
||||
import ClickOutside from 'vue-click-outside'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive'
|
||||
import CloneIcon from 'vue-material-design-icons/ContentDuplicate'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import CloneIcon from 'vue-material-design-icons/ContentDuplicate.vue'
|
||||
|
||||
export default {
|
||||
name: 'AppNavigationBoard',
|
||||
|
||||
@@ -57,7 +57,7 @@ import { mapState } from 'vuex'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import InfiniteLoading from 'vue-infinite-loading'
|
||||
import RichText from '@juliushaertl/vue-richtext'
|
||||
import { RichText } from '@nextcloud/vue-richtext'
|
||||
import Placeholder from './Placeholder.vue'
|
||||
import { NcActions, NcActionButton } from '@nextcloud/vue'
|
||||
|
||||
@@ -207,7 +207,7 @@ export default {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
h2::v-deep span {
|
||||
h2:deep(span) {
|
||||
background-color: var(--color-background-dark);
|
||||
padding: 3px;
|
||||
border-radius: var(--border-radius);
|
||||
@@ -221,7 +221,7 @@ export default {
|
||||
flex-grow: 0;
|
||||
}
|
||||
}
|
||||
&::v-deep .card {
|
||||
&:deep(.card) {
|
||||
width: $stack-width;
|
||||
margin-right: $stack-spacing;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
flex-grow: 1;
|
||||
position: relative;
|
||||
|
||||
.editor__content::v-deep {
|
||||
.editor__content:deep {
|
||||
flex-grow: 1;
|
||||
margin-left: 44px;
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
*/
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { formatFileSize } from '@nextcloud/files'
|
||||
// eslint-disable-next-line import/no-unresolved, node/no-missing-import
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
import PQueue from 'p-queue'
|
||||
|
||||
const queue = new PQueue({ concurrency: 2 })
|
||||
|
||||
@@ -183,7 +183,7 @@ export default {
|
||||
}) !== -1
|
||||
} else {
|
||||
hasMatch = hasMatch && (card.title.toLowerCase().includes(filterOutQuotes(match).toLowerCase())
|
||||
|| card.description.toLowerCase().includes(filterOutQuotes(match).toLowerCase()))
|
||||
|| card.description.toLowerCase().includes(filterOutQuotes(match).toLowerCase()) || card.id === parseInt(filterOutQuotes(match)))
|
||||
}
|
||||
if (!hasMatch) {
|
||||
return false
|
||||
|
||||
@@ -97,7 +97,7 @@ export default {
|
||||
list.sort((a, b) => {
|
||||
return (new Date(a.duedate)).getTime() - (new Date(b.duedate)).getTime()
|
||||
})
|
||||
return list.slice(0, 6)
|
||||
return list.slice(0, 5)
|
||||
},
|
||||
cardLink() {
|
||||
return (card) => {
|
||||
@@ -129,7 +129,7 @@ export default {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-top: 8px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#deck-widget-empty-content {
|
||||
@@ -140,9 +140,8 @@ export default {
|
||||
.card {
|
||||
display: block;
|
||||
border-radius: var(--border-radius-large);
|
||||
padding: 8px;
|
||||
height: 60px;
|
||||
|
||||
padding: 5px 8px;
|
||||
height: 70px;
|
||||
&:hover {
|
||||
background-color: var(--color-background-hover);
|
||||
}
|
||||
@@ -155,14 +154,17 @@ export default {
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
display: block;
|
||||
position: relative;
|
||||
top: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.labels {
|
||||
margin-left: 0;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.duedate::v-deep {
|
||||
.duedate:deep {
|
||||
.due {
|
||||
margin: 0 0 0 10px;
|
||||
padding: 2px 4px;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~9",
|
||||
"behat/behat": "~3.11.0",
|
||||
"guzzlehttp/guzzle": "7.4.5",
|
||||
"behat/behat": "~3.12.0",
|
||||
"guzzlehttp/guzzle": "7.5.0",
|
||||
"jarnaiz/behat-junit-formatter": "^1.3",
|
||||
"sabre/dav": "4.4.0",
|
||||
"symfony/event-dispatcher": "~5.4"
|
||||
|
||||
@@ -20,7 +20,6 @@ else
|
||||
fi
|
||||
|
||||
composer install
|
||||
composer dump-autoload
|
||||
|
||||
# avoid port collision on jenkins - use $EXECUTOR_NUMBER
|
||||
if [ -z "$EXECUTOR_NUMBER" ]; then
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="4.27.0@faf106e717c37b8c81721845dba9de3d8deed8ff">
|
||||
<files psalm-version="4.29.0@7ec5ffbd5f68ae03782d7fd33fff0c45a69f95b3">
|
||||
<file src="lib/Activity/ActivityManager.php">
|
||||
<TypeDoesNotContainType occurrences="1">
|
||||
<code>$message !== null</code>
|
||||
@@ -116,12 +116,6 @@
|
||||
<code>$schemaClosure</code>
|
||||
</MoreSpecificImplementedParamType>
|
||||
</file>
|
||||
<file src="lib/Service/AssignmentService.php">
|
||||
<InvalidScalarArgument occurrences="2">
|
||||
<code>$cardId</code>
|
||||
<code>$cardId</code>
|
||||
</InvalidScalarArgument>
|
||||
</file>
|
||||
<file src="lib/Service/AttachmentService.php">
|
||||
<InvalidCatch occurrences="1"/>
|
||||
</file>
|
||||
@@ -142,11 +136,6 @@
|
||||
<code>is_resource($content)</code>
|
||||
</RedundantCondition>
|
||||
</file>
|
||||
<file src="lib/Service/StackService.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>BadRquestException</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Sharing/Listener.php">
|
||||
<InvalidArgument occurrences="1">
|
||||
<code>[self::class, 'listenPreShare']</code>
|
||||
|
||||
@@ -59,6 +59,12 @@ namespace OCA\Circles\Model {
|
||||
}
|
||||
}
|
||||
|
||||
namespace OCA\Circles\Events {
|
||||
class CircleDestroyedEvent extends \OCP\EventDispatcher\Event {
|
||||
public function __construct(FederatedEvent $federatedEvent, array $results) {}
|
||||
abstract public function getCircle(): \OCA\Circles\Model\Circle {}
|
||||
}
|
||||
}
|
||||
namespace OCA\Circles\Model\Probes {
|
||||
class CircleProbe {
|
||||
public function __construct() {}
|
||||
|
||||
@@ -27,6 +27,8 @@ use OCA\Deck\Db\Attachment;
|
||||
use OCA\Deck\Db\AttachmentMapper;
|
||||
use OCA\Deck\Db\Board;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\Card;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\InvalidAttachmentType;
|
||||
use OCA\Deck\Service\AttachmentService;
|
||||
use OCA\Deck\Service\IAttachmentService;
|
||||
@@ -40,7 +42,9 @@ class DeleteCronTest extends TestCase {
|
||||
private $timeFactory;
|
||||
/** @var BoardMapper|MockObject */
|
||||
protected $boardMapper;
|
||||
/** @var AttachmentService|MockObject */
|
||||
/** @var CardMapper|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $cardMapper;
|
||||
/** @var AttachmentService|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $attachmentService;
|
||||
/** @var AttachmentMapper|MockObject */
|
||||
private $attachmentMapper;
|
||||
@@ -51,9 +55,10 @@ class DeleteCronTest extends TestCase {
|
||||
parent::setUp();
|
||||
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
||||
$this->boardMapper = $this->createMock(BoardMapper::class);
|
||||
$this->cardMapper = $this->createMock(CardMapper::class);
|
||||
$this->attachmentService = $this->createMock(AttachmentService::class);
|
||||
$this->attachmentMapper = $this->createMock(AttachmentMapper::class);
|
||||
$this->deleteCron = new DeleteCron($this->timeFactory, $this->boardMapper, $this->attachmentService, $this->attachmentMapper);
|
||||
$this->deleteCron = new DeleteCron($this->timeFactory, $this->boardMapper, $this->cardMapper, $this->attachmentService, $this->attachmentMapper);
|
||||
}
|
||||
|
||||
protected function getBoard($id) {
|
||||
@@ -62,6 +67,12 @@ class DeleteCronTest extends TestCase {
|
||||
return $board;
|
||||
}
|
||||
|
||||
protected function getCard($id) {
|
||||
$card = new Card();
|
||||
$card->setId($id);
|
||||
return $card;
|
||||
}
|
||||
|
||||
public function testDeleteCron() {
|
||||
$boards = [
|
||||
$this->getBoard(1),
|
||||
@@ -81,6 +92,14 @@ class DeleteCronTest extends TestCase {
|
||||
[$boards[3]]
|
||||
);
|
||||
|
||||
$cards = [ $this->getCard(10) ];
|
||||
$this->cardMapper->expects($this->once())
|
||||
->method('findToDelete')
|
||||
->willReturn($cards);
|
||||
$this->cardMapper->expects($this->once())
|
||||
->method('delete')
|
||||
->with($cards[0]);
|
||||
|
||||
$attachment = new Attachment();
|
||||
$attachment->setType('deck_file');
|
||||
$this->attachmentMapper->expects($this->once())
|
||||
@@ -107,6 +126,10 @@ class DeleteCronTest extends TestCase {
|
||||
->method('findToDelete')
|
||||
->willReturn($boards);
|
||||
|
||||
$this->cardMapper->expects($this->once())
|
||||
->method('findToDelete')
|
||||
->willReturn([]);
|
||||
|
||||
$attachment = new Attachment();
|
||||
$attachment->setType('deck_file_invalid');
|
||||
$this->attachmentMapper->expects($this->once())
|
||||
|
||||
@@ -29,12 +29,12 @@ use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\AppFramework\Db\MapperTestUtility;
|
||||
use Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class AclMapperTest extends MapperTestUtility {
|
||||
class AclMapperTest extends TestCase {
|
||||
private $dbConnection;
|
||||
private $aclMapper;
|
||||
private $boardMapper;
|
||||
|
||||
@@ -27,12 +27,12 @@ use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Server;
|
||||
use Test\AppFramework\Db\MapperTestUtility;
|
||||
use Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class AttachmentMapperTest extends MapperTestUtility {
|
||||
class AttachmentMapperTest extends TestCase {
|
||||
|
||||
/** @var IDBConnection */
|
||||
private $dbConnection;
|
||||
|
||||
@@ -29,12 +29,12 @@ use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\AppFramework\Db\MapperTestUtility;
|
||||
use Test\TestCase;
|
||||
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class BoardMapperTest extends MapperTestUtility {
|
||||
class BoardMapperTest extends TestCase {
|
||||
|
||||
/** @var IDBConnection */
|
||||
private $dbConnection;
|
||||
|
||||
@@ -35,6 +35,8 @@ use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Db\ChangeHelper;
|
||||
use OCA\Deck\Db\LabelMapper;
|
||||
use OCA\Deck\Db\StackMapper;
|
||||
use OCA\Deck\Event\AclCreatedEvent;
|
||||
use OCA\Deck\Event\AclDeletedEvent;
|
||||
use OCA\Deck\NoPermissionException;
|
||||
use OCA\Deck\Notification\NotificationHelper;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
@@ -375,6 +377,9 @@ class BoardServiceTest extends TestCase {
|
||||
->method('insert')
|
||||
->with($acl)
|
||||
->willReturn($acl);
|
||||
$this->eventDispatcher->expects(self::once())
|
||||
->method('dispatchTyped')
|
||||
->with(new AclCreatedEvent($acl));
|
||||
$this->assertEquals($expected, $this->service->addAcl(
|
||||
123, 'user', 'admin', $providedAcl[0], $providedAcl[1], $providedAcl[2]
|
||||
));
|
||||
@@ -432,6 +437,9 @@ class BoardServiceTest extends TestCase {
|
||||
->method('delete')
|
||||
->with($acl)
|
||||
->willReturn($acl);
|
||||
$this->assertTrue($this->service->deleteAcl(123));
|
||||
$this->eventDispatcher->expects(self::once())
|
||||
->method('dispatchTyped')
|
||||
->with(new AclDeletedEvent($acl));
|
||||
$this->assertEquals($acl, $this->service->deleteAcl(123));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,10 +164,14 @@ class BoardControllerTest extends \Test\TestCase {
|
||||
}
|
||||
|
||||
public function testDeleteAcl() {
|
||||
$acl = $this->getMockBuilder(Acl::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->boardService->expects($this->once())
|
||||
->method('deleteAcl')
|
||||
->with(1)
|
||||
->willReturn(true);
|
||||
$this->assertEquals(true, $this->controller->deleteAcl(1));
|
||||
->willReturn($acl);
|
||||
$this->assertEquals($acl, $this->controller->deleteAcl(1));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user