Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7cb41cd61b | ||
|
|
3d78802446 | ||
|
|
8a99e6d539 | ||
|
|
0e08ad16e1 | ||
|
|
d04ab25315 | ||
|
|
19d35c65a0 | ||
|
|
1783914d3a | ||
|
|
c837dd4db6 | ||
|
|
db22052729 | ||
|
|
116babcaaf | ||
|
|
86d42b7060 | ||
|
|
122387a195 | ||
|
|
028f26a969 | ||
|
|
13c13b8dde | ||
|
|
5df4a49ff5 | ||
|
|
97902d2f6a | ||
|
|
db6221d1c9 |
2
.github/workflows/appbuild.yml
vendored
2
.github/workflows/appbuild.yml
vendored
@@ -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
|
||||||
|
|||||||
22
.github/workflows/appstore-build-publish.yml
vendored
22
.github/workflows/appstore-build-publish.yml
vendored
@@ -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
|
||||||
|
|||||||
2
.github/workflows/cypress-e2e.yml
vendored
2
.github/workflows/cypress-e2e.yml
vendored
@@ -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 }}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
4
.github/workflows/lint-eslint.yml
vendored
4
.github/workflows/lint-eslint.yml
vendored
@@ -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 }}
|
||||||
|
|
||||||
|
|||||||
12
.github/workflows/lint-php-cs.yml
vendored
12
.github/workflows/lint-php-cs.yml
vendored
@@ -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 )
|
||||||
|
|||||||
7
.github/workflows/lint-php.yml
vendored
7
.github/workflows/lint-php.yml
vendored
@@ -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
|
||||||
|
|||||||
4
.github/workflows/lint-stylelint.yml
vendored
4
.github/workflows/lint-stylelint.yml
vendored
@@ -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 }}
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/nodejs.yml
vendored
2
.github/workflows/nodejs.yml
vendored
@@ -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
|
||||||
|
|||||||
2
.github/workflows/npm-audit-fix.yml
vendored
2
.github/workflows/npm-audit-fix.yml
vendored
@@ -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 }}
|
||||||
|
|
||||||
|
|||||||
13
.github/workflows/phpunit-mysql.yml
vendored
13
.github/workflows/phpunit-mysql.yml
vendored
@@ -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:
|
||||||
|
|||||||
13
.github/workflows/phpunit-pgsql.yml
vendored
13
.github/workflows/phpunit-pgsql.yml
vendored
@@ -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:
|
||||||
|
|||||||
13
.github/workflows/phpunit-sqlite.yml
vendored
13
.github/workflows/phpunit-sqlite.yml
vendored
@@ -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:
|
||||||
|
|||||||
2
.github/workflows/pr-feedback.yml
vendored
2
.github/workflows/pr-feedback.yml
vendored
@@ -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,
|
||||||
|
|||||||
25
.github/workflows/psalm.yml
vendored
25
.github/workflows/psalm.yml
vendored
@@ -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
|
||||||
|
|||||||
3
.github/workflows/reuse.yml
vendored
3
.github/workflows/reuse.yml
vendored
@@ -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
|
||||||
|
|||||||
@@ -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 }}
|
||||||
|
|||||||
6
.github/workflows/update-nextcloud-ocp.yml
vendored
6
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -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
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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:",
|
||||||
|
|||||||
@@ -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:",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
18
l10n/uz.js
18
l10n/uz.js
@@ -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;");
|
||||||
|
|||||||
18
l10n/uz.json
18
l10n/uz.json
@@ -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
12350
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
28
package.json
28
package.json
@@ -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": [
|
||||||
|
|||||||
@@ -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"/>
|
||||||
|
|||||||
213
src/App.vue
213
src/App.vue
@@ -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>
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ export default {
|
|||||||
mounted() {
|
mounted() {
|
||||||
this.setupEditor()
|
this.setupEditor()
|
||||||
},
|
},
|
||||||
async beforeUnmount() {
|
async beforeDestroy() {
|
||||||
await this.destroyEditor()
|
await this.destroyEditor()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
47
src/main.js
47
src/main.js
@@ -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 = {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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: [
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user