Compare commits

..

17 Commits

Author SHA1 Message Date
Elizabeth Danzberger
7cb41cd61b fix: auto-focus board name input field
Signed-off-by: Elizabeth Danzberger <lizzy7128@tutanota.de>
2025-03-28 01:54:26 +01:00
Nextcloud bot
3d78802446 Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-27 00:44:45 +00:00
Julius Knorr
8a99e6d539 Merge pull request #6853 from nextcloud/ci/update-workflows
chore: update workflows from templates
2025-03-25 15:17:08 +01:00
grnd-alt
0e08ad16e1 chore: set minimum phpVersion for psalm
Signed-off-by: grnd-alt <github@belakkaf.net>
2025-03-25 14:05:17 +01:00
Nextcloud bot
d04ab25315 Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-25 00:43:41 +00:00
grnd-alt
19d35c65a0 chore: update workflows from templates
Signed-off-by: grnd-alt <github@belakkaf.net>
2025-03-24 15:41:10 +01:00
Nextcloud bot
1783914d3a Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-24 00:43:02 +00:00
Nextcloud bot
c837dd4db6 Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-23 00:43:32 +00:00
dependabot[bot]
db22052729 Merge pull request #6850 from nextcloud/dependabot/github_actions/actions/setup-node-4.3.0 2025-03-22 02:22:09 +00:00
dependabot[bot]
116babcaaf Chore(deps): Bump actions/setup-node from 4.2.0 to 4.3.0
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4.2.0...v4.3.0)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-22 02:16:47 +00:00
Nextcloud bot
86d42b7060 Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-20 00:45:34 +00:00
Nextcloud bot
122387a195 Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-18 00:45:10 +00:00
Nextcloud bot
028f26a969 Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-16 00:43:43 +00:00
dependabot[bot]
13c13b8dde Merge pull request #6831 from nextcloud/dependabot/npm_and_yarn/main/babel/runtime-7.26.10 2025-03-15 02:14:25 +00:00
dependabot[bot]
5df4a49ff5 Chore(deps): Bump @babel/runtime from 7.26.7 to 7.26.10
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.26.7 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-15 02:05:59 +00:00
Nextcloud bot
97902d2f6a Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-15 00:45:23 +00:00
Nextcloud bot
db6221d1c9 Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-03-12 00:44:24 +00:00
59 changed files with 7235 additions and 5902 deletions

View File

@@ -18,7 +18,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v4.2.2 - uses: actions/checkout@v4.2.2
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.2.0 uses: actions/setup-node@v4.3.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
- name: Set up npm7 - name: Set up npm7

View File

@@ -12,6 +12,9 @@ on:
release: release:
types: [published] types: [published]
permissions:
contents: write
jobs: jobs:
build_and_publish: build_and_publish:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -34,11 +37,23 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
path: ${{ env.APP_NAME }} 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 - name: Get appinfo data
id: appinfo id: appinfo
uses: skjnldsv/xpath-action@7e6a7c379d0e9abc8acaef43df403ab4fc4f770c # master uses: skjnldsv/xpath-action@f5b036e9d973f42c86324833fd00be90665fbf77 # master
with: with:
filename: ${{ env.APP_NAME }}/appinfo/info.xml filename: ${{ env.APP_NAME }}/appinfo/info.xml
expression: "//info//dependencies//nextcloud/@min-version" expression: "//info//dependencies//nextcloud/@min-version"
@@ -56,7 +71,7 @@ jobs:
- name: Set up node ${{ steps.versions.outputs.nodeVersion }} - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
# Skip if no package.json # Skip if no package.json
if: ${{ steps.versions.outputs.nodeVersion }} if: ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0 uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
with: with:
node-version: ${{ steps.versions.outputs.nodeVersion }} node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -72,7 +87,7 @@ jobs:
filename: ${{ env.APP_NAME }}/appinfo/info.xml filename: ${{ env.APP_NAME }}/appinfo/info.xml
- name: Set up php ${{ steps.php-versions.outputs.php-min }} - name: Set up php ${{ steps.php-versions.outputs.php-min }}
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
with: with:
php-version: ${{ steps.php-versions.outputs.php-min }} php-version: ${{ steps.php-versions.outputs.php-min }}
coverage: none coverage: none
@@ -137,6 +152,7 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
if: ${{ steps.server-checkout.outcome != 'success' }} if: ${{ steps.server-checkout.outcome != 'success' }}
with: with:
persist-credentials: false
submodules: true submodules: true
repository: nextcloud/server repository: nextcloud/server
path: nextcloud path: nextcloud

View File

@@ -41,7 +41,7 @@ jobs:
steps: steps:
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.2.0 uses: actions/setup-node@v4.3.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}

View File

@@ -9,7 +9,7 @@
name: Dependabot name: Dependabot
on: on:
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
branches: branches:
- main - main
- master - master
@@ -24,7 +24,7 @@ concurrency:
jobs: jobs:
auto-approve-merge: auto-approve-merge:
if: github.actor == 'dependabot[bot]' || github.actor == 'renovate[bot]' if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'renovate[bot]'
runs-on: ubuntu-latest-low runs-on: ubuntu-latest-low
permissions: permissions:
# for hmarr/auto-approve-action to approve PRs # for hmarr/auto-approve-action to approve PRs

View File

@@ -57,6 +57,8 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Read package.json node and npm engines version - name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
@@ -66,7 +68,7 @@ jobs:
fallbackNpm: '^10' fallbackNpm: '^10'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }} - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0 uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
with: with:
node-version: ${{ steps.versions.outputs.nodeVersion }} node-version: ${{ steps.versions.outputs.nodeVersion }}

View File

@@ -26,15 +26,17 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Get php version - name: Get php version
id: versions id: versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
- name: Set up php${{ steps.versions.outputs.php-available }} - name: Set up php${{ steps.versions.outputs.php-min }}
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
with: with:
php-version: ${{ steps.versions.outputs.php-available }} php-version: ${{ steps.versions.outputs.php-min }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 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 coverage: none
ini-file: development ini-file: development
@@ -42,7 +44,9 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies - name: Install dependencies
run: composer i run: |
composer remove nextcloud/ocp --dev
composer i
- name: Lint - name: Lint
run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 ) run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 )

View File

@@ -25,6 +25,9 @@ jobs:
steps: steps:
- name: Checkout app - name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Get version matrix - name: Get version matrix
id: versions id: versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0 uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0
@@ -41,9 +44,11 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Set up php ${{ matrix.php-versions }} - name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
with: with:
php-version: ${{ matrix.php-versions }} 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 extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite

View File

@@ -26,6 +26,8 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Read package.json node and npm engines version - name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
@@ -35,7 +37,7 @@ jobs:
fallbackNpm: '^10' fallbackNpm: '^10'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }} - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0 uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
with: with:
node-version: ${{ steps.versions.outputs.nodeVersion }} node-version: ${{ steps.versions.outputs.nodeVersion }}

View File

@@ -14,7 +14,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v4.2.2 - uses: actions/checkout@v4.2.2
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4.2.0 uses: actions/setup-node@v4.3.0
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ matrix.node-version }}
- name: Set up npm7 - name: Set up npm7

View File

@@ -45,7 +45,7 @@ jobs:
fallbackNpm: '^10' fallbackNpm: '^10'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }} - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@802632921f8532d2409ae6eac3313b6f81f11122 # v4.1.0 uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
with: with:
node-version: ${{ steps.versions.outputs.nodeVersion }} node-version: ${{ steps.versions.outputs.nodeVersion }}

View File

@@ -25,6 +25,8 @@ jobs:
steps: steps:
- name: Checkout app - name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Get version matrix - name: Get version matrix
id: versions id: versions
@@ -81,6 +83,7 @@ jobs:
steps: steps:
- name: Set app env - name: Set app env
if: ${{ env.APP_NAME == '' }}
run: | run: |
# Split and keep last # Split and keep last
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
@@ -88,6 +91,7 @@ jobs:
- name: Checkout server - name: Checkout server
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
submodules: true submodules: true
repository: nextcloud/server repository: nextcloud/server
ref: ${{ matrix.server-versions }} ref: ${{ matrix.server-versions }}
@@ -95,16 +99,19 @@ jobs:
- name: Checkout app - name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
path: apps/${{ env.APP_NAME }} path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }} - name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
with: with:
php-version: ${{ matrix.php-versions }} php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation # 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 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 coverage: none
ini-file: development ini-file: development
# Temporary workaround for missing pcntl_* in PHP 8.3
ini-values: disable_functions=
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -123,7 +130,9 @@ jobs:
# Only run if phpunit config file exists # Only run if phpunit config file exists
if: steps.check_composer.outputs.files_exists == 'true' if: steps.check_composer.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }} working-directory: apps/${{ env.APP_NAME }}
run: composer i run: |
composer remove nextcloud/ocp --dev
composer i
- name: Set up Nextcloud - name: Set up Nextcloud
env: env:

View File

@@ -26,6 +26,8 @@ jobs:
steps: steps:
- name: Checkout app - name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Get version matrix - name: Get version matrix
id: versions id: versions
@@ -84,6 +86,7 @@ jobs:
steps: steps:
- name: Set app env - name: Set app env
if: ${{ env.APP_NAME == '' }}
run: | run: |
# Split and keep last # Split and keep last
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
@@ -91,6 +94,7 @@ jobs:
- name: Checkout server - name: Checkout server
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
submodules: true submodules: true
repository: nextcloud/server repository: nextcloud/server
ref: ${{ matrix.server-versions }} ref: ${{ matrix.server-versions }}
@@ -98,16 +102,19 @@ jobs:
- name: Checkout app - name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
path: apps/${{ env.APP_NAME }} path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }} - name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
with: with:
php-version: ${{ matrix.php-versions }} php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation # 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 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 coverage: none
ini-file: development ini-file: development
# Temporary workaround for missing pcntl_* in PHP 8.3
ini-values: disable_functions=
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -121,7 +128,9 @@ jobs:
# Only run if phpunit config file exists # Only run if phpunit config file exists
if: steps.check_composer.outputs.files_exists == 'true' if: steps.check_composer.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }} working-directory: apps/${{ env.APP_NAME }}
run: composer i run: |
composer remove nextcloud/ocp --dev
composer i
- name: Set up Nextcloud - name: Set up Nextcloud
env: env:

View File

@@ -26,6 +26,8 @@ jobs:
steps: steps:
- name: Checkout app - name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Get version matrix - name: Get version matrix
id: versions id: versions
@@ -73,6 +75,7 @@ jobs:
steps: steps:
- name: Set app env - name: Set app env
if: ${{ env.APP_NAME == '' }}
run: | run: |
# Split and keep last # Split and keep last
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
@@ -80,6 +83,7 @@ jobs:
- name: Checkout server - name: Checkout server
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
submodules: true submodules: true
repository: nextcloud/server repository: nextcloud/server
ref: ${{ matrix.server-versions }} ref: ${{ matrix.server-versions }}
@@ -87,16 +91,19 @@ jobs:
- name: Checkout app - name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
path: apps/${{ env.APP_NAME }} path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }} - name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
with: with:
php-version: ${{ matrix.php-versions }} php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation # 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 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 coverage: none
ini-file: development ini-file: development
# Temporary workaround for missing pcntl_* in PHP 8.3
ini-values: disable_functions=
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -110,7 +117,9 @@ jobs:
# Only run if phpunit config file exists # Only run if phpunit config file exists
if: steps.check_composer.outputs.files_exists == 'true' if: steps.check_composer.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }} working-directory: apps/${{ env.APP_NAME }}
run: composer i run: |
composer remove nextcloud/ocp --dev
composer i
- name: Set up Nextcloud - name: Set up Nextcloud
env: env:

View File

@@ -36,7 +36,7 @@ jobs:
blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -) blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -)
echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT" echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
- uses: marcelklehr/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4 - uses: nextcloud/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4 # main
with: with:
feedback-message: | feedback-message: |
Hello there, Hello there,

View File

@@ -14,6 +14,9 @@ concurrency:
group: psalm-${{ github.head_ref || github.run_id }} group: psalm-${{ github.head_ref || github.run_id }}
cancel-in-progress: true cancel-in-progress: true
permissions:
contents: read
jobs: jobs:
static-analysis: static-analysis:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -22,23 +25,35 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Get php version - name: Get php version
id: versions id: versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
- name: Set up php${{ steps.versions.outputs.php-available }} - name: Check enforcement of minimum PHP version ${{ steps.versions.outputs.php-min }} in psalm.xml
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 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
with: with:
php-version: ${{ steps.versions.outputs.php-available }} php-version: ${{ steps.versions.outputs.php-min }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 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 coverage: none
ini-file: development ini-file: development
# Temporary workaround for missing pcntl_* in PHP 8.3
ini-values: disable_functions=
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies - name: Install dependencies
run: composer i 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
- name: Run coding standards check - name: Run coding standards check
run: composer run psalm run: composer run psalm -- --threads=1 --monochrome --no-progress --output-format=github

View File

@@ -11,6 +11,9 @@ name: REUSE Compliance Check
on: [pull_request] on: [pull_request]
permissions:
contents: read
jobs: jobs:
reuse-compliance-check: reuse-compliance-check:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@@ -9,7 +9,7 @@
name: Auto approve nextcloud/ocp name: Auto approve nextcloud/ocp
on: on:
pull_request_target: pull_request_target: # zizmor: ignore[dangerous-triggers]
branches: branches:
- main - main
- master - master
@@ -52,7 +52,7 @@ jobs:
# Enable GitHub auto merge # Enable GitHub auto merge
- name: Auto merge - name: Auto merge
uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # main uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp') if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp')
with: with:
github-token: ${{ secrets.GITHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -13,6 +13,9 @@ on:
schedule: schedule:
- cron: "5 2 * * 0" - cron: "5 2 * * 0"
permissions:
contents: read
jobs: jobs:
update-nextcloud-ocp: update-nextcloud-ocp:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -28,13 +31,14 @@ jobs:
- id: checkout - id: checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: with:
persist-credentials: false
ref: ${{ matrix.branches }} ref: ${{ matrix.branches }}
submodules: true submodules: true
continue-on-error: true continue-on-error: true
- name: Set up php8.2 - name: Set up php8.2
if: steps.checkout.outcome == 'success' if: steps.checkout.outcome == 'success'
uses: shivammathur/setup-php@21e092a3e0c2fabb77bf641337eced34a4bcd3cc # v2.31.1 uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
with: with:
php-version: 8.2 php-version: 8.2
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation

View File

@@ -106,7 +106,7 @@ OC.L10N.register(
"Done" : "Fet", "Done" : "Fet",
"1. Open to learn more about boards and cards" : "1. Obre per obtenir més informació sobre taulers i cartes", "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", "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. Apliqueu format ric i contingut d'enllaços", "3. Apply rich formatting and link content" : "3. Aplica format ric i contingut d'enllaços",
"4. Share, comment and collaborate!" : "4. Comparteix, comenta i col·labora!", "4. Share, comment and collaborate!" : "4. Comparteix, comenta i col·labora!",
"Create your first card!" : "Crea la teva primera targeta!", "Create your first card!" : "Crea la teva primera targeta!",
"The file was uploaded" : "S'ha pujat el fitxer", "The file was uploaded" : "S'ha pujat el fitxer",
@@ -351,9 +351,9 @@ OC.L10N.register(
"Clone cards" : "Clonar targetes", "Clone cards" : "Clonar targetes",
"Clone assignments" : "Clonar les tasques", "Clone assignments" : "Clonar les tasques",
"Clone labels" : "Clonar etiquetes", "Clone labels" : "Clonar etiquetes",
"Clone due dates" : "Clonar les dates de venciment", "Clone due dates" : "Clonar les dates de caducitat",
"Advanced options" : "Paràmetres avançats", "Advanced options" : "Opcions avançades",
"Move all cards to the first list" : "Mou totes les cartes a la primera llista", "Move all cards to the first list" : "Mou totes les targetes a la primera llista",
"Restore archived cards" : "Restaura les targetes arxivades", "Restore archived cards" : "Restaura les targetes arxivades",
"Clone" : "Clonar", "Clone" : "Clonar",
"Loading filtered view" : "S'està carregant la visualització filtrada", "Loading filtered view" : "S'està carregant la visualització filtrada",

View File

@@ -104,7 +104,7 @@
"Done" : "Fet", "Done" : "Fet",
"1. Open to learn more about boards and cards" : "1. Obre per obtenir més informació sobre taulers i cartes", "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", "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. Apliqueu format ric i contingut d'enllaços", "3. Apply rich formatting and link content" : "3. Aplica format ric i contingut d'enllaços",
"4. Share, comment and collaborate!" : "4. Comparteix, comenta i col·labora!", "4. Share, comment and collaborate!" : "4. Comparteix, comenta i col·labora!",
"Create your first card!" : "Crea la teva primera targeta!", "Create your first card!" : "Crea la teva primera targeta!",
"The file was uploaded" : "S'ha pujat el fitxer", "The file was uploaded" : "S'ha pujat el fitxer",
@@ -349,9 +349,9 @@
"Clone cards" : "Clonar targetes", "Clone cards" : "Clonar targetes",
"Clone assignments" : "Clonar les tasques", "Clone assignments" : "Clonar les tasques",
"Clone labels" : "Clonar etiquetes", "Clone labels" : "Clonar etiquetes",
"Clone due dates" : "Clonar les dates de venciment", "Clone due dates" : "Clonar les dates de caducitat",
"Advanced options" : "Paràmetres avançats", "Advanced options" : "Opcions avançades",
"Move all cards to the first list" : "Mou totes les cartes a la primera llista", "Move all cards to the first list" : "Mou totes les targetes a la primera llista",
"Restore archived cards" : "Restaura les targetes arxivades", "Restore archived cards" : "Restaura les targetes arxivades",
"Clone" : "Clonar", "Clone" : "Clonar",
"Loading filtered view" : "S'està carregant la visualització filtrada", "Loading filtered view" : "S'està carregant la visualització filtrada",

View File

@@ -19,21 +19,38 @@ OC.L10N.register(
"Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD", "Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD",
"Cancel" : "Loobu", "Cancel" : "Loobu",
"File already exists" : "Fail on juba olemas", "File already exists" : "Fail on juba olemas",
"Active filters" : "Aktiivsed filtrid",
"Open" : "Ava", "Open" : "Ava",
"Completed" : "Lõpetatud", "Completed" : "Lõpetatud",
"Clear filter" : "Tühjenda filter",
"Open details" : "Ava üksikasjad",
"Details" : "Üksikasjad", "Details" : "Üksikasjad",
"Sharing" : "Jagamine", "Sharing" : "Jagamine",
"Tags" : "Sildid", "Tags" : "Sildid",
"Activity" : "Tegevus", "Activity" : "Tegevus",
"Undo" : "Tühista", "Undo" : "Tühista",
"Transfer" : "Teisalda",
"Can edit" : "Võib redigeerida", "Can edit" : "Võib redigeerida",
"Can share" : "Can share", "Can share" : "Can share",
"Owner" : "Omanik", "Owner" : "Omanik",
"Delete" : "Kustuta", "Delete" : "Kustuta",
"Edit" : "Redigeeri", "Edit" : "Redigeeri",
"Download" : "Lae alla", "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",
"Modified" : "Muudetud", "Modified" : "Muudetud",
"Created" : "Loodud", "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", "Comments" : "Kommentaarid",
"Save" : "Salvesta", "Save" : "Salvesta",
"Created:" : "Loodud:", "Created:" : "Loodud:",

View File

@@ -17,21 +17,38 @@
"Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD", "Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD",
"Cancel" : "Loobu", "Cancel" : "Loobu",
"File already exists" : "Fail on juba olemas", "File already exists" : "Fail on juba olemas",
"Active filters" : "Aktiivsed filtrid",
"Open" : "Ava", "Open" : "Ava",
"Completed" : "Lõpetatud", "Completed" : "Lõpetatud",
"Clear filter" : "Tühjenda filter",
"Open details" : "Ava üksikasjad",
"Details" : "Üksikasjad", "Details" : "Üksikasjad",
"Sharing" : "Jagamine", "Sharing" : "Jagamine",
"Tags" : "Sildid", "Tags" : "Sildid",
"Activity" : "Tegevus", "Activity" : "Tegevus",
"Undo" : "Tühista", "Undo" : "Tühista",
"Transfer" : "Teisalda",
"Can edit" : "Võib redigeerida", "Can edit" : "Võib redigeerida",
"Can share" : "Can share", "Can share" : "Can share",
"Owner" : "Omanik", "Owner" : "Omanik",
"Delete" : "Kustuta", "Delete" : "Kustuta",
"Edit" : "Redigeeri", "Edit" : "Redigeeri",
"Download" : "Lae alla", "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",
"Modified" : "Muudetud", "Modified" : "Muudetud",
"Created" : "Loodud", "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", "Comments" : "Kommentaarid",
"Save" : "Salvesta", "Save" : "Salvesta",
"Created:" : "Loodud:", "Created:" : "Loodud:",

View File

@@ -24,7 +24,7 @@ OC.L10N.register(
"Open" : "Atvērt", "Open" : "Atvērt",
"Completed" : "Pabeigts", "Completed" : "Pabeigts",
"Clear filter" : "Notīrīt atlasi", "Clear filter" : "Notīrīt atlasi",
"Hide archived cards" : "Slēpt arhivētās kartes", "Hide archived cards" : "Paslēpt arhivētās kartes",
"Show archived cards" : "Rādīt arhivētās kartes", "Show archived cards" : "Rādīt arhivētās kartes",
"Open details" : "Atvērt detaļas", "Open details" : "Atvērt detaļas",
"Details" : "Detaļas", "Details" : "Detaļas",

View File

@@ -22,7 +22,7 @@
"Open" : "Atvērt", "Open" : "Atvērt",
"Completed" : "Pabeigts", "Completed" : "Pabeigts",
"Clear filter" : "Notīrīt atlasi", "Clear filter" : "Notīrīt atlasi",
"Hide archived cards" : "Slēpt arhivētās kartes", "Hide archived cards" : "Paslēpt arhivētās kartes",
"Show archived cards" : "Rādīt arhivētās kartes", "Show archived cards" : "Rādīt arhivētās kartes",
"Open details" : "Atvērt detaļas", "Open details" : "Atvērt detaļas",
"Details" : "Detaļas", "Details" : "Detaļas",

View File

@@ -76,6 +76,7 @@ OC.L10N.register(
"Cards due tomorrow" : "Cartões com vencimento amanhã", "Cards due tomorrow" : "Cartões com vencimento amanhã",
"Upcoming cards" : "Próximos cartões", "Upcoming cards" : "Próximos cartões",
"Load more" : "Carregar mais", "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.", "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ê.", "{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} atribuiu o cartão {deck-card} no {deck-board} a você.",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.", "The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
@@ -98,9 +99,16 @@ OC.L10N.register(
"Action needed" : "Ação necessária", "Action needed" : "Ação necessária",
"Later" : "Depois", "Later" : "Depois",
"copy" : "copiar", "copy" : "copiar",
"Read more inside" : "Leia mais no interior",
"Custom lists - click to rename!" : "Listas personalizadas - clique para renomear!",
"To Do" : "A Fazer", "To Do" : "A Fazer",
"In Progress" : "Em Andamento", "In Progress" : "Em Andamento",
"Done" : "Concluído", "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 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 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", "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",
@@ -121,10 +129,12 @@ OC.L10N.register(
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto", "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", "Search by board title" : "Pesquisar pelo título do painel",
"Select board" : "Selecionar painel", "Select board" : "Selecionar painel",
"Move/copy card" : "Mover/copiar cartão",
"Select a board" : "Selecionar um painel", "Select a board" : "Selecionar um painel",
"No lists available" : "Nenhuma lista disponível", "No lists available" : "Nenhuma lista disponível",
"Select a list" : "Selecione uma lista", "Select a list" : "Selecione uma lista",
"Move card" : "Mover cartão", "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", "Select the card to link to a project" : "Selecione o cartão para vincular a um projeto",
"Link to card" : "Vincular ao cartão", "Link to card" : "Vincular ao cartão",
"Select a card" : "Selecionar um cartão", "Select a card" : "Selecionar um cartão",
@@ -337,8 +347,14 @@ OC.L10N.register(
"Assigned cards" : "Cartões atribuídos", "Assigned cards" : "Cartões atribuídos",
"No notifications" : "Sem notificações", "No notifications" : "Sem notificações",
"Delete board" : "Excluir painel", "Delete board" : "Excluir painel",
"Clone {boardTitle}" : "Clonar {boardTitle}",
"Clone cards" : "Clonar cartões", "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", "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", "Clone" : "Clonar",
"Loading filtered view" : "Carregando exibição filtrada", "Loading filtered view" : "Carregando exibição filtrada",
"Today" : "Hoje", "Today" : "Hoje",

View File

@@ -74,6 +74,7 @@
"Cards due tomorrow" : "Cartões com vencimento amanhã", "Cards due tomorrow" : "Cartões com vencimento amanhã",
"Upcoming cards" : "Próximos cartões", "Upcoming cards" : "Próximos cartões",
"Load more" : "Carregar mais", "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.", "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ê.", "{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} atribuiu o cartão {deck-card} no {deck-board} a você.",
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.", "The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
@@ -96,9 +97,16 @@
"Action needed" : "Ação necessária", "Action needed" : "Ação necessária",
"Later" : "Depois", "Later" : "Depois",
"copy" : "copiar", "copy" : "copiar",
"Read more inside" : "Leia mais no interior",
"Custom lists - click to rename!" : "Listas personalizadas - clique para renomear!",
"To Do" : "A Fazer", "To Do" : "A Fazer",
"In Progress" : "Em Andamento", "In Progress" : "Em Andamento",
"Done" : "Concluído", "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 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 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", "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",
@@ -119,10 +127,12 @@
"Select the board to link to a project" : "Selecione o painel para vincular a um projeto", "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", "Search by board title" : "Pesquisar pelo título do painel",
"Select board" : "Selecionar painel", "Select board" : "Selecionar painel",
"Move/copy card" : "Mover/copiar cartão",
"Select a board" : "Selecionar um painel", "Select a board" : "Selecionar um painel",
"No lists available" : "Nenhuma lista disponível", "No lists available" : "Nenhuma lista disponível",
"Select a list" : "Selecione uma lista", "Select a list" : "Selecione uma lista",
"Move card" : "Mover cartão", "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", "Select the card to link to a project" : "Selecione o cartão para vincular a um projeto",
"Link to card" : "Vincular ao cartão", "Link to card" : "Vincular ao cartão",
"Select a card" : "Selecionar um cartão", "Select a card" : "Selecionar um cartão",
@@ -335,8 +345,14 @@
"Assigned cards" : "Cartões atribuídos", "Assigned cards" : "Cartões atribuídos",
"No notifications" : "Sem notificações", "No notifications" : "Sem notificações",
"Delete board" : "Excluir painel", "Delete board" : "Excluir painel",
"Clone {boardTitle}" : "Clonar {boardTitle}",
"Clone cards" : "Clonar cartões", "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", "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", "Clone" : "Clonar",
"Loading filtered view" : "Carregando exibição filtrada", "Loading filtered view" : "Carregando exibição filtrada",
"Today" : "Hoje", "Today" : "Hoje",

View File

@@ -148,6 +148,7 @@ OC.L10N.register(
"Search" : "Pesquisa sobre", "Search" : "Pesquisa sobre",
"Archived boards" : "Quadros arquivados", "Archived boards" : "Quadros arquivados",
"Shared with you" : "Shared with you", "Shared with you" : "Shared with you",
"Cancel edit" : "Cancelar edição",
"No reminder" : "Nenhum lembrete", "No reminder" : "Nenhum lembrete",
"An error occurred" : "Ocorreu um erro", "An error occurred" : "Ocorreu um erro",
"Board details" : "Detalhes do quadro", "Board details" : "Detalhes do quadro",

View File

@@ -146,6 +146,7 @@
"Search" : "Pesquisa sobre", "Search" : "Pesquisa sobre",
"Archived boards" : "Quadros arquivados", "Archived boards" : "Quadros arquivados",
"Shared with you" : "Shared with you", "Shared with you" : "Shared with you",
"Cancel edit" : "Cancelar edição",
"No reminder" : "Nenhum lembrete", "No reminder" : "Nenhum lembrete",
"An error occurred" : "Ocorreu um erro", "An error occurred" : "Ocorreu um erro",
"Board details" : "Detalhes do quadro", "Board details" : "Detalhes do quadro",

View File

@@ -1,26 +1,44 @@
OC.L10N.register( OC.L10N.register(
"deck", "deck",
{ {
"Deck" : "Pastki qavat",
"copy" : "copy", "copy" : "copy",
"Done" : "Done", "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",
"Cancel" : "Cancel", "Cancel" : "Cancel",
"Open" : "Open", "Open" : "Open",
"Details" : "Details", "Details" : "Details",
"Sharing" : "Ulashish", "Sharing" : "Ulashish",
"Tags" : "Tags", "Tags" : "Tags",
"Activity" : "Faollik",
"Can edit" : "Can edit", "Can edit" : "Can edit",
"Owner" : "Owner", "Owner" : "Owner",
"Delete" : "Delete", "Delete" : "Delete",
"Edit" : "Tahrirlash",
"Download" : "Download", "Download" : "Download",
"Modified" : "Modified", "Modified" : "Modified",
"Comments" : "Comments", "Comments" : "Comments",
"Save" : "Save", "Save" : "Save",
"In reply to" : "ga javoban",
"Reply" : "Javob bering",
"Update" : "Update", "Update" : "Update",
"Description" : "Tavsif",
"seconds ago" : "seconds ago", "seconds ago" : "seconds ago",
"Search" : "Search", "Search" : "Search",
"Shared with you" : "Shared with you", "Shared with you" : "Shared with you",
"No reminder" : "Eslatma yo'q",
"No notifications" : "Hech qanday bildirishnoma yo'q",
"Today" : "Today", "Today" : "Today",
"No results found" : "Hech qanday natija topilmadi",
"Close" : "Close", "Close" : "Close",
"Share" : "Ulashish",
"Personal" : "Personal" "Personal" : "Personal"
}, },
"nplurals=1; plural=0;"); "nplurals=1; plural=0;");

View File

@@ -1,24 +1,42 @@
{ "translations": { { "translations": {
"Deck" : "Pastki qavat",
"copy" : "copy", "copy" : "copy",
"Done" : "Done", "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",
"Cancel" : "Cancel", "Cancel" : "Cancel",
"Open" : "Open", "Open" : "Open",
"Details" : "Details", "Details" : "Details",
"Sharing" : "Ulashish", "Sharing" : "Ulashish",
"Tags" : "Tags", "Tags" : "Tags",
"Activity" : "Faollik",
"Can edit" : "Can edit", "Can edit" : "Can edit",
"Owner" : "Owner", "Owner" : "Owner",
"Delete" : "Delete", "Delete" : "Delete",
"Edit" : "Tahrirlash",
"Download" : "Download", "Download" : "Download",
"Modified" : "Modified", "Modified" : "Modified",
"Comments" : "Comments", "Comments" : "Comments",
"Save" : "Save", "Save" : "Save",
"In reply to" : "ga javoban",
"Reply" : "Javob bering",
"Update" : "Update", "Update" : "Update",
"Description" : "Tavsif",
"seconds ago" : "seconds ago", "seconds ago" : "seconds ago",
"Search" : "Search", "Search" : "Search",
"Shared with you" : "Shared with you", "Shared with you" : "Shared with you",
"No reminder" : "Eslatma yo'q",
"No notifications" : "Hech qanday bildirishnoma yo'q",
"Today" : "Today", "Today" : "Today",
"No results found" : "Hech qanday natija topilmadi",
"Close" : "Close", "Close" : "Close",
"Share" : "Ulashish",
"Personal" : "Personal" "Personal" : "Personal"
},"pluralForm" :"nplurals=1; plural=0;" },"pluralForm" :"nplurals=1; plural=0;"
} }

12350
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -31,11 +31,11 @@
}, },
"dependencies": { "dependencies": {
"@babel/polyfill": "^7.12.1", "@babel/polyfill": "^7.12.1",
"@babel/runtime": "^7.26.7", "@babel/runtime": "^7.26.10",
"@nextcloud/auth": "^2.4.0", "@nextcloud/auth": "^2.4.0",
"@nextcloud/axios": "^2.5.1", "@nextcloud/axios": "^2.5.1",
"@nextcloud/capabilities": "^1.2.0", "@nextcloud/capabilities": "^1.2.0",
"@nextcloud/dialogs": "github:nextcloud-libraries/nextcloud-dialogs#vue3", "@nextcloud/dialogs": "^6.0.1",
"@nextcloud/event-bus": "^3.3.2", "@nextcloud/event-bus": "^3.3.2",
"@nextcloud/files": "^3.10.1", "@nextcloud/files": "^3.10.1",
"@nextcloud/initial-state": "^2.2.0", "@nextcloud/initial-state": "^2.2.0",
@@ -43,11 +43,7 @@
"@nextcloud/moment": "^1.3.2", "@nextcloud/moment": "^1.3.2",
"@nextcloud/notify_push": "^1.3.0", "@nextcloud/notify_push": "^1.3.0",
"@nextcloud/router": "^3.0.1", "@nextcloud/router": "^3.0.1",
"@nextcloud/vue": "^9.0.0-alpha.7", "@nextcloud/vue": "^8.22.0",
"@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", "blueimp-md5": "^2.19.0",
"chroma-js": "^3.1.2", "chroma-js": "^3.1.2",
"dompurify": "^3.2.4", "dompurify": "^3.2.4",
@@ -58,14 +54,16 @@
"moment": "^2.30.1", "moment": "^2.30.1",
"p-queue": "^8.0.1", "p-queue": "^8.0.1",
"url-search-params-polyfill": "^8.2.5", "url-search-params-polyfill": "^8.2.5",
"v3-infinite-loading": "^1.3.2", "vue": "^2.7.15",
"vue": "^3.5.13", "vue-at": "^2.5.1",
"vue-click-outside": "^1.1.0", "vue-click-outside": "^1.1.0",
"vue-easymde": "^2.0.0", "vue-easymde": "^2.0.0",
"vue-infinite-loading": "^2.4.5",
"vue-material-design-icons": "^5.3.1", "vue-material-design-icons": "^5.3.1",
"vue-router": "^4.5.0", "vue-router": "^3.6.5",
"vue3-smooth-dnd": "^0.0.6", "vue-smooth-dnd": "^0.8.1",
"vuex": "^4.1.0" "vuex": "^3.6.2",
"vuex-router-sync": "^5.0.0"
}, },
"browserslist": [ "browserslist": [
"extends @nextcloud/browserslist-config" "extends @nextcloud/browserslist-config"
@@ -80,15 +78,17 @@
"@nextcloud/cypress": "^1.0.0-beta.13", "@nextcloud/cypress": "^1.0.0-beta.13",
"@nextcloud/eslint-config": "^8.4.2", "@nextcloud/eslint-config": "^8.4.2",
"@nextcloud/stylelint-config": "^3.0.1", "@nextcloud/stylelint-config": "^3.0.1",
"@nextcloud/webpack-vue-config": "github:nextcloud-libraries/webpack-vue-config#vue3", "@nextcloud/webpack-vue-config": "^6.2.0",
"@relative-ci/agent": "^4.2.14", "@relative-ci/agent": "^4.2.14",
"@vue/test-utils": "^2.4.6", "@vue/test-utils": "^2.4.6",
"@vue/vue2-jest": "^29.2.6",
"cypress": "^13.17.0", "cypress": "^13.17.0",
"eslint-plugin-cypress": "^3.6.0", "eslint-plugin-cypress": "^3.6.0",
"eslint-webpack-plugin": "^4.2.0", "eslint-webpack-plugin": "^4.2.0",
"jest": "^29.7.0", "jest": "^29.7.0",
"jest-serializer-vue": "^3.1.0", "jest-serializer-vue": "^3.1.0",
"stylelint-webpack-plugin": "^5.0.1" "stylelint-webpack-plugin": "^5.0.1",
"vue-template-compiler": "^2.7.16"
}, },
"jest": { "jest": {
"moduleFileExtensions": [ "moduleFileExtensions": [

View File

@@ -6,6 +6,7 @@
xmlns="https://getpsalm.org/schema/config" xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config"
errorBaseline="tests/psalm-baseline.xml" errorBaseline="tests/psalm-baseline.xml"
phpVersion="8.1"
> >
<stubs> <stubs>
<file name="tests/stub.phpstub" preloadClasses="true"/> <file name="tests/stub.phpstub" preloadClasses="true"/>

View File

@@ -1,51 +1,15 @@
<!-- <!--
- SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later - 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> <template>
<NcContent app-name="deck"> <NcContent app-name="deck" :class="{ 'nav-hidden': !navShown, 'sidebar-hidden': !sidebarRouterView }">
<AppNavigation /> <AppNavigation />
<NcAppContent :allow-swipe-navigation="false"> <NcAppContent :allow-swipe-navigation="false">
<router-view /> <router-view />
</NcAppContent> </NcAppContent>
<div v-if="$route.params.id || $route.params.cardId"> <div v-if="$route.params.id || $route.params.cardId">
<NcModal v-if="cardDetailsInModal && $route.params.cardId" <NcModal v-if="cardDetailsInModal && $route.params.cardId"
:name="t('deck', 'Card details')" :name="t('deck', 'Card details')"
@@ -57,10 +21,179 @@ export default {
<router-view name="sidebar" /> <router-view name="sidebar" />
</div> </div>
</NcModal> </NcModal>
<router-view name="sidebar" :visible="!cardDetailsInModal || !$route.params.cardId" /> <router-view name="sidebar" :visible="!cardDetailsInModal || !$route.params.cardId" />
</div> </div>
<KeyboardShortcuts /> <KeyboardShortcuts />
<CardMoveDialog /> <CardMoveDialog />
</NcContent> </NcContent>
</template> </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>

View File

@@ -62,7 +62,7 @@ export default {
mounted() { mounted() {
subscribe('deck:card:show-move-dialog', this.openModal) subscribe('deck:card:show-move-dialog', this.openModal)
}, },
unmounted() { destroyed() {
unsubscribe('deck:card:show-move-dialog', this.openModal) unsubscribe('deck:card:show-move-dialog', this.openModal)
}, },
methods: { methods: {

View File

@@ -10,15 +10,9 @@
:key="activity.activity_id" :key="activity.activity_id"
:activity="activity" /> :activity="activity" />
<InfiniteLoading :identifier="objectId" @infinite="infiniteHandler" @change="changeObject"> <InfiniteLoading :identifier="objectId" @infinite="infiniteHandler" @change="changeObject">
<template #spinner> <div slot="spinner" class="icon-loading" />
<div class="icon-loading" /> <div slot="no-more" />
</template> <div slot="no-results" />
<template #no-more>
<div />
</template>
<template #no-results>
<div />
</template>
</InfiniteLoading> </InfiniteLoading>
</div> </div>
</template> </template>
@@ -27,7 +21,7 @@
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import { generateOcsUrl } from '@nextcloud/router' import { generateOcsUrl } from '@nextcloud/router'
import ActivityEntry from './ActivityEntry.vue' import ActivityEntry from './ActivityEntry.vue'
// import InfiniteLoading from 'v3-infinite-loading' import InfiniteLoading from 'vue-infinite-loading'
const ACTIVITY_FETCH_LIMIT = 50 const ACTIVITY_FETCH_LIMIT = 50
@@ -35,6 +29,7 @@ export default {
name: 'ActivityList', name: 'ActivityList',
components: { components: {
ActivityEntry, ActivityEntry,
InfiniteLoading,
}, },
props: { props: {
filter: { filter: {

View File

@@ -231,16 +231,12 @@
</NcActionButton> </NcActionButton>
<NcActionButton v-if="compactMode" <NcActionButton v-if="compactMode"
@click="toggleCompactMode"> @click="toggleCompactMode">
<template #icon> <ArrowExpandVerticalIcon slot="icon" :size="20" decorative />
<ArrowExpandVerticalIcon :size="20" decorative />
</template>
{{ t('deck', 'Toggle compact mode') }} {{ t('deck', 'Toggle compact mode') }}
</NcActionButton> </NcActionButton>
<NcActionButton v-else <NcActionButton v-else
@click="toggleCompactMode"> @click="toggleCompactMode">
<template #icon> <ArrowCollapseVerticalIcon slot="icon" :size="20" decorative />
<ArrowCollapseVerticalIcon :size="20" decorative />
</template>
{{ t('deck', 'Toggle compact mode') }} {{ t('deck', 'Toggle compact mode') }}
</NcActionButton> </NcActionButton>
<NcActionButton @click="toggleShowCardCover"> <NcActionButton @click="toggleShowCardCover">
@@ -278,7 +274,6 @@ import SessionList from './SessionList.vue'
import { isNotifyPushEnabled } from '../sessions.js' import { isNotifyPushEnabled } from '../sessions.js'
import CreateNewCardCustomPicker from '../views/CreateNewCardCustomPicker.vue' import CreateNewCardCustomPicker from '../views/CreateNewCardCustomPicker.vue'
import { getCurrentUser } from '@nextcloud/auth' import { getCurrentUser } from '@nextcloud/auth'
import { onClickOutside } from '@vueuse/core'
export default { export default {
name: 'Controls', name: 'Controls',
@@ -364,11 +359,6 @@ export default {
} }
}, },
}, },
created() {
onClickOutside(() => {
this.hideAddStack()
})
},
beforeMount() { beforeMount() {
subscribe('deck:board:show-new-card', this.clickShowAddCardModel) subscribe('deck:board:show-new-card', this.clickShowAddCardModel)
subscribe('deck:board:toggle-filter-popover', this.triggerOpenFilters) subscribe('deck:board:toggle-filter-popover', this.triggerOpenFilters)
@@ -376,7 +366,7 @@ export default {
subscribe('deck:board:toggle-filter-by-me', this.triggerFilterByMe) subscribe('deck:board:toggle-filter-by-me', this.triggerFilterByMe)
}, },
beforeUnmount() { beforeDestroy() {
unsubscribe('deck:board:show-new-card', this.clickShowAddCardModel) unsubscribe('deck:board:show-new-card', this.clickShowAddCardModel)
unsubscribe('deck:board:toggle-filter-popover', this.triggerOpenFilters) unsubscribe('deck:board:toggle-filter-popover', this.triggerOpenFilters)
unsubscribe('deck:board:clear-filter', this.triggerClearFilter) unsubscribe('deck:board:clear-filter', this.triggerClearFilter)

View File

@@ -6,6 +6,7 @@
<!-- :style="{top:cardTop, left:cardLeft}" --> <!-- :style="{top:cardTop, left:cardLeft}" -->
<div v-if="card && selector" <div v-if="card && selector"
ref="shortcutModal" ref="shortcutModal"
v-click-outside="close"
class="keyboard-shortcuts__modal" class="keyboard-shortcuts__modal"
tabindex="0" tabindex="0"
@keydown.esc="close"> @keydown.esc="close">
@@ -17,7 +18,6 @@
</template> </template>
<script> <script>
import DueDateSelector from './card/DueDateSelector.vue' import DueDateSelector from './card/DueDateSelector.vue'
import { onClickOutside } from '@vueuse/core'
import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus' import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import TagSelector from './card/TagSelector.vue' import TagSelector from './card/TagSelector.vue'
@@ -50,9 +50,8 @@ export default {
subscribe('deck:card:show-assignment-selector', this.handleShowAssignemnt) subscribe('deck:card:show-assignment-selector', this.handleShowAssignemnt)
subscribe('deck:card:show-due-date-selector', this.handleShowDueDate) subscribe('deck:card:show-due-date-selector', this.handleShowDueDate)
subscribe('deck:card:show-label-selector', this.handleShowLabel) subscribe('deck:card:show-label-selector', this.handleShowLabel)
onClickOutside(this.close)
}, },
unmounted() { destroyed() {
document.removeEventListener('keydown', this.onKeydown) document.removeEventListener('keydown', this.onKeydown)
unsubscribe('deck:card:show-assignment-selector', this.handleShowAssignemnt) unsubscribe('deck:card:show-assignment-selector', this.handleShowAssignemnt)
unsubscribe('deck:card:show-due-date-selector', this.handleShowDueDate) unsubscribe('deck:card:show-due-date-selector', this.handleShowDueDate)
@@ -260,7 +259,6 @@ export default {
this.$refs.shortcutModal?.focus() this.$refs.shortcutModal?.focus()
}, },
close() { close() {
console.log("HHHHH")
this.card = null this.card = null
this.selector = null this.selector = null
}, },

View File

@@ -29,8 +29,8 @@
{{ t('deck', 'Create a new list to add cards to this board') }} {{ t('deck', 'Create a new list to add cards to this board') }}
<form @submit.prevent="addNewStack()"> <form @submit.prevent="addNewStack()">
<NcTextField ref="newStackInput" <NcTextField ref="newStackInput"
v-model="newStackTitle"
:disable="loading" :disable="loading"
:value.sync="newStackTitle"
:placeholder="t('deck', 'List name')" :placeholder="t('deck', 'List name')"
type="text" /> type="text" />
<NcButton type="secondary" <NcButton type="secondary"
@@ -63,10 +63,7 @@
data-click-closes-sidebar="true" data-click-closes-sidebar="true"
data-dragscroll-enabled data-dragscroll-enabled
class="stack-draggable-wrapper"> class="stack-draggable-wrapper">
<Stack :stack="stack" <Stack :stack="stack" :dragging="draggingStack" data-click-closes-sidebar="true" />
:dragging="draggingStack"
data-click-closes-sidebar="true"
@open-card="openCard" />
</Draggable> </Draggable>
</Container> </Container>
</div> </div>
@@ -85,7 +82,7 @@
</template> </template>
<script> <script>
import { Container, Draggable } from 'vue3-smooth-dnd' import { Container, Draggable } from 'vue-smooth-dnd'
import { mapState, mapGetters } from 'vuex' import { mapState, mapGetters } from 'vuex'
import Controls from '../Controls.vue' import Controls from '../Controls.vue'
import DeckIcon from '../icons/DeckIcon.vue' import DeckIcon from '../icons/DeckIcon.vue'
@@ -168,14 +165,14 @@ export default {
created() { created() {
this.session = createSession(this.id) this.session = createSession(this.id)
this.fetchData() this.fetchData()
this.$root.$on('open-card', (cardId) => {
this.localModal = cardId
})
}, },
beforeUnmount() { beforeDestroy() {
this.session.close() this.session.close()
}, },
methods: { methods: {
openCard(cardId) {
},
async fetchData() { async fetchData() {
this.loading = true this.loading = true
try { try {
@@ -256,8 +253,8 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@use '../../css/animations'; @import '../../css/animations';
@use '../../css/variables'; @import '../../css/variables';
form { form {
text-align: center; text-align: center;
@@ -285,7 +282,7 @@ export default {
} }
.board { .board {
padding-left: variables.$board-spacing; padding-left: $board-spacing;
position: relative; position: relative;
max-height: calc(100% - var(--default-clickable-area)); max-height: calc(100% - var(--default-clickable-area));
overflow: hidden; overflow: hidden;
@@ -316,8 +313,8 @@ export default {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
// Margin left instead of padidng to avoid jumps on dropping a card // Margin left instead of padidng to avoid jumps on dropping a card
margin-left: variables.$stack-spacing; margin-left: $stack-spacing;
padding-right: variables.$stack-spacing; padding-right: $stack-spacing;
overflow-x: hidden; overflow-x: hidden;
overflow-y: auto; overflow-y: auto;
padding-top: 15px; padding-top: 15px;

View File

@@ -102,10 +102,7 @@
<transition :appear="animate && !card.animated && (card.animated=true)" <transition :appear="animate && !card.animated && (card.animated=true)"
:appear-class="'zoom-appear-class'" :appear-class="'zoom-appear-class'"
:appear-active-class="'zoom-appear-active-class'"> :appear-active-class="'zoom-appear-active-class'">
<CardItem :id="card.id" <CardItem :id="card.id" ref="card" :dragging="draggingCard" />
ref="card"
:dragging="draggingCard"
@open-card="openCard" />
</transition> </transition>
</Draggable> </Draggable>
</Container> </Container>
@@ -139,7 +136,7 @@
<script> <script>
import ClickOutside from 'vue-click-outside' import ClickOutside from 'vue-click-outside'
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from 'vuex'
import { Container, Draggable } from 'vue3-smooth-dnd' import { Container, Draggable } from 'vue-smooth-dnd'
import ArchiveIcon from 'vue-material-design-icons/Archive.vue' import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
import CardPlusOutline from 'vue-material-design-icons/CardPlusOutline.vue' import CardPlusOutline from 'vue-material-design-icons/CardPlusOutline.vue'
import { NcActions, NcActionButton, NcModal } from '@nextcloud/vue' import { NcActions, NcActionButton, NcModal } from '@nextcloud/vue'
@@ -174,9 +171,6 @@ export default {
default: undefined, default: undefined,
}, },
}, },
emits: [
'open-card',
],
data() { data() {
return { return {
editing: false, editing: false,
@@ -239,9 +233,6 @@ export default {
}, },
methods: { methods: {
openCard(cardId) {
this.$emit('open-card', cardId)
},
stopCardCreation(e) { stopCardCreation(e) {
// For some reason the submit event triggers a MouseEvent that is bubbling to the outside // For some reason the submit event triggers a MouseEvent that is bubbling to the outside
// so we have to ignore it // so we have to ignore it
@@ -371,10 +362,10 @@ export default {
@use 'sass:math'; @use 'sass:math';
@use './../../css/variables'; @import './../../css/variables';
.stack { .stack {
width: variables.$stack-width + variables.$stack-spacing * 3; width: $stack-width + $stack-spacing * 3;
} }
.stack__header { .stack__header {
@@ -382,8 +373,8 @@ export default {
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 100; z-index: 100;
padding-left: variables.$card-spacing; padding-left: $card-spacing;
padding-right: variables.$card-spacing; padding-right: $card-spacing;
margin: 6px; margin: 6px;
margin-top: 0; margin-top: 0;
cursor: grab; cursor: grab;
@@ -427,7 +418,7 @@ export default {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
max-width: calc(variables.$stack-width - 60px); max-width: calc($stack-width - 60px);
border-radius: 3px; border-radius: 3px;
padding: 4px 4px; padding: 4px 4px;
font-size: var(--default-font-size); font-size: var(--default-font-size);
@@ -468,8 +459,8 @@ export default {
form { form {
display: flex; display: flex;
margin-left: variables.$stack-spacing; margin-left: $stack-spacing;
margin-right: variables.$stack-spacing; margin-right: $stack-spacing;
width: 100%; width: 100%;
border: 2px solid var(--color-border-maxcontrast); border: 2px solid var(--color-border-maxcontrast);
border-radius: var(--border-radius-large); border-radius: var(--border-radius-large);

View File

@@ -72,7 +72,8 @@
</template> </template>
<script> <script>
import { NcActionButton, NcAppSidebar, NcAppSidebarTab, NcReferenceList } from '@nextcloud/vue' import { NcActionButton, NcAppSidebar, NcAppSidebarTab } from '@nextcloud/vue'
import { NcReferenceList } from '@nextcloud/vue/dist/Components/NcRichText.js'
import { getCapabilities } from '@nextcloud/capabilities' import { getCapabilities } from '@nextcloud/capabilities'
import { mapState, mapGetters } from 'vuex' import { mapState, mapGetters } from 'vuex'
import CardSidebarTabDetails from './CardSidebarTabDetails.vue' import CardSidebarTabDetails from './CardSidebarTabDetails.vue'

View File

@@ -23,11 +23,11 @@
:key="comment.id" :key="comment.id"
:comment="comment" :comment="comment"
@doReload="loadComments" /> @doReload="loadComments" />
<!-- <InfiniteLoading :identifier="card.id" @infinite="infiniteHandler"> <InfiniteLoading :identifier="card.id" @infinite="infiniteHandler">
<div slot="spinner" class="icon-loading" /> <div slot="spinner" class="icon-loading" />
<div slot="no-more" /> <div slot="no-more" />
<div slot="no-results" /> <div slot="no-results" />
</InfiniteLoading> --> </InfiniteLoading>
</ul> </ul>
<div v-else-if="isLoading" class="icon icon-loading" /> <div v-else-if="isLoading" class="icon icon-loading" />
<div v-else class="emptycontent"> <div v-else class="emptycontent">
@@ -42,7 +42,7 @@ import { mapState, mapGetters } from 'vuex'
import { NcAvatar } from '@nextcloud/vue' import { NcAvatar } from '@nextcloud/vue'
import CommentItem from './CommentItem.vue' import CommentItem from './CommentItem.vue'
import CommentForm from './CommentForm.vue' import CommentForm from './CommentForm.vue'
// import InfiniteLoading from 'v3-infinite-loading' import InfiniteLoading from 'vue-infinite-loading'
import { getCurrentUser } from '@nextcloud/auth' import { getCurrentUser } from '@nextcloud/auth'
export default { export default {
@@ -51,7 +51,7 @@ export default {
NcAvatar, NcAvatar,
CommentItem, CommentItem,
CommentForm, CommentForm,
// InfiniteLoading, InfiniteLoading,
}, },
props: { props: {
card: { card: {

View File

@@ -2,13 +2,8 @@
- SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later - SPDX-License-Identifier: AGPL-3.0-or-later
--> -->
<template>
<div>
THIS HAS AT
</div>
</template>
<!-- <template> <template>
<div class="comment-form"> <div class="comment-form">
<form @submit.prevent="submit"> <form @submit.prevent="submit">
<At ref="at" <At ref="at"
@@ -196,4 +191,4 @@ export default {
.atwho-li--avatar { .atwho-li--avatar {
margin-right: 10px; margin-right: 10px;
} }
</style> --> </style>

View File

@@ -170,7 +170,7 @@ export default {
mounted() { mounted() {
this.setupEditor() this.setupEditor()
}, },
async beforeUnmount() { async beforeDestroy() {
await this.destroyEditor() await this.destroyEditor()
}, },
methods: { methods: {

View File

@@ -4,12 +4,8 @@
--> -->
<template> <template>
<CardDetailEntry :label="t('deck', 'Assign a due date to this card…')" data-test="due-date-selector"> <CardDetailEntry :label="t('deck', 'Assign a due date to this card…')" data-test="due-date-selector">
<template v-if="!card.done" #icon> <Calendar v-if="!card.done" slot="icon" :size="20" />
<Calendar :size="20" /> <CalendarCheck v-else slot="icon" :size="20" />
</template>
<template v-else #icon>
<CalendarCheck :size="20" />
</template>
<template v-if="!card.done && !card.archived"> <template v-if="!card.done && !card.archived">
<NcDateTimePickerNative v-if="duedate" <NcDateTimePickerNative v-if="duedate"
id="card-duedate-picker" id="card-duedate-picker"

View File

@@ -72,7 +72,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@use '../../css/variables'; @import '../../css/variables';
.card-cover { .card-cover {
height: 90px; height: 90px;

View File

@@ -88,7 +88,6 @@ import CardMenu from './CardMenu.vue'
import CardCover from './CardCover.vue' import CardCover from './CardCover.vue'
import DueDate from './badges/DueDate.vue' import DueDate from './badges/DueDate.vue'
import { getCurrentUser } from '@nextcloud/auth' import { getCurrentUser } from '@nextcloud/auth'
import { emit } from '@nextcloud/event-bus'
const TITLE_EDITING_STATE = { const TITLE_EDITING_STATE = {
OFF: 0, OFF: 0,
@@ -121,7 +120,6 @@ export default {
default: false, default: false,
}, },
}, },
emits: ['open-card'],
data() { data() {
return { return {
highlight: false, highlight: false,
@@ -228,9 +226,8 @@ export default {
this.$router.push({ name: 'card', params: { id: boardId, cardId: this.card.id } }).catch(() => {}) this.$router.push({ name: 'card', params: { id: boardId, cardId: this.card.id } }).catch(() => {})
return return
} }
emit('open-card', {
cardId: this.card.id, this.$root.$emit('open-card', this.card.id)
})
}, },
triggerEditTitle() { triggerEditTitle() {
this.editingTitle = TITLE_EDITING_STATE.PENDING this.editingTitle = TITLE_EDITING_STATE.PENDING
@@ -321,8 +318,8 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@use './../../css/animations'; @import './../../css/animations';
@use './../../css/variables'; @import './../../css/variables';
@mixin dark-card { @mixin dark-card {
border: 2px solid var(--color-border-dark); border: 2px solid var(--color-border-dark);
@@ -334,8 +331,8 @@ export default {
border-radius: var(--border-radius-large); border-radius: var(--border-radius-large);
font-size: 100%; font-size: 100%;
background-color: var(--color-main-background); background-color: var(--color-main-background);
margin-bottom: variables.$card-spacing; margin-bottom: $card-spacing;
padding: var(--default-grid-baseline) variables.$card-padding; padding: var(--default-grid-baseline) $card-padding;
border: 2px solid var(--color-border-dark); border: 2px solid var(--color-border-dark);
width: 100%; width: 100%;
display: flex; display: flex;
@@ -473,7 +470,7 @@ export default {
width: 32px; width: 32px;
} }
&.has-labels { &.has-labels {
padding-bottom: variables.$card-padding; padding-bottom: $card-padding;
} }
.labels { .labels {
height: 6px; height: 6px;

View File

@@ -6,9 +6,7 @@
<template> <template>
<div> <div>
<NcActionButton v-if="!hideDetailsEntry" :close-after-click="true" @click="openCard"> <NcActionButton v-if="!hideDetailsEntry" :close-after-click="true" @click="openCard">
<template #icon> <CardBulletedIcon slot="icon" :size="20" decorative />
<CardBulletedIcon icon :size="20" decorative />
</template>
{{ t('deck', 'Card details') }} {{ t('deck', 'Card details') }}
</NcActionButton> </NcActionButton>
<NcActionButton v-if="canEdit" :close-after-click="true" @click="editTitle"> <NcActionButton v-if="canEdit" :close-after-click="true" @click="editTitle">

View File

@@ -13,8 +13,8 @@
</NcColorPicker> </NcColorPicker>
<form @submit.prevent.stop="createBoard"> <form @submit.prevent.stop="createBoard">
<NcTextField ref="inputField" <NcTextField ref="inputField"
v-model="value"
:disable="loading" :disable="loading"
:value.sync="value"
:placeholder="t('deck', 'Board name')" :placeholder="t('deck', 'Board name')"
type="text" type="text"
required /> required />

View File

@@ -21,7 +21,7 @@
<AccountIcon v-if="board.acl.length > 0" /> <AccountIcon v-if="board.acl.length > 0" />
</template> </template>
<template v-if="!deleted" #actions> <template v-if="!deleted" slot="actions">
<template v-if="!isDueSubmenuActive"> <template v-if="!isDueSubmenuActive">
<NcActionButton icon="icon-info" <NcActionButton icon="icon-info"
:close-after-click="true" :close-after-click="true"
@@ -148,7 +148,7 @@
</template> </template>
<script> <script>
import { NcAppNavigationIconBullet, NcAppNavigationItem, NcColorPicker, NcButton, NcTextField, NcActionButton, NcLoadingIcon } from '@nextcloud/vue' import { NcAppNavigationIconBullet, NcAppNavigationItem, NcColorPicker, NcButton, NcTextField, NcActionButton } from '@nextcloud/vue'
import ClickOutside from 'vue-click-outside' import ClickOutside from 'vue-click-outside'
import ArchiveIcon from 'vue-material-design-icons/Archive.vue' import ArchiveIcon from 'vue-material-design-icons/Archive.vue'
import CloneIcon from 'vue-material-design-icons/ContentDuplicate.vue' import CloneIcon from 'vue-material-design-icons/ContentDuplicate.vue'
@@ -179,7 +179,6 @@ export default {
CloseIcon, CloseIcon,
CheckIcon, CheckIcon,
BoardCloneModal, BoardCloneModal,
NcLoadingIcon,
}, },
directives: { directives: {
ClickOutside, ClickOutside,
@@ -270,6 +269,8 @@ export default {
this.editTitle = this.board.title this.editTitle = this.board.title
this.editColor = '#' + this.board.color this.editColor = '#' + this.board.color
this.editing = true this.editing = true
this.$nextTick(() => this.$refs.inputField?.focus())
}, },
async actionClone() { async actionClone() {
this.loading = true this.loading = true

View File

@@ -145,7 +145,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@use './../../css/variables'; @import './../../css/variables';
.overview-wrapper { .overview-wrapper {
position: relative; position: relative;
@@ -162,16 +162,16 @@ export default {
overflow-x: scroll; overflow-x: scroll;
display: flex; display: flex;
align-items: stretch; align-items: stretch;
padding-left: variables.$board-spacing; padding-left: $board-spacing;
padding-right: variables.$board-spacing; padding-right: $board-spacing;
.dashboard-column { .dashboard-column {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-width: variables.$stack-width; min-width: $stack-width;
width: variables.$stack-width; width: $stack-width;
margin-left: variables.$stack-spacing; margin-left: $stack-spacing;
margin-right: variables.$stack-spacing; margin-right: $stack-spacing;
h3 { h3 {
font-size: var(--default-font-size); font-size: var(--default-font-size);

View File

@@ -4,7 +4,7 @@
--> -->
<template> <template>
<div v-if="searchQuery !== ''" class="global-search"> <div v-if="searchQuery!==''" class="global-search">
<h2> <h2>
<NcRichText :text="t('deck', 'Search for {searchQuery} in all boards')" :arguments="queryStringArgs" /> <NcRichText :text="t('deck', 'Search for {searchQuery} in all boards')" :arguments="queryStringArgs" />
<div v-if="loading" class="icon-loading-small" /> <div v-if="loading" class="icon-loading-small" />
@@ -19,13 +19,13 @@
:key="card.id" :key="card.id"
:standalone="true" /> :standalone="true" />
<Placeholder v-if="loading" /> <Placeholder v-if="loading" />
<!-- <InfiniteLoading :identifier="searchQuery" @infinite="infiniteHandler"> <InfiniteLoading :identifier="searchQuery" @infinite="infiniteHandler">
<div slot="spinner" /> <div slot="spinner" />
<div slot="no-more" /> <div slot="no-more" />
<div slot="no-results"> <div slot="no-results">
{{ t('deck', 'No results found') }} {{ t('deck', 'No results found') }}
</div> </div>
</InfiniteLoading> --> </InfiniteLoading>
</div> </div>
<div v-else> <div v-else>
<p>{{ t('deck', 'No results found') }}</p> <p>{{ t('deck', 'No results found') }}</p>
@@ -39,7 +39,7 @@ import CardItem from '../cards/CardItem.vue'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import { generateOcsUrl } from '@nextcloud/router' import { generateOcsUrl } from '@nextcloud/router'
// import InfiniteLoading from 'v3-infinite-loading' import InfiniteLoading from 'vue-infinite-loading'
import Placeholder from './Placeholder.vue' import Placeholder from './Placeholder.vue'
import { NcActions, NcActionButton, NcRichText } from '@nextcloud/vue' import { NcActions, NcActionButton, NcRichText } from '@nextcloud/vue'
@@ -70,14 +70,7 @@ function search({ query, cursor }) {
export default { export default {
name: 'GlobalSearchResults', name: 'GlobalSearchResults',
components: { components: { CardItem, InfiniteLoading, NcRichText, Placeholder, NcActions, NcActionButton },
CardItem,
// InfiniteLoading,
NcRichText,
Placeholder,
NcActions,
NcActionButton,
},
data() { data() {
return { return {
results: [], results: [],
@@ -162,11 +155,11 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@use '../../css/variables'; @import '../../css/variables';
.global-search { .global-search {
width: 100%; width: 100%;
padding: variables.$board-spacing + variables.$stack-spacing; padding: $board-spacing + $stack-spacing;
padding-bottom: 0; padding-bottom: 0;
overflow: hidden; overflow: hidden;
min-height: 35vh; min-height: 35vh;
@@ -182,7 +175,6 @@ export default {
top: 10px; top: 10px;
right: 10px; right: 10px;
} }
.search-wrapper { .search-wrapper {
overflow: scroll; overflow: scroll;
height: 100%; height: 100%;
@@ -190,14 +182,13 @@ export default {
padding: 10px; padding: 10px;
} }
h2>div { h2 > div {
display: inline-block; display: inline-block;
&.icon-loading-small { &.icon-loading-small {
margin-right: 20px; margin-right: 20px;
} }
} }
h2:deep(span) { h2:deep(span) {
background-color: var(--color-background-dark); background-color: var(--color-background-dark);
padding: 3px; padding: 3px;
@@ -208,14 +199,13 @@ export default {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
&>div { & > div {
flex-grow: 0; flex-grow: 0;
} }
} }
&:deep(.card) { &:deep(.card) {
width: variables.$stack-width; width: $stack-width;
margin-right: variables.$stack-spacing; margin-right: $stack-spacing;
} }
} }
</style> </style>

View File

@@ -58,18 +58,18 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@use '../../css/variables'; @import '../../css/variables';
$clickable-area: var(--default-clickable-area); $clickable-area: var(--default-clickable-area);
.card--placeholder { .card--placeholder {
width: variables.$stack-width; width: $stack-width;
margin-right: variables.$stack-spacing; margin-right: $stack-spacing;
padding: variables.$card-padding; padding: $card-padding;
transition: box-shadow 0.1s ease-in-out; transition: box-shadow 0.1s ease-in-out;
box-shadow: 0 0 2px 0 var(--color-box-shadow); box-shadow: 0 0 2px 0 var(--color-box-shadow);
border-radius: var(--border-radius-large); border-radius: var(--border-radius-large);
font-size: 100%; font-size: 100%;
margin-bottom: variables.$card-spacing; margin-bottom: $card-spacing;
height: 100px; height: 100px;
} }

View File

@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-or-later * SPDX-License-Identifier: AGPL-3.0-or-later
*/ */
import { registerWidget, registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue' import { registerWidget, registerCustomPickerElement, NcCustomPickerRenderResult } from '@nextcloud/vue/dist/Functions/registerReference.js'
import { translate, translatePlural } from '@nextcloud/l10n' import { translate, translatePlural } from '@nextcloud/l10n'
import './shared-init.js' import './shared-init.js'

View File

@@ -2,10 +2,11 @@
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later * SPDX-License-Identifier: AGPL-3.0-or-later
*/ */
import { createApp } from 'vue' import Vue from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router.js' import router from './router.js'
import store from './store/main.js' import store from './store/main.js'
import { sync } from 'vuex-router-sync'
import { translate, translatePlural } from '@nextcloud/l10n' import { translate, translatePlural } from '@nextcloud/l10n'
import { showError } from '@nextcloud/dialogs' import { showError } from '@nextcloud/dialogs'
import { subscribe } from '@nextcloud/event-bus' import { subscribe } from '@nextcloud/event-bus'
@@ -13,32 +14,27 @@ import ClickOutside from 'vue-click-outside'
import './shared-init.js' import './shared-init.js'
import './models/index.js' import './models/index.js'
import './sessions.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 // the server snap.js conflicts with vertical scrolling so we disable it
document.body.setAttribute('data-snap-ignore', 'true') document.body.setAttribute('data-snap-ignore', 'true')
const app = createApp(App) sync(store, router)
app.config.globalProperties.t = translate Vue.prototype.t = translate
app.config.globalProperties.n = translatePlural Vue.prototype.n = translatePlural
app.directive('click-outside', ClickOutside) Vue.directive('click-outside', ClickOutside)
app.directive('focus', { Vue.directive('focus', {
mounted(el) { inserted(el) {
el.focus() el.focus()
}, },
}) })
app.config.errorHandler = (err, vm, info) => { Vue.config.errorHandler = (err, vm, info) => {
if (err.response && err.response.data.message) { if (err.response && err.response.data.message) {
const errorMessage = translate('deck', 'Something went wrong') const errorMessage = t('deck', 'Something went wrong')
showError( showError(`${errorMessage}: ${err.response.data.status} ${err.response.data.message}`)
`${errorMessage}: ${err.response.data.status} ${err.response.data.message}`,
)
} }
console.error(err) console.error(err)
} }
@@ -51,14 +47,16 @@ window.addEventListener('DOMContentLoaded', () => {
window.OCA.Files = {} window.OCA.Files = {}
} }
// register unused client for the sidebar to have access to its parser methods // register unused client for the sidebar to have access to its parser methods
Object.assign( Object.assign(window.OCA.Files, { App: { fileList: { filesClient: OC.Files.getClient() } } }, window.OCA.Files)
window.OCA.Files,
{ App: { fileList: { filesClient: OC.Files.getClient() } } },
window.OCA.Files,
)
}) })
app.mixin({ /* eslint-disable-next-line no-new */
new Vue({
el: '#content',
// eslint-disable-next-line vue/match-component-file-name
name: 'Deck',
router,
store,
data() { data() {
return { return {
time: Date.now(), time: Date.now(),
@@ -77,7 +75,7 @@ app.mixin({
this.time = Date.now() this.time = Date.now()
}, 1000) }, 1000)
}, },
beforeUnmount() { beforeDestroy() {
clearInterval(this.interval) clearInterval(this.interval)
}, },
methods: { methods: {
@@ -88,12 +86,9 @@ app.mixin({
this.$store.commit('setSearchQuery', '') this.$store.commit('setSearchQuery', '')
}, },
}, },
render: h => h(App),
}) })
app.use(router)
app.use(store)
app.mount('#content')
if (!window.OCA.Deck) { if (!window.OCA.Deck) {
window.OCA.Deck = {} window.OCA.Deck = {}
} }

View File

@@ -3,8 +3,8 @@
* SPDX-License-Identifier: AGPL-3.0-or-later * SPDX-License-Identifier: AGPL-3.0-or-later
*/ */
import Router, { createRouter, createWebHistory } from 'vue-router'
import Vue from 'vue' import Vue from 'vue'
import Router from 'vue-router'
import { generateUrl, getRootUrl } from '@nextcloud/router' import { generateUrl, getRootUrl } from '@nextcloud/router'
import { BOARD_FILTERS } from './store/main.js' import { BOARD_FILTERS } from './store/main.js'
import Boards from './components/boards/Boards.vue' import Boards from './components/boards/Boards.vue'
@@ -22,8 +22,8 @@ const webRootWithIndexPHP = getRootUrl() + '/index.php'
const doesURLContainIndexPHP = window.location.pathname.startsWith(webRootWithIndexPHP) const doesURLContainIndexPHP = window.location.pathname.startsWith(webRootWithIndexPHP)
const currentBaseUrl = doesURLContainIndexPHP ? baseUrl : baseUrl.replace('/index.php/', '/') const currentBaseUrl = doesURLContainIndexPHP ? baseUrl : baseUrl.replace('/index.php/', '/')
const router = createRouter({ const router = new Router({
history: createWebHistory(generateUrl('/apps/deck/')), mode: 'history',
base: currentBaseUrl, base: currentBaseUrl,
linkActiveClass: 'active', linkActiveClass: 'active',
routes: [ routes: [

View File

@@ -7,7 +7,7 @@ import 'url-search-params-polyfill'
import { loadState } from '@nextcloud/initial-state' import { loadState } from '@nextcloud/initial-state'
import Vue from 'vue' import Vue from 'vue'
import { createStore } from 'vuex' import Vuex from 'vuex'
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import { generateOcsUrl, generateUrl } from '@nextcloud/router' import { generateOcsUrl, generateUrl } from '@nextcloud/router'
import { BoardApi } from '../services/BoardApi.js' import { BoardApi } from '../services/BoardApi.js'
@@ -18,6 +18,7 @@ import comment from './comment.js'
import trashbin from './trashbin.js' import trashbin from './trashbin.js'
import attachment from './attachment.js' import attachment from './attachment.js'
import overview from './overview.js' import overview from './overview.js'
Vue.use(Vuex)
const apiClient = new BoardApi() const apiClient = new BoardApi()
const debug = process.env.NODE_ENV !== 'production' const debug = process.env.NODE_ENV !== 'production'
@@ -28,7 +29,7 @@ export const BOARD_FILTERS = {
SHARED: 'shared', SHARED: 'shared',
} }
const store = createStore({ export default new Vuex.Store({
modules: { modules: {
actions, actions,
stack, stack,
@@ -518,5 +519,3 @@ const store = createStore({
}, },
}, },
}) })
export default store

View File

@@ -33,7 +33,7 @@ import DeckIcon from '../components/icons/DeckIcon.vue'
import { BoardApi } from './../services/BoardApi.js' import { BoardApi } from './../services/BoardApi.js'
import store from './../store/main.js' import store from './../store/main.js'
import { NcUserBubble } from '@nextcloud/vue' import NcUserBubble from '@nextcloud/vue/dist/Components/NcUserBubble.js'
import moment from '@nextcloud/moment' import moment from '@nextcloud/moment'
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'

View File

@@ -31,6 +31,6 @@ if (isDevServer) {
} }
} }
// Workaround for https://github.com/nextcloud/webpack-vue-config/pull/432 causing problems with nextcloud-vue-collections // Workaround for https://github.com/nextcloud/webpack-vue-config/pull/432 causing problems with nextcloud-vue-collections
webpackConfig.resolve.alias = { vue: '@vue/compat' } webpackConfig.resolve.alias = {}
module.exports = webpackConfig module.exports = webpackConfig