Compare commits
8 Commits
ci/self-ho
...
vue3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
042792bfd7 | ||
|
|
5f65d14cbd | ||
|
|
f3545dd677 | ||
|
|
a7d34360b1 | ||
|
|
de907d69c5 | ||
|
|
438376b20a | ||
|
|
b708f3967b | ||
|
|
a2a8b1ade5 |
4
.github/workflows/appbuild.yml
vendored
4
.github/workflows/appbuild.yml
vendored
@@ -9,7 +9,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.4.0
|
||||
uses: actions/setup-node@v4.2.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
|
||||
24
.github/workflows/appstore-build-publish.yml
vendored
24
.github/workflows/appstore-build-publish.yml
vendored
@@ -12,12 +12,9 @@ on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build_and_publish:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Only allowed to be run on nextcloud-releases repositories
|
||||
if: ${{ github.repository_owner == 'nextcloud-releases' }}
|
||||
@@ -37,23 +34,11 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: ${{ env.APP_NAME }}
|
||||
|
||||
- name: Get app version number
|
||||
id: app-version
|
||||
uses: skjnldsv/xpath-action@f5b036e9d973f42c86324833fd00be90665fbf77 # master
|
||||
with:
|
||||
filename: ${{ env.APP_NAME }}/appinfo/info.xml
|
||||
expression: "//info//version/text()"
|
||||
|
||||
- name: Validate app version against tag
|
||||
run: |
|
||||
[ "${{ env.APP_VERSION }}" = "v${{ fromJSON(steps.app-version.outputs.result).version }}" ]
|
||||
|
||||
- name: Get appinfo data
|
||||
id: appinfo
|
||||
uses: skjnldsv/xpath-action@f5b036e9d973f42c86324833fd00be90665fbf77 # master
|
||||
uses: skjnldsv/xpath-action@7e6a7c379d0e9abc8acaef43df403ab4fc4f770c # master
|
||||
with:
|
||||
filename: ${{ env.APP_NAME }}/appinfo/info.xml
|
||||
expression: "//info//dependencies//nextcloud/@min-version"
|
||||
@@ -71,7 +56,7 @@ jobs:
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
# Skip if no package.json
|
||||
if: ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -87,7 +72,7 @@ jobs:
|
||||
filename: ${{ env.APP_NAME }}/appinfo/info.xml
|
||||
|
||||
- name: Set up php ${{ steps.php-versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: ${{ steps.php-versions.outputs.php-min }}
|
||||
coverage: none
|
||||
@@ -152,7 +137,6 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
if: ${{ steps.server-checkout.outcome != 'success' }}
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
path: nextcloud
|
||||
|
||||
4
.github/workflows/cypress-e2e.yml
vendored
4
.github/workflows/cypress-e2e.yml
vendored
@@ -14,7 +14,7 @@ env:
|
||||
jobs:
|
||||
cypress:
|
||||
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: 'ubuntu-latest'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.4.0
|
||||
uses: actions/setup-node@v4.2.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
name: Dependabot
|
||||
|
||||
on:
|
||||
pull_request_target: # zizmor: ignore[dangerous-triggers]
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
@@ -24,7 +24,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
auto-approve-merge:
|
||||
if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'renovate[bot]'
|
||||
if: github.actor == 'dependabot[bot]' || github.actor == 'renovate[bot]'
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
# for hmarr/auto-approve-action to approve PRs
|
||||
|
||||
2
.github/workflows/integration.yml
vendored
2
.github/workflows/integration.yml
vendored
@@ -21,7 +21,7 @@ env:
|
||||
|
||||
jobs:
|
||||
integration:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
6
.github/workflows/lint-eslint.yml
vendored
6
.github/workflows/lint-eslint.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
||||
- '**.vue'
|
||||
|
||||
lint:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -57,8 +57,6 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
@@ -68,7 +66,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
14
.github/workflows/lint-php-cs.yml
vendored
14
.github/workflows/lint-php-cs.yml
vendored
@@ -19,24 +19,22 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: php-cs
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get php version
|
||||
id: versions
|
||||
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
|
||||
|
||||
- name: Set up php${{ steps.versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
- name: Set up php${{ steps.versions.outputs.php-available }}
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: ${{ steps.versions.outputs.php-min }}
|
||||
php-version: ${{ steps.versions.outputs.php-available }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
@@ -44,9 +42,7 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer remove nextcloud/ocp --dev
|
||||
composer i
|
||||
run: composer i
|
||||
|
||||
- name: Lint
|
||||
run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 )
|
||||
|
||||
9
.github/workflows/lint-php.yml
vendored
9
.github/workflows/lint-php.yml
vendored
@@ -25,15 +25,12 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get version matrix
|
||||
id: versions
|
||||
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0
|
||||
|
||||
php-lint:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: matrix
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -44,11 +41,9 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
6
.github/workflows/lint-stylelint.yml
vendored
6
.github/workflows/lint-stylelint.yml
vendored
@@ -19,15 +19,13 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: stylelint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
@@ -37,7 +35,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
4
.github/workflows/nodejs.yml
vendored
4
.github/workflows/nodejs.yml
vendored
@@ -5,7 +5,7 @@ on: [push]
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.4.0
|
||||
uses: actions/setup-node@v4.2.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
|
||||
6
.github/workflows/npm-audit-fix.yml
vendored
6
.github/workflows/npm-audit-fix.yml
vendored
@@ -19,7 +19,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -54,7 +54,7 @@ jobs:
|
||||
|
||||
- name: Fix npm audit
|
||||
id: npm-audit
|
||||
uses: nextcloud-libraries/npm-audit-action@1b1728b2b4a7a78d69de65608efcf4db0e3e42d0 # v0.2.0
|
||||
uses: nextcloud-libraries/npm-audit-action@2a60bd2e79cc77f2cc4d9a3fe40f1a69896f3a87 # v0.1.0
|
||||
|
||||
- name: Run npm ci and npm run build
|
||||
if: steps.checkout.outcome == 'success'
|
||||
|
||||
15
.github/workflows/phpunit-mysql.yml
vendored
15
.github/workflows/phpunit-mysql.yml
vendored
@@ -25,8 +25,6 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get version matrix
|
||||
id: versions
|
||||
@@ -62,7 +60,7 @@ jobs:
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-mysql:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [changes, matrix]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -83,7 +81,6 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Set app env
|
||||
if: ${{ env.APP_NAME == '' }}
|
||||
run: |
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
@@ -91,7 +88,6 @@ jobs:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
ref: ${{ matrix.server-versions }}
|
||||
@@ -99,19 +95,16 @@ jobs:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql
|
||||
coverage: none
|
||||
ini-file: development
|
||||
# Temporary workaround for missing pcntl_* in PHP 8.3
|
||||
ini-values: disable_functions=
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -130,9 +123,7 @@ jobs:
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer remove nextcloud/ocp --dev
|
||||
composer i
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
|
||||
15
.github/workflows/phpunit-pgsql.yml
vendored
15
.github/workflows/phpunit-pgsql.yml
vendored
@@ -26,8 +26,6 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get version matrix
|
||||
id: versions
|
||||
@@ -61,7 +59,7 @@ jobs:
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-pgsql:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [changes, matrix]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -86,7 +84,6 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Set app env
|
||||
if: ${{ env.APP_NAME == '' }}
|
||||
run: |
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
@@ -94,7 +91,6 @@ jobs:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
ref: ${{ matrix.server-versions }}
|
||||
@@ -102,19 +98,16 @@ jobs:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, pgsql, pdo_pgsql
|
||||
coverage: none
|
||||
ini-file: development
|
||||
# Temporary workaround for missing pcntl_* in PHP 8.3
|
||||
ini-values: disable_functions=
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -128,9 +121,7 @@ jobs:
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer remove nextcloud/ocp --dev
|
||||
composer i
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
|
||||
15
.github/workflows/phpunit-sqlite.yml
vendored
15
.github/workflows/phpunit-sqlite.yml
vendored
@@ -26,8 +26,6 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get version matrix
|
||||
id: versions
|
||||
@@ -61,7 +59,7 @@ jobs:
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-sqlite:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [changes, matrix]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -75,7 +73,6 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Set app env
|
||||
if: ${{ env.APP_NAME == '' }}
|
||||
run: |
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
@@ -83,7 +80,6 @@ jobs:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
ref: ${{ matrix.server-versions }}
|
||||
@@ -91,19 +87,16 @@ jobs:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
# Temporary workaround for missing pcntl_* in PHP 8.3
|
||||
ini-values: disable_functions=
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -117,9 +110,7 @@ jobs:
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer remove nextcloud/ocp --dev
|
||||
composer i
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
|
||||
4
.github/workflows/pr-feedback.yml
vendored
4
.github/workflows/pr-feedback.yml
vendored
@@ -22,7 +22,7 @@ permissions:
|
||||
jobs:
|
||||
pr-feedback:
|
||||
if: ${{ github.repository_owner == 'nextcloud' }}
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: The get-github-handles-from-website action
|
||||
uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -)
|
||||
echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: nextcloud/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4 # main
|
||||
- uses: marcelklehr/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4
|
||||
with:
|
||||
feedback-message: |
|
||||
Hello there,
|
||||
|
||||
27
.github/workflows/psalm.yml
vendored
27
.github/workflows/psalm.yml
vendored
@@ -14,46 +14,31 @@ concurrency:
|
||||
group: psalm-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: static-psalm-analysis
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get php version
|
||||
id: versions
|
||||
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
|
||||
|
||||
- name: Check enforcement of minimum PHP version ${{ steps.versions.outputs.php-min }} in psalm.xml
|
||||
run: grep 'phpVersion="${{ steps.versions.outputs.php-min }}' psalm.xml
|
||||
|
||||
- name: Set up php${{ steps.versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
- name: Set up php${{ steps.versions.outputs.php-available }}
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: ${{ steps.versions.outputs.php-min }}
|
||||
php-version: ${{ steps.versions.outputs.php-available }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
# Temporary workaround for missing pcntl_* in PHP 8.3
|
||||
ini-values: disable_functions=
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer remove nextcloud/ocp --dev
|
||||
composer i
|
||||
|
||||
- name: Install nextcloud/ocp
|
||||
run: composer require --dev nextcloud/ocp:dev-${{ steps.versions.outputs.branches-max }} --ignore-platform-reqs --with-dependencies
|
||||
run: composer i
|
||||
|
||||
- name: Run coding standards check
|
||||
run: composer run psalm -- --threads=1 --monochrome --no-progress --output-format=github
|
||||
run: composer run psalm
|
||||
|
||||
5
.github/workflows/reuse.yml
vendored
5
.github/workflows/reuse.yml
vendored
@@ -11,12 +11,9 @@ name: REUSE Compliance Check
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
reuse-compliance-check:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
name: Auto approve nextcloud/ocp
|
||||
|
||||
on:
|
||||
pull_request_target: # zizmor: ignore[dangerous-triggers]
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
|
||||
# Enable GitHub auto merge
|
||||
- name: Auto merge
|
||||
uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0
|
||||
uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # main
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
8
.github/workflows/update-nextcloud-ocp.yml
vendored
8
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -13,12 +13,9 @@ on:
|
||||
schedule:
|
||||
- cron: "5 2 * * 0"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
update-nextcloud-ocp:
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -31,14 +28,13 @@ jobs:
|
||||
- id: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
continue-on-error: true
|
||||
|
||||
- name: Set up php8.2
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1
|
||||
with:
|
||||
php-version: 8.2
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
@@ -54,9 +54,6 @@
|
||||
<live-migration>
|
||||
<step>OCA\Deck\Migration\DeletedCircleCleanup</step>
|
||||
</live-migration>
|
||||
<post-migration>
|
||||
<step>OCA\Deck\Migration\LabelMismatchCleanup</step>
|
||||
</post-migration>
|
||||
</repair-steps>
|
||||
<commands>
|
||||
<command>OCA\Deck\Command\UserExport</command>
|
||||
|
||||
152
composer.lock
generated
152
composer.lock
generated
@@ -7,31 +7,143 @@
|
||||
"content-hash": "6950663d9d213151028e780637480220",
|
||||
"packages": [
|
||||
{
|
||||
"name": "justinrainbow/json-schema",
|
||||
"version": "6.4.1",
|
||||
"name": "icecave/parity",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jsonrainbow/json-schema.git",
|
||||
"reference": "35d262c94959571e8736db1e5c9bc36ab94ae900"
|
||||
"url": "https://github.com/icecave/parity.git",
|
||||
"reference": "0109fef58b3230d23b20b2ac52ecdf477218d300"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/35d262c94959571e8736db1e5c9bc36ab94ae900",
|
||||
"reference": "35d262c94959571e8736db1e5c9bc36ab94ae900",
|
||||
"url": "https://api.github.com/repos/icecave/parity/zipball/0109fef58b3230d23b20b2ac52ecdf477218d300",
|
||||
"reference": "0109fef58b3230d23b20b2ac52ecdf477218d300",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"marc-mabe/php-enum": "^4.0",
|
||||
"php": "^7.2 || ^8.0"
|
||||
"icecave/repr": "~1",
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "3.3.0",
|
||||
"eloquent/liberator": "~1",
|
||||
"icecave/archer": "~1"
|
||||
},
|
||||
"suggest": {
|
||||
"eloquent/asplode": "Drop-in exception-based error handling."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Icecave\\Parity": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "James Harris",
|
||||
"email": "james.harris@icecave.com.au",
|
||||
"homepage": "https://github.com/jmalloc"
|
||||
}
|
||||
],
|
||||
"description": "A customizable deep comparison library.",
|
||||
"homepage": "https://github.com/IcecaveStudios/parity",
|
||||
"keywords": [
|
||||
"compare",
|
||||
"comparison",
|
||||
"equal",
|
||||
"equality",
|
||||
"greater",
|
||||
"less",
|
||||
"sort",
|
||||
"sorting"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/icecave/parity/issues",
|
||||
"source": "https://github.com/icecave/parity/tree/1.0.0"
|
||||
},
|
||||
"time": "2014-01-17T05:56:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "icecave/repr",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/icecave/repr.git",
|
||||
"reference": "8a3d2953adf5f464a06e3e2587aeacc97e2bed07"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/icecave/repr/zipball/8a3d2953adf5f464a06e3e2587aeacc97e2bed07",
|
||||
"reference": "8a3d2953adf5f464a06e3e2587aeacc97e2bed07",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"icecave/archer": "~1"
|
||||
},
|
||||
"suggest": {
|
||||
"eloquent/asplode": "Drop-in exception-based error handling."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Icecave\\Repr\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "James Harris",
|
||||
"email": "james.harris@icecave.com.au",
|
||||
"homepage": "https://github.com/jmalloc"
|
||||
}
|
||||
],
|
||||
"description": "A library for generating string representations of any value, inspired by Python's reprlib library.",
|
||||
"homepage": "https://github.com/IcecaveStudios/repr",
|
||||
"keywords": [
|
||||
"human",
|
||||
"readable",
|
||||
"repr",
|
||||
"representation",
|
||||
"string"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/icecave/repr/issues",
|
||||
"source": "https://github.com/icecave/repr/tree/1.0.1"
|
||||
},
|
||||
"time": "2014-07-25T05:44:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "justinrainbow/json-schema",
|
||||
"version": "6.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jsonrainbow/json-schema.git",
|
||||
"reference": "a38c6198d53b09c0702f440585a4f4a5d9137bd9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/a38c6198d53b09c0702f440585a4f4a5d9137bd9",
|
||||
"reference": "a38c6198d53b09c0702f440585a4f4a5d9137bd9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"icecave/parity": "1.0.0",
|
||||
"marc-mabe/php-enum": "^2.0 || ^3.0 || ^4.0",
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "~2.2.20 || ~2.19.0",
|
||||
"json-schema/json-schema-test-suite": "1.2.0",
|
||||
"marc-mabe/php-enum-phpstan": "^2.0",
|
||||
"phpspec/prophecy": "^1.19",
|
||||
"phpstan/phpstan": "^1.12",
|
||||
"phpunit/phpunit": "^8.5"
|
||||
"phpunit/phpunit": "^4.8.35"
|
||||
},
|
||||
"bin": [
|
||||
"bin/validate-json"
|
||||
@@ -77,9 +189,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/jsonrainbow/json-schema/issues",
|
||||
"source": "https://github.com/jsonrainbow/json-schema/tree/6.4.1"
|
||||
"source": "https://github.com/jsonrainbow/json-schema/tree/6.0.0"
|
||||
},
|
||||
"time": "2025-04-04T13:08:07+00:00"
|
||||
"time": "2024-07-30T17:49:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "marc-mabe/php-enum",
|
||||
@@ -380,12 +492,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nextcloud-deps/ocp.git",
|
||||
"reference": "8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461"
|
||||
"reference": "1abf593d27ecd373a9fcbbe87cfdd899ad3fee8b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461",
|
||||
"reference": "8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/1abf593d27ecd373a9fcbbe87cfdd899ad3fee8b",
|
||||
"reference": "1abf593d27ecd373a9fcbbe87cfdd899ad3fee8b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -421,7 +533,7 @@
|
||||
"issues": "https://github.com/nextcloud-deps/ocp/issues",
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
|
||||
},
|
||||
"time": "2025-04-24T00:50:06+00:00"
|
||||
"time": "2025-03-08T00:36:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
|
||||
@@ -374,9 +374,6 @@ describe('Card', function () {
|
||||
|
||||
cy.get('.app-sidebar-header .action-item__menutoggle').click()
|
||||
cy.get('.v-popper__popper button:contains("Move/copy card")').click()
|
||||
cy.get('.vs__dropdown-menu span[title="MyTestBoard"]').should('be.visible').click()
|
||||
cy.get('[data-cy="select-stack"] .vs__dropdown-toggle').should('be.visible').click()
|
||||
cy.get('.vs__dropdown-menu span[title="TestList"]').should('be.visible').click()
|
||||
cy.get('.modal-container button:contains("Copy card")').click()
|
||||
cy.wait('@clone', { timeout: 7000 })
|
||||
cy.get('.card:contains("Hello world")').should('have.length', 2)
|
||||
|
||||
@@ -8,7 +8,7 @@ OC.L10N.register(
|
||||
"The file was uploaded" : "Kaset eo bet ar restr",
|
||||
"No file was uploaded" : "N'eus restr ebet a zo bet kaset",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Deizat fall, stumm an deizat a zo ret bezhañ BBBB-MM-DD",
|
||||
"Cancel" : "Nullañ",
|
||||
"Cancel" : "Arrest",
|
||||
"Drop your files to upload" : "Laoskit ho restroù evit pellkas",
|
||||
"Open" : "Digeriñ",
|
||||
"Completed" : "Achuet",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"The file was uploaded" : "Kaset eo bet ar restr",
|
||||
"No file was uploaded" : "N'eus restr ebet a zo bet kaset",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Deizat fall, stumm an deizat a zo ret bezhañ BBBB-MM-DD",
|
||||
"Cancel" : "Nullañ",
|
||||
"Cancel" : "Arrest",
|
||||
"Drop your files to upload" : "Laoskit ho restroù evit pellkas",
|
||||
"Open" : "Digeriñ",
|
||||
"Completed" : "Achuet",
|
||||
|
||||
@@ -106,7 +106,7 @@ OC.L10N.register(
|
||||
"Done" : "Fet",
|
||||
"1. Open to learn more about boards and cards" : "1. Obre per obtenir més informació sobre taulers i cartes",
|
||||
"2. Drag cards left and right, up and down" : "2. Arrossegueu les targetes a l'esquerra i a la dreta, amunt i avall",
|
||||
"3. Apply rich formatting and link content" : "3. Aplica format ric i contingut d'enllaços",
|
||||
"3. Apply rich formatting and link content" : "3. Apliqueu format ric i contingut d'enllaços",
|
||||
"4. Share, comment and collaborate!" : "4. Comparteix, comenta i col·labora!",
|
||||
"Create your first card!" : "Crea la teva primera targeta!",
|
||||
"The file was uploaded" : "S'ha pujat el fitxer",
|
||||
@@ -351,9 +351,9 @@ OC.L10N.register(
|
||||
"Clone cards" : "Clonar targetes",
|
||||
"Clone assignments" : "Clonar les tasques",
|
||||
"Clone labels" : "Clonar etiquetes",
|
||||
"Clone due dates" : "Clonar les dates de caducitat",
|
||||
"Advanced options" : "Opcions avançades",
|
||||
"Move all cards to the first list" : "Mou totes les targetes a la primera llista",
|
||||
"Clone due dates" : "Clonar les dates de venciment",
|
||||
"Advanced options" : "Paràmetres avançats",
|
||||
"Move all cards to the first list" : "Mou totes les cartes a la primera llista",
|
||||
"Restore archived cards" : "Restaura les targetes arxivades",
|
||||
"Clone" : "Clonar",
|
||||
"Loading filtered view" : "S'està carregant la visualització filtrada",
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
"Done" : "Fet",
|
||||
"1. Open to learn more about boards and cards" : "1. Obre per obtenir més informació sobre taulers i cartes",
|
||||
"2. Drag cards left and right, up and down" : "2. Arrossegueu les targetes a l'esquerra i a la dreta, amunt i avall",
|
||||
"3. Apply rich formatting and link content" : "3. Aplica format ric i contingut d'enllaços",
|
||||
"3. Apply rich formatting and link content" : "3. Apliqueu format ric i contingut d'enllaços",
|
||||
"4. Share, comment and collaborate!" : "4. Comparteix, comenta i col·labora!",
|
||||
"Create your first card!" : "Crea la teva primera targeta!",
|
||||
"The file was uploaded" : "S'ha pujat el fitxer",
|
||||
@@ -349,9 +349,9 @@
|
||||
"Clone cards" : "Clonar targetes",
|
||||
"Clone assignments" : "Clonar les tasques",
|
||||
"Clone labels" : "Clonar etiquetes",
|
||||
"Clone due dates" : "Clonar les dates de caducitat",
|
||||
"Advanced options" : "Opcions avançades",
|
||||
"Move all cards to the first list" : "Mou totes les targetes a la primera llista",
|
||||
"Clone due dates" : "Clonar les dates de venciment",
|
||||
"Advanced options" : "Paràmetres avançats",
|
||||
"Move all cards to the first list" : "Mou totes les cartes a la primera llista",
|
||||
"Restore archived cards" : "Restaura les targetes arxivades",
|
||||
"Clone" : "Clonar",
|
||||
"Loading filtered view" : "S'està carregant la visualització filtrada",
|
||||
|
||||
@@ -201,7 +201,6 @@ OC.L10N.register(
|
||||
"Shift" : "Shift",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Søg",
|
||||
"Enter" : "Indtast",
|
||||
"All boards" : "Alle tavler",
|
||||
"Archived boards" : "Arkiverede lister",
|
||||
"Shared with you" : "Delt med dig",
|
||||
|
||||
@@ -199,7 +199,6 @@
|
||||
"Shift" : "Shift",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Søg",
|
||||
"Enter" : "Indtast",
|
||||
"All boards" : "Alle tavler",
|
||||
"Archived boards" : "Arkiverede lister",
|
||||
"Shared with you" : "Delt med dig",
|
||||
|
||||
18
l10n/de.js
18
l10n/de.js
@@ -123,7 +123,7 @@ OC.L10N.register(
|
||||
"Path is already shared with this card" : "Pfad wurde bereits mit dieser Karte geteilt",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, zulässiges Datumsformat: JJJJ-MM-TT",
|
||||
"Personal planning and team project organization" : "Persönliche Planung und Teamprojektorganisation",
|
||||
"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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert ist.\n\n\n- 📥 Füge deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit deinem Team mit Kommentaren\n- ⚡ Behalte den Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere dein Projekt",
|
||||
"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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit deinem Team mit Kommentaren\n- ⚡ Behalte den Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere dein Projekt",
|
||||
"Add board" : "Board hinzufügen",
|
||||
"Card details" : "Kartendetails",
|
||||
"Select the board to link to a project" : "Wähle ein Board aus, um dieses mit einem Projekt zu verknüpfen",
|
||||
@@ -186,7 +186,7 @@ OC.L10N.register(
|
||||
"Deleted lists" : "Gelöschte Listen",
|
||||
"Undo" : "Rückgängig",
|
||||
"Deleted cards" : "Gelöschte Karten",
|
||||
"Failed to create share with {displayName}" : "Freigabe mit dem Namen {displayName} konnte nicht erstellt werden",
|
||||
"Failed to create share with {displayName}" : "Fehler beim Erstellen der Freigabe mit dem Namen {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Möchtest du wirklich das Board {title} an {user} übertragen?",
|
||||
"Transfer the board." : "Board übertragen",
|
||||
"Transfer" : "Übertragen",
|
||||
@@ -238,7 +238,7 @@ OC.L10N.register(
|
||||
"Open in bigger view" : "In größerer Ansicht öffnen",
|
||||
"Attachments" : "Anhänge",
|
||||
"Comments" : "Kommentare",
|
||||
"Failed to load comments" : "Laden der Kommentare ist fehlgeschlagen",
|
||||
"Failed to load comments" : "Das Laden der Kommentare ist fehlgeschlagen",
|
||||
"No comments yet. Begin the discussion!" : "Bislang keine Kommentare. Beginne die Diskussion!",
|
||||
"The comment cannot be empty." : "Der Kommentar darf nicht leer sein.",
|
||||
"The comment cannot be longer than 1000 characters." : "Der Kommentar darf nicht länger als 1000 Zeichen sein.",
|
||||
@@ -258,8 +258,8 @@ OC.L10N.register(
|
||||
"Add Attachment" : "Anhang anhängen",
|
||||
"Choose attachment" : "Anhang auswählen",
|
||||
"Select Date" : "Datum auswählen",
|
||||
"Later today – {timeLocale}" : "Später heute – {timeLocale}",
|
||||
"Set due date for later today" : "Fälligkeitsdatum auf später heute setzen",
|
||||
"Later today – {timeLocale}" : "Heute noch – {timeLocale}",
|
||||
"Set due date for later today" : "Fälligkeitsdatum auf heute noch setzen",
|
||||
"Tomorrow – {timeLocale}" : "Morgen – {timeLocale}",
|
||||
"Set due date for tomorrow" : "Fälligkeitsdatum auf morgen setzen",
|
||||
"This weekend – {timeLocale}" : "Dieses Wochenende – {timeLocale}",
|
||||
@@ -270,9 +270,9 @@ OC.L10N.register(
|
||||
"Set a due date" : "Ein Ablaufdatum setzen",
|
||||
"Add due date" : "Fälligkeitsdatum hinzufügen",
|
||||
"Choose a date" : "Datum auswählen",
|
||||
"Remove due date" : "Fälligkeitsdatum entfernen",
|
||||
"Remove due date" : "Fälligkeitsdatum löschen",
|
||||
"Mark as done" : "Als erledigt markieren",
|
||||
"Due at:" : "Fällig am:",
|
||||
"Due at:" : "Fallig am:",
|
||||
"Not done" : "Nicht erledigt",
|
||||
"Unarchive card" : "Karte dearchivieren",
|
||||
"Archive card" : "Karte archivieren",
|
||||
@@ -292,7 +292,7 @@ OC.L10N.register(
|
||||
"Delete card" : "Karte löschen",
|
||||
"seconds ago" : "Gerade eben",
|
||||
"Keyboard shortcuts" : "Tastaturkürzel",
|
||||
"Boost your productivity using Deck with keyboard shortcuts." : "Mit Tastaturkürzeln die Produktivität in Deck erhöhen.",
|
||||
"Boost your productivity using Deck with keyboard shortcuts." : "Erhöhe mit Tastaturkürzeln deine Produktivität in Deck.",
|
||||
"Board actions" : "Boardaktionen",
|
||||
"Keyboard shortcut" : "Tastaturkürzel",
|
||||
"Action" : "Aktion",
|
||||
@@ -386,7 +386,7 @@ OC.L10N.register(
|
||||
"Create a card" : "Eine Karte erstellen",
|
||||
"Message from {author} in {conversationName}" : "Nachricht von {author} in {conversationName}",
|
||||
"Something went wrong" : "Etwas ist schiefgelaufen",
|
||||
"Failed to upload {name}" : "{name} konnte nicht hochgeladen werden",
|
||||
"Failed to upload {name}" : "Fehler beim Hochladen von {name}",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Error creating the share" : "Fehler beim Erstellen der Freigabe",
|
||||
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
|
||||
|
||||
18
l10n/de.json
18
l10n/de.json
@@ -121,7 +121,7 @@
|
||||
"Path is already shared with this card" : "Pfad wurde bereits mit dieser Karte geteilt",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, zulässiges Datumsformat: JJJJ-MM-TT",
|
||||
"Personal planning and team project organization" : "Persönliche Planung und Teamprojektorganisation",
|
||||
"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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert ist.\n\n\n- 📥 Füge deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit deinem Team mit Kommentaren\n- ⚡ Behalte den Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere dein Projekt",
|
||||
"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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Zuweisen von Schlagworten für noch bessere Organisation\n- 👥 Teile mit deinem Team, Freunden oder der Familie\n- 📎 Füge Dateien hinzu und verwende diese in deinen Markdown-Beschreibungen\n- 💬 Diskutiere mit deinem Team mit Kommentaren\n- ⚡ Behalte den Überblick über Änderungen mit dem Aktivitäten-Stream\n- 🚀 Organisiere dein Projekt",
|
||||
"Add board" : "Board hinzufügen",
|
||||
"Card details" : "Kartendetails",
|
||||
"Select the board to link to a project" : "Wähle ein Board aus, um dieses mit einem Projekt zu verknüpfen",
|
||||
@@ -184,7 +184,7 @@
|
||||
"Deleted lists" : "Gelöschte Listen",
|
||||
"Undo" : "Rückgängig",
|
||||
"Deleted cards" : "Gelöschte Karten",
|
||||
"Failed to create share with {displayName}" : "Freigabe mit dem Namen {displayName} konnte nicht erstellt werden",
|
||||
"Failed to create share with {displayName}" : "Fehler beim Erstellen der Freigabe mit dem Namen {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Möchtest du wirklich das Board {title} an {user} übertragen?",
|
||||
"Transfer the board." : "Board übertragen",
|
||||
"Transfer" : "Übertragen",
|
||||
@@ -236,7 +236,7 @@
|
||||
"Open in bigger view" : "In größerer Ansicht öffnen",
|
||||
"Attachments" : "Anhänge",
|
||||
"Comments" : "Kommentare",
|
||||
"Failed to load comments" : "Laden der Kommentare ist fehlgeschlagen",
|
||||
"Failed to load comments" : "Das Laden der Kommentare ist fehlgeschlagen",
|
||||
"No comments yet. Begin the discussion!" : "Bislang keine Kommentare. Beginne die Diskussion!",
|
||||
"The comment cannot be empty." : "Der Kommentar darf nicht leer sein.",
|
||||
"The comment cannot be longer than 1000 characters." : "Der Kommentar darf nicht länger als 1000 Zeichen sein.",
|
||||
@@ -256,8 +256,8 @@
|
||||
"Add Attachment" : "Anhang anhängen",
|
||||
"Choose attachment" : "Anhang auswählen",
|
||||
"Select Date" : "Datum auswählen",
|
||||
"Later today – {timeLocale}" : "Später heute – {timeLocale}",
|
||||
"Set due date for later today" : "Fälligkeitsdatum auf später heute setzen",
|
||||
"Later today – {timeLocale}" : "Heute noch – {timeLocale}",
|
||||
"Set due date for later today" : "Fälligkeitsdatum auf heute noch setzen",
|
||||
"Tomorrow – {timeLocale}" : "Morgen – {timeLocale}",
|
||||
"Set due date for tomorrow" : "Fälligkeitsdatum auf morgen setzen",
|
||||
"This weekend – {timeLocale}" : "Dieses Wochenende – {timeLocale}",
|
||||
@@ -268,9 +268,9 @@
|
||||
"Set a due date" : "Ein Ablaufdatum setzen",
|
||||
"Add due date" : "Fälligkeitsdatum hinzufügen",
|
||||
"Choose a date" : "Datum auswählen",
|
||||
"Remove due date" : "Fälligkeitsdatum entfernen",
|
||||
"Remove due date" : "Fälligkeitsdatum löschen",
|
||||
"Mark as done" : "Als erledigt markieren",
|
||||
"Due at:" : "Fällig am:",
|
||||
"Due at:" : "Fallig am:",
|
||||
"Not done" : "Nicht erledigt",
|
||||
"Unarchive card" : "Karte dearchivieren",
|
||||
"Archive card" : "Karte archivieren",
|
||||
@@ -290,7 +290,7 @@
|
||||
"Delete card" : "Karte löschen",
|
||||
"seconds ago" : "Gerade eben",
|
||||
"Keyboard shortcuts" : "Tastaturkürzel",
|
||||
"Boost your productivity using Deck with keyboard shortcuts." : "Mit Tastaturkürzeln die Produktivität in Deck erhöhen.",
|
||||
"Boost your productivity using Deck with keyboard shortcuts." : "Erhöhe mit Tastaturkürzeln deine Produktivität in Deck.",
|
||||
"Board actions" : "Boardaktionen",
|
||||
"Keyboard shortcut" : "Tastaturkürzel",
|
||||
"Action" : "Aktion",
|
||||
@@ -384,7 +384,7 @@
|
||||
"Create a card" : "Eine Karte erstellen",
|
||||
"Message from {author} in {conversationName}" : "Nachricht von {author} in {conversationName}",
|
||||
"Something went wrong" : "Etwas ist schiefgelaufen",
|
||||
"Failed to upload {name}" : "{name} konnte nicht hochgeladen werden",
|
||||
"Failed to upload {name}" : "Fehler beim Hochladen von {name}",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Error creating the share" : "Fehler beim Erstellen der Freigabe",
|
||||
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
|
||||
|
||||
@@ -22,7 +22,7 @@ OC.L10N.register(
|
||||
"You have renamed list {before} to {stack} on board {board}" : "Sie haben die Liste {before} auf dem Board {board} in {stack} umbenannt",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} hat die Liste {before} in {stack} auf dem Board {board} umbenannt",
|
||||
"You have deleted list {stack} on board {board}" : "Sie haben die Liste {stack} auf dem Board {board} gelöscht",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} hat die Liste {stack} aus dem Board {board} gelöscht",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} hat die Liste {stack} aus dem Board {board} entfernt",
|
||||
"You have created card {card} in list {stack} on board {board}" : "Sie haben die Karte {card} in der Liste {stack} auf dem Board {board} erstellt",
|
||||
"{user} has created card {card} in list {stack} on board {board}" : "{user} hat die Karte {card} in der Liste {stack} auf dem Board {board} erstellt",
|
||||
"You have deleted card {card} in list {stack} on board {board}" : "Sie haben die Karte {card} in der Liste {stack} auf dem Board {board} gelöscht",
|
||||
@@ -61,8 +61,8 @@ OC.L10N.register(
|
||||
"{user} has added the attachment {attachment} to card {card}" : "{user} hat den Anhang {attachment} zur Karte {card} hinzugefügt",
|
||||
"You have updated the attachment {attachment} on card {card}" : "Sie haben den Anhang {attachment} der Karte {card} aktualisiert",
|
||||
"{user} has updated the attachment {attachment} on card {card}" : "{user} hat den Anhang {attachment} der Karte {card} aktualisiert",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "Sie haben den Anhang {attachment} von der Karte {card} gelöscht",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} hat den Anhang {attachment} von Karte {card} gelöscht",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "Sie haben den Anhang {attachment} von der Karte {card} entfernt",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} hat den Anhang {attachment} von Karte {card} entfernt",
|
||||
"You have restored the attachment {attachment} to card {card}" : "Sie haben den Anhang {attachment} der Karte {card} wiederhergestellt",
|
||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} hat den Anhang {attachment} der Karte {card} wiederhergestellt",
|
||||
"You have commented on card {card}" : "Sie haben die Karte {card} kommentiert",
|
||||
@@ -186,7 +186,7 @@ OC.L10N.register(
|
||||
"Deleted lists" : "Gelöschte Listen",
|
||||
"Undo" : "Rückgängig",
|
||||
"Deleted cards" : "Gelöschte Karten",
|
||||
"Failed to create share with {displayName}" : "Freigabe mit dem Namen {displayName} konnte nicht erstellt werden",
|
||||
"Failed to create share with {displayName}" : "Fehler beim Erstellen der Freigabe mit dem Namen {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Möchten Sie wirklich das Board {title} auf {user} übertragen?",
|
||||
"Transfer the board." : "Board übertragen.",
|
||||
"Transfer" : "Übertragen",
|
||||
@@ -238,7 +238,7 @@ OC.L10N.register(
|
||||
"Open in bigger view" : "In größerer Ansicht öffnen",
|
||||
"Attachments" : "Anhänge",
|
||||
"Comments" : "Kommentare",
|
||||
"Failed to load comments" : "Kommentare konnten nicht geladen werden",
|
||||
"Failed to load comments" : "Das Laden der Kommentare ist fehlgeschlagen",
|
||||
"No comments yet. Begin the discussion!" : "Bislang keine Kommentare. Beginnen Sie die Diskussion!",
|
||||
"The comment cannot be empty." : "Der Kommentar darf nicht leer sein.",
|
||||
"The comment cannot be longer than 1000 characters." : "Der Kommentar darf nicht länger als 1000 Zeichen sein.",
|
||||
@@ -270,7 +270,7 @@ OC.L10N.register(
|
||||
"Set a due date" : "Ein Ablaufdatum setzen",
|
||||
"Add due date" : "Fälligkeitsdatum hinzufügen",
|
||||
"Choose a date" : "Datum auswählen",
|
||||
"Remove due date" : "Fälligkeitsdatum entfernen",
|
||||
"Remove due date" : "Fälligkeitsdatum löschen",
|
||||
"Mark as done" : "Als erledigt markieren",
|
||||
"Due at:" : "Fallig am:",
|
||||
"Not done" : "Nicht erledigt",
|
||||
@@ -386,7 +386,7 @@ OC.L10N.register(
|
||||
"Create a card" : "Eine Karte erstellen",
|
||||
"Message from {author} in {conversationName}" : "Nachricht von {author} in {conversationName}",
|
||||
"Something went wrong" : "Etwas ist schiefgelaufen",
|
||||
"Failed to upload {name}" : "{name} konnte nicht hochgeladen werden",
|
||||
"Failed to upload {name}" : "Fehler beim Hochladen von {name}",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Error creating the share" : "Fehler beim Erstellen der Freigabe",
|
||||
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"You have renamed list {before} to {stack} on board {board}" : "Sie haben die Liste {before} auf dem Board {board} in {stack} umbenannt",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} hat die Liste {before} in {stack} auf dem Board {board} umbenannt",
|
||||
"You have deleted list {stack} on board {board}" : "Sie haben die Liste {stack} auf dem Board {board} gelöscht",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} hat die Liste {stack} aus dem Board {board} gelöscht",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} hat die Liste {stack} aus dem Board {board} entfernt",
|
||||
"You have created card {card} in list {stack} on board {board}" : "Sie haben die Karte {card} in der Liste {stack} auf dem Board {board} erstellt",
|
||||
"{user} has created card {card} in list {stack} on board {board}" : "{user} hat die Karte {card} in der Liste {stack} auf dem Board {board} erstellt",
|
||||
"You have deleted card {card} in list {stack} on board {board}" : "Sie haben die Karte {card} in der Liste {stack} auf dem Board {board} gelöscht",
|
||||
@@ -59,8 +59,8 @@
|
||||
"{user} has added the attachment {attachment} to card {card}" : "{user} hat den Anhang {attachment} zur Karte {card} hinzugefügt",
|
||||
"You have updated the attachment {attachment} on card {card}" : "Sie haben den Anhang {attachment} der Karte {card} aktualisiert",
|
||||
"{user} has updated the attachment {attachment} on card {card}" : "{user} hat den Anhang {attachment} der Karte {card} aktualisiert",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "Sie haben den Anhang {attachment} von der Karte {card} gelöscht",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} hat den Anhang {attachment} von Karte {card} gelöscht",
|
||||
"You have deleted the attachment {attachment} from card {card}" : "Sie haben den Anhang {attachment} von der Karte {card} entfernt",
|
||||
"{user} has deleted the attachment {attachment} from card {card}" : "{user} hat den Anhang {attachment} von Karte {card} entfernt",
|
||||
"You have restored the attachment {attachment} to card {card}" : "Sie haben den Anhang {attachment} der Karte {card} wiederhergestellt",
|
||||
"{user} has restored the attachment {attachment} to card {card}" : "{user} hat den Anhang {attachment} der Karte {card} wiederhergestellt",
|
||||
"You have commented on card {card}" : "Sie haben die Karte {card} kommentiert",
|
||||
@@ -184,7 +184,7 @@
|
||||
"Deleted lists" : "Gelöschte Listen",
|
||||
"Undo" : "Rückgängig",
|
||||
"Deleted cards" : "Gelöschte Karten",
|
||||
"Failed to create share with {displayName}" : "Freigabe mit dem Namen {displayName} konnte nicht erstellt werden",
|
||||
"Failed to create share with {displayName}" : "Fehler beim Erstellen der Freigabe mit dem Namen {displayName}",
|
||||
"Are you sure you want to transfer the board {title} to {user}?" : "Möchten Sie wirklich das Board {title} auf {user} übertragen?",
|
||||
"Transfer the board." : "Board übertragen.",
|
||||
"Transfer" : "Übertragen",
|
||||
@@ -236,7 +236,7 @@
|
||||
"Open in bigger view" : "In größerer Ansicht öffnen",
|
||||
"Attachments" : "Anhänge",
|
||||
"Comments" : "Kommentare",
|
||||
"Failed to load comments" : "Kommentare konnten nicht geladen werden",
|
||||
"Failed to load comments" : "Das Laden der Kommentare ist fehlgeschlagen",
|
||||
"No comments yet. Begin the discussion!" : "Bislang keine Kommentare. Beginnen Sie die Diskussion!",
|
||||
"The comment cannot be empty." : "Der Kommentar darf nicht leer sein.",
|
||||
"The comment cannot be longer than 1000 characters." : "Der Kommentar darf nicht länger als 1000 Zeichen sein.",
|
||||
@@ -268,7 +268,7 @@
|
||||
"Set a due date" : "Ein Ablaufdatum setzen",
|
||||
"Add due date" : "Fälligkeitsdatum hinzufügen",
|
||||
"Choose a date" : "Datum auswählen",
|
||||
"Remove due date" : "Fälligkeitsdatum entfernen",
|
||||
"Remove due date" : "Fälligkeitsdatum löschen",
|
||||
"Mark as done" : "Als erledigt markieren",
|
||||
"Due at:" : "Fallig am:",
|
||||
"Not done" : "Nicht erledigt",
|
||||
@@ -384,7 +384,7 @@
|
||||
"Create a card" : "Eine Karte erstellen",
|
||||
"Message from {author} in {conversationName}" : "Nachricht von {author} in {conversationName}",
|
||||
"Something went wrong" : "Etwas ist schiefgelaufen",
|
||||
"Failed to upload {name}" : "{name} konnte nicht hochgeladen werden",
|
||||
"Failed to upload {name}" : "Fehler beim Hochladen von {name}",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Error creating the share" : "Fehler beim Erstellen der Freigabe",
|
||||
"Share with a Deck card" : "Mit einer Deck-Karte teilen",
|
||||
|
||||
@@ -6,7 +6,6 @@ OC.L10N.register(
|
||||
"Finished" : "Lõpetatud",
|
||||
"Later" : "Hiljem",
|
||||
"copy" : "koopia",
|
||||
"To Do" : "Tegemiseks",
|
||||
"Done" : "Valmis",
|
||||
"The file was uploaded" : "Fail laaditi üles",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Üleslaetud fail on suurem, kui php.ini failis määratud upload_max_filesize",
|
||||
@@ -20,72 +19,41 @@ OC.L10N.register(
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD",
|
||||
"Cancel" : "Loobu",
|
||||
"File already exists" : "Fail on juba olemas",
|
||||
"Add list" : "Lisa loend",
|
||||
"List name" : "Nimekirja nimi",
|
||||
"Active filters" : "Aktiivsed filtrid",
|
||||
"Open" : "Ava",
|
||||
"Completed" : "Lõpetatud",
|
||||
"Clear filter" : "Tühjenda filter",
|
||||
"Open details" : "Ava üksikasjad",
|
||||
"Details" : "Üksikasjad",
|
||||
"Sharing" : "Jagamine",
|
||||
"Tags" : "Sildid",
|
||||
"Activity" : "Tegevus",
|
||||
"Undo" : "Tühista",
|
||||
"Transfer" : "Teisalda",
|
||||
"Can edit" : "Võib redigeerida",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "Omanik",
|
||||
"Delete" : "Kustuta",
|
||||
"Delete list" : "Kustuta loend",
|
||||
"Edit" : "Redigeeri",
|
||||
"Members" : "Liikmed",
|
||||
"Invalid path selected" : "Vigane asukoht on valitud",
|
||||
"Upload new files" : "Laadi uued failid üles",
|
||||
"Share from Files" : "Jaga failirakendusest",
|
||||
"Pending share" : "Ootel jagamine",
|
||||
"Add this attachment" : "Lisa see manus",
|
||||
"Show in Files" : "Näita failirakenduses",
|
||||
"Download" : "Laadi alla",
|
||||
"Remove attachment" : "Eemalda manus",
|
||||
"Delete Attachment" : "Kustuta manus",
|
||||
"Restore Attachment" : "Taasta manus",
|
||||
"Download" : "Lae alla",
|
||||
"Modified" : "Muudetud",
|
||||
"Created" : "Loodud",
|
||||
"The title cannot be empty." : "Pealkiri ei saa olla tühi.",
|
||||
"Open in sidebar view" : "Ava külgriba vaates",
|
||||
"Open in bigger view" : "Ava suuremas vaates",
|
||||
"Attachments" : "Manused",
|
||||
"Comments" : "Kommentaarid",
|
||||
"Save" : "Salvesta",
|
||||
"Created:" : "Loodud:",
|
||||
"Cancel reply" : "Katkesta vastamine",
|
||||
"Reply" : "Vasta",
|
||||
"Update" : "Uuenda",
|
||||
"Description" : "Kirjeldus",
|
||||
"Mark as done" : "Märgi tehtuks",
|
||||
"(group)" : "(grupp)",
|
||||
"Edit title" : "Muuda pealkirja",
|
||||
"Delete card" : "Kustuta kaart",
|
||||
"seconds ago" : "sekundit tagasi",
|
||||
"Keyboard shortcuts" : "Klaviatuuri otseteed",
|
||||
"Keyboard shortcut" : "Klaviatuuri otsetee",
|
||||
"Action" : "Tegevus",
|
||||
"Shift" : "Nihuta",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Otsi",
|
||||
"Shared with you" : "Sinuga jagatud",
|
||||
"Cancel edit" : "Loobu muutmisest",
|
||||
"No reminder" : "Meeldetuletust pole",
|
||||
"An error occurred" : "Tekkis tõrge",
|
||||
"No notifications" : "Märguandeid pole",
|
||||
"Advanced options" : "Täpsemad valikud",
|
||||
"Today" : "Täna",
|
||||
"Tomorrow" : "Homme",
|
||||
"No results found" : "Otsingutulemusi ei leidu",
|
||||
"Due on {date}" : "Tähtaeg: {date}",
|
||||
"Close" : "Sulge",
|
||||
"Error creating the share" : "Viga jaosmeedia loomisel",
|
||||
"Share" : "Jaga",
|
||||
"Personal" : "Isiklik"
|
||||
},
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"Finished" : "Lõpetatud",
|
||||
"Later" : "Hiljem",
|
||||
"copy" : "koopia",
|
||||
"To Do" : "Tegemiseks",
|
||||
"Done" : "Valmis",
|
||||
"The file was uploaded" : "Fail laaditi üles",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Üleslaetud fail on suurem, kui php.ini failis määratud upload_max_filesize",
|
||||
@@ -18,72 +17,41 @@
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD",
|
||||
"Cancel" : "Loobu",
|
||||
"File already exists" : "Fail on juba olemas",
|
||||
"Add list" : "Lisa loend",
|
||||
"List name" : "Nimekirja nimi",
|
||||
"Active filters" : "Aktiivsed filtrid",
|
||||
"Open" : "Ava",
|
||||
"Completed" : "Lõpetatud",
|
||||
"Clear filter" : "Tühjenda filter",
|
||||
"Open details" : "Ava üksikasjad",
|
||||
"Details" : "Üksikasjad",
|
||||
"Sharing" : "Jagamine",
|
||||
"Tags" : "Sildid",
|
||||
"Activity" : "Tegevus",
|
||||
"Undo" : "Tühista",
|
||||
"Transfer" : "Teisalda",
|
||||
"Can edit" : "Võib redigeerida",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "Omanik",
|
||||
"Delete" : "Kustuta",
|
||||
"Delete list" : "Kustuta loend",
|
||||
"Edit" : "Redigeeri",
|
||||
"Members" : "Liikmed",
|
||||
"Invalid path selected" : "Vigane asukoht on valitud",
|
||||
"Upload new files" : "Laadi uued failid üles",
|
||||
"Share from Files" : "Jaga failirakendusest",
|
||||
"Pending share" : "Ootel jagamine",
|
||||
"Add this attachment" : "Lisa see manus",
|
||||
"Show in Files" : "Näita failirakenduses",
|
||||
"Download" : "Laadi alla",
|
||||
"Remove attachment" : "Eemalda manus",
|
||||
"Delete Attachment" : "Kustuta manus",
|
||||
"Restore Attachment" : "Taasta manus",
|
||||
"Download" : "Lae alla",
|
||||
"Modified" : "Muudetud",
|
||||
"Created" : "Loodud",
|
||||
"The title cannot be empty." : "Pealkiri ei saa olla tühi.",
|
||||
"Open in sidebar view" : "Ava külgriba vaates",
|
||||
"Open in bigger view" : "Ava suuremas vaates",
|
||||
"Attachments" : "Manused",
|
||||
"Comments" : "Kommentaarid",
|
||||
"Save" : "Salvesta",
|
||||
"Created:" : "Loodud:",
|
||||
"Cancel reply" : "Katkesta vastamine",
|
||||
"Reply" : "Vasta",
|
||||
"Update" : "Uuenda",
|
||||
"Description" : "Kirjeldus",
|
||||
"Mark as done" : "Märgi tehtuks",
|
||||
"(group)" : "(grupp)",
|
||||
"Edit title" : "Muuda pealkirja",
|
||||
"Delete card" : "Kustuta kaart",
|
||||
"seconds ago" : "sekundit tagasi",
|
||||
"Keyboard shortcuts" : "Klaviatuuri otseteed",
|
||||
"Keyboard shortcut" : "Klaviatuuri otsetee",
|
||||
"Action" : "Tegevus",
|
||||
"Shift" : "Nihuta",
|
||||
"Ctrl" : "Ctrl",
|
||||
"Search" : "Otsi",
|
||||
"Shared with you" : "Sinuga jagatud",
|
||||
"Cancel edit" : "Loobu muutmisest",
|
||||
"No reminder" : "Meeldetuletust pole",
|
||||
"An error occurred" : "Tekkis tõrge",
|
||||
"No notifications" : "Märguandeid pole",
|
||||
"Advanced options" : "Täpsemad valikud",
|
||||
"Today" : "Täna",
|
||||
"Tomorrow" : "Homme",
|
||||
"No results found" : "Otsingutulemusi ei leidu",
|
||||
"Due on {date}" : "Tähtaeg: {date}",
|
||||
"Close" : "Sulge",
|
||||
"Error creating the share" : "Viga jaosmeedia loomisel",
|
||||
"Share" : "Jaga",
|
||||
"Personal" : "Isiklik"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -90,7 +90,7 @@ OC.L10N.register(
|
||||
"Deck boards, cards and comments" : "Tableaux, cartes et commentaires de Deck",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "De %1$s, dans %2$s / %3$s, appartenant à %4$s",
|
||||
"Create a new deck card" : "Créer une nouvelle carte Deck",
|
||||
"Card comments" : "Commentaires des cartes",
|
||||
"Card comments" : "Commentaires de la carte",
|
||||
"%s on %s" : "%s sur %s",
|
||||
"Deck boards and cards" : "Tableaux et cartes de Deck",
|
||||
"No data was provided to create an attachment." : "Aucune donnée n'a été fournie pour créer une pièce jointe.",
|
||||
@@ -347,7 +347,7 @@ OC.L10N.register(
|
||||
"No notifications" : "Aucune notification",
|
||||
"Delete board" : "Supprimer le tableau",
|
||||
"Clone {boardTitle}" : "Cloner {boardTitle}",
|
||||
"Clone cards" : "Dupliquer les cartes",
|
||||
"Clone cards" : "Dupliquer des cartes",
|
||||
"Clone assignments" : "Cloner les affectations",
|
||||
"Clone labels" : "Cloner les étiquettes",
|
||||
"Clone due dates" : "Cloner les dates d'échéance",
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
"Deck boards, cards and comments" : "Tableaux, cartes et commentaires de Deck",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "De %1$s, dans %2$s / %3$s, appartenant à %4$s",
|
||||
"Create a new deck card" : "Créer une nouvelle carte Deck",
|
||||
"Card comments" : "Commentaires des cartes",
|
||||
"Card comments" : "Commentaires de la carte",
|
||||
"%s on %s" : "%s sur %s",
|
||||
"Deck boards and cards" : "Tableaux et cartes de Deck",
|
||||
"No data was provided to create an attachment." : "Aucune donnée n'a été fournie pour créer une pièce jointe.",
|
||||
@@ -345,7 +345,7 @@
|
||||
"No notifications" : "Aucune notification",
|
||||
"Delete board" : "Supprimer le tableau",
|
||||
"Clone {boardTitle}" : "Cloner {boardTitle}",
|
||||
"Clone cards" : "Dupliquer les cartes",
|
||||
"Clone cards" : "Dupliquer des cartes",
|
||||
"Clone assignments" : "Cloner les affectations",
|
||||
"Clone labels" : "Cloner les étiquettes",
|
||||
"Clone due dates" : "Cloner les dates d'échéance",
|
||||
|
||||
@@ -43,10 +43,10 @@ OC.L10N.register(
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} nustatė galutinį kortelės {card} terminą į {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Jūs atnaujinote galutinį kortelės {card} terminą į {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} atnaujino galutinį kortelės {card} terminą į {after}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} į kortelę {card} pridėjote žymą {label}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} į kortelę {card} pridėjo žymą {label}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} iš kortelės {card} pašalinote žymą {label}",
|
||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} iš kortelės {card} pašalino žymą {label}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} į kortelę {card} pridėjote žymę {label}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} į kortelę {card} pridėjo žymę {label}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} iš kortelės {card} pašalinote žymę {label}",
|
||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} iš kortelės {card} pašalino žymę {label}",
|
||||
"You have assigned {assigneduser} to card {card} on board {board}" : "Jūs lentoje {board} prie kortelės {card} priskyrėte {assigneduser}",
|
||||
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} lentoje {board} prie kortelės {card} priskyrė {assigneduser}",
|
||||
"You have moved the card {card} from list {stackBefore} to {stack}" : "Jūs perkėlėte kortelę {card} iš sąrašo {stackBefore} į sąrašą {stack}",
|
||||
@@ -120,9 +120,8 @@ OC.L10N.register(
|
||||
"List name" : "Sąrašo pavadinimas",
|
||||
"Active filters" : "Aktyvūs filtrai",
|
||||
"Apply filter" : "Taikyti filtrą",
|
||||
"Filter by tag" : "Filtruoti pagal žymą",
|
||||
"Filter by tag" : "Filtruoti pagal žymę",
|
||||
"Filter by assigned user" : "Filtruoti pagal priskirtą naudotoją",
|
||||
"Open and completed" : "Atidaryta ir atlikta",
|
||||
"Open" : "Atverti",
|
||||
"Completed" : "Užbaigta",
|
||||
"Filter by due date" : "Filtruoti pagal galutinio termino datą",
|
||||
@@ -141,7 +140,7 @@ OC.L10N.register(
|
||||
"Board not found" : "Lenta nerasta",
|
||||
"Create a new list to add cards to this board" : "Norėdami pridėti korteles į šią lentą, sukurkite naują sąrašą",
|
||||
"Sharing" : "Bendrinimas",
|
||||
"Tags" : "Žymos",
|
||||
"Tags" : "Žymės",
|
||||
"Deleted items" : "Ištrinti elementai",
|
||||
"Activity" : "Veikla",
|
||||
"Deleted lists" : "Ištrinti sąrašai",
|
||||
@@ -166,7 +165,7 @@ OC.L10N.register(
|
||||
"Card name" : "Kortelės pavadinimas",
|
||||
"title and color value must be provided" : "privalo būti pateiktos pavadinimo ir spalvos reikšmės",
|
||||
"Edit" : "Taisyti",
|
||||
"Add a new tag" : "Pridėti naują žymą",
|
||||
"Add a new tag" : "Pridėti naują žymę",
|
||||
"Board name" : "Lentos pavadinimas",
|
||||
"Members" : "Nariai",
|
||||
"Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…",
|
||||
@@ -214,7 +213,7 @@ OC.L10N.register(
|
||||
"Mark as done" : "Žymėti kaip atliktą",
|
||||
"Unarchive card" : "Išarchyvuoti kortelę",
|
||||
"Archive card" : "Archyvuoti kortelę",
|
||||
"Assign a tag to this card…" : "Priskirti šiai kortelei žymą…",
|
||||
"Assign a tag to this card…" : "Priskirti šiai kortelei žymę…",
|
||||
"(group)" : "(grupė)",
|
||||
"{count} comments, {unread} unread" : "Komentarų: {count}, neskaityta: {unread}",
|
||||
"Open link" : "Atverti nuorodą",
|
||||
|
||||
@@ -41,10 +41,10 @@
|
||||
"{user} has set the due date of card {card} to {after}" : "{user} nustatė galutinį kortelės {card} terminą į {after}",
|
||||
"You have updated the due date of card {card} to {after}" : "Jūs atnaujinote galutinį kortelės {card} terminą į {after}",
|
||||
"{user} has updated the due date of card {card} to {after}" : "{user} atnaujino galutinį kortelės {card} terminą į {after}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} į kortelę {card} pridėjote žymą {label}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} į kortelę {card} pridėjo žymą {label}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} iš kortelės {card} pašalinote žymą {label}",
|
||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} iš kortelės {card} pašalino žymą {label}",
|
||||
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} į kortelę {card} pridėjote žymę {label}",
|
||||
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} į kortelę {card} pridėjo žymę {label}",
|
||||
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Jūs lentoje {board}, sąraše {stack} iš kortelės {card} pašalinote žymę {label}",
|
||||
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} lentoje {board}, sąraše {stack} iš kortelės {card} pašalino žymę {label}",
|
||||
"You have assigned {assigneduser} to card {card} on board {board}" : "Jūs lentoje {board} prie kortelės {card} priskyrėte {assigneduser}",
|
||||
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} lentoje {board} prie kortelės {card} priskyrė {assigneduser}",
|
||||
"You have moved the card {card} from list {stackBefore} to {stack}" : "Jūs perkėlėte kortelę {card} iš sąrašo {stackBefore} į sąrašą {stack}",
|
||||
@@ -118,9 +118,8 @@
|
||||
"List name" : "Sąrašo pavadinimas",
|
||||
"Active filters" : "Aktyvūs filtrai",
|
||||
"Apply filter" : "Taikyti filtrą",
|
||||
"Filter by tag" : "Filtruoti pagal žymą",
|
||||
"Filter by tag" : "Filtruoti pagal žymę",
|
||||
"Filter by assigned user" : "Filtruoti pagal priskirtą naudotoją",
|
||||
"Open and completed" : "Atidaryta ir atlikta",
|
||||
"Open" : "Atverti",
|
||||
"Completed" : "Užbaigta",
|
||||
"Filter by due date" : "Filtruoti pagal galutinio termino datą",
|
||||
@@ -139,7 +138,7 @@
|
||||
"Board not found" : "Lenta nerasta",
|
||||
"Create a new list to add cards to this board" : "Norėdami pridėti korteles į šią lentą, sukurkite naują sąrašą",
|
||||
"Sharing" : "Bendrinimas",
|
||||
"Tags" : "Žymos",
|
||||
"Tags" : "Žymės",
|
||||
"Deleted items" : "Ištrinti elementai",
|
||||
"Activity" : "Veikla",
|
||||
"Deleted lists" : "Ištrinti sąrašai",
|
||||
@@ -164,7 +163,7 @@
|
||||
"Card name" : "Kortelės pavadinimas",
|
||||
"title and color value must be provided" : "privalo būti pateiktos pavadinimo ir spalvos reikšmės",
|
||||
"Edit" : "Taisyti",
|
||||
"Add a new tag" : "Pridėti naują žymą",
|
||||
"Add a new tag" : "Pridėti naują žymę",
|
||||
"Board name" : "Lentos pavadinimas",
|
||||
"Members" : "Nariai",
|
||||
"Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…",
|
||||
@@ -212,7 +211,7 @@
|
||||
"Mark as done" : "Žymėti kaip atliktą",
|
||||
"Unarchive card" : "Išarchyvuoti kortelę",
|
||||
"Archive card" : "Archyvuoti kortelę",
|
||||
"Assign a tag to this card…" : "Priskirti šiai kortelei žymą…",
|
||||
"Assign a tag to this card…" : "Priskirti šiai kortelei žymę…",
|
||||
"(group)" : "(grupė)",
|
||||
"{count} comments, {unread} unread" : "Komentarų: {count}, neskaityta: {unread}",
|
||||
"Open link" : "Atverti nuorodą",
|
||||
|
||||
@@ -18,14 +18,13 @@ OC.L10N.register(
|
||||
"Could not write file to disk" : "Nevarēja ierakstīt datni diskā",
|
||||
"A PHP extension stopped the file upload" : "PHP paplašinājums apturēja datnes augšupielādi",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Nederīgs datums, datuma formātam jābūt YYYY-MM-DD",
|
||||
"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 ir kanban veida organizēšanas rīks, kas paredzēts personīgai plānošanai un projektu orgenizēšanai komandām, kas ir iekļauts Nextcloud.\n\n\n- 📥 Uzdevumu pievienošana kartītēm un to sakārtošana\n- 📄 Papildu piezīmes var pierakstīt ar Markdown\n- 🔖 Vēl labākai pārraudzībai var piešķirt iezīmes\n- 👥 Koplietošana ar savu komandu, draugiem vai ģimeni\n- 📎 Datņu pievienošana un iekļaušana Markdown aprakstā\n- 💬 Apspriešana ar savu komandu ar piebildēm\n- ⚡ Izmaiņu izsekošana darbību plūsmā\n- 🚀 Sava projekta sakārtošana",
|
||||
"Cancel" : "Atcelt",
|
||||
"File already exists" : "Datne jau pastāv",
|
||||
"Do you want to overwrite it?" : "Vai tu gribi pārrakstīt to?",
|
||||
"Open" : "Atvērt",
|
||||
"Completed" : "Pabeigts",
|
||||
"Clear filter" : "Notīrīt atlasi",
|
||||
"Hide archived cards" : "Paslēpt arhivētās kartes",
|
||||
"Hide archived cards" : "Slēpt arhivētās kartes",
|
||||
"Show archived cards" : "Rādīt arhivētās kartes",
|
||||
"Open details" : "Atvērt detaļas",
|
||||
"Details" : "Detaļas",
|
||||
@@ -38,14 +37,13 @@ OC.L10N.register(
|
||||
"Can edit" : "Var labot",
|
||||
"Can share" : "Var koplietot",
|
||||
"Owner" : "Īpašnieks",
|
||||
"Delete" : "Izdzēst",
|
||||
"Delete" : "Dzēst",
|
||||
"Edit" : "Labot",
|
||||
"Members" : "Biedri",
|
||||
"File to share" : "Kopīgojamā datne",
|
||||
"Download" : "Lejupielādēt",
|
||||
"Modified" : "Mainīts",
|
||||
"Created" : "Izveidots",
|
||||
"Open in sidebar view" : "Atvērt sānjoslas skatā",
|
||||
"Attachments" : "Pielikumi",
|
||||
"Comments" : "Piebildes",
|
||||
"Save" : "Saglabāt",
|
||||
@@ -55,7 +53,6 @@ OC.L10N.register(
|
||||
"Description" : "Apraksts",
|
||||
"Select Date" : "Izvēlieties datumu",
|
||||
"(group)" : "(grupa)",
|
||||
"Open link" : "Atvērt saiti",
|
||||
"seconds ago" : "sekundēm",
|
||||
"Keyboard shortcuts" : "Tastatūras saīsnes",
|
||||
"Keyboard shortcut" : "Tastatūras saīsne",
|
||||
|
||||
@@ -16,14 +16,13 @@
|
||||
"Could not write file to disk" : "Nevarēja ierakstīt datni diskā",
|
||||
"A PHP extension stopped the file upload" : "PHP paplašinājums apturēja datnes augšupielādi",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "Nederīgs datums, datuma formātam jābūt YYYY-MM-DD",
|
||||
"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 ir kanban veida organizēšanas rīks, kas paredzēts personīgai plānošanai un projektu orgenizēšanai komandām, kas ir iekļauts Nextcloud.\n\n\n- 📥 Uzdevumu pievienošana kartītēm un to sakārtošana\n- 📄 Papildu piezīmes var pierakstīt ar Markdown\n- 🔖 Vēl labākai pārraudzībai var piešķirt iezīmes\n- 👥 Koplietošana ar savu komandu, draugiem vai ģimeni\n- 📎 Datņu pievienošana un iekļaušana Markdown aprakstā\n- 💬 Apspriešana ar savu komandu ar piebildēm\n- ⚡ Izmaiņu izsekošana darbību plūsmā\n- 🚀 Sava projekta sakārtošana",
|
||||
"Cancel" : "Atcelt",
|
||||
"File already exists" : "Datne jau pastāv",
|
||||
"Do you want to overwrite it?" : "Vai tu gribi pārrakstīt to?",
|
||||
"Open" : "Atvērt",
|
||||
"Completed" : "Pabeigts",
|
||||
"Clear filter" : "Notīrīt atlasi",
|
||||
"Hide archived cards" : "Paslēpt arhivētās kartes",
|
||||
"Hide archived cards" : "Slēpt arhivētās kartes",
|
||||
"Show archived cards" : "Rādīt arhivētās kartes",
|
||||
"Open details" : "Atvērt detaļas",
|
||||
"Details" : "Detaļas",
|
||||
@@ -36,14 +35,13 @@
|
||||
"Can edit" : "Var labot",
|
||||
"Can share" : "Var koplietot",
|
||||
"Owner" : "Īpašnieks",
|
||||
"Delete" : "Izdzēst",
|
||||
"Delete" : "Dzēst",
|
||||
"Edit" : "Labot",
|
||||
"Members" : "Biedri",
|
||||
"File to share" : "Kopīgojamā datne",
|
||||
"Download" : "Lejupielādēt",
|
||||
"Modified" : "Mainīts",
|
||||
"Created" : "Izveidots",
|
||||
"Open in sidebar view" : "Atvērt sānjoslas skatā",
|
||||
"Attachments" : "Pielikumi",
|
||||
"Comments" : "Piebildes",
|
||||
"Save" : "Saglabāt",
|
||||
@@ -53,7 +51,6 @@
|
||||
"Description" : "Apraksts",
|
||||
"Select Date" : "Izvēlieties datumu",
|
||||
"(group)" : "(grupa)",
|
||||
"Open link" : "Atvērt saiti",
|
||||
"seconds ago" : "sekundēm",
|
||||
"Keyboard shortcuts" : "Tastatūras saīsnes",
|
||||
"Keyboard shortcut" : "Tastatūras saīsne",
|
||||
|
||||
@@ -76,7 +76,6 @@ OC.L10N.register(
|
||||
"Cards due tomorrow" : "Cartões com vencimento amanhã",
|
||||
"Upcoming cards" : "Próximos cartões",
|
||||
"Load more" : "Carregar mais",
|
||||
"Welcome to Nextcloud Deck!" : "Bem-vindo ao Nextcloud Deck!",
|
||||
"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." : "{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.",
|
||||
@@ -85,30 +84,23 @@ OC.L10N.register(
|
||||
"{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 o {deck-board} com você.",
|
||||
"Deck board" : "Painel de Deck",
|
||||
"Deck board" : "Painel de deck",
|
||||
"Owned by %1$s" : "Propriedade de %1$s",
|
||||
"Deck boards, cards and comments" : "Paineis, cartões e comentários de Deck",
|
||||
"Deck boards, cards and comments" : "Quadros de aviso Deck, quadros de aviso e comentários",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "De %1$s, em %2$s/%3$s, propriedade de %4$s",
|
||||
"Create a new deck card" : "Crie um novo cartão de Deck",
|
||||
"Create a new deck card" : "Crie uma nova carta de deck",
|
||||
"Card comments" : "Comentários do cartão",
|
||||
"%s on %s" : "%s em %s",
|
||||
"Deck boards and cards" : "Paineis e cartões de Deck",
|
||||
"Deck boards and cards" : "Quadros de aviso e cartas Deck",
|
||||
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
|
||||
"Finished" : "Terminado",
|
||||
"To review" : "Para revisão",
|
||||
"Action needed" : "Ação necessária",
|
||||
"Later" : "Depois",
|
||||
"copy" : "copiar",
|
||||
"Read more inside" : "Leia mais no interior",
|
||||
"Custom lists - click to rename!" : "Listas personalizadas - clique para renomear!",
|
||||
"To Do" : "A Fazer",
|
||||
"In Progress" : "Em Andamento",
|
||||
"Done" : "Concluído",
|
||||
"1. Open to learn more about boards and cards" : "1. Abra para saber mais sobre cartões e placas",
|
||||
"2. Drag cards left and right, up and down" : "2. Arraste as cartas para a esquerda e para a direita, para cima e para baixo",
|
||||
"3. Apply rich formatting and link content" : "3. Aplique formatação avançada e conteúdo de links",
|
||||
"4. Share, comment and collaborate!" : "4. Compartilhe, comente e colabore!",
|
||||
"Create your first card!" : "Crie seu primeiro cartão!",
|
||||
"The file was uploaded" : "O arquivo foi enviado",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O arquivo enviado excede a diretiva upload_max_filesize do php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O arquivo enviado excede a diretiva MAX_FILE_SIZE especificada no formulário HTML",
|
||||
@@ -116,7 +108,7 @@ OC.L10N.register(
|
||||
"No file was uploaded" : "Nenhum arquivo foi enviado",
|
||||
"Missing a temporary folder" : "Falta uma pasta temporária",
|
||||
"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 upload do arquivo",
|
||||
"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.\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",
|
||||
@@ -129,12 +121,10 @@ OC.L10N.register(
|
||||
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto",
|
||||
"Search by board title" : "Pesquisar pelo título do painel",
|
||||
"Select board" : "Selecionar painel",
|
||||
"Move/copy card" : "Mover/copiar cartão",
|
||||
"Select a board" : "Selecionar um painel",
|
||||
"No lists available" : "Nenhuma lista disponível",
|
||||
"Select a list" : "Selecione uma lista",
|
||||
"Move card" : "Mover cartão",
|
||||
"Copy card" : "Copiar o cartão",
|
||||
"Select the card to link to a project" : "Selecione o cartão para vincular a um projeto",
|
||||
"Link to card" : "Vincular ao cartão",
|
||||
"Select a card" : "Selecionar um cartão",
|
||||
@@ -273,7 +263,7 @@ OC.L10N.register(
|
||||
"Remove due date" : "Remover data de vencimento",
|
||||
"Mark as done" : "Marcar como concluído",
|
||||
"Due at:" : "Vencimento em:",
|
||||
"Not done" : "Não concluído",
|
||||
"Not done" : "Não realizado",
|
||||
"Unarchive card" : "Desarquivar cartão",
|
||||
"Archive card" : "Arquivar cartão",
|
||||
"Assign a tag to this card…" : "Atribuir uma etiqueta a este cartão...",
|
||||
@@ -347,14 +337,8 @@ OC.L10N.register(
|
||||
"Assigned cards" : "Cartões atribuídos",
|
||||
"No notifications" : "Sem notificações",
|
||||
"Delete board" : "Excluir painel",
|
||||
"Clone {boardTitle}" : "Clonar {boardTitle}",
|
||||
"Clone cards" : "Clonar cartões",
|
||||
"Clone assignments" : "Clonar atribuições",
|
||||
"Clone labels" : "Clonar rótulos",
|
||||
"Clone due dates" : "Clonar datas de vencimento",
|
||||
"Advanced options" : "Opções avançadas",
|
||||
"Move all cards to the first list" : "Mova todos os cartões para a primeira lista",
|
||||
"Restore archived cards" : "Restaure cartões arquivados",
|
||||
"Clone" : "Clonar",
|
||||
"Loading filtered view" : "Carregando exibição filtrada",
|
||||
"Today" : "Hoje",
|
||||
@@ -362,7 +346,7 @@ OC.L10N.register(
|
||||
"No due" : "Sem vencimento",
|
||||
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
|
||||
"No results found" : "Nenhum resultado encontrado",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Painel de Deck {name}\n* Última modificação em {lastMod}",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Quadros de aviso Deck {name}\n* Última modificação em {lastMod}",
|
||||
"* 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",
|
||||
"Due on {date}" : "Vencimento em {date}",
|
||||
@@ -380,7 +364,7 @@ OC.L10N.register(
|
||||
"upcoming cards today" : "próximos cartões hoje",
|
||||
"upcoming cards tomorrow" : "próximos cartões amanhã",
|
||||
"upcoming cards" : "próximos cartões",
|
||||
"New card" : "Novo cartão",
|
||||
"New card" : "New card",
|
||||
"Link to a board" : "Vincular a um painel",
|
||||
"Link to a card" : "Vincular a um cartão",
|
||||
"Create a card" : "Criar um cartão",
|
||||
|
||||
@@ -74,7 +74,6 @@
|
||||
"Cards due tomorrow" : "Cartões com vencimento amanhã",
|
||||
"Upcoming cards" : "Próximos cartões",
|
||||
"Load more" : "Carregar mais",
|
||||
"Welcome to Nextcloud Deck!" : "Bem-vindo ao Nextcloud Deck!",
|
||||
"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." : "{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.",
|
||||
@@ -83,30 +82,23 @@
|
||||
"{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 o {deck-board} com você.",
|
||||
"Deck board" : "Painel de Deck",
|
||||
"Deck board" : "Painel de deck",
|
||||
"Owned by %1$s" : "Propriedade de %1$s",
|
||||
"Deck boards, cards and comments" : "Paineis, cartões e comentários de Deck",
|
||||
"Deck boards, cards and comments" : "Quadros de aviso Deck, quadros de aviso e comentários",
|
||||
"From %1$s, in %2$s/%3$s, owned by %4$s" : "De %1$s, em %2$s/%3$s, propriedade de %4$s",
|
||||
"Create a new deck card" : "Crie um novo cartão de Deck",
|
||||
"Create a new deck card" : "Crie uma nova carta de deck",
|
||||
"Card comments" : "Comentários do cartão",
|
||||
"%s on %s" : "%s em %s",
|
||||
"Deck boards and cards" : "Paineis e cartões de Deck",
|
||||
"Deck boards and cards" : "Quadros de aviso e cartas Deck",
|
||||
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
|
||||
"Finished" : "Terminado",
|
||||
"To review" : "Para revisão",
|
||||
"Action needed" : "Ação necessária",
|
||||
"Later" : "Depois",
|
||||
"copy" : "copiar",
|
||||
"Read more inside" : "Leia mais no interior",
|
||||
"Custom lists - click to rename!" : "Listas personalizadas - clique para renomear!",
|
||||
"To Do" : "A Fazer",
|
||||
"In Progress" : "Em Andamento",
|
||||
"Done" : "Concluído",
|
||||
"1. Open to learn more about boards and cards" : "1. Abra para saber mais sobre cartões e placas",
|
||||
"2. Drag cards left and right, up and down" : "2. Arraste as cartas para a esquerda e para a direita, para cima e para baixo",
|
||||
"3. Apply rich formatting and link content" : "3. Aplique formatação avançada e conteúdo de links",
|
||||
"4. Share, comment and collaborate!" : "4. Compartilhe, comente e colabore!",
|
||||
"Create your first card!" : "Crie seu primeiro cartão!",
|
||||
"The file was uploaded" : "O arquivo foi enviado",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O arquivo enviado excede a diretiva upload_max_filesize do php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O arquivo enviado excede a diretiva MAX_FILE_SIZE especificada no formulário HTML",
|
||||
@@ -114,7 +106,7 @@
|
||||
"No file was uploaded" : "Nenhum arquivo foi enviado",
|
||||
"Missing a temporary folder" : "Falta uma pasta temporária",
|
||||
"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 upload do arquivo",
|
||||
"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.\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",
|
||||
@@ -127,12 +119,10 @@
|
||||
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto",
|
||||
"Search by board title" : "Pesquisar pelo título do painel",
|
||||
"Select board" : "Selecionar painel",
|
||||
"Move/copy card" : "Mover/copiar cartão",
|
||||
"Select a board" : "Selecionar um painel",
|
||||
"No lists available" : "Nenhuma lista disponível",
|
||||
"Select a list" : "Selecione uma lista",
|
||||
"Move card" : "Mover cartão",
|
||||
"Copy card" : "Copiar o cartão",
|
||||
"Select the card to link to a project" : "Selecione o cartão para vincular a um projeto",
|
||||
"Link to card" : "Vincular ao cartão",
|
||||
"Select a card" : "Selecionar um cartão",
|
||||
@@ -271,7 +261,7 @@
|
||||
"Remove due date" : "Remover data de vencimento",
|
||||
"Mark as done" : "Marcar como concluído",
|
||||
"Due at:" : "Vencimento em:",
|
||||
"Not done" : "Não concluído",
|
||||
"Not done" : "Não realizado",
|
||||
"Unarchive card" : "Desarquivar cartão",
|
||||
"Archive card" : "Arquivar cartão",
|
||||
"Assign a tag to this card…" : "Atribuir uma etiqueta a este cartão...",
|
||||
@@ -345,14 +335,8 @@
|
||||
"Assigned cards" : "Cartões atribuídos",
|
||||
"No notifications" : "Sem notificações",
|
||||
"Delete board" : "Excluir painel",
|
||||
"Clone {boardTitle}" : "Clonar {boardTitle}",
|
||||
"Clone cards" : "Clonar cartões",
|
||||
"Clone assignments" : "Clonar atribuições",
|
||||
"Clone labels" : "Clonar rótulos",
|
||||
"Clone due dates" : "Clonar datas de vencimento",
|
||||
"Advanced options" : "Opções avançadas",
|
||||
"Move all cards to the first list" : "Mova todos os cartões para a primeira lista",
|
||||
"Restore archived cards" : "Restaure cartões arquivados",
|
||||
"Clone" : "Clonar",
|
||||
"Loading filtered view" : "Carregando exibição filtrada",
|
||||
"Today" : "Hoje",
|
||||
@@ -360,7 +344,7 @@
|
||||
"No due" : "Sem vencimento",
|
||||
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
|
||||
"No results found" : "Nenhum resultado encontrado",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Painel de Deck {name}\n* Última modificação em {lastMod}",
|
||||
"Deck board {name}\n* Last modified on {lastMod}" : "Quadros de aviso Deck {name}\n* Última modificação em {lastMod}",
|
||||
"* 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",
|
||||
"Due on {date}" : "Vencimento em {date}",
|
||||
@@ -378,7 +362,7 @@
|
||||
"upcoming cards today" : "próximos cartões hoje",
|
||||
"upcoming cards tomorrow" : "próximos cartões amanhã",
|
||||
"upcoming cards" : "próximos cartões",
|
||||
"New card" : "Novo cartão",
|
||||
"New card" : "New card",
|
||||
"Link to a board" : "Vincular a um painel",
|
||||
"Link to a card" : "Vincular a um cartão",
|
||||
"Create a card" : "Criar um cartão",
|
||||
|
||||
@@ -148,7 +148,6 @@ OC.L10N.register(
|
||||
"Search" : "Pesquisa sobre",
|
||||
"Archived boards" : "Quadros arquivados",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Cancel edit" : "Cancelar edição",
|
||||
"No reminder" : "Nenhum lembrete",
|
||||
"An error occurred" : "Ocorreu um erro",
|
||||
"Board details" : "Detalhes do quadro",
|
||||
|
||||
@@ -146,7 +146,6 @@
|
||||
"Search" : "Pesquisa sobre",
|
||||
"Archived boards" : "Quadros arquivados",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Cancel edit" : "Cancelar edição",
|
||||
"No reminder" : "Nenhum lembrete",
|
||||
"An error occurred" : "Ocorreu um erro",
|
||||
"Board details" : "Detalhes do quadro",
|
||||
|
||||
@@ -86,7 +86,7 @@ OC.L10N.register(
|
||||
"Select a card" : "Вибрати картку",
|
||||
"Cancel" : "Скасувати",
|
||||
"This board is read only" : "Дошка тільки для читання",
|
||||
"Drop your files to upload" : "Перетягнути файли для завантаження",
|
||||
"Drop your files to upload" : "Пересуньте файли сюди для завантаження",
|
||||
"File already exists" : "Файл вже існує",
|
||||
"A file with the name {filename} already exists." : "Файл {filename} вже існує.",
|
||||
"Do you want to overwrite it?" : "Дійсно перезаписати файл?",
|
||||
@@ -97,7 +97,7 @@ OC.L10N.register(
|
||||
"Add list" : "Додати список",
|
||||
"List name" : "Назва списку",
|
||||
"Active filters" : "Активні фільтри",
|
||||
"Apply filter" : "Фільтрувати",
|
||||
"Apply filter" : "Відфільтрувати",
|
||||
"Filter by tag" : "Відібрати за мітками",
|
||||
"Filter by assigned user" : "Відібрати за призначеним користувачем",
|
||||
"Unassigned" : "Скасовано призначення",
|
||||
@@ -127,7 +127,7 @@ OC.L10N.register(
|
||||
"Transfer" : "Передати",
|
||||
"Board owner" : "Власник дошки",
|
||||
"(Group)" : "(група)",
|
||||
"Can edit" : "Може редагувати",
|
||||
"Can edit" : "Можна редагувати",
|
||||
"Can share" : "Can share",
|
||||
"Can manage" : "Може керувати",
|
||||
"Owner" : "Власник",
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
"Select a card" : "Вибрати картку",
|
||||
"Cancel" : "Скасувати",
|
||||
"This board is read only" : "Дошка тільки для читання",
|
||||
"Drop your files to upload" : "Перетягнути файли для завантаження",
|
||||
"Drop your files to upload" : "Пересуньте файли сюди для завантаження",
|
||||
"File already exists" : "Файл вже існує",
|
||||
"A file with the name {filename} already exists." : "Файл {filename} вже існує.",
|
||||
"Do you want to overwrite it?" : "Дійсно перезаписати файл?",
|
||||
@@ -95,7 +95,7 @@
|
||||
"Add list" : "Додати список",
|
||||
"List name" : "Назва списку",
|
||||
"Active filters" : "Активні фільтри",
|
||||
"Apply filter" : "Фільтрувати",
|
||||
"Apply filter" : "Відфільтрувати",
|
||||
"Filter by tag" : "Відібрати за мітками",
|
||||
"Filter by assigned user" : "Відібрати за призначеним користувачем",
|
||||
"Unassigned" : "Скасовано призначення",
|
||||
@@ -125,7 +125,7 @@
|
||||
"Transfer" : "Передати",
|
||||
"Board owner" : "Власник дошки",
|
||||
"(Group)" : "(група)",
|
||||
"Can edit" : "Може редагувати",
|
||||
"Can edit" : "Можна редагувати",
|
||||
"Can share" : "Can share",
|
||||
"Can manage" : "Може керувати",
|
||||
"Owner" : "Власник",
|
||||
|
||||
49
l10n/uz.js
49
l10n/uz.js
@@ -1,75 +1,26 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Deck" : "Pastki qavat",
|
||||
"Upcoming cards" : "Kelgusi kartalar",
|
||||
"Deck board" : "Pastki taxta",
|
||||
"Later" : "Keyinchalik",
|
||||
"copy" : "copy",
|
||||
"Done" : "Done",
|
||||
"The file was uploaded" : "Fayl yuklangan edi",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yuklangan fayl php.ini dagi php-dagi upload_max_filesize direktivasidan oshadi",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yuklangan fayl HTML shaklida ko'rsatilgan MAX_FILE_SIZE direktivasidan oshadi",
|
||||
"The file was only partially uploaded" : "Fayl faqat qisman yuklandi",
|
||||
"No file was uploaded" : "Fayl yuklanmadi",
|
||||
"Missing a temporary folder" : "Vaqtinchalik papka etishmayapti",
|
||||
"Could not write file to disk" : "Faylni diskka yozib bo'lmadi",
|
||||
"A PHP extension stopped the file upload" : "PHP kengaytmasi faylni yuklashni to'xtatdi",
|
||||
"Card not found" : "Karta topilmadi",
|
||||
"Add board" : "Doska qo'shing",
|
||||
"Move card" : "Kartani ko'chirish",
|
||||
"Cancel" : "Cancel",
|
||||
"Add card" : "Karta qo'shing",
|
||||
"Archived cards" : "Arxivlangan kartalar",
|
||||
"Add list" : "Roʻyxat qoʻshish",
|
||||
"Unassigned" : "Tayinlanmagan",
|
||||
"Open" : "Open",
|
||||
"Overdue" : "Muddati o'tgan",
|
||||
"Next 7 days" : "Keyingi 7 kun",
|
||||
"Next 30 days" : "Keyingi 30 kun",
|
||||
"No due date" : "Muddati yo'q",
|
||||
"Details" : "Details",
|
||||
"Sharing" : "Ulashish",
|
||||
"Tags" : "Tags",
|
||||
"Activity" : "Faollik",
|
||||
"Undo" : "Bekor qilish",
|
||||
"Can edit" : "Can edit",
|
||||
"Owner" : "Owner",
|
||||
"Delete" : "Delete",
|
||||
"Delete list" : "Roʻyxatni oʻchirish",
|
||||
"Edit" : "Tahrirlash",
|
||||
"Download" : "Download",
|
||||
"Modified" : "Modified",
|
||||
"Attachments" : "Qo'shimchalar",
|
||||
"Comments" : "Comments",
|
||||
"Save" : "Save",
|
||||
"In reply to" : "ga javoban",
|
||||
"Reply" : "Javob bering",
|
||||
"Update" : "Update",
|
||||
"Description" : "Tavsif",
|
||||
"Edit description" : "Tavsifni tahrirlash",
|
||||
"Mark as done" : "Bajarildi deb belgilang",
|
||||
"Not done" : "Bajarilmadi",
|
||||
"Archive card" : "Arxiv kartasi",
|
||||
"Edit title" : "Sarlavhani tahrirlash",
|
||||
"Delete card" : "Kartani o'chirish",
|
||||
"seconds ago" : "seconds ago",
|
||||
"Search" : "Search",
|
||||
"Archived boards" : "Arxivlangan taxtalar",
|
||||
"Shared with you" : "Shared with you",
|
||||
"No reminder" : "Eslatma yo'q",
|
||||
"Edit board" : "Tahrirlash paneli",
|
||||
"Clone board" : "Klon taxtasi",
|
||||
"Archive board" : "Arxiv paneli",
|
||||
"No notifications" : "Hech qanday bildirishnoma yo'q",
|
||||
"Delete board" : "Panelni o'chirish",
|
||||
"Clone cards" : "Klon kartalari",
|
||||
"Clone" : "Klonlash",
|
||||
"Today" : "Today",
|
||||
"Tomorrow" : "Ertaga",
|
||||
"No results found" : "Hech qanday natija topilmadi",
|
||||
"Close" : "Close",
|
||||
"Share" : "Ulashish",
|
||||
"Personal" : "Personal"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
49
l10n/uz.json
49
l10n/uz.json
@@ -1,73 +1,24 @@
|
||||
{ "translations": {
|
||||
"Deck" : "Pastki qavat",
|
||||
"Upcoming cards" : "Kelgusi kartalar",
|
||||
"Deck board" : "Pastki taxta",
|
||||
"Later" : "Keyinchalik",
|
||||
"copy" : "copy",
|
||||
"Done" : "Done",
|
||||
"The file was uploaded" : "Fayl yuklangan edi",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yuklangan fayl php.ini dagi php-dagi upload_max_filesize direktivasidan oshadi",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yuklangan fayl HTML shaklida ko'rsatilgan MAX_FILE_SIZE direktivasidan oshadi",
|
||||
"The file was only partially uploaded" : "Fayl faqat qisman yuklandi",
|
||||
"No file was uploaded" : "Fayl yuklanmadi",
|
||||
"Missing a temporary folder" : "Vaqtinchalik papka etishmayapti",
|
||||
"Could not write file to disk" : "Faylni diskka yozib bo'lmadi",
|
||||
"A PHP extension stopped the file upload" : "PHP kengaytmasi faylni yuklashni to'xtatdi",
|
||||
"Card not found" : "Karta topilmadi",
|
||||
"Add board" : "Doska qo'shing",
|
||||
"Move card" : "Kartani ko'chirish",
|
||||
"Cancel" : "Cancel",
|
||||
"Add card" : "Karta qo'shing",
|
||||
"Archived cards" : "Arxivlangan kartalar",
|
||||
"Add list" : "Roʻyxat qoʻshish",
|
||||
"Unassigned" : "Tayinlanmagan",
|
||||
"Open" : "Open",
|
||||
"Overdue" : "Muddati o'tgan",
|
||||
"Next 7 days" : "Keyingi 7 kun",
|
||||
"Next 30 days" : "Keyingi 30 kun",
|
||||
"No due date" : "Muddati yo'q",
|
||||
"Details" : "Details",
|
||||
"Sharing" : "Ulashish",
|
||||
"Tags" : "Tags",
|
||||
"Activity" : "Faollik",
|
||||
"Undo" : "Bekor qilish",
|
||||
"Can edit" : "Can edit",
|
||||
"Owner" : "Owner",
|
||||
"Delete" : "Delete",
|
||||
"Delete list" : "Roʻyxatni oʻchirish",
|
||||
"Edit" : "Tahrirlash",
|
||||
"Download" : "Download",
|
||||
"Modified" : "Modified",
|
||||
"Attachments" : "Qo'shimchalar",
|
||||
"Comments" : "Comments",
|
||||
"Save" : "Save",
|
||||
"In reply to" : "ga javoban",
|
||||
"Reply" : "Javob bering",
|
||||
"Update" : "Update",
|
||||
"Description" : "Tavsif",
|
||||
"Edit description" : "Tavsifni tahrirlash",
|
||||
"Mark as done" : "Bajarildi deb belgilang",
|
||||
"Not done" : "Bajarilmadi",
|
||||
"Archive card" : "Arxiv kartasi",
|
||||
"Edit title" : "Sarlavhani tahrirlash",
|
||||
"Delete card" : "Kartani o'chirish",
|
||||
"seconds ago" : "seconds ago",
|
||||
"Search" : "Search",
|
||||
"Archived boards" : "Arxivlangan taxtalar",
|
||||
"Shared with you" : "Shared with you",
|
||||
"No reminder" : "Eslatma yo'q",
|
||||
"Edit board" : "Tahrirlash paneli",
|
||||
"Clone board" : "Klon taxtasi",
|
||||
"Archive board" : "Arxiv paneli",
|
||||
"No notifications" : "Hech qanday bildirishnoma yo'q",
|
||||
"Delete board" : "Panelni o'chirish",
|
||||
"Clone cards" : "Klon kartalari",
|
||||
"Clone" : "Klonlash",
|
||||
"Today" : "Today",
|
||||
"Tomorrow" : "Ertaga",
|
||||
"No results found" : "Hech qanday natija topilmadi",
|
||||
"Close" : "Close",
|
||||
"Share" : "Ulashish",
|
||||
"Personal" : "Personal"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -76,21 +76,6 @@ class AssignmentMapper extends DeckMapper implements IPermissionMapper {
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
|
||||
public function deleteByParticipantOnBoard(string $participant, int $boardId, $type = Assignment::TYPE_USER) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$cardIdQuery = $this->db->getQueryBuilder();
|
||||
$cardIdQuery->select('a.card_id')
|
||||
->from('deck_assigned_users', 'a')
|
||||
->innerJoin('a', 'deck_cards', 'c', 'c.id = a.card_id')
|
||||
->innerJoin('c', 'deck_stacks', 's', 's.id = c.stack_id')
|
||||
->where($cardIdQuery->expr()->eq('a.participant', $qb->createNamedParameter($participant, IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($cardIdQuery->expr()->eq('s.board_id', $qb->createNamedParameter($boardId, IQueryBuilder::PARAM_INT)))
|
||||
->andWhere($cardIdQuery->expr()->eq('a.type', $qb->createNamedParameter($type, IQueryBuilder::PARAM_INT)));
|
||||
$qb->delete('deck_assigned_users')
|
||||
->where($qb->expr()->in('card_id', $qb->createFunction($cardIdQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY));
|
||||
$qb->executeStatement();
|
||||
}
|
||||
|
||||
|
||||
public function isOwner($userId, $id): bool {
|
||||
return $this->cardMapper->isOwner($userId, $id);
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCA\Deck\Migration;
|
||||
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Migration\IOutput;
|
||||
use OCP\Migration\IRepairStep;
|
||||
|
||||
class LabelMismatchCleanup implements IRepairStep {
|
||||
|
||||
public function __construct(
|
||||
private IDBConnection $db,
|
||||
) {
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Migrate labels with wrong board mapping';
|
||||
}
|
||||
|
||||
public function run(IOutput $output) {
|
||||
// Find assingments where a label of another (wrong) board is used
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('al.id', 'al.label_id', 'al.card_id', 's.board_id as actual_board_id', 'l.board_id as wrong_id', 'l.color', 'l.title')
|
||||
->from('deck_assigned_labels', 'al')
|
||||
->innerJoin('al', 'deck_cards', 'c', 'c.id = al.card_id')
|
||||
->innerJoin('c', 'deck_stacks', 's', 'c.stack_id = s.id')
|
||||
->innerJoin('al', 'deck_labels', 'l', 'l.id = al.label_id')
|
||||
->where($qb->expr()->neq('l.board_id', 's.board_id'));
|
||||
|
||||
$labels = $qb->executeQUery()->fetchAll();
|
||||
if (count($labels) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$output->info('Found ' . count($labels) . ' labels with wrong board mapping');
|
||||
|
||||
foreach ($labels as $label) {
|
||||
// Select existing label on the correct board
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('deck_labels')
|
||||
->where($qb->expr()->eq('title', $qb->createNamedParameter($label['title'])))
|
||||
->andWhere($qb->expr()->eq('color', $qb->createNamedParameter($label['color'])))
|
||||
->andWhere($qb->expr()->eq('board_id', $qb->createNamedParameter($label['actual_board_id'])));
|
||||
$result = $qb->executeQuery();
|
||||
$newLabel = $result->fetchOne();
|
||||
$result->closeCursor();
|
||||
|
||||
if (!$newLabel) {
|
||||
// Create a new label with the same title and color on the correct board
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->insert('deck_labels')
|
||||
->values([
|
||||
'title' => $qb->createNamedParameter($label['title']),
|
||||
'color' => $qb->createNamedParameter($label['color']),
|
||||
'board_id' => $qb->createNamedParameter($label['actual_board_id']),
|
||||
]);
|
||||
$qb->executeStatement();
|
||||
$newLabel = $qb->getLastInsertId();
|
||||
$output->debug('Created new label ' . $label['title'] . ' on board ' . $label['actual_board_id']);
|
||||
} else {
|
||||
$output->debug('Found existing label ' . $label['title'] . ' on board ' . $label['actual_board_id']);
|
||||
}
|
||||
|
||||
// Update the assignment to use the new label
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->update('deck_assigned_labels')
|
||||
->set('label_id', $qb->createNamedParameter($newLabel))
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($label['id'])));
|
||||
$qb->executeStatement();
|
||||
$output->debug('Updated label assignment ' . $label['id'] . ' to use label ' . $newLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -106,21 +106,21 @@ class Notifier implements INotifier {
|
||||
[
|
||||
'deck-card' => [
|
||||
'type' => 'deck-card',
|
||||
'id' => (string)$cardId,
|
||||
'id' => $cardId,
|
||||
'name' => $params[0],
|
||||
'boardname' => (string)$params[1],
|
||||
'boardname' => $params[1],
|
||||
'stackname' => $stack->getTitle(),
|
||||
'link' => $this->getCardUrl($boardId, $cardId),
|
||||
],
|
||||
'deck-board' => [
|
||||
'type' => 'deck-board',
|
||||
'id' => (string)$boardId,
|
||||
'name' => (string)$params[1],
|
||||
'id' => $boardId,
|
||||
'name' => $params[1],
|
||||
'link' => $this->getBoardUrl($boardId),
|
||||
],
|
||||
'user' => [
|
||||
'type' => 'user',
|
||||
'id' => (string)$params[2],
|
||||
'id' => $params[2],
|
||||
'name' => $dn,
|
||||
]
|
||||
]
|
||||
@@ -143,16 +143,16 @@ class Notifier implements INotifier {
|
||||
[
|
||||
'deck-card' => [
|
||||
'type' => 'deck-card',
|
||||
'id' => (string)$cardId,
|
||||
'name' => (string)$params[0],
|
||||
'boardname' => (string)$params[1],
|
||||
'id' => $cardId,
|
||||
'name' => $params[0],
|
||||
'boardname' => $params[1],
|
||||
'stackname' => $stack->getTitle(),
|
||||
'link' => $this->getCardUrl($boardId, $cardId),
|
||||
],
|
||||
'deck-board' => [
|
||||
'type' => 'deck-board',
|
||||
'id' => (string)$boardId,
|
||||
'name' => (string)$params[1],
|
||||
'id' => $boardId,
|
||||
'name' => $params[1],
|
||||
'link' => $this->getBoardUrl($boardId),
|
||||
],
|
||||
]
|
||||
@@ -181,15 +181,15 @@ class Notifier implements INotifier {
|
||||
[
|
||||
'deck-card' => [
|
||||
'type' => 'deck-card',
|
||||
'id' => (string)$cardId,
|
||||
'name' => (string)$params[0],
|
||||
'boardname' => (string)$params[1],
|
||||
'id' => $cardId,
|
||||
'name' => $params[0],
|
||||
'boardname' => $params[1],
|
||||
'stackname' => $stack->getTitle(),
|
||||
'link' => $this->getCardUrl($boardId, $cardId),
|
||||
],
|
||||
'user' => [
|
||||
'type' => 'user',
|
||||
'id' => (string)$params[2],
|
||||
'id' => $params[2],
|
||||
'name' => $dn,
|
||||
]
|
||||
]
|
||||
@@ -218,8 +218,8 @@ class Notifier implements INotifier {
|
||||
[
|
||||
'deck-board' => [
|
||||
'type' => 'deck-board',
|
||||
'id' => (string)$boardId,
|
||||
'name' => (string)$params[0],
|
||||
'id' => $boardId,
|
||||
'name' => $params[0],
|
||||
'link' => $this->getBoardUrl($boardId),
|
||||
],
|
||||
'user' => [
|
||||
|
||||
@@ -444,7 +444,10 @@ class BoardService {
|
||||
$acl = $this->aclMapper->find($id);
|
||||
$this->boardMapper->mapAcl($acl);
|
||||
if ($acl->getType() === Acl::PERMISSION_TYPE_USER) {
|
||||
$this->assignedUsersMapper->deleteByParticipantOnBoard($acl->getParticipant(), $acl->getBoardId());
|
||||
$assignements = $this->assignedUsersMapper->findByParticipant($acl->getParticipant());
|
||||
foreach ($assignements as $assignement) {
|
||||
$this->assignedUsersMapper->delete($assignement);
|
||||
}
|
||||
}
|
||||
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $acl, ActivityManager::SUBJECT_BOARD_UNSHARE);
|
||||
@@ -762,8 +765,6 @@ class BoardService {
|
||||
$fullCards = [];
|
||||
foreach ($cards as $card) {
|
||||
$fullCard = $this->cardMapper->find($card->getId());
|
||||
$assignedUsers = $this->assignedUsersMapper->findAll($card->getId());
|
||||
$fullCard->setAssignedUsers($assignedUsers);
|
||||
array_push($fullCards, $fullCard);
|
||||
}
|
||||
$stack->setCards($fullCards);
|
||||
|
||||
@@ -609,9 +609,8 @@ class CardService {
|
||||
public function assignLabel($cardId, $labelId) {
|
||||
$this->cardServiceValidator->check(compact('cardId', 'labelId'));
|
||||
|
||||
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
|
||||
$this->permissionService->checkPermission($this->labelMapper, $labelId, Acl::PERMISSION_READ);
|
||||
|
||||
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
|
||||
if ($this->boardService->isArchived($this->cardMapper, $cardId)) {
|
||||
throw new StatusException('Operation not allowed. This board is archived.');
|
||||
}
|
||||
@@ -620,9 +619,6 @@ class CardService {
|
||||
throw new StatusException('Operation not allowed. This card is archived.');
|
||||
}
|
||||
$label = $this->labelMapper->find($labelId);
|
||||
if ($label->getBoardId() !== $this->cardMapper->findBoardId($card->getId())) {
|
||||
throw new StatusException('Operation not allowed. Label does not exist.');
|
||||
}
|
||||
$this->cardMapper->assignLabel($cardId, $labelId);
|
||||
$this->changeHelper->cardChanged($cardId);
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $card, ActivityManager::SUBJECT_LABEL_ASSIGN, ['label' => $label]);
|
||||
@@ -644,8 +640,6 @@ class CardService {
|
||||
|
||||
|
||||
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
|
||||
$this->permissionService->checkPermission($this->labelMapper, $labelId, Acl::PERMISSION_READ);
|
||||
|
||||
if ($this->boardService->isArchived($this->cardMapper, $cardId)) {
|
||||
throw new StatusException('Operation not allowed. This board is archived.');
|
||||
}
|
||||
@@ -654,9 +648,6 @@ class CardService {
|
||||
throw new StatusException('Operation not allowed. This card is archived.');
|
||||
}
|
||||
$label = $this->labelMapper->find($labelId);
|
||||
if ($label->getBoardId() !== $this->cardMapper->findBoardId($card->getId())) {
|
||||
throw new StatusException('Operation not allowed. Label does not exist.');
|
||||
}
|
||||
$this->cardMapper->removeLabel($cardId, $labelId);
|
||||
$this->changeHelper->cardChanged($cardId);
|
||||
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_CARD, $card, ActivityManager::SUBJECT_LABEL_UNASSING, ['label' => $label]);
|
||||
|
||||
@@ -270,7 +270,7 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
||||
|
||||
private function applyBoardPermission($share, $permissions, $userId) {
|
||||
try {
|
||||
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_EDIT, $userId, true);
|
||||
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_EDIT, $userId);
|
||||
} catch (NoPermissionException $e) {
|
||||
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_UPDATE;
|
||||
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_CREATE;
|
||||
@@ -278,7 +278,7 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
||||
}
|
||||
|
||||
try {
|
||||
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_SHARE, $userId, true);
|
||||
$this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_SHARE, $userId);
|
||||
} catch (NoPermissionException $e) {
|
||||
$permissions &= Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE;
|
||||
}
|
||||
@@ -747,8 +747,6 @@ class DeckShareProvider implements \OCP\Share\IShareProvider {
|
||||
$qb->expr()->eq('s.item_type', $qb->createNamedParameter('folder'))
|
||||
));
|
||||
|
||||
$qb->andWhere($qb->expr()->eq('dc.deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
$cursor = $qb->execute();
|
||||
while ($data = $cursor->fetch()) {
|
||||
if (!$this->isAccessibleResult($data)) {
|
||||
|
||||
12058
package-lock.json
generated
12058
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
32
package.json
32
package.json
@@ -31,11 +31,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@babel/runtime": "^7.26.7",
|
||||
"@nextcloud/auth": "^2.4.0",
|
||||
"@nextcloud/axios": "^2.5.1",
|
||||
"@nextcloud/capabilities": "^1.2.0",
|
||||
"@nextcloud/dialogs": "^6.0.1",
|
||||
"@nextcloud/dialogs": "github:nextcloud-libraries/nextcloud-dialogs#vue3",
|
||||
"@nextcloud/event-bus": "^3.3.2",
|
||||
"@nextcloud/files": "^3.10.1",
|
||||
"@nextcloud/initial-state": "^2.2.0",
|
||||
@@ -43,10 +43,14 @@
|
||||
"@nextcloud/moment": "^1.3.2",
|
||||
"@nextcloud/notify_push": "^1.3.0",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/vue": "^8.25.1",
|
||||
"@nextcloud/vue": "^9.0.0-alpha.7",
|
||||
"@vue/compat": "^3.5.13",
|
||||
"@vue/compiler-sfc": "^3.5.13",
|
||||
"@vue/vue3-jest": "^29.2.6",
|
||||
"@vueuse/core": "^13.1.0",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"chroma-js": "^3.1.2",
|
||||
"dompurify": "^3.2.5",
|
||||
"dompurify": "^3.2.4",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
@@ -54,16 +58,14 @@
|
||||
"moment": "^2.30.1",
|
||||
"p-queue": "^8.0.1",
|
||||
"url-search-params-polyfill": "^8.2.5",
|
||||
"vue": "^2.7.15",
|
||||
"vue-at": "^2.5.1",
|
||||
"v3-infinite-loading": "^1.3.2",
|
||||
"vue": "^3.5.13",
|
||||
"vue-click-outside": "^1.1.0",
|
||||
"vue-easymde": "^2.0.0",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-material-design-icons": "^5.3.1",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue-smooth-dnd": "^0.8.1",
|
||||
"vuex": "^3.6.2",
|
||||
"vuex-router-sync": "^5.0.0"
|
||||
"vue-router": "^4.5.0",
|
||||
"vue3-smooth-dnd": "^0.0.6",
|
||||
"vuex": "^4.1.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"extends @nextcloud/browserslist-config"
|
||||
@@ -78,17 +80,15 @@
|
||||
"@nextcloud/cypress": "^1.0.0-beta.13",
|
||||
"@nextcloud/eslint-config": "^8.4.2",
|
||||
"@nextcloud/stylelint-config": "^3.0.1",
|
||||
"@nextcloud/webpack-vue-config": "^6.3.0",
|
||||
"@nextcloud/webpack-vue-config": "github:nextcloud-libraries/webpack-vue-config#vue3",
|
||||
"@relative-ci/agent": "^4.2.14",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"@vue/vue2-jest": "^29.2.6",
|
||||
"cypress": "^13.17.0",
|
||||
"eslint-plugin-cypress": "^3.6.0",
|
||||
"eslint-webpack-plugin": "^5.0.1",
|
||||
"eslint-webpack-plugin": "^4.2.0",
|
||||
"jest": "^29.7.0",
|
||||
"jest-serializer-vue": "^3.1.0",
|
||||
"stylelint-webpack-plugin": "^5.0.1",
|
||||
"vue-template-compiler": "^2.7.16"
|
||||
"stylelint-webpack-plugin": "^5.0.1"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
xmlns="https://getpsalm.org/schema/config"
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config"
|
||||
errorBaseline="tests/psalm-baseline.xml"
|
||||
phpVersion="8.1"
|
||||
>
|
||||
<stubs>
|
||||
<file name="tests/stub.phpstub" preloadClasses="true"/>
|
||||
|
||||
213
src/App.vue
213
src/App.vue
@@ -1,15 +1,51 @@
|
||||
<!--
|
||||
- SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
<script>
|
||||
import { NcAppContent, NcContent, NcModal } from '@nextcloud/vue'
|
||||
import CardMoveDialog from './CardMoveDialog.vue'
|
||||
import AppNavigation from './components/navigation/AppNavigation.vue'
|
||||
import KeyboardShortcuts from './components/KeyboardShortcuts.vue'
|
||||
import {BoardApi} from './services/BoardApi.js'
|
||||
|
||||
const boardApi = new BoardApi()
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {
|
||||
NcContent,
|
||||
AppNavigation,
|
||||
NcAppContent,
|
||||
KeyboardShortcuts,
|
||||
CardMoveDialog,
|
||||
NcModal,
|
||||
},
|
||||
computed: {
|
||||
cardDetailsInModal() {
|
||||
return this.$store.getters.config('cardDetailsInModal')
|
||||
},
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
boardApi,
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
hideModal() {
|
||||
this.$router.push({ name: 'board' })
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<NcContent app-name="deck" :class="{ 'nav-hidden': !navShown, 'sidebar-hidden': !sidebarRouterView }">
|
||||
<NcContent app-name="deck">
|
||||
<AppNavigation />
|
||||
<NcAppContent :allow-swipe-navigation="false">
|
||||
<router-view />
|
||||
</NcAppContent>
|
||||
|
||||
<div v-if="$route.params.id || $route.params.cardId">
|
||||
<NcModal v-if="cardDetailsInModal && $route.params.cardId"
|
||||
:name="t('deck', 'Card details')"
|
||||
@@ -21,179 +57,10 @@
|
||||
<router-view name="sidebar" />
|
||||
</div>
|
||||
</NcModal>
|
||||
|
||||
<router-view name="sidebar" :visible="!cardDetailsInModal || !$route.params.cardId" />
|
||||
</div>
|
||||
|
||||
<KeyboardShortcuts />
|
||||
<CardMoveDialog />
|
||||
</NcContent>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import AppNavigation from './components/navigation/AppNavigation.vue'
|
||||
import KeyboardShortcuts from './components/KeyboardShortcuts.vue'
|
||||
import { NcModal, NcContent, NcAppContent, isMobile } from '@nextcloud/vue'
|
||||
import { BoardApi } from './services/BoardApi.js'
|
||||
import { emit, subscribe } from '@nextcloud/event-bus'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import CardMoveDialog from './CardMoveDialog.vue'
|
||||
|
||||
const boardApi = new BoardApi()
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {
|
||||
CardMoveDialog,
|
||||
AppNavigation,
|
||||
NcModal,
|
||||
NcContent,
|
||||
NcAppContent,
|
||||
KeyboardShortcuts,
|
||||
},
|
||||
mixins: [isMobile],
|
||||
provide() {
|
||||
return {
|
||||
boardApi,
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
addButton: {
|
||||
icon: 'icon-add',
|
||||
classes: [],
|
||||
text: t('deck', 'Add board'),
|
||||
edit: {
|
||||
text: t('deck', 'Add board'),
|
||||
action: () => {
|
||||
},
|
||||
reset: () => {
|
||||
},
|
||||
},
|
||||
action: () => {
|
||||
this.addButton.classes.push('editing')
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
navShown: state => state.navShown,
|
||||
sidebarShownState: state => state.sidebarShown,
|
||||
currentBoard: state => state.currentBoard,
|
||||
}),
|
||||
// TODO: properly handle sidebar showing for route subview and board sidebar
|
||||
sidebarRouterView() {
|
||||
// console.log(this.$route)
|
||||
return this.$route.name === 'card' || this.$route.name === 'board.details'
|
||||
},
|
||||
sidebarShown() {
|
||||
return this.sidebarRouterView || this.sidebarShownState
|
||||
},
|
||||
cardDetailsInModal: {
|
||||
get() {
|
||||
return this.$store.getters.config('cardDetailsInModal')
|
||||
},
|
||||
set(newValue) {
|
||||
this.$store.dispatch('setConfig', { cardDetailsInModal: newValue })
|
||||
},
|
||||
},
|
||||
},
|
||||
created() {
|
||||
const initialState = loadState('deck', 'initialBoards', null)
|
||||
if (initialState !== null) {
|
||||
this.$store.dispatch('loadBoards')
|
||||
}
|
||||
this.$store.dispatch('loadSharees')
|
||||
},
|
||||
mounted() {
|
||||
// Set navigation to initial state and update in case it gets toggled
|
||||
emit('toggle-navigation', { open: !this.isMobile && this.navShown, _initial: true })
|
||||
this.$nextTick(() => {
|
||||
subscribe('navigation-toggled', (navState) => {
|
||||
this.$store.dispatch('toggleNav', navState.open)
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
hideModal() {
|
||||
this.$router.push({ name: 'board' })
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
#content-vue {
|
||||
#app-content {
|
||||
transition: margin-left 100ms ease;
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
#app-sidebar {
|
||||
transition: max-width 100ms ease;
|
||||
}
|
||||
|
||||
&.nav-hidden {
|
||||
#app-content {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
#app-sidebar {
|
||||
max-width: 0;
|
||||
min-width: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
@import '../css/print';
|
||||
|
||||
.icon-activity {
|
||||
background-image: url(../img/activity-dark.svg);
|
||||
|
||||
body[data-theme-dark] & {
|
||||
background-image: url(../img/activity.svg);
|
||||
}
|
||||
}
|
||||
|
||||
.avatardiv.circles {
|
||||
background: var(--color-primary-element);
|
||||
}
|
||||
|
||||
.icon-circles {
|
||||
background-image: url(../img/circles-dark.svg);
|
||||
opacity: 1;
|
||||
background-size: 20px;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
.icon-circles-white, .icon-circles.icon-white {
|
||||
background-image: url(../img/circles.svg);
|
||||
opacity: 1;
|
||||
background-size: 20px;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
.icon-colorpicker {
|
||||
background-image: url('../img/color_picker.svg');
|
||||
}
|
||||
|
||||
.v-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.modal__card {
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
height: calc(100% - 20px);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
:input-label="t('deck', 'Select a list')"
|
||||
:options="stacksFromBoard"
|
||||
:max-height="100"
|
||||
data-cy="select-stack"
|
||||
label="title" />
|
||||
</div>
|
||||
<template #actions>
|
||||
@@ -60,19 +59,10 @@ export default {
|
||||
return !(this.selectedBoard === '' || this.selectedStack === '')
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
selectedBoard: {
|
||||
immediate: true,
|
||||
handler() {
|
||||
this.selectedStack = ''
|
||||
this.stacksFromBoard = []
|
||||
},
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
subscribe('deck:card:show-move-dialog', this.openModal)
|
||||
},
|
||||
destroyed() {
|
||||
unmounted() {
|
||||
unsubscribe('deck:card:show-move-dialog', this.openModal)
|
||||
},
|
||||
methods: {
|
||||
|
||||
@@ -10,9 +10,15 @@
|
||||
:key="activity.activity_id"
|
||||
:activity="activity" />
|
||||
<InfiniteLoading :identifier="objectId" @infinite="infiniteHandler" @change="changeObject">
|
||||
<div slot="spinner" class="icon-loading" />
|
||||
<div slot="no-more" />
|
||||
<div slot="no-results" />
|
||||
<template #spinner>
|
||||
<div class="icon-loading" />
|
||||
</template>
|
||||
<template #no-more>
|
||||
<div />
|
||||
</template>
|
||||
<template #no-results>
|
||||
<div />
|
||||
</template>
|
||||
</InfiniteLoading>
|
||||
</div>
|
||||
</template>
|
||||
@@ -21,7 +27,7 @@
|
||||
import axios from '@nextcloud/axios'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import ActivityEntry from './ActivityEntry.vue'
|
||||
import InfiniteLoading from 'vue-infinite-loading'
|
||||
// import InfiniteLoading from 'v3-infinite-loading'
|
||||
|
||||
const ACTIVITY_FETCH_LIMIT = 50
|
||||
|
||||
@@ -29,7 +35,6 @@ export default {
|
||||
name: 'ActivityList',
|
||||
components: {
|
||||
ActivityEntry,
|
||||
InfiniteLoading,
|
||||
},
|
||||
props: {
|
||||
filter: {
|
||||
|
||||
@@ -231,12 +231,16 @@
|
||||
</NcActionButton>
|
||||
<NcActionButton v-if="compactMode"
|
||||
@click="toggleCompactMode">
|
||||
<ArrowExpandVerticalIcon slot="icon" :size="20" decorative />
|
||||
<template #icon>
|
||||
<ArrowExpandVerticalIcon :size="20" decorative />
|
||||
</template>
|
||||
{{ t('deck', 'Toggle compact mode') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton v-else
|
||||
@click="toggleCompactMode">
|
||||
<ArrowCollapseVerticalIcon slot="icon" :size="20" decorative />
|
||||
<template #icon>
|
||||
<ArrowCollapseVerticalIcon :size="20" decorative />
|
||||
</template>
|
||||
{{ t('deck', 'Toggle compact mode') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton @click="toggleShowCardCover">
|
||||
@@ -274,6 +278,7 @@ import SessionList from './SessionList.vue'
|
||||
import { isNotifyPushEnabled } from '../sessions.js'
|
||||
import CreateNewCardCustomPicker from '../views/CreateNewCardCustomPicker.vue'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { onClickOutside } from '@vueuse/core'
|
||||
|
||||
export default {
|
||||
name: 'Controls',
|
||||
@@ -359,6 +364,11 @@ export default {
|
||||
}
|
||||
},
|
||||
},
|
||||
created() {
|
||||
onClickOutside(() => {
|
||||
this.hideAddStack()
|
||||
})
|
||||
},
|
||||
beforeMount() {
|
||||
subscribe('deck:board:show-new-card', this.clickShowAddCardModel)
|
||||
subscribe('deck:board:toggle-filter-popover', this.triggerOpenFilters)
|
||||
@@ -366,7 +376,7 @@ export default {
|
||||
subscribe('deck:board:toggle-filter-by-me', this.triggerFilterByMe)
|
||||
|
||||
},
|
||||
beforeDestroy() {
|
||||
beforeUnmount() {
|
||||
unsubscribe('deck:board:show-new-card', this.clickShowAddCardModel)
|
||||
unsubscribe('deck:board:toggle-filter-popover', this.triggerOpenFilters)
|
||||
unsubscribe('deck:board:clear-filter', this.triggerClearFilter)
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<!-- :style="{top:cardTop, left:cardLeft}" -->
|
||||
<div v-if="card && selector"
|
||||
ref="shortcutModal"
|
||||
v-click-outside="close"
|
||||
class="keyboard-shortcuts__modal"
|
||||
tabindex="0"
|
||||
@keydown.esc="close">
|
||||
@@ -18,6 +17,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import DueDateSelector from './card/DueDateSelector.vue'
|
||||
import { onClickOutside } from '@vueuse/core'
|
||||
import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'
|
||||
import { mapState } from 'vuex'
|
||||
import TagSelector from './card/TagSelector.vue'
|
||||
@@ -50,8 +50,9 @@ export default {
|
||||
subscribe('deck:card:show-assignment-selector', this.handleShowAssignemnt)
|
||||
subscribe('deck:card:show-due-date-selector', this.handleShowDueDate)
|
||||
subscribe('deck:card:show-label-selector', this.handleShowLabel)
|
||||
onClickOutside(this.close)
|
||||
},
|
||||
destroyed() {
|
||||
unmounted() {
|
||||
document.removeEventListener('keydown', this.onKeydown)
|
||||
unsubscribe('deck:card:show-assignment-selector', this.handleShowAssignemnt)
|
||||
unsubscribe('deck:card:show-due-date-selector', this.handleShowDueDate)
|
||||
@@ -259,6 +260,7 @@ export default {
|
||||
this.$refs.shortcutModal?.focus()
|
||||
},
|
||||
close() {
|
||||
console.log("HHHHH")
|
||||
this.card = null
|
||||
this.selector = null
|
||||
},
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
{{ t('deck', 'Create a new list to add cards to this board') }}
|
||||
<form @submit.prevent="addNewStack()">
|
||||
<NcTextField ref="newStackInput"
|
||||
v-model="newStackTitle"
|
||||
:disable="loading"
|
||||
:value.sync="newStackTitle"
|
||||
:placeholder="t('deck', 'List name')"
|
||||
type="text" />
|
||||
<NcButton type="secondary"
|
||||
@@ -63,7 +63,10 @@
|
||||
data-click-closes-sidebar="true"
|
||||
data-dragscroll-enabled
|
||||
class="stack-draggable-wrapper">
|
||||
<Stack :stack="stack" :dragging="draggingStack" data-click-closes-sidebar="true" />
|
||||
<Stack :stack="stack"
|
||||
:dragging="draggingStack"
|
||||
data-click-closes-sidebar="true"
|
||||
@open-card="openCard" />
|
||||
</Draggable>
|
||||
</Container>
|
||||
</div>
|
||||
@@ -82,7 +85,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Container, Draggable } from 'vue-smooth-dnd'
|
||||
import { Container, Draggable } from 'vue3-smooth-dnd'
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import Controls from '../Controls.vue'
|
||||
import DeckIcon from '../icons/DeckIcon.vue'
|
||||
@@ -165,14 +168,14 @@ export default {
|
||||
created() {
|
||||
this.session = createSession(this.id)
|
||||
this.fetchData()
|
||||
this.$root.$on('open-card', (cardId) => {
|
||||
this.localModal = cardId
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
beforeUnmount() {
|
||||
this.session.close()
|
||||
},
|
||||
methods: {
|
||||
openCard(cardId) {
|
||||
|
||||
},
|
||||
async fetchData() {
|
||||
this.loading = true
|
||||
try {
|
||||
@@ -253,8 +256,8 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '../../css/animations';
|
||||
@import '../../css/variables';
|
||||
@use '../../css/animations';
|
||||
@use '../../css/variables';
|
||||
|
||||
form {
|
||||
text-align: center;
|
||||
@@ -282,7 +285,7 @@ export default {
|
||||
}
|
||||
|
||||
.board {
|
||||
padding-left: $board-spacing;
|
||||
padding-left: variables.$board-spacing;
|
||||
position: relative;
|
||||
max-height: calc(100% - var(--default-clickable-area));
|
||||
overflow: hidden;
|
||||
@@ -313,8 +316,8 @@ export default {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
// Margin left instead of padidng to avoid jumps on dropping a card
|
||||
margin-left: $stack-spacing;
|
||||
padding-right: $stack-spacing;
|
||||
margin-left: variables.$stack-spacing;
|
||||
padding-right: variables.$stack-spacing;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
padding-top: 15px;
|
||||
|
||||
@@ -102,7 +102,10 @@
|
||||
<transition :appear="animate && !card.animated && (card.animated=true)"
|
||||
:appear-class="'zoom-appear-class'"
|
||||
:appear-active-class="'zoom-appear-active-class'">
|
||||
<CardItem :id="card.id" ref="card" :dragging="draggingCard" />
|
||||
<CardItem :id="card.id"
|
||||
ref="card"
|
||||
:dragging="draggingCard"
|
||||
@open-card="openCard" />
|
||||
</transition>
|
||||
</Draggable>
|
||||
</Container>
|
||||
@@ -136,7 +139,7 @@
|
||||
<script>
|
||||
import ClickOutside from 'vue-click-outside'
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import { Container, Draggable } from 'vue-smooth-dnd'
|
||||
import { Container, Draggable } from 'vue3-smooth-dnd'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import CardPlusOutline from 'vue-material-design-icons/CardPlusOutline.vue'
|
||||
import { NcActions, NcActionButton, NcModal } from '@nextcloud/vue'
|
||||
@@ -171,6 +174,9 @@ export default {
|
||||
default: undefined,
|
||||
},
|
||||
},
|
||||
emits: [
|
||||
'open-card',
|
||||
],
|
||||
data() {
|
||||
return {
|
||||
editing: false,
|
||||
@@ -233,6 +239,9 @@ export default {
|
||||
},
|
||||
|
||||
methods: {
|
||||
openCard(cardId) {
|
||||
this.$emit('open-card', cardId)
|
||||
},
|
||||
stopCardCreation(e) {
|
||||
// For some reason the submit event triggers a MouseEvent that is bubbling to the outside
|
||||
// so we have to ignore it
|
||||
@@ -362,10 +371,10 @@ export default {
|
||||
|
||||
@use 'sass:math';
|
||||
|
||||
@import './../../css/variables';
|
||||
@use './../../css/variables';
|
||||
|
||||
.stack {
|
||||
width: $stack-width + $stack-spacing * 3;
|
||||
width: variables.$stack-width + variables.$stack-spacing * 3;
|
||||
}
|
||||
|
||||
.stack__header {
|
||||
@@ -373,8 +382,8 @@ export default {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
padding-left: $card-spacing;
|
||||
padding-right: $card-spacing;
|
||||
padding-left: variables.$card-spacing;
|
||||
padding-right: variables.$card-spacing;
|
||||
margin: 6px;
|
||||
margin-top: 0;
|
||||
cursor: grab;
|
||||
@@ -418,7 +427,7 @@ export default {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
max-width: calc($stack-width - 60px);
|
||||
max-width: calc(variables.$stack-width - 60px);
|
||||
border-radius: 3px;
|
||||
padding: 4px 4px;
|
||||
font-size: var(--default-font-size);
|
||||
@@ -459,8 +468,8 @@ export default {
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
margin-left: $stack-spacing;
|
||||
margin-right: $stack-spacing;
|
||||
margin-left: variables.$stack-spacing;
|
||||
margin-right: variables.$stack-spacing;
|
||||
width: 100%;
|
||||
border: 2px solid var(--color-border-maxcontrast);
|
||||
border-radius: var(--border-radius-large);
|
||||
|
||||
@@ -72,8 +72,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { NcActionButton, NcAppSidebar, NcAppSidebarTab } from '@nextcloud/vue'
|
||||
import { NcReferenceList } from '@nextcloud/vue/dist/Components/NcRichText.js'
|
||||
import { NcActionButton, NcAppSidebar, NcAppSidebarTab, NcReferenceList } from '@nextcloud/vue'
|
||||
import { getCapabilities } from '@nextcloud/capabilities'
|
||||
import { mapState, mapGetters } from 'vuex'
|
||||
import CardSidebarTabDetails from './CardSidebarTabDetails.vue'
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
:key="comment.id"
|
||||
:comment="comment"
|
||||
@doReload="loadComments" />
|
||||
<InfiniteLoading :identifier="card.id" @infinite="infiniteHandler">
|
||||
<!-- <InfiniteLoading :identifier="card.id" @infinite="infiniteHandler">
|
||||
<div slot="spinner" class="icon-loading" />
|
||||
<div slot="no-more" />
|
||||
<div slot="no-results" />
|
||||
</InfiniteLoading>
|
||||
</InfiniteLoading> -->
|
||||
</ul>
|
||||
<div v-else-if="isLoading" class="icon icon-loading" />
|
||||
<div v-else class="emptycontent">
|
||||
@@ -42,7 +42,7 @@ import { mapState, mapGetters } from 'vuex'
|
||||
import { NcAvatar } from '@nextcloud/vue'
|
||||
import CommentItem from './CommentItem.vue'
|
||||
import CommentForm from './CommentForm.vue'
|
||||
import InfiniteLoading from 'vue-infinite-loading'
|
||||
// import InfiniteLoading from 'v3-infinite-loading'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
|
||||
export default {
|
||||
@@ -51,7 +51,7 @@ export default {
|
||||
NcAvatar,
|
||||
CommentItem,
|
||||
CommentForm,
|
||||
InfiniteLoading,
|
||||
// InfiniteLoading,
|
||||
},
|
||||
props: {
|
||||
card: {
|
||||
|
||||
@@ -2,8 +2,13 @@
|
||||
- SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div>
|
||||
THIS HAS AT
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- <template>
|
||||
<div class="comment-form">
|
||||
<form @submit.prevent="submit">
|
||||
<At ref="at"
|
||||
@@ -191,4 +196,4 @@ export default {
|
||||
.atwho-li--avatar {
|
||||
margin-right: 10px;
|
||||
}
|
||||
</style>
|
||||
</style> -->
|
||||
|
||||
@@ -170,7 +170,7 @@ export default {
|
||||
mounted() {
|
||||
this.setupEditor()
|
||||
},
|
||||
async beforeDestroy() {
|
||||
async beforeUnmount() {
|
||||
await this.destroyEditor()
|
||||
},
|
||||
methods: {
|
||||
|
||||
@@ -4,8 +4,12 @@
|
||||
-->
|
||||
<template>
|
||||
<CardDetailEntry :label="t('deck', 'Assign a due date to this card…')" data-test="due-date-selector">
|
||||
<Calendar v-if="!card.done" slot="icon" :size="20" />
|
||||
<CalendarCheck v-else slot="icon" :size="20" />
|
||||
<template v-if="!card.done" #icon>
|
||||
<Calendar :size="20" />
|
||||
</template>
|
||||
<template v-else #icon>
|
||||
<CalendarCheck :size="20" />
|
||||
</template>
|
||||
<template v-if="!card.done && !card.archived">
|
||||
<NcDateTimePickerNative v-if="duedate"
|
||||
id="card-duedate-picker"
|
||||
|
||||
@@ -72,7 +72,7 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '../../css/variables';
|
||||
@use '../../css/variables';
|
||||
|
||||
.card-cover {
|
||||
height: 90px;
|
||||
|
||||
@@ -88,6 +88,7 @@ import CardMenu from './CardMenu.vue'
|
||||
import CardCover from './CardCover.vue'
|
||||
import DueDate from './badges/DueDate.vue'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
|
||||
const TITLE_EDITING_STATE = {
|
||||
OFF: 0,
|
||||
@@ -120,6 +121,7 @@ export default {
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
emits: ['open-card'],
|
||||
data() {
|
||||
return {
|
||||
highlight: false,
|
||||
@@ -226,8 +228,9 @@ export default {
|
||||
this.$router.push({ name: 'card', params: { id: boardId, cardId: this.card.id } }).catch(() => {})
|
||||
return
|
||||
}
|
||||
|
||||
this.$root.$emit('open-card', this.card.id)
|
||||
emit('open-card', {
|
||||
cardId: this.card.id,
|
||||
})
|
||||
},
|
||||
triggerEditTitle() {
|
||||
this.editingTitle = TITLE_EDITING_STATE.PENDING
|
||||
@@ -318,8 +321,8 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './../../css/animations';
|
||||
@import './../../css/variables';
|
||||
@use './../../css/animations';
|
||||
@use './../../css/variables';
|
||||
|
||||
@mixin dark-card {
|
||||
border: 2px solid var(--color-border-dark);
|
||||
@@ -331,8 +334,8 @@ export default {
|
||||
border-radius: var(--border-radius-large);
|
||||
font-size: 100%;
|
||||
background-color: var(--color-main-background);
|
||||
margin-bottom: $card-spacing;
|
||||
padding: var(--default-grid-baseline) $card-padding;
|
||||
margin-bottom: variables.$card-spacing;
|
||||
padding: var(--default-grid-baseline) variables.$card-padding;
|
||||
border: 2px solid var(--color-border-dark);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
@@ -470,7 +473,7 @@ export default {
|
||||
width: 32px;
|
||||
}
|
||||
&.has-labels {
|
||||
padding-bottom: $card-padding;
|
||||
padding-bottom: variables.$card-padding;
|
||||
}
|
||||
.labels {
|
||||
height: 6px;
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
<template>
|
||||
<div>
|
||||
<NcActionButton v-if="!hideDetailsEntry" :close-after-click="true" @click="openCard">
|
||||
<CardBulletedIcon slot="icon" :size="20" decorative />
|
||||
<template #icon>
|
||||
<CardBulletedIcon icon :size="20" decorative />
|
||||
</template>
|
||||
{{ t('deck', 'Card details') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton v-if="canEdit" :close-after-click="true" @click="editTitle">
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
</NcColorPicker>
|
||||
<form @submit.prevent.stop="createBoard">
|
||||
<NcTextField ref="inputField"
|
||||
v-model="value"
|
||||
:disable="loading"
|
||||
:value.sync="value"
|
||||
:placeholder="t('deck', 'Board name')"
|
||||
type="text"
|
||||
required />
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<AccountIcon v-if="board.acl.length > 0" />
|
||||
</template>
|
||||
|
||||
<template v-if="!deleted" slot="actions">
|
||||
<template v-if="!deleted" #actions>
|
||||
<template v-if="!isDueSubmenuActive">
|
||||
<NcActionButton icon="icon-info"
|
||||
:close-after-click="true"
|
||||
@@ -148,7 +148,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { NcAppNavigationIconBullet, NcAppNavigationItem, NcColorPicker, NcButton, NcTextField, NcActionButton } from '@nextcloud/vue'
|
||||
import { NcAppNavigationIconBullet, NcAppNavigationItem, NcColorPicker, NcButton, NcTextField, NcActionButton, NcLoadingIcon } from '@nextcloud/vue'
|
||||
import ClickOutside from 'vue-click-outside'
|
||||
import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
|
||||
import CloneIcon from 'vue-material-design-icons/ContentDuplicate.vue'
|
||||
@@ -179,6 +179,7 @@ export default {
|
||||
CloseIcon,
|
||||
CheckIcon,
|
||||
BoardCloneModal,
|
||||
NcLoadingIcon,
|
||||
},
|
||||
directives: {
|
||||
ClickOutside,
|
||||
|
||||
@@ -145,7 +145,7 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './../../css/variables';
|
||||
@use './../../css/variables';
|
||||
|
||||
.overview-wrapper {
|
||||
position: relative;
|
||||
@@ -162,16 +162,16 @@ export default {
|
||||
overflow-x: scroll;
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
padding-left: $board-spacing;
|
||||
padding-right: $board-spacing;
|
||||
padding-left: variables.$board-spacing;
|
||||
padding-right: variables.$board-spacing;
|
||||
|
||||
.dashboard-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: $stack-width;
|
||||
width: $stack-width;
|
||||
margin-left: $stack-spacing;
|
||||
margin-right: $stack-spacing;
|
||||
min-width: variables.$stack-width;
|
||||
width: variables.$stack-width;
|
||||
margin-left: variables.$stack-spacing;
|
||||
margin-right: variables.$stack-spacing;
|
||||
|
||||
h3 {
|
||||
font-size: var(--default-font-size);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div v-if="searchQuery!==''" class="global-search">
|
||||
<div v-if="searchQuery !== ''" class="global-search">
|
||||
<h2>
|
||||
<NcRichText :text="t('deck', 'Search for {searchQuery} in all boards')" :arguments="queryStringArgs" />
|
||||
<div v-if="loading" class="icon-loading-small" />
|
||||
@@ -19,13 +19,13 @@
|
||||
:key="card.id"
|
||||
:standalone="true" />
|
||||
<Placeholder v-if="loading" />
|
||||
<InfiniteLoading :identifier="searchQuery" @infinite="infiniteHandler">
|
||||
<!-- <InfiniteLoading :identifier="searchQuery" @infinite="infiniteHandler">
|
||||
<div slot="spinner" />
|
||||
<div slot="no-more" />
|
||||
<div slot="no-results">
|
||||
{{ t('deck', 'No results found') }}
|
||||
</div>
|
||||
</InfiniteLoading>
|
||||
</InfiniteLoading> -->
|
||||
</div>
|
||||
<div v-else>
|
||||
<p>{{ t('deck', 'No results found') }}</p>
|
||||
@@ -39,7 +39,7 @@ import CardItem from '../cards/CardItem.vue'
|
||||
import { mapState } from 'vuex'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import InfiniteLoading from 'vue-infinite-loading'
|
||||
// import InfiniteLoading from 'v3-infinite-loading'
|
||||
import Placeholder from './Placeholder.vue'
|
||||
import { NcActions, NcActionButton, NcRichText } from '@nextcloud/vue'
|
||||
|
||||
@@ -70,7 +70,14 @@ function search({ query, cursor }) {
|
||||
|
||||
export default {
|
||||
name: 'GlobalSearchResults',
|
||||
components: { CardItem, InfiniteLoading, NcRichText, Placeholder, NcActions, NcActionButton },
|
||||
components: {
|
||||
CardItem,
|
||||
// InfiniteLoading,
|
||||
NcRichText,
|
||||
Placeholder,
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
results: [],
|
||||
@@ -155,11 +162,11 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '../../css/variables';
|
||||
@use '../../css/variables';
|
||||
|
||||
.global-search {
|
||||
width: 100%;
|
||||
padding: $board-spacing + $stack-spacing;
|
||||
padding: variables.$board-spacing + variables.$stack-spacing;
|
||||
padding-bottom: 0;
|
||||
overflow: hidden;
|
||||
min-height: 35vh;
|
||||
@@ -175,6 +182,7 @@ export default {
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.search-wrapper {
|
||||
overflow: scroll;
|
||||
height: 100%;
|
||||
@@ -182,13 +190,14 @@ export default {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
h2 > div {
|
||||
h2>div {
|
||||
display: inline-block;
|
||||
|
||||
&.icon-loading-small {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
h2:deep(span) {
|
||||
background-color: var(--color-background-dark);
|
||||
padding: 3px;
|
||||
@@ -199,13 +208,14 @@ export default {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
& > div {
|
||||
&>div {
|
||||
flex-grow: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&:deep(.card) {
|
||||
width: $stack-width;
|
||||
margin-right: $stack-spacing;
|
||||
width: variables.$stack-width;
|
||||
margin-right: variables.$stack-spacing;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -58,18 +58,18 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '../../css/variables';
|
||||
@use '../../css/variables';
|
||||
$clickable-area: var(--default-clickable-area);
|
||||
|
||||
.card--placeholder {
|
||||
width: $stack-width;
|
||||
margin-right: $stack-spacing;
|
||||
padding: $card-padding;
|
||||
width: variables.$stack-width;
|
||||
margin-right: variables.$stack-spacing;
|
||||
padding: variables.$card-padding;
|
||||
transition: box-shadow 0.1s ease-in-out;
|
||||
box-shadow: 0 0 2px 0 var(--color-box-shadow);
|
||||
border-radius: var(--border-radius-large);
|
||||
font-size: 100%;
|
||||
margin-bottom: $card-spacing;
|
||||
margin-bottom: variables.$card-spacing;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { registerWidget, registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue/dist/Functions/registerReference.js'
|
||||
import { registerWidget, registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue'
|
||||
import { translate, translatePlural } from '@nextcloud/l10n'
|
||||
|
||||
import './shared-init.js'
|
||||
|
||||
47
src/main.js
47
src/main.js
@@ -2,11 +2,10 @@
|
||||
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
import Vue from 'vue'
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import router from './router.js'
|
||||
import store from './store/main.js'
|
||||
import { sync } from 'vuex-router-sync'
|
||||
import { translate, translatePlural } from '@nextcloud/l10n'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { subscribe } from '@nextcloud/event-bus'
|
||||
@@ -14,27 +13,32 @@ import ClickOutside from 'vue-click-outside'
|
||||
import './shared-init.js'
|
||||
import './models/index.js'
|
||||
import './sessions.js'
|
||||
import { configureCompat } from '@vue/compat'
|
||||
|
||||
configureCompat({ MODE: 3, INSTANCE_SCOPED_SLOTS: false, ATTR_ENUMERATED_COERCION: true, INSTANCE_EVENT_EMITTER: true, OPTIONS_BEFORE_DESTROY: true, CUSTOM_DIR: true, OPTIONS_DESTROYED: true, INSTANCE_LISTENERS: true, GLOBAL_SET: true })
|
||||
|
||||
// the server snap.js conflicts with vertical scrolling so we disable it
|
||||
document.body.setAttribute('data-snap-ignore', 'true')
|
||||
|
||||
sync(store, router)
|
||||
const app = createApp(App)
|
||||
|
||||
Vue.prototype.t = translate
|
||||
Vue.prototype.n = translatePlural
|
||||
app.config.globalProperties.t = translate
|
||||
app.config.globalProperties.n = translatePlural
|
||||
|
||||
Vue.directive('click-outside', ClickOutside)
|
||||
app.directive('click-outside', ClickOutside)
|
||||
|
||||
Vue.directive('focus', {
|
||||
inserted(el) {
|
||||
app.directive('focus', {
|
||||
mounted(el) {
|
||||
el.focus()
|
||||
},
|
||||
})
|
||||
|
||||
Vue.config.errorHandler = (err, vm, info) => {
|
||||
app.config.errorHandler = (err, vm, info) => {
|
||||
if (err.response && err.response.data.message) {
|
||||
const errorMessage = t('deck', 'Something went wrong')
|
||||
showError(`${errorMessage}: ${err.response.data.status} ${err.response.data.message}`)
|
||||
const errorMessage = translate('deck', 'Something went wrong')
|
||||
showError(
|
||||
`${errorMessage}: ${err.response.data.status} ${err.response.data.message}`,
|
||||
)
|
||||
}
|
||||
console.error(err)
|
||||
}
|
||||
@@ -47,16 +51,14 @@ window.addEventListener('DOMContentLoaded', () => {
|
||||
window.OCA.Files = {}
|
||||
}
|
||||
// register unused client for the sidebar to have access to its parser methods
|
||||
Object.assign(window.OCA.Files, { App: { fileList: { filesClient: OC.Files.getClient() } } }, window.OCA.Files)
|
||||
Object.assign(
|
||||
window.OCA.Files,
|
||||
{ App: { fileList: { filesClient: OC.Files.getClient() } } },
|
||||
window.OCA.Files,
|
||||
)
|
||||
})
|
||||
|
||||
/* eslint-disable-next-line no-new */
|
||||
new Vue({
|
||||
el: '#content',
|
||||
// eslint-disable-next-line vue/match-component-file-name
|
||||
name: 'Deck',
|
||||
router,
|
||||
store,
|
||||
app.mixin({
|
||||
data() {
|
||||
return {
|
||||
time: Date.now(),
|
||||
@@ -75,7 +77,7 @@ new Vue({
|
||||
this.time = Date.now()
|
||||
}, 1000)
|
||||
},
|
||||
beforeDestroy() {
|
||||
beforeUnmount() {
|
||||
clearInterval(this.interval)
|
||||
},
|
||||
methods: {
|
||||
@@ -86,9 +88,12 @@ new Vue({
|
||||
this.$store.commit('setSearchQuery', '')
|
||||
},
|
||||
},
|
||||
render: h => h(App),
|
||||
})
|
||||
|
||||
app.use(router)
|
||||
app.use(store)
|
||||
app.mount('#content')
|
||||
|
||||
if (!window.OCA.Deck) {
|
||||
window.OCA.Deck = {}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import Router, { createRouter, createWebHistory } from 'vue-router'
|
||||
import Vue from 'vue'
|
||||
import Router from 'vue-router'
|
||||
import { generateUrl, getRootUrl } from '@nextcloud/router'
|
||||
import { BOARD_FILTERS } from './store/main.js'
|
||||
import Boards from './components/boards/Boards.vue'
|
||||
@@ -22,8 +22,8 @@ const webRootWithIndexPHP = getRootUrl() + '/index.php'
|
||||
const doesURLContainIndexPHP = window.location.pathname.startsWith(webRootWithIndexPHP)
|
||||
const currentBaseUrl = doesURLContainIndexPHP ? baseUrl : baseUrl.replace('/index.php/', '/')
|
||||
|
||||
const router = new Router({
|
||||
mode: 'history',
|
||||
const router = createRouter({
|
||||
history: createWebHistory(generateUrl('/apps/deck/')),
|
||||
base: currentBaseUrl,
|
||||
linkActiveClass: 'active',
|
||||
routes: [
|
||||
|
||||
@@ -143,7 +143,7 @@ export class BoardApi {
|
||||
return axios.get(this.url(`/boards/${board.id}/export`))
|
||||
.then(
|
||||
(response) => {
|
||||
const fields = { title: t('deck', 'Card title'), description: t('deck', 'Description'), stackId: t('deck', 'List name'), labels: t('deck', 'Tags'), assignedUsers: t('deck', 'Assigned users'), duedate: t('deck', 'Due date'), createdAt: t('deck', 'Created'), lastModified: t('deck', 'Modified') }
|
||||
const fields = { title: t('deck', 'Card title'), description: t('deck', 'Description'), stackId: t('deck', 'List name'), labels: t('deck', 'Tags'), duedate: t('deck', 'Due date'), createdAt: t('deck', 'Created'), lastModified: t('deck', 'Modified') }
|
||||
let row = ''
|
||||
Object.keys(fields).forEach(field => {
|
||||
row += '"' + fields[field] + '"' + '\t'
|
||||
@@ -160,27 +160,16 @@ export class BoardApi {
|
||||
const date = new Date(Number(card[field]) * 1000)
|
||||
row += '"' + date.toLocaleDateString() + '"' + '\t'
|
||||
} else if (field === 'stackId') {
|
||||
row += '"' + stack.title.replaceAll('"', '""') + '"' + '\t'
|
||||
row += '"' + stack.title + '"' + '\t'
|
||||
} else if (field === 'labels') {
|
||||
row += '"'
|
||||
card[field].forEach(label => {
|
||||
row += label.title.replaceAll('"', '""') + ', '
|
||||
row += label.title + ', '
|
||||
})
|
||||
if (card[field].length > 0) {
|
||||
row = row.slice(0, -1)
|
||||
}
|
||||
row += '"' + '\t'
|
||||
} else if (field === 'assignedUsers') {
|
||||
row += '"'
|
||||
card[field].forEach(assignedUsers => {
|
||||
row += assignedUsers.participant.displayname.replaceAll('"', '""') + ', '
|
||||
})
|
||||
if (card[field].length > 0) {
|
||||
row = row.slice(0, -1)
|
||||
}
|
||||
row += '"' + '\t'
|
||||
} else if (field === 'description' || field === 'title') {
|
||||
row += '"' + card[field].replaceAll('"', '""') + '"' + '\t'
|
||||
} else {
|
||||
row += '"' + card[field] + '"' + '\t'
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'url-search-params-polyfill'
|
||||
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import Vue from 'vue'
|
||||
import Vuex from 'vuex'
|
||||
import { createStore } from 'vuex'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { generateOcsUrl, generateUrl } from '@nextcloud/router'
|
||||
import { BoardApi } from '../services/BoardApi.js'
|
||||
@@ -18,7 +18,6 @@ import comment from './comment.js'
|
||||
import trashbin from './trashbin.js'
|
||||
import attachment from './attachment.js'
|
||||
import overview from './overview.js'
|
||||
Vue.use(Vuex)
|
||||
|
||||
const apiClient = new BoardApi()
|
||||
const debug = process.env.NODE_ENV !== 'production'
|
||||
@@ -29,7 +28,7 @@ export const BOARD_FILTERS = {
|
||||
SHARED: 'shared',
|
||||
}
|
||||
|
||||
export default new Vuex.Store({
|
||||
const store = createStore({
|
||||
modules: {
|
||||
actions,
|
||||
stack,
|
||||
@@ -519,3 +518,5 @@ export default new Vuex.Store({
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
export default store
|
||||
|
||||
@@ -33,7 +33,7 @@ import DeckIcon from '../components/icons/DeckIcon.vue'
|
||||
import { BoardApi } from './../services/BoardApi.js'
|
||||
import store from './../store/main.js'
|
||||
|
||||
import NcUserBubble from '@nextcloud/vue/dist/Components/NcUserBubble.js'
|
||||
import { NcUserBubble } from '@nextcloud/vue'
|
||||
|
||||
import moment from '@nextcloud/moment'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
|
||||
@@ -1 +1 @@
|
||||
81091
|
||||
80536
|
||||
|
||||
@@ -437,10 +437,10 @@ class BoardServiceTest extends TestCase {
|
||||
$assignment = new Assignment();
|
||||
$assignment->setParticipant('admin');
|
||||
$this->assignedUsersMapper->expects($this->once())
|
||||
->method('deleteByParticipantOnBoard')
|
||||
->with('admin', 123)
|
||||
->method('findByParticipant')
|
||||
->with('admin')
|
||||
->willReturn([$assignment]);
|
||||
$this->assignedUsersMapper->expects($this->never())
|
||||
$this->assignedUsersMapper->expects($this->once())
|
||||
->method('delete')
|
||||
->with($assignment);
|
||||
$this->aclMapper->expects($this->once())
|
||||
|
||||
@@ -258,17 +258,6 @@ class CardServiceTest extends TestCase {
|
||||
->method('find')
|
||||
->willReturn($card, $clonedCard);
|
||||
|
||||
$this->cardMapper->expects($this->any())
|
||||
->method('findBoardId')
|
||||
->willReturn(1234);
|
||||
|
||||
$this->labelMapper->expects($this->any())
|
||||
->method('find')
|
||||
->willReturn(Label::fromRow([
|
||||
'id' => 1,
|
||||
'boardId' => 1234,
|
||||
]));
|
||||
|
||||
// check if users are assigned
|
||||
$this->assignmentService->expects($this->once())
|
||||
->method('assignUser')
|
||||
@@ -444,17 +433,8 @@ class CardServiceTest extends TestCase {
|
||||
public function testAssignLabel() {
|
||||
$card = new Card();
|
||||
$card->setArchived(false);
|
||||
$card->setId(123);
|
||||
$label = new Label();
|
||||
$label->setBoardId(1);
|
||||
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
|
||||
$this->cardMapper->expects($this->once())->method('assignLabel');
|
||||
$this->cardMapper->expects($this->once())
|
||||
->method('findBoardId')
|
||||
->willReturn(1);
|
||||
$this->labelMapper->expects($this->once())
|
||||
->method('find')
|
||||
->willReturn($label);
|
||||
$this->cardService->assignLabel(123, 999);
|
||||
}
|
||||
|
||||
@@ -470,17 +450,8 @@ class CardServiceTest extends TestCase {
|
||||
public function testRemoveLabel() {
|
||||
$card = new Card();
|
||||
$card->setArchived(false);
|
||||
$card->setId(123);
|
||||
$label = new Label();
|
||||
$label->setBoardId(1);
|
||||
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
|
||||
$this->cardMapper->expects($this->once())->method('removeLabel');
|
||||
$this->cardMapper->expects($this->once())
|
||||
->method('findBoardId')
|
||||
->willReturn(1);
|
||||
$this->labelMapper->expects($this->once())
|
||||
->method('find')
|
||||
->willReturn($label);
|
||||
$this->cardService->removeLabel(123, 999);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,6 @@ if (isDevServer) {
|
||||
}
|
||||
}
|
||||
// Workaround for https://github.com/nextcloud/webpack-vue-config/pull/432 causing problems with nextcloud-vue-collections
|
||||
webpackConfig.resolve.alias = {}
|
||||
webpackConfig.resolve.alias = { vue: '@vue/compat' }
|
||||
|
||||
module.exports = webpackConfig
|
||||
|
||||
Reference in New Issue
Block a user