Compare commits

...

90 Commits

Author SHA1 Message Date
Julius Härtl
124cc94939 Bump version to 1.1.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-14 11:42:03 +02:00
Julius Härtl
d45f2e9faa Merge pull request #2443 from nextcloud/backport/2435/stable1.1 2020-10-14 09:48:06 +02:00
Julius Härtl
2ea019885d Always have pointer for cards by default
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 19:21:32 +00:00
Julius Härtl
ccbe2eaf94 Avoid issues with clicking in compact mode
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 19:21:32 +00:00
Julius Härtl
568b099c17 Give modal a bit more padding
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 19:21:32 +00:00
Julius Härtl
a5bd24f475 Do not trigger card open when updating the title
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 19:21:32 +00:00
Julius Härtl
89bec2752b Do not open the dialog automatically upon card creation, only upon click
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 19:21:32 +00:00
Julius Härtl
2a1fa11b0d Merge pull request #2442 from nextcloud/backport/2440/stable1.1 2020-10-13 21:20:02 +02:00
Julius Härtl
ba5570558e Fix spacing in AppContent
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 15:21:01 +00:00
Julius Härtl
df0531851e Fix control bar toggle
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 15:21:01 +00:00
Julius Härtl
bbc218de95 Move navigation toggle to vue components
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 15:21:00 +00:00
Julius Härtl
9b6d62d24c Merge pull request #2439 from nextcloud/backport/2437/stable1.1
[stable1.1] Only remove card padding for editable cards
2020-10-13 13:07:19 +02:00
Julius Härtl
d2ceda08cb Merge pull request #2438 from nextcloud/backport/2433/stable1.1
[stable1.1] Fix scrollable titles with Dyslexia font
2020-10-13 13:07:14 +02:00
Julius Härtl
af01ecd3d1 Merge pull request #2436 from nextcloud/backport/2434/stable1.1
[stable1.1] Move most destructive actions in drop down menus to the bottom
2020-10-13 11:47:41 +02:00
Julius Härtl
7afe28f2e9 Only remove card padding for editable cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 09:44:42 +00:00
Julius Härtl
56a79c9fcc Fix scrollable titles with Dyslexia font
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 09:44:28 +00:00
nienzu
6fa485c6ca Move most destructive actions in drop down menus to the bottom
Signed-off-by: nienzu <ibqqz0602@gmail.com>
2020-10-13 08:02:44 +00:00
Julius Härtl
66e386b547 Fix changelog format
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 09:11:37 +02:00
Julius Härtl
48e6bae44a Bump version to 1.1.1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 08:59:48 +02:00
Julius Härtl
c75463429e Merge pull request #2432 from nextcloud/backport/2367/stable1.1
[stable1.1] Properly handle multiple shares in a row and refactor sharee loading
2020-10-13 08:55:07 +02:00
Julius Härtl
3d3f2de781 Properly handle multiple shares in a row and refactor sharee loading
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-13 06:18:49 +00:00
Julius Härtl
2454df9a35 Merge pull request #2407 from nextcloud/dependabot/npm_and_yarn/stable1.1/sass-loader-10.0.3
Bump sass-loader from 10.0.2 to 10.0.3
2020-10-12 09:30:43 +02:00
dependabot[bot]
2a7a0e4c6d Bump sass-loader from 10.0.2 to 10.0.3
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.2 to 10.0.3.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.2...v10.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 07:23:39 +00:00
Julius Härtl
6edf265b78 Merge pull request #2425 from nextcloud/backport/2404/stable1.1
[stable1.1] Update Controls.vue
2020-10-12 08:55:41 +02:00
Flamenco
8e28f8e67c Update Controls.vue
Add padding to filter popup.
2020-10-12 06:50:17 +00:00
Julius Härtl
3b11c5c7ea Merge pull request #2416 from nextcloud/dependabot/npm_and_yarn/stable1.1/vue-router-3.4.6
Bump vue-router from 3.4.5 to 3.4.6
2020-10-12 08:43:45 +02:00
Julius Härtl
be05ec1b45 Merge pull request #2415 from nextcloud/dependabot/npm_and_yarn/stable1.1/url-loader-4.1.1
Bump url-loader from 4.1.0 to 4.1.1
2020-10-12 08:43:39 +02:00
Julius Härtl
b407f102fe Merge pull request #2411 from nextcloud/dependabot/npm_and_yarn/stable1.1/file-loader-6.1.1
Bump file-loader from 6.1.0 to 6.1.1
2020-10-12 08:43:31 +02:00
Julius Härtl
e82a2be836 Merge pull request #2420 from nextcloud/dependabot/npm_and_yarn/stable1.1/nextcloud/dialogs-3.0.0
Bump @nextcloud/dialogs from 2.0.1 to 3.0.0
2020-10-12 08:43:03 +02:00
Julius Härtl
d7f7cf584f Merge pull request #2418 from nextcloud/dependabot/npm_and_yarn/stable1.1/moment-2.29.1
Bump moment from 2.29.0 to 2.29.1
2020-10-12 08:42:27 +02:00
Julius Härtl
3fae174906 Merge pull request #2409 from nextcloud/dependabot/npm_and_yarn/stable1.1/nextcloud/vue-2.7.0
Bump @nextcloud/vue from 2.6.9 to 2.7.0
2020-10-12 08:32:12 +02:00
Julius Härtl
b58bba25bb Merge pull request #2413 from nextcloud/dependabot/npm_and_yarn/stable1.1/raw-loader-4.0.2
Bump raw-loader from 4.0.1 to 4.0.2
2020-10-12 08:31:48 +02:00
Julius Härtl
407acc47a4 Merge pull request #2422 from nextcloud/dependabot/npm_and_yarn/stable1.1/nextcloud/initial-state-1.2.0
Bump @nextcloud/initial-state from 1.1.2 to 1.2.0
2020-10-12 08:29:44 +02:00
dependabot[bot]
2ba19bd6fe Bump @nextcloud/initial-state from 1.1.2 to 1.2.0
Bumps [@nextcloud/initial-state](https://github.com/nextcloud/nextcloud-initial-state) from 1.1.2 to 1.2.0.
- [Release notes](https://github.com/nextcloud/nextcloud-initial-state/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-initial-state/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-initial-state/compare/v1.1.2...v1.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:09:55 +00:00
dependabot[bot]
16e79dc616 Bump @nextcloud/dialogs from 2.0.1 to 3.0.0
Bumps [@nextcloud/dialogs](https://github.com/nextcloud/nextcloud-dialogs) from 2.0.1 to 3.0.0.
- [Release notes](https://github.com/nextcloud/nextcloud-dialogs/releases)
- [Changelog](https://github.com/nextcloud/nextcloud-dialogs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/nextcloud-dialogs/compare/v2.0.1...v3.0.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:08:41 +00:00
dependabot[bot]
f48187f28c Bump moment from 2.29.0 to 2.29.1
Bumps [moment](https://github.com/moment/moment) from 2.29.0 to 2.29.1.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.0...2.29.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:08:09 +00:00
dependabot[bot]
ea5aac3d27 Bump vue-router from 3.4.5 to 3.4.6
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.5 to 3.4.6.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.4.5...v3.4.6)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:07:12 +00:00
dependabot[bot]
3487e06c8c Bump url-loader from 4.1.0 to 4.1.1
Bumps [url-loader](https://github.com/webpack-contrib/url-loader) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/webpack-contrib/url-loader/releases)
- [Changelog](https://github.com/webpack-contrib/url-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/url-loader/compare/v4.1.0...v4.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:06:42 +00:00
dependabot[bot]
fd253009f1 Bump raw-loader from 4.0.1 to 4.0.2
Bumps [raw-loader](https://github.com/webpack-contrib/raw-loader) from 4.0.1 to 4.0.2.
- [Release notes](https://github.com/webpack-contrib/raw-loader/releases)
- [Changelog](https://github.com/webpack-contrib/raw-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/raw-loader/compare/v4.0.1...v4.0.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:06:00 +00:00
dependabot[bot]
039d3e8238 Bump file-loader from 6.1.0 to 6.1.1
Bumps [file-loader](https://github.com/webpack-contrib/file-loader) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/webpack-contrib/file-loader/releases)
- [Changelog](https://github.com/webpack-contrib/file-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/file-loader/compare/v6.1.0...v6.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:04:39 +00:00
dependabot[bot]
31d759ee62 Bump @nextcloud/vue from 2.6.9 to 2.7.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.6.9 to 2.7.0.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.6.9...v2.7.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-10 01:04:10 +00:00
Julius Härtl
53a30585f3 Merge pull request #2395 from nextcloud/backport/2358/stable1.1
[stable1.1] Properly check if FTSEvent has an argument set
2020-10-07 23:06:19 +02:00
Julius Härtl
a2ebf3d3f0 Merge pull request #2396 from nextcloud/backport/2359/stable1.1
[stable1.1] Also exclude deleted items from calendar boards
2020-10-07 23:05:23 +02:00
Julius Härtl
5b7505c60c Also exclude deleted items from calendar boards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-07 14:47:19 +00:00
Julius Härtl
516b15d3a1 Properly check if FTSEvent has an argument set
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-07 14:46:53 +00:00
Julius Härtl
6ac8cafd46 Merge pull request #2389 from nextcloud/dependabot/npm_and_yarn/stable1.1/jest-26.5.2
Bump jest from 26.4.2 to 26.5.2
2020-10-07 16:45:59 +02:00
dependabot[bot]
e5c65a67a7 Bump jest from 26.4.2 to 26.5.2
Bumps [jest](https://github.com/facebook/jest) from 26.4.2 to 26.5.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v26.4.2...v26.5.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 14:12:37 +00:00
Julius Härtl
7b72c93076 Merge pull request #2394 from nextcloud/dependabot/npm_and_yarn/stable1.1/babel-jest-26.5.2
Bump babel-jest from 26.3.0 to 26.5.2
2020-10-07 16:10:37 +02:00
Julius Härtl
f5550c456e Merge pull request #2393 from nextcloud/dependabot/npm_and_yarn/stable1.1/acorn-8.0.4
Bump acorn from 8.0.1 to 8.0.4
2020-10-07 16:10:30 +02:00
Julius Härtl
fb8b724e1b Merge pull request #2391 from nextcloud/dependabot/npm_and_yarn/stable1.1/style-loader-1.3.0
Bump style-loader from 1.2.1 to 1.3.0
2020-10-07 16:10:10 +02:00
Julius Härtl
a3da157aa4 Merge pull request #2387 from nextcloud/dependabot/npm_and_yarn/stable1.1/nextcloud/eslint-plugin-1.5.0
Bump @nextcloud/eslint-plugin from 1.4.0 to 1.5.0
2020-10-07 16:10:01 +02:00
Julius Härtl
0118c1e409 Merge pull request #2377 from nextcloud/dependabot/npm_and_yarn/stable1.1/eslint-plugin-import-2.22.1
Bump eslint-plugin-import from 2.22.0 to 2.22.1
2020-10-07 16:09:52 +02:00
Julius Härtl
9dbf45ca25 Merge pull request #2379 from nextcloud/dependabot/npm_and_yarn/stable1.1/vue-easymde-1.3.0
Bump vue-easymde from 1.2.2 to 1.3.0
2020-10-07 16:09:14 +02:00
Julius Härtl
184cb01f5a Merge pull request #2382 from nextcloud/dependabot/npm_and_yarn/stable1.1/vue-router-3.4.5
Bump vue-router from 3.4.4 to 3.4.5
2020-10-07 16:09:02 +02:00
Julius Härtl
b3a4cca482 Merge pull request #2383 from nextcloud/dependabot/npm_and_yarn/stable1.1/webpack-merge-5.2.0
Bump webpack-merge from 5.1.4 to 5.2.0
2020-10-07 16:08:52 +02:00
Julius Härtl
1272c672ae Merge pull request #2386 from nextcloud/dependabot/npm_and_yarn/stable1.1/nextcloud/vue-2.6.9
Bump @nextcloud/vue from 2.6.8 to 2.6.9
2020-10-07 16:07:50 +02:00
dependabot[bot]
214898c3d6 Bump babel-jest from 26.3.0 to 26.5.2
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 26.3.0 to 26.5.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v26.5.2/packages/babel-jest)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:54:48 +00:00
dependabot[bot]
7ba20e71ee Bump acorn from 8.0.1 to 8.0.4
Bumps [acorn](https://github.com/acornjs/acorn) from 8.0.1 to 8.0.4.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/8.0.1...8.0.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:54:12 +00:00
dependabot[bot]
49f84c31fb Bump style-loader from 1.2.1 to 1.3.0
Bumps [style-loader](https://github.com/webpack-contrib/style-loader) from 1.2.1 to 1.3.0.
- [Release notes](https://github.com/webpack-contrib/style-loader/releases)
- [Changelog](https://github.com/webpack-contrib/style-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/style-loader/compare/v1.2.1...v1.3.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:53:48 +00:00
dependabot[bot]
69f56981f4 Bump @nextcloud/eslint-plugin from 1.4.0 to 1.5.0
Bumps [@nextcloud/eslint-plugin](https://github.com/nextcloud/eslint-plugin) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/nextcloud/eslint-plugin/releases)
- [Changelog](https://github.com/nextcloud/eslint-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nextcloud/eslint-plugin/compare/v1.4.0...v1.5.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:51:54 +00:00
dependabot[bot]
7acd1a054e Bump @nextcloud/vue from 2.6.8 to 2.6.9
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.6.8 to 2.6.9.
- [Release notes](https://github.com/nextcloud/nextcloud-vue/releases)
- [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.6.8...v2.6.9)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:51:26 +00:00
dependabot[bot]
ef90ab0b2a Bump webpack-merge from 5.1.4 to 5.2.0
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 5.1.4 to 5.2.0.
- [Release notes](https://github.com/survivejs/webpack-merge/releases)
- [Changelog](https://github.com/survivejs/webpack-merge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/survivejs/webpack-merge/compare/v5.1.4...v5.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:50:29 +00:00
dependabot[bot]
1a275b0884 Bump vue-router from 3.4.4 to 3.4.5
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.4 to 3.4.5.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.4.4...v3.4.5)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:49:57 +00:00
dependabot[bot]
ffb25a7553 Bump vue-easymde from 1.2.2 to 1.3.0
Bumps [vue-easymde](https://github.com/NikulinIlya/vue-easymde) from 1.2.2 to 1.3.0.
- [Release notes](https://github.com/NikulinIlya/vue-easymde/releases)
- [Commits](https://github.com/NikulinIlya/vue-easymde/compare/v1.2.2...1.3.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:49:24 +00:00
dependabot[bot]
9a0476f538 Bump eslint-plugin-import from 2.22.0 to 2.22.1
Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.22.0 to 2.22.1.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.22.0...v2.22.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-07 12:48:54 +00:00
Julius Härtl
9b9413c5e1 Merge pull request #2365 from nextcloud/backport/2361/stable1.1
[stable1.1] Comments do not depend on the comments app
2020-10-07 11:28:27 +02:00
Julius Härtl
e22c6e675b Merge pull request #2364 from nextcloud/backport/2363/stable1.1
[stable1.1] Use uid instead of displayname for sharee results
2020-10-07 11:28:00 +02:00
Julius Härtl
92a6cbce37 Merge pull request #2366 from nextcloud/bugfix/1.1-ci
Fix stable1.1 ci
2020-10-07 11:27:17 +02:00
Julius Härtl
871edf1a25 Revert "Fix travis setup on 18/19"
This reverts commit 05376a5d3a.

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-06 23:59:24 +02:00
Julius Härtl
05376a5d3a Fix travis setup on 18/19
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-06 23:05:19 +02:00
Jakob Röhrl
5cc52526cf removeCommentCheck
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
2020-10-06 21:02:07 +00:00
Julius Härtl
30bb429a57 Use uid instead of displayname for sharee results
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-06 14:06:07 +00:00
Julius Härtl
52cbd3d6d8 Test against stable releases
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 21:20:17 +02:00
Julius Härtl
15ae74249b 1.1.0 is for 18-20
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 21:11:16 +02:00
Julius Härtl
aa069805c5 Merge pull request #2308 from nextcloud/release/1.1.0-beta3 2020-10-02 21:10:12 +02:00
Julius Härtl
e5338bf6d2 Update changelog
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 20:57:35 +02:00
Julius Härtl
65a3033403 Bump version to 1.1.0
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 20:57:32 +02:00
Julius Härtl
8eb5adfac8 Merge pull request #2117 from nextcloud/bugfix/noid/activity 2020-10-02 17:34:49 +02:00
Julius Härtl
c4672f04d2 Merge pull request #2334 from nextcloud/bugfixes 2020-10-02 15:34:40 +02:00
Julius Härtl
54536eff93 Strip down description if it does not fit the activity_mq table and remove non-working diff rendering
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 15:22:41 +02:00
Julius Härtl
62f6cfecc2 Fix undefined variable params
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 14:10:58 +02:00
Julius Härtl
d7d5365a67 Fallback to current user when triggering activities
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 14:10:57 +02:00
Julius Härtl
8380ae69c8 Emit activity on stack change
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 14:10:57 +02:00
Julius Härtl
6a409c508e Reduce the number of results in autocomplete
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 14:10:36 +02:00
Julius Härtl
31e42079d0 Bump @nextcloud/vue
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 14:10:24 +02:00
Julius Härtl
4c2346c66e Merge pull request #2255 from nextcloud/bugfix/noid/unified-search-filtering
Use unified search events to apply on board filtering
2020-10-02 14:09:36 +02:00
Julius Härtl
79b950e192 Quick fix for filtering out archived boards from calendar
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 13:50:10 +02:00
Julius Härtl
012e5b8ef9 Use unified search events to apply on board filtering
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 13:22:36 +02:00
Julius Härtl
3914127b39 Don't fail if boards have not been loaded (yet)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2020-10-02 13:12:32 +02:00
Nextcloud bot
be7357d110 [tx-robot] updated from transifex 2020-10-01 02:29:29 +00:00
29 changed files with 1125 additions and 871 deletions

View File

@@ -5,7 +5,7 @@ steps:
image: nextcloudci/php7.3:latest image: nextcloudci/php7.3:latest
environment: environment:
APP_NAME: deck APP_NAME: deck
CORE_BRANCH: master CORE_BRANCH: stable20
DB: sqlite DB: sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -20,7 +20,7 @@ steps:
image: nextcloudci/php7.2:latest image: nextcloudci/php7.2:latest
environment: environment:
APP_NAME: deck APP_NAME: deck
CORE_BRANCH: master CORE_BRANCH: stable20
DB: sqlite DB: sqlite
commands: commands:
- composer install - composer install
@@ -29,7 +29,7 @@ steps:
image: nextcloudci/php7.3:php7.3-2 image: nextcloudci/php7.3:php7.3-2
environment: environment:
APP_NAME: deck APP_NAME: deck
CORE_BRANCH: master CORE_BRANCH: stable20
DB: sqlite DB: sqlite
commands: commands:
- composer install - composer install
@@ -38,7 +38,7 @@ steps:
image: nextcloudci/php7.4:latest image: nextcloudci/php7.4:latest
environment: environment:
APP_NAME: deck APP_NAME: deck
CORE_BRANCH: master CORE_BRANCH: stable20
DB: sqlite DB: sqlite
commands: commands:
- composer install - composer install
@@ -58,7 +58,7 @@ steps:
image: nextcloudci/php7.3:latest image: nextcloudci/php7.3:latest
environment: environment:
APP_NAME: deck APP_NAME: deck
CORE_BRANCH: master CORE_BRANCH: stable20
DB: sqlite DB: sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -84,7 +84,7 @@ steps:
image: nextcloudci/php7.4:latest image: nextcloudci/php7.4:latest
environment: environment:
APP_NAME: deck APP_NAME: deck
CORE_BRANCH: master CORE_BRANCH: stable20
DB: sqlite DB: sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -111,7 +111,7 @@ steps:
image: nextcloudci/php7.3:latest image: nextcloudci/php7.3:latest
environment: environment:
APP_NAME: deck APP_NAME: deck
CORE_BRANCH: master CORE_BRANCH: stable20
DB: sqlite DB: sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps

View File

@@ -2,9 +2,13 @@ language: php
services: services:
- mysql - mysql
php: php:
- 7.2
- 7.3 - 7.3
- 7.4
env: env:
- CORE_BRANCH=master DB=mysql - CORE_BRANCH=stable20 DB=mysql
- CORE_BRANCH=stable19 DB=mysql
- CORE_BRANCH=stable18 DB=mysql
matrix: matrix:
include: include:
@@ -17,10 +21,13 @@ before_install:
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh - wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh deck $CORE_BRANCH $DB - bash ./before_install.sh deck $CORE_BRANCH $DB
- cd ../server - cd ../server
- ./occ app:enable deck
before_script: before_script:
- cd apps/deck - cd apps/deck
- composer install --no-dev
- cd ../../
- ./occ app:enable deck
- cd apps/deck
script: script:
- composer install - composer install

View File

@@ -1,31 +1,67 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## 1.1.0 - unreleased ## 1.1.2 - 2020-10-14
### Merged PRs ### Bugfixes
* [#2436](https://github.com/nextcloud/deck/pull/2436) Move most destructive actions in drop down menus to the bottom
* [#2438](https://github.com/nextcloud/deck/pull/2438) Fix scrollable titles with Dyslexia font
* [#2439](https://github.com/nextcloud/deck/pull/2439) Only remove card padding for editable cards
* [#2442](https://github.com/nextcloud/deck/pull/2442) Move navigation toggle handling to @nextcloud/vue native one
* [#2443](https://github.com/nextcloud/deck/pull/2443) Do not open the dialog automatically upon card creation, only upon click
## 1.1.1 - 2020-10-13
### Bugfixes
* [#2364](https://github.com/nextcloud/deck/pull/2364) Use uid instead of displayname for sharee results
* [#2365](https://github.com/nextcloud/deck/pull/2365) Comments do not depend on the comments app (@jakobroehrl)
* [#2395](https://github.com/nextcloud/deck/pull/2395) Fix failure if full text search app was enabled
* [#2396](https://github.com/nextcloud/deck/pull/2396) Also exclude deleted items from calendar boards
* [#2425](https://github.com/nextcloud/deck/pull/2425) Fix filter popover styling (@Flamenco)
* [#2432](https://github.com/nextcloud/deck/pull/2432) Properly handle multiple shares in a row and refactor sharee loading
## 1.1.0 - 2020-10-03
### Features
* [#2115](https://github.com/nextcloud/deck/pull/2115) Dashboard widget for Nextcloud 20
* [#1545](https://github.com/nextcloud/deck/pull/1545) Show cards in calendar/tasks app and make them available though CalDAV
* [#2200](https://github.com/nextcloud/deck/pull/2200) Unified search implementation for Nextcloud 20
* [#1934](https://github.com/nextcloud/deck/pull/1934) Upcoming cards overview @jakobroehrl
* [#2047](https://github.com/nextcloud/deck/pull/2047) Show card details in modal @jakobroehrl
* [#1853](https://github.com/nextcloud/deck/pull/1853) Archive all cards from stack @jakobroehrl * [#1853](https://github.com/nextcloud/deck/pull/1853) Archive all cards from stack @jakobroehrl
* [#1865](https://github.com/nextcloud/deck/pull/1865) Add stack button on empty board @jakobroehrl * [#1865](https://github.com/nextcloud/deck/pull/1865) Add stack button on empty board @jakobroehrl
* [#1926](https://github.com/nextcloud/deck/pull/1926) New filter: unassigned cards @jakobroehrl * [#1926](https://github.com/nextcloud/deck/pull/1926) New filter: unassigned cards @jakobroehrl
* [#1934](https://github.com/nextcloud/deck/pull/1934) Card dashboard @jakobroehrl
### Bugfixes
* [#2035](https://github.com/nextcloud/deck/pull/2035) Attach files in description @jakobroehrl * [#2035](https://github.com/nextcloud/deck/pull/2035) Attach files in description @jakobroehrl
* [#2047](https://github.com/nextcloud/deck/pull/2047) Show card details in modal @jakobroehrl
* [#2115](https://github.com/nextcloud/deck/pull/2115) Dashboard panel @juliushaertl
* [#2123](https://github.com/nextcloud/deck/pull/2123) Fix control tooltip @jakobroehrl * [#2123](https://github.com/nextcloud/deck/pull/2123) Fix control tooltip @jakobroehrl
* [#2144](https://github.com/nextcloud/deck/pull/2144) Fix nextcloud if install with dev dependencies @matchish * [#2144](https://github.com/nextcloud/deck/pull/2144) Fix nextcloud if install with dev dependencies @matchish
* [#2157](https://github.com/nextcloud/deck/pull/2157) Build/webpack shared config @juliushaertl * [#2158](https://github.com/nextcloud/deck/pull/2158) Fix description in dark mode
* [#2158](https://github.com/nextcloud/deck/pull/2158) Fix description in dark mode @juliushaertl
* [#2169](https://github.com/nextcloud/deck/pull/2169) Bump webpack-merge from 5.0.9 to 5.1.0 @dependabot
* [#2170](https://github.com/nextcloud/deck/pull/2170) Add lastModified date to boards API documentation @stefan-niedermann
* [#2188](https://github.com/nextcloud/deck/pull/2188) CardBadges: Count checkboxes started with "+ [ ]" @joreiff * [#2188](https://github.com/nextcloud/deck/pull/2188) CardBadges: Count checkboxes started with "+ [ ]" @joreiff
* [#2200](https://github.com/nextcloud/deck/pull/2200) Unified search implementation @juliushaertl * [#2206](https://github.com/nextcloud/deck/pull/2206) Fix read-only sidebar (fixes #2033)
* [#2206](https://github.com/nextcloud/deck/pull/2206) Fix read-only sidebar (fixes #2033) @juliushaertl * [#2208](https://github.com/nextcloud/deck/pull/2208) Fix design, dark mode and keyboard navigation of the board list
* [#2208](https://github.com/nextcloud/deck/pull/2208) Fix design, dark mode and keyboard navigation of the board list @juliushaertl
* [#2210](https://github.com/nextcloud/deck/pull/2210) Fix an incorrect/misleading message in lib/Service/BoardService.php @jordanbancino * [#2210](https://github.com/nextcloud/deck/pull/2210) Fix an incorrect/misleading message in lib/Service/BoardService.php @jordanbancino
* [#2211](https://github.com/nextcloud/deck/pull/2211) Update incorrect field in API documentation (docs/API.md) @jordanbancino * [#2243](https://github.com/nextcloud/deck/pull/2243) Various smaller styling fixes
* [#2243](https://github.com/nextcloud/deck/pull/2243) Various smaller styling fixes @juliushaertl * [#2244](https://github.com/nextcloud/deck/pull/2244) Toggle filter on clicking card labels
* [#2244](https://github.com/nextcloud/deck/pull/2244) Toggle filter on clicking card labels @juliushaertl * [#2117](https://github.com/nextcloud/deck/pull/2117) Activity fixes
* [#2255](https://github.com/nextcloud/deck/pull/2255) Use unified search events to apply on board filtering
* [#2271](https://github.com/nextcloud/deck/pull/2271) Sort tags in filter @jakobroehrl
* [#2318](https://github.com/nextcloud/deck/pull/2318) Card title: prevent space and no text @jakobroehrl
* [#2319](https://github.com/nextcloud/deck/pull/2319) Move style loading to BeforeTemplateRenderedEvent
* [#2320](https://github.com/nextcloud/deck/pull/2320) Consistent naming @jakobroehrl
* [#2252](https://github.com/nextcloud/deck/pull/2252) Fix double slash in the deck activity links @baraksoa
* [#2270](https://github.com/nextcloud/deck/pull/2270) Fix empty content view to align with other widgets
* [#2275](https://github.com/nextcloud/deck/pull/2275) Wait for services to be registered before performing further setup that requires services
* [#2278](https://github.com/nextcloud/deck/pull/2278) Fix wrong SQL queries @Chartman123
* [#2279](https://github.com/nextcloud/deck/pull/2279) L10n:add translation to card placeholder @mjanssens
* [#2282](https://github.com/nextcloud/deck/pull/2282) Duedate picker localization
* [#2283](https://github.com/nextcloud/deck/pull/2283) Do not handle exceptions from page controller in the ExceptionMiddleware
* [#2298](https://github.com/nextcloud/deck/pull/2298) Use absolute URLs for the search @nickvergessen
## 1.0.5 - 2020-07-15 ## 1.0.5 - 2020-07-15

View File

@@ -17,7 +17,7 @@
- 🚀 Get your project organized - 🚀 Get your project organized
</description> </description>
<version>1.1.0-beta2</version> <version>1.1.2</version>
<licence>agpl</licence> <licence>agpl</licence>
<author>Julius Härtl</author> <author>Julius Härtl</author>
<namespace>Deck</namespace> <namespace>Deck</namespace>
@@ -36,7 +36,7 @@
<database min-version="9.4">pgsql</database> <database min-version="9.4">pgsql</database>
<database>sqlite</database> <database>sqlite</database>
<database min-version="5.5">mysql</database> <database min-version="5.5">mysql</database>
<nextcloud min-version="18" max-version="21" /> <nextcloud min-version="18" max-version="20" />
</dependencies> </dependencies>
<background-jobs> <background-jobs>
<job>OCA\Deck\Cron\DeleteCron</job> <job>OCA\Deck\Cron\DeleteCron</job>

View File

@@ -191,6 +191,7 @@ OC.L10N.register(
"Select Date" : "Seleccione la fecha", "Select Date" : "Seleccione la fecha",
"Modified" : "Modificado", "Modified" : "Modificado",
"Created" : "Creado", "Created" : "Creado",
"The title cannot be empty." : "El título no puede estar vacío.",
"No comments yet. Begin the discussion!" : "Todavía no hay comentarios. ¡Comienza la discusión!", "No comments yet. Begin the discussion!" : "Todavía no hay comentarios. ¡Comienza la discusión!",
"Save" : "Guardar", "Save" : "Guardar",
"The comment cannot be empty." : "El comentario no puede estar vacío.", "The comment cannot be empty." : "El comentario no puede estar vacío.",
@@ -216,6 +217,7 @@ OC.L10N.register(
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas", "Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos", "Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
"Board name" : "Nombre del tablero",
"Edit board" : "Editar tablero", "Edit board" : "Editar tablero",
"Clone board " : "Clonar tablero", "Clone board " : "Clonar tablero",
"Unarchive board " : "Desarchivar tablero", "Unarchive board " : "Desarchivar tablero",

View File

@@ -189,6 +189,7 @@
"Select Date" : "Seleccione la fecha", "Select Date" : "Seleccione la fecha",
"Modified" : "Modificado", "Modified" : "Modificado",
"Created" : "Creado", "Created" : "Creado",
"The title cannot be empty." : "El título no puede estar vacío.",
"No comments yet. Begin the discussion!" : "Todavía no hay comentarios. ¡Comienza la discusión!", "No comments yet. Begin the discussion!" : "Todavía no hay comentarios. ¡Comienza la discusión!",
"Save" : "Guardar", "Save" : "Guardar",
"The comment cannot be empty." : "El comentario no puede estar vacío.", "The comment cannot be empty." : "El comentario no puede estar vacío.",
@@ -214,6 +215,7 @@
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas", "Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos", "Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
"Board name" : "Nombre del tablero",
"Edit board" : "Editar tablero", "Edit board" : "Editar tablero",
"Clone board " : "Clonar tablero", "Clone board " : "Clonar tablero",
"Unarchive board " : "Desarchivar tablero", "Unarchive board " : "Desarchivar tablero",

View File

@@ -240,9 +240,25 @@ class ActivityManager {
} }
public function triggerEvent($objectType, $entity, $subject, $additionalParams = [], $author = null) { public function triggerEvent($objectType, $entity, $subject, $additionalParams = [], $author = null) {
if ($author === null) {
$author = $this->userId;
}
try { try {
$event = $this->createEvent($objectType, $entity, $subject, $additionalParams, $author); $event = $this->createEvent($objectType, $entity, $subject, $additionalParams, $author);
if ($event !== null) { if ($event !== null) {
$json = json_encode($event->getSubjectParameters());
if (mb_strlen($json) > 4000) {
$params = json_decode(json_encode($event->getSubjectParameters()), true);
$newContent = $params['after'];
unset($params['before'], $params['after'], $params['card']['description']);
$params['after'] = mb_substr($newContent, 0, 2000);
if (mb_strlen($newContent) > 2000) {
$params['after'] .= '...';
}
$event->setSubject($event->getSubject(), $params);
}
$this->sendToUsers($event); $this->sendToUsers($event);
} }
} catch (\Exception $e) { } catch (\Exception $e) {

View File

@@ -96,6 +96,7 @@ class DeckProvider implements IProvider {
unset($subjectParams['author']); unset($subjectParams['author']);
} }
$user = $this->userManager->get($author); $user = $this->userManager->get($author);
$params = [];
if ($user !== null) { if ($user !== null) {
$params = [ $params = [
'user' => [ 'user' => [
@@ -328,8 +329,8 @@ class DeckProvider implements IProvider {
if (array_key_exists('diff', $subjectParams) && $subjectParams['diff']) { if (array_key_exists('diff', $subjectParams) && $subjectParams['diff']) {
$diff = new Diff(); $diff = new Diff();
// Don't add diff as message since we are limited to 255 chars here // Don't add diff as message since we are limited to 255 chars here
//$event->setMessage($subjectParams['after']); $event->setParsedMessage($subjectParams['after']);
$event->setParsedMessage('<pre class="visualdiff">' . $diff->render($subjectParams['before'], $subjectParams['after']) . '</pre>'); //$event->setParsedMessage('<pre class="visualdiff">' . $diff->render($subjectParams['before'], $subjectParams['after']) . '</pre>');
return $params; return $params;
} }
if (array_key_exists('before', $subjectParams)) { if (array_key_exists('before', $subjectParams)) {

View File

@@ -59,7 +59,7 @@ class DeckCalendarBackend {
} }
public function getBoards(): array { public function getBoards(): array {
return $this->boardService->findAll(); return $this->boardService->findAll(-1, null, false);
} }
public function getBoard(int $id): Board { public function getBoard(int $id): Board {

View File

@@ -93,10 +93,18 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @param null $offset * @param null $offset
* @return array * @return array
*/ */
public function findAllByUser($userId, $limit = null, $offset = null, $since = -1) { public function findAllByUser($userId, $limit = null, $offset = null, $since = -1, $includeArchived = true) {
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ? UNION ' . // FIXME: One moving to QBMapper we should allow filtering the boards probably by method chaining for additional where clauses
$sql = 'SELECT id, title, owner, color, archived, deleted_at, 0 as shared, last_modified FROM `*PREFIX*deck_boards` WHERE owner = ? AND last_modified > ?';
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
}
$sql .= ' UNION ' .
'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' . 'SELECT boards.id, title, owner, color, archived, deleted_at, 1 as shared, last_modified FROM `*PREFIX*deck_boards` as boards ' .
'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?'; 'JOIN `*PREFIX*deck_board_acl` as acl ON boards.id=acl.board_id WHERE acl.participant=? AND acl.type=? AND boards.owner != ? AND last_modified > ?';
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
}
$entries = $this->findEntities($sql, [$userId, $since, $userId, Acl::PERMISSION_TYPE_USER, $userId, $since], $limit, $offset); $entries = $this->findEntities($sql, [$userId, $since, $userId, Acl::PERMISSION_TYPE_USER, $userId, $since], $limit, $offset);
/* @var Board $entry */ /* @var Board $entry */
foreach ($entries as $entry) { foreach ($entries as $entry) {
@@ -120,7 +128,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
* @param null $offset * @param null $offset
* @return array * @return array
*/ */
public function findAllByGroups($userId, $groups, $limit = null, $offset = null) { public function findAllByGroups($userId, $groups, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
if (count($groups) <= 0) { if (count($groups) <= 0) {
return []; return [];
} }
@@ -132,7 +140,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
$sql .= ' OR '; $sql .= ' OR ';
} }
} }
$sql .= ');'; $sql .= ')';
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
}
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_GROUP], $groups), $limit, $offset); $entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_GROUP], $groups), $limit, $offset);
/* @var Board $entry */ /* @var Board $entry */
foreach ($entries as $entry) { foreach ($entries as $entry) {
@@ -142,7 +153,7 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
return $entries; return $entries;
} }
public function findAllByCircles($userId, $limit = null, $offset = null) { public function findAllByCircles($userId, $limit = null, $offset = null, $since = -1,$includeArchived = true) {
if (!$this->circlesEnabled) { if (!$this->circlesEnabled) {
return []; return [];
} }
@@ -161,7 +172,10 @@ class BoardMapper extends DeckMapper implements IPermissionMapper {
$sql .= ' OR '; $sql .= ' OR ';
} }
} }
$sql .= ');'; $sql .= ')';
if (!$includeArchived) {
$sql .= ' AND NOT archived AND deleted_at = 0';
}
$entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_CIRCLE], $circles), $limit, $offset); $entries = $this->findEntities($sql, array_merge([$userId, Acl::PERMISSION_TYPE_CIRCLE], $circles), $limit, $offset);
/* @var Board $entry */ /* @var Board $entry */
foreach ($entries as $entry) { foreach ($entries as $entry) {

View File

@@ -42,7 +42,7 @@ class FTSEvent extends Event {
} }
public function getArgument($key) { public function getArgument($key) {
if ($this->hasArgument($key)) { if (isset($this->arguments[$key])) {
return $this->arguments[$key]; return $this->arguments[$key];
} }

View File

@@ -107,11 +107,11 @@ class BoardService {
$this->userId = $userId; $this->userId = $userId;
} }
public function getUserBoards(int $since = -1): array { public function getUserBoards(int $since = -1, $includeArchived = true): array {
$userInfo = $this->getBoardPrerequisites(); $userInfo = $this->getBoardPrerequisites();
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since); $userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since, $includeArchived);
$groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since); $groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since, $includeArchived);
$circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since); $circleBoards = $this->boardMapper->findAllByCircles($userInfo['user'], null, null, $since, $includeArchived);
$mergedBoards = array_merge($userBoards, $groupBoards, $circleBoards); $mergedBoards = array_merge($userBoards, $groupBoards, $circleBoards);
$result = []; $result = [];
/** @var Board $item */ /** @var Board $item */
@@ -125,11 +125,11 @@ class BoardService {
/** /**
* @return array * @return array
*/ */
public function findAll($since = -1, $details = null) { public function findAll($since = -1, $details = null, $includeArchived = true) {
if ($this->boardsCache) { if ($this->boardsCache) {
return $this->boardsCache; return $this->boardsCache;
} }
$complete = $this->getUserBoards($since); $complete = $this->getUserBoards($since, $includeArchived);
$result = []; $result = [];
/** @var Board $item */ /** @var Board $item */
foreach ($complete as &$item) { foreach ($complete as &$item) {

View File

@@ -415,8 +415,11 @@ class CardService {
if ($card->getArchived()) { if ($card->getArchived()) {
throw new StatusException('Operation not allowed. This card is archived.'); throw new StatusException('Operation not allowed. This card is archived.');
} }
$changes = new ChangeSet($card);
$card->setStackId($stackId); $card->setStackId($stackId);
$this->cardMapper->update($card); $this->cardMapper->update($card);
$changes->setAfter($card);
$this->activityManager->triggerUpdateEvents(ActivityManager::DECK_OBJECT_CARD, $changes, ActivityManager::SUBJECT_CARD_UPDATE);
$cards = $this->cardMapper->findAll($stackId); $cards = $this->cardMapper->findAll($stackId);
$result = []; $result = [];

1581
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -33,29 +33,30 @@
"@juliushaertl/vue-richtext": "^0.3.3", "@juliushaertl/vue-richtext": "^0.3.3",
"@nextcloud/auth": "^1.3.0", "@nextcloud/auth": "^1.3.0",
"@nextcloud/axios": "^1.4.0", "@nextcloud/axios": "^1.4.0",
"@nextcloud/dialogs": "^2.0.1", "@nextcloud/dialogs": "^3.0.0",
"@nextcloud/event-bus": "^1.2.0",
"@nextcloud/files": "^1.1.0", "@nextcloud/files": "^1.1.0",
"@nextcloud/initial-state": "^1.1.2", "@nextcloud/initial-state": "^1.2.0",
"@nextcloud/l10n": "^1.4.1", "@nextcloud/l10n": "^1.4.1",
"@nextcloud/moment": "^1.1.1", "@nextcloud/moment": "^1.1.1",
"@nextcloud/router": "^1.2.0", "@nextcloud/router": "^1.2.0",
"@nextcloud/vue": "^2.6.5", "@nextcloud/vue": "^2.7.0",
"@nextcloud/vue-dashboard": "^1.0.1", "@nextcloud/vue-dashboard": "^1.0.1",
"blueimp-md5": "^2.18.0", "blueimp-md5": "^2.18.0",
"dompurify": "^2.1.1", "dompurify": "^2.1.1",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"markdown-it": "^11.0.1", "markdown-it": "^11.0.1",
"markdown-it-task-lists": "^2.1.1", "markdown-it-task-lists": "^2.1.1",
"moment": "^2.29.0", "moment": "^2.29.1",
"nextcloud-vue-collections": "^0.8.1", "nextcloud-vue-collections": "^0.8.1",
"p-queue": "^6.6.1", "p-queue": "^6.6.1",
"url-search-params-polyfill": "^8.1.0", "url-search-params-polyfill": "^8.1.0",
"vue": "^2.6.12", "vue": "^2.6.12",
"vue-at": "^2.5.0-beta.2", "vue-at": "^2.5.0-beta.2",
"vue-click-outside": "^1.1.0", "vue-click-outside": "^1.1.0",
"vue-easymde": "^1.2.2", "vue-easymde": "^1.3.0",
"vue-infinite-loading": "^2.4.5", "vue-infinite-loading": "^2.4.5",
"vue-router": "^3.4.4", "vue-router": "^3.4.6",
"vue-smooth-dnd": "^0.8.1", "vue-smooth-dnd": "^0.8.1",
"vuex": "^3.5.1", "vuex": "^3.5.1",
"vuex-router-sync": "^5.0.0" "vuex-router-sync": "^5.0.0"
@@ -72,44 +73,44 @@
"@babel/preset-env": "^7.11.5", "@babel/preset-env": "^7.11.5",
"@nextcloud/browserslist-config": "^1.0.0", "@nextcloud/browserslist-config": "^1.0.0",
"@nextcloud/eslint-config": "^2.1.0", "@nextcloud/eslint-config": "^2.1.0",
"@nextcloud/eslint-plugin": "^1.4.0", "@nextcloud/eslint-plugin": "^1.5.0",
"@nextcloud/webpack-vue-config": "^1.4.1", "@nextcloud/webpack-vue-config": "^1.4.1",
"@vue/test-utils": "^1.1.0", "@vue/test-utils": "^1.1.0",
"acorn": "^8.0.1", "acorn": "^8.0.4",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"babel-jest": "^26.3.0", "babel-jest": "^26.5.2",
"babel-loader": "^8.1.0", "babel-loader": "^8.1.0",
"css-loader": "^4.3.0", "css-loader": "^4.3.0",
"eslint": "^6.8.0", "eslint": "^6.8.0",
"eslint-config-standard": "^12.0.0", "eslint-config-standard": "^12.0.0",
"eslint-friendly-formatter": "^4.0.1", "eslint-friendly-formatter": "^4.0.1",
"eslint-loader": "^3.0.4", "eslint-loader": "^3.0.4",
"eslint-plugin-import": "^2.22.0", "eslint-plugin-import": "^2.22.1",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1", "eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.1", "eslint-plugin-standard": "^4.0.1",
"eslint-plugin-vue": "^6.2.2", "eslint-plugin-vue": "^6.2.2",
"file-loader": "^6.1.0", "file-loader": "^6.1.1",
"jest": "^26.4.2", "jest": "^26.5.2",
"jest-serializer-vue": "^2.0.2", "jest-serializer-vue": "^2.0.2",
"minimist": "^1.2.5", "minimist": "^1.2.5",
"node-sass": "^4.14.1", "node-sass": "^4.14.1",
"raw-loader": "^4.0.1", "raw-loader": "^4.0.2",
"sass-loader": "^10.0.2", "sass-loader": "^10.0.3",
"style-loader": "^1.2.1", "style-loader": "^1.3.0",
"stylelint": "^13.7.2", "stylelint": "^13.7.2",
"stylelint-config-recommended": "^3.0.0", "stylelint-config-recommended": "^3.0.0",
"stylelint-config-recommended-scss": "^4.2.0", "stylelint-config-recommended-scss": "^4.2.0",
"stylelint-scss": "^3.18.0", "stylelint-scss": "^3.18.0",
"stylelint-webpack-plugin": "^2.1.0", "stylelint-webpack-plugin": "^2.1.0",
"url-loader": "^4.1.0", "url-loader": "^4.1.1",
"vue-jest": "^3.0.7", "vue-jest": "^3.0.7",
"vue-loader": "^15.9.3", "vue-loader": "^15.9.3",
"vue-template-compiler": "^2.6.12", "vue-template-compiler": "^2.6.12",
"webpack": "^4.44.2", "webpack": "^4.44.2",
"webpack-cli": "^3.3.12", "webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0", "webpack-dev-server": "^3.11.0",
"webpack-merge": "^5.1.4" "webpack-merge": "^5.2.0"
}, },
"jest": { "jest": {
"moduleFileExtensions": [ "moduleFileExtensions": [

View File

@@ -21,11 +21,11 @@
--> -->
<template> <template>
<div id="content" :class="{ 'nav-hidden': !navShown, 'sidebar-hidden': !sidebarRouterView }"> <Content id="content" app-name="deck" :class="{ 'nav-hidden': !navShown, 'sidebar-hidden': !sidebarRouterView }">
<AppNavigation v-show="navShown" /> <AppNavigation />
<div id="app-content"> <AppContent>
<router-view /> <router-view />
</div> </AppContent>
<Modal v-if="cardDetailsInModal && $route.params.cardId" :title="t('deck', 'Card details')" @close="hideModal()"> <Modal v-if="cardDetailsInModal && $route.params.cardId" :title="t('deck', 'Card details')" @close="hideModal()">
<div class="modal__content modal__card"> <div class="modal__content modal__card">
@@ -34,15 +34,16 @@
</Modal> </Modal>
<router-view v-show="!cardDetailsInModal || !$route.params.cardId" name="sidebar" /> <router-view v-show="!cardDetailsInModal || !$route.params.cardId" name="sidebar" />
</div> </Content>
</template> </template>
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
import AppNavigation from './components/navigation/AppNavigation' import AppNavigation from './components/navigation/AppNavigation'
import { Modal } from '@nextcloud/vue' import { Modal, Content, AppContent } from '@nextcloud/vue'
import { BoardApi } from './services/BoardApi' import { BoardApi } from './services/BoardApi'
import { emit, subscribe } from '@nextcloud/event-bus'
const boardApi = new BoardApi() const boardApi = new BoardApi()
@@ -51,6 +52,8 @@ export default {
components: { components: {
AppNavigation, AppNavigation,
Modal, Modal,
Content,
AppContent,
}, },
data() { data() {
return { return {
@@ -91,6 +94,15 @@ export default {
this.$store.dispatch('loadBoards') this.$store.dispatch('loadBoards')
this.$store.dispatch('loadSharees') this.$store.dispatch('loadSharees')
}, },
mounted() {
// Set navigation to initial state and update in case it gets toggled
emit('toggle-navigation', { open: this.navShown, _initial: true })
this.$nextTick(() => {
subscribe('navigation-toggled', (navState) => {
this.$store.dispatch('toggleNav', navState.open)
})
})
},
methods: { methods: {
hideModal() { hideModal() {
this.$router.push({ name: 'board' }) this.$router.push({ name: 'board' })
@@ -131,13 +143,6 @@ export default {
} }
} }
} }
</style>
<style lang="scss">
.multiselect {
width: 100%;
}
.modal__card { .modal__card {
min-width: 320px; min-width: 320px;
@@ -147,3 +152,11 @@ export default {
height: 80vh; height: 80vh;
} }
</style> </style>
<style lang="scss">
.multiselect {
width: 100%;
}
</style>

View File

@@ -22,17 +22,17 @@
<template> <template>
<div class="controls"> <div class="controls">
<div id="app-navigation-toggle-custom" class="icon-menu" @click="toggleNav" /> <div v-if="overviewName" class="board-title">
<div v-if="board" class="board-title"> <div class="board-bullet icon-calendar-dark" />
<h2>{{ overviewName }}</h2>
</div>
<div v-else-if="board" class="board-title">
<div :style="{backgroundColor: '#' + board.color}" class="board-bullet" /> <div :style="{backgroundColor: '#' + board.color}" class="board-bullet" />
<h2><a href="#">{{ board.title }}</a></h2> <h2>{{ board.title }}</h2>
<p v-if="showArchived"> <p v-if="showArchived">
({{ t('deck', 'Archived cards') }}) ({{ t('deck', 'Archived cards') }})
</p> </p>
</div> </div>
<div v-if="overviewName" class="board-title">
<h2><a href="#">{{ overviewName }}</a></h2>
</div>
<div v-if="board" class="board-actions"> <div v-if="board" class="board-actions">
<div v-if="canManage && !showArchived && !board.archived" <div v-if="canManage && !showArchived && !board.archived"
id="stack-add" id="stack-add"
@@ -321,6 +321,9 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.controls { .controls {
display: flex; display: flex;
padding: 3px;
height: 44px;
padding-left: 44px;
.board-title { .board-title {
display: flex; display: flex;
@@ -337,7 +340,7 @@ export default {
height: 20px; height: 20px;
border: none; border: none;
border-radius: 50%; border-radius: 50%;
background-color: #aaa; background-color: transparent;
margin: 12px; margin: 12px;
margin-left: -4px; margin-left: -4px;
} }
@@ -395,6 +398,7 @@ export default {
width: 250px; width: 250px;
max-height: 80vh; max-height: 80vh;
overflow: auto; overflow: auto;
padding: 8px;
} }
.filter h3 { .filter h3 {

View File

@@ -181,7 +181,7 @@ export default {
} }
.board { .board {
margin-left: $board-spacing; padding-left: $board-spacing;
position: relative; position: relative;
height: calc(100% - 44px); height: calc(100% - 44px);
overflow-x: scroll; overflow-x: scroll;

View File

@@ -7,10 +7,19 @@
:options="formatedSharees" :options="formatedSharees"
:user-select="true" :user-select="true"
label="displayName" label="displayName"
:loading="isLoading || !!isSearching"
:disabled="isLoading"
track-by="multiselectKey" track-by="multiselectKey"
:internal-search="true" :internal-search="true"
@input="clickAddAcl" @input="clickAddAcl"
@search-change="asyncFind" /> @search-change="asyncFind">
<template #noOptions>
{{ isSearching ? t('deck', 'Searching for users, groups and circles ...') : t('deck', 'No participants found') }}
</template>
<template #noResult>
{{ isSearching ? t('deck', 'Searching for users, groups and circles ...') : t('deck', 'No participants found') }}
</template>
</Multiselect>
<ul <ul
id="shareWithList" id="shareWithList"
@@ -63,6 +72,7 @@ import { Avatar, Multiselect, Actions, ActionButton, ActionCheckbox } from '@nex
import { CollectionList } from 'nextcloud-vue-collections' import { CollectionList } from 'nextcloud-vue-collections'
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from 'vuex'
import { getCurrentUser } from '@nextcloud/auth' import { getCurrentUser } from '@nextcloud/auth'
import { showError } from '@nextcloud/dialogs'
export default { export default {
name: 'SharingTabSidebar', name: 'SharingTabSidebar',
@@ -83,6 +93,7 @@ export default {
data() { data() {
return { return {
isLoading: false, isLoading: false,
isSearching: false,
addAcl: null, addAcl: null,
addAclForAPI: null, addAclForAPI: null,
} }
@@ -102,7 +113,7 @@ export default {
formatedSharees() { formatedSharees() {
return this.unallocatedSharees.map(item => { return this.unallocatedSharees.map(item => {
const sharee = { const sharee = {
user: item.label, user: item.value.shareWith,
displayName: item.label, displayName: item.label,
icon: 'icon-user', icon: 'icon-user',
multiselectKey: item.shareType + ':' + item.primaryKey, multiselectKey: item.shareType + ':' + item.primaryKey,
@@ -119,7 +130,7 @@ export default {
sharee.value = item.value sharee.value = item.value
return sharee return sharee
}) }).slice(0, 10)
}, },
unallocatedSharees() { unallocatedSharees() {
return this.sharees.filter((sharee) => { return this.sharees.filter((sharee) => {
@@ -137,13 +148,20 @@ export default {
this.asyncFind('') this.asyncFind('')
}, },
methods: { methods: {
asyncFind(query) { async asyncFind(query) {
this.isLoading = true // manual debounce to handle async searching more easily and have more control over the loading state
this.$store.dispatch('loadSharees', query).then(response => { const timestamp = (new Date()).getTime()
this.isLoading = false if (!this.isSearching || timestamp > this.isSearching + 300) {
}) this.isSearching = timestamp
await this.$store.dispatch('loadSharees', query)
// only reset searching flag if the most recent search finished
if (this.isSearching === timestamp) {
this.isSearching = false
}
}
}, },
clickAddAcl() { async clickAddAcl() {
this.addAclForAPI = { this.addAclForAPI = {
type: this.addAcl.value.shareType, type: this.addAcl.value.shareType,
participant: this.addAcl.value.shareWith, participant: this.addAcl.value.shareWith,
@@ -151,7 +169,16 @@ export default {
permissionShare: false, permissionShare: false,
permissionManage: false, permissionManage: false,
} }
this.$store.dispatch('addAclToCurrentBoard', this.addAclForAPI) this.isLoading = true
try {
await this.$store.dispatch('addAclToCurrentBoard', this.addAclForAPI)
} catch (e) {
const errorMessage = t('deck', 'Failed to create share with {displayName}', { displayName: this.addAcl.displayName })
console.error(errorMessage, e)
showError(errorMessage)
}
this.addAcl = null
this.isLoading = false
}, },
clickEditAcl(acl) { clickEditAcl(acl) {
this.addAclForAPI = Object.assign({}, acl) this.addAclForAPI = Object.assign({}, acl)

View File

@@ -160,6 +160,7 @@ export default {
]), ]),
...mapState({ ...mapState({
showArchived: state => state.showArchived, showArchived: state => state.showArchived,
cardDetailsInModal: state => state.cardDetailsInModal,
}), }),
cardsByStack() { cardsByStack() {
return this.$store.getters.cardsByStack(this.stack.id).filter((card) => { return this.$store.getters.cardsByStack(this.stack.id).filter((card) => {
@@ -245,7 +246,9 @@ export default {
this.$refs.newCardInput.focus() this.$refs.newCardInput.focus()
this.animate = false this.animate = false
}) })
this.$router.push({ name: 'card', params: { cardId: newCard.id } }) if (!this.cardDetailsInModal) {
this.$router.push({ name: 'card', params: { cardId: newCard.id } })
}
} catch (e) { } catch (e) {
showError('Could not create card: ' + e.response.data.message) showError('Could not create card: ' + e.response.data.message)
} finally { } finally {

View File

@@ -179,7 +179,7 @@
<CardSidebarTabAttachments :card="currentCard" /> <CardSidebarTabAttachments :card="currentCard" />
</AppSidebarTab> </AppSidebarTab>
<AppSidebarTab v-if="hasComments" <AppSidebarTab
id="comments" id="comments"
:order="2" :order="2"
:name="t('deck', 'Comments')" :name="t('deck', 'Comments')"
@@ -283,7 +283,6 @@ export default {
descriptionSaveTimeout: null, descriptionSaveTimeout: null,
descriptionSaving: false, descriptionSaving: false,
hasActivity: capabilities && capabilities.activity, hasActivity: capabilities && capabilities.activity,
hasComments: !!OC.appswebroots['comments'],
modalShow: false, modalShow: false,
lang: { lang: {
days: getDayNamesMin(), days: getDayNamesMin(),
@@ -572,14 +571,16 @@ export default {
// FIXME: Obivously we should at some point not randomly reuse the sidebar component // FIXME: Obivously we should at some point not randomly reuse the sidebar component
// since this is not oficially supported // since this is not oficially supported
.modal__card .app-sidebar { .modal__card .app-sidebar {
$modal-padding: 14px;
border: 0; border: 0;
min-width: 100%; min-width: calc(100% - #{$modal-padding*2});
position: relative; position: relative;
top: 0; top: 0;
left: 0; left: 0;
right: 0; right: 0;
max-width: 100%; max-width: calc(100% - #{$modal-padding*2});
max-height: 100%; padding: 14px;
max-height: calc(100% - #{$modal-padding*2});
&::v-deep { &::v-deep {
.app-sidebar-header { .app-sidebar-header {
position: sticky; position: sticky;

View File

@@ -144,17 +144,19 @@ export default {
} }
} }
$avatar-offset: 12px;
.avatar-list { .avatar-list {
float: right; float: right;
display: inline-flex; display: inline-flex;
padding-right: 8px; padding-right: $avatar-offset;
flex-direction: row-reverse; flex-direction: row-reverse;
.avatardiv, .avatardiv,
/deep/ .avatardiv { /deep/ .avatardiv {
width: 36px; width: 36px;
height: 36px; height: 36px;
box-sizing: content-box !important; box-sizing: content-box !important;
margin-right: -12px; margin-right: -$avatar-offset;
transition: margin-right 0.2s ease-in-out; transition: margin-right 0.2s ease-in-out;
&.icon-more { &.icon-more {

View File

@@ -121,10 +121,6 @@ export default {
} }
} }
.card:not(.card__editable) .avatars {
margin-right: 10px;
}
.fade-enter-active, .fade-leave-active { .fade-enter-active, .fade-leave-active {
transition: opacity .125s; transition: opacity .125s;
} }

View File

@@ -31,7 +31,7 @@
class="card" class="card"
@click="openCard"> @click="openCard">
<div class="card-upper"> <div class="card-upper">
<h3 v-if="isArchived || showArchived || !canEdit"> <h3 v-if="compactMode || isArchived || showArchived || !canEdit">
{{ card.title }} {{ card.title }}
</h3> </h3>
<h3 v-else-if="!editing"> <h3 v-else-if="!editing">
@@ -41,6 +41,7 @@
<form v-if="editing" <form v-if="editing"
v-click-outside="cancelEdit" v-click-outside="cancelEdit"
class="dragDisabled" class="dragDisabled"
@click.stop
@keyup.esc="cancelEdit" @keyup.esc="cancelEdit"
@submit.prevent="finishedEdit(card)"> @submit.prevent="finishedEdit(card)">
<input v-model="copiedCard.title" <input v-model="copiedCard.title"
@@ -59,9 +60,9 @@
name="zoom" name="zoom"
tag="ul" tag="ul"
class="labels" class="labels"
@click="openCard"> @click.stop="openCard">
<li v-for="label in labelsSorted" :key="label.id" :style="labelStyle(label)"> <li v-for="label in labelsSorted" :key="label.id" :style="labelStyle(label)">
<span @click="applyLabelFilter(label)">{{ label.title }}</span> <span @click.stop="applyLabelFilter(label)">{{ label.title }}</span>
</li> </li>
</transition-group> </transition-group>
<div v-show="!compactMode" class="card-controls compact-item" @click="openCard"> <div v-show="!compactMode" class="card-controls compact-item" @click="openCard">
@@ -115,10 +116,10 @@ export default {
]), ]),
canEdit() { canEdit() {
if (this.currentBoard) { if (this.currentBoard) {
return this.$store.getters.canEdit return !this.currentBoard.archived && this.$store.getters.canEdit
} }
const board = this.$store.getters.boards.find((item) => item.id === this.card.boardId) const board = this.$store.getters.boards.find((item) => item.id === this.card.boardId)
return board.permissions.PERMISSION_EDIT return board ? !board.archived && board.permissions.PERMISSION_EDIT : false
}, },
card() { card() {
return this.item ? this.item : this.$store.getters.cardById(this.id) return this.item ? this.item : this.$store.getters.cardById(this.id)
@@ -171,6 +172,10 @@ export default {
background-color: var(--color-main-background); background-color: var(--color-main-background);
margin-bottom: $card-spacing; margin-bottom: $card-spacing;
&::v-deep * {
cursor: pointer;
}
body.dark &, body.theme--dark & { body.dark &, body.theme--dark & {
border: 2px solid var(--color-border); border: 2px solid var(--color-border);
} }
@@ -195,7 +200,7 @@ export default {
margin: 12px $card-padding; margin: 12px $card-padding;
flex-grow: 1; flex-grow: 1;
font-size: 100%; font-size: 100%;
overflow-x: hidden; overflow: hidden;
word-wrap: break-word; word-wrap: break-word;
padding-left: 4px; padding-left: 4px;
span { span {
@@ -212,11 +217,16 @@ export default {
.card-controls { .card-controls {
display: flex; display: flex;
margin-left: $card-padding; margin-left: $card-padding;
margin-right: $card-padding;
& > div { & > div {
display: flex; display: flex;
max-height: 44px; max-height: 44px;
} }
} }
&.card__editable .card-controls {
margin-right: 0;
}
} }
.duedate { .duedate {

View File

@@ -30,18 +30,18 @@
<ActionButton v-if="showArchived === false && isCurrentUserAssigned" icon="icon-user" @click="unassignCardFromMe()"> <ActionButton v-if="showArchived === false && isCurrentUserAssigned" icon="icon-user" @click="unassignCardFromMe()">
{{ t('deck', 'Unassign myself') }} {{ t('deck', 'Unassign myself') }}
</ActionButton> </ActionButton>
<ActionButton icon="icon-archive" @click="archiveUnarchiveCard()">
{{ showArchived ? t('deck', 'Unarchive card') : t('deck', 'Archive card') }}
</ActionButton>
<ActionButton v-if="showArchived === false" icon="icon-delete" @click="deleteCard()">
{{ t('deck', 'Delete card') }}
</ActionButton>
<ActionButton icon="icon-external" @click.stop="modalShow=true"> <ActionButton icon="icon-external" @click.stop="modalShow=true">
{{ t('deck', 'Move card') }} {{ t('deck', 'Move card') }}
</ActionButton> </ActionButton>
<ActionButton icon="icon-settings-dark" @click="openCard"> <ActionButton icon="icon-settings-dark" @click="openCard">
{{ t('deck', 'Card details') }} {{ t('deck', 'Card details') }}
</ActionButton> </ActionButton>
<ActionButton icon="icon-archive" @click="archiveUnarchiveCard()">
{{ showArchived ? t('deck', 'Unarchive card') : t('deck', 'Archive card') }}
</ActionButton>
<ActionButton v-if="showArchived === false" icon="icon-delete" @click="deleteCard()">
{{ t('deck', 'Delete card') }}
</ActionButton>
</Actions> </Actions>
</div> </div>
<Modal v-if="modalShow" :title="t('deck', 'Move card to another board')" @close="modalShow=false"> <Modal v-if="modalShow" :title="t('deck', 'Move card to another board')" @close="modalShow=false">
@@ -106,7 +106,7 @@ export default {
return this.$store.getters.canEdit return this.$store.getters.canEdit
} }
const board = this.$store.getters.boards.find((item) => item.id === this.card.boardId) const board = this.$store.getters.boards.find((item) => item.id === this.card.boardId)
return board.permissions.PERMISSION_EDIT return !!board?.permissions?.PERMISSION_EDIT
}, },
isBoardAndStackChoosen() { isBoardAndStackChoosen() {
if (this.selectedBoard === '' || this.selectedStack === '') { if (this.selectedBoard === '' || this.selectedStack === '') {

View File

@@ -192,8 +192,4 @@ export default {
color: var(--color-text-light); color: var(--color-text-light);
} }
} }
::v-deep .app-navigation-toggle {
display: none;
}
</style> </style>

View File

@@ -27,6 +27,7 @@ import { sync } from 'vuex-router-sync'
import { translate, translatePlural } from '@nextcloud/l10n' import { translate, translatePlural } from '@nextcloud/l10n'
import { generateFilePath } from '@nextcloud/router' import { generateFilePath } from '@nextcloud/router'
import { showError } from '@nextcloud/dialogs' import { showError } from '@nextcloud/dialogs'
import { subscribe } from '@nextcloud/event-bus'
import { Tooltip } from '@nextcloud/vue' import { Tooltip } from '@nextcloud/vue'
import ClickOutside from 'vue-click-outside' import ClickOutside from 'vue-click-outside'
import './models' import './models'
@@ -74,8 +75,17 @@ new Vue({
} }
}, },
created() { created() {
subscribe('nextcloud:unified-search.search', ({ query }) => {
this.$store.commit('setSearchQuery', query)
})
subscribe('nextcloud:unified-search.reset', () => {
this.$store.commit('setSearchQuery', '')
})
// FIXME remove this once Nextcloud 20 is minimum required version
// eslint-disable-next-line // eslint-disable-next-line
new OCA.Search(this.filter, this.cleanSearch) new OCA.Search(this.filter, this.cleanSearch)
this.interval = setInterval(() => { this.interval = setInterval(() => {
this.time = Date.now() this.time = Date.now()
}, 1000) }, 1000)

View File

@@ -34,7 +34,6 @@ import comment from './comment'
import trashbin from './trashbin' import trashbin from './trashbin'
import attachment from './attachment' import attachment from './attachment'
import overview from './overview' import overview from './overview'
import debounce from 'lodash/debounce'
Vue.use(Vuex) Vue.use(Vuex)
const apiClient = new BoardApi() const apiClient = new BoardApi()
@@ -59,7 +58,7 @@ export default new Vuex.Store({
state: { state: {
config: loadState('deck', 'config', {}), config: loadState('deck', 'config', {}),
showArchived: false, showArchived: false,
navShown: true, navShown: localStorage.getItem('deck.navShown') === 'true',
compactMode: localStorage.getItem('deck.compactMode') === 'true', compactMode: localStorage.getItem('deck.compactMode') === 'true',
cardDetailsInModal: localStorage.getItem('deck.cardDetailsInModal') === 'true', cardDetailsInModal: localStorage.getItem('deck.cardDetailsInModal') === 'true',
sidebarShown: false, sidebarShown: false,
@@ -204,8 +203,9 @@ export default new Vuex.Store({
return board.id !== b.id return board.id !== b.id
}) })
}, },
toggleNav(state) { toggleNav(state, navState) {
state.navShown = !state.navShown state.navShown = navState
localStorage.setItem('deck.navShown', navState)
}, },
toggleSidebar(state) { toggleSidebar(state) {
state.sidebarShown = !state.sidebarShown state.sidebarShown = !state.sidebarShown
@@ -392,7 +392,7 @@ export default new Vuex.Store({
const boards = await apiClient.loadBoards() const boards = await apiClient.loadBoards()
commit('setBoards', boards) commit('setBoards', boards)
}, },
loadSharees: debounce(function({ commit }, query) { async loadSharees({ commit }, query) {
const params = new URLSearchParams() const params = new URLSearchParams()
if (typeof query === 'undefined') { if (typeof query === 'undefined') {
return return
@@ -402,16 +402,15 @@ export default new Vuex.Store({
params.append('perPage', 20) params.append('perPage', 20)
params.append('itemType', [0, 1, 7]) params.append('itemType', [0, 1, 7])
axios.get(generateOcsUrl('apps/files_sharing/api/v1') + 'sharees', { params }).then((response) => { const response = await axios.get(generateOcsUrl('apps/files_sharing/api/v1') + 'sharees', { params })
commit('setSharees', response.data.ocs.data) commit('setSharees', response.data.ocs.data)
}) },
}, 250),
setBoardFilter({ commmit }, filter) { setBoardFilter({ commmit }, filter) {
commmit('setBoardFilter', filter) commmit('setBoardFilter', filter)
}, },
toggleNav({ commit }) { toggleNav({ commit }, navState) {
commit('toggleNav') commit('toggleNav', navState)
}, },
toggleSidebar({ commit }) { toggleSidebar({ commit }) {
commit('toggleSidebar') commit('toggleSidebar')
@@ -454,13 +453,11 @@ export default new Vuex.Store({
}, },
// acl actions // acl actions
addAclToCurrentBoard({ dispatch, commit }, newAcl) { async addAclToCurrentBoard({ dispatch, commit }, newAcl) {
newAcl.boardId = this.state.currentBoard.id newAcl.boardId = this.state.currentBoard.id
apiClient.addAcl(newAcl) const result = await apiClient.addAcl(newAcl)
.then((returnAcl) => { commit('addAclToCurrentBoard', result)
commit('addAclToCurrentBoard', returnAcl) dispatch('refreshBoard', newAcl.boardId)
dispatch('refreshBoard', newAcl.boardId)
})
}, },
updateAclFromCurrentBoard({ commit }, acl) { updateAclFromCurrentBoard({ commit }, acl) {
acl.boardId = this.state.currentBoard.id acl.boardId = this.state.currentBoard.id

View File

@@ -287,7 +287,7 @@ class DeckProviderTest extends TestCase {
$this->assertEquals('test string Card', $event->getParsedSubject()); $this->assertEquals('test string Card', $event->getParsedSubject());
$this->assertEquals('test string {card}', $event->getRichSubject()); $this->assertEquals('test string {card}', $event->getRichSubject());
$this->assertEquals('BCD', $event->getMessage()); $this->assertEquals('BCD', $event->getMessage());
$this->assertEquals('<pre class="visualdiff"><del>A</del>BC<ins>D</ins></pre>', $event->getParsedMessage()); $this->assertEquals('BCD', $event->getParsedMessage());
} }
public function testParseParamForBoard() { public function testParseParamForBoard() {