Compare commits

...

986 Commits

Author SHA1 Message Date
Julius Härtl
54a1cad7a8 [Security] Bump lodash from 4.17.11 to 4.17.15 in /js (#1160)
[Security] Bump lodash from 4.17.11 to 4.17.15 in /js
2019-08-01 16:04:54 +02:00
dependabot-preview[bot]
40c462c147 [Security] Bump lodash from 4.17.11 to 4.17.15 in /js
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.15. **This update includes a security fix.**
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.15)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-01 14:02:40 +00:00
Julius Härtl
c9a8bebe22 Merge pull request #951 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/@babel/polyfill-7.4.0
Bump @babel/polyfill from 7.2.5 to 7.4.0 in /js
2019-03-21 14:35:02 +01:00
dependabot[bot]
c645416709 Bump @babel/polyfill from 7.2.5 to 7.4.0 in /js
Bumps [@babel/polyfill](https://github.com/babel/babel) from 7.2.5 to 7.4.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.2.5...v7.4.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-21 10:31:38 +00:00
Julius Härtl
99bfca5d64 Merge pull request #952 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/@babel/preset-env-7.4.1
Bump @babel/preset-env from 7.3.4 to 7.4.1 in /js
2019-03-21 11:26:48 +01:00
Julius Härtl
66a35804fe Merge pull request #949 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/@babel/core-7.4.0
Bump @babel/core from 7.3.4 to 7.4.0 in /js
2019-03-21 11:26:24 +01:00
dependabot[bot]
1820df4c57 Bump @babel/preset-env from 7.3.4 to 7.4.1 in /js
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.3.4 to 7.4.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.3.4...v7.4.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-21 09:24:11 +00:00
dependabot[bot]
3fa921c1b8 Bump @babel/core from 7.3.4 to 7.4.0 in /js
Bumps [@babel/core](https://github.com/babel/babel) from 7.3.4 to 7.4.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.3.4...v7.4.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-21 09:22:16 +00:00
Julius Härtl
e6613e612c Merge pull request #930 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/angular-animate-1.7.8
Bump angular-animate from 1.7.7 to 1.7.8 in /js
2019-03-16 09:37:40 +01:00
Julius Härtl
a354058c8a Merge pull request #943 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/webpack-cli-3.3.0
Bump webpack-cli from 3.2.3 to 3.3.0 in /js
2019-03-16 09:36:47 +01:00
dependabot[bot]
cb2fb6cfcd Bump webpack-cli from 3.2.3 to 3.3.0 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.2.3 to 3.3.0.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/V.3.2.3...v.3.3.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-16 02:13:45 +00:00
Julius Härtl
640275c2a8 Merge pull request #926 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/css-loader-2.1.1
Bump css-loader from 2.1.0 to 2.1.1 in /js
2019-03-12 08:47:26 +01:00
dependabot[bot]
6789662c38 Bump angular-animate from 1.7.7 to 1.7.8 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.7 to 1.7.8.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.7...v1.7.8)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-12 07:44:18 +00:00
Julius Härtl
e9e0279fbd Merge pull request #932 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/angular-sanitize-1.7.8
Bump angular-sanitize from 1.7.7 to 1.7.8 in /js
2019-03-12 08:42:03 +01:00
Julius Härtl
2d2dc21861 Merge pull request #934 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/angular-1.7.8
Bump angular from 1.7.7 to 1.7.8 in /js
2019-03-12 08:40:59 +01:00
dependabot[bot]
e5c5cc1893 Bump angular from 1.7.7 to 1.7.8 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.7 to 1.7.8.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.7...v1.7.8)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-11 14:05:09 +00:00
dependabot[bot]
12d56597b8 Bump angular-sanitize from 1.7.7 to 1.7.8 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.7 to 1.7.8.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.7...v1.7.8)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-11 14:04:24 +00:00
dependabot[bot]
b7b99c7c84 Bump css-loader from 2.1.0 to 2.1.1 in /js
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v2.1.0...v2.1.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-09 02:12:19 +00:00
Julius Härtl
f7d41ae1e5 Merge pull request #912 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/uglifyjs-webpack-plugin-2.1.2
Bump uglifyjs-webpack-plugin from 2.1.1 to 2.1.2 in /js
2019-03-05 09:30:29 +01:00
dependabot[bot]
1c9a71164c Bump uglifyjs-webpack-plugin from 2.1.1 to 2.1.2 in /js
Bumps [uglifyjs-webpack-plugin](https://github.com/webpack-contrib/uglifyjs-webpack-plugin) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/compare/v2.1.1...v2.1.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-04 15:28:08 +00:00
Julius Härtl
fb09ad3916 Merge pull request #915 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/karma-4.0.1
Bump karma from 4.0.0 to 4.0.1 in /js
2019-03-04 16:25:56 +01:00
Julius Härtl
b56c24c4a0 Merge pull request #916 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/webpack-4.29.6
Bump webpack from 4.29.5 to 4.29.6 in /js
2019-03-04 16:25:43 +01:00
Julius Härtl
50748e1a4e Merge pull request #918 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/@babel/preset-env-7.3.4
Bump @babel/preset-env from 7.3.1 to 7.3.4 in /js
2019-03-04 16:25:27 +01:00
Julius Härtl
0d216f3b16 Merge pull request #919 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/@babel/core-7.3.4
Bump @babel/core from 7.3.3 to 7.3.4 in /js
2019-03-04 16:25:13 +01:00
dependabot[bot]
48d6d34951 Bump @babel/core from 7.3.3 to 7.3.4 in /js
Bumps [@babel/core](https://github.com/babel/babel) from 7.3.3 to 7.3.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.3.3...v7.3.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-02 02:19:06 +00:00
dependabot[bot]
e538f598e1 Bump @babel/preset-env from 7.3.1 to 7.3.4 in /js
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.3.1 to 7.3.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.3.1...v7.3.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-02 02:18:28 +00:00
dependabot[bot]
74dbf221a8 Bump webpack from 4.29.5 to 4.29.6 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.29.5 to 4.29.6.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.29.5...v4.29.6)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-02 02:16:25 +00:00
dependabot[bot]
e494f5d836 Bump karma from 4.0.0 to 4.0.1 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v4.0.0...v4.0.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-02 02:16:15 +00:00
Julius Härtl
92de655f6c Merge pull request #901 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/@babel/core-7.3.3
Bump @babel/core from 7.2.2 to 7.3.3 in /js
2019-02-20 14:34:03 +01:00
dependabot[bot]
f8ab30e05c Bump @babel/core from 7.2.2 to 7.3.3 in /js
Bumps [@babel/core](https://github.com/babel/babel) from 7.2.2 to 7.3.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.2.2...v7.3.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-20 13:27:21 +00:00
Julius Härtl
8a2fdeda51 Merge pull request #903 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/webpack-4.29.5
Bump webpack from 4.29.3 to 4.29.5 in /js
2019-02-19 08:00:14 +01:00
dependabot[bot]
911770b143 Bump webpack from 4.29.3 to 4.29.5 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.29.3 to 4.29.5.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.29.3...v4.29.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-19 02:15:45 +00:00
Julius Härtl
1071ebcb3b Merge pull request #888 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/@babel/polyfill-7.2.5
Bump @babel/polyfill from 7.0.0 to 7.2.5 in /js
2019-02-14 14:09:29 +01:00
Julius Härtl
bef2d85d09 Merge pull request #887 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/webpack-4.29.3
Bump webpack from 4.29.0 to 4.29.3 in /js
2019-02-14 14:09:18 +01:00
Julius Härtl
85593f8182 Merge pull request #889 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/angular-animate-1.7.7
Bump angular-animate from 1.7.6 to 1.7.7 in /js
2019-02-14 14:09:05 +01:00
Julius Härtl
ebf21440a1 Merge pull request #892 from nextcloud/backport/876/stable-0.5
[stable-0.5] prevent loading details by clicking on the card title
2019-02-12 10:53:53 +01:00
Jakob Röhrl
070ab7e403 prevent loading details by clicking on the title
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
2019-02-12 09:53:03 +00:00
dependabot[bot]
5c67469fa7 Bump angular-animate from 1.7.6 to 1.7.7 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.6 to 1.7.7.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.6...v1.7.7)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-12 09:47:04 +00:00
Julius Härtl
0a0c301ff6 Merge pull request #890 from nextcloud/dependabot/npm_and_yarn/js/stable-0.5/angular-1.7.7
Bump angular from 1.7.6 to 1.7.7 in /js
2019-02-12 10:43:43 +01:00
dependabot[bot]
c8b42af383 Bump angular from 1.7.6 to 1.7.7 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.6 to 1.7.7.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.6...v1.7.7)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-12 09:40:31 +00:00
dependabot[bot]
4101300b87 Bump @babel/polyfill from 7.0.0 to 7.2.5 in /js
Bumps [@babel/polyfill](https://github.com/babel/babel) from 7.0.0 to 7.2.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.0.0...v7.2.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-12 09:39:35 +00:00
dependabot[bot]
25145eca87 Bump webpack from 4.29.0 to 4.29.3 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.29.0 to 4.29.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.29.0...v4.29.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-12 09:39:07 +00:00
Nextcloud bot
056bf1ccab [tx-robot] updated from transifex 2019-02-12 01:19:27 +00:00
Julius Härtl
b4f4341dc1 Merge pull request #881 from nextcloud/dependabot/npm_and_yarn/js/webpack-cli-3.2.3
Bump webpack-cli from 3.2.0 to 3.2.3 in /js
2019-02-11 18:12:59 +01:00
Julius Härtl
ee07630b55 Merge pull request #879 from nextcloud/dependabot/npm_and_yarn/js/angular-sanitize-1.7.7
Bump angular-sanitize from 1.7.6 to 1.7.7 in /js
2019-02-11 16:51:58 +01:00
Julius Härtl
6d4c59cbb4 Merge pull request #874 from nextcloud/dependabot/npm_and_yarn/js/@uirouter/angularjs-1.0.22
Bump @uirouter/angularjs from 1.0.21 to 1.0.22 in /js
2019-02-11 16:51:13 +01:00
Julius Härtl
25743a05cd Merge pull request #883 from nextcloud/dependabot/npm_and_yarn/js/lodash-4.17.11
[Security] Bump lodash from 4.17.10 to 4.17.11 in /js
2019-02-11 16:50:35 +01:00
dependabot[bot]
bed704270c [Security] Bump lodash from 4.17.10 to 4.17.11 in /js
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.10 to 4.17.11. **This update includes security fixes.**
- [Release notes](https://github.com/lodash/lodash/releases)
- [Changelog](https://github.com/lodash/lodash/blob/master/CHANGELOG)
- [Commits](https://github.com/lodash/lodash/compare/4.17.10...4.17.11)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-07 19:04:37 +00:00
dependabot[bot]
e7ab69233a Bump webpack-cli from 3.2.0 to 3.2.3 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.2.0 to 3.2.3.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-06 16:05:20 +00:00
dependabot[bot]
d6923b3268 Bump angular-sanitize from 1.7.6 to 1.7.7 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.6 to 1.7.7.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.6...v1.7.7)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-06 16:03:09 +00:00
Nextcloud bot
8403265f35 [tx-robot] updated from transifex 2019-02-03 01:13:55 +00:00
dependabot[bot]
d117479a5d Bump @uirouter/angularjs from 1.0.21 to 1.0.22 in /js
Bumps [@uirouter/angularjs](https://github.com/angular-ui/ui-router) from 1.0.21 to 1.0.22.
- [Release notes](https://github.com/angular-ui/ui-router/releases)
- [Changelog](https://github.com/angular-ui/ui-router/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular-ui/ui-router/compare/1.0.21...1.0.22)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-02-02 02:13:12 +00:00
Nextcloud bot
c7513dcf13 [tx-robot] updated from transifex 2019-01-31 01:13:40 +00:00
Julius Härtl
a7f8b66cce Merge pull request #856 from nextcloud/issue439
hide sidebar after card deletion
2019-01-28 18:17:58 +01:00
Julius Härtl
fb00f41829 Merge pull request #852 from nextcloud/dependabot/npm_and_yarn/js/angular-1.7.6
Bump angular from 1.7.5 to 1.7.6 in /js
2019-01-28 18:14:12 +01:00
Julius Härtl
0efd35c603 Merge pull request #858 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.29.0
Bump webpack from 4.28.4 to 4.29.0 in /js
2019-01-28 18:14:03 +01:00
Julius Härtl
a4aaa62b49 Merge pull request #860 from nextcloud/dependabot/npm_and_yarn/js/karma-4.0.0
Bump karma from 3.1.4 to 4.0.0 in /js
2019-01-28 18:12:59 +01:00
Julius Härtl
3667edf9f7 Merge pull request #859 from nextcloud/dependabot/npm_and_yarn/js/@babel/preset-env-7.3.1
Bump @babel/preset-env from 7.2.3 to 7.3.1 in /js
2019-01-28 18:12:44 +01:00
Nextcloud bot
c43ef715d6 [tx-robot] updated from transifex 2019-01-28 01:13:28 +00:00
Nextcloud bot
17fe0092b0 [tx-robot] updated from transifex 2019-01-27 01:14:04 +00:00
dependabot[bot]
cfc94899bc Bump karma from 3.1.4 to 4.0.0 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 3.1.4 to 4.0.0.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v3.1.4...v4.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-26 02:15:54 +00:00
dependabot[bot]
fa83741938 Bump @babel/preset-env from 7.2.3 to 7.3.1 in /js
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.2.3 to 7.3.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.2.3...v7.3.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-26 02:15:06 +00:00
dependabot[bot]
f5562529f6 Bump webpack from 4.28.4 to 4.29.0 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.28.4 to 4.29.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.28.4...v4.29.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-26 02:14:01 +00:00
Nextcloud bot
8e9dda297b [tx-robot] updated from transifex 2019-01-26 01:19:01 +00:00
Jakob Röhrl
6ef0335321 hide sidebar after card deletion
Signed-off-by: Jakob Röhrl <jakob.roehrl@web.de>
2019-01-25 09:17:38 +01:00
Nextcloud bot
1ba7f8b56f [tx-robot] updated from transifex 2019-01-25 01:19:17 +00:00
Nextcloud bot
f6afd3d22c [tx-robot] updated from transifex 2019-01-24 01:19:23 +00:00
Nextcloud bot
87da9db877 [tx-robot] updated from transifex 2019-01-22 01:19:20 +00:00
dependabot[bot]
cb3df9fc7b Bump angular from 1.7.5 to 1.7.6 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.5 to 1.7.6.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.5...v1.7.6)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-21 09:06:55 +00:00
Julius Härtl
5a17b2c10f Merge pull request #853 from nextcloud/dependabot/npm_and_yarn/js/angular-sanitize-1.7.6
Bump angular-sanitize from 1.7.5 to 1.7.6 in /js
2019-01-21 10:05:26 +01:00
Julius Härtl
2afec002b1 Merge pull request #851 from nextcloud/dependabot/npm_and_yarn/js/angular-animate-1.7.6
Bump angular-animate from 1.7.5 to 1.7.6 in /js
2019-01-21 10:04:50 +01:00
Nextcloud bot
2355e5eb2f [tx-robot] updated from transifex 2019-01-21 01:18:17 +00:00
Nextcloud bot
139b38ca1d [tx-robot] updated from transifex 2019-01-19 01:19:11 +00:00
dependabot[bot]
64971d866d Bump angular-sanitize from 1.7.5 to 1.7.6 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.5 to 1.7.6.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.5...v1.7.6)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-18 14:49:05 +00:00
dependabot[bot]
98ad7b04bd Bump angular-animate from 1.7.5 to 1.7.6 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.5 to 1.7.6.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.5...v1.7.6)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-18 14:48:21 +00:00
Nextcloud bot
8c9335bebf [tx-robot] updated from transifex 2019-01-18 01:21:45 +00:00
Nextcloud bot
f7cb1356f9 [tx-robot] updated from transifex 2019-01-17 01:19:24 +00:00
Nextcloud bot
a6a4ff07af [tx-robot] updated from transifex 2019-01-15 01:19:51 +00:00
Julius Härtl
63aa96068a Merge pull request #843 from nextcloud/dependabot/npm_and_yarn/js/@uirouter/angularjs-1.0.21
Bump @uirouter/angularjs from 1.0.20 to 1.0.21 in /js
2019-01-14 19:40:23 +01:00
Julius Härtl
60dcdd7ee7 Merge pull request #842 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.28.4
Bump webpack from 4.28.3 to 4.28.4 in /js
2019-01-14 19:40:02 +01:00
Nextcloud bot
d9d070ebe3 [tx-robot] updated from transifex 2019-01-13 01:20:16 +00:00
dependabot[bot]
e22c494b84 Bump @uirouter/angularjs from 1.0.20 to 1.0.21 in /js
Bumps [@uirouter/angularjs](https://github.com/angular-ui/ui-router) from 1.0.20 to 1.0.21.
- [Release notes](https://github.com/angular-ui/ui-router/releases)
- [Changelog](https://github.com/angular-ui/ui-router/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular-ui/ui-router/compare/1.0.20...1.0.21)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-12 02:13:17 +00:00
dependabot[bot]
66e217f7e2 Bump webpack from 4.28.3 to 4.28.4 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.28.3 to 4.28.4.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.28.3...v4.28.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-12 02:12:48 +00:00
Nextcloud bot
c7bbeda3ad [tx-robot] updated from transifex 2019-01-12 01:18:31 +00:00
Nextcloud bot
a12bd23ffa [tx-robot] updated from transifex 2019-01-11 01:19:11 +00:00
Julius Härtl
e65140bcbb Merge pull request #838 from nextcloud/dependabot/npm_and_yarn/js/webpack-cli-3.2.0
Bump webpack-cli from 3.1.2 to 3.2.0 in /js
2019-01-07 10:45:16 +01:00
dependabot[bot]
fe13d562b2 Bump webpack-cli from 3.1.2 to 3.2.0 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.1.2 to 3.2.0.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-07 08:27:34 +00:00
Julius Härtl
b1832cc925 Merge pull request #836 from nextcloud/dependabot/npm_and_yarn/js/babel-loader-8.0.5
Bump babel-loader from 8.0.4 to 8.0.5 in /js
2019-01-07 09:24:42 +01:00
Julius Härtl
db87547a7d Merge pull request #837 from nextcloud/dependabot/npm_and_yarn/js/webpack-merge-4.2.1
Bump webpack-merge from 4.1.5 to 4.2.1 in /js
2019-01-07 09:24:22 +01:00
dependabot[bot]
c96a3c2ba7 Bump webpack-merge from 4.1.5 to 4.2.1 in /js
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 4.1.5 to 4.2.1.
- [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/v4.1.5...v4.2.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-06 15:17:41 +00:00
dependabot[bot]
3808dc3430 Bump babel-loader from 8.0.4 to 8.0.5 in /js
Bumps [babel-loader](https://github.com/babel/babel-loader) from 8.0.4 to 8.0.5.
- [Release notes](https://github.com/babel/babel-loader/releases)
- [Changelog](https://github.com/babel/babel-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel-loader/compare/v8.0.4...v8.0.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-06 15:16:39 +00:00
Nextcloud bot
722b52f168 [tx-robot] updated from transifex 2019-01-05 01:18:20 +00:00
Nextcloud bot
8f2e5366a1 [tx-robot] updated from transifex 2019-01-03 01:18:16 +00:00
Julius Härtl
2b2c6771e8 Merge pull request #831 from nextcloud/dependabot/npm_and_yarn/js/css-loader-2.1.0
Bump css-loader from 2.0.2 to 2.1.0 in /js
2019-01-02 17:56:01 +01:00
dependabot[bot]
f5c1152eb0 Bump css-loader from 2.0.2 to 2.1.0 in /js
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 2.0.2 to 2.1.0.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v2.0.2...v2.1.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-31 02:23:17 +00:00
Nextcloud bot
7ccfae6f29 [tx-robot] updated from transifex 2018-12-31 01:18:28 +00:00
Nextcloud bot
5187337db7 [tx-robot] updated from transifex 2018-12-30 01:19:33 +00:00
Julius Härtl
872a88c347 Merge pull request #830 from nextcloud/dependabot/npm_and_yarn/js/uglifyjs-webpack-plugin-2.1.1
Bump uglifyjs-webpack-plugin from 2.1.0 to 2.1.1 in /js
2018-12-29 23:38:07 +01:00
dependabot[bot]
5dee524870 Bump uglifyjs-webpack-plugin from 2.1.0 to 2.1.1 in /js
Bumps [uglifyjs-webpack-plugin](https://github.com/webpack-contrib/uglifyjs-webpack-plugin) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/compare/v2.1.0...v2.1.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-29 22:30:13 +00:00
Julius Härtl
720dd4f5e0 Merge pull request #829 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.28.3
Bump webpack from 4.27.1 to 4.28.3 in /js
2018-12-29 23:27:01 +01:00
dependabot[bot]
93cadc6d0a Bump webpack from 4.27.1 to 4.28.3 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.27.1 to 4.28.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.27.1...v4.28.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-29 22:16:34 +00:00
Julius Härtl
19c53eec7b Merge pull request #824 from nextcloud/dependabot/npm_and_yarn/js/@babel/preset-env-7.2.3
Bump @babel/preset-env from 7.2.0 to 7.2.3 in /js
2018-12-29 23:14:05 +01:00
Julius Härtl
e89182e012 Merge pull request #825 from nextcloud/dependabot/npm_and_yarn/js/uglifyjs-webpack-plugin-2.1.0
Bump uglifyjs-webpack-plugin from 2.0.1 to 2.1.0 in /js
2018-12-29 23:13:38 +01:00
Julius Härtl
735bd1e918 Merge pull request #823 from nextcloud/dependabot/npm_and_yarn/js/karma-3.1.4
Bump karma from 3.1.3 to 3.1.4 in /js
2018-12-29 23:13:24 +01:00
Julius Härtl
213789139e Update stale.yml 2018-12-28 15:59:54 +01:00
Nextcloud bot
1302d44c77 [tx-robot] updated from transifex 2018-12-28 01:18:23 +00:00
Nextcloud bot
52c94619ba [tx-robot] updated from transifex 2018-12-27 01:18:45 +00:00
Nextcloud bot
17d73fd8a8 [tx-robot] updated from transifex 2018-12-26 01:18:23 +00:00
Nextcloud bot
e0583c1b22 [tx-robot] updated from transifex 2018-12-25 01:18:15 +00:00
dependabot[bot]
75e49d9fe6 Bump uglifyjs-webpack-plugin from 2.0.1 to 2.1.0 in /js
Bumps [uglifyjs-webpack-plugin](https://github.com/webpack-contrib/uglifyjs-webpack-plugin) from 2.0.1 to 2.1.0.
- [Release notes](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/compare/v2.0.1...v2.1.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-24 08:11:25 +00:00
dependabot[bot]
b2d0f53767 Bump @babel/preset-env from 7.2.0 to 7.2.3 in /js
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.2.0 to 7.2.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.2.0...v7.2.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-24 08:11:03 +00:00
dependabot[bot]
cf80c84fbd Bump karma from 3.1.3 to 3.1.4 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v3.1.3...v3.1.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-24 08:10:25 +00:00
Julius Härtl
cf0c51daf1 Merge pull request #826 from nextcloud/dependabot/npm_and_yarn/js/css-loader-2.0.2
Bump css-loader from 2.0.1 to 2.0.2 in /js
2018-12-24 09:08:23 +01:00
dependabot[bot]
042b9f8c81 Bump css-loader from 2.0.1 to 2.0.2 in /js
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v2.0.1...v2.0.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-24 02:20:16 +00:00
Nextcloud bot
c733b356f6 [tx-robot] updated from transifex 2018-12-24 01:23:45 +00:00
Nextcloud bot
5233f3f4dc [tx-robot] updated from transifex 2018-12-23 01:19:02 +00:00
Julius Härtl
75407d9dc4 Merge pull request #818 from cloud2018/Papercut-translation
make "archived cards" translatable
2018-12-21 10:14:35 +01:00
cloud2018
61786e4d94 make "archived cards" translatable
Signed-off-by: Markus Eckstein <eckstein-markus@gmx.de>
2018-12-20 17:43:18 +01:00
Julius Härtl
2721e51850 Merge pull request #815 from nextcloud/release/0.5.2
Bump version to 0.5.2
2018-12-20 15:28:08 +01:00
Julius Härtl
77708ac5c1 Bump version to 0.5.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 11:50:26 +01:00
Julius Härtl
67677f1dfc Merge pull request #813 from nextcloud/bugfix/768/due-date-notification-archive
Mark notification as read if a card with duedate gets archived
2018-12-20 11:36:36 +01:00
Julius Härtl
03ad5cb040 Merge branch 'master' into bugfix/768/due-date-notification-archive 2018-12-20 11:30:07 +01:00
Julius Härtl
35bec2749c Merge pull request #811 from nextcloud/bugfix/807/edge
Fix edge issues
2018-12-20 11:29:57 +01:00
Julius Härtl
ff21f855ca Merge pull request #812 from nextcloud/bugfix/796/comments-format
Only pass valid subject parameters when commenting
2018-12-20 11:29:37 +01:00
Julius Härtl
5c0455ec56 Only pass valid subject parameters when commenting
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 10:49:07 +01:00
Julius Härtl
8b750b7c7c Mark notification as read if a card with duedate gets archived
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 10:46:48 +01:00
Julius Härtl
1551a8a862 Add empty search text default to avoid filtering issue with undefined value on edge (fixes #807)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 10:19:14 +01:00
Julius Härtl
50a5048fbe Fix drop shadow on edge
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 10:18:44 +01:00
Julius Härtl
cf41665c0a Add stale bot config
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 08:51:23 +01:00
Julius Härtl
02c3131f18 Merge pull request #774 from nextcloud/bugfix/771/rest-types
Fix numeric types and missing card id in card detail results
2018-12-20 08:45:44 +01:00
Julius Härtl
af57c3bf4f Fix If-Modified-Since header parsing
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 08:27:13 +01:00
Julius Härtl
ec42c0c2b4 Fix numeric types and missing card id in card detail results
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-20 08:27:10 +01:00
Nextcloud bot
082346b9e9 [tx-robot] updated from transifex 2018-12-20 01:18:15 +00:00
Julius Härtl
d986dd2beb Merge pull request #784 from nextcloud/dependabot/npm_and_yarn/js/webpack-merge-4.1.5
Bump webpack-merge from 4.1.4 to 4.1.5 in /js
2018-12-18 20:37:45 +01:00
Julius Härtl
68934ca747 Merge pull request #782 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.27.1
Bump webpack from 4.26.1 to 4.27.1 in /js
2018-12-18 20:36:49 +01:00
Julius Härtl
078a008e6c Merge pull request #783 from nextcloud/dependabot/npm_and_yarn/js/mini-css-extract-plugin-0.5.0
Bump mini-css-extract-plugin from 0.4.5 to 0.5.0 in /js
2018-12-18 20:36:35 +01:00
Julius Härtl
553a9b9fc9 Merge pull request #788 from nextcloud/dependabot/npm_and_yarn/js/@babel/preset-env-7.2.0
Bump @babel/preset-env from 7.1.6 to 7.2.0 in /js
2018-12-18 20:36:20 +01:00
Nextcloud bot
f7a8222939 [tx-robot] updated from transifex 2018-12-18 01:17:58 +00:00
dependabot[bot]
c2eb4ed7fa Bump @babel/preset-env from 7.1.6 to 7.2.0 in /js
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.1.6 to 7.2.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.1.6...v7.2.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-17 09:20:00 +00:00
dependabot[bot]
3b11e01cc8 Bump webpack from 4.26.1 to 4.27.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.26.1 to 4.27.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.26.1...v4.27.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-17 09:16:14 +00:00
dependabot[bot]
12c95cfb8f Bump mini-css-extract-plugin from 0.4.5 to 0.5.0 in /js
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.4.5 to 0.5.0.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.4.5...v0.5.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-17 09:16:04 +00:00
Julius Härtl
4498eba6ae Merge pull request #804 from nextcloud/dependabot/npm_and_yarn/js/@babel/core-7.2.2
Bump @babel/core from 7.1.6 to 7.2.2 in /js
2018-12-17 10:13:29 +01:00
Julius Härtl
87b995681f Merge pull request #803 from nextcloud/dependabot/npm_and_yarn/js/css-loader-2.0.1
Bump css-loader from 1.0.1 to 2.0.1 in /js
2018-12-17 10:12:22 +01:00
dependabot[bot]
3ccca3f240 Bump @babel/core from 7.1.6 to 7.2.2 in /js
Bumps [@babel/core](https://github.com/babel/babel) from 7.1.6 to 7.2.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.1.6...v7.2.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-17 02:24:34 +00:00
dependabot[bot]
95a0301ac7 Bump css-loader from 1.0.1 to 2.0.1 in /js
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 1.0.1 to 2.0.1.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v1.0.1...v2.0.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-17 02:24:01 +00:00
Nextcloud bot
cf05a5687d [tx-robot] updated from transifex 2018-12-17 01:18:00 +00:00
Nextcloud bot
4d9f88afba [tx-robot] updated from transifex 2018-12-16 01:19:33 +00:00
Nextcloud bot
fa2453ae80 [tx-robot] updated from transifex 2018-12-15 01:18:04 +00:00
Nextcloud bot
36d28cf6fc [tx-robot] updated from transifex 2018-12-14 01:19:05 +00:00
Nextcloud bot
f1d3bbd95f [tx-robot] updated from transifex 2018-12-13 01:18:37 +00:00
Nextcloud bot
d556484888 [tx-robot] updated from transifex 2018-12-12 01:24:36 +00:00
dependabot[bot]
07857a2309 Bump webpack-merge from 4.1.4 to 4.1.5 in /js
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 4.1.4 to 4.1.5.
- [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/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-10 02:21:16 +00:00
Nextcloud bot
0296b8dd37 [tx-robot] updated from transifex 2018-12-10 01:18:22 +00:00
Nextcloud bot
e56742a065 [tx-robot] updated from transifex 2018-12-09 01:19:00 +00:00
Julius Härtl
c6a701393f Merge pull request #777 from nextcloud/bugfix/775
Make new comment string translatable
2018-12-08 13:42:03 +01:00
Julius Härtl
073eb0e417 Make new comment string translatable
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-08 13:01:28 +01:00
Nextcloud bot
e15f14c21b [tx-robot] updated from transifex 2018-12-08 01:17:45 +00:00
Julius Härtl
0590621182 Merge pull request #773 from nextcloud/bugfix/noid/duedate-activity
Use proper timezone and locale format for due date activities
2018-12-07 23:32:58 +01:00
Julius Härtl
4519b2a052 Merge pull request #770 from nextcloud/bugfix/noid/permission-groups
Check group limit in the proper way
2018-12-07 23:32:41 +01:00
Julius Härtl
1dc68f97c5 Use proper timezone and locale format for due date activities
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-07 16:33:49 +01:00
Julius Härtl
b8d00c8228 Make sure only groups can create if set
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-07 08:27:29 +01:00
Nextcloud bot
81bdbadea1 [tx-robot] updated from transifex 2018-12-07 01:18:22 +00:00
Julius Härtl
6298e0f107 Merge pull request #735 from cloud2018/Papercut-Unify-text-of-activity
Update ActivityManager.php
2018-12-06 10:14:14 +01:00
Nextcloud bot
ea2193a46e [tx-robot] updated from transifex 2018-12-06 01:19:02 +00:00
Julius Härtl
96dffbfedd Merge pull request #764 from nextcloud/release/0.5.1
Release 0.5.1
2018-12-05 19:48:54 +01:00
Julius Härtl
eb590b5a71 Bump version and changelog for 0.5.1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-05 18:51:05 +01:00
Julius Härtl
c2294b6e6f Merge pull request #766 from nextcloud/bugfix/noid/13-groups
Use regular groups endpoint to support Nextcloud 13
2018-12-05 18:50:10 +01:00
Julius Härtl
8906d12a47 Use regular groups endpoint to support Nextcloud 13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-05 18:31:54 +01:00
Julius Härtl
3162ff4261 Merge pull request #765 from nextcloud/bugfix/763/comment-notification
Trigger comment notification on update only
2018-12-05 16:08:31 +01:00
Julius Härtl
57643447d6 Trigger comment notification on update only
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-05 14:01:03 +01:00
Julius Härtl
6b86d8ae30 Merge pull request #709 from nextcloud/enhancement/noid/activity-settings
Add dedicated setting for description change activities
2018-12-05 13:33:18 +01:00
Julius Härtl
4279e09cc2 Fix tests for new setting
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-05 13:22:17 +01:00
Julius Härtl
dd104466d6 Do not expose activity on every autosave
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-05 13:09:43 +01:00
Julius Härtl
43a11327a6 Add dedicated setting for description change activities
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-05 13:09:36 +01:00
Julius Härtl
e1080ffd98 Merge pull request #762 from nextcloud/tests/noid/php7.3
Add drone tests for PHP 7.3
2018-12-05 12:04:22 +01:00
Nextcloud bot
ebc375fe20 [tx-robot] updated from transifex 2018-12-05 01:18:15 +00:00
Julius Härtl
b778420d63 Add drone tests for PHP 7.3
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 15:24:38 +01:00
Julius Härtl
baf7ff9ebf Merge pull request #753 from xf-/task/travisPhp7_3
Travis PHP 7.3 test
2018-12-04 15:21:47 +01:00
Julius Härtl
7733754c2b Merge pull request #761 from nextcloud/bugfix/721/activity-fix
Fix information in activity emails
2018-12-04 13:46:16 +01:00
Julius Härtl
3c1d1d2dd5 Merge pull request #759 from nextcloud/bugfix/716/comments-board-timeline
Do not show comments in board timeline
2018-12-04 13:05:18 +01:00
Julius Härtl
82bc6b2a71 Merge pull request #760 from nextcloud/bugfix/712/search
Use new search API when available
2018-12-04 13:05:09 +01:00
Julius Härtl
e5fe19c107 Fix missing information in activity emails
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 13:04:54 +01:00
Julius Härtl
8499318928 Fix comment activity entry
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 11:42:26 +01:00
Julius Härtl
0dd96e9858 Do not show comments in board timeline
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 11:06:16 +01:00
Julius Härtl
0296dc78f1 Use new search API when available
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 10:36:29 +01:00
Julius Härtl
3b403d5576 Merge pull request #758 from nextcloud/bugfix/noid/group-restrict
Implement group restrictions for creating and sharing
2018-12-04 10:27:16 +01:00
Julius Härtl
f5d7fdf75f Merge pull request #746 from tinko92/master
Added optional classes has-tasks, has-tasks-completed, overdue, now and
2018-12-04 10:02:01 +01:00
Julius Härtl
0528bd59d1 Fix tests for group restrictions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 09:25:35 +01:00
Julius Härtl
7c95783ab5 Add group limit for creating boards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 09:11:50 +01:00
Julius Härtl
bff3cafb37 Check if sharing is disabled for a user via core settings
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 07:51:47 +01:00
Julius Härtl
9e58207392 Use write only permission by default
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-12-04 07:50:53 +01:00
Nextcloud bot
c33b41dcbe [tx-robot] updated from transifex 2018-12-04 01:28:17 +00:00
Julius Härtl
efe2a50a4e Merge pull request #756 from nextcloud/dependabot/npm_and_yarn/js/karma-3.1.3
Bump karma from 3.1.1 to 3.1.3 in /js
2018-12-03 16:26:31 +01:00
dependabot[bot]
cfc3b41471 Bump karma from 3.1.1 to 3.1.3 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 3.1.1 to 3.1.3.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v3.1.1...v3.1.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-03 02:23:57 +00:00
Xaver Maierhofer
cfd67eab95 Travis PHP 7.3 test
Signed-off-by: Xaver Maierhofer <xaver.maierhofer@xwissen.info>
2018-11-30 19:09:03 +01:00
Nextcloud bot
98fa04528d [tx-robot] updated from transifex 2018-11-30 01:18:20 +00:00
Nextcloud bot
20e8ebc26a [tx-robot] updated from transifex 2018-11-28 01:18:36 +00:00
Julius Härtl
405d5585ce Merge pull request #747 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.26.1
Bump webpack from 4.26.0 to 4.26.1 in /js
2018-11-26 11:53:08 +01:00
dependabot[bot]
1fb562d94b Bump webpack from 4.26.0 to 4.26.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.26.0 to 4.26.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.26.0...v4.26.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-26 02:17:52 +00:00
Nextcloud bot
1beff0e760 [tx-robot] updated from transifex 2018-11-26 01:17:34 +00:00
Tinko Bartels
6c6f8ae53f Added optional classes has-tasks, has-tasks-completed, overdue, now and
next to li.card in mainView-template.

Signed-off-by: Tinko Bartels <mail@tinkobartels.de>
2018-11-25 14:45:25 +01:00
Nextcloud bot
ed53de4cf1 [tx-robot] updated from transifex 2018-11-25 01:18:53 +00:00
Nextcloud bot
9f96627435 [tx-robot] updated from transifex 2018-11-24 01:17:37 +00:00
Julius Härtl
b39b7d9629 Merge pull request #726 from nextcloud/bugfix/724
Remove unused activity script
2018-11-23 18:26:28 +01:00
Julius Härtl
2ecba36ba3 Merge pull request #723 from nextcloud/feature-631/remember-side-menu-state
Deck now remembers the side menu state
2018-11-23 15:31:47 +01:00
Julius Härtl
7963f7f7b6 Merge pull request #738 from nextcloud/tests/stable15
Test compatibility with stable15
2018-11-23 15:31:22 +01:00
Julius Härtl
50faa97558 Merge pull request #736 from nextcloud/bugfix/noid/remove-card-parameter-when-its-null
Remove card parameter when it's null
2018-11-23 15:31:04 +01:00
Julius Härtl
135d7741d2 Merge pull request #734 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.26.0
Bump webpack from 4.25.1 to 4.26.0 in /js
2018-11-23 15:30:53 +01:00
dependabot[bot]
2b1e9ba07d Bump webpack from 4.25.1 to 4.26.0 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.25.1 to 4.26.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.25.1...v4.26.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-23 14:15:23 +00:00
Julius Härtl
e121353ac8 Merge pull request #733 from nextcloud/dependabot/npm_and_yarn/js/mini-css-extract-plugin-0.4.5
Bump mini-css-extract-plugin from 0.4.4 to 0.4.5 in /js
2018-11-23 15:13:01 +01:00
Julius Härtl
07442a187a Test compatibility with stable15
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-23 15:06:12 +01:00
Julius Härtl
2c024dedce Remove null board value in activity parameters
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-23 15:04:04 +01:00
cloud2018
c7687382f8 Update ActivityManager.php
Fix: "object" +" title of object"

Additional Conditions for SUBJECT_CARD_UPDATE_DUEDATE Adjusted

Signed-off-by: cloud2018 <eckstein-markus@gmx.de>
2018-11-23 12:44:52 +01:00
Joas Schilling
d28bf74c73 Remove card parameter when it's null
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-11-23 12:30:55 +01:00
Nextcloud bot
223523005d [tx-robot] updated from transifex 2018-11-23 01:30:04 +00:00
dependabot[bot]
c68437e836 Bump mini-css-extract-plugin from 0.4.4 to 0.4.5 in /js
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.4.4 to 0.4.5.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.4.4...v0.4.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-22 19:02:37 +00:00
Julius Härtl
c65a9151ab Merge branch 'master' into feature-631/remember-side-menu-state 2018-11-22 20:01:00 +01:00
Julius Härtl
0b90f09873 Merge branch 'master' into bugfix/724 2018-11-22 20:00:42 +01:00
Julius Härtl
3374f6c908 Merge pull request #727 from nextcloud/bugfix/684/deleted-items
Fix relative timestamp and alignment in deleted items list
2018-11-22 20:00:11 +01:00
Julius Härtl
7bcd313883 Merge pull request #732 from nextcloud/bugfix/noid/ci
Fix CI build
2018-11-22 19:59:54 +01:00
Julius Härtl
76bb42e526 Update packages
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-22 19:50:32 +01:00
Julius Härtl
d4b5f2af57 Merge pull request #731 from cloud2018/remove-duplicate-blanks
Papercut: remove duplicate blanks
2018-11-22 19:40:53 +01:00
cloud2018
1299fcf978 remove duplicate blanks
Signed-off-by: Markus Eckstein <eckstein-markus@gmx.de>

resolves  #729
2018-11-22 18:58:58 +01:00
Julius Härtl
d04f8742a6 Fix relative timestamp and alignment in deleted items list
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-22 18:24:19 +01:00
Julius Härtl
6b8e5f8b76 Remove unused activity script
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-22 18:07:36 +01:00
Nextcloud bot
c429ba5aff [tx-robot] updated from transifex 2018-11-22 01:18:31 +00:00
Michael Weimann
ef36103c47 Deck now remembers the side menu state #631
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2018-11-21 21:17:19 +01:00
Nextcloud bot
82336e82d9 [tx-robot] updated from transifex 2018-11-21 01:18:30 +00:00
Julius Härtl
3baf9500c3 Merge pull request #715 from bpcurse/master
Bugfix for missing dbtableprefix in 'cardChanged' function in /lib/Db…
2018-11-20 10:42:57 +01:00
Nextcloud bot
1dcefc1d57 [tx-robot] updated from transifex 2018-11-20 01:19:17 +00:00
Julius Härtl
66b6d4a09a Fix link to contribution guidelines (fixes #714) 2018-11-19 11:38:04 +01:00
Nextcloud bot
44c1ba62e8 [tx-robot] updated from transifex 2018-11-19 01:18:22 +00:00
Nextcloud bot
590cdba75b [tx-robot] updated from transifex 2018-11-18 01:19:31 +00:00
bpcurse
9786efe490 Bugfix for missing dbtableprefix in 'cardChanged' function in /lib/Db/ChangeHelper.php (68) 2018-11-17 17:29:50 +01:00
Julius Härtl
352851a686 Merge pull request #699 from cloud2018/Papercut-unify-name-of-actions
Papercut: unify name of actions
2018-11-17 10:45:51 +01:00
cloud2018
b4c1d35b52 Papercut: unify name of actions
Signed-off-by: Markus Eckstein <eckstein-markus@gmx.de>

resolves  #691
2018-11-16 10:44:54 +01:00
Julius Härtl
776d79c12b Merge pull request #701 from nextcloud/dependabot/npm_and_yarn/js/@babel/preset-env-7.1.6
Bump @babel/preset-env from 7.1.5 to 7.1.6 in /js
2018-11-15 10:03:42 +01:00
Julius Härtl
291b0ee3c0 Merge pull request #702 from nextcloud/dependabot/npm_and_yarn/js/@babel/core-7.1.6
Bump @babel/core from 7.1.5 to 7.1.6 in /js
2018-11-15 10:03:27 +01:00
Julius Härtl
16c7e409d7 Fix event message
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-15 09:55:18 +01:00
Julius Härtl
6064fe71a0 Bump version to 0.5.0
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-15 09:29:47 +01:00
Nextcloud bot
360f01a07b [tx-robot] updated from transifex 2018-11-15 01:18:44 +00:00
dependabot[bot]
4546337d3e Bump @babel/core from 7.1.5 to 7.1.6 in /js
Bumps [@babel/core](https://github.com/babel/babel) from 7.1.5 to 7.1.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.1.5...v7.1.6)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-14 12:12:02 +00:00
dependabot[bot]
aeae192eaf Bump @babel/preset-env from 7.1.5 to 7.1.6 in /js
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.1.5 to 7.1.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.1.5...v7.1.6)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-14 12:11:21 +00:00
Nextcloud bot
3db56ca93e [tx-robot] updated from transifex 2018-11-13 01:20:17 +00:00
Julius Härtl
c69fc9ec77 Merge pull request #690 from cloud2018/unify-title-icons-more
Papercut: unifiy title icon-more
2018-11-12 14:31:06 +01:00
Julius Härtl
87b56ec111 Bump version to 0.5.0-rc2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-12 14:09:11 +01:00
Julius Härtl
74abc499d8 Merge pull request #693 from nextcloud/dependabot/npm_and_yarn/js/@babel/preset-env-7.1.5
Bump @babel/preset-env from 7.1.0 to 7.1.5 in /js
2018-11-12 14:07:58 +01:00
Julius Härtl
7c04602cc7 Merge pull request #694 from nextcloud/dependabot/npm_and_yarn/js/@babel/core-7.1.5
Bump @babel/core from 7.1.2 to 7.1.5 in /js
2018-11-12 14:07:45 +01:00
Julius Härtl
daed799fa7 Merge pull request #697 from nextcloud/bugfix/noid/noitification-length
Fix issue with comments longer than 64 chars
2018-11-12 13:26:18 +01:00
Julius Härtl
65e192efc3 Merge pull request #695 from nextcloud/bugfix/noid/tabdetails
Fix tab details alignment
2018-11-12 12:56:29 +01:00
Julius Härtl
e1c700878a Fix issue with comments longer than 64 chars
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-12 12:55:11 +01:00
Julius Härtl
81a0c62308 Fix tab details alignment
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-12 10:35:37 +01:00
Nextcloud bot
470538ac91 [tx-robot] updated from transifex 2018-11-12 01:19:13 +00:00
dependabot[bot]
c6e7d621f0 Bump @babel/core from 7.1.2 to 7.1.5 in /js
Bumps [@babel/core](https://github.com/babel/babel) from 7.1.2 to 7.1.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.1.2...v7.1.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-11 20:18:46 +00:00
dependabot[bot]
99ca1ecf8c Bump @babel/preset-env from 7.1.0 to 7.1.5 in /js
Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.1.0 to 7.1.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.1.0...v7.1.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-11 20:18:17 +00:00
Nextcloud bot
4a0398923f [tx-robot] updated from transifex 2018-11-11 01:19:53 +00:00
cloud2018
c7816b5a1f Papercut: unifiy title icon-more
Signed-off-by: Markus Eckstein eckstein-markus@gmx.de
2018-11-10 12:06:00 +01:00
Julius Härtl
6c5f09e1f9 Merge pull request #686 from nextcloud/release/0.5.0-rc1
Release 0.5.0-rc1
2018-11-10 11:16:02 +01:00
Julius Härtl
4aea8817df Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-10 11:11:03 +01:00
Julius Härtl
b4929e1b45 Conditional loading for activity templates
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-10 11:09:20 +01:00
Julius Härtl
a56907862c Fix loading and activity warning
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-10 11:04:15 +01:00
Julius Härtl
24db3fbdc9 Add dependencies to info.xml
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-10 10:54:05 +01:00
Julius Härtl
9cf30dc77b Merge pull request #681 from nextcloud/design-fixes
Design fixes
2018-11-10 10:49:08 +01:00
Julius Härtl
b42c80b464 Fix assign user click target
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-10 10:43:12 +01:00
Julius Härtl
8dd310cee2 Fix datepicker on 13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-10 10:42:32 +01:00
Julius Härtl
4d1e6100db Bump version to 0.5.0-rc1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-10 09:56:16 +01:00
Nextcloud bot
dc5eb9e815 [tx-robot] updated from transifex 2018-11-10 01:19:05 +00:00
Julius Härtl
e1b5efcd79 Fix card highlight state
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 17:29:08 +01:00
Julius Härtl
644c64aa4b Fix diff of large descriptions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 17:21:36 +01:00
Julius Härtl
3c706c8009 Fix eslint
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 17:00:41 +01:00
Julius Härtl
7234050447 Set min height for markdown area (fixes #655)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:52:39 +01:00
Julius Härtl
6a7ceee75f Fix table rendering in markdown (fixes #363)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:47:41 +01:00
Julius Härtl
7d64784dc4 Fix tab headers on 15
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:43:19 +01:00
Julius Härtl
21b7f08e18 Move activity template overriding to the constructor
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:43:19 +01:00
Julius Härtl
47fc2eb20d Fix css variable usage on Nextcloud 13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:43:19 +01:00
Julius Härtl
fc5cabedd0 Fix design issues on 15
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:43:19 +01:00
Julius Härtl
b60abba6e4 Clear deleted stack/card list after switch (fixes #683)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:42:04 +01:00
Julius Härtl
5371a02653 Merge pull request #680 from nextcloud/bugfix/noid/activity-plain-subject
Replace subject parameters in plain subject string as well
2018-11-09 16:03:46 +01:00
Julius Härtl
a6da1ded25 13: force app sidebar on top (fixes #575)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 16:01:45 +01:00
Julius Härtl
4e5f4df29a Properly trigger checkbox toggle on label click only
fixes #577

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 15:49:06 +01:00
Julius Härtl
2b74da9d30 Replace subject parameters in plain subject string as well
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 15:36:18 +01:00
Julius Härtl
924d4bd01f Merge pull request #642 from nextcloud/bugfix/noid/checkboxes
Checkbox fixes
2018-11-09 14:45:04 +01:00
Julius Härtl
a8173b045d Merge pull request #682 from nextcloud/bugfix/621
Only call fclose if resource is still available
2018-11-09 12:40:07 +01:00
Julius Härtl
71e6ff1b79 Make checkbox id order ascending (fixes #678)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 12:39:12 +01:00
Julius Härtl
2bd77fd2ce Fix checkbox matching
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-09 12:38:50 +01:00
Julius Härtl
aee5fb7a98 Only call fclose if resource is still available
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-08 18:55:48 +01:00
Julius Härtl
733f17d59a Merge pull request #675 from nextcloud/activity-15
Fix activity view on 15
2018-11-08 18:32:12 +01:00
Julius Härtl
785bc08d7f Fix activity view on 15
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:55:17 +01:00
Julius Härtl
7cb5045dff Update README.md 2018-11-06 19:53:53 +01:00
Julius Härtl
2b0954951d Merge pull request #676 from nextcloud/fix-duplicate-register
Do not call register for comment entities twice
2018-11-06 19:45:42 +01:00
Julius Härtl
ad1e0c91ec Merge pull request #677 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.25.1
Bump webpack from 4.24.0 to 4.25.1 in /js
2018-11-06 19:44:55 +01:00
Julius Härtl
9cf30bf5fd Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:44:29 +01:00
Julius Härtl
a22c152bd7 Merge pull request #648 from nextcloud/documentation
Documentation
2018-11-06 19:43:17 +01:00
Julius Härtl
ec1faad4ab Add note about bad request response
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:41:44 +01:00
Julius Härtl
35991b7448 Add data examples to the docs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:39:09 +01:00
Julius Härtl
89cb797250 More api docs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:08:55 +01:00
Julius Härtl
26ab4a950d Add database structure docs
thanks to @desperateCoder for drawing an er diagram

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:08:55 +01:00
Julius Härtl
31273a31b7 Fix typo
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:08:55 +01:00
Julius Härtl
c83952ad00 Use config for old mkdocs version of readthedocs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:08:54 +01:00
Julius Härtl
31cf89d874 Restructure docs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:08:54 +01:00
Julius Härtl
b494e9e1b0 Change level of api docs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:08:54 +01:00
Julius Härtl
fdd248b7d5 Add documentation with list of API endpoints
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-06 19:08:52 +01:00
dependabot[bot]
580bff4643 Bump webpack from 4.24.0 to 4.25.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.24.0 to 4.25.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.24.0...v4.25.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-06 16:49:27 +00:00
Nextcloud bot
f1c19023e8 [tx-robot] updated from transifex 2018-11-06 01:19:26 +00:00
Julius Härtl
927b96219c Merge pull request #665 from nextcloud/enhancement/659
Implement modification changes for REST API
2018-11-05 15:07:35 +01:00
Julius Härtl
2673bada6a Update stack lastModified as well
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-05 14:56:36 +01:00
Julius Härtl
a026ebf094 Add change database helper
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-05 14:53:01 +01:00
Julius Härtl
d830c5006c 0.5 will support 15 as well
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-05 14:36:17 +01:00
Julius Härtl
d74138837e Do not call register for comment entities twice
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-05 14:33:44 +01:00
Julius Härtl
413875b697 Merge pull request #673 from nextcloud/dependabot/npm_and_yarn/js/node-sass-4.10.0
Bump node-sass from 4.9.4 to 4.10.0 in /js
2018-11-05 13:45:31 +01:00
Julius Härtl
a068d6e1c6 Add last_modified to board/stack database and add check on index methods
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-05 13:23:26 +01:00
dependabot[bot]
25f543d3ad Bump node-sass from 4.9.4 to 4.10.0 in /js
Bumps [node-sass](https://github.com/sass/node-sass) from 4.9.4 to 4.10.0.
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/node-sass/compare/v4.9.4...v4.10.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-05 12:19:25 +00:00
Julius Härtl
38bc02c07e Merge pull request #672 from nextcloud/dependabot/npm_and_yarn/js/css-loader-1.0.1
Bump css-loader from 1.0.0 to 1.0.1 in /js
2018-11-05 13:17:42 +01:00
Julius Härtl
2921a07f29 Merge pull request #671 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.24.0
Bump webpack from 4.23.1 to 4.24.0 in /js
2018-11-05 13:17:30 +01:00
dependabot[bot]
0c8e6d0e60 Bump css-loader from 1.0.0 to 1.0.1 in /js
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v1.0.0...v1.0.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-05 01:22:07 +00:00
dependabot[bot]
ac7fda0e5a Bump webpack from 4.23.1 to 4.24.0 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.23.1 to 4.24.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.23.1...v4.24.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-11-05 01:21:01 +00:00
Nextcloud bot
e66aa2e988 [tx-robot] updated from transifex 2018-11-05 01:19:10 +00:00
Nextcloud bot
aa0fa5a18d [tx-robot] updated from transifex 2018-11-04 01:21:08 +00:00
Nextcloud bot
68976883cc [tx-robot] updated from transifex 2018-11-02 01:20:30 +00:00
Julius Härtl
d7bc382331 Merge pull request #667 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.23.1
Bump webpack from 4.22.0 to 4.23.1 in /js
2018-10-29 12:40:19 +01:00
Julius Härtl
b38ef8fab0 Merge pull request #666 from nextcloud/dependabot/npm_and_yarn/js/karma-3.1.1
Bump karma from 3.1.0 to 3.1.1 in /js
2018-10-29 12:40:10 +01:00
dependabot[bot]
bdca96c460 Bump webpack from 4.22.0 to 4.23.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.22.0 to 4.23.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.22.0...v4.23.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-29 01:16:17 +00:00
dependabot[bot]
8dd2d88ff2 Bump karma from 3.1.0 to 3.1.1 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v3.1.0...v3.1.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-29 01:15:31 +00:00
Nextcloud bot
280d97c40c [tx-robot] updated from transifex 2018-10-27 00:19:07 +00:00
Nextcloud bot
771e8e7db3 [tx-robot] updated from transifex 2018-10-26 00:19:28 +00:00
Julius Härtl
ef4235bbdc Merge pull request #651 from nextcloud/bugfix/csp
Fix webpack build with new CSP on 15
2018-10-25 16:05:31 +02:00
Julius Härtl
513147c18a Merge pull request #643 from nextcloud/bugfix/noid/style-accessibility
General styling and accessibility fixes
2018-10-25 14:44:04 +02:00
Julius Härtl
65c263c7d8 Merge pull request #656 from cloud2018/consistent-pop-up
consistent-pop-up
2018-10-25 14:20:46 +02:00
Julius Härtl
32726af9c6 Fix icon inversion
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-25 14:17:10 +02:00
Julius Härtl
b72dca6536 General styling and accessibility fixes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-25 14:00:07 +02:00
Julius Härtl
0a52cdfe6b Fix webpack build with new CSP on 15
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-25 13:38:00 +02:00
Nextcloud bot
bdace3159f [tx-robot] updated from transifex 2018-10-24 00:19:17 +00:00
Julius Härtl
cd69c2fd71 Merge pull request #641 from nextcloud/design/noid/simplify
General design improvements
2018-10-23 09:29:49 +02:00
Julius Härtl
658ab485aa Merge pull request #658 from nextcloud/dependabot/npm_and_yarn/js/node-sass-4.9.4
Bump node-sass from 4.9.3 to 4.9.4 in /js
2018-10-23 09:29:11 +02:00
Julius Härtl
0632551c65 Merge pull request #661 from nextcloud/dependabot/npm_and_yarn/js/karma-3.1.0
Bump karma from 3.0.0 to 3.1.0 in /js
2018-10-23 09:28:12 +02:00
Nextcloud bot
5b385822dc [tx-robot] updated from transifex 2018-10-23 00:13:03 +00:00
dependabot[bot]
5aefdd2302 Bump node-sass from 4.9.3 to 4.9.4 in /js
Bumps [node-sass](https://github.com/sass/node-sass) from 4.9.3 to 4.9.4.
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/node-sass/compare/v4.9.3...v4.9.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-22 21:14:53 +00:00
dependabot[bot]
b691b1a382 Bump karma from 3.0.0 to 3.1.0 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v3.0.0...v3.1.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-22 20:51:44 +00:00
Julius Härtl
d029067849 Merge pull request #657 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.22.0
Bump webpack from 4.20.2 to 4.22.0 in /js
2018-10-22 20:27:35 +02:00
Nextcloud bot
162c47ef60 [tx-robot] updated from transifex 2018-10-22 00:13:05 +00:00
dependabot[bot]
8b626251c1 Bump webpack from 4.20.2 to 4.22.0 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.20.2 to 4.22.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.20.2...v4.22.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-21 11:35:34 +00:00
Nextcloud bot
6aee11ef6f [tx-robot] updated from transifex 2018-10-21 00:13:25 +00:00
Nextcloud bot
1c9774a659 [tx-robot] updated from transifex 2018-10-20 00:12:53 +00:00
cloud2018
f3f75fb1d4 consistent-pop-up
fixes #429 
add delete icon to left pop-ups more (3 dots)
change some blanks to tabs
Signed-off-by: Markus Eckstein <eckstein-markus@gmx.de>
2018-10-19 21:02:59 +02:00
Nextcloud bot
b320ef8818 [tx-robot] updated from transifex 2018-10-19 00:12:52 +00:00
Julius Härtl
33a2c5e403 Merge branch 'master' into design/noid/simplify 2018-10-18 16:27:15 +02:00
Nextcloud bot
dc4245ca11 [tx-robot] updated from transifex 2018-10-18 00:12:42 +00:00
Julius Härtl
4b4f597d3e Merge pull request #653 from nextcloud/bugfix/649
Fix comment mention subject
2018-10-17 11:39:34 +02:00
rakekniven
2a3b4a8e3b Update NotifierTest.php
Fixed tests
2018-10-17 10:57:29 +02:00
Nextcloud bot
8f6e8d9004 [tx-robot] updated from transifex 2018-10-17 00:12:37 +00:00
Julius Härtl
0a4a58cddc Fix comment mention subject
fixes #649

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-16 10:16:30 +02:00
Julius Härtl
c025d1b5fd Add tooltip to sidebar sections
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-16 10:14:06 +02:00
Julius Härtl
5cc65cac6e Remove author since it is availiable in the activity stream (fixes #647)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-16 10:14:06 +02:00
Julius Härtl
e9a320e528 New sidebar layout
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-16 10:14:06 +02:00
Julius Härtl
7500a179c0 Make sidebar a bit cleaner
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-16 10:14:06 +02:00
Nextcloud bot
8bf3aed9a7 [tx-robot] updated from transifex 2018-10-16 00:12:31 +00:00
Julius Härtl
612a65d2e6 Merge pull request #650 from nextcloud/dependabot/npm_and_yarn/js/mini-css-extract-plugin-0.4.4
Bump mini-css-extract-plugin from 0.4.3 to 0.4.4 in /js
2018-10-15 08:56:27 +02:00
dependabot[bot]
0cb3c9c1f8 Bump mini-css-extract-plugin from 0.4.3 to 0.4.4 in /js
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.4.3 to 0.4.4.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.4.3...v0.4.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-15 01:15:53 +00:00
Nextcloud bot
61c9a76c73 [tx-robot] updated from transifex 2018-10-15 00:12:49 +00:00
Nextcloud bot
93d0f9b3b8 [tx-robot] updated from transifex 2018-10-14 00:12:34 +00:00
Nextcloud bot
4e59d386dc [tx-robot] updated from transifex 2018-10-13 00:12:18 +00:00
Nextcloud bot
118fc0b0cc [tx-robot] updated from transifex 2018-10-12 00:12:19 +00:00
Nextcloud bot
4f39b76573 [tx-robot] updated from transifex 2018-10-11 00:11:52 +00:00
Nextcloud bot
80ba6314ee [tx-robot] updated from transifex 2018-10-10 00:19:55 +00:00
Julius Härtl
6f1a0b0aef Merge pull request #638 from nextcloud/release/0.5.0-beta1
v0.5.0-beta1
2018-10-09 21:30:04 +02:00
Julius Härtl
3255b8c4c6 Update description in appinfo
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 20:51:28 +02:00
Julius Härtl
4bd7f4fd39 Fix adding comment when no activity entry is present
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 20:38:08 +02:00
Julius Härtl
8e3fa71a2d Fix comment entity registration
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 19:18:44 +02:00
Julius Härtl
8b161927da Adapt tests for stable branch
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 19:02:55 +02:00
Julius Härtl
b0eee23ef2 Add changelog and set proper max-version
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 19:02:54 +02:00
Julius Härtl
09dc403b0e Bump version to v0.5.0-beta1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 19:02:54 +02:00
Julius Härtl
6754cfe73b Merge pull request #639 from nextcloud/bugfix/noid/comment-compatibility
Bugfix/noid/comment compatibility
2018-10-09 19:01:17 +02:00
Julius Härtl
59e8d9b4cf Add annotation for global variables
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 18:52:52 +02:00
Julius Härtl
d11d033360 Update README.md 2018-10-09 18:13:51 +02:00
Julius Härtl
8cad06f702 Update README.md 2018-10-09 18:06:15 +02:00
Julius Härtl
f0118c0848 Unify deleted entry tabs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 17:50:24 +02:00
Julius Härtl
33dbbd0d62 Fix loading if no comments are available
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 17:41:41 +02:00
Julius Härtl
72fd0fcc9b Fix 13 compatibility issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 17:41:09 +02:00
Julius Härtl
43b5571315 Fix loading of comments type
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 17:40:35 +02:00
Julius Härtl
29756e1e8c Make timeline tab only available if comments/activity apps are enabled
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 17:15:38 +02:00
Julius Härtl
1d777550ed Merge pull request #632 from nextcloud/feature/10/comments
Comments support
2018-10-09 16:44:19 +02:00
Julius Härtl
4779d3ae0c Tests: Comment actrivity parsing
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 14:52:55 +02:00
Julius Härtl
68880fc4be Add test for mention notifications
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 14:47:18 +02:00
Julius Härtl
da0cfdb1dc Add unit tests for comment handling
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:29 +02:00
Julius Härtl
5edb95fc6b Fix codacy issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:29 +02:00
Julius Härtl
27f9707058 Allow submit of comments using shift+enter
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:29 +02:00
Julius Härtl
cb3c083d8b Fix user id in mention notification
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:29 +02:00
Julius Härtl
3a36f7da2f Fix racecondition during loading of comments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:29 +02:00
Julius Härtl
3e8451e1e1 Fix unread comment count
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:28 +02:00
Julius Härtl
5f8c46b146 Fix issue when switching between cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:28 +02:00
Julius Härtl
9363f8667c Add UI feedback for comment deletion
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:28 +02:00
Julius Härtl
dcc3601bd7 Implement editing comments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:28 +02:00
Julius Härtl
46720dc37b Fix jslint errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:28 +02:00
Julius Härtl
691c72d717 Use board users for @-mentioning
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:28 +02:00
Julius Härtl
f66f4e0be0 Send notification on user mention
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:27 +02:00
Julius Härtl
93c3c542e8 Fix styling and proper template rendering
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:27 +02:00
Julius Härtl
97b7bca255 Fix eslint errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:27 +02:00
Julius Härtl
e0ac86ac1f Inject user manager
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:27 +02:00
Julius Härtl
310af37d67 Implement user mentioning in frontend
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:27 +02:00
Julius Härtl
e29efe8935 Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:27 +02:00
Julius Härtl
63a34e7018 Properly inject ICommentsManager
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:26 +02:00
Julius Härtl
ddeefd5bf3 Move contenteditable directive to separate file
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:26 +02:00
Julius Härtl
630a5badf8 Sidebar design improvements
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:26 +02:00
Julius Härtl
f5520d3087 Implement comment deletion and loading indicator
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:26 +02:00
Julius Härtl
e547a5d2b9 Add comment action menu
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:26 +02:00
Julius Härtl
ffd32a803f Enhance activity list with comment data
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:26 +02:00
Julius Härtl
63337c1d26 Add comment event handler for activities
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:25 +02:00
Julius Härtl
2e824f0c80 Add backbone comment classes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:25 +02:00
Julius Härtl
339bc34f9b Add basic comments frontend
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:25 +02:00
Julius Härtl
41db5d0024 Load comments entity for app
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:25 +02:00
Julius Härtl
d3027acd37 Add backend support for comments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 13:08:25 +02:00
Julius Härtl
10c09927e2 Merge pull request #630 from nextcloud/dependabot/npm_and_yarn/js/babel-loader-8.0.4
Bump babel-loader from 7.1.5 to 8.0.4 in /js
2018-10-09 13:07:19 +02:00
Julius Härtl
014e7e4cbe Merge pull request #611 from nextcloud/bug/589/empty-titles
Don't allow empty card titles
2018-10-09 12:22:50 +02:00
Julius Härtl
884de2b4f2 Merge pull request #609 from nextcloud/feature/195/print-css
Printing CSS styles
2018-10-09 12:21:40 +02:00
Julius Härtl
a5a836450e Bump babel to 7.x.x
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 11:55:00 +02:00
Julius Härtl
da2e3add9d Adjust print css
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 11:43:20 +02:00
Dubidubiduu
e9a505f273 add import print.scss
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 11:34:08 +02:00
Dubidubiduu
8ec4a8e2bb add print file
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-10-09 11:34:08 +02:00
Michael Weimann
a02bd5ab52 Implements a validation for empty titles input in the card directly
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2018-10-09 11:28:19 +02:00
Michael Weimann
df43e07057 Implements a validation for empty titles input at the side bar
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2018-10-09 11:28:19 +02:00
Michael Weimann
d17cd78605 Implements validation when adding new cards
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2018-10-09 11:28:16 +02:00
dependabot[bot]
fe6caf094b Bump babel-loader from 7.1.5 to 8.0.4 in /js
Bumps [babel-loader](https://github.com/babel/babel-loader) from 7.1.5 to 8.0.4.
- [Release notes](https://github.com/babel/babel-loader/releases)
- [Changelog](https://github.com/babel/babel-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel-loader/compare/v7.1.5...v8.0.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-08 12:04:47 +00:00
Julius Härtl
84969180e2 Merge pull request #635 from nextcloud/dependabot/npm_and_yarn/js/angular-1.7.5
Bump angular from 1.7.4 to 1.7.5 in /js
2018-10-08 14:03:06 +02:00
dependabot[bot]
7008745395 Bump angular from 1.7.4 to 1.7.5 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.4 to 1.7.5.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.4...v1.7.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-08 09:14:47 +00:00
Julius Härtl
34d5f05821 Merge pull request #636 from nextcloud/dependabot/npm_and_yarn/js/angular-animate-1.7.5
Bump angular-animate from 1.7.4 to 1.7.5 in /js
2018-10-08 11:12:36 +02:00
Julius Härtl
b96038c049 Merge pull request #637 from nextcloud/dependabot/npm_and_yarn/js/angular-sanitize-1.7.5
Bump angular-sanitize from 1.7.4 to 1.7.5 in /js
2018-10-08 11:12:20 +02:00
dependabot[bot]
0d21df347b Bump angular-sanitize from 1.7.4 to 1.7.5 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.4 to 1.7.5.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.4...v1.7.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-08 01:16:25 +00:00
dependabot[bot]
f865149d35 Bump angular-animate from 1.7.4 to 1.7.5 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.4 to 1.7.5.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.4...v1.7.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-08 01:15:59 +00:00
Nextcloud bot
5898428fb9 [tx-robot] updated from transifex 2018-10-05 00:19:46 +00:00
Julius Härtl
792b05dfdf Merge pull request #628 from nextcloud/dependabot/npm_and_yarn/js/webpack-cli-3.1.2
Bump webpack-cli from 3.1.0 to 3.1.2 in /js
2018-10-01 14:19:29 +02:00
Julius Härtl
08b6274131 Merge pull request #613 from nextcloud/dependabot/npm_and_yarn/js/angular-1.7.4
Bump angular from 1.7.3 to 1.7.4 in /js
2018-10-01 14:18:52 +02:00
dependabot[bot]
d8db1c9019 Bump webpack-cli from 3.1.0 to 3.1.2 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/commits/v3.1.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-01 11:58:30 +00:00
dependabot[bot]
f089c552e0 Bump angular from 1.7.3 to 1.7.4 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.3 to 1.7.4.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.3...v1.7.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-01 11:57:42 +00:00
Julius Härtl
61978088fc Merge pull request #626 from nextcloud/dependabot/npm_and_yarn/js/mini-css-extract-plugin-0.4.3
Bump mini-css-extract-plugin from 0.4.2 to 0.4.3 in /js
2018-10-01 13:56:19 +02:00
Julius Härtl
a9d7095354 Merge pull request #616 from nextcloud/dependabot/npm_and_yarn/js/angular-sanitize-1.7.4
Bump angular-sanitize from 1.7.3 to 1.7.4 in /js
2018-10-01 13:56:09 +02:00
Julius Härtl
353fd792a4 Merge pull request #615 from nextcloud/dependabot/npm_and_yarn/js/angular-animate-1.7.4
Bump angular-animate from 1.7.3 to 1.7.4 in /js
2018-10-01 13:55:47 +02:00
dependabot[bot]
e7d535e0c0 Bump mini-css-extract-plugin from 0.4.2 to 0.4.3 in /js
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.4.2 to 0.4.3.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.4.2...v0.4.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-01 10:43:19 +00:00
dependabot[bot]
dc756991ae Bump angular-sanitize from 1.7.3 to 1.7.4 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.3 to 1.7.4.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.3...v1.7.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-01 10:40:59 +00:00
dependabot[bot]
7529cfb892 Bump angular-animate from 1.7.3 to 1.7.4 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.3 to 1.7.4.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.3...v1.7.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-10-01 10:28:46 +00:00
Julius Härtl
08485b0381 Merge pull request #623 from nextcloud/dependabot/composer/christophwurst/nextcloud-tw-14.0
Update christophwurst/nextcloud requirement from ^13.0 to ^14.0
2018-10-01 12:22:17 +02:00
Julius Härtl
1283c41283 Merge pull request #629 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.20.2
Bump webpack from 4.17.1 to 4.20.2 in /js
2018-10-01 12:21:49 +02:00
dependabot[bot]
774809a3a8 Bump webpack from 4.17.1 to 4.20.2 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.17.1 to 4.20.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.17.1...v4.20.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-09-30 08:31:22 +00:00
Nextcloud bot
5a0227a339 [tx-robot] updated from transifex 2018-09-29 00:17:55 +00:00
Nextcloud bot
3cb0e8fc2d [tx-robot] updated from transifex 2018-09-28 00:13:12 +00:00
Nextcloud bot
7026c2ca88 [tx-robot] updated from transifex 2018-09-26 00:18:56 +00:00
Nextcloud bot
ed5d57d474 [tx-robot] updated from transifex 2018-09-25 00:19:35 +00:00
dependabot[bot]
61ead7dc66 Update christophwurst/nextcloud requirement from ^13.0 to ^14.0
Updates the requirements on [christophwurst/nextcloud](https://github.com/ChristophWurst/nextcloud_composer) to permit the latest version.
- [Release notes](https://github.com/ChristophWurst/nextcloud_composer/releases)
- [Commits](https://github.com/ChristophWurst/nextcloud_composer/commits/14.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-09-24 01:12:38 +00:00
Nextcloud bot
1bb185c8f0 [tx-robot] updated from transifex 2018-09-24 00:19:07 +00:00
Nextcloud bot
0ea5a5b7d6 [tx-robot] updated from transifex 2018-09-23 00:19:40 +00:00
Nextcloud bot
9f8533b96c [tx-robot] updated from transifex 2018-09-22 00:19:14 +00:00
Nextcloud bot
4fd8add19c [tx-robot] updated from transifex 2018-09-21 00:19:44 +00:00
Nextcloud bot
cf8926952a [tx-robot] updated from transifex 2018-09-20 00:19:49 +00:00
Nextcloud bot
47fe8913c4 [tx-robot] updated from transifex 2018-09-18 00:19:08 +00:00
Nextcloud bot
bdd07ec31e [tx-robot] updated from transifex 2018-09-17 00:19:41 +00:00
Nextcloud bot
4fbbb6aa79 [tx-robot] updated from transifex 2018-09-16 00:19:36 +00:00
Nextcloud bot
57193181d1 [tx-robot] updated from transifex 2018-09-15 00:18:54 +00:00
Nextcloud bot
cbbeb394c1 [tx-robot] updated from transifex 2018-09-14 00:19:36 +00:00
Nextcloud bot
1174b8f7ca [tx-robot] updated from transifex 2018-09-13 00:19:12 +00:00
Nextcloud bot
cca9390555 [tx-robot] updated from transifex 2018-09-12 00:18:47 +00:00
Nextcloud bot
b9531ce684 [tx-robot] updated from transifex 2018-09-09 00:20:35 +00:00
Nextcloud bot
e0decdf55e [tx-robot] updated from transifex 2018-09-08 00:19:34 +00:00
Julius Härtl
f5691e6d7f Merge pull request #607 from nextcloud/feature/211/activity
Activity integration
2018-09-07 16:18:39 +02:00
Julius Härtl
b979e37ad6 Fix deps in Makefile
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-07 16:12:23 +02:00
Julius Härtl
41f254af74 Run composer on build
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-07 15:36:14 +02:00
Julius Härtl
d95a8e8975 Do not run apply after $http promise resolve
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-07 15:21:53 +02:00
Julius Härtl
28f58ee5f3 Fix activity rendering in the sidebar
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-07 15:04:42 +02:00
Julius Härtl
df4f8dda60 Frontend code cleanup
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-07 13:18:59 +02:00
Julius Härtl
4441075f49 Add tests for param parsing
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-07 12:53:58 +02:00
Julius Härtl
56f9b5b6e6 Code cleanup
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-07 08:51:52 +02:00
Julius Härtl
f686b1e75b Activity: trigger activity on board share/unshare
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 21:09:21 +02:00
Julius Härtl
7e88d246c0 Tests: Add tests for ActivityManager
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 20:01:26 +02:00
Julius Härtl
80aadb2717 Tests: More coverage for DeckProvider->parse()
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 15:05:35 +02:00
Julius Härtl
0cc4fffd08 Add tests for activity classes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 13:19:54 +02:00
Julius Härtl
4ba47045b2 Run composer on travis as well
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:14:57 +02:00
Julius Härtl
a6dceb2e64 Fix eslint errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:03 +02:00
Julius Härtl
eea5803ae5 Fix existing service tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:03 +02:00
Julius Härtl
e06a5ad44f Use proper trigger methods for activities
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:03 +02:00
Julius Härtl
f8f36dac09 Run composer install before on drone tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:03 +02:00
Julius Härtl
4c300bf432 Adjust tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:02 +02:00
Julius Härtl
2d545aafa5 Fix service update methods
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:02 +02:00
Julius Härtl
8d384c7c5c Fix some styling issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:02 +02:00
Julius Härtl
790ea6ff63 Fix info.xml order
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:02 +02:00
Julius Härtl
bc15b48ea2 Properly fetch activities for board and fix refresh of lists
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:02 +02:00
Julius Härtl
3319f9c3b3 Add activity list to sidebars
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:02 +02:00
Julius Härtl
18f92f7b54 Implement remaining activity types
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:01 +02:00
Julius Härtl
b5cf3709c2 Emit activity events in StackService
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:01 +02:00
Julius Härtl
df8c1984ca Emit activity events in CardService
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:01 +02:00
Julius Härtl
c32ab5648c Emit activity events in BoardService
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:01 +02:00
Julius Härtl
6a5b4fe40c WIP: Activity integration
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 10:05:01 +02:00
Julius Härtl
0ee0a5840b Merge pull request #608 from nextcloud/tests/stable14
Adjust tests for stable14 / 15 on master
2018-09-06 10:04:26 +02:00
Julius Härtl
6f883d1417 Set max-version to 15 for development
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 09:57:43 +02:00
Julius Härtl
8e974111ba Add app compatibility check for 14
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-09-06 09:57:22 +02:00
Nextcloud bot
45ee875646 [tx-robot] updated from transifex 2018-09-06 00:19:57 +00:00
Nextcloud bot
1877340cd3 [tx-robot] updated from transifex 2018-09-01 00:18:36 +00:00
Nextcloud bot
bcebec10bc [tx-robot] updated from transifex 2018-08-31 00:18:30 +00:00
Nextcloud bot
dfbe15319c [tx-robot] updated from transifex 2018-08-30 00:18:08 +00:00
Julius Härtl
33764f645b Merge pull request #602 from nextcloud/feature/587/compact-mode
Adds the compact mode
2018-08-29 17:47:35 +02:00
Michael Weimann
b20ea4dea1 Stores the compact mode state in the local storage
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2018-08-29 17:34:42 +02:00
Michael Weimann
e53c623759 Implements the compact toggle
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2018-08-29 16:04:59 +02:00
Nextcloud bot
2c12a99020 [tx-robot] updated from transifex 2018-08-28 00:19:16 +00:00
Julius Härtl
a4105d22dc Merge pull request #600 from nextcloud/dependabot/npm_and_yarn/js/mini-css-extract-plugin-0.4.2
Bump mini-css-extract-plugin from 0.4.1 to 0.4.2 in /js
2018-08-27 15:23:49 +02:00
dependabot[bot]
c7a058e575 Bump mini-css-extract-plugin from 0.4.1 to 0.4.2 in /js
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.4.1 to 0.4.2.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.4.1...v0.4.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-27 12:18:48 +00:00
Julius Härtl
b603c31398 Merge pull request #599 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.17.1
Bump webpack from 4.16.5 to 4.17.1 in /js
2018-08-27 14:16:41 +02:00
dependabot[bot]
f650e52f6a Bump webpack from 4.16.5 to 4.17.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.16.5 to 4.17.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.16.5...v4.17.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-27 01:16:16 +00:00
Nextcloud bot
07ea4a1b4f [tx-robot] updated from transifex 2018-08-27 00:18:42 +00:00
Julius Härtl
a5ae5b3e26 Merge pull request #596 from willianveiga/feature/due-date-input-use-local-date-format
Due date input uses user's local date format
2018-08-26 16:19:46 +02:00
Julius Härtl
adf9e057b4 Merge pull request #597 from nextcloud/acc_workshop
Fix some small accessibility issues
2018-08-26 16:12:50 +02:00
Tobia De Koninck
c432f89424 Fix some small accessibility issues
Signed-off-by: Tobia De Koninck <LEDfan@users.noreply.github.com>
2018-08-26 12:00:14 +02:00
Nextcloud bot
410654b766 [tx-robot] updated from transifex 2018-08-26 00:19:15 +00:00
Willian Gustavo Veiga
9e49064847 Use tabs instead of spaces
Signed-off-by: Willian Gustavo Veiga <beberveiga@gmail.com>
2018-08-25 12:36:23 -03:00
Willian Gustavo Veiga
f8239f4e8a Due date input uses user's local date format
Signed-off-by: Willian Gustavo Veiga <beberveiga@gmail.com>
2018-08-25 11:57:56 -03:00
Nextcloud bot
b3b16f8fbd [tx-robot] updated from transifex 2018-08-25 00:18:54 +00:00
Julius Härtl
939f5fa621 Merge pull request #592 from nextcloud/251-card-title-inline
editable inline card titles
2018-08-24 15:57:25 +02:00
Ryan Fletcher
d17d0ec16f removing whitespaces
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-24 14:56:37 +02:00
Julius Härtl
f1ebe01e5e Fix inline input sizing for card title edit
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-24 14:56:37 +02:00
Ryan Fletcher
1949dae8d4 attempt at solving css "jumps" on inline edits.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-24 14:56:37 +02:00
Ryan Fletcher
7c6d36fde1 Added class input-inline
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-24 14:56:36 +02:00
Ryan Fletcher
5fd8ff003b editable inline card titles
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-24 14:56:36 +02:00
Julius Härtl
abb5290baa Merge pull request #593 from nextcloud/250-emptycontent-views
#250-emptycontent-views
2018-08-23 13:47:14 +02:00
Ryan Fletcher
fd7dd9c3b4 cleaning up whitespace / unused css style.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-23 07:10:17 -04:00
Nextcloud bot
4a4c787de2 [tx-robot] updated from transifex 2018-08-22 00:18:37 +00:00
Ryan Fletcher
6fb4525754 sending strings through translation code.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-21 17:25:09 -04:00
Ryan Fletcher
001609982d adjusting solution based on standards shown to me by jancborchardt
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-21 17:11:47 -04:00
Ryan Fletcher
9353e4852c Added empty message to board list when there are no boards present.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-21 14:35:03 -04:00
Nextcloud bot
eb29baef4b [tx-robot] updated from transifex 2018-08-21 00:18:50 +00:00
Nextcloud bot
031d20199e [tx-robot] updated from transifex 2018-08-18 00:19:12 +00:00
Nextcloud bot
adf0b7b68b [tx-robot] updated from transifex 2018-08-17 00:18:31 +00:00
Nextcloud bot
7296302af2 [tx-robot] updated from transifex 2018-08-16 00:18:57 +00:00
Julius Härtl
f040df785d Merge pull request #535 from nextcloud/feature/83/json-api
REST API
2018-08-15 21:21:25 +02:00
Julius Härtl
5639bd1274 Fix controller deleted at parameter
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:23 +02:00
Julius Härtl
babfcbddd8 Fix imports
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:23 +02:00
Julius Härtl
0c9b1f5338 Mapper can be null if provided id is a board id
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:23 +02:00
Julius Härtl
81d333243d Fix comparison
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:23 +02:00
Julius Härtl
47a7e76a4d Catch DoesNotExistException to return proper API repsonses
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:23 +02:00
Ryan Fletcher
4391bf4eb8 added missing BadRequestException checks to StackService.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:22 +02:00
Ryan Fletcher
aba7d02cfe Added BadRequestException checks in DefaultBoardService. Fixed bug in DefaultBoardService BadRequestException checks.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:22 +02:00
Ryan Fletcher
6f5c0a2816 Added in BadRequestException checks in CardService.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:22 +02:00
Ryan Fletcher
e8571454d9 Added BadRequestException checks into BoardService.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:22 +02:00
Ryan Fletcher
7930fec5d7 Added in BadRequestException tests into AttachmentService.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:22 +02:00
Ryan Fletcher
37a2858d5f wrote attachment api controller, fixed bug caught by unit test in CardService
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:22 +02:00
Ryan Fletcher
e88c9a760d Wrote unit tests for AttachmentApiController and stubbed out AttachmentApicontroller. Trying out test driven development.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:21 +02:00
Ryan Fletcher
172a80fa5d Added additional endpoints for cards / stacks
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:21 +02:00
Ryan Fletcher
3e965d0cfb Implemented additional CardApiController endpoints
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:21 +02:00
Ryan Fletcher
72aeb723a5 fixed up missing checks from labelService, BadRequestException is now extending StatusException
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:21 +02:00
Ryan Fletcher
507a7fd243 Code cleanup, removing unused code from older iteration.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:21 +02:00
Ryan Fletcher
184cd00a8b Wrote initial unit tests for LabelApiControllerTest.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:21 +02:00
Ryan Fletcher
9c81584b02 Wrote tests for CardApiControllerTest.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:20 +02:00
Ryan Fletcher
5bc8a363b9 Split Card Update in CardApiController as it was gigantic and broke codacy complexity rules by a lot. Also moved validation checks into respective services.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:20 +02:00
Ryan Fletcher
f1169b9c7e finished writing StackApiControllerTest.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:20 +02:00
Ryan Fletcher
f2268c7f58 Moved Data Response checks into stack serivice, cleaned up related unit tests.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:20 +02:00
Ryan Fletcher
d33dd3e0fc Moved BadRequestException checks to middleware, removed uneeded unit tests in BoardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:20 +02:00
Ryan Fletcher
8cac183af6 simple code style changes according to codacy standards.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:20 +02:00
Ryan Fletcher
570ac81848 added the create tests in StackApiControllerTest
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:19 +02:00
Ryan Fletcher
5719e9f134 Wrote unit tests against StackApiController -> get()
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:19 +02:00
Ryan Fletcher
891fa7b7d5 Created index tests for StackApiTestController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:19 +02:00
Ryan Fletcher
54f110f7c6 first attempt at BoardApiControllerTest->testGetNoPermission()
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:19 +02:00
Julius Härtl
dcfb9f3903 Properly annotate exceptions thrown by services
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:19 +02:00
Julius Härtl
2482dc963a Fix BoardServiceTest
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:18 +02:00
Ryan Fletcher
6d57b1081a BoardApiControllerTest wrote delete tests
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:18 +02:00
Ryan Fletcher
8dd732631a BoardApiController wrote update tests
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:18 +02:00
Ryan Fletcher
1fe70568cb Wrote unit tests for the BoardApiController -> create tests
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:18 +02:00
Ryan Fletcher
bd254fd261 BoardApiControllerTest wrote get() tests.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:18 +02:00
Ryan Fletcher
fad579c4d3 Wrote first unit test for BoardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:18 +02:00
Ryan Fletcher
e8c53d71aa fixed more unit tests.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:17 +02:00
Ryan Fletcher
e0049cf07b Resolved unit tests errors, down from 36 to 9.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:17 +02:00
Ryan Fletcher
881b05aeb1 fixed BoardControllerTest from errors
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:17 +02:00
Ryan Fletcher
cfd9ab98c6 Implemented StackApiController Get Function.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:17 +02:00
Ryan Fletcher
dd1d4246fe Finished Error handling across the API
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:17 +02:00
Ryan Fletcher
2668f6b80c committing WIP (improving error validation across the api's)
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:17 +02:00
Ryan Fletcher
a388d199dc Refactored error handling in StackApiController and moved it into ApiHelper.php, this will allow me to use the same checks in all controllers.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:16 +02:00
Ryan Fletcher
d9f3d492dc Better variable name for stackService in StackApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:16 +02:00
Ryan Fletcher
a14ca3d1f5 Better error handling in StackApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:16 +02:00
Ryan Fletcher
7d9fc83dc9 Code style fixings.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:16 +02:00
Ryan Fletcher
f97c7c3f7b Added in Create + Delete functions to the LabelApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:16 +02:00
Ryan Fletcher
6002067b64 Created LabelApiController and it's get / update methods.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:16 +02:00
Ryan Fletcher
7e4d24236a Updated the CardApiController->update method to allow updating of archive state and assigned user,.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:15 +02:00
Ryan Fletcher
b82591a0bc Added delete operation to CardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:15 +02:00
Ryan Fletcher
e5f7f89ed9 Wrote update method for CardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:15 +02:00
Ryan Fletcher
a68e888654 Started CardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:15 +02:00
Ryan Fletcher
0c0910ee81 Co authored for my changes.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:15 +02:00
Ryan Fletcher
ced87edfa5 Put in validation responses in BoardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:15 +02:00
Ryan Fletcher
5415ec21dc Validation Checking against StackApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:14 +02:00
Ryan Fletcher
3cb496daa2 Cleaned up StackApiController to use proper route parameters, removed route parameters from request payloads as per rest standards.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:14 +02:00
Ryan Fletcher
03e0559afe StackApiController->delete($boardId, $id) added in error handling
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:14 +02:00
Ryan Fletcher
be91ff641c StackApiController added the update put route.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:14 +02:00
Ryan Fletcher
cec06493c0 Error handling for StackApiController->Index()
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:14 +02:00
Ryan Fletcher
0da84a3e8c Corrected comment in BoardApiController from copy / paste.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:14 +02:00
Ryan Fletcher
6822d7d099 Error handling in undelete function and created the update function in BoardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:13 +02:00
Ryan Fletcher
d82746be97 Error handling for undoDelete and created an update method in BoardApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:13 +02:00
Ryan Fletcher
3b49c7f262 Added exception handling to BoardApiController -> Delete
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:13 +02:00
Ryan Fletcher
9bc9569a0d Added checks to see if the entity is not found in BoardApiController -> get($id)
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:13 +02:00
Ryan Fletcher
8771e35f11 Added exception handling to StackApiController->create()
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:13 +02:00
Ryan Fletcher
656e8efa43 quick test in StackApiController
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-08-15 21:15:13 +02:00
Julius Härtl
9fc01eb51f Move DI of IUserManager, IGroupManager, userId to the BoardService
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:12 +02:00
Steven R. Baker
e32adb17f2 Don't need to pass around the userInfo with it encapsulated in BoardService.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:12 +02:00
Steven R. Baker
1ffa3211ba Extract getBoardPererequisites() so it can be re-used.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:11 +02:00
Steven R. Baker
41cf623bb8 This should be 200 on deletion, so we can tell whether a deletion succeeds or not.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:10 +02:00
Steven R. Baker
8ec97032b1 Re-format code according to the coding style.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:08 +02:00
Steven R. Baker
40f34eb3bc Fix the routing and the stacks API endpoint.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:07 +02:00
Steven R. Baker
a4b348488b Add Stack support to API.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:05 +02:00
Steven R. Baker
8316a0b25f Board creation via API.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:04 +02:00
Steven R. Baker
86dde2d6b8 These parens are not needed.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:15:03 +02:00
Steven R. Baker
84a8db7b75 Change the API version to 1.0, and fix the preflighted_cors version.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:14:59 +02:00
Steven R. Baker
975b6f3572 Update the documentation.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 21:14:43 +02:00
Steven R. Baker
b4224dadfb Undo deletion of boards via API.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 20:53:07 +02:00
Steven R. Baker
7dcd49c485 Delete boards via the API.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 20:53:07 +02:00
Steven R. Baker
0c266d4a1f List boards, and fetch a specific board.
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 20:53:07 +02:00
Julius Härtl
a3a70f67b4 Merge pull request #557 from nextcloud/feature/undo-delete-cards-and-stacks
Feature/undo delete cards and stacks
2018-08-15 20:52:01 +02:00
Julius Härtl
43e76ecca3 Bump development version
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-08-15 20:46:58 +02:00
Manuel Arno Korfmann
241a654f28 codacy fix
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:31 +02:00
Manuel Arno Korfmann
94e1b86eaf fixed bugs where labels would dissappear
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:31 +02:00
Manuel Arno Korfmann
4d5353b8d4 renaming and more codacy
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:31 +02:00
Manuel Arno Korfmann
5ddfb66633 Card,Stack undo delete: CardServiceTest fix
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

Stack,Card undo delete: Test Fix 2

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

Card, Stack undo delete: Test fix 3

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

Card,Stack undo delete: Test fix 4

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

Stack, Card undo delete: Relative time in deleted entity listings

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

Card, Stack undo delete: Test Fix 5

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

Test Fix 6

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

Test Fix 7

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

fix codacy

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:31 +02:00
Manuel Arno Korfmann
41d30d4fd4 stack, card undo delete: refactoring
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

stack undo delete: serve cards with deleted and delete actions

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

stack, cards undo delete: codacy

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

card undo delete: 526#discussion_r204501758, refactoring

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

card, stack undo delete: code review fixes #1

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

undo card, stack delete: show deleted stacks name in deleted card listing

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:31 +02:00
Manuel Arno Korfmann
95548fba54 Conditional restoration of deleted stacks on card undo delete
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:30 +02:00
Manuel Arno Korfmann
ef4ce31c47 refactoring and stack undo delete early wip
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

stack soft delete done

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

stack undo delete done

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

stack undo: code review remarks and fixes

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:30 +02:00
Manuel Arno Korfmann
f2795f120b show deleted cards in sidebar tab (styling still wip)
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

card undo delete done, styling still wip

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

fix Codacy findings

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:30 +02:00
Manuel Arno Korfmann
2ef4b55af4 cards soft delete wip
Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

cards: softdelete done; undo delete wip

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

show deleted cards in board settings sidebar wip

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>

CardMapper#findDeleted: fix bug in entity property assigning

Signed-off-by: Manuel Arno Korfmann <manu@korfmann.info>
2018-08-15 20:33:30 +02:00
Julius Härtl
3e4dedf397 Merge pull request #581 from nextcloud/dependabot/npm_and_yarn/js/angular-1.7.3
Bump angular from 1.7.2 to 1.7.3 in /js
2018-08-14 21:38:47 +02:00
dependabot[bot]
ebcb86ff3e Bump angular from 1.7.2 to 1.7.3 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.2 to 1.7.3.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.2...v1.7.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-14 19:32:43 +00:00
Julius Härtl
c0defcab9b Merge pull request #578 from nextcloud/dependabot/npm_and_yarn/js/angular-animate-1.7.3
Bump angular-animate from 1.7.2 to 1.7.3 in /js
2018-08-14 21:30:02 +02:00
Julius Härtl
25f6f16718 Merge pull request #580 from nextcloud/dependabot/npm_and_yarn/js/angular-sanitize-1.7.3
Bump angular-sanitize from 1.7.2 to 1.7.3 in /js
2018-08-14 21:29:50 +02:00
Julius Härtl
34767cdd13 Merge pull request #572 from nextcloud/dependabot/npm_and_yarn/js/webpack-merge-4.1.4
Bump webpack-merge from 4.1.3 to 4.1.4 in /js
2018-08-14 21:29:38 +02:00
Julius Härtl
9975d2b483 Merge pull request #583 from nextcloud/dependabot/npm_and_yarn/js/node-sass-4.9.3
Bump node-sass from 4.9.2 to 4.9.3 in /js
2018-08-14 21:29:28 +02:00
dependabot[bot]
3f77c99544 Bump angular-animate from 1.7.2 to 1.7.3 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.2 to 1.7.3.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.2...v1.7.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-14 19:24:12 +00:00
dependabot[bot]
9eab136f53 Bump webpack-merge from 4.1.3 to 4.1.4 in /js
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 4.1.3 to 4.1.4.
- [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/v4.1.3...v4.1.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-14 19:23:39 +00:00
dependabot[bot]
998d993102 Bump node-sass from 4.9.2 to 4.9.3 in /js
Bumps [node-sass](https://github.com/sass/node-sass) from 4.9.2 to 4.9.3.
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/node-sass/compare/v4.9.2...v4.9.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-14 19:23:18 +00:00
dependabot[bot]
f27d399dfc Bump angular-sanitize from 1.7.2 to 1.7.3 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.2 to 1.7.3.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.2...v1.7.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-14 19:23:13 +00:00
Julius Härtl
a117cc8e0c Merge pull request #579 from nextcloud/dependabot/npm_and_yarn/js/@uirouter/angularjs-1.0.20
Bump @uirouter/angularjs from 1.0.19 to 1.0.20 in /js
2018-08-14 21:21:26 +02:00
dependabot[bot]
2c59a4148d Bump @uirouter/angularjs from 1.0.19 to 1.0.20 in /js
Bumps [@uirouter/angularjs](https://github.com/angular-ui/ui-router) from 1.0.19 to 1.0.20.
- [Release notes](https://github.com/angular-ui/ui-router/releases)
- [Changelog](https://github.com/angular-ui/ui-router/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular-ui/ui-router/compare/1.0.19...1.0.20)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-14 18:44:36 +00:00
Julius Härtl
dc20ff52d8 Merge pull request #582 from nextcloud/dependabot/npm_and_yarn/js/karma-3.0.0
Bump karma from 2.0.5 to 3.0.0 in /js
2018-08-14 20:41:53 +02:00
dependabot[bot]
1764e6e0fe Bump karma from 2.0.5 to 3.0.0 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 2.0.5 to 3.0.0.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v2.0.5...v3.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-13 11:09:23 +00:00
Julius Härtl
e65d2f2a85 Merge pull request #584 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.16.5
Bump webpack from 4.16.4 to 4.16.5 in /js
2018-08-13 12:39:59 +02:00
dependabot[bot]
2d26b24b10 Bump webpack from 4.16.4 to 4.16.5 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.16.4 to 4.16.5.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.16.4...v4.16.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-13 01:21:41 +00:00
Nextcloud bot
990a70e958 [tx-robot] updated from transifex 2018-08-13 00:18:56 +00:00
Nextcloud bot
2868391cf6 [tx-robot] updated from transifex 2018-08-12 00:18:53 +00:00
Julius Härtl
4050cddd12 Merge pull request #571 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.16.4
Bump webpack from 4.16.3 to 4.16.4 in /js
2018-08-09 17:13:45 +02:00
dependabot[bot]
92cee7b441 Bump webpack from 4.16.3 to 4.16.4 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.16.3 to 4.16.4.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.16.3...v4.16.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-08-06 01:16:08 +00:00
Nextcloud bot
8e0f6c6e83 [tx-robot] updated from transifex 2018-08-05 00:19:19 +00:00
Nextcloud bot
e7eb1dfbf0 [tx-robot] updated from transifex 2018-08-01 00:18:12 +00:00
Julius Härtl
f8a0b6c0c6 Update pull_request_template.md 2018-07-31 09:58:59 +02:00
Julius Härtl
9f7bef9447 Merge pull request #561 from nextcloud/551_show_tag_title_on_cards_overview
551_show_tag_title_on_cards_overview
2018-07-31 09:57:03 +02:00
Philippe Le Van
508674f404 little more bottom margin after review
Signed-off-by: Philippe Le Van <philippe.levan@kibatic.com>
2018-07-31 09:21:19 +02:00
Philippe Le Van
25fa1a0e69 First proposition of label styling
Signed-off-by: Philippe Le Van <philippe.levan@kibatic.com>
2018-07-31 09:21:18 +02:00
Nextcloud bot
2453f27284 [tx-robot] updated from transifex 2018-07-31 00:18:57 +00:00
Julius Härtl
05598d1445 Merge pull request #559 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.16.3
Bump webpack from 4.16.1 to 4.16.3 in /js
2018-07-30 23:28:13 +02:00
Julius Härtl
c82d99a656 Merge pull request #558 from nextcloud/dependabot/npm_and_yarn/js/karma-2.0.5
Bump karma from 2.0.4 to 2.0.5 in /js
2018-07-30 23:26:51 +02:00
dependabot[bot]
619acbed15 Bump webpack from 4.16.1 to 4.16.3 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.16.1 to 4.16.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.16.1...v4.16.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-30 01:14:09 +00:00
dependabot[bot]
fef5bb6342 Bump karma from 2.0.4 to 2.0.5 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 2.0.4 to 2.0.5.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v2.0.4...v2.0.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-30 01:13:49 +00:00
Nextcloud bot
4e91e06c64 [tx-robot] updated from transifex 2018-07-30 00:18:37 +00:00
Julius Härtl
0057c2be84 Update README.md
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-28 14:36:41 +02:00
Julius Härtl
e8e50a3e31 Fix more 14 layout issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-28 13:06:40 +02:00
Julius Härtl
769053b76d Merge pull request #545 from steav/issue-475-notifications-on-card-assignment
Add notification on card assignment to user, fixes #475
2018-07-28 12:32:54 +02:00
Julius Härtl
1948c303f2 Add missing import statement
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-28 12:25:23 +02:00
steav
476b15ee9d Fix tests for card assignment notification
Signed-off-by: steav <steav8@gmail.com>
2018-07-28 12:17:28 +02:00
steav
9595e00ae1 Do not send card assignment notifications to ourselves
Signed-off-by: steav <steav8@gmail.com>
2018-07-28 12:17:28 +02:00
steav
fdc1f275c5 Add tests for card assignment notification
Signed-off-by: steav <steav8@gmail.com>
2018-07-28 12:17:28 +02:00
steav
1276dddc37 Fix failing CardServiceTest
Signed-off-by: steav <steav8@gmail.com>
2018-07-28 12:17:28 +02:00
Steav
ed62a48ddd Add richsubject to notification on user assignment
Signed-off-by: Steav <steav8@gmail.com>
2018-07-28 12:17:28 +02:00
Steav
327c379ff3 Undo manual changes to l10n files
Signed-off-by: Steav <steav8@gmail.com>
2018-07-28 12:17:27 +02:00
Steav
77472b978d Add notification on card assignment to user
Signed-off-by: Steav <steav8@gmail.com>
2018-07-28 12:16:50 +02:00
Julius Härtl
e81c08f7f0 Create pull_request_template.md
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-28 12:07:34 +02:00
Nextcloud bot
1e24b3d774 [tx-robot] updated from transifex 2018-07-28 00:18:40 +00:00
Nextcloud bot
a4044eff30 [tx-robot] updated from transifex 2018-07-27 00:18:55 +00:00
Julius Härtl
31c690ebf8 Merge pull request #554 from nextcloud/bugfix/550/make-14-compatible
Compatibility for Nextcloud 14
2018-07-27 00:15:02 +02:00
Julius Härtl
b84f118b4d Fix eslint
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-27 00:06:34 +02:00
Julius Härtl
c33783ac81 Cleanup css
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-27 00:06:33 +02:00
Julius Härtl
725ba6ff72 Move app sidebar handling to angular/css
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-27 00:06:33 +02:00
Julius Härtl
bf9811bf11 Add CSS rules for 13 to be backward compatible
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-27 00:06:33 +02:00
Julius Härtl
e08c430422 Move app sidebar out of app content
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-27 00:06:33 +02:00
Nextcloud bot
c72000bfc0 [tx-robot] updated from transifex 2018-07-26 00:18:56 +00:00
Julius Härtl
a131e468c0 Merge pull request #544 from philippe-levan/assign_to_me_feature
"assign to me" feature
2018-07-25 21:53:20 +02:00
Julius Härtl
d4a16589af Merge branch 'master' into assign_to_me_feature 2018-07-25 21:45:32 +02:00
Philippe Le Van
5e69a453a2 added TODO comment for jquery calls 2018-07-25 20:57:51 +02:00
Julius Härtl
23d3425ca4 Merge pull request #541 from nextcloud/bugfix/532/4byte-description
Simly remove 4byte chars from the description if those are not supported
2018-07-25 18:51:57 +02:00
Julius Härtl
653a1ccd58 Merge pull request #555 from nextcloud/bugfix/543/permissions
Check when assigning users
2018-07-25 18:51:29 +02:00
Julius Härtl
09105d6e3d Check when assigning users
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-25 18:39:08 +02:00
Julius Härtl
4d8acecc57 Simly remove 4byte chars from the description if those are not supported
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-25 18:33:24 +02:00
Julius Härtl
8d54028b31 Remove stable12 from drone tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-24 19:45:15 +02:00
Julius Härtl
415acfce57 Bump development version and make NC13 a minimum
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-24 19:44:07 +02:00
Philippe Le Van
f25401e9fd assign to me feature
codacy fix

codacy fix #2

revert translation files

coding style : spaces to tabs

Signed-off-by: Philippe Le Van <philippe.levan@kibatic.com>
2018-07-24 09:40:57 +02:00
Nextcloud bot
bcf26cee53 [tx-robot] updated from transifex 2018-07-24 00:18:21 +00:00
Julius Härtl
161bfb0e91 Merge pull request #547 from nextcloud/dependabot/npm_and_yarn/js/webpack-cli-3.1.0
Bump webpack-cli from 3.0.8 to 3.1.0 in /js
2018-07-23 12:22:17 +02:00
Julius Härtl
c1e52d7837 Merge pull request #548 from nextcloud/dependabot/npm_and_yarn/js/@uirouter/angularjs-1.0.19
Bump @uirouter/angularjs from 1.0.18 to 1.0.19 in /js
2018-07-23 12:22:04 +02:00
Julius Härtl
9cb096046a Merge pull request #546 from nextcloud/dependabot/npm_and_yarn/js/markdown-it-8.4.2
Bump markdown-it from 8.4.1 to 8.4.2 in /js
2018-07-23 12:21:45 +02:00
dependabot[bot]
3c32f0533a Bump markdown-it from 8.4.1 to 8.4.2 in /js
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 8.4.1 to 8.4.2.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/8.4.1...8.4.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-23 09:57:39 +00:00
dependabot[bot]
3bf197bb32 Bump @uirouter/angularjs from 1.0.18 to 1.0.19 in /js
Bumps [@uirouter/angularjs](https://github.com/angular-ui/ui-router) from 1.0.18 to 1.0.19.
- [Release notes](https://github.com/angular-ui/ui-router/releases)
- [Changelog](https://github.com/angular-ui/ui-router/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular-ui/ui-router/compare/1.0.18...1.0.19)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-23 09:57:34 +00:00
dependabot[bot]
4dc5c7da18 Bump webpack-cli from 3.0.8 to 3.1.0 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.0.8 to 3.1.0.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-23 09:57:18 +00:00
Julius Härtl
9ad070f40a Merge pull request #549 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.16.1
Bump webpack from 4.16.0 to 4.16.1 in /js
2018-07-23 11:55:24 +02:00
dependabot[bot]
a806714f56 Bump webpack from 4.16.0 to 4.16.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.16.0 to 4.16.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.16.0...v4.16.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-23 01:14:57 +00:00
Nextcloud bot
bd630e31bc [tx-robot] updated from transifex 2018-07-23 00:18:16 +00:00
Nextcloud bot
6313f24dc9 [tx-robot] updated from transifex 2018-07-20 00:18:38 +00:00
Nextcloud bot
5a5cd23eb2 [tx-robot] updated from transifex 2018-07-19 00:18:20 +00:00
Nextcloud bot
7fda7c1a4a [tx-robot] updated from transifex 2018-07-17 00:18:29 +00:00
Julius Härtl
ab637c7c13 Merge pull request #538 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.16.0
Bump webpack from 4.15.1 to 4.16.0 in /js
2018-07-16 11:41:46 +02:00
dependabot[bot]
7f497d59bc Bump webpack from 4.15.1 to 4.16.0 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.15.1 to 4.16.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.15.1...v4.16.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-16 01:13:39 +00:00
Nextcloud bot
d794d61337 [tx-robot] updated from transifex 2018-07-16 00:18:17 +00:00
Julius Härtl
9f03854b3c Merge pull request #536 from philippe-levan/patch-1
click on assign user or the plus button
2018-07-15 15:13:41 +02:00
Nextcloud bot
17996822d3 [tx-robot] updated from transifex 2018-07-15 00:18:13 +00:00
Philippe Le Van (@plv)
ee438ad7b2 click on assign user or the plus button
Hi,

We often add users on cards. I believe the button to assign a user shoud be bigger.

I suggest with this PR to make all the header clickable to assign a new user (but I let the button with the hover to let the UI intuitive).

Best regards,
Phillippe
2018-07-14 16:46:37 +02:00
Julius Härtl
6bf4efbfe6 Merge pull request #527 from Nebri/issue_197
Add default board
2018-07-14 12:12:30 +02:00
Julius Härtl
3163563fce Merge branch 'master' into issue_197 2018-07-14 11:57:53 +02:00
Ryan Fletcher
04cb5f656d Mocked up $this->l10n calls in DefaultBoardServiceTest
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-13 08:53:21 -04:00
Ryan Fletcher
3863c7497b Used $l10n references in my unit test, this should allow it pass.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-12 12:15:46 -04:00
Ryan Fletcher
8d4dbd4d82 Fixed up code styles as per review by juliushaertl
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-12 11:17:11 -04:00
Julius Härtl
8f4fe1b05b Merge pull request #529 from nextcloud/bugfix/528/cast-inf
Cast uploadLimit to integer to catch possible INF result
2018-07-12 16:43:32 +02:00
Julius Härtl
7794fa065c Cast uploadLimit to integer to catch possible INF result
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-12 16:06:17 +02:00
Ryan Fletcher
af92da9a7c Removing translations I attempted to put in before knowing the process.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 16:18:00 -04:00
Ryan Fletcher
ba378ea00b First attempt at using l10n
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 15:00:08 -04:00
Ryan Fletcher
be8a3479ac Updated PageControllerTest.php to reflect new changes
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 13:33:04 -04:00
Ryan Fletcher
2002841c61 Wrote unit tests for checkFirstRun method in the default board service
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 12:59:40 -04:00
Julius Härtl
fde5096856 Merge pull request #524 from nextcloud/release/v0.4.0
Prepare 0.4.0 release
2018-07-11 18:37:17 +02:00
Ryan Fletcher
08f9874745 Updated constructor in PageControllerTest
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 11:50:11 -04:00
Ryan Fletcher
712ab9e0bc Corrected testCreateDefaultBoard()
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 11:49:20 -04:00
Ryan Fletcher
e07fc0a2c7 Corrected missing import and missing parameter in defaultBoardServiceTest
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 10:49:46 -04:00
Ryan Fletcher
61fb68f4cf Added a unit test against DefaultBoardService->TestCreateDefaultBoard()
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 10:20:42 -04:00
Julius Härtl
f3296dd443 Add compatibility check for 12,13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-11 14:07:58 +02:00
Ryan Fletcher
8a8cffc542 Completed checkFirstRun() in DefaultBoardService.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-11 08:02:54 -04:00
Julius Härtl
820ad7c523 Update changelog
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-11 13:54:06 +02:00
Julius Härtl
9f66ce618e Bump version to 0.4.0
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-11 13:54:06 +02:00
Julius Härtl
2318425160 Add package target to Makefile
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-11 08:48:01 +02:00
Ryan Fletcher
a36dfcc144 first attempt at writing the checkFirstRun() in DefaultBoardService.php
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-10 21:16:24 -04:00
Nextcloud bot
213e3083a1 [tx-robot] updated from transifex 2018-07-11 00:19:11 +00:00
Ryan Fletcher
683354da9d corrected null errors from first attempt.
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-10 19:30:47 -04:00
Ryan Fletcher
e208fd8222 First Attempt at implementing createDefaultBoard()
Signed-off-by: Ryan Fletcher <ryan.fletcher@codepassion.ca>
2018-07-10 17:10:27 -04:00
Julius Härtl
4fc65c8302 Merge pull request #522 from nextcloud/dependabot/npm_and_yarn/js/css-loader-1.0.0
Bump css-loader from 0.28.11 to 1.0.0 in /js
2018-07-10 15:21:35 +02:00
dependabot[bot]
bcb54faeaf Bump css-loader from 0.28.11 to 1.0.0 in /js
Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 0.28.11 to 1.0.0.
- [Release notes](https://github.com/webpack-contrib/css-loader/releases)
- [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/css-loader/compare/v0.28.11...v1.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-10 12:41:11 +00:00
Julius Härtl
f5753f3fde Merge pull request #521 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.15.1
Bump webpack from 4.14.0 to 4.15.1 in /js
2018-07-10 14:39:30 +02:00
dependabot[bot]
5ff8618c10 Bump webpack from 4.14.0 to 4.15.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.14.0 to 4.15.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.14.0...v4.15.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-10 12:35:38 +00:00
Julius Härtl
bee918e810 Merge pull request #520 from nextcloud/dependabot/npm_and_yarn/js/node-sass-4.9.2
Bump node-sass from 4.9.0 to 4.9.2 in /js
2018-07-10 14:33:59 +02:00
dependabot[bot]
37301ae92b Bump node-sass from 4.9.0 to 4.9.2 in /js
Bumps [node-sass](https://github.com/sass/node-sass) from 4.9.0 to 4.9.2.
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/node-sass/compare/v4.9.0...v4.9.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-09 07:50:44 +00:00
Julius Härtl
bd304d5f27 Merge pull request #523 from nextcloud/dependabot/npm_and_yarn/js/babel-loader-7.1.5
Bump babel-loader from 7.1.4 to 7.1.5 in /js
2018-07-09 09:47:27 +02:00
dependabot[bot]
827c69bd7b Bump babel-loader from 7.1.4 to 7.1.5 in /js
Bumps [babel-loader](https://github.com/babel/babel-loader) from 7.1.4 to 7.1.5.
- [Release notes](https://github.com/babel/babel-loader/releases)
- [Changelog](https://github.com/babel/babel-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel-loader/compare/v7.1.4...v7.1.5)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-09 01:15:28 +00:00
Nextcloud bot
812a225334 [tx-robot] updated from transifex 2018-07-08 00:12:30 +00:00
Julius Härtl
90c4e7818a Use ng-attr-value to support IE11
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-06 13:49:29 +02:00
Nextcloud bot
1299df539e [tx-robot] updated from transifex 2018-07-06 00:12:18 +00:00
Julius Härtl
20b25e0108 Bump version to 0.4.0-beta5
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-05 18:53:47 +02:00
Julius Härtl
e959afb2de Merge pull request #519 from nextcloud/bugfix/noid/stream-attachment-download
Fetch file from rootFolder instead of IAppData to use StreamResponse
2018-07-05 18:52:45 +02:00
Julius Härtl
cb25643741 Fetch file from rootFolder instead of IAppData to use StreamResponse when displaying
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-05 18:42:33 +02:00
Nextcloud bot
bbfb9e713a [tx-robot] updated from transifex 2018-07-04 00:12:38 +00:00
Nextcloud bot
e71a38fe96 [tx-robot] updated from transifex 2018-07-03 00:16:32 +00:00
Julius Härtl
120e4e13a6 Bump version to 0.4.0-beta4
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-02 12:16:02 +02:00
Julius Härtl
04aa9df45b Merge pull request #470 from nextcloud/feature/noid/export
Implement user data export via occ command
2018-07-02 12:06:53 +02:00
Julius Härtl
8d60a4379d Add rough test and fix card array
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-02 11:51:53 +02:00
Julius Härtl
4e96dec474 Implement user data export via occ command
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-02 11:06:13 +02:00
Julius Härtl
9727356d3b Merge pull request #514 from nextcloud/feature/noid/file-progress
File upload progress
2018-07-02 09:49:00 +02:00
Julius Härtl
c0c0cb8545 Implement file upload status and cancel button
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-02 09:34:57 +02:00
Julius Härtl
af646c1999 Reset FileService status when switching cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-02 09:34:57 +02:00
Julius Härtl
38bb4c7a3a Merge pull request #515 from nextcloud/dependabot/npm_and_yarn/js/mini-css-extract-plugin-0.4.1
Bump mini-css-extract-plugin from 0.4.0 to 0.4.1 in /js
2018-07-02 08:35:07 +02:00
dependabot[bot]
573fa2c457 Bump mini-css-extract-plugin from 0.4.0 to 0.4.1 in /js
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 0.4.0 to 0.4.1.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v0.4.0...v0.4.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-02 06:29:23 +00:00
Julius Härtl
d7e7fd58b0 Merge pull request #516 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.14.0
Bump webpack from 4.12.1 to 4.14.0 in /js
2018-07-02 08:27:07 +02:00
dependabot[bot]
f5a234fd26 Bump webpack from 4.12.1 to 4.14.0 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.12.1 to 4.14.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.12.1...v4.14.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-07-02 01:14:11 +00:00
Nextcloud bot
f75c9e0d4a [tx-robot] updated from transifex 2018-07-02 00:14:13 +00:00
Nextcloud bot
5eca92a0ea [tx-robot] updated from transifex 2018-07-01 00:16:09 +00:00
Julius Härtl
384b7a41a9 Merge pull request #513 from nextcloud/bugfix/noid/img-colorpicker-dark
Add misisng colorpicker image
2018-06-30 10:59:19 +02:00
Julius Härtl
47e27a7a89 Add misisng colorpicker image
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-30 09:47:46 +02:00
Nextcloud bot
ac19621d5b [tx-robot] updated from transifex 2018-06-30 00:16:44 +00:00
Nextcloud bot
cf2e84873c [tx-robot] updated from transifex 2018-06-29 00:18:56 +00:00
Julius Härtl
c523474980 Merge pull request #508 from nextcloud/bugfix/502/markdown-newline
Fix markdownit configuration
2018-06-28 21:36:19 +02:00
Julius Härtl
754486673a Merge pull request #510 from nextcloud/bugfix/noid/upload-size-fontend
Add frontend check for file size before starting to upload
2018-06-28 21:34:54 +02:00
Julius Härtl
a7110082e7 Merge branch 'master' into bugfix/502/markdown-newline 2018-06-28 21:32:03 +02:00
Julius Härtl
db619e4cda Merge pull request #509 from nextcloud/bugfix/504/fix-inline-javascript-error
Do not prefix href of select2 with unsafe to avoid #504
2018-06-28 21:31:38 +02:00
Julius Härtl
34d05f2ac0 Merge pull request #511 from nextcloud/bugfix/501/colorpicker-invert
Invert color picker icon on bright backgrounds
2018-06-28 21:31:15 +02:00
Julius Härtl
fdb1dbf397 Invert color picker icon on bright backgrounds
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-28 16:02:24 +02:00
Julius Härtl
5c2925aeed Fix markdownit configuration
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-28 15:34:36 +02:00
Julius Härtl
dc5fbbf7eb Do not prefix href of select2 with unsafe to avoid #504
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-28 15:26:27 +02:00
Julius Härtl
e46844988e Add frontend check for file size before starting to upload
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-28 15:25:25 +02:00
Julius Härtl
9d98107f3a Merge pull request #506 from nextcloud/dependabot/npm_and_yarn/js/karma-2.0.4
Bump karma from 2.0.3 to 2.0.4 in /js
2018-06-28 10:55:53 +02:00
Nextcloud bot
681176c684 [tx-robot] updated from transifex 2018-06-28 00:18:52 +00:00
Nextcloud bot
5d4757ddf1 [tx-robot] updated from transifex 2018-06-27 00:18:47 +00:00
dependabot[bot]
9731e6811a Bump karma from 2.0.3 to 2.0.4 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v2.0.3...v2.0.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-26 08:43:48 +00:00
Julius Härtl
23c86a4fcc Merge pull request #507 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.12.1
Bump webpack from 4.12.0 to 4.12.1 in /js
2018-06-26 10:41:55 +02:00
Nextcloud bot
43ea0136c8 [tx-robot] updated from transifex 2018-06-26 00:18:51 +00:00
dependabot[bot]
2cc8eb1313 Bump webpack from 4.12.0 to 4.12.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.12.0 to 4.12.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.12.0...v4.12.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-25 22:19:43 +00:00
Julius Härtl
bfe71900d3 Bump version to 0.4.0-beta3
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 18:14:59 +02:00
Julius Härtl
c6a6b41193 Merge pull request #505 from nextcloud/bugfix/noid/upload-errors
Display attachment errors properly and fix uploading big files
2018-06-25 18:12:44 +02:00
Julius Härtl
b0f7bef279 Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 18:05:02 +02:00
Julius Härtl
014f76b2fb Provide resource of tmp file instead of putting all content in memory
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 17:55:40 +02:00
Julius Härtl
546928fb79 Throw proper StatusException
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 17:55:18 +02:00
Julius Härtl
b4ead5a2eb Display proper file upload errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 17:54:28 +02:00
Nextcloud bot
124918b744 [tx-robot] updated from transifex 2018-06-25 00:18:22 +00:00
Nextcloud bot
9308ad125a [tx-robot] updated from transifex 2018-06-23 00:19:28 +00:00
Nextcloud bot
7dc43829ab [tx-robot] updated from transifex 2018-06-22 00:19:11 +00:00
Julius Härtl
63ac985f15 Add proper polyfill for IE11
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 14:55:28 +02:00
Julius Härtl
93725e481d Bump version to 0.4.0-beta2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 14:35:42 +02:00
Nextcloud bot
8e976cb2a6 [tx-robot] updated from transifex 2018-06-21 12:30:45 +00:00
Julius Härtl
58a89374e2 Properly use babel to fix IE11 support
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 14:13:39 +02:00
Julius Härtl
313bbca462 Add proper controller method annotations
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 11:44:45 +02:00
Nextcloud bot
f0c22370e0 [tx-robot] updated from transifex 2018-06-21 00:20:04 +00:00
Julius Härtl
00554c218b Merge pull request #499 from nextcloud/release/v0.4.0-beta1
Prepare for release of v0.4.0-beta1
2018-06-20 09:36:53 +02:00
Julius Härtl
b0222a2d11 Merge pull request #500 from nextcloud/bugfix/441/fix-opacity
Fix opacity issue with the popover menu
2018-06-20 09:35:52 +02:00
Julius Härtl
03ba692f69 Fix opacity issue with the popover menu
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-20 09:21:42 +02:00
Julius Härtl
7147368ce1 Prepare for release of v0.4.0-beta1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-20 09:07:29 +02:00
Julius Härtl
c938fdd806 Merge pull request #488 from nextcloud/feature/109/file-attachments
File attachments for cards
2018-06-20 08:34:57 +02:00
Julius Härtl
49d7f8c522 Merge branch 'master' into feature/109/file-attachments 2018-06-20 08:19:10 +02:00
Nextcloud bot
6357080f89 [tx-robot] updated from transifex 2018-06-20 00:19:26 +00:00
Julius Härtl
147c317a46 Create proper parameters with QueryBuilder
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 20:08:02 +02:00
Julius Härtl
dd1a03f243 Limit images in height
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 19:56:17 +02:00
Julius Härtl
dfa409bd68 Merge pull request #494 from nextcloud/dependabot/npm_and_yarn/js/angular-1.7.2
Bump angular from 1.7.1 to 1.7.2 in /js
2018-06-19 19:43:31 +02:00
Julius Härtl
c2c0bae3d6 Fix scrutinizer issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 19:40:12 +02:00
Julius Härtl
56412498f1 Fix missing index and double quotes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 19:03:28 +02:00
Julius Härtl
c720f964bb Add AttachmentMapperTest
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:41:14 +02:00
Julius Härtl
6ac3066dc8 Add more spacing to attachment list
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:40:47 +02:00
Julius Härtl
63ad39dd2d Unit tests for missing service methods
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:07 +02:00
Julius Härtl
7955a19149 Add some logging
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:06 +02:00
Julius Härtl
a83b50bb97 return empty result
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:06 +02:00
Julius Härtl
0f50f8d1d9 Use generic Exception
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:06 +02:00
Julius Härtl
5b95beb153 Insert attachments to description
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:06 +02:00
Julius Härtl
7ad8080f82 Add unit tests for new classes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:06 +02:00
Julius Härtl
1972edc38d Fix CardTest
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:06 +02:00
Julius Härtl
06ea03689b Fix codacy warnings
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:06 +02:00
Julius Härtl
22190b90cf Fix button styling
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:05 +02:00
Julius Härtl
5bc65a6eb3 Use object-src self/blob for pdf files
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:05 +02:00
Julius Härtl
0b5ded2860 Use tabbed headers for description and attachments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:05 +02:00
Julius Härtl
48c622d19e Add file upload indicator
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:05 +02:00
Julius Härtl
581fa011e3 Implement updating files
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:05 +02:00
Julius Härtl
c816b15bfa Fix race condition when loading the user list
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:05 +02:00
Julius Härtl
2bcd5d35c0 Fix chrome hovering bug
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:05 +02:00
Julius Härtl
8229fbacea Move uploading logic to dedicated FileService
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
7b230d567e Add field for user count
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
344ed6d928 Fix code style and PHP5.6 errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
94397dedb1 Fix delete cron test
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
04b0807a12 Adapt existing unit tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
757b041f73 Use card data from CardService so we don't need to store objects twice
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
0137b882c5 Add attachment indicator
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
ee5a54a575 Allow to undo file deletions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:04 +02:00
Julius Härtl
0c711b2b0b Update package-lock.json to remove option param
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 18:00:03 +02:00
Julius Härtl
b08d416c51 Include angular-file-upload and add a fix for its dragleave issue
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 17:59:20 +02:00
Julius Härtl
bfda3e7623 Implement file attachments frontend
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 17:59:00 +02:00
Julius Härtl
f152f32952 Update database schema for attachments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 17:59:00 +02:00
Julius Härtl
45c7241daf Implement attachment backend with a first module for app data file upload
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-19 17:59:00 +02:00
dependabot[bot]
cfc32c0b74 Bump angular from 1.7.1 to 1.7.2 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.1 to 1.7.2.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.1...v1.7.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-19 13:04:08 +00:00
Julius Härtl
e4863b6d8d Merge pull request #493 from nextcloud/dependabot/npm_and_yarn/js/webpack-merge-4.1.3
Bump webpack-merge from 4.1.2 to 4.1.3 in /js
2018-06-19 15:02:31 +02:00
Julius Härtl
8f5d0c3f76 Merge pull request #495 from nextcloud/dependabot/npm_and_yarn/js/angular-sanitize-1.7.2
Bump angular-sanitize from 1.7.1 to 1.7.2 in /js
2018-06-19 15:01:12 +02:00
Julius Härtl
38feba1740 Merge pull request #496 from nextcloud/dependabot/npm_and_yarn/js/angular-animate-1.7.2
Bump angular-animate from 1.7.1 to 1.7.2 in /js
2018-06-19 15:00:30 +02:00
dependabot[bot]
9973eef488 Bump angular-animate from 1.7.1 to 1.7.2 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.1 to 1.7.2.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.1...v1.7.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-19 07:57:51 +00:00
dependabot[bot]
77b906e884 Bump webpack-merge from 4.1.2 to 4.1.3 in /js
Bumps [webpack-merge](https://github.com/survivejs/webpack-merge) from 4.1.2 to 4.1.3.
- [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/v4.1.2...v4.1.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-19 07:57:45 +00:00
dependabot[bot]
962724f0dc Bump angular-sanitize from 1.7.1 to 1.7.2 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.1 to 1.7.2.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.1...v1.7.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-19 07:57:15 +00:00
Julius Härtl
55440c47cf Merge pull request #497 from nextcloud/dependabot/npm_and_yarn/js/karma-2.0.3
Bump karma from 2.0.2 to 2.0.3 in /js
2018-06-19 09:56:12 +02:00
Julius Härtl
002ffc4b99 Merge pull request #498 from nextcloud/dependabot/npm_and_yarn/js/webpack-cli-3.0.8
Bump webpack-cli from 3.0.3 to 3.0.8 in /js
2018-06-19 09:55:35 +02:00
dependabot[bot]
97952d775c Bump webpack-cli from 3.0.3 to 3.0.8 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 3.0.3 to 3.0.8.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v3.0.3...v3.0.8)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-18 22:16:14 +00:00
dependabot[bot]
a5130d8032 Bump karma from 2.0.2 to 2.0.3 in /js
Bumps [karma](https://github.com/karma-runner/karma) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v2.0.2...v2.0.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-18 22:15:32 +00:00
Nextcloud bot
5b3f1f847d [tx-robot] updated from transifex 2018-06-14 00:20:30 +00:00
Nextcloud bot
5be62756ed [tx-robot] updated from transifex 2018-06-12 00:20:18 +00:00
Julius Härtl
be2d0010f7 Merge pull request #463 from nextcloud/markdown-checkboxes
Implement github flavored markdown checkboxes
2018-06-10 21:21:59 +02:00
Julius Härtl
ab5d2c79ec [markdown-it-checkbox] add licence details
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 21:10:48 +02:00
Julius Härtl
1de3dc2f6c Merge pull request #468 from nextcloud/feature/405/color-picker
Implemented a colorpicker for all color selectors
2018-06-10 21:06:39 +02:00
Julius Härtl
3413e7694a [markdown-it-checkbox] remove underscore.js requirement
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 21:05:49 +02:00
Julius Härtl
57f58e5e68 Code style fixes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 20:55:12 +02:00
Julius Härtl
1a4b2e5f01 Add fork of markdown-it-checkboxes to legacy scripts folder
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 20:55:12 +02:00
Julius Härtl
20490dbd39 Add indicator for tasks
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 20:55:12 +02:00
Julius Härtl
f3088b5b48 Add support for checkboxes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 20:55:11 +02:00
Julius Härtl
40536a0097 Merge pull request #481 from nextcloud/dependabot/npm_and_yarn/js/webpack-cli-3.0.3
Bump webpack-cli from 2.1.4 to 3.0.3 in /js
2018-06-10 20:51:02 +02:00
Julius Härtl
6c93e99b9b Use tabs instead of spaces
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 20:49:06 +02:00
Julius Härtl
00ae0e6963 Fix webpack-cli
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 20:47:22 +02:00
dependabot[bot]
25edef4fb9 Bump webpack-cli from 2.1.4 to 3.0.3 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 2.1.4 to 3.0.3.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v2.1.4...v3.0.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-10 20:47:22 +02:00
Julius Härtl
9f58b1ea07 Fix invisible picker and webpack migration
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-10 20:43:31 +02:00
Oskar Kurz
4a9ef92e5d Fixed color-picker width. #204, #395
Signed-off-by: oskar <oskar.kurz@gmail.com>
2018-06-10 20:38:01 +02:00
Oskar Kurz
2cc961dcdf Implemented a colorpicker for all color selectors. #204, #395
Signed-off-by: oskar <oskar.kurz@gmail.com>
2018-06-10 20:38:01 +02:00
Julius Härtl
fe383a3485 Merge pull request #482 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.12.0
Bump webpack from 4.11.1 to 4.12.0 in /js
2018-06-09 12:44:43 +02:00
dependabot[bot]
264ae7bac6 Bump webpack from 4.11.1 to 4.12.0 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.11.1 to 4.12.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.11.1...v4.12.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-09 10:41:12 +00:00
Julius Härtl
f6de432bcc Merge pull request #484 from nextcloud/dependabot/npm_and_yarn/js/angular-sanitize-1.7.1
Bump angular-sanitize from 1.7.0 to 1.7.1 in /js
2018-06-09 12:37:47 +02:00
dependabot[bot]
1ed28ff563 Bump angular-sanitize from 1.7.0 to 1.7.1 in /js
Bumps [angular-sanitize](https://github.com/angular/angular.js) from 1.7.0 to 1.7.1.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.0...v1.7.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-09 10:31:00 +00:00
Julius Härtl
23492745f7 Merge pull request #483 from nextcloud/dependabot/npm_and_yarn/js/angular-animate-1.7.1
Bump angular-animate from 1.7.0 to 1.7.1 in /js
2018-06-09 12:29:13 +02:00
dependabot[bot]
a56c82928c Bump angular-animate from 1.7.0 to 1.7.1 in /js
Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.0 to 1.7.1.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.0...v1.7.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-09 10:20:51 +00:00
Julius Härtl
78f5d24a5d Merge pull request #485 from nextcloud/dependabot/npm_and_yarn/js/angular-1.7.1
Bump angular from 1.7.0 to 1.7.1 in /js
2018-06-09 12:18:58 +02:00
dependabot[bot]
aeac40e37e Bump angular from 1.7.0 to 1.7.1 in /js
Bumps [angular](https://github.com/angular/angular.js) from 1.7.0 to 1.7.1.
- [Release notes](https://github.com/angular/angular.js/releases)
- [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular/angular.js/compare/v1.7.0...v1.7.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-08 22:15:33 +00:00
Nextcloud bot
6b1015e99f [tx-robot] updated from transifex 2018-06-08 00:20:09 +00:00
Julius Härtl
6d8b856728 Merge pull request #479 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.11.1
Bump webpack from 4.10.1 to 4.11.1 in /js
2018-06-07 14:35:51 +02:00
dependabot[bot]
8c77f1bc8a Bump webpack from 4.10.1 to 4.11.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.10.1 to 4.11.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.10.1...v4.11.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-06-06 22:14:31 +00:00
Nextcloud bot
7714b1e83b [tx-robot] updated from transifex 2018-06-04 00:19:15 +00:00
Nextcloud bot
8ad1496eff [tx-robot] updated from transifex 2018-06-02 00:19:18 +00:00
Nextcloud bot
a5683add3a [tx-robot] updated from transifex 2018-06-01 00:19:34 +00:00
Nextcloud bot
3a155a3004 [tx-robot] updated from transifex 2018-05-31 00:19:44 +00:00
Julius Härtl
67a482cc6f Merge pull request #473 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.10.1
Bump webpack from 4.8.3 to 4.10.1 in /js
2018-05-30 16:49:07 +02:00
Nextcloud bot
fd154fafb3 [tx-robot] updated from transifex 2018-05-30 00:19:24 +00:00
dependabot[bot]
51949fa179 Bump webpack from 4.8.3 to 4.10.1 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.8.3 to 4.10.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.8.3...v4.10.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-29 22:13:42 +00:00
Nextcloud bot
614ddf1023 [tx-robot] updated from transifex 2018-05-29 00:19:27 +00:00
Nextcloud bot
401a7db3e9 [tx-robot] updated from transifex 2018-05-28 00:20:14 +00:00
Nextcloud bot
d52c727b92 [tx-robot] updated from transifex 2018-05-26 00:20:38 +00:00
Nextcloud bot
7ff5fb64c3 [tx-robot] updated from transifex 2018-05-25 00:22:55 +00:00
Julius Härtl
d28a408994 Merge pull request #467 from nextcloud/dependabot/npm_and_yarn/js/webpack-cli-2.1.4
Bump webpack-cli from 2.1.3 to 2.1.4 in /js
2018-05-24 11:35:23 +02:00
Nextcloud bot
541b8cc9e7 [tx-robot] updated from transifex 2018-05-24 00:21:38 +00:00
dependabot[bot]
11f78403dd Bump webpack-cli from 2.1.3 to 2.1.4 in /js
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 2.1.3 to 2.1.4.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v2.1.3...v2.1.4)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-23 22:13:48 +00:00
Nextcloud bot
3db63d1761 [tx-robot] updated from transifex 2018-05-23 00:23:29 +00:00
Julius Härtl
24b00f0a85 Merge pull request #465 from nextcloud/dependabot/npm_and_yarn/js/@uirouter/angularjs-1.0.18
Bump @uirouter/angularjs from 1.0.17 to 1.0.18 in /js
2018-05-22 08:23:18 +02:00
dependabot[bot]
f711a0214b Bump @uirouter/angularjs from 1.0.17 to 1.0.18 in /js
Bumps [@uirouter/angularjs](https://github.com/angular-ui/ui-router) from 1.0.17 to 1.0.18.
- [Release notes](https://github.com/angular-ui/ui-router/releases)
- [Changelog](https://github.com/angular-ui/ui-router/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular-ui/ui-router/compare/1.0.17...1.0.18)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-21 22:12:16 +00:00
Nextcloud bot
7facc2593e [tx-robot] updated from transifex 2018-05-18 00:21:18 +00:00
Nextcloud bot
bd32f51451 [tx-robot] updated from transifex 2018-05-17 00:21:25 +00:00
Julius Härtl
3b6c04dad9 Merge pull request #461 from nextcloud/dependabot/npm_and_yarn/js/@uirouter/angularjs-1.0.17
Bump @uirouter/angularjs from 1.0.16 to 1.0.17 in /js
2018-05-16 09:58:34 +02:00
dependabot[bot]
99f845d746 Bump @uirouter/angularjs from 1.0.16 to 1.0.17 in /js
Bumps [@uirouter/angularjs](https://github.com/angular-ui/ui-router) from 1.0.16 to 1.0.17.
- [Release notes](https://github.com/angular-ui/ui-router/releases)
- [Changelog](https://github.com/angular-ui/ui-router/blob/master/CHANGELOG.md)
- [Commits](https://github.com/angular-ui/ui-router/compare/1.0.16...1.0.17)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-15 07:26:17 +00:00
Julius Härtl
22f39d28e4 Merge pull request #462 from nextcloud/dependabot/npm_and_yarn/js/webpack-4.8.3
Bump webpack from 4.8.2 to 4.8.3 in /js
2018-05-15 09:24:07 +02:00
dependabot[bot]
aa0d8b6026 Bump webpack from 4.8.2 to 4.8.3 in /js
Bumps [webpack](https://github.com/webpack/webpack) from 4.8.2 to 4.8.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.8.2...v4.8.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-14 22:14:18 +00:00
Julius Härtl
dd008f0895 Use single quotes and update krankerl.toml
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-12 13:19:03 +02:00
Julius Härtl
c4dfb75b3a Merge pull request #460 from nextcloud/scrutinizer-patch-1
Scrutinizer Auto-Fixes
2018-05-12 13:16:30 +02:00
Scrutinizer Auto-Fixer
b633d82c5e Scrutinizer Auto-Fixes
This commit consists of patches automatically generated for this project on https://scrutinizer-ci.com
2018-05-12 11:10:23 +00:00
Julius Härtl
08d9d51bea Update README.md 2018-05-12 12:49:14 +02:00
Julius Härtl
e21c12f23d Merge pull request #459 from nextcloud/dependabot/npm_and_yarn/js/webpack-tw-4.8.2
Update webpack requirement to ^4.8.2 in /js
2018-05-12 12:30:45 +02:00
Julius Härtl
101f20095d Ignore node global in eslint
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-12 12:24:01 +02:00
Julius Härtl
701b5c5a5b Add package-lock.json to repo
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-12 12:19:14 +02:00
Julius Härtl
e92c99fe22 Fix eslint errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-12 12:13:49 +02:00
Julius Härtl
893734dff9 Update makefile to use npm commands
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-12 12:06:45 +02:00
Julius Härtl
43babf82b0 Cleanup dependencies
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-12 12:03:47 +02:00
Julius Härtl
bd5ce84c65 Migrate to webpack 4.8 and use proper jquery timepicker
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-12 12:03:47 +02:00
dependabot[bot]
37851bad6f Update webpack requirement to ^4.8.2 in /js
Updates the requirements on [webpack](https://github.com/webpack/webpack) to permit the latest version.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/commits/v4.8.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-12 12:03:47 +02:00
Julius Härtl
13c7be9dc2 Merge pull request #453 from nextcloud/fix-di
Remove unused parameter that caused failures in card view
2018-05-12 11:58:50 +02:00
Nextcloud bot
2433703fa5 [tx-robot] updated from transifex 2018-05-12 00:19:57 +00:00
Julius Härtl
e320b52b48 Merge pull request #458 from nextcloud/dependabot/composer/jakub-onderka/php-parallel-lint-tw-1.0.0
Update jakub-onderka/php-parallel-lint requirement to ^1.0.0
2018-05-11 19:23:51 +02:00
Julius Härtl
73b91246e9 Delete _config.yml 2018-05-11 18:46:24 +02:00
dependabot[bot]
822cc1aaa5 Update jakub-onderka/php-parallel-lint requirement to ^1.0.0
Updates the requirements on [jakub-onderka/php-parallel-lint](https://github.com/JakubOnderka/PHP-Parallel-Lint) to permit the latest version.
- [Release notes](https://github.com/JakubOnderka/PHP-Parallel-Lint/releases)
- [Commits](https://github.com/JakubOnderka/PHP-Parallel-Lint/commits/v1.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-11 15:58:23 +00:00
Julius Härtl
83e62a9bc9 Delete issue_template.md
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-11 17:58:04 +02:00
Julius Härtl
4057be32e8 Merge pull request #457 from nextcloud/dependabot/composer/christophwurst/nextcloud-tw-13.0
Update christophwurst/nextcloud requirement to ^13.0
2018-05-11 17:56:52 +02:00
Julius Härtl
764a28a1dd Update issue templates 2018-05-11 17:55:51 +02:00
dependabot[bot]
5565589ebf Update christophwurst/nextcloud requirement to ^13.0
Updates the requirements on [christophwurst/nextcloud](https://github.com/ChristophWurst/nextcloud_composer) to permit the latest version.
- [Release notes](https://github.com/ChristophWurst/nextcloud_composer/releases)
- [Commits](https://github.com/ChristophWurst/nextcloud_composer/commits/13.0.2)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-05-11 15:29:31 +00:00
Julius Härtl
cd5d23bacc Remove unused parameter that caused failures in card view
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-11 08:48:56 +02:00
Nextcloud bot
b7bc38376f [tx-robot] updated from transifex 2018-05-10 00:20:04 +00:00
Nextcloud bot
3e0de1bfba [tx-robot] updated from transifex 2018-04-22 00:18:33 +00:00
Morris Jobke
8ddc21e403 Fix drone config
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-04-12 16:37:14 +02:00
Julius Härtl
9cf8ab1efb Merge pull request #410 from nextcloud/move-to-webpack
Move to webpack
2018-04-11 13:59:29 +02:00
Julius Härtl
6f254510c1 Fix eslint errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-04-11 13:00:22 +02:00
Julius Härtl
2cd5606d40 Fix jsbuild
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-04-11 12:57:31 +02:00
Julius Härtl
4f0c05f536 Fix js build in drone
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-04-11 11:54:37 +02:00
Julius Härtl
24f4f84eb6 Move to webpack
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-04-11 11:54:37 +02:00
Nextcloud bot
e94986744d [tx-robot] updated from transifex 2018-04-05 00:18:12 +00:00
Nextcloud bot
7b15c04976 [tx-robot] updated from transifex 2018-03-26 00:19:41 +00:00
Nextcloud bot
b9ff4ef305 [tx-robot] updated from transifex 2018-03-25 01:16:28 +00:00
Nextcloud bot
5d0173f755 [tx-robot] updated from transifex 2018-03-15 01:17:47 +00:00
Nextcloud bot
405f23f660 [tx-robot] updated from transifex 2018-03-14 01:17:53 +00:00
Nextcloud bot
6cefa20ec7 [tx-robot] updated from transifex 2018-03-13 01:18:32 +00:00
Nextcloud bot
20a2f53745 [tx-robot] updated from transifex 2018-03-12 01:19:05 +00:00
Nextcloud bot
bd7fdf7934 [tx-robot] updated from transifex 2018-03-10 01:18:11 +00:00
Nextcloud bot
8042d50d4c [tx-robot] updated from transifex 2018-03-09 01:19:11 +00:00
Nextcloud bot
2999d96a22 [tx-robot] updated from transifex 2018-03-06 01:19:05 +00:00
Nextcloud bot
9920546ec8 [tx-robot] updated from transifex 2018-03-05 01:19:10 +00:00
Nextcloud bot
eeceda539f [tx-robot] updated from transifex 2018-03-04 01:19:20 +00:00
Julius Härtl
ee262291ce Merge pull request #436 from nextcloud/fix-translations-dialog
Fix translations of the delete confirmation
2018-03-03 15:02:03 +01:00
Julius Härtl
858952a56f Fix translations of the delete confirmation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-03 14:09:21 +01:00
Julius Härtl
ad9ce6cd26 Merge pull request #432 from nextcloud/auto-remove-assignments
Auto remove assignments
2018-03-02 19:30:49 +01:00
Julius Härtl
d362e0ad0e No typehinting in deck yet
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 19:16:03 +01:00
Julius Härtl
31965bf40c Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 19:00:18 +01:00
Julius Härtl
691bbda056 Update view when removing sharees and track by correct property
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:54:16 +01:00
Julius Härtl
9b82779513 Remove deleted users from assignments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:54:16 +01:00
Julius Härtl
8cb92934b1 Merge pull request #428 from nextcloud/fix-assign-user-list
Fix assign user list
2018-03-02 17:52:54 +01:00
Julius Härtl
1b471b0fe8 Disable integration tests for now
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 16:14:39 +01:00
Nextcloud bot
537e9b35da [tx-robot] updated from transifex 2018-03-02 01:19:06 +00:00
Nextcloud bot
ad5967859e [tx-robot] updated from transifex 2018-03-01 01:18:59 +00:00
Julius Härtl
afa2d247aa Merge pull request #427 from nextcloud/workaround-delete-confirmation
Add confirmation dialog to delete options
2018-02-28 17:07:15 +01:00
Julius Härtl
76e3cc5061 Do not overwrite emtpy values
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-28 16:54:30 +01:00
Julius Härtl
8f5ded6a28 Track by correct property
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-28 16:49:00 +01:00
Julius Härtl
0e092d3495 Only return updated properties not resolvable ones
fixes #406

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-28 16:48:40 +01:00
Julius Härtl
f32721d1e6 Fix popover position of assigned users
fixes #385

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-28 12:10:05 +01:00
Julius Härtl
19a3466b18 Add confirmation dialog to delete options
this is only a temporary solution but it will probably safe some users from deleting their data by accident

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-28 10:01:39 +01:00
Julius Härtl
5d3f952d92 Merge pull request #423 from nextcloud/fix-userlist-limit
Force limit of users that do not match exactly
2018-02-25 10:40:44 +01:00
Nextcloud bot
d1b8e3cc5f [tx-robot] updated from transifex 2018-02-21 01:18:26 +00:00
Julius Härtl
efb7da6ca5 Force limit of users that do not match exactly
fixes #422

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-20 12:42:30 +01:00
Nextcloud bot
cc737cf250 [tx-robot] updated from transifex 2018-02-17 01:18:31 +00:00
Nextcloud bot
da373bafe0 [tx-robot] updated from transifex 2018-02-16 01:18:03 +00:00
Nextcloud bot
9e4d48ae36 [tx-robot] updated from transifex 2018-02-15 01:18:14 +00:00
Nextcloud bot
4d84d77d27 [tx-robot] updated from transifex 2018-02-14 01:18:02 +00:00
Nextcloud bot
0a82689284 [tx-robot] updated from transifex 2018-02-12 22:34:38 +00:00
Morris Jobke
a3e14ec732 Add l10n dir
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-12 23:28:17 +01:00
Morris Jobke
4a56995326 Fix tx config
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-12 22:57:14 +01:00
Nextcloud bot
eb262a13e4 [tx-robot] updated from transifex 2018-02-12 21:40:03 +00:00
Julius Härtl
21d84343ec Merge pull request #419 from nextcloud/unperl-app
Move transifex config for updated l10n script
2018-02-12 17:58:18 +01:00
Morris Jobke
431dfe3b15 Move transifex config for updated l10n script
See nextcloud/docker-ci#78 for details

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-12 16:54:50 +01:00
Julius Härtl
9bb474638d Update user list when acl is changed
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 09:28:08 +01:00
Julius Härtl
220adf708f Use actual acl list for assigning users
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 09:28:08 +01:00
Julius Härtl
f616f38e67 Fix bug when user selection was staying hidden
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 09:28:08 +01:00
Julius Härtl
8e51fdbb88 Only digest on card update not for every interval
and add various track by statements

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 09:27:22 +01:00
Nextcloud bot
d5bec8d19e [tx-robot] updated from transifex 2018-02-08 01:16:15 +00:00
Nextcloud bot
742c02cbbb [tx-robot] updated from transifex 2018-02-05 01:16:02 +00:00
Julius Härtl
27aa2adf0f Merge pull request #415 from nextcloud/add-homepage-389
Add Repo as homepage
2018-02-02 10:31:18 +01:00
Julius Härtl
79550fc843 Add Repo as homepage (fixes #389)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-01 23:28:18 +01:00
Nextcloud bot
ac982a72a4 [tx-robot] updated from transifex 2018-01-29 01:17:04 +00:00
Nextcloud bot
de0aeaa084 [tx-robot] updated from transifex 2018-01-24 01:16:50 +00:00
Nextcloud bot
e6f4929cea [tx-robot] updated from transifex 2018-01-23 01:17:07 +00:00
Nextcloud bot
f8fbcee618 [tx-robot] updated from transifex 2018-01-20 01:17:10 +00:00
Nextcloud bot
7ffe11e8cd [tx-robot] updated from transifex 2018-01-17 01:17:09 +00:00
Nextcloud bot
99fffe750d [tx-robot] updated from transifex 2018-01-16 01:17:11 +00:00
Nextcloud bot
ae4857b75e [tx-robot] updated from transifex 2018-01-15 01:16:37 +00:00
Nextcloud bot
27bab0ec4d [tx-robot] updated from transifex 2018-01-14 01:16:40 +00:00
Julius Härtl
8ca3e5d32e Bump drone images (#391)
* Bump drone images

Signed-off-by: Julius Härtl <jus@bitgrid.net>

* Use travis for codecov

Signed-off-by: Julius Härtl <jus@bitgrid.net>

* Just test against master in travis

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-13 12:26:27 +01:00
Julius Härtl
6227583917 Merge pull request #388 from cloud2018/translation
translate attributes in templates/part.card.php
2018-01-13 11:36:44 +01:00
cloud2018
5d10f834c5 translate attributes in templates/part.card.php
translate attributes title and placeholder in class "section-content card-details-assign-users" in templates/part.card.php
2018-01-12 21:38:47 +01:00
Julius Härtl
009734295c Add tests for stable13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-12 15:24:59 +01:00
Julius Härtl
74c7530a4f Bump maser branch version and nc dependencies
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-12 15:18:13 +01:00
321 changed files with 29781 additions and 3003 deletions

View File

@@ -5,10 +5,10 @@ clone:
pipeline: pipeline:
check-app-compatbility: check-app-compatbility:
image: nextcloudci/php5.6:php5.6-3 image: nextcloudci/php7.0:php7.0-17
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable15
- DB=sqlite - DB=sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -22,17 +22,52 @@ pipeline:
when: when:
matrix: matrix:
TESTS: check-app-compatbility TESTS: check-app-compatbility
signed-off-check: check-app-compatbility-14:
image: nextcloudci/php7.0:php7.0-2 image: nextcloudci/php7.0:php7.0-17
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
# Pre-setup steps
- 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 $APP_NAME $CORE_BRANCH $DB - bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server - cd ../server
- php ./build/signed-off-checker.php # Code checker
- ./occ app:check-code $APP_NAME -c strong-comparison
- ./occ app:check-code $APP_NAME -c deprecation
- cd apps/$APP_NAME/
when:
matrix:
TESTS: check-app-compatbility-14
check-app-compatbility-13:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=stable13
- DB=sqlite
commands:
# Pre-setup steps
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server
# Code checker
- ./occ app:check-code $APP_NAME -c strong-comparison
- ./occ app:check-code $APP_NAME -c deprecation
- cd apps/$APP_NAME/
when:
matrix:
TESTS: check-app-compatbility-13
signed-off-check:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=stable14
- DB=sqlite
commands:
- wget https://raw.githubusercontent.com/nextcloud/server/master/build/signed-off-checker.php
- php ./signed-off-checker.php
secrets: [ github_token ]
when: when:
matrix: matrix:
TESTS: signed-off-check TESTS: signed-off-check
@@ -40,7 +75,7 @@ pipeline:
image: nextcloudci/php5.6:php5.6-8 image: nextcloudci/php5.6:php5.6-8
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable13
- DB=sqlite - DB=sqlite
commands: commands:
- composer install - composer install
@@ -52,7 +87,7 @@ pipeline:
image: nextcloudci/php7.0:php7.0-17 image: nextcloudci/php7.0:php7.0-17
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
- composer install - composer install
@@ -64,7 +99,7 @@ pipeline:
image: nextcloudci/php7.1:php7.1-15 image: nextcloudci/php7.1:php7.1-15
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
- composer install - composer install
@@ -76,7 +111,7 @@ pipeline:
image: nextcloudci/php7.2:php7.2-9 image: nextcloudci/php7.2:php7.2-9
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
- composer install - composer install
@@ -84,11 +119,23 @@ pipeline:
when: when:
matrix: matrix:
TESTS: syntax-php7.2 TESTS: syntax-php7.2
syntax-php7.3:
image: nextcloudci/php7.3:php7.3-2
environment:
- APP_NAME=deck
- CORE_BRANCH=stable15
- DB=sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
when:
matrix:
TESTS: syntax-php7.3
php5.6: php5.6:
image: nextcloudci/php5.6:php5.6-8 image: nextcloudci/php5.6:php5.6-8
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable13
- DB=sqlite - DB=sqlite
commands: commands:
- apt update && apt-get -y install php5-xdebug - apt update && apt-get -y install php5-xdebug
@@ -99,14 +146,9 @@ pipeline:
- cd ../server/ - cd ../server/
- ./occ app:enable $APP_NAME - ./occ app:enable $APP_NAME
- cd apps/$APP_NAME - cd apps/$APP_NAME
- composer install
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml - phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml - phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
# Create coverage report
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t f6375299-4832-487e-b831-091772ab0384; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t f6375299-4832-487e-b831-091772ab0384; fi"
when: when:
matrix: matrix:
TESTS: php5.6 TESTS: php5.6
@@ -114,7 +156,7 @@ pipeline:
image: nextcloudci/php7.0:php7.0-17 image: nextcloudci/php7.0:php7.0-17
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -124,6 +166,7 @@ pipeline:
- php occ app:enable deck - php occ app:enable deck
- cd apps/$APP_NAME - cd apps/$APP_NAME
# Run phpunit tests # Run phpunit tests
- composer install
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml - phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml - phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
when: when:
@@ -133,7 +176,7 @@ pipeline:
image: nextcloudci/php7.1:php7.1-15 image: nextcloudci/php7.1:php7.1-15
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -142,6 +185,7 @@ pipeline:
- cd ../server/ - cd ../server/
- php occ app:enable deck - php occ app:enable deck
- cd apps/$APP_NAME - cd apps/$APP_NAME
- composer install
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml - phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml - phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
when: when:
@@ -151,7 +195,7 @@ pipeline:
image: nextcloudci/php7.2:php7.2-9 image: nextcloudci/php7.2:php7.2-9
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -160,16 +204,36 @@ pipeline:
- cd ../server/ - cd ../server/
- php occ app:enable deck - php occ app:enable deck
- cd apps/$APP_NAME - cd apps/$APP_NAME
- composer install
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml - phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml - phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
when: when:
matrix: matrix:
TESTS: php7.2 TESTS: php7.2
integration: php7.3:
image: nextcloudci/integration-php7.0:integration-php7.0-3 image: nextcloudci/php7.3:php7.3-2
environment: environment:
- APP_NAME=deck - APP_NAME=deck
- CORE_BRANCH=master - CORE_BRANCH=stable15
- DB=sqlite
commands:
# Pre-setup steps
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server/
- php occ app:enable deck
- cd apps/$APP_NAME
- composer install
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
when:
matrix:
TESTS: php7.3
integration:
image: nextcloudci/integration-php7.0:integration-php7.0-6
environment:
- APP_NAME=deck
- CORE_BRANCH=stable14
- DB=sqlite - DB=sqlite
commands: commands:
# Pre-setup steps # Pre-setup steps
@@ -193,28 +257,29 @@ pipeline:
jsbuild: jsbuild:
image: mhart/alpine-node:6.8.0 image: mhart/alpine-node:6.8.0
commands: commands:
- apk add --no-cache git - apk add --no-cache make
- cd js - make build-js
- npm install --deps
- ./node_modules/.bin/bower --allow-root install
when: when:
matrix: matrix:
TESTS: jsbuild TESTS: jsbuild
matrix: matrix:
include: include:
- TESTS: check-app-compatbility - TESTS: check-app-compatbility-13
- TESTS: check-app-compatbility-14
- TESTS: signed-off-check - TESTS: signed-off-check
- TESTS: syntax-php5.6 - TESTS: syntax-php5.6
- TESTS: syntax-php7.0 - TESTS: syntax-php7.0
- TESTS: syntax-php7.1 - TESTS: syntax-php7.1
- TESTS: syntax-php7.2 - TESTS: syntax-php7.2
- TESTS: syntax-php7.3
- TESTS: php5.6 - TESTS: php5.6
- TESTS: php7.0 - TESTS: php7.0
- TESTS: php7.1 - TESTS: php7.1
- TESTS: php7.2 - TESTS: php7.2
- TESTS: php7.3
- TESTS: eslint - TESTS: eslint
- TESTS: jsbuild - TESTS: jsbuild
- TESTS: integration #- TESTS: integration
branches: [ master, stable* ] branches: [ master, stable* ]

View File

@@ -1,5 +1,6 @@
/js/tests/* /js/tests/*
/js/vendor/* /js/vendor/*
/js/legacy/*
/js/node_modules/* /js/node_modules/*
/js/public/* /js/public/*
/karma.conf.js /karma.conf.js

View File

@@ -1,14 +1,15 @@
root: true root: true
extends: extends:
- eslint:recommended - eslint:recommended
env: env:
browser: true browser: true
amd: true amd: true
es6: true
globals: globals:
global: false
app: false app: false
angular: false angular: false
$: false $: false
@@ -21,6 +22,10 @@ globals:
Clipboard: false Clipboard: false
oc_defaults: false oc_defaults: false
parserOptions:
ecmaVersion: 6
sourceType: "module"
rules: rules:
curly: error curly: error
eqeqeq: ["error", "smart"] eqeqeq: ["error", "smart"]
@@ -29,6 +34,7 @@ rules:
no-fallthrough: error no-fallthrough: error
no-mixed-spaces-and-tabs: error no-mixed-spaces-and-tabs: error
no-unused-vars: warn no-unused-vars: warn
no-useless-escape: warn
no-use-before-define: error no-use-before-define: error
semi: ["error", "always"] semi: ["error", "always"]
indent: indent:

View File

@@ -1,79 +1,97 @@
### Steps to reproduce ---
1. name: Bug report
2. about: Create a report to help us improve
3.
---
### Expected behaviour
Tell us what should happen **Describe the bug**
A clear and concise description of what the bug is.
### Actual behaviour
Tell us what happens instead **To Reproduce**
Steps to reproduce the behavior:
### Server configuration 1. Go to '...'
<!-- 2. Click on '....'
You can use the Issue Template application to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate 3. Scroll down to '....'
--> 4. See error
**Operating system**: **Expected behavior**
A clear and concise description of what you expected to happen.
**Web server:**
**Screenshots**
**Database:** If applicable, add screenshots to help explain your problem.
**PHP version:** **Client details:**
- OS: [e.g. iOS]
**Nextcloud version:** (see Nextcloud admin page) - Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Where did you install Nextcloud from:** - Device: [e.g. iPhone6, desktop]
**Signing status:** <details>
<summary>Server details</summary>
``` <!--
Login as admin user into your Nextcloud and access You can use the Issue Template application to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
http://example.com/index.php/settings/integrity/failed -->
paste the results here.
``` **Operating system**:
**List of activated apps:** **Web server:**
``` **Database:**
If you have access to your command line run e.g.:
sudo -u www-data php occ app:list **PHP version:**
from within your Nextcloud installation folder
``` **Nextcloud version:** (see Nextcloud admin page)
**Nextcloud configuration:** **Where did you install Nextcloud from:**
``` **Signing status:**
If you have access to your command line run e.g.:
sudo -u www-data php occ config:list system ```
from within your Nextcloud installation folder Login as admin user into your Nextcloud and access
http://example.com/index.php/settings/integrity/failed
or paste the results here.
```
Insert your config.php content here
Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …) **List of activated apps:**
```
```
**Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/... If you have access to your command line run e.g.:
sudo -u www-data php occ app:list
### Client configuration from within your Nextcloud installation folder
**Browser:** ```
**Operating system:** **Nextcloud configuration:**
### Logs ```
If you have access to your command line run e.g.:
#### Nextcloud log (data/nextcloud.log) sudo -u www-data php occ config:list system
``` from within your Nextcloud installation folder
Insert your Nextcloud log here
``` or
#### Browser log Insert your config.php content here
``` Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …)
Insert your browser log here, this could for example include: ```
a) The javascript console log **Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/...
b) The network log
c) ... </details>
```
<details>
<summary>Logs</summary>
#### Nextcloud log (data/nextcloud.log)
```
Insert your Nextcloud log here
```
#### Browser log
```
Insert your browser log here, this could for example include:
a) The javascript console log
b) The network log
c) ...
```
</details>

View File

@@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest an idea for this project
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

17
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,17 @@
* Resolves: # <!-- related github issue -->
* Target version: master
### Summary
### TODO
- [ ] ...
### Checklist
- [ ] Code is properly formatted
- [ ] Sign-off message is added to all commits
- [ ] Tests (unit, integration, api and/or acceptance) are included
- [ ] Documentation (manuals or wiki) has been updated or is not required

24
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,24 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- "1. to develop"
- "2. developing"
- "3. to review"
- "discussion"
- "bug"
- "enhancement"
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.

3
.gitignore vendored
View File

@@ -1,9 +1,10 @@
js/node_modules/* js/node_modules/*
js/vendor/ js/vendor/
js/public/ js/public/
js/package-lock.json js/build/
build/ build/
css/style.css css/style.css
css/vendor.css
tests/integration/vendor/ tests/integration/vendor/
tests/integration/composer.lock tests/integration/composer.lock
vendor/ vendor/

View File

@@ -1,41 +1,36 @@
language: php language: php
dist: trusty
sudo: required
services: services:
- mysql - mysql
php: php:
- 5.6
- 7.0 - 7.0
- 7.1 - 7.1
- 7.2 - 7.2
- 7.3
env: env:
- CORE_BRANCH=master DB=mysql - CORE_BRANCH=stable14 DB=mysql
- CORE_BRANCH=stable12 DB=mysql
matrix:
exclude:
- php: 7.2
env: CORE_BRANCH=stable12 DB=mysql
before_install: before_install:
- wget https://phar.phpunit.de/phpunit-5.7.phar - wget https://phar.phpunit.de/phpunit-5.7.phar
- chmod +x phpunit-5.7.phar - chmod +x phpunit-5.7.phar
- mkdir bin - mkdir bin
- sudo mv phpunit-5.7.phar bin/phpunit - mv phpunit-5.7.phar bin/phpunit
- export PATH="$PWD/bin:$PATH" - export PATH="$PWD/bin:$PATH"
- phpunit --version - phpunit --version
- 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 - ./occ app:enable deck
- php -S localhost:8080 &
before_script: before_script:
- cd apps/deck - cd apps/deck
script: script:
- composer install
- make test-unit - make test-unit
after_success:
- bash <(curl -s https://codecov.io/bash)
after_failure: after_failure:
- cat ../../data/nextcloud.log - cat ../../data/nextcloud.log

View File

@@ -3,7 +3,7 @@ host = https://www.transifex.com
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
[nextcloud.deck] [nextcloud.deck]
file_filter = <lang>/deck.po file_filter = translationfiles/<lang>/deck.po
source_file = templates/deck.pot source_file = translationfiles/templates/deck.pot
source_lang = en source_lang = en
type = PO type = PO

View File

@@ -1,6 +1,81 @@
# 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.
## 0.5.2 - 2018-12-20
### Fixed
- Mark notification as read if a card with duedate gets archived
- Use proper timezone and locale format for due date activities
- Various translation fixes and updates
- Check group limit properly
- Fix comment activities on Nextcloud 15
- Fix issues with Edge
- API: Fix numeric types that were returned as strings
- API: Fix If-Modified-Since header parsing
## 0.5.1 - 2018-12-05
### Added
- Separate settings for description changes in activity
- Less verbose description change activities
- Use server settings to restrict sharing to groups
- Add setting to exclude groups from creating their own boards
### Fixed
- Fix issue when using a separate table prefix @bpcurse
- Fix invalid activity parameters being published
- Wording fixes @cloud2018
- Improve loading performance by removing unused activity preloading
- Fix timestamp issues in deleted items tab
- Remember show state of the board navigation @weeman1337
- Add optional classes for custom styling @tinko92
- Fix missing details on activity emails
- Fix unrelated comments in board activity list
- Fix search not working properly
- Trigger comment notification on update only
## 0.5.0 - 2018-11-15
### Added
- Activity stream for board and cards
- Comments on cards
- Use users locale format on date picker
- Compact display mode
- Card title inline editing
- REST API
- Empty content view for board lists
- Undo for card and stack deletion
- Show tag name on board
- Notify users about card assignments
- Add shortcut to assign a card to yourself
- Improved view for printing
- Support for Nextcloud 15
### Fixed
- Accesibility improvements
- Don't allow empty card titles
- Improved checkbox handling in markdown
## 0.4.0 - 2018-07-11
### Added
- Attach files to cards
- Embed attachments into the card description
- Color picker to use any color value for board and labels
- Support for checkboxes inside the description
- occ command to export user data as JSON
### Fixed
- Improve frontend data management
- Fix bug the user list being empty on some occasions
## 0.3.0 - 2018-01-12 ## 0.3.0 - 2018-01-12
### Added ### Added

View File

@@ -12,26 +12,30 @@ sign_dir=$(build_dir)/sign
cert_dir=$(HOME)/.nextcloud/certificates cert_dir=$(HOME)/.nextcloud/certificates
default: build default: package
clean-build: clean-build:
rm -rf $(build_dir) rm -rf $(build_dir)
clean-dist: clean-dist:
rm -rf js/node_modules rm -rf js/node_modules
rm -rf js/vendor
install-deps: install-deps: install-deps-js
cd js && npm install --deps composer install
cd js && ./node_modules/.bin/bower install
build: build-js install-deps-js:
cd js && npm install
build-js: install-deps build: install-deps build-js
cd js && ./node_modules/.bin/grunt build
build-js: install-deps-js
cd js && npm run build
build-js-dev: install-deps
cd js && npm run dev
watch: watch:
cd js && ./node_modules/.bin/grunt watch cd js && npm run watch
# appstore: clean install-deps # appstore: clean install-deps
appstore: clean-build build appstore: clean-build build
@@ -94,3 +98,5 @@ test-integration:
test-js: install-deps test-js: install-deps
cd js && run test cd js && run test
package:
krankerl package

View File

@@ -1,6 +1,6 @@
# Deck # Deck
[![Build Status](https://travis-ci.org/nextcloud/deck.svg?branch=master)](https://travis-ci.org/nextcloud/deck) [![CodeCov](https://codecov.io/github/nextcloud/deck/coverage.svg?branch=master)](https://codecov.io/github/nextcloud/deck) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nextcloud/deck/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [![Dependency Status](https://www.versioneye.com/user/projects/58ad558f4ca76f004ed475b3/badge.svg?style=flat)](https://www.versioneye.com/user/projects/58ad558f4ca76f004ed475b3) [![#nextcloud-deck](https://img.shields.io/badge/IRC-%23nextcloud--deck%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-deck) [![Build Status](https://travis-ci.org/nextcloud/deck.svg?branch=master)](https://travis-ci.org/nextcloud/deck) [![CodeCov](https://codecov.io/github/nextcloud/deck/coverage.svg?branch=master)](https://codecov.io/github/nextcloud/deck) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e403f723f42a4abd93b2cfe36cbd7eee)](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=nextcloud/deck&amp;utm_campaign=Badge_Grade) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nextcloud/deck/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [![#nextcloud-deck](https://img.shields.io/badge/IRC-%23nextcloud--deck%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-deck)
Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud. Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.
@@ -9,22 +9,17 @@ Deck is a kanban style organization tool aimed at personal planning and project
- :page_facing_up: Write down additional notes in markdown - :page_facing_up: Write down additional notes in markdown
- :bookmark: Assign labels for even better organization - :bookmark: Assign labels for even better organization
- :busts_in_silhouette: Share with your team, friends or family - :busts_in_silhouette: Share with your team, friends or family
- :paperclip: Attach files and embed them in your markdown description
- :speech_balloon: Discuss with your team using comments
- :zap: Keep track of changes in the activity stream
- :rocket: Get your project organized - :rocket: Get your project organized
![Deck - Manage cards on your board](https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.png) ![Deck - Manage cards on your board](https://download.bitgrid.net/nextcloud/deck/screenshots/Deck.png)
### Planned features
- :file_folder: Attach files directly from your Nextcloud
- :earth_africa: Share boards with the public
- :calendar: Integration with Nextcloud calendar and other apps
- :speech_balloon: Comments integration
- :exclamation: Checkout the project milestones for more ...
## Installation/Update ## Installation/Update
This app is supposed to work on Nextcloud version 11 or later. This app is supposed to work on the two latest Nextcloud versions.
### Install latest release ### Install latest release
@@ -38,10 +33,10 @@ If you want to run the latest development version from git source, you need to c
git clone https://github.com/nextcloud/deck.git git clone https://github.com/nextcloud/deck.git
cd deck cd deck
make install-deps make install-deps
make make build
``` ```
Please make sure you have installed the following dependencies: `make, which, tar, npm, curl` Please make sure you have installed the following dependencies: `make, which, tar, npm, curl, composer`
### Install the nightly builds ### Install the nightly builds
@@ -55,21 +50,22 @@ Nothing to prepare, just dig into the code.
### JavaScript ### JavaScript
When `'debug'=>true` is set in your config.php files will get loaded automatically. Otherwise you need to ensure that `public/app.js` is generated by running `make` or `make watch` to regenerate it on every change. Deck requires running a `make build-js` to install npm dependencies and build the JavaScript code using webpack. While developing you can also use `make watch` to rebuild everytime the code changes.
Make sure you have installed the dependencies with ```make install-deps```.
### Running tests ### Running tests
You can use the provided Makefile to run all tests by using: You can use the provided Makefile to run all tests by using:
make test make test
### Documentation
The documentation for our REST API can be found at https://deck.readthedocs.io/en/latest/API/
## Contribution Guidelines ## Contribution Guidelines
Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other. Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
For more information please review the [guidelines for contributing](https://github.com/nextcloud/server/blob/master/CONTRIBUTING.md) to this repository. For more information please review the [guidelines for contributing](https://github.com/nextcloud/server/blob/master/.github/CONTRIBUTING.md) to this repository.
### Apply a license ### Apply a license

View File

@@ -1,2 +0,0 @@
theme: jekyll-theme-cayman
site: https://deck-app.com

View File

@@ -21,6 +21,14 @@
* *
*/ */
if ((@include_once __DIR__ . '/../vendor/autoload.php')===false) {
throw new Exception('Cannot include autoload. Did you run install dependencies using composer?');
}
$app = new \OCA\Deck\AppInfo\Application(); $app = new \OCA\Deck\AppInfo\Application();
$app->registerNavigationEntry(); $app->registerNavigationEntry();
$app->registerNotifications(); $app->registerNotifications();
$app->registerCommentsEntity();
/** Load activity style global so it is availabile in the activity app as well */
\OC_Util::addStyle('deck', 'activity');

View File

@@ -5,20 +5,20 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
namespace OCA\Deck\AppInfo; namespace OCA\Deck\AppInfo;
@@ -28,4 +28,4 @@ use OCP\AppFramework\App;
/** /**
* Additional autoloader registration, e.g. registering composer autoloaders * Additional autoloader registration, e.g. registering composer autoloaders
*/ */
// require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/../vendor/autoload.php';

View File

@@ -46,6 +46,13 @@
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>
</field> </field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
</declaration> </declaration>
</table> </table>
<table> <table>
@@ -77,6 +84,21 @@
<length>8</length> <length>8</length>
<notnull>false</notnull> <notnull>false</notnull>
</field> </field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<index> <index>
<name>deck_stacks_board_id_index</name> <name>deck_stacks_board_id_index</name>
<field> <field>
@@ -113,6 +135,11 @@
<type>clob</type> <type>clob</type>
<notnull>false</notnull> <notnull>false</notnull>
</field> </field>
<field>
<name>description_prev</name>
<type>clob</type>
<notnull>false</notnull>
</field>
<field> <field>
<name>stack_id</name> <name>stack_id</name>
<type>integer</type> <type>integer</type>
@@ -133,6 +160,12 @@
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>
</field> </field>
<field>
<name>last_editor</name>
<type>text</type>
<notnull>false</notnull>
<length>64</length>
</field>
<field> <field>
<name>created_at</name> <name>created_at</name>
<type>integer</type> <type>integer</type>
@@ -167,6 +200,14 @@
<type>boolean</type> <type>boolean</type>
<default>false</default> <default>false</default>
</field> </field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<index> <index>
<name>deck_cards_stack_id_index</name> <name>deck_cards_stack_id_index</name>
<field> <field>
@@ -198,12 +239,6 @@
<autoincrement>1</autoincrement> <autoincrement>1</autoincrement>
<length>4</length> <length>4</length>
</field> </field>
<field>
<name>title</name>
<type>text</type>
<notnull>true</notnull>
<length>100</length>
</field>
<field> <field>
<name>card_id</name> <name>card_id</name>
<type>integer</type> <type>integer</type>
@@ -218,12 +253,12 @@
</field> </field>
<field> <field>
<name>data</name> <name>data</name>
<type>clob</type> <type>text</type>
</field> </field>
<field> <field>
<name>last_modified</name> <name>last_modified</name>
<type>integer</type> <type>integer</type>
<default></default> <default/>
<length>8</length> <length>8</length>
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>
@@ -231,7 +266,21 @@
<field> <field>
<name>created_at</name> <name>created_at</name>
<type>integer</type> <type>integer</type>
<default></default> <default/>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>created_by</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length> <length>8</length>
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>

View File

@@ -11,29 +11,56 @@
- 📄 Write down additional notes in markdown - 📄 Write down additional notes in markdown
- 🔖 Assign labels for even better organization - 🔖 Assign labels for even better organization
- 👥 Share with your team, friends or family - 👥 Share with your team, friends or family
- 📎 Attach files and embed them in your markdown description
- 💬 Discuss with your team using comments
- ⚡ Keep track of changes in the activity stream
- 🚀 Get your project organized - 🚀 Get your project organized
</description> </description>
<version>0.3.0</version> <version>0.5.2</version>
<licence>agpl</licence> <licence>agpl</licence>
<author>Julius Härtl</author> <author>Julius Härtl</author>
<namespace>Deck</namespace> <namespace>Deck</namespace>
<types>
<logging/>
</types>
<category>organization</category> <category>organization</category>
<category>office</category> <category>office</category>
<website>https://github.com/nextcloud/deck</website>
<bugs>https://github.com/nextcloud/deck/issues</bugs> <bugs>https://github.com/nextcloud/deck/issues</bugs>
<repository type="git">https://github.com/nextcloud/deck.git</repository> <repository type="git">https://github.com/nextcloud/deck.git</repository>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.png</screenshot> <screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/0.5/deck-notifications.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Details.png</screenshot> <screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/0.5/deck-comment2.png</screenshot>
<dependencies> <dependencies>
<nextcloud min-version="12" max-version="13" /> <php min-version="5.6"/>
<database min-version="9.4">pgsql</database>
<database>sqlite</database>
<database min-version="5.5">mysql</database>
<nextcloud min-version="13" max-version="15" />
</dependencies> </dependencies>
<background-jobs> <background-jobs>
<job>OCA\Deck\Cron\DeleteCron</job> <job>OCA\Deck\Cron\DeleteCron</job>
<job>OCA\Deck\Cron\ScheduledNotifications</job> <job>OCA\Deck\Cron\ScheduledNotifications</job>
<job>OCA\Deck\Cron\CardDescriptionActivity</job>
</background-jobs> </background-jobs>
<repair-steps> <repair-steps>
<post-migration> <post-migration>
<step>OCA\Deck\Migration\UnknownUsers</step> <step>OCA\Deck\Migration\UnknownUsers</step>
</post-migration> </post-migration>
</repair-steps> </repair-steps>
<commands>
<command>OCA\Deck\Command\UserExport</command>
</commands>
<activity>
<settings>
<setting>OCA\Deck\Activity\Setting</setting>
<setting>OCA\Deck\Activity\DescriptionSetting</setting>
</settings>
<filters>
<filter>OCA\Deck\Activity\Filter</filter>
</filters>
<providers>
<provider>OCA\Deck\Activity\DeckProvider</provider>
</providers>
</activity>
</info> </info>

View File

@@ -3,28 +3,32 @@
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net> * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
* *
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* @author Ryan Fletcher <ryan.fletcher@codepassion.ca>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
return [ return [
'routes' => [ 'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'Config#get', 'url' => '/config', 'verb' => 'GET'],
['name' => 'Config#setValue', 'url' => '/config/{key}', 'verb' => 'POST'],
// boards // boards
['name' => 'board#index', 'url' => '/boards', 'verb' => 'GET'], ['name' => 'board#index', 'url' => '/boards', 'verb' => 'GET'],
['name' => 'board#create', 'url' => '/boards', 'verb' => 'POST'], ['name' => 'board#create', 'url' => '/boards', 'verb' => 'POST'],
@@ -43,6 +47,7 @@ return [
['name' => 'stack#update', 'url' => '/stacks/{stackId}', 'verb' => 'PUT'], ['name' => 'stack#update', 'url' => '/stacks/{stackId}', 'verb' => 'PUT'],
['name' => 'stack#reorder', 'url' => '/stacks/{stackId}/reorder', 'verb' => 'PUT'], ['name' => 'stack#reorder', 'url' => '/stacks/{stackId}/reorder', 'verb' => 'PUT'],
['name' => 'stack#delete', 'url' => '/stacks/{stackId}', 'verb' => 'DELETE'], ['name' => 'stack#delete', 'url' => '/stacks/{stackId}', 'verb' => 'DELETE'],
['name' => 'stack#deleted', 'url' => '/{boardId}/stacks/deleted', 'verb' => 'GET'],
['name' => 'stack#archived', 'url' => '/stacks/{boardId}/archived', 'verb' => 'GET'], ['name' => 'stack#archived', 'url' => '/stacks/{boardId}/archived', 'verb' => 'GET'],
// cards // cards
@@ -50,6 +55,7 @@ return [
['name' => 'card#create', 'url' => '/cards', 'verb' => 'POST'], ['name' => 'card#create', 'url' => '/cards', 'verb' => 'POST'],
['name' => 'card#update', 'url' => '/cards/{cardId}', 'verb' => 'PUT'], ['name' => 'card#update', 'url' => '/cards/{cardId}', 'verb' => 'PUT'],
['name' => 'card#delete', 'url' => '/cards/{cardId}', 'verb' => 'DELETE'], ['name' => 'card#delete', 'url' => '/cards/{cardId}', 'verb' => 'DELETE'],
['name' => 'card#deleted', 'url' => '/{boardId}/cards/deleted', 'verb' => 'GET'],
['name' => 'card#rename', 'url' => '/cards/{cardId}/rename', 'verb' => 'PUT'], ['name' => 'card#rename', 'url' => '/cards/{cardId}/rename', 'verb' => 'PUT'],
['name' => 'card#reorder', 'url' => '/cards/{cardId}/reorder', 'verb' => 'PUT'], ['name' => 'card#reorder', 'url' => '/cards/{cardId}/reorder', 'verb' => 'PUT'],
['name' => 'card#archive', 'url' => '/cards/{cardId}/archive', 'verb' => 'PUT'], ['name' => 'card#archive', 'url' => '/cards/{cardId}/archive', 'verb' => 'PUT'],
@@ -59,10 +65,58 @@ return [
['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'], ['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'],
['name' => 'card#unassignUser', 'url' => '/cards/{cardId}/assign/{userId}', 'verb' => 'DELETE'], ['name' => 'card#unassignUser', 'url' => '/cards/{cardId}/assign/{userId}', 'verb' => 'DELETE'],
['name' => 'attachment#getAll', 'url' => '/cards/{cardId}/attachments', 'verb' => 'GET'],
['name' => 'attachment#create', 'url' => '/cards/{cardId}/attachment', 'verb' => 'POST'],
['name' => 'attachment#display', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'GET'],
['name' => 'attachment#update', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'PUT'],
// also allow to use POST for updates so we can properly access files when using application/x-www-form-urlencoded
['name' => 'attachment#update', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'POST'],
['name' => 'attachment#delete', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'DELETE'],
['name' => 'attachment#restore', 'url' => '/cards/{cardId}/attachment/{attachmentId}/restore', 'verb' => 'GET'],
// labels // labels
['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'], ['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'],
['name' => 'label#update', 'url' => '/labels/{labelId}', 'verb' => 'PUT'], ['name' => 'label#update', 'url' => '/labels/{labelId}', 'verb' => 'PUT'],
['name' => 'label#delete', 'url' => '/labels/{labelId}', 'verb' => 'DELETE'], ['name' => 'label#delete', 'url' => '/labels/{labelId}', 'verb' => 'DELETE'],
// api
['name' => 'board_api#index', 'url' => '/api/v1.0/boards', 'verb' => 'GET'],
['name' => 'board_api#get', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'GET'],
['name' => 'board_api#create', 'url' => '/api/v1.0/boards', 'verb' => 'POST'],
['name' => 'board_api#delete', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'DELETE'],
['name' => 'board_api#update', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'PUT'],
['name' => 'board_api#undo_delete', 'url' => '/api/v1.0/boards/{boardId}/undo_delete', 'verb' => 'POST'],
['name' => 'stack_api#index', 'url' => '/api/v1.0/boards/{boardId}/stacks', 'verb' => 'GET'],
['name' => 'stack_api#getArchived', 'url' => '/api/v1.0/boards/{boardId}/stacks/archived', 'verb' => 'GET'],
['name' => 'stack_api#get', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'GET'],
['name' => 'stack_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks', 'verb' => 'POST'],
['name' => 'stack_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'PUT'],
['name' => 'stack_api#delete', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'DELETE'],
['name' => 'card_api#get', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'GET'],
['name' => 'card_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards', 'verb' => 'POST'],
['name' => 'card_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'PUT'],
['name' => 'card_api#assignLabel', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel', 'verb' => 'PUT'],
['name' => 'card_api#removeLabel', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/removeLabel', 'verb' => 'PUT'],
['name' => 'card_api#assignUser', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignUser', 'verb' => 'PUT'],
['name' => 'card_api#unassignUser', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser', 'verb' => 'PUT'],
['name' => 'card_api#reorder', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/reorder', 'verb' => 'PUT'],
['name' => 'card_api#delete', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'DELETE'],
['name' => 'label_api#get', 'url' => '/api/v1.0/boards/{boardId}/labels/{labelId}', 'verb' => 'GET'],
['name' => 'label_api#create', 'url' => '/api/v1.0/boards/{boardId}/labels', 'verb' => 'POST'],
['name' => 'label_api#update', 'url' => '/api/v1.0/boards/{boardId}/labels/{labelId}', 'verb' => 'PUT'],
['name' => 'label_api#delete', 'url' => '/api/v1.0/boards/{boardId}/labels/{labelId}', 'verb' => 'DELETE'],
['name' => 'attachment_api#getAll', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'GET'],
['name' => 'attachment_api#display', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'GET'],
['name' => 'attachment_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'POST'],
['name' => 'attachment_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'PUT'],
['name' => 'attachment_api#delete', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'DELETE'],
['name' => 'attachment_api#restore', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}/restore', 'verb' => 'PUT'],
['name' => 'board_api#preflighted_cors', 'url' => '/api/v1.0/{path}','verb' => 'OPTIONS', 'requirements' => ['path' => '.+']],
] ]
]; ];

View File

@@ -8,9 +8,12 @@
"email": "jus@bitgrid.net" "email": "jus@bitgrid.net"
} }
], ],
"require": {}, "require": {
"cogpowered/finediff": "0.3.*"
},
"require-dev": { "require-dev": {
"christophwurst/nextcloud": "^12.0", "roave/security-advisories": "dev-master",
"jakub-onderka/php-parallel-lint": "^0.9.2" "christophwurst/nextcloud": "^14.0",
"jakub-onderka/php-parallel-lint": "^1.0.0"
} }
} }

28
css/activity.css Normal file
View File

@@ -0,0 +1,28 @@
.activitymessage .visualdiff ins {
background-color: rgba(70, 186, 97, 0.2);
text-decoration: none;
}
.activitymessage .visualdiff del {
background-color: rgba(233, 50, 45, 0.2);
text-decoration: none;
}
.activitymessage .visualdiff {
overflow: scroll;
max-height: 200px;
}
.activityTabView .avatardiv-container {
display: inline-block;
bottom: -3px;
margin-left: 3px;
}
.activityTabView .avatar-name-wrapper {
font-weight: bold;
}
.activityTabView .activitysubject a {
font-weight: bold;
}

43
css/animations.scss Normal file
View File

@@ -0,0 +1,43 @@
/*
* @copyright Copyright (c) 2018 Michael Weimann <mail@michael-weimann.eu>
*
* @author 2018 Michael Weimann <mail@michael-weimann.eu>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
.compact-item.ng-enter,
.compact-item.ng-leave {
overflow: hidden;
transition: all 250ms linear;
}
.compact-item.ng-enter {
max-height: 0;
&.ng-enter-active {
max-height: 50px;
}
}
.compact-item.ng-leave {
max-height: 50px;
&.ng-leave-active {
max-height: 0;
}
}

77
css/autocomplete.scss Normal file
View File

@@ -0,0 +1,77 @@
/**
* based upon apps/comments/js/vendor/At.js/dist/css/jquery.atwho.css,
* only changed colors and font-weight
*/
.atwho-view {
position:absolute;
top: 0;
left: 0;
display: none;
margin-top: 18px;
background: var(--color-main-background);
color: var(--color-main-text);
border: 1px solid var(--color-border);
border-radius: var(--border-radius);
box-shadow: 0 0 5px var(--color-box-shadow);
min-width: 120px;
z-index: 11110 !important;
}
.atwho-view .atwho-header {
padding: 5px;
margin: 5px;
cursor: pointer;
border-bottom: solid 1px var(--color-border);
color: var(--color-main-text);
font-size: 11px;
font-weight: bold;
}
.atwho-view .atwho-header .small {
color: var(--color-main-text);
float: right;
padding-top: 2px;
margin-right: -5px;
font-size: 12px;
font-weight: normal;
}
.atwho-view .atwho-header:hover {
cursor: default;
}
.atwho-view .cur {
background: var(--color-primary);
color: var(--color-primary-text);
}
.atwho-view .cur small {
color: var(--color-primary-text);
}
.atwho-view strong {
color: var(--color-main-text);
font-weight: normal;
}
.atwho-view .cur strong {
color: var(--color-primary-text);
font-weight: normal;
}
.atwho-view ul {
/* width: 100px; */
list-style:none;
padding:0;
margin:auto;
max-height: 200px;
overflow-y: auto;
}
.atwho-view ul li {
display: block;
padding: 5px 10px;
border-bottom: 1px solid var(--color-border);
cursor: pointer;
}
.atwho-view small {
font-size: smaller;
color: var(--color-main-text);
font-weight: normal;
}

50
css/comp-13.scss Normal file
View File

@@ -0,0 +1,50 @@
#content-wrapper #content {
height: 100%;
}
#app-content {
flex-grow: 1;
height: 100%;
&.details-visible {
margin-right: 500px;
}
}
#app-sidebar {
right: -500px;
max-width: 100%;
width: 500px;
display:flex;
flex-direction: column;
z-index: 1000;
&.details-visible {
right: 0;
}
}
#content[class*='app-'] * {
box-sizing: border-box;
}
body:not(.snapjs-left) {
.app-navigation-hide {
#app-content {
margin-left: 0 !important;
}
#app-navigation {
display: none;
}
}
}
#commentsTabView .newCommentForm .message {
width: 100%;
margin-left: 0;
padding-right: 0;
display: block;
}
#commentsTabView .comment {
margin-bottom: 0;
}

41
css/compact-mode.scss Normal file
View File

@@ -0,0 +1,41 @@
/*
* @copyright Copyright (c) 2018 Michael Weimann <mail@michael-weimann.eu>
*
* @author 2018 Michael Weimann <mail@michael-weimann.eu>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
.compact-mode {
.card {
margin: $compact-board-item-margin;
&:last-child {
margin: $compact-board-last-item-margin;
}
}
.stack {
.as-sortable-placeholder {
margin: $compact-board-item-margin;
&:last-child {
margin: $compact-board-last-item-margin;
}
}
}
}

View File

@@ -34,9 +34,37 @@
} }
.icon-home { .icon-home {
background-image: url('../../../core/img/places/home.svg'); background-image: var(--icon-home-000, url('../../../core/img/places/home.svg'));
}
.icon-description {
background-image: var(--icon-text-000, url('../img/description.svg'));
} }
.icon-badge { .icon-badge {
background-image: url('../../../core/img/places/calendar-dark.svg'); background-image: url('../img/calendar-dark.svg');
} }
.icon-toggle-compact-collapsed {
background-image: url('../img/toggle-view-expand.svg');
}
.icon-toggle-compact-expanded {
background-image: url('../img/toggle-view-collapse.svg');
}
@if mixin-exists('icon-black-white') {
@include icon-black-white('deck', 'deck', 1);
@include icon-black-white('archive', 'deck', 1);
.icon-toggle-compact-collapsed {
@include icon-color('toggle-view-expand', 'deck', $color-black);
}
.icon-toggle-compact-expanded {
@include icon-color('toggle-view-collapse', 'deck', $color-black);
}
.icon-activity {
@include icon-color('activity-dark', 'activity', $color-black);
}
}

90
css/print.scss Normal file
View File

@@ -0,0 +1,90 @@
@media print {
/* hide stuff */
#body-user {
#header,
div#app-navigation,
div.board-header-controls,
#app-navigation-toggle,
#app-navigation-toggle-custom,
div#controls.ng-scope div.crumb:not(.title),
div#controls.ng-scope div.crumb a.bullet,
a.ng-binding + a,
div.card.create,
button.card-options {
display: none !important;
}
#content {
margin: 0;
padding: 0;
}
#app-content {
margin: 0 !important;
}
}
div#app-navigation-toggle.icon-menu {
display:block;
width:0px;
height:0px;
background:none;
}
/* title */
div#controls.ng-scope {padding-left:20px;}
div#controls.ng-scope div.crumb.title {
display:inline;
font-size: 2em;
line-height:2.5em;
background:none;
}
div#controls.ng-scope div.crumb.title a.ng-binding {
color:#000;
opacity:1;
}
/*Due, assigned-users and description*/
div.card-controls {
flex-direction:row;
flex-wrap:wrap;
}
div.card-controls i.icon.icon-filetype-text {background:none;}
div.card-controls i.icon.icon-filetype-text:after {
content: attr(title);
display:block;
width:289px;
height:1.5em;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
span.due { }
div.card-assigned-users {
margin-right:10px;
}
ul.labels li.ng-scope span.ng-binding {
color:#000;
display:inline;
padding-left:5px;
}
/* Layout */
@page {
size: A4 landscape;
margin: 2cm;
}
div#innerBoard {
display:flex;
flex-wrap: wrap;
}
div.stack.ng-scope.as-sortable-item {border-right: 1px solid #000;}
div#innerBoard.ng-pristine.ng-untouched.ng-valid.ng-scope.ng-not-empty div.stack.ng-scope.as-sortable-item:nth-child(6n) {
page-break-after: always;
}
}

View File

@@ -4,6 +4,8 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* @author Artem Anufrij <artem.anufrij@live.de> * @author Artem Anufrij <artem.anufrij@live.de>
* @author Marin Treselj <marin@pixelipo.com> * @author Marin Treselj <marin@pixelipo.com>
* @author Oskar Kurz <oskar.kurz@gmail.com>
* @author Ryan Fletcher <ryan.fletcher@codepassion.ca>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
@@ -22,17 +24,29 @@
* *
*/ */
// colors
$color-warning-light: nc-lighten($color-warning, 15%); $color-warning-light: nc-lighten($color-warning, 15%);
$color-lightgrey: nc-darken($color-main-background, 4%); $color-lightgrey: nc-darken($color-main-background, 4%);
$color-grey: nc-darken($color-main-background, 7%); $color-grey: nc-darken($color-main-background, 7%);
$color-darkgrey: nc-darken($color-main-background, 32%); $color-darkgrey: nc-darken($color-main-background, 32%);
@import 'comp-appnav.scss'; // margins/paddings
@import 'icons.scss'; $board-item-margin: 10px 10px 20px 10px;
$board-last-item-margin: 10px;
$compact-board-item-margin: 5px 10px 10px 10px;
$compact-board-last-item-margin: 5px 10px 10px;
@import 'comp-appnav';
@import 'icons';
@import 'animations';
@import 'compact-mode';
@import 'autocomplete';
/** /**
* General styles * General styles
*/ */
button, button,
.button, .button,
.app-deck .icon { .app-deck .icon {
@@ -69,6 +83,26 @@ input.input-inline {
cursor: text; cursor: text;
} }
/**
* Generic app layout
*/
#content {
height: 100%;
min-height: initial;
}
.app.app-deck {
width: 100%;
height: 100%;
display: flex;
}
#app-content {
display: flex;
flex-direction: column;
}
/** /**
* Navigation sidebar * Navigation sidebar
*/ */
@@ -101,8 +135,11 @@ input.input-inline {
} }
} }
.app-navigation-entry-edit { .app-navigation-entry-edit {
.colorselect div{ .colorselect {
height: 32px; div, label {
height: 32px;
width: auto;
}
} }
form { form {
display: flex; display: flex;
@@ -111,6 +148,22 @@ input.input-inline {
} }
#app-settings-content {
overflow: initial;
.ui-select-match-item {
border: 1px solid var(--color-background-darker) !important;
.select-label {
color: var(--color-main-text);
}
}
p.hint {
margin-top: 10px;
color: var(--color-text-light);
}
}
/** /**
* Board view * Board view
*/ */
@@ -119,7 +172,7 @@ input.input-inline {
z-index: 999; z-index: 999;
width: 100%; width: 100%;
height: 100%; height: 100%;
background-color: $color-main-background; background-color: var(--color-main-background, $color-main-background);
} }
#board { #board {
@@ -139,16 +192,19 @@ input.input-inline {
.card { .card {
opacity: 1; opacity: 1;
&.file-drop {
}
} }
&.card-selected { &.card-selected {
.card { .card {
opacity: 0.7; box-shadow: 0px 0px 7px 0px var(--color-background-darker, $color-grey);
&.current { &.current {
opacity: 1.0; box-shadow: 0px 0px 7px 0px var(--color-text-lighter, $color-darkgrey);
box-shadow: 0px 0px 7px 0px $color-darkgrey;
} }
} }
} }
@@ -173,10 +229,16 @@ input.input-inline {
padding: 10px; padding: 10px;
> .as-sortable-placeholder { > .as-sortable-placeholder {
display: inline-block !important; display: flex !important;
width: 320px;
min-width: 320px;
margin-top: 0; margin-top: 0;
margin-left: 0; margin-left: 0;
} }
> .as-sortable-drag {
background-color: var(--color-main-background $color-main-background);
}
} }
#controls { #controls {
@@ -214,9 +276,17 @@ input.input-inline {
} }
button { button {
height: inherit; width: 36px;
height: 36px;
padding: 9px;
} }
#stack-add form {
button {
height: auto;
width: 32px;
}
}
input[type='text'] { input[type='text'] {
padding: 6px; padding: 6px;
border: 0 none transparent; border: 0 none transparent;
@@ -231,7 +301,7 @@ input.input-inline {
} }
} }
#app-navigation-toggle { #app-navigation-toggle-custom {
width: 44px; width: 44px;
height: 44px; height: 44px;
cursor: pointer; cursor: pointer;
@@ -257,10 +327,6 @@ input.input-inline {
margin-right: 6px; margin-right: 6px;
} }
} }
> button {
padding: 16px 20px;
}
} }
.filter-select { .filter-select {
@@ -285,7 +351,7 @@ input.input-inline {
} }
#stack-add { #stack-add {
background-color: $color-lightgrey; background-color: var(--color-background-dark, $color-lightgrey);
border-radius: 3px; border-radius: 3px;
margin: 3px; margin: 3px;
display: flex; display: flex;
@@ -330,9 +396,8 @@ input.input-inline {
width: 100%; width: 100%;
margin: 0; margin: 0;
font-size: 12pt; font-size: 12pt;
font-weight: 700;
border: 0; border: 0;
background-color: $color-main-background; background-color: var(--color-main-background, $color-main-background);
min-height: initial; min-height: initial;
} }
@@ -355,15 +420,20 @@ input.input-inline {
} }
.as-sortable-placeholder { .as-sortable-placeholder {
margin: 10px 10px 20px 10px; margin: $board-item-margin;
border: 1px dashed $color-darkgrey; border: 1px dashed $color-darkgrey;
min-height: 96px; min-height: 96px;
transition: margin 250ms linear;
&:last-child { &:last-child {
margin: 10px; margin: $board-last-item-margin;
} }
} }
&.as-sortable-item {
height: 100%;
display: flex;
}
> ul { > ul {
display: flex; display: flex;
@@ -372,17 +442,17 @@ input.input-inline {
} }
.card { .card {
background-color: $color-main-background; background-color: var(--color-main-background, $color-main-background);
margin: 10px 10px 20px 10px; margin: $board-item-margin;
white-space: normal; white-space: normal;
position: relative; position: relative;
box-shadow: 0 0 3px $color-darkgrey; box-shadow: 0 0 3px 1px var(--color-background-darker, $color-darkgrey);
border-radius: 3px; border-radius: 3px;
transition: margin 250ms linear;
&:last-child { &:last-child {
margin: 10px; margin: $board-last-item-margin;
} }
&.archived .card-upper { &.archived .card-upper {
@@ -406,7 +476,7 @@ input.input-inline {
} }
.card-controls { .card-controls {
background: $color-lightgrey; background: var(--color-background-dark, $color-lightgrey);
display: flex; display: flex;
position: relative; position: relative;
padding-left: 10px; padding-left: 10px;
@@ -419,9 +489,10 @@ input.input-inline {
opacity: 1; opacity: 1;
} }
.icon-filetype-text { .icon-description {
margin: 10px; margin: 10px;
margin-left: 0px; margin-left: 0px;
opacity: 0.5;
} }
.due { .due {
@@ -439,7 +510,7 @@ input.input-inline {
&.overdue { &.overdue {
background-color: $color-error; background-color: $color-error;
color: $color-primary-text; color: var(--color-primary-text, $color-primary-text);
.icon-badge { .icon-badge {
background-image: url('../img/calendar-white.svg'); background-image: url('../img/calendar-white.svg');
@@ -457,6 +528,21 @@ input.input-inline {
} }
} }
.card-tasks, .card-files, .card-comments {
border-radius: 3px;
margin: 4px 4px 4px 0px;
padding: 0 2px;
font-size: 90%;
opacity: 0.5;
display: flex;
align-items: center;
.icon {
background-size: contain;
margin-right: 2px;
}
}
button { button {
padding: 22px; padding: 22px;
margin: 0; margin: 0;
@@ -471,37 +557,39 @@ input.input-inline {
font-weight: normal; font-weight: normal;
font-size: 10pt; font-size: 10pt;
padding: 0; padding: 0;
margin: 5px; margin: 0 5px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
}
&.has-labels h4 { span {
margin-top: 15px; padding: 6px 0;
padding-top: 7px;
display: block;
}
input {
width: 100%;
margin: 0;
}
} }
.labels { .labels {
position: absolute; position: relative;
top: -5px; margin-left: 5px;
left: 10px;
li { li {
padding: 0; padding: 0 4px;
width: 15px; margin: 0 2px 2px 0;
height: 20px;
border-radius: 3px; border-radius: 3px;
font-size: 80%; font-size: 75%;
border: none transparent; border: none transparent;
float: left; float: left;
span { span {
display: none; display: inline-block;
} font-weight: bold;
&:hover span {
position: absolute;
padding: 3px;
background-color: inherit; background-color: inherit;
line-height: normal;
} }
} }
} }
@@ -599,25 +687,19 @@ input.input-inline {
/** /**
* App sidebar * App sidebar
*/ */
#app-sidebar {
right: -500px;
max-width: 100%;
width: 500px;
display:flex;
flex-direction: column;
&.details-visible {
right: 0;
}
}
#sidebar-header { #sidebar-header {
position: sticky;
top: 0;
background-color: var(--color-main-background, $color-main-background);
z-index: 200;
h3 { h3 {
font-size: 14pt; font-size: 14pt;
padding: 9px 10px; padding: 15px 15px 3px;
margin: 0; margin: 0;
overflow: hidden; overflow: hidden;
background-color: $color-lightgrey;
input { input {
min-height: 0px; min-height: 0px;
@@ -625,6 +707,12 @@ input.input-inline {
} }
} }
#card-dates {
font-size: 80%;
opacity: 0.5;
padding-left: 15px;
}
.icon-close { .icon-close {
position: absolute; position: absolute;
top: 0px; top: 0px;
@@ -635,11 +723,37 @@ input.input-inline {
} }
} }
.drop-indicator {
display: none;
}
.card .nv-file-over,
.drop-indicator.nv-file-over {
display: block;
position: absolute;
width: 100%;
height: 100%;
background-color: var(--color-main-background, $color-main-background);
z-index: 100;
opacity: 0.9;
text-align: center;
p {
width: calc(100% - 20px);
height: calc(100% - 20px);
position: absolute;
padding: 20px;
border: 1px dashed #AAA;
margin: 10px;
border-radius: 5px;
}
}
#card-meta { // TODO: use .card-block instead? #card-meta { // TODO: use .card-block instead?
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 15px; padding: 0 15px;
.duedate { .duedate {
display: flex; display: flex;
@@ -679,21 +793,41 @@ input.input-inline {
} }
} }
.section-header-tabbed {
margin-top: 10px;
margin-bottom: 5px;
flex-shrink: 0;
display: flex;
.tabHeaders {
margin: 0;
flex-grow: 1;
}
}
.tabDetails {
display: flex;
height: 40px;
align-items: center;
justify-content: center;
input[type=button] {
width: 32px;
}
}
.save-indicator { .save-indicator {
border-radius: 3px; border-radius: 3px;
float: right; margin: 5px;
padding: 0 10px; padding: 0 10px;
font-size: 8pt; font-size: 8pt;
display: none; display: none;
align-self: flex-end;
text-align: center; text-align: center;
&.saved { &.saved {
background-color: $color-success; background-color: $color-success;
color: $color-primary-text; color: $color-primary-text;
} }
&.unsaved { &.unsaved {
background-color: $color-lightgrey; background-color: var(--color-background-dark, $color-lightgrey);
color: $color-darkgrey; color: var(--color-text-light, $color-darkgrey);
} }
} }
@@ -703,12 +837,6 @@ input.input-inline {
display: inline; display: inline;
} }
#card-dates {
font-size: 80%;
opacity: 0.5;
text-align: right;
}
.card-details-assign-users { .card-details-assign-users {
.select2 .ui-select-choices-row-inner { .select2 .ui-select-choices-row-inner {
@@ -727,6 +855,102 @@ input.input-inline {
} }
.tooltip { .tooltip {
z-index: 998; z-index: 998;
position: fixed;
}
}
}
.icon-upload.icon-loading-small {
background-image: none;
}
.attachment-list-wrapper {
position: fixed;
width: 100%;
height: 100%;
background-color: rgba($color-darkgrey, 0.5);
left: 0;
top: 0;
z-index: 300;
}
.attachment-list {
&.selector {
padding: 10px;
position: absolute;
width: 30%;
max-width: 500px;
min-width: 200px;
max-height: 50%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: var(--color-main-background, $color-main-background);
z-index: 2;
border-radius: 3px;
box-shadow: 0 0 3px var(--color-background-dark, $color-darkgrey);
overflow: scroll;
}
h3.attachment-selector {
margin: 0 0 10px;
padding: 0;
.icon-close {
display: inline-block;
float: right;
}
}
li.attachment {
display: flex;
padding: 3px;
&.deleted {
opacity: .5;
}
.fileicon {
display: inline-block;
min-width: 32px;
width: 32px;
height: 32px;
background-size: contain;
}
.details {
flex-grow: 1;
flex-shrink: 1;
min-width: 0;
flex-basis: 50%;
line-height: 110%;
padding: 2px;
}
.filename {
width: 70%;
display: flex;
.basename {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding-bottom: 2px;
}
.extension {
opacity: 0.7;
}
}
.filesize, .filedate {
font-size: 90%;
color: $color-darkgrey;
}
.app-popover-menu-utils {
position: relative;
right: -10px;
button {
height: 32px;
width: 42px;
}
}
button.icon-history {
width: 44px;
}
progress {
margin-top: 3px;
} }
} }
} }
@@ -756,30 +980,76 @@ input.input-inline {
} }
.container { .container {
background-color: $color-main-background; background-color: var(--color-main-background, $color-main-background);
} }
} }
} }
} }
#card-attachments { .activity-icon {
ul { opacity: 1 !important;
margin: 5px; .avatardiv-container {
} top: -4px;
left: -7px;
.details { margin-right: 5px;
font-size: 8pt; img {
padding-left: 15px; max-width: 24px;
max-height: 24px;
}
} }
} }
#app-content { .activitysubject.commentAuthor {
overflow: hidden; margin-left: 26px;
display: flex; margin-right: 0;
flex-direction: column; margin-top: 10px;
}
.activityTabView {
.activity {
margin-bottom: 20px;
}
.activitytime {
margin: 0 !important;
}
}
.activitysubject .app-popover-menu-utils {
display: inline-block;
position: relative;
a {
font-weight: normal;
}
button {
opacity: .5;
padding: 7px;
margin-left: 10px;
}
}
&.details-visible { #commentsTabView {
margin-right: 500px; .newCommentRow .avatardiv-container {
left: -7px;
}
.comment {
position: relative;
padding: 0 0 15px;
.avatardiv {
width: 24px;
height: 24px;
line-height: 24px;
}
}
.newCommentForm {
margin-left: 26px;
}
}
.card-attachments {
.error {
padding-left: 38px;
margin-bottom: 5px;
background-position: 10px;
} }
} }
@@ -813,6 +1083,10 @@ input.input-inline {
border: none; border: none;
} }
label.color {
flex-grow: 1;
}
.selected { .selected {
background-image: url('../../../core/img/actions/checkmark.svg'); background-image: url('../../../core/img/actions/checkmark.svg');
background-position: center center; background-position: center center;
@@ -822,6 +1096,22 @@ input.input-inline {
background-image: url('../../../core/img/actions/checkmark-white.svg'); background-image: url('../../../core/img/actions/checkmark-white.svg');
} }
} }
.colorselect-label, .colorselect-label-white {
background-image: url('../img/color_picker-dark.svg');
background-position: center center;
background-repeat: no-repeat;
opacity: 1;
input {
position: absolute;
visibility: hidden;
height: 32px;
width: 40px;
}
}
.colorselect-label-white {
background-image: url('../img/color_picker.svg');
}
} }
.labels { .labels {
@@ -887,7 +1177,8 @@ input.input-inline {
.colorselect { .colorselect {
flex-grow: 1; flex-grow: 1;
div { div,
label {
min-width: 32px; min-width: 32px;
} }
} }
@@ -971,6 +1262,7 @@ input.input-inline {
display: inline-block; display: inline-block;
overflow: hidden; overflow: hidden;
vertical-align: middle; vertical-align: middle;
flex-grow: 1;
} }
.icon-delete { .icon-delete {
@@ -1010,6 +1302,22 @@ input.input-inline {
position: relative; position: relative;
} }
.board-detail__deleted-list__item {
display: flex;
flex-direction: row;
* {
flex-basis: 44px;
}
.title {
flex-grow: 2;
}
.live-relative-timestamp {
flex-grow: 1;
}
}
#board-detail-labels { #board-detail-labels {
ul li { ul li {
input { input {
@@ -1055,12 +1363,23 @@ input.input-inline {
.tabHeaders { .tabHeaders {
clear: both; clear: both;
overflow: hidden; overflow: initial;
margin-bottom: 0; margin-bottom: 0;
.icon {
display: inline-block;
background-size: contain;
margin-right: 5px;
opacity: 0.5;
}
} }
.tabsContainer { .tabsContainer {
margin-top: 15px; margin-top: 15px;
height: 100%;
.tab {
height: 100%;
}
} }
.ui-select-offscreen { .ui-select-offscreen {
@@ -1071,7 +1390,7 @@ input.input-inline {
padding: 0; padding: 0;
float: left !important; float: left !important;
display: block; display: block;
border-radius: 0px 0px 5px 5px !important; border-radius: 3px !important;
.select-label { .select-label {
color: $color-primary-text; color: $color-primary-text;
@@ -1100,7 +1419,15 @@ input.input-inline {
border: 0 !important; border: 0 !important;
overflow: hidden; overflow: hidden;
} }
.select2-search-field {
margin-right: -10px;
flex-grow: 1;
input {
width: 100% !important;
}
}
} }
.select2-choice { .select2-choice {
height: auto; height: auto;
} }
@@ -1135,6 +1462,8 @@ input.input-inline {
*/ */
#markdown { #markdown {
width: 100% !important; width: 100% !important;
min-height: 40px;
cursor: text;
p { p {
margin-bottom: 15px; margin-bottom: 15px;
@@ -1188,7 +1517,7 @@ input.input-inline {
} }
pre { pre {
background-color: $color-lightgrey; background-color: var(--color-background-dark, $color-lightgrey);
padding: 3px; padding: 3px;
overflow: auto; overflow: auto;
@@ -1196,8 +1525,65 @@ input.input-inline {
white-space: pre; white-space: pre;
} }
} }
img {
max-width: 100%;
max-height: 50vh;
margin: auto;
display: block;
}
input[type=checkbox] {
margin: 0px 10px 0px 0px;
line-height: 10px;
font-size: 10px;
display: inline-block;
min-height: 12px;
}
li input[type="checkbox"].checkbox + label::before {
margin-left: -15px;
}
input[type="checkbox"].checkbox + label::before {
position: relative;
z-index: 100;
margin-right: 10px;
margin-top: 0;
}
li input[type="checkbox"].checkbox:not(:checked) + label::before {
background-color: $color-main-background;
}
table {
margin-bottom: 10px;
border-collapse: collapse;
thead {
background-color: var(--color-background-dark, $color-lightgrey);
}
td, th {
border: 1px solid var(--color-background-darker, $color-darkgrey);
padding: 3px;
}
}
} }
.section-wrapper {
display: flex;
max-width: 100%;
margin-top: 10px;
}
.section-label {
background-position: 0px center;
width:28px;
flex-shrink: 0;
}
.section-details {
flex-grow: 1;
}
/** /**
* Mobile optimizations * Mobile optimizations
*/ */
@@ -1242,3 +1628,27 @@ input.input-inline {
.ui-select-dropdown.select2-drop-active { .ui-select-dropdown.select2-drop-active {
opacity: 1 !important; opacity: 1 !important;
} }
/**
* Custom app sidebar handling
*/
body:not(.snapjs-left) {
.app-navigation-hide {
#app-content {
margin-left: 0 !important; /* overwrite margin since we want the translateX to handle it*/
}
#app-navigation {
transform: translateX(-300px);
}
}
}
@media only screen and (max-width: 768px) {
#app-navigation-toggle-custom {
display: none;
}
}
/**
* Print settings, better leave them at the eof
*/
@import 'print.scss';

27
docs/API-Nextcloud.md Normal file
View File

@@ -0,0 +1,27 @@
# Nextcloud APIs
## Comments
Comments are stored using the Nextcloud Comments API. You can use the WebDAV endpoint of Nextcloud to fetch, update and delete comments.
### List comments
PROPFIND`remote.php/dav/comments/deckCard/{cardId}`
### Create comment
POST `remote.php/dav/comments/deckCard/{cardId}`
### Update comment
PROPPATCH `remote.php/dav/comments/deckCard/{cardId}/{commentId}`
### Delete comment
DELETE `remote.php/dav/comments/deckCard/{cardId}/{commentId}`
## Activity
The Nextcloud activity app provides an API to fetch activities filtered for deck: [Activity app API documentation](https://github.com/nextcloud/activity/blob/master/docs/endpoint-v2.md)
The deck app offers a filter `deck` to only request activity events that are relevant.

833
docs/API.md Normal file
View File

@@ -0,0 +1,833 @@
The REST API provides access for authenticated users to their data inside the Deck app. To get a better understand of Decks data models and their relations, please have a look at the [data structure](structure.md) documentation.
# Prequisited
- All requests require a `OCS-APIRequest` HTTP header to be set to `true` and a `Content-Type` of `application/json`.
- The API is located at https://nextcloud.local/index.php/apps/deck/api/v1.0
## Naming
- Board is the the project like grouping of tasks that can be shared to different users and groups
- Stack is the grouping of cards which is rendered in vertical columns in the UI
- Card is the representation of a single task
- Labels are defined on a board level and can be assigned to any number of cards
## Global responses
### 400 Bad request
In case the request is invalid, e.g. because a parameter is missing, a 400 error will be returned:
```json
{
"status": 400,
"message": "title must be provided"
}
```
### 403 Permission denied
In any case a user doesn't have access to a requested entity, a 403 error will be returned:
```json
{
"status": 403,
"message": "Permission denied"
}
```
## Headers
### If-Modified-Since
Some index endpoints support limiting the result set to entries that have been changed since the given time.
Example curl request:
```bash
curl -u admin:admin -X GET \
'http://localhost:8000/index.php/apps/deck/api/v1.0/boards/2/stacks' \
-H "OCS-APIRequest: true" \
-H "If-Modified-Since: Mon, 5 Nov 2018 09:28:00 GMT"
```
# Endpoints
## Boards
### GET /boards - Get a list of boards
#### Headers
The board list endpoint supports setting an `If-Modified-Since` header to limit the results to entities that are changed after the provided time.
#### Response
##### 200 Success
Returns an array of board items
```json
[
{
"title": "Board title",
"owner": {
"primaryKey": "admin",
"uid": "admin",
"displayname": "Administrator"
},
"color": "ff0000",
"archived": false,
"labels": [],
"acl": [],
"permissions": {
"PERMISSION_READ": true,
"PERMISSION_EDIT": true,
"PERMISSION_MANAGE": true,
"PERMISSION_SHARE": true
},
"users": [],
"shared": 0,
"deletedAt": 0,
"id": 10
}
]
```
### POST /boards - Create a new board
#### Request body
| Parameter | Type | Description |
| --------- | ------ | ---------------------------------------------------- |
| title | String | The title of the new board |
| color | String | The hexadecimal color of the new board (e.g. FF0000) |
```json
{
"title": "Board title",
"color": "ff0000"
}
```
#### Response
##### 200 Success
```json
{
"title": "Board title",
"owner": {
"primaryKey": "admin",
"uid": "admin",
"displayname": "Administrator"
},
"color": "ff0000",
"archived": false,
"labels": [
{
"title": "Finished",
"color": "31CC7C",
"boardId": 10,
"cardId": null,
"id": 37
},
{
"title": "To review",
"color": "317CCC",
"boardId": 10,
"cardId": null,
"id": 38
},
{
"title": "Action needed",
"color": "FF7A66",
"boardId": 10,
"cardId": null,
"id": 39
},
{
"title": "Later",
"color": "F1DB50",
"boardId": 10,
"cardId": null,
"id": 40
}
],
"acl": [],
"permissions": {
"PERMISSION_READ": true,
"PERMISSION_EDIT": true,
"PERMISSION_MANAGE": true,
"PERMISSION_SHARE": true
},
"users": [],
"deletedAt": 0,
"id": 10
}
```
### GET /boards/{boardId} - Get board details
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------- |
| boardId | Integer | The id of the board to fetch |
#### Response
##### 200 Success
```json
{
"title": "Board title",
"owner": {
"primaryKey": "admin",
"uid": "admin",
"displayname": "Administrator"
},
"color": "ff0000",
"archived": false,
"labels": [
{
"title": "Finished",
"color": "31CC7C",
"boardId": "10",
"cardId": null,
"id": 37
},
{
"title": "To review",
"color": "317CCC",
"boardId": "10",
"cardId": null,
"id": 38
},
{
"title": "Action needed",
"color": "FF7A66",
"boardId": "10",
"cardId": null,
"id": 39
},
{
"title": "Later",
"color": "F1DB50",
"boardId": "10",
"cardId": null,
"id": 40
}
],
"acl": [],
"permissions": {
"PERMISSION_READ": true,
"PERMISSION_EDIT": true,
"PERMISSION_MANAGE": true,
"PERMISSION_SHARE": true
},
"users": [
{
"primaryKey": "admin",
"uid": "admin",
"displayname": "Administrator"
}
],
"deletedAt": 0,
"id": 10
}
```
### PUT /boards/{boardId} - Update board details
#### Request body
| Parameter | Type | Description |
| --------- | ------ | ---------------------------------------------------- |
| title | String | The title of the new board |
| color | String | The hexadecimal color of the new board (e.g. FF0000) |
| archived | Bool | The hexadecimal color of the new board (e.g. FF0000) |
```json
{
"title": "Board title",
"color": "ff0000",
"archived": false
}
```
#### Response
##### 200 Success
### DELETE /boards/{boardId} - Delete a board
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------- |
| boardId | Integer | The id of the board to fetch |
#### Response
##### 200 Success
### POST /boards/{boardId}/undo_delete - Restore a deleted board
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------- |
| boardId | Integer | The id of the board to fetch |
#### Response
##### 200 Success
## Stacks
### GET /board/{boardId}/stacks - Get stacks
#### Headers
The board list endpoint supports setting an `If-Modified-Since` header to limit the results to entities that are changed after the provided time.
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------- |
| boardId | Integer | The id of the board to fetch |
#### Response
```json
[
{
"title": "ToDo",
"boardId": 2,
"deletedAt": 0,
"lastModified": 1541426139,
"cards": [...],
"order": 999,
"id": 4
}
]
```
##### 200 Success
### GET /board/{boardId}/stacks/archived - Get list of archived stacks
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------- |
| boardId | Integer | The id of the board to fetch |
#### Response
```json
[
{
"title": "ToDo",
"boardId": 2,
"deletedAt": 0,
"lastModified": 1541426139,
"cards": [...],
"order": 999,
"id": 4
}
]
```
##### 200 Success
### GET /board/{boardId}/stacks/{stackId} - Get stack details
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------- |
| boardId | Integer | The id of the board the stack belongs to |
| stackId | Integer | The id of the stack |
#### Response
##### 200 Success
### POST /board/{boardId}/stacks - Create a new stack
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------- |
| boardId | Integer | The id of the board to fetch |
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId} - Update stack details
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------- |
| boardId | Integer | The id of the board the stack belongs to |
| stackId | Integer | The id of the stack |
#### Request body
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| title | String | The title of the new stack |
| order | Integer | Order for sorting the stacks |
#### Response
##### 200 Success
### DELETE /board/{boardId}/stacks/{stackId} - Delete a stack
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------- |
| boardId | Integer | The id of the board the stack belongs to |
| stackId | Integer | The id of the stack |
#### Response
##### 200 Success
## Cards
### GET /board/{boardId}/stacks/{stackId}/cards/{cardId} - Get card details
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Response
##### 200 Success
### POST /board/{boardId}/stacks/{stackId}/cards - Create a new card
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
#### Request body
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| title | String | The title of the new stack |
| type | String | Type of the card (for later use) use 'plain' for now |
| order | Integer | Order for sorting the stacks |
#### Response
```json
{
"title":"Test",
"description":null,
"stackId":6,
"type":"plain",
"lastModified":1541528026,
"createdAt":1541528026,
"labels":null,
"assignedUsers":null,
"attachments":null,
"attachmentCount":null,
"owner":"admin",
"order":999,
"archived":false,
"duedate":null,
"deletedAt":0,
"commentsUnread":0,
"id":10,
"overdue":0
}
```
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId} - Update card details
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Request data
| Parameter | Type | Description |
|-------------|-----------|------------------------------------------------------|
| title | String | The card title |
| description | String | The markdown description of the card |
| type | String | Type of the card (for later use) use 'plain' for now |
| order | Integer | Order for sorting the stacks |
| duedate | timestamp | The duedate of the card or null |
```
{
"title": "Test card",
"description": "A card description",
"type": "plain",
"order": 999,
"duedate": null,
}
```
#### Response
##### 200 Success
### DELETE /board/{boardId}/stacks/{stackId}/cards/{cardId} - Delete a card
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel - Assign a label to a card
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Request data
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| labelId | Integer | The label id to assign to the card |
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId}/removeLabel - Remove a label to a card
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Request data
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| labelId | Integer | The label id to remove to the card |
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId}/assignUser - Assign a user to a card
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Request data
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| userId | String | The user id to assign to the card |
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser - Assign a user to a card
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Request data
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| userId | String | The user id to assign to the card |
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId}/reorder - Change the sorting order of a card
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Request data
| Parameter | Type | Description |
| --------- | ------- | ----------------------------------------------------------- |
| order | Integer | The position in the stack where the card should be moved to |
| stackId | Integer | The id of the stack where the card should be moved to |
#### Response
##### 200 Success
## Labels
### GET /board/{boardId}/labels/{labelId} - Get label details
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------- |
| boardId | Integer | The id of the board the label belongs to |
| labelId | Integer | The id of the label |
#### Response
##### 200 Success
```json
{
"title": "Abgeschlossen",
"color": "31CC7C",
"boardId": "2",
"cardId": null,
"id": 5
}
```
### POST /board/{boardId}/labels - Create a new label
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------- |
| boardId | Integer | The id of the board the label belongs to |
#### Request data
```json
{
"title": "Finished",
"color": "31CC7C"
}
```
#### Response
##### 200 Success
### PUT /board/{boardId}/labels/{labelId} - Update label details
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------- |
| boardId | Integer | The id of the board the label belongs to |
| labelId | Integer | The id of the label |
#### Request data
```json
{
"title": "Finished",
"color": "31CC7C"
}
```
#### Response
##### 200 Success
### DELETE /board/{boardId}/labels/{labelId} - Delete a label
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------- |
| boardId | Integer | The id of the board the label belongs to |
| labelId | Integer | The id of the label |
#### Response
##### 200 Success
## Attachments
### GET /board/{boardId}/stacks/{stackId}/cards/{cardId}/attachments - Get a list of attachments
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| boardId | Integer | The id of the board the card belongs to |
| stackId | Integer | The id of the stack the card belongs to |
| cardId | Integer | The id of the card |
#### Response
##### 200 Success
```json
[
{
"cardId": 5,
"type": "deck_file",
"data": "6DADC2C69F4.eml",
"lastModified": 1541529048,
"createdAt": 1541529048,
"createdBy": "admin",
"deletedAt": 0,
"extendedData": {
"filesize": 922258,
"mimetype": "application/octet-stream",
"info": {
"dirname": ".",
"basename": "6DADC2C69F4.eml",
"extension": "eml",
"filename": "6DADC2C69F4"
}
},
"id": 6
}
]
```
### GET /board/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId} - Get the attachment file
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| boardId | Integer | The id of the board the attachment belongs to |
| stackId | Integer | The id of the stack the attachment belongs to |
| cardId | Integer | The id of the card the attachment belongs to |
| attachmentId | Integer | The id of the attachment |
#### Response
##### 200 Success
### POST /board/{boardId}/stacks/{stackId}/cards/{cardId}/attachments - Upload an attachment
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------------- |
| boardId | Integer | The id of the board the attachment belongs to |
| stackId | Integer | The id of the stack the attachment belongs to |
| cardId | Integer | The id of the card the attachment belongs to |
#### Request data
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------------- |
| type | String | The type of the attachement |
| file | Binary | File data to add as an attachment |
For now only `deck_file` is supported as an attachment type.
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId} - Update an attachment
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| boardId | Integer | The id of the board the attachment belongs to |
| stackId | Integer | The id of the stack the attachment belongs to |
| cardId | Integer | The id of the card the attachment belongs to |
| attachmentId | Integer | The id of the attachment |
#### Request data
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------------- |
| type | String | The type of the attachement |
| file | Binary | File data to add as an attachment |
For now only `deck_file` is supported as an attachment type.
#### Response
##### 200 Success
### DELETE /board/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId} - Delete an attachment
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| boardId | Integer | The id of the board the attachment belongs to |
| stackId | Integer | The id of the stack the attachment belongs to |
| cardId | Integer | The id of the card the attachment belongs to |
| attachmentId | Integer | The id of the attachment |
#### Response
##### 200 Success
### PUT /board/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}/restore - Resore a deleted attachment
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| boardId | Integer | The id of the board the attachment belongs to |
| stackId | Integer | The id of the stack the attachment belongs to |
| cardId | Integer | The id of the card the attachment belongs to |
| attachmentId | Integer | The id of the attachment |
#### Response
##### 200 Success

27
docs/Markdown.md Normal file
View File

@@ -0,0 +1,27 @@
## What is Markdown
The [wikipedia markdown entry](https://en.wikipedia.org/wiki/Markdown) introduced markdown as :
> Markdown is a lightweight markup language with plain text formatting syntax. It is designed so that it can be converted to HTML and many other formats using a tool by the same name. Markdown is often used to format readme files, for writing messages in online discussion forums, and to create rich text using a plain text editor. As the initial description of Markdown contained ambiguities and unanswered questions, many implementations and extensions of Markdown appeared over the years to answer these issues.
## Markdown in Deck
The Deck application plugin uses the [markdown-it](https://github.com/markdown-it/markdown-it) script to offer support for markdown in the cards description field.
## Supported Markdown
Markdown comes in may flavors. The best way to learn markdown and understand how to use it, is simply to [try it](https://markdown-it.github.io) on the original script official playground.
That same link offers also a comprehensive list of what is supported, and what is not - rendering it unnecessary to duplicate that content in here.
[CommonMark Markdown Reference](http://commonmark.org/help/)
## Known Issues
As per [issue #127](https://github.com/nextcloud/deck/issues/127) Due to a known limitation of the current script to support markdown, Links that contain the `")"` character will not display well, or will break.
The recommended solution is to use `"<"` and `">"` to wrap those links. It should assure their integrity.
If you come by another case of broken link, or broken display of links, please report it by opening a new issue.

3
docs/extra.css Normal file
View File

@@ -0,0 +1,3 @@
.subnav ul {
padding-left: 20px;
}

1
docs/index.md Symbolic link
View File

@@ -0,0 +1 @@
../README.md

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

6
docs/structure.md Normal file
View File

@@ -0,0 +1,6 @@
## Database structure
Deck stores most of its data inside of the database. The structure and relationships between entities is documented in the following ER diagram:
![Screenshot](resources/er-diagram.jpg)

1
img/calendar-dark.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" version="1.1" height="32" viewbox="0 0 32 32"><path fill="#000" d="m8 2c-1.108 0-2 0.892-2 2v4c0 1.108 0.892 2 2 2s2-0.892 2-2v-4c0-1.108-0.892-2-2-2zm16 0c-1.108 0-2 0.892-2 2v4c0 1.108 0.892 2 2 2s2-0.892 2-2v-4c0-1.108-0.892-2-2-2zm-13 4v2c0 1.662-1.338 3-3 3s-3-1.338-3-3v-1.875a3.993 3.993 0 0 0 -3 3.875v16c0 2.216 1.784 4 4 4h20c2.216 0 4-1.784 4-4v-16a3.993 3.993 0 0 0 -3 -3.875v1.875c0 1.662-1.338 3-3 3s-3-1.338-3-3v-2zm-4.906 10h19.812a0.09 0.09 0 0 1 0.094 0.094v9.812a0.09 0.09 0 0 1 -0.094 0.094h-19.812a0.09 0.09 0 0 1 -0.094 -0.094v-9.812a0.09 0.09 0 0 1 0.094 -0.094z"/></svg>

After

Width:  |  Height:  |  Size: 646 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 100 100"><path d="M91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727a5.015 5.015 0 1 0-7.093 7.093l3.727 3.727-41.51 41.508a11.411 11.411 0 0 0-3.329 7.324c-.073 1.087-.347 3.105-.675 5.292a1.748 1.748 0 0 1-.487.983l-3.105 3.106a2.546 2.546 0 0 0 0 3.6l3.493 3.493a2.546 2.546 0 0 0 3.6 0l3.106-3.105c.277-.275.622-.433.981-.486 2.187-.329 4.205-.602 5.293-.675a11.412 11.412 0 0 0 7.325-3.33l41.508-41.508 3.727 3.727a5.015 5.015 0 1 0 7.093-7.093L69.507 29.419l9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726.001-16.2zM65.051 42.749l-20.53 20.53a2.546 2.546 0 0 1-3.6 0l-3.27-3.27a2.545 2.545 0 0 0-3.599.001l-.616.616-.002-.002-14.728 14.727c-.337.337-.819.401-1.076.143s-.194-.74.143-1.076l23.841-23.841.004.004 15.633-15.633a2.546 2.546 0 0 1 3.6 0l4.2 4.201a2.546 2.546 0 0 1 0 3.6z"/></svg>

After

Width:  |  Height:  |  Size: 897 B

1
img/color_picker.svg Normal file
View File

@@ -0,0 +1 @@
<svg width="15" height="15" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path d="M91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727a5.015 5.015 0 1 0-7.093 7.093l3.727 3.727-41.51 41.508a11.411 11.411 0 0 0-3.329 7.324c-.073 1.087-.347 3.105-.675 5.292a1.748 1.748 0 0 1-.487.983l-3.105 3.106a2.546 2.546 0 0 0 0 3.6l3.493 3.493a2.546 2.546 0 0 0 3.6 0l3.106-3.105c.277-.275.622-.433.981-.486 2.187-.329 4.205-.602 5.293-.675a11.412 11.412 0 0 0 7.325-3.33l41.508-41.508 3.727 3.727a5.015 5.015 0 1 0 7.093-7.093L69.507 29.419l9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726.001-16.2zM65.051 42.749l-20.53 20.53a2.546 2.546 0 0 1-3.6 0l-3.27-3.27a2.545 2.545 0 0 0-3.599.001l-.616.616-.002-.002-14.728 14.727c-.337.337-.819.401-1.076.143s-.194-.74.143-1.076l23.841-23.841.004.004 15.633-15.633a2.546 2.546 0 0 1 3.6 0l4.2 4.201a2.546 2.546 0 0 1 0 3.6z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 910 B

1
img/description.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" version="1.1" height="16"><path fill="#000" d="m2.5 1c-0.28 0-0.5 0.22-0.5 0.5v13c0 0.28 0.22 0.5 0.5 0.5h11c0.28 0 0.5-0.22 0.5-0.5v-10.5l-3-3h-8.5zm1.5 2h6v1h-6v-1zm0 3h5v1h-5v-1zm0 3h8v1h-8v-1zm0 3h4v1h-4v-1z"/></svg>

After

Width:  |  Height:  |  Size: 292 B

View File

@@ -0,0 +1 @@
<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -292.77)" display="none" stroke-width=".23666"><rect x=".28112" y="293.43" width="3.7042" height="1.1906" ry=".20225"/><rect x=".26458" y="295.15" width="3.7042" height="1.1906" ry=".20225"/></g><g transform="translate(0 -292.77)"><g transform="matrix(.040404 0 0 .040404 -3.0978 290.01)"><rect x="83.629" y="114.13" width="91.678" height="13.097" stroke-width="3.9049"/><path d="m155.25 81.388-26.194 26.194-26.194-26.154z" stroke-width="6.5484"/><path d="m155.25 159.97-26.194-26.194-26.194 26.154z" stroke-width="6.5484"/></g></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -0,0 +1 @@
<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -292.77)" display="none" stroke-width=".23666"><rect x=".28112" y="293.43" width="3.7042" height="1.1906" ry=".20225"/><rect x=".26458" y="295.15" width="3.7042" height="1.1906" ry=".20225"/></g><g transform="translate(0 -292.77)"><g transform="matrix(.040404 0 0 .040404 -3.0978 290.01)"><rect x="83.629" y="114.13" width="91.678" height="13.097" stroke-width="3.9049"/><path d="m155.25 107.58-26.194-26.194-26.194 26.154z" stroke-width="6.5484"/><path d="m155.25 133.78-26.194 26.194-26.194-26.154z" stroke-width="6.5484"/></g></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -1,3 +0,0 @@
{
"directory": "vendor"
}

View File

@@ -1,4 +1,6 @@
{ {
"esversion": 6,
"globals": { "globals": {
"jasmine" : false, "jasmine" : false,
"spyOn" : false, "spyOn" : false,
@@ -21,7 +23,6 @@
"devel" : true, "devel" : true,
"eqeqeq" : true, "eqeqeq" : true,
"eqnull" : false, "eqnull" : false,
"es5" : true,
"evil" : false, "evil" : false,
"forin" : true, "forin" : true,
"immed" : true, "immed" : true,
@@ -39,7 +40,6 @@
"plusplus" : false, "plusplus" : false,
"quotmark" : "single", "quotmark" : "single",
"regexp" : false, "regexp" : false,
"strict" : true,
"sub" : true, "sub" : true,
"trailing" : true, "trailing" : true,
"undef" : true, "undef" : true,

View File

@@ -1,124 +0,0 @@
/*
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/* global module */
module.exports = function(grunt) {
'use strict';
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-wrap');
grunt.loadNpmTasks('grunt-karma');
grunt.loadNpmTasks('grunt-phpunit');
grunt.initConfig({
meta: {
pkg: grunt.file.readJSON('package.json'),
version: '<%= meta.pkg.version %>',
configJS: 'config/',
buildJS: [
'app/**/*.js',
'controller/**/*.js',
'filters/**/*.js',
'directive/**/*.js',
'service/**/*.js'
],
productionJS: 'public/',
testsJS: '../tests/js/'
},
concat: {
options: {
stripBanners: true
},
dist: {
src: ['<%= meta.buildJS %>'],
dest: '<%= meta.productionJS %>app.js'
}
},
wrap: {
app: {
src: ['<%= meta.productionJS %>app.js'],
dest: '<%= meta.productionJS %>app.js',
option: {
wrapper: [
'(function(angular, $, oc_requesttoken, undefined){\n\n\'use strict\';\n\n',
'\n})(angular, jQuery, oc_requesttoken);'
]
}
}
},
jshint: {
files: [
'Gruntfile.js',
'<%= meta.buildJS %>**/*.js',
'<%= meta.testsJS %>**/*.js'
],
options: {
jshintrc: '.jshintrc',
reporter: require('jshint-stylish')
}
},
watch: {
concat: {
files: ['<%=meta.buildJS%>'],
options: {
livereload: true
},
tasks: ['build']
}
},
phpunit: {
classes: {
dir: '../tests/unit'
},
options: {
bootstrap: '../tests/bootstrap.php',
colors: true
}
},
karma: {
unit: {
configFile: '<%= meta.testsJS %>config/karma.js'
},
continuous: {
configFile: '<%= meta.testsJS %>config/karma.js',
browsers: ['Firefox'],
singleRun: true,
reporters: ['progress']
}
},
});
// make tasks available under simpler commands
grunt.registerTask('build', ['jshint', 'concat', 'wrap']);
grunt.registerTask('js-unit', ['karma:continuous']);
};

View File

@@ -4,20 +4,20 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/* global angular */ /* global angular */
@@ -41,13 +41,24 @@ angular.module('markdown', [])
}; };
}]); }]);
import uirouter from '@uirouter/angularjs';
import ngsanitize from 'angular-sanitize';
import angularuiselect from 'ui-select';
import ngsortable from 'ng-sortable';
import md from 'angular-markdown-it';
import nganimate from 'angular-animate';
import 'angular-file-upload';
import ngInfiniteScroll from 'ng-infinite-scroll';
import '../legacy/jquery.atwho.min';
import '../legacy/jquery.caret.min';
var app = angular.module('Deck', [ var app = angular.module('Deck', [
'ngRoute', ngsanitize,
'ngSanitize', uirouter,
'ui.router', angularuiselect,
'ui.select', ngsortable, md, nganimate,
'as.sortable', 'angularFileUpload',
'mdMarkdownIt', ngInfiniteScroll
'ngAnimate'
]); ]);
export default app;

View File

@@ -22,18 +22,27 @@
/* global app oc_requesttoken markdownitLinkTarget */ /* global app oc_requesttoken markdownitLinkTarget */
app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) { import app from './App.js';
import md from 'angular-markdown-it';
import markdownitLinkTarget from 'markdown-it-link-target';
import markdownitCheckbox from 'legacy/markdown-it-checkbox.js';
app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) {
'use strict'; 'use strict';
$httpProvider.defaults.headers.common.requesttoken = oc_requesttoken; $httpProvider.defaults.headers.common.requesttoken = oc_requesttoken;
$compileProvider.debugInfoEnabled(true); $compileProvider.debugInfoEnabled(true);
// This should fix adding "unsafe:" prefix to ui-select href links containing javascript
// inline JS is blocked by CSP anyway and filtered out by our markdown renderer as well
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/);
markdownItConverterProvider.config({ markdownItConverterProvider.config({
breaks: true, breaks: true,
linkify: true, linkify: true,
xhtmlOut: true xhtmlOut: true
}); });
markdownItConverterProvider.use(markdownitLinkTarget); markdownItConverterProvider.use(markdownitLinkTarget).use(markdownitCheckbox);
$urlRouterProvider.otherwise('/'); $urlRouterProvider.otherwise('/');
@@ -62,19 +71,47 @@ app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvid
tab: {value: 0, dynamic: true}, tab: {value: 0, dynamic: true},
}, },
views: { views: {
'sidebarView': { 'sidebarView@': {
templateUrl: '/board.sidebarView.html' templateUrl: '/board.sidebarView.html',
controller: 'BoardController'
} }
} }
}) })
.state('board.card', { .state('board.card', {
url: '/card/:cardId', url: '/card/:cardId',
params: {
tab: {value: 0, dynamic: true},
},
views: { views: {
'sidebarView': { 'sidebarView@': {
templateUrl: '/card.sidebarView.html', templateUrl: '/card.sidebarView.html',
controller: 'CardController' controller: 'CardController'
} }
} }
}); });
}); $provide.decorator('nvFileOverDirective', function ($delegate) {
var directive = $delegate[0],
link = directive.link;
directive.compile = function () {
return function (scope, element, attrs) {
var overClass = attrs.overClass || 'nv-file-over';
link.apply(this, arguments);
let counter = 0;
element.on('dragenter', function (event) {
counter++;
});
element.on('dragleave', function (event) {
counter--;
if (counter <= 0) {
$('.' + overClass).removeClass(overClass);
}
});
};
};
return $delegate;
});
});

View File

@@ -4,25 +4,27 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from './App.js';
/* global Snap */ /* global Snap */
app.run(function ($document, $rootScope, $transitions, BoardService) { app.run(function ($document, $rootScope, $transitions, BoardService) {
'use strict'; 'use strict';
$document.click(function (event) { $document.click(function (event) {
$rootScope.$broadcast('documentClicked', event); $rootScope.$broadcast('documentClicked', event);
}); });
@@ -54,26 +56,6 @@ app.run(function ($document, $rootScope, $transitions, BoardService) {
OC.filePath('deck', 'img', 'app-512.png') OC.filePath('deck', 'img', 'app-512.png')
); );
$('#app-navigation-toggle').off('click');
// App sidebar on mobile
var snapper = new Snap({
element: document.getElementById('app-content'),
disable: 'right',
maxPosition: 250,
touchToDrag: false
});
$('#app-navigation-toggle').click(function () {
if ($(window).width() > 768) {
$('#app-navigation').toggle('hidden');
} else {
if (snapper.state().state === 'left') {
snapper.close();
} else {
snapper.open('left');
}
}
});
// Select all elements with data-toggle="tooltips" in the document // Select all elements with data-toggle="tooltips" in the document
$('body').tooltip({ $('body').tooltip({
selector: '[data-toggle="tooltip"]' selector: '[data-toggle="tooltip"]'

View File

@@ -1,29 +0,0 @@
{
"name": "deck",
"version": "0.0.1",
"dependencies": {
"angular": "~1.6.1",
"angular-route": "~1.6.1",
"angular-mocks": "~1.6.1",
"angular-sanitize": "~1.6.1",
"angular-animate": "~1.6.1",
"ng-sortable": "1.3.8",
"jquery": "3.2.x",
"es6-shim": "~0.*",
"js-url": "~2.*",
"angular-ui-select": "~0.19.6",
"angular-markdown-it": "~0.6.1",
"angular-ui-router": "~1.0.0",
"markdown-it-link-target": "~1.0.1",
"jquery-timepicker": "883bb2cd94"
},
"license": "AGPL-3.0",
"private": true,
"ignore": [
"'**/.*",
"node_modules",
"bower_components",
"test",
"tests"
]
}

View File

@@ -0,0 +1,349 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/* global OC OCA OCP t escapeHTML Handlebars moment */
import CommentCollection from '../legacy/commentcollection';
import CommentModel from '../legacy/commentmodel';
class ActivityController {
constructor ($scope, CardService, ActivityService, BoardService) {
'ngInject';
this.cardservice = CardService;
this.boardservice = BoardService;
this.activityservice = ActivityService;
this.$scope = $scope;
this.type = '';
this.loading = false;
this.status = {
commentCreateLoading: false
};
this.$scope.newComment = '';
this.$scope.newCommentString = 'New comment…';
this.currentUser = OC.getCurrentUser();
const self = this;
this.$scope.$watch(function () {
return self.element.id;
}, function (params) {
if (self.getData(self.element.id).length === 0) {
if (self.type === 'deck_card') {
self.activityservice.loadComments(self.element.id);
}
self.loading = true;
self.fetchUntilResults();
}
self.activityservice.fetchNewerActivities(self.type, self.element.id).then(function () {});
if (self.type === 'deck_card') {
self.cardservice.getCurrent().commentsUnread = 0;
}
}, true);
let $target = $('.newCommentForm .message');
this.applyAtWho($target);
this.activityservice.subscribe(this.$scope, function() {
self.$scope.$apply();
});
if (typeof OCA.Activity.Templates !== 'undefined') {
OCA.Activity.Templates.userLocal = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
var helper;
// Compiled handlesbars template
// '<span class="avatar-name-wrapper"><avatar ng-attr-contactsmenu ng-attr-tooltip ng-attr-user="{{ id }}" ng-attr-displayname="{{name}}" ng-attr-size="16"></avatar> {{ name }}</span>';
return "<span class=\"avatar-name-wrapper\"><avatar ng-attr-contactsmenu ng-attr-tooltip ng-attr-user=\""
+ container.escapeExpression(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"id","hash":{},"data":data}) : helper)))
+ "\" ng-attr-displayname=\""
+ container.escapeExpression(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"name","hash":{},"data":data}) : helper)))
+ "\" ng-attr-size=\"16\"></avatar> "
+ container.escapeExpression(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"name","hash":{},"data":data}) : helper)))
+ "</span>";
},"useData":true});
} else {
OCA.Activity.RichObjectStringParser._userLocalTemplate = '<span class="avatar-name-wrapper"><avatar ng-attr-contactsmenu ng-attr-tooltip ng-attr-user="{{ id }}" ng-attr-displayname="{{name}}" ng-attr-size="16"></avatar> {{ name }}</span>';
}
}
applyAtWho($target) {
const self = this;
if (!$target) {
return;
}
$target.atwho({
at: '@',
callbacks: {
remoteFilter: function(query, callback) {
let uids = self.boardservice.getUsers();
uids = uids.filter((x) => x.uid.toLowerCase().includes(query.toLowerCase()) || x.displayname.toLowerCase().includes(query.toLowerCase()));
callback(uids);
},
highlighter: function (li) {
// misuse the highlighter callback to instead of
// highlighting loads the avatars.
var $li = $(li);
$li.find('.avatar').avatar(undefined, 32);
return $li;
},
sorter: function (q, items) { return items; }
},
displayTpl: function (item) {
return '<li>' +
'<span class="avatar-name-wrapper">' +
'<span class="avatar" ' +
'data-username="' + escapeHTML(item.uid) + '" ' + // for avatars
'data-user="' + escapeHTML(item.uid) + '" ' + // for contactsmenu
'data-user-display-name="' + escapeHTML(item.displayname) + '">' +
'</span>' +
'<strong>' + escapeHTML(item.displayname) + '</strong>' +
'</span></li>';
},
insertTpl: function (item) {
return '' +
'<span class="avatar-name-wrapper">' +
'<span class="avatar" ' +
'data-username="' + escapeHTML(item.uid) + '" ' + // for avatars
'data-user="' + escapeHTML(item.uid) + '" ' + // for contactsmenu
'data-user-display-name="' + escapeHTML(item.displayname) + '">' +
'</span>' +
'<strong>' + escapeHTML(item.displayname) + '</strong>' +
'</span>';
},
searchKey: 'displayname'
});
$target.on('inserted.atwho', function (je, $el) {
$(je.target).find(
'span[data-username="' + $el.find('[data-username]').data('username') + '"]'
).avatar(undefined, 16);
});
$target.on('shown.atwho', function (je) {
$target.find('.avatar').avatar(undefined, 16);
});
}
commentBodyToPlain(content) {
let $comment = $('<div/>').html(content);
$comment.find('.avatar-name-wrapper').each(function () {
var $this = $(this);
var $inserted = $this.parent();
$inserted.html('@' + $this.find('.avatar').data('username'));
});
$comment.html(OCP.Comments.richToPlain($comment.html()));
$comment.html($comment.html().replace(/<br\s*[\/]?>/gi, '\n'));
return $comment.text();
}
static _composeHTMLMention(uid, displayName) {
var avatar = '' +
'<span class="avatar" data-username="' + escapeHTML(uid) + '" data-user="' + escapeHTML(uid) + '" ng-attr-size="16" ' +
'ng-attr-user="' + escapeHTML(uid) + '" ' +
'ng-attr-displayname="' + escapeHTML(displayName) + '" ng-attr-contactsmenu="true">' +
'</span>';
var isCurrentUser = (uid === OC.getCurrentUser().uid);
return '' +
'<span class="atwho-inserted" contenteditable="false">' +
'<span class="avatar-name-wrapper' + (isCurrentUser ? ' currentUser' : '') + '">' +
avatar +
'<strong>' + escapeHTML(displayName) + '</strong>' +
'</span>' +
'</span>';
}
formatMessage(activity) {
let message = activity.message;
let mentions = activity.commentModel.get('mentions');
const editMode = false;
message = escapeHTML(message).replace(/\n/g, '<br/>');
for(var i in mentions) {
if(!mentions.hasOwnProperty(i)) {
return;
}
var mention = '@' + mentions[i].mentionId;
// escape possible regex characters in the name
mention = mention.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const displayName = ActivityController._composeHTMLMention(mentions[i].mentionId, mentions[i].mentionDisplayName);
// replace every mention either at the start of the input or after a whitespace
// followed by a non-word character.
message = message.replace(new RegExp('(^|\\s)(' + mention + ')\\b', 'g'),
function(match, p1) {
// to get number of whitespaces (0 vs 1) right
return p1+displayName;
}
);
}
if(editMode !== true) {
message = OCP.Comments.plainToRich(message);
}
return message;
}
postComment() {
const self = this;
this.status.commentCreateLoading = true;
let content = this.commentBodyToPlain(self.$scope.newComment);
if (content.length < 1) {
self.status.commentCreateLoading = false;
OC.Notification.showTemporary(t('deck', 'Please provide a content for your comment.'));
return;
}
var model = this.activityservice.commentCollection.create({
actorId: OC.getCurrentUser().uid,
actorDisplayName: OC.getCurrentUser().displayName,
actorType: 'users',
verb: 'comment',
message: content,
creationDateTime: (new Date()).toUTCString()
}, {
at: 0,
// wait for real creation before adding
wait: true,
success: function() {
self.$scope.newComment = '';
self.activityservice.fetchNewerActivities(self.type, self.element.id).then(function () {});
self.status.commentCreateLoading = false;
},
error: function() {
self.status.commentCreateLoading = false;
OC.Notification.showTemporary(t('deck', 'Posting the comment failed.'));
}
});
}
updateComment(item) {
item.commentEdit = this.formatMessage(item);
let $target = $('.newCommentForm .message');
this.applyAtWho($target);
/** Workaround to trigger avatar rendering after the view has been updated */
window.setTimeout(function () {
$target.find('.avatar').avatar(undefined, 16);
}, 0);
}
editComment(item) {
const self = this;
let content = this.commentBodyToPlain(item.commentEdit);
if (content.length < 1) {
OC.Notification.showTemporary(t('deck', 'Please provide a content for your comment.'));
return;
}
/** We need to save the model and afterwards run a fetch to update the mentions
* and call apply to propagate the changes to angular
*/
item.commentModel.on('sync', function() {
item.commentModel.off('sync');
item.commentModel.fetch({
success: function() {
self.$scope.$apply();
}
});
});
item.commentModel.save({
message: content,
});
item.message = content;
item.commentEdit = undefined;
}
deleteComment(item) {
item.commentModel.destroy();
item.deleted = true;
item.commentModel = undefined;
item.message = t('deck', 'The comment has been deleted');
}
getData(id) {
return this.activityservice.getData(this.type, id);
}
parseMessage(activity) {
let subject = activity.subject_rich[0];
let parameters = activity.subject_rich[1];
if (parameters.after && parameters.after.id && parameters.after.id.startsWith('dt:')) {
let dateTime = parameters.after.id.substr(3);
parameters.after.name = moment(dateTime).format('L LTS');
}
return OCA.Activity.RichObjectStringParser.parseMessage(subject, parameters);
}
fetchUntilResults () {
const self = this;
let dataLengthBefore = self.getData(self.element.id).length;
let _executeFetch = function() {
let promise = self.activityservice.fetchMoreActivities(self.type, self.element.id);
promise.then(function (data) {
let dataLengthAfter = self.getData(self.element.id).length;
if (data !== null && (dataLengthAfter <= dataLengthBefore || dataLengthAfter < self.activityservice.RESULT_PER_PAGE)) {
_executeFetch();
} else {
self.loading = false;
}
}, function () {
self.loading = false;
self.$scope.$apply();
});
};
_executeFetch();
}
getComments() {
return this.activityservice.comments;
}
getActivityStream() {
let activities = this.activityservice.getData(this.type, this.element.id);
return activities;
}
page() {
if (!this.activityservice.since[this.type][this.element.id].finished) {
this.loading = true;
this.fetchUntilResults();
} else {
this.loading = false;
}
}
loadingNewer() {
return this.activityservice.runningNewer;
}
t(text) {
return t('deck', text);
}
}
let activityComponent = {
templateUrl: OC.linkTo('deck', 'templates/part.card.activity.html'),
controller: ActivityController,
bindings: {
type: '@',
element: '='
}
};
export default activityComponent;

View File

@@ -4,27 +4,41 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/** global: OC */ import app from '../app/App.js';
app.controller('AppController', function ($scope, $location, $http, $route, $log, $rootScope) {
/* globals oc_current_user: false */
app.controller('AppController', function ($scope, $location, $http, $log, $rootScope, $attrs) {
$rootScope.sidebar = { $rootScope.sidebar = {
show: false show: false
}; };
$scope.sidebar = $rootScope.sidebar; $scope.sidebar = $rootScope.sidebar;
$scope.user = oc_current_user; $scope.user = oc_current_user;
}); $rootScope.config = JSON.parse($attrs.config);
$rootScope.compactMode = localStorage.getItem('deck.compactMode') === 'true';
$scope.appNavigationHide = localStorage.getItem('deck.appNavigationHide') === 'true';
$scope.toggleSidebar = function() {
if ($(window).width() > 768) {
$log.debug($scope.appNavigationHide);
$scope.appNavigationHide = !$scope.appNavigationHide;
localStorage.setItem('deck.appNavigationHide', JSON.stringify($scope.appNavigationHide));
}
};
});

View File

@@ -0,0 +1,78 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/* global OC */
class AttachmentListController {
constructor ($scope, CardService, FileService) {
'ngInject';
this.cardservice = CardService;
this.fileservice = FileService;
this.attachments = CardService.getCurrent().attachments;
}
mimetypeForAttachment(attachment) {
let url = OC.MimeType.getIconUrl(attachment.extendedData.mimetype);
let styles = {
'background-image': `url("${url}")`,
};
return styles;
}
attachmentUrl(attachment) {
let cardId = this.cardservice.getCurrent().id;
let attachmentId = attachment.id;
return OC.generateUrl(`/apps/deck/cards/${cardId}/attachment/${attachmentId}`);
}
getAttachmentMarkdown(attachment) {
const inlineMimetypes = ['image/png', 'image/jpg', 'image/jpeg'];
let url = this.attachmentUrl(attachment);
let filename = attachment.data;
let insertText = `[📎 ${filename}](${url})`;
if (inlineMimetypes.indexOf(attachment.extendedData.mimetype) > -1) {
insertText = `![📎 ${filename}](${url})`;
}
return insertText;
}
select(attachment) {
this.onSelect({attachment: this.getAttachmentMarkdown(attachment)});
}
abort() {
this.onAbort();
}
}
let attachmentListComponent = {
templateUrl: '/card.attachments.html',
controller: AttachmentListController,
bindings: {
isFileSelector: '<',
attachments: '=',
onSelect: '&',
onAbort: '&'
}
};
export default attachmentListComponent;

View File

@@ -4,24 +4,25 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/* global oc_defaults OC */ import app from '../app/App.js';
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter) { /* global oc_defaults OC OCP OCA */
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter, FileService) {
$scope.sidebar = $rootScope.sidebar; $scope.sidebar = $rootScope.sidebar;
@@ -39,6 +40,49 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
$scope.labelservice = LabelService; $scope.labelservice = LabelService;
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD']; $scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
$scope.board = BoardService.getCurrent(); $scope.board = BoardService.getCurrent();
$scope.uploader = FileService.uploader;
$scope.searchText = '';
$scope.startTitleEdit = function(card) {
card.renameTitle = card.title;
card.status = card.status || {};
card.status.editCard = true;
};
$scope.finishTitleEdit = function(card) {
var newTitle;
if (!card.renameTitle || !card.renameTitle.trim()) {
newTitle = '';
} else {
newTitle = card.renameTitle.trim();
}
if (newTitle === card.title) {
// title unchanged
card.status.editCard = false;
delete card.renameTitle;
} else if (newTitle !== '') {
// title changed
card.title = newTitle;
CardService.update(card).then(function (data) {
card.status.editCard = false;
delete card.renameTitle;
});
} else {
// empty title
card.status.editCard = false;
delete card.renameTitle;
}
};
$scope.$watch(function() {
return $scope.params.tab;
}, function (newTab, oldTab) {
if (newTab === 2 && oldTab !== 2) {
CardService.fetchDeleted($scope.id);
StackService.fetchDeleted($scope.id);
}
});
// workaround for $stateParams changes not being propagated // workaround for $stateParams changes not being propagated
$scope.$watch(function() { $scope.$watch(function() {
@@ -46,8 +90,24 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
}, function (params) { }, function (params) {
$scope.params = params; $scope.params = params;
}, true); }, true);
$scope.params = $state; $scope.params = $state.params;
/**
* Check for markdown checkboxes in description to render the counter
*
* This should probably be moved to the backend at some point
*
* @param text
* @returns array of [finished, total] checkboxes
*/
$scope.getCheckboxes = function(text) {
const regTotal = /\[(X|\s|\_|\-)\]/igm;
const regFinished = /\[(X|\_|\-)\]/igm;
return [
((text || '').match(regFinished) || []).length,
((text || '').match(regTotal) || []).length
];
};
$scope.search = function (searchText) { $scope.search = function (searchText) {
$scope.searchText = searchText; $scope.searchText = searchText;
@@ -88,6 +148,11 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
} }
}); });
$scope.toggleCompactMode = function() {
$rootScope.compactMode = !$rootScope.compactMode;
localStorage.setItem('deck.compactMode', JSON.stringify($rootScope.compactMode));
};
$scope.stacksData = StackService; $scope.stacksData = StackService;
$scope.stacks = []; $scope.stacks = [];
$scope.$watch('stacksData', function () { $scope.$watch('stacksData', function () {
@@ -152,30 +217,102 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
// Create a new Stack // Create a new Stack
$scope.createStack = function () { $scope.createStack = function () {
StackService.create($scope.newStack).then(function (data) { StackService.create($scope.newStack).then(function (data) {
$scope.newStack.title = ""; $scope.newStack.title = '';
}); });
}; };
$scope.createCard = function (stack, title) { $scope.createCard = function (stack, title) {
var newCard = { if (this['addCardForm' + stack].$valid) {
'title': title, var newCard = {
'stackId': stack, 'title': title,
'type': 'plain' 'stackId': stack,
}; 'type': 'plain'
CardService.create(newCard).then(function (data) { };
$scope.stackservice.addCard(data); CardService.create(newCard).then(function (data) {
$scope.newCard.title = ""; $scope.stackservice.addCard(data);
}); $scope.newCard.title = '';
});
}
};
$scope.stackDelete = function (stack) {
$scope.stackservice.delete(stack.id);
};
$scope.stackUndoDelete = function (deletedStack) {
return StackService.undoDelete(deletedStack);
}; };
$scope.cardDelete = function (card) { $scope.cardDelete = function (card) {
CardService.delete(card.id); CardService.delete(card.id).then(function () {
StackService.removeCard(card); StackService.removeCard(card);
$scope.sidebar.show = false;
});
}; };
$scope.cardOrCardAndStackUndoDelete = function (deletedCard) {
var associatedDeletedStack = $scope.stackservice.deleted[deletedCard.stackId];
if(associatedDeletedStack !== undefined) {
$scope.cardAndStackUndoDeleteAskForConfirmation(deletedCard, associatedDeletedStack);
} else {
$scope.cardUndoDelete(deletedCard);
}
};
$scope.cardAndStackUndoDeleteAskForConfirmation = function(deletedCard, associatedDeletedStack) {
OC.dialogs.confirm(
t('deck', 'The associated stack is deleted as well, it will be restored as well.'),
t('deck', 'Restore associated stack'),
function(state) {
if (state) {
$scope.cardAndStackUndoDelete(deletedCard, associatedDeletedStack);
}
}
);
};
$scope.cardAndStackUndoDelete = function(deletedCard, associatedDeletedStack) {
$scope.stackUndoDelete(associatedDeletedStack).then(function() {
$scope.cardUndoDelete(deletedCard);
});
};
$scope.cardUndoDelete = function(deletedCard) {
CardService.undoDelete(deletedCard).then(function() {
StackService.addCard(deletedCard);
});
};
$scope.cardArchive = function (card) { $scope.cardArchive = function (card) {
CardService.archive(card); CardService.archive(card);
StackService.removeCard(card); StackService.removeCard(card);
}; };
$scope.isCurrentUserAssigned = function (card) {
if (! CardService.get(card.id).assignedUsers) {
return false;
}
var userList = CardService.get(card.id).assignedUsers.filter(function (obj) {
return obj.participant.uid === OC.getCurrentUser().uid;
});
return userList.length === 1;
};
$scope.cardAssignToMe = function (card) {
CardService.assignUser(card, OC.getCurrentUser().uid)
.then(
function() {StackService.updateCard(card);}
);
// TODO: remove this jquery call. Fix and use appPopoverMenuUtils instead
$('.popovermenu').addClass('hidden');
};
$scope.cardUnassignFromMe = function (card) {
CardService.unassignUser(card, OC.getCurrentUser().uid);
StackService.updateCard(card);
// TODO: remove this jquery call.Fix and use appPopoverMenuUtils instead
$('.popovermenu').addClass('hidden');
};
$scope.cardUnarchive = function (card) { $scope.cardUnarchive = function (card) {
CardService.unarchive(card); CardService.unarchive(card);
StackService.removeCard(card); StackService.removeCard(card);
@@ -188,10 +325,11 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
BoardService.getCurrent().labels.splice(i, 1); BoardService.getCurrent().labels.splice(i, 1);
// TODO: remove from cards // TODO: remove from cards
}; };
$scope.labelCreate = function (label) { $scope.labelCreate = function (label) {
label.boardId = $scope.id; label.boardId = $scope.id;
LabelService.create(label).then(function (data) { LabelService.create(label).then(function (data) {
$scope.newStack.title = ""; $scope.newStack.title = '';
BoardService.getCurrent().labels.push(data); BoardService.getCurrent().labels.push(data);
$scope.status.createLabel = false; $scope.status.createLabel = false;
$scope.newLabel = {}; $scope.newLabel = {};
@@ -207,9 +345,14 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
BoardService.addAcl(sharee); BoardService.addAcl(sharee);
$scope.status.addSharee = null; $scope.status.addSharee = null;
}; };
$scope.aclDelete = function (acl) { $scope.aclDelete = function (acl) {
BoardService.deleteAcl(acl); BoardService.deleteAcl(acl).then(function(data) {
$scope.loadDefault();
$scope.refreshData();
});
}; };
$scope.aclUpdate = function (acl) { $scope.aclUpdate = function (acl) {
BoardService.updateAcl(acl); BoardService.updateAcl(acl);
}; };
@@ -234,7 +377,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
itemMoved: function (event) { itemMoved: function (event) {
event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column; event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column;
var order = event.dest.index; var order = event.dest.index;
var card = event.source.itemScope.c; var card = $scope.cardservice.get(event.source.itemScope.c.id);
var newStack = event.dest.sortableScope.$parent.s.id; var newStack = event.dest.sortableScope.$parent.s.id;
var oldStack = card.stackId; var oldStack = card.stackId;
card.stackId = newStack; card.stackId = newStack;
@@ -250,7 +393,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
}, },
orderChanged: function (event) { orderChanged: function (event) {
var order = event.dest.index; var order = event.dest.index;
var card = event.source.itemScope.c; var card = $scope.cardservice.get(event.source.itemScope.c.id);
var stack = event.dest.sortableScope.$parent.s.id; var stack = event.dest.sortableScope.$parent.s.id;
CardService.reorder(card, order).then(function (data) { CardService.reorder(card, order).then(function (data) {
StackService.reorderCard(card, order); StackService.reorderCard(card, order);
@@ -264,7 +407,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
// auto scroll on drag // auto scroll on drag
dragMove: function (itemPosition, containment, eventObj) { dragMove: function (itemPosition, containment, eventObj) {
if (eventObj) { if (eventObj) {
var container = $("#board"); var container = $('#board');
var offset = container.offset(); var offset = container.offset();
var targetX = eventObj.pageX - (offset.left || container.scrollLeft()); var targetX = eventObj.pageX - (offset.left || container.scrollLeft());
var targetY = eventObj.pageY - (offset.top || container.scrollTop()); var targetY = eventObj.pageY - (offset.top || container.scrollTop());
@@ -299,7 +442,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
containment: '#innerBoard', containment: '#innerBoard',
dragMove: function (itemPosition, containment, eventObj) { dragMove: function (itemPosition, containment, eventObj) {
if (eventObj) { if (eventObj) {
var container = $("#board"); var container = $('#board');
var offset = container.offset(); var offset = container.offset();
var targetX = eventObj.pageX - (offset.left || container.scrollLeft()); var targetX = eventObj.pageX - (offset.left || container.scrollLeft());
var targetY = eventObj.pageY - (offset.top || container.scrollTop()); var targetY = eventObj.pageY - (offset.top || container.scrollTop());
@@ -327,4 +470,27 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
}; };
}; };
$scope.colorValue = function(color) {
const re = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;
if (re.test(color)) {
return color;
}
return '';
};
$scope.attachmentCount = function(card) {
if (Array.isArray(card.attachments)) {
return card.attachments.filter((obj) => obj.deletedAt === 0).length;
}
return card.attachmentCount;
};
$scope.unreadCommentCount = function(card) {
return card.commentsUnread;
};
$scope.isTimelineEnabled = function() {
return OCP.Comments && OCA.Activity;
};
}); });

View File

@@ -4,53 +4,137 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/* global app moment */ /* global app moment angular OC OCP OCA */
import app from '../app/App.js';
app.controller('CardController', function ($scope, $rootScope, $routeParams, $location, $stateParams, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService) { app.controller('CardController', function ($scope, $rootScope, $sce, $location, $stateParams, $state, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService, markdownItConverter, FileService) {
$scope.sidebar = $rootScope.sidebar; $scope.sidebar = $rootScope.sidebar;
$scope.status = { $scope.status = {
renameTitle: '',
lastEdit: 0, lastEdit: 0,
lastSave: Date.now() lastSave: Date.now()
}; };
$scope.cardservice = CardService; $scope.cardservice = CardService;
$scope.fileservice = FileService;
$scope.cardId = $stateParams.cardId; $scope.cardId = $stateParams.cardId;
$scope.statusservice = StatusService.getInstance(); $scope.statusservice = StatusService.getInstance();
$scope.boardservice = BoardService; $scope.boardservice = BoardService;
$scope.isArray = angular.isArray;
// workaround for $stateParams changes not being propagated
$scope.$watch(function() {
return $state.params;
}, function (params) {
$scope.params = params;
$scope.fileservice.reset();
}, true);
$scope.params = $state.params;
$scope.addAttachmentToDescription = function(insertText) {
let el = document.querySelectorAll('textarea')[0];
let start = el.selectionStart;
let end = el.selectionEnd;
let text = $scope.status.edit.description || '';
let before = text.substring(0, start);
let after = text.substring(end, text.length);
let newText = before + '\n' + insertText + '\n' + after;
$scope.status.edit.description = newText;
el.selectionStart = el.selectionEnd = start + newText.length;
el.focus();
$scope.status.continueEdit = false;
$scope.cardEditDescriptionChanged();
$scope.status.selectAttachment = false;
};
$scope.abortAttachmentSelection = function() {
$scope.status.continueEdit = false;
$scope.status.selectAttachment = false;
let el = document.querySelectorAll('textarea')[0];
el.focus();
};
$scope.statusservice.retainWaiting(); $scope.statusservice.retainWaiting();
$scope.description = function() {
return $scope.rendered;
};
$scope.updateMarkdown = function(content) {
// only trust the html from markdown-it-checkbox
$scope.rendered = $sce.trustAsHtml(markdownItConverter.render(content || ''));
};
CardService.fetchOne($scope.cardId).then(function (data) { CardService.fetchOne($scope.cardId).then(function (data) {
$scope.statusservice.releaseWaiting(); $scope.statusservice.releaseWaiting();
$scope.archived = CardService.getCurrent().archived; $scope.archived = CardService.getCurrent().archived;
$scope.updateMarkdown(CardService.getCurrent().description);
}, function (error) { }, function (error) {
}); });
$scope.cardRenameShow = function () { $scope.cardRenameShow = function () {
if ($scope.archived || !BoardService.canEdit()) if ($scope.archived || !BoardService.canEdit()) {
{return false;} return false;
else { } else {
$scope.status.renameTitle = CardService.getCurrent().title;
$scope.status.cardRename = true; $scope.status.cardRename = true;
} }
}; };
$scope.cardEditDescriptionShow = function ($event) {
$scope.toggleCheckbox = function (id) {
$('#markdown input[type=checkbox]').attr('disabled', true);
$scope.status.edit = angular.copy(CardService.getCurrent());
var reg = /\[(X|\s|\_|\-)\]/ig;
var nth = 0;
$scope.status.edit.description = $scope.status.edit.description.replace(reg, function (match, i, original) {
var result = match;
if ('' + nth++ === '' + id) {
if (match.match(/^\[\s\]/i)) {
result = match.replace(/\[\s\]/i, '[x]');
}
if (match.match(/^\[x\]/i)) {
result = match.replace(/\[x\]/i, '[ ]');
}
return result;
}
return match;
});
CardService.update($scope.status.edit).then(function (data) {
var header = $('.tabDetails');
header.find('.save-indicator.unsaved').hide();
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
});
$('#markdown input[type=checkbox]').removeAttr('disabled');
};
$scope.clickCardDescription = function ($event) {
var checkboxId = $($event.target).data('id');
if ($event.target.tagName === 'LABEL') {
$scope.toggleCheckbox(checkboxId);
$event.stopPropagation();
return false;
}
if ($event.target.tagName === 'INPUT') {
$event.stopPropagation();
return;
}
if (BoardService.isArchived() || CardService.getCurrent().archived) { if (BoardService.isArchived() || CardService.getCurrent().archived) {
return false; return false;
} }
@@ -63,51 +147,68 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
}; };
$scope.cardEditDescriptionChanged = function ($event) { $scope.cardEditDescriptionChanged = function ($event) {
$scope.status.lastEdit = Date.now(); $scope.status.lastEdit = Date.now();
var header = $('.section-header.card-description'); var header = $('.tabDetails');
header.find('.save-indicator.unsaved').show(); header.find('.save-indicator.unsaved').show();
header.find('.save-indicator.saved').hide(); header.find('.save-indicator.saved').hide();
}; };
$interval(function() { $interval(function() {
var currentTime = Date.now(); var currentTime = Date.now();
var timeSinceEdit = currentTime-$scope.status.lastEdit; var timeSinceEdit = currentTime-$scope.status.lastEdit;
if (timeSinceEdit > 1000 && $scope.status.lastEdit > $scope.status.lastSave) { if (timeSinceEdit > 1000 && $scope.status.lastEdit > $scope.status.lastSave && !$scope.status.saving) {
$scope.status.lastSave = currentTime; $scope.status.lastSave = currentTime;
var header = $('.section-header.card-description'); $scope.status.saving = true;
var header = $('.tabDetails');
header.find('.save-indicator.unsaved').fadeIn(500); header.find('.save-indicator.unsaved').fadeIn(500);
CardService.update($scope.status.edit).then(function (data) { CardService.update($scope.status.edit).then(function (data) {
var header = $('.section-header.card-description'); var header = $('.tabDetails');
header.find('.save-indicator.unsaved').hide(); header.find('.save-indicator.unsaved').hide();
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000); header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
$scope.status.saving = false;
}); });
} }
}, 500); }, 500, 0, false);
// handle rename to update information on the board as well // handle rename to update information on the board as well
$scope.cardRename = function (card) { $scope.cardRename = function (card) {
CardService.rename(card).then(function (data) { var newTitle;
StackService.updateCard(card); if (!$scope.status.renameTitle || !$scope.status.renameTitle.trim()) {
newTitle = '';
} else {
newTitle = $scope.status.renameTitle.trim();
}
if (newTitle === card.title) {
// title unchanged
$scope.status.renameCard = false; $scope.status.renameCard = false;
}); } else if (newTitle !== '') {
// title changed
card.title = newTitle;
CardService.rename(card).then(function (data) {
$scope.status.renameCard = false;
});
} else {
// empty title
$scope.status.renameTitle = card.title;
$scope.status.renameCard = false;
}
}; };
$scope.cardUpdate = function (card) { $scope.cardUpdate = function (card) {
CardService.update(card).then(function (data) { CardService.update(card).then(function (data) {
$scope.status.cardEditDescription = false; $scope.status.cardEditDescription = false;
var header = $('.section-content.card-description'); $scope.updateMarkdown($scope.status.edit.description);
var header = $('.tabDetails');
header.find('.save-indicator.unsaved').hide(); header.find('.save-indicator.unsaved').hide();
header.find('.save-indicator.saved').fadeIn(500).fadeOut(1000); header.find('.save-indicator.saved').fadeIn(500).fadeOut(1000);
StackService.updateCard(card);
}); });
}; };
$scope.labelAssign = function (element, model) { $scope.labelAssign = function (element, model) {
CardService.assignLabel($scope.cardId, element.id).then(function (data) { CardService.assignLabel($scope.cardId, element.id).then(function (data) {
StackService.updateCard(CardService.getCurrent());
}); });
}; };
$scope.labelRemove = function (element, model) { $scope.labelRemove = function (element, model) {
CardService.removeLabel($scope.cardId, element.id).then(function (data) { CardService.removeLabel($scope.cardId, element.id).then(function (data) {
StackService.updateCard(CardService.getCurrent());
}); });
}; };
@@ -122,7 +223,6 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
newDate.year(duedate.year()); newDate.year(duedate.year());
element.duedate = newDate.toISOString(); element.duedate = newDate.toISOString();
CardService.update(element); CardService.update(element);
StackService.updateCard(element);
}; };
$scope.setDuedateTime = function (time) { $scope.setDuedateTime = function (time) {
var element = CardService.getCurrent(); var element = CardService.getCurrent();
@@ -134,45 +234,41 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
newDate.minute(time.minute()); newDate.minute(time.minute());
element.duedate = newDate.toISOString(); element.duedate = newDate.toISOString();
CardService.update(element); CardService.update(element);
StackService.updateCard(element);
}; };
$scope.resetDuedate = function () { $scope.resetDuedate = function () {
var element = CardService.getCurrent(); var element = CardService.getCurrent();
element.duedate = null; element.duedate = null;
CardService.update(element); CardService.update(element);
StackService.updateCard(element);
}; };
/** /**
* Show ui-select field when clicking the add button * Show ui-select field when clicking the add button
*/ */
$scope.showAssignUser = function() { $scope.toggleAssignUser = function() {
$scope.status.showAssignUser = true; $scope.status.showAssignUser = !$scope.status.showAssignUser;
$timeout(function() { if ($scope.status.showAssignUser === true) {
$('#assignUserSelect').find('a').click(); $timeout(function () {
}); $('#assignUserSelect').find('a').click();
});
}
}; };
/** /**
* Hide ui-select when select list is closed * Hide ui-select when select list is closed
*/ */
$scope.assingUserOpenClose = function(isOpen) { $scope.assingUserOpenClose = function(isOpen) {
if (!isOpen) { $scope.status.showAssignUser = isOpen;
$scope.status.showAssignUser = false;
}
}; };
$scope.addAssignedUser = function(item) { $scope.addAssignedUser = function(item) {
CardService.assignUser(CardService.getCurrent(), item.uid).then(function (data) { CardService.assignUser(CardService.getCurrent(), item.uid).then(function (data) {
StackService.updateCard(CardService.getCurrent());
}); });
$scope.status.showAssignUser = false; $scope.status.showAssignUser = false;
}; };
$scope.removeAssignedUser = function(uid) { $scope.removeAssignedUser = function(uid) {
CardService.unassignUser(CardService.getCurrent(), uid).then(function (data) { CardService.unassignUser(CardService.getCurrent(), uid).then(function (data) {
StackService.updateCard(CardService.getCurrent());
}); });
}; };
@@ -183,4 +279,8 @@ app.controller('CardController', function ($scope, $rootScope, $routeParams, $lo
}; };
}; };
}); $scope.isTimelineEnabled = function() {
return OCP.Comments && OCA.Activity;
};
});

View File

@@ -0,0 +1,44 @@
/*
* @copyright Copyright (c) 2018 Oskar Kurz <oskar.kurz@gmail.com>
*
* @author Oskar Kurz <oskar.kurz@gmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
/* global oc_defaults OC */
app.controller('ColorPickerController', ['$scope', function ($scope) {
$scope.hashedColor = '';
$scope.setColor = function (object, color) {
object.color = color;
object.hashedColor = '#' + color;
return object;
};
$scope.setHashedColor = function (object) {
object.color = object.hashedColor.substr(1);
return object;
};
$scope.getCustomBackground = function (color) {
return {'background-color': color};
};
}]);

View File

@@ -4,25 +4,25 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
/* global app angular */ /* global app angular oc_isadmin */
app.controller('ListController', function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService) { var ListController = function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService, $http, $q, $rootScope) {
function calculateNewColor() { function calculateNewColor() {
var boards = BoardService.getAll(); var boards = BoardService.getAll();
@@ -55,6 +55,63 @@ app.controller('ListController', function ($scope, $location, $filter, BoardServ
$scope.colors = ['0082c9', '00c9c6','00c906', 'c92b00', 'F1DB50', '7C31CC', '3A3B3D', 'CACBCD']; $scope.colors = ['0082c9', '00c9c6','00c906', 'c92b00', 'F1DB50', '7C31CC', '3A3B3D', 'CACBCD'];
$scope.boardservice = BoardService; $scope.boardservice = BoardService;
$scope.updatingBoard = null; $scope.updatingBoard = null;
$scope.isAdmin = oc_isadmin;
$scope.canCreate = $rootScope.config.canCreate;
if ($scope.isAdmin) {
OC.Apps.enableDynamicSlideToggle();
$scope.groups = [];
$scope.groupLimit = [];
$scope.groupLimitDisabled = true;
let fetchGroups = function () {
var deferred = $q.defer();
// TODO: move to groups/details once 15 is min version
$http.get(OC.linkToOCS('cloud', 2) + 'groups').then(function (response) {
$scope.groups = response.data.ocs.data.groups.reduce((obj, item) => {
obj.push({
id: item,
displayname: item,
});
return obj;
}, []);
deferred.resolve($scope.groups);
}, function (error) {
deferred.reject('Error while loading groups');
});
$http.get(OC.generateUrl('apps/deck/config')).then(function (response) {
$scope.groupLimit = response.data.groupLimit;
$scope.groupLimitDisabled = false;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while loading groupLimit');
});
return deferred.promise;
};
let updateConfig = function() {
$scope.groupLimitDisabled = true;
var deferred = $q.defer();
$http.post(OC.generateUrl('apps/deck/config/groupLimit'), {value: $scope.groupLimit}).then(function (response) {
$scope.groupLimitDisabled = false;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while saving groupLimit');
});
return deferred.promise;
};
$scope.groupLimitAdd = function (element, model) {
$scope.groupLimit.push(element);
updateConfig();
};
$scope.groupLimitRemove = function (element, model) {
$scope.groupLimit = $scope.groupLimit.filter((el) => {
return el.id !== element.id;
});
updateConfig();
};
fetchGroups();
}
var filterData = function () { var filterData = function () {
if($element.attr('id') === 'app-navigation') { if($element.attr('id') === 'app-navigation') {
@@ -193,5 +250,6 @@ app.controller('ListController', function ($scope, $location, $filter, BoardServ
}); });
}; };
}); };
export default ListController;

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('appPopoverMenuUtils', function () { app.directive('appPopoverMenuUtils', function () {
'use strict'; 'use strict';

View File

@@ -20,6 +20,7 @@
* *
*/ */
import app from '../app/App.js';
// OwnCloud Click Handling // OwnCloud Click Handling
// https://doc.owncloud.org/server/8.0/developer_manual/app/css.html // https://doc.owncloud.org/server/8.0/developer_manual/app/css.html
app.directive('appNavigationEntryUtils', function () { app.directive('appNavigationEntryUtils', function () {

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('autofocusOnInsert', function () { app.directive('autofocusOnInsert', function () {
'use strict'; 'use strict';

View File

@@ -4,21 +4,22 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('avatar', function() { app.directive('avatar', function() {
'use strict'; 'use strict';
@@ -31,6 +32,10 @@ app.directive('avatar', function() {
link: function(scope, element, attr){ link: function(scope, element, attr){
scope.uid = attr.displayname; scope.uid = attr.displayname;
scope.displayname = attr.displayname; scope.displayname = attr.displayname;
scope.size = attr.size;
if (typeof scope.size === 'undefined') {
scope.size = 32;
}
var value = attr.user; var value = attr.user;
var avatardiv = $(element).find('.avatardiv'); var avatardiv = $(element).find('.avatardiv');
if(typeof attr.contactsmenu !== 'undefined' && attr.contactsmenu !== 'false') { if(typeof attr.contactsmenu !== 'undefined' && attr.contactsmenu !== 'false') {
@@ -43,8 +48,8 @@ app.directive('avatar', function() {
placement: 'top' placement: 'top'
}); });
} }
avatardiv.avatar(value, 32, false, false, false, attr.displayname); avatardiv.avatar(value, scope.size, false, false, false, attr.displayname);
}, },
controller: function () {} controller: function () {}
}; };
}); });

View File

@@ -0,0 +1,38 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('bindHtmlCompile', function ($compile) {
'use strict';
return {
restrict: 'A',
link: function (scope, element, attrs) {
scope.$watch(function () {
return scope.$eval(attrs.bindHtmlCompile);
}, function (value) {
element.html(value);
$compile(element.contents())(scope);
});
}
};
});

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('contactsmenudelete', function() { app.directive('contactsmenudelete', function() {
'use strict'; 'use strict';

View File

@@ -0,0 +1,59 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App';
app.directive('ngContenteditable', function($compile) {
return {
require: 'ngModel',
restrict: 'A',
scope: {
submit: '&ngSubmit'
},
link: function(scope, element, attrs, ngModel) {
//read the text typed in the div (syncing model with the view)
function read() {
ngModel.$setViewValue(element.html());
}
//render the data now in your model into your view
//$render is invoked when the modelvalue differs from the viewvalue
//see documentation: https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#
ngModel.$render = function() {
element.html(ngModel.$viewValue || '');
};
//do this whenever someone starts typing
element.bind('blur keyup change', function(event) {
scope.$apply(read);
});
element.bind('keydown', function(event) {
if(event.which === 13 && event.shiftKey) {
scope.submit();
}
});
}
};
});

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
/* global app */ /* global app */
/* gloabl t */ /* gloabl t */
@@ -29,9 +30,10 @@ app.directive('datepicker', function () {
return { return {
link: function (scope, elm, attr) { link: function (scope, elm, attr) {
return elm.datepicker({ return elm.datepicker({
dateFormat: 'yy-mm-dd', dateFormat: moment.localeData().longDateFormat('L').replace('YYYY', 'YY').toLowerCase(),
onSelect: function(date, inst) { onSelect: function(date, inst) {
scope.setDuedate(moment(date)); var selectedDate = $(this).datepicker('getDate');
scope.setDuedate(moment(selectedDate));
scope.$apply(); scope.$apply();
}, },
beforeShow: function(input, inst) { beforeShow: function(input, inst) {

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
// original idea from blockloop: http://stackoverflow.com/a/24090733 // original idea from blockloop: http://stackoverflow.com/a/24090733
app.directive('elastic', [ app.directive('elastic', [

View File

@@ -4,21 +4,22 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('search', function ($document, $location) { app.directive('search', function ($document, $location) {
'use strict'; 'use strict';
@@ -29,22 +30,32 @@ app.directive('search', function ($document, $location) {
'onSearch': '=' 'onSearch': '='
}, },
link: function (scope) { link: function (scope) {
var box = $('#searchbox'); if (OCA.Search && OCA.Search.Core) {
box.val($location.search().search); // eslint-disable-next-line no-unused-vars
const search = new OCA.Search((term) => {
var doSearch = function() { scope.$apply(function () {
var value = box.val(); scope.onSearch(term);
scope.$apply(function () { });
scope.onSearch(value); }, () => {
scope.$apply(function () {
scope.onSearch('');
});
}); });
}; } else {
const box = $('#searchbox');
box.val($location.search().search);
box.on('search keyup', function (event) { var doSearch = function () {
if (event.type === 'search' || event.keyCode === 13 ) { var value = box.val();
scope.$apply(function () {
scope.onSearch(value);
});
};
box.on('search keyup', function (event) {
doSearch(); doSearch();
} });
}); }
} }
}; };
}); });

View File

@@ -19,6 +19,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
import '../legacy/jquery.ui.timepicker.js';
import 'legacy/jquery.ui.timepicker.css';
/* global app */ /* global app */
/* global t */ /* global t */
@@ -29,7 +32,7 @@ app.directive('timepicker', function() {
return { return {
restrict: 'A', restrict: 'A',
link: function(scope, elm, attr) { link: function(scope, elm, attr) {
return elm.timepicker({ return $(elm).timepicker({
onSelect: function(date, inst) { onSelect: function(date, inst) {
scope.setDuedateTime(moment('2000-01-01 ' + date)); scope.setDuedateTime(moment('2000-01-01 ' + date));
scope.$apply(); scope.$apply();

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('boardFilterAcl', function() { app.filter('boardFilterAcl', function() {
return function(boards) { return function(boards) {

37
js/filters/bytesFilter.js Normal file
View File

@@ -0,0 +1,37 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.filter('bytes', function () {
return function (bytes, precision) {
if (isNaN(parseFloat(bytes, 10)) || !isFinite(bytes)) {
return '-';
}
if (typeof precision === 'undefined') {
precision = 2;
}
var units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'],
number = Math.floor(Math.log(bytes) / Math.log(1024));
return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number];
};
});

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
// usage | cardFilter({ member: 'admin'}) // usage | cardFilter({ member: 'admin'})

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('cardSearchFilter', function() { app.filter('cardSearchFilter', function() {
return function(cards, searchString) { return function(cards, searchString) {

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
/* global app */ /* global app */
/* global OC */ /* global OC */
@@ -45,7 +46,8 @@ app.filter('dateToTimestamp', function() {
app.filter('parseDate', function() { app.filter('parseDate', function() {
return function (date) { return function (date) {
if(moment(date).isValid()) { if(moment(date).isValid()) {
return moment(date).format('YYYY-MM-DD'); var dateFormat = moment.localeData().longDateFormat('L');
return moment(date).format(dateFormat);
} }
return ''; return '';
}; };

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('iconWhiteFilter', function () { app.filter('iconWhiteFilter', function () {
return function (hex) { return function (hex) {
@@ -31,7 +32,7 @@ app.filter('iconWhiteFilter', function () {
b: parseInt(result[3], 16) b: parseInt(result[3], 16)
} : null; } : null;
if (result === null) { if (result === null) {
return ""; return '';
} }
var r = color.r / 255; var r = color.r / 255;
var g = color.g / 255; var g = color.g / 255;
@@ -58,9 +59,9 @@ app.filter('iconWhiteFilter', function () {
h /= 6; h /= 6;
} }
if (l < 0.5) { if (l < 0.5) {
return "-white"; return '-white';
} else { } else {
return ""; return '';
} }
}; };
}); });

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('lightenColorFilter', function() { app.filter('lightenColorFilter', function() {
return function (hex) { return function (hex) {
@@ -29,9 +30,9 @@ app.filter('lightenColorFilter', function() {
b: parseInt(result[3], 16) b: parseInt(result[3], 16)
} : null; } : null;
if (result !== null) { if (result !== null) {
return "rgba(" + color.r + "," + color.g + "," + color.b + ",0.7)"; return 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',0.7)';
} else { } else {
return "#" + hex; return '#' + hex;
} }
}; };
}); });

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('orderObjectBy', function(){ app.filter('orderObjectBy', function(){
return function(input, attribute) { return function(input, attribute) {

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('textColorFilter', function () { app.filter('textColorFilter', function () {
return function (hex) { return function (hex) {
@@ -56,12 +57,12 @@ app.filter('textColorFilter', function () {
h /= 6; h /= 6;
} }
if (l < 0.5) { if (l < 0.5) {
return "#ffffff"; return '#ffffff';
} else { } else {
return "#000000"; return '#000000';
} }
} else { } else {
return "#000000"; return '#000000';
} }
}; };

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
/* global app */ /* global app */
/* global angular */ /* global angular */

33
js/init.js Normal file
View File

@@ -0,0 +1,33 @@
'use strict';
/* global __webpack_nonce__ OC */
__webpack_nonce__ = btoa(OC.requestToken); // eslint-disable-line no-native-reassign
// used for building a vendor stylesheet
import 'ng-sortable/dist/ng-sortable.css';
import angular from 'angular';
import markdownit from 'markdown-it';
global.markdownit = markdownit;
import app from './app/App.js';
import './app/Config.js';
import './app/Run.js';
import ListController from 'controller/ListController.js';
import attachmentListComponent from './controller/AttachmentController.js';
import activityComponent from './controller/ActivityController.js';
app.controller('ListController', ListController);
app.component('attachmentListComponent', attachmentListComponent);
app.component('activityComponent', activityComponent);
// require all the js files from subdirectories
var context = require.context('.', true, /(controller|service|filters|directive)\/(.*)\.js$/);
context.keys().forEach(function (key) {
context(key);
});

View File

@@ -0,0 +1,161 @@
/**
* @licence
*/
import CommentModel from './commentmodel.js';
import CommentSummaryModel from './commentsummarymodel.js';
/**
* @class CommentCollection
* @classdesc
*
* Collection of comments assigned to a file
*
*/
var CommentCollection = OC.Backbone.Collection.extend(
/** @lends OCA.AnnouncementCenter.Comments.CommentCollection.prototype */ {
sync: OC.Backbone.davSync,
model: CommentModel,
/**
* Object type
*
* @type string
*/
_objectType: 'deckCard',
/**
* Object id
*
* @type string
*/
_objectId: null,
/**
* True if there are no more page results left to fetch
*
* @type bool
*/
_endReached: false,
/**
* Number of comments to fetch per page
*
* @type int
*/
_limit : 5,
/**
* Initializes the collection
*
* @param {string} [options.objectType] object type
* @param {string} [options.objectId] object id
*/
initialize: function(models, options) {
options = options || {};
if (options.objectType) {
this._objectType = options.objectType;
}
if (options.objectId) {
this._objectId = options.objectId;
}
},
url: function() {
return OC.linkToRemote('dav') + '/comments/' +
encodeURIComponent(this._objectType) + '/' +
encodeURIComponent(this._objectId) + '/';
},
setObjectId: function(objectId) {
this._objectId = objectId;
},
hasMoreResults: function() {
return !this._endReached;
},
reset: function() {
this._endReached = false;
this._summaryModel = null;
return OC.Backbone.Collection.prototype.reset.apply(this, arguments);
},
/**
* Fetch the next set of results
*/
fetchNext: function(options) {
var self = this;
if (!this.hasMoreResults()) {
return null;
}
var body = '<?xml version="1.0" encoding="utf-8" ?>\n' +
'<oc:filter-comments xmlns:D="DAV:" xmlns:oc="http://owncloud.org/ns">\n' +
// load one more so we know there is more
' <oc:limit>' + (this._limit + 1) + '</oc:limit>\n' +
' <oc:offset>' + this.length + '</oc:offset>\n' +
'</oc:filter-comments>\n';
options = options || {};
var success = options.success;
options = _.extend({
remove: false,
parse: true,
data: body,
davProperties: CommentCollection.prototype.model.prototype.davProperties,
success: function(resp) {
if (resp.length <= self._limit) {
// no new entries, end reached
self._endReached = true;
} else {
// remove last entry, for next page load
resp = _.initial(resp);
}
if (!self.set(resp, options)) {
return false;
}
if (success) {
success.apply(null, arguments);
}
self.trigger('sync', 'REPORT', self, options);
}
}, options);
return this.sync('REPORT', this, options);
},
/**
* Returns the matching summary model
*
* @return {OCA.AnnouncementCenter.Comments.CommentSummaryModel} summary model
*/
getSummaryModel: function() {
if (!this._summaryModel) {
this._summaryModel = new CommentSummaryModel({
id: this._objectId,
objectType: this._objectType
});
}
return this._summaryModel;
},
/**
* Updates the read marker for this comment thread
*
* @param {Date} [date] optional date, defaults to now
* @param {Object} [options] backbone options
*/
updateReadMarker: function(date, options) {
options = options || {};
return this.getSummaryModel().save({
readMarker: (date || new Date()).toUTCString()
}, options);
}
});
export default CommentCollection;

119
js/legacy/commentmodel.js Normal file
View File

@@ -0,0 +1,119 @@
/*
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
var NS_OWNCLOUD = 'http://owncloud.org/ns';
/**
* @class CommentModel
* @classdesc
*
* Comment
*
*/
var CommentModel = OC.Backbone.Model.extend(
/** @lends OCA.Comments.CommentModel.prototype */ {
sync: OC.Backbone.davSync,
/**
* Object type
*
* @type string
*/
_objectType: 'deckCard',
/**
* Object id
*
* @type string
*/
_objectId: null,
initialize: function(model, options) {
options = options || {};
if (options.objectType) {
this._objectType = options.objectType;
}
if (options.objectId) {
this._objectId = options.objectId;
}
},
defaults: {
actorType: 'users',
objectType: 'deckCard'
},
davProperties: {
'id': '{' + NS_OWNCLOUD + '}id',
'message': '{' + NS_OWNCLOUD + '}message',
'actorType': '{' + NS_OWNCLOUD + '}actorType',
'actorId': '{' + NS_OWNCLOUD + '}actorId',
'actorDisplayName': '{' + NS_OWNCLOUD + '}actorDisplayName',
'creationDateTime': '{' + NS_OWNCLOUD + '}creationDateTime',
'objectType': '{' + NS_OWNCLOUD + '}objectType',
'objectId': '{' + NS_OWNCLOUD + '}objectId',
'isUnread': '{' + NS_OWNCLOUD + '}isUnread',
'mentions': '{' + NS_OWNCLOUD + '}mentions'
},
parse: function(data) {
return {
id: data.id,
message: data.message,
actorType: data.actorType,
actorId: data.actorId,
actorDisplayName: data.actorDisplayName,
creationDateTime: data.creationDateTime,
objectType: data.objectType,
objectId: data.objectId,
isUnread: (data.isUnread === 'true'),
mentions: this._parseMentions(data.mentions)
};
},
_parseMentions: function(mentions) {
if(_.isUndefined(mentions)) {
return {};
}
var result = {};
for(var i in mentions) {
var mention = mentions[i];
if(_.isUndefined(mention.localName) || mention.localName !== 'mention') {
continue;
}
result[i] = {};
for (var child = mention.firstChild; child; child = child.nextSibling) {
if(_.isUndefined(child.localName) || !child.localName.startsWith('mention')) {
continue;
}
result[i][child.localName] = child.textContent;
}
}
return result;
},
url: function() {
let baseUrl;
if (typeof this.collection === 'undefined') {
baseUrl = OC.linkToRemote('dav') + '/comments/' +
encodeURIComponent(this.get('objectType')) + '/' +
encodeURIComponent(this.get('objectId')) + '/';
} else {
baseUrl = this.collection.url();
}
if (typeof this.get('id') !== 'undefined') {
return baseUrl + this.get('id');
} else {
return baseUrl;
}
}
});
export default CommentModel;

View File

@@ -0,0 +1,54 @@
var NS_OWNCLOUD = 'http://owncloud.org/ns';
/**
* @class OCA.AnnouncementCenter.Comments.CommentSummaryModel
* @classdesc
*
* Model containing summary information related to comments
* like the read marker.
*
*/
var CommentSummaryModel = OC.Backbone.Model.extend(
/** @lends OCA.AnnouncementCenter.Comments.CommentSummaryModel.prototype */ {
sync: OC.Backbone.davSync,
/**
* Object type
*
* @type string
*/
_objectType: 'deckCard',
/**
* Object id
*
* @type string
*/
_objectId: null,
davProperties: {
'readMarker': '{' + NS_OWNCLOUD + '}readMarker'
},
/**
* Initializes the summary model
*
* @param {string} [options.objectType] object type
* @param {string} [options.objectId] object id
*/
initialize: function(attrs, options) {
options = options || {};
if (options.objectType) {
this._objectType = options.objectType;
}
},
url: function() {
return OC.linkToRemote('dav') + '/comments/' +
encodeURIComponent(this._objectType) + '/' +
encodeURIComponent(this.id) + '/';
}
});
export default CommentSummaryModel;

1
js/legacy/jquery.atwho.min.js vendored Normal file

File diff suppressed because one or more lines are too long

561
js/legacy/jquery.caret.min.js vendored Normal file
View File

@@ -0,0 +1,561 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
(function($, undefined) {
var _input = document.createElement('input');
var _support = {
setSelectionRange: ('setSelectionRange' in _input) || ('selectionStart' in _input),
createTextRange: ('createTextRange' in _input) || ('selection' in document)
};
var _rNewlineIE = /\r\n/g,
_rCarriageReturn = /\r/g;
var _getValue = function(input) {
if (typeof(input.value) !== 'undefined') {
return input.value;
}
return $(input).text();
};
var _setValue = function(input, value) {
if (typeof(input.value) !== 'undefined') {
input.value = value;
} else {
$(input).text(value);
}
};
var _getIndex = function(input, pos) {
var norm = _getValue(input).replace(_rCarriageReturn, '');
var len = norm.length;
if (typeof(pos) === 'undefined') {
pos = len;
}
pos = Math.floor(pos);
// Negative index counts backward from the end of the input/textarea's value
if (pos < 0) {
pos = len + pos;
}
// Enforce boundaries
if (pos < 0) { pos = 0; }
if (pos > len) { pos = len; }
return pos;
};
var _hasAttr = function(input, attrName) {
return input.hasAttribute ? input.hasAttribute(attrName) : (typeof(input[attrName]) !== 'undefined');
};
/**
* @class
* @constructor
*/
var Range = function(start, end, length, text) {
this.start = start || 0;
this.end = end || 0;
this.length = length || 0;
this.text = text || '';
};
Range.prototype.toString = function() {
return JSON.stringify(this, null, ' ');
};
var _getCaretW3 = function(input) {
return input.selectionStart;
};
/**
* @see http://stackoverflow.com/q/6943000/467582
*/
var _getCaretIE = function(input) {
var caret, range, textInputRange, rawValue, len, endRange;
// Yeah, you have to focus twice for IE 7 and 8. *cries*
input.focus();
input.focus();
range = document.selection.createRange();
if (range && range.parentElement() === input) {
rawValue = _getValue(input);
len = rawValue.length;
// Create a working TextRange that lives only in the input
textInputRange = input.createTextRange();
textInputRange.moveToBookmark(range.getBookmark());
// Check if the start and end of the selection are at the very end
// of the input, since moveStart/moveEnd doesn't return what we want
// in those cases
endRange = input.createTextRange();
endRange.collapse(false);
if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
caret = rawValue.replace(_rNewlineIE, '\n').length;
} else {
caret = -textInputRange.moveStart("character", -len);
}
return caret;
}
// NOTE: This occurs when you highlight part of a textarea and then click in the middle of the highlighted portion in IE 6-10.
// There doesn't appear to be anything we can do about it.
// alert("Your browser is incredibly stupid. I don't know what else to say.");
// alert(range + '\n\n' + range.parentElement().tagName + '#' + range.parentElement().id);
return 0;
};
/**
* Gets the position of the caret in the given input.
* @param {HTMLInputElement|HTMLTextAreaElement} input input or textarea element
* @returns {Number}
* @see http://stackoverflow.com/questions/263743/how-to-get-cursor-position-in-textarea/263796#263796
*/
var _getCaret = function(input) {
if (!input) {
return undefined;
}
// Mozilla, et al.
if (_support.setSelectionRange) {
return _getCaretW3(input);
}
// IE
else if (_support.createTextRange) {
return _getCaretIE(input);
}
return undefined;
};
var _setCaretW3 = function(input, pos) {
input.setSelectionRange(pos, pos);
};
var _setCaretIE = function(input, pos) {
var range = input.createTextRange();
range.move('character', pos);
range.select();
};
/**
* Sets the position of the caret in the given input.
* @param {HTMLInputElement|HTMLTextAreaElement} input input or textarea element
* @param {Number} pos
* @see http://parentnode.org/javascript/working-with-the-cursor-position/
*/
var _setCaret = function(input, pos) {
input.focus();
pos = _getIndex(input, pos);
// Mozilla, et al.
if (_support.setSelectionRange) {
_setCaretW3(input, pos);
}
// IE
else if (_support.createTextRange) {
_setCaretIE(input, pos);
}
};
/**
* Inserts the specified text at the current caret position in the given input.
* @param {HTMLInputElement|HTMLTextAreaElement} input input or textarea element
* @param {String} text
* @see http://parentnode.org/javascript/working-with-the-cursor-position/
*/
var _insertAtCaret = function(input, text) {
var curPos = _getCaret(input);
var oldValueNorm = _getValue(input).replace(_rCarriageReturn, '');
var newLength = +(curPos + text.length + (oldValueNorm.length - curPos));
var maxLength = +input.getAttribute('maxlength');
if(_hasAttr(input, 'maxlength') && newLength > maxLength) {
var delta = text.length - (newLength - maxLength);
text = text.substr(0, delta);
}
_setValue(input, oldValueNorm.substr(0, curPos) + text + oldValueNorm.substr(curPos));
_setCaret(input, curPos + text.length);
};
var _getInputRangeW3 = function(input) {
var range = new Range();
range.start = input.selectionStart;
range.end = input.selectionEnd;
var min = Math.min(range.start, range.end);
var max = Math.max(range.start, range.end);
range.length = max - min;
range.text = _getValue(input).substring(min, max);
return range;
};
/** @see http://stackoverflow.com/a/3648244/467582 */
var _getInputRangeIE = function(input) {
var range = new Range();
input.focus();
var selection = document.selection.createRange();
if (selection && selection.parentElement() === input) {
var len, normalizedValue, textInputRange, endRange, start = 0, end = 0;
var rawValue = _getValue(input);
len = rawValue.length;
normalizedValue = rawValue.replace(/\r\n/g, "\n");
// Create a working TextRange that lives only in the input
textInputRange = input.createTextRange();
textInputRange.moveToBookmark(selection.getBookmark());
// Check if the start and end of the selection are at the very end
// of the input, since moveStart/moveEnd doesn't return what we want
// in those cases
endRange = input.createTextRange();
endRange.collapse(false);
if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
start = end = len;
} else {
start = -textInputRange.moveStart("character", -len);
start += normalizedValue.slice(0, start).split("\n").length - 1;
if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
end = len;
} else {
end = -textInputRange.moveEnd("character", -len);
end += normalizedValue.slice(0, end).split("\n").length - 1;
}
}
/// normalize newlines
start -= (rawValue.substring(0, start).split('\r\n').length - 1);
end -= (rawValue.substring(0, end).split('\r\n').length - 1);
/// normalize newlines
range.start = start;
range.end = end;
range.length = range.end - range.start;
range.text = normalizedValue.substr(range.start, range.length);
}
return range;
};
/**
* Gets the selected text range of the given input.
* @param {HTMLInputElement|HTMLTextAreaElement} input input or textarea element
* @returns {Range}
* @see http://stackoverflow.com/a/263796/467582
* @see http://stackoverflow.com/a/2966703/467582
*/
var _getInputRange = function(input) {
if (!input) {
return undefined;
}
// Mozilla, et al.
if (_support.setSelectionRange) {
return _getInputRangeW3(input);
}
// IE
else if (_support.createTextRange) {
return _getInputRangeIE(input);
}
return undefined;
};
var _setInputRangeW3 = function(input, startPos, endPos) {
input.setSelectionRange(startPos, endPos);
};
var _setInputRangeIE = function(input, startPos, endPos) {
var tr = input.createTextRange();
tr.moveEnd('textedit', -1);
tr.moveStart('character', startPos);
tr.moveEnd('character', endPos - startPos);
tr.select();
};
/**
* Sets the selected text range of (i.e., highlights text in) the given input.
* @param {HTMLInputElement|HTMLTextAreaElement} input input or textarea element
* @param {Number} startPos Zero-based index
* @param {Number} endPos Zero-based index
* @see http://parentnode.org/javascript/working-with-the-cursor-position/
* @see http://stackoverflow.com/a/2966703/467582
*/
var _setInputRange = function(input, startPos, endPos) {
startPos = _getIndex(input, startPos);
endPos = _getIndex(input, endPos);
// Mozilla, et al.
if (_support.setSelectionRange) {
_setInputRangeW3(input, startPos, endPos);
}
// IE
else if (_support.createTextRange) {
_setInputRangeIE(input, startPos, endPos);
}
};
/**
* Replaces the currently selected text with the given string.
* @param {HTMLInputElement|HTMLTextAreaElement} input input or textarea element
* @param {String} text New text that will replace the currently selected text.
* @see http://parentnode.org/javascript/working-with-the-cursor-position/
*/
var _replaceInputRange = function(input, text) {
var $input = $(input);
var oldValue = $input.val();
var selection = _getInputRange(input);
var newLength = +(selection.start + text.length + (oldValue.length - selection.end));
var maxLength = +$input.attr('maxlength');
if($input.is('[maxlength]') && newLength > maxLength) {
var delta = text.length - (newLength - maxLength);
text = text.substr(0, delta);
}
// Now that we know what the user selected, we can replace it
var startText = oldValue.substr(0, selection.start);
var endText = oldValue.substr(selection.end);
$input.val(startText + text + endText);
// Reset the selection
var startPos = selection.start;
var endPos = startPos + text.length;
_setInputRange(input, selection.length ? startPos : endPos, endPos);
};
var _selectAllW3 = function(elem) {
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(elem);
selection.removeAllRanges();
selection.addRange(range);
};
var _selectAllIE = function(elem) {
var range = document.body.createTextRange();
range.moveToElementText(elem);
range.select();
};
/**
* Select all text in the given element.
* @param {HTMLElement} elem Any block or inline element other than a form element.
*/
var _selectAll = function(elem) {
var $elem = $(elem);
if ($elem.is('input, textarea') || elem.select) {
$elem.select();
return;
}
// Mozilla, et al.
if (_support.setSelectionRange) {
_selectAllW3(elem);
}
// IE
else if (_support.createTextRange) {
_selectAllIE(elem);
}
};
var _deselectAll = function() {
if (document.selection) {
document.selection.empty();
}
else if (window.getSelection) {
window.getSelection().removeAllRanges();
}
};
$.extend($.fn, {
/**
* Gets or sets the position of the caret or inserts text at the current caret position in an input or textarea element.
* @returns {Number|jQuery} The current caret position if invoked as a getter (with no arguments)
* or this jQuery object if invoked as a setter or inserter.
* @see http://web.archive.org/web/20080704185920/http://parentnode.org/javascript/working-with-the-cursor-position/
* @since 1.0.0
* @example
* <pre>
* // Get position
* var pos = $('input:first').caret();
* </pre>
* @example
* <pre>
* // Set position
* $('input:first').caret(15);
* $('input:first').caret(-3);
* </pre>
* @example
* <pre>
* // Insert text at current position
* $('input:first').caret('Some text');
* </pre>
*/
caret: function() {
var $inputs = this.filter('input, textarea');
// getCaret()
if (arguments.length === 0) {
var input = $inputs.get(0);
return _getCaret(input);
}
// setCaret(position)
else if (typeof arguments[0] === 'number') {
var pos = arguments[0];
$inputs.each(function(_i, input) {
_setCaret(input, pos);
});
}
// insertAtCaret(text)
else {
var text = arguments[0];
$inputs.each(function(_i, input) {
_insertAtCaret(input, text);
});
}
return this;
},
/**
* Gets or sets the selection range or replaces the currently selected text in an input or textarea element.
* @returns {Range|jQuery} The current selection range if invoked as a getter (with no arguments)
* or this jQuery object if invoked as a setter or replacer.
* @see http://stackoverflow.com/a/2966703/467582
* @since 1.0.0
* @example
* <pre>
* // Get selection range
* var range = $('input:first').range();
* </pre>
* @example
* <pre>
* // Set selection range
* $('input:first').range(15);
* $('input:first').range(15, 20);
* $('input:first').range(-3);
* $('input:first').range(-8, -3);
* </pre>
* @example
* <pre>
* // Replace the currently selected text
* $('input:first').range('Replacement text');
* </pre>
*/
range: function() {
var $inputs = this.filter('input, textarea');
// getRange() = { start: pos, end: pos }
if (arguments.length === 0) {
var input = $inputs.get(0);
return _getInputRange(input);
}
// setRange(startPos, endPos)
else if (typeof arguments[0] === 'number') {
var startPos = arguments[0];
var endPos = arguments[1];
$inputs.each(function(_i, input) {
_setInputRange(input, startPos, endPos);
});
}
// replaceRange(text)
else {
var text = arguments[0];
$inputs.each(function(_i, input) {
_replaceInputRange(input, text);
});
}
return this;
},
/**
* Selects all text in each element of this jQuery object.
* @returns {jQuery} This jQuery object
* @see http://stackoverflow.com/a/11128179/467582
* @since 1.5.0
* @example
* <pre>
* // Select the contents of span elements when clicked
* $('span').on('click', function() { $(this).highlight(); });
* </pre>
*/
selectAll: function() {
return this.each(function(_i, elem) {
_selectAll(elem);
});
}
});
$.extend($, {
/**
* Deselects all text on the page.
* @returns {jQuery} The jQuery function
* @since 1.5.0
* @example
* <pre>
* // Select some text
* $('span').selectAll();
*
* // Deselect the text
* $.deselectAll();
* </pre>
*/
deselectAll: function() {
_deselectAll();
return this;
}
});
}(window.jQuery || window.Zepto || window.$));

57
js/legacy/jquery.ui.timepicker.css vendored Normal file
View File

@@ -0,0 +1,57 @@
/*
* Timepicker stylesheet
* Highly inspired from datepicker
* FG - Nov 2010 - Web3R
*
* version 0.0.3 : Fixed some settings, more dynamic
* version 0.0.4 : Removed width:100% on tables
* version 0.1.1 : set width 0 on tables to fix an ie6 bug
*/
.ui-timepicker-inline { display: inline; }
#ui-timepicker-div { padding: 0.2em; }
.ui-timepicker-table { display: inline-table; width: 0; }
.ui-timepicker-table table { margin:0.15em 0 0 0; border-collapse: collapse; }
.ui-timepicker-hours, .ui-timepicker-minutes { padding: 0.2em; }
.ui-timepicker-table .ui-timepicker-title { line-height: 1.8em; text-align: center; }
.ui-timepicker-table td { padding: 0.1em; width: 2.2em; }
.ui-timepicker-table th.periods { padding: 0.1em; width: 2.2em; }
/* span for disabled cells */
.ui-timepicker-table td span {
display:block;
padding:0.2em 0.3em 0.2em 0.5em;
width: 1.2em;
text-align:right;
text-decoration:none;
}
/* anchors for clickable cells */
.ui-timepicker-table td a {
display:block;
padding:0.2em 0.3em 0.2em 0.5em;
width: 1.2em;
cursor: pointer;
text-align:right;
text-decoration:none;
}
/* buttons and button pane styling */
.ui-timepicker .ui-timepicker-buttonpane {
background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0;
}
.ui-timepicker .ui-timepicker-buttonpane button { margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
/* The close button */
.ui-timepicker .ui-timepicker-close { float: right }
/* the now button */
.ui-timepicker .ui-timepicker-now { float: left; }
/* the deselect button */
.ui-timepicker .ui-timepicker-deselect { float: left; }

1496
js/legacy/jquery.ui.timepicker.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,120 @@
/**
* Original source code from https://github.com/mcecot/markdown-it-checkbox
* © 2015 Markus Cecot
* licenced under MIT
* https://github.com/mcecot/markdown-it-checkbox/blob/master/LICENSE
*/
var checkboxReplace;
checkboxReplace = function(md, options, Token) {
"use strict";
var arrayReplaceAt, createTokens, defaults, lastId, pattern, splitTextToken;
arrayReplaceAt = md.utils.arrayReplaceAt;
lastId = 0;
defaults = {
divWrap: false,
divClass: 'checkbox',
idPrefix: 'checkbox'
};
options = Object.assign(defaults, options);
pattern = /(.*?)(\[(X|\s|\_|\-)\])(.*)/igm;
createTokens = function(checked, label, Token, before) {
var id, idNumeric, nodes, token;
nodes = [];
token = new Token("text", "", 0);
token.content = before;
nodes.push(token);
/**
* <div class="checkbox">
*/
if (options.divWrap) {
token = new Token("checkbox_open", "div", 1);
token.attrs = [["class", options.divClass]];
nodes.push(token);
}
/**
* <input type="checkbox" id="checkbox{n}" checked="true">
*/
id = options.idPrefix + lastId;
idNumeric = lastId;
lastId += 1;
token = new Token("checkbox_input", "input", 0);
token.attrs = [["type", "checkbox"], ["id", id], ["data-id", idNumeric]];
if (checked === true) {
token.attrs.push(["checked", "true"]);
}
token.attrs.push(["class", "checkbox"]);
nodes.push(token);
/**
* <label for="checkbox{n}">
*/
token = new Token("label_open", "label", 1);
token.attrs = [["for", id], ["data-id", idNumeric]];
nodes.push(token);
/**
* content of label tag
*/
token = new Token("text", "", 0);
token.content = label;
nodes.push(token);
/**
* closing tags
*/
nodes.push(new Token("label_close", "label", -1));
if (options.divWrap) {
nodes.push(new Token("checkbox_close", "div", -1));
}
return nodes;
};
splitTextToken = function(original, Token) {
var checked, label, matches, text, value, before;
text = original.content;
matches = pattern.exec(text);
if (matches === null) {
return original;
}
checked = false;
before = matches[1];
value = matches[3];
label = matches[4];
if (value === "X" || value === "x") {
checked = true;
}
return createTokens(checked, label, Token, before);
};
return function(state) {
lastId = 0;
var blockTokens, i, j, l, token, tokens;
blockTokens = state.tokens;
j = 0;
l = blockTokens.length;
while (j < l) {
if (blockTokens[j].type !== "inline") {
j++;
continue;
}
tokens = blockTokens[j].children;
i = 0;
while (i < tokens.length) {
token = tokens[i];
blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, splitTextToken(token, state.Token));
i++;
}
j++;
}
};
};
/*global module */
module.exports = function(md, options) {
"use strict";
md.core.ruler.push("checkbox", checkboxReplace(md, options));
};

7217
js/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,29 +1,46 @@
{ {
"name": "deck", "name": "deck",
"description": "Frontend for the Nextcloud Deck app",
"repository": "https://github.com/nextcloud/deck",
"version": "1.0.0", "version": "1.0.0",
"main": "Gruntfile.js", "main": "Gruntfile.js",
"directories": { "directories": {
"test": "tests" "test": "tests"
}, },
"dependencies": {}, "dependencies": {
"@uirouter/angularjs": "^1.0.22",
"angular": "^1.7.8",
"angular-animate": "^1.7.8",
"angular-file-upload": "^2.5.0",
"angular-markdown-it": "^0.6.1",
"angular-sanitize": "^1.7.8",
"babel-polyfill": "^6.26.0",
"markdown-it": "^8.4.2",
"markdown-it-link-target": "^1.0.2",
"ng-infinite-scroll": "^1.3.0",
"ng-sortable": "^1.3.8",
"ui-select": "^0.19.8"
},
"devDependencies": { "devDependencies": {
"bower": "^1.8.0", "@babel/core": "^7.4.0",
"grunt": "^1.0.1", "@babel/polyfill": "^7.4.0",
"grunt-contrib-concat": "^1.0.1", "@babel/preset-env": "^7.4.1",
"grunt-contrib-jshint": "^1.1.0", "babel-loader": "^8.0.5",
"grunt-contrib-watch": "^1.0.0", "css-loader": "^2.1.1",
"grunt-karma": "^2.0.0", "karma": "^4.0.1",
"grunt-phpunit": "^0.3.6", "mini-css-extract-plugin": "^0.5.0",
"grunt-wrap": "^0.3.0", "uglifyjs-webpack-plugin": "^2.1.2",
"jshint-stylish": "^2.2.1", "webpack": "^4.29.6",
"karma": "^1.4.1", "webpack-cli": "^3.3.0",
"node-sass": "^4.5.3" "webpack-merge": "^4.2.1"
}, },
"scripts": { "scripts": {
"build": "./node_modules/webpack-cli/bin/cli.js --mode production --config webpack.prod.config.js",
"dev": "./node_modules/webpack-cli/bin/cli.js --mode development --config webpack.dev.config.js",
"watch": "./node_modules/webpack-cli/bin/cli.js --mode development --config webpack.dev.config.js --watch",
"test": "echo \"Warning: no test specified\" && exit 0" "test": "echo \"Warning: no test specified\" && exit 0"
}, },
"author": "", "author": "",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"keywords": [], "keywords": []
"description": ""
} }

View File

@@ -0,0 +1,256 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
import CommentCollection from '../legacy/commentcollection';
import CommentModel from '../legacy/commentmodel';
const DECK_ACTIVITY_TYPE_BOARD = 'deck_board';
const DECK_ACTIVITY_TYPE_CARD = 'deck_card';
/* global OC oc_requesttoken */
class ActivityService {
static get RESULT_PER_PAGE() { return 50; }
constructor ($rootScope, $filter, $http, $q) {
this.running = false;
this.runningNewer = false;
this.$filter = $filter;
this.$http = $http;
this.$q = $q;
this.$rootScope = $rootScope;
this.data = {};
this.data[DECK_ACTIVITY_TYPE_BOARD] = {};
this.data[DECK_ACTIVITY_TYPE_CARD] = {};
this.toEnhanceWithComments = [];
this.commentCollection = new CommentCollection();
this.commentCollection._limit = ActivityService.RESULT_PER_PAGE;
this.commentCollection.on('request', function() {
}, this);
this.commentCollection.on('sync', function(a) {
for (let index in this.toEnhanceWithComments) {
if (this.toEnhanceWithComments.hasOwnProperty(index)) {
let item = this.toEnhanceWithComments[index];
let commentId = Array.isArray(item.subject_rich[1].comment) ? item.subject_rich[1].comment.id : item.subject_rich[1].comment;
item.commentModel = this.commentCollection.get(commentId);
if (typeof item.commentModel !== 'undefined') {
this.toEnhanceWithComments = this.toEnhanceWithComments.filter((entry) => entry.activity_id !== item.activity_id);
}
}
}
var firstUnread = this.commentCollection.findWhere({isUnread: true});
if (typeof firstUnread !== 'undefined') {
this.commentCollection.updateReadMarker();
}
this.notify();
}, this);
this.commentCollection.on('add', function(model, collection, options) {
// we need to update the model, because it consists of client data
// only, but the server might add meta data, e.g. about mentions
model.fetch();
}, this);
this.since = {
deck_card: {
},
deck_board: {
},
};
}
/**
* We need a event here to properly update scope once the external data from
* the comments backbone js code has changed
*/
subscribe(scope, callback) {
let handler = this.$rootScope.$on('notify-comment-update', callback);
scope.$on('$destroy', handler);
}
notify() {
this.$rootScope.$emit('notify-comment-update');
}
static getUrl(type, id, since) {
if (type === DECK_ACTIVITY_TYPE_CARD) {
return OC.linkToOCS('apps/activity/api/v2/activity', 2) + 'filter?format=json&object_type=deck_card&object_id=' + id + '&limit=' + this.RESULT_PER_PAGE + '&since=' + since;
}
if (type === DECK_ACTIVITY_TYPE_BOARD) {
return OC.linkToOCS('apps/activity/api/v2/activity', 2) + 'deck?format=json&limit=' + this.RESULT_PER_PAGE + '&since=' + since;
}
}
fetchCardActivities(type, id, since) {
this.running = true;
this.checkData(type, id);
const self = this;
return this.$http.get(ActivityService.getUrl(type, id, since)).then(function (response) {
const objects = response.data.ocs.data;
for (let index in objects) {
if (objects.hasOwnProperty(index)) {
let item = objects[index];
self.addItem(type, id, item);
if (item.activity_id > self.since[type][id].latest) {
self.since[type][id].latest = item.activity_id;
}
}
}
self.data[type][id].sort(function(a, b) {
return b.activity_id - a.activity_id;
});
self.since[type][id].oldest = response.headers('X-Activity-Last-Given');
self.running = false;
return response;
}, function (error) {
if (error.status === 304 || error.status === 404) {
self.since[type][id].finished = true;
}
self.running = false;
});
}
fetchMoreActivities(type, id, success) {
const self = this;
this.checkData(type, id);
if (this.running === true) {
return this.runningPromise;
}
if (!this.since[type][id].finished) {
this.runningPromise = this.fetchCardActivities(type, id, this.since[type][id].oldest);
this.runningPromise.then(function() {
if (type === 'deck_card') {
self.commentCollection.fetchNext();
}
});
return this.runningPromise;
}
return Promise.reject();
}
checkData(type, id) {
if (!Array.isArray(this.data[type][id])) {
this.data[type][id] = [];
}
if (typeof this.since[type][id] === 'undefined') {
this.since[type][id] = {
latest: -1,
oldestCatchedUp: false,
oldest: '0',
finished: false,
};
}
}
addItem(type, id, item) {
const self = this;
const existingEntry = this.data[type][id].findIndex((entry) => { return entry.activity_id === item.activity_id; });
if (existingEntry !== -1) {
return;
}
/** check if the fetched item from all deck activities is actually related */
const isUnrelatedBoard = (item.object_type === DECK_ACTIVITY_TYPE_BOARD && item.object_id !== id);
const isUnrelatedCard = (item.object_type === DECK_ACTIVITY_TYPE_CARD && (
(item.subject_rich[1].board && item.subject_rich[1].board.id !== id) || (typeof item.subject_rich[1].board === 'undefined'))
);
if (type === DECK_ACTIVITY_TYPE_BOARD && (isUnrelatedBoard || isUnrelatedCard)) {
return;
}
item.timestamp = new Date(item.datetime).getTime();
item.type = 'activity';
if (item.subject_rich[1].comment) {
item.type = 'comment';
item.commentModel = this.commentCollection.get(item.subject_rich[1].comment);
if (typeof item.commentModel === 'undefined') {
this.toEnhanceWithComments.push(item);
}
}
this.data[type][id].push(item);
}
/**
* Fetch newer activities starting from the latest ones that are in cache
*
* @param type
* @param id
*/
fetchNewerActivities(type, id) {
if (this.since[type][id].latest === 0) {
return Promise.resolve();
}
let self = this;
return this.fetchNewer(type, id).then(function() {
return self.fetchNewerActivities(type, id);
});
}
fetchNewer(type, id) {
const deferred = this.$q.defer();
this.running = true;
this.runningNewer = true;
const self = this;
this.$http.get(ActivityService.getUrl(type, id, this.since[type][id].latest) + '&sort=asc').then(function (response) {
let objects = response.data.ocs.data;
let data = [];
for (let index in objects) {
if (objects.hasOwnProperty(index)) {
let item = objects[index];
self.addItem(type, id, item);
}
}
self.data[type][id].sort(function(a, b) {
return b.activity_id - a.activity_id;
});
self.since[type][id].latest = response.headers('X-Activity-Last-Given');
self.data[type][id] = data.concat(self.data[type][id]);
self.running = false;
self.runningNewer = false;
deferred.resolve(objects);
}, function (error) {
self.runningNewer = false;
self.running = false;
});
return deferred.promise;
}
getData(type, id) {
if (!Array.isArray(this.data[type][id])) {
return [];
}
return this.data[type][id];
}
loadComments(id) {
this.commentCollection.reset();
this.commentCollection.setObjectId(id);
}
}
app.service('ActivityService', ActivityService);
export default ActivityService;
export {DECK_ACTIVITY_TYPE_BOARD, DECK_ACTIVITY_TYPE_CARD};

View File

@@ -4,34 +4,48 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
/** global: oc_defaults */ /** global: oc_defaults */
app.factory('ApiService', function ($http, $q) { app.factory('ApiService', function ($http, $q) {
var ApiService = function (http, endpoint) { var ApiService = function (http, endpoint) {
// Consider renaming endpoint to resource
this.endpoint = endpoint; this.endpoint = endpoint;
this.baseUrl = OC.generateUrl('/apps/deck/' + endpoint); this.baseUrl = this.generateUrl(this.endpoint);
this.http = http; this.http = http;
this.q = $q; this.q = $q;
this.data = {}; this.data = {};
this.deleted = {};
this.id = null; this.id = null;
this.sorted = []; this.sorted = [];
}; };
ApiService.prototype.generateUrl = function(path) {
return OC.generateUrl('/apps/deck/' + path);
};
ApiService.prototype.tryAllThenDeleted = function(id) {
let object = this.data[id];
if (object === undefined) {
object = this.deleted[id];
}
return object;
};
ApiService.prototype.fetchAll = function () { ApiService.prototype.fetchAll = function () {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
@@ -47,6 +61,31 @@ app.factory('ApiService', function ($http, $q) {
return deferred.promise; return deferred.promise;
}; };
ApiService.prototype.fetchDeleted = function (scopeId) {
var deferred = $q.defer();
var self = this;
self.deleted = {};
$http.get(this.generateUrl(scopeId + '/' + this.endpoint + '/deleted')).then(function (response) {
var objects = response.data;
objects.forEach(function (obj) {
if(self.deleted[obj.id] !== undefined) {
return;
}
self.deleted[obj.id] = obj;
if(self.afterFetch !== undefined) {
self.afterFetch(obj);
}
});
deferred.resolve(objects);
}, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed');
});
return deferred.promise;
};
ApiService.prototype.fetchOne = function (id) { ApiService.prototype.fetchOne = function (id) {
this.id = id; this.id = id;
@@ -103,37 +142,55 @@ app.factory('ApiService', function ($http, $q) {
var self = this; var self = this;
$http.delete(this.baseUrl + '/' + id).then(function (response) { $http.delete(this.baseUrl + '/' + id).then(function (response) {
self.remove(id); self.deleted[id] = self.data[id];
delete self.data[id];
let deletedAt = response.data.deletedAt;
if (deletedAt !== undefined) {
self.deleted[id].deletedAt = deletedAt;
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Deleting ' + self.endpoint + ' failed'); deferred.reject('Deleting ' + self.endpoint + ' failed');
}); });
return deferred.promise; return deferred.promise;
}; };
ApiService.prototype.undoDelete = function(entity) {
var self = this;
entity.deletedAt = 0;
var promise = this.update(entity);
promise.then(() => {
self.data[entity.id] = entity;
delete this.deleted[entity.id];
});
return promise;
};
// methods for managing data // methods for managing data
ApiService.prototype.clear = function () { ApiService.prototype.clear = function () {
this.data = {}; this.data = {};
}; };
ApiService.prototype.add = function (entity) { ApiService.prototype.add = function (entity) {
var element = this.data[entity.id]; var element = this.data[entity.id];
if (element === undefined) { if (element === undefined) {
this.data[entity.id] = entity; this.data[entity.id] = entity;
} else { } else {
Object.keys(entity).forEach(function (key) { Object.keys(entity).forEach(function (key) {
element[key] = entity[key]; if (entity[key] !== null && element[key] !== entity[key]) {
element[key] = entity[key];
}
}); });
element.status = {}; element.status = {};
} }
}; };
ApiService.prototype.remove = function (id) {
if (this.data[id] !== undefined) {
delete this.data[id];
}
};
ApiService.prototype.addAll = function (entities) { ApiService.prototype.addAll = function (entities) {
var self = this; var self = this;
angular.forEach(entities, function (entity) { angular.forEach(entities, function (entity) {
@@ -160,10 +217,14 @@ app.factory('ApiService', function ($http, $q) {
return this.data; return this.data;
}; };
ApiService.prototype.get = function (id) {
return this.data[id];
};
ApiService.prototype.getName = function () { ApiService.prototype.getName = function () {
var funcNameRegex = /function (.{1,})\(/; var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((this).constructor.toString()); var results = (funcNameRegex).exec((this).constructor.toString());
return (results && results.length > 1) ? results[1] : ""; return (results && results.length > 1) ? results[1] : '';
}; };
return ApiService; return ApiService;

View File

@@ -19,7 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
/* global app OC */ /* global app OC */
app.factory('BoardService', function (ApiService, $http, $q) { app.factory('BoardService', function (ApiService, $http, $q) {
var BoardService = function ($http, ep, $q) { var BoardService = function ($http, ep, $q) {
@@ -77,8 +77,8 @@ app.factory('BoardService', function (ApiService, $http, $q) {
} }
self.sharees = []; self.sharees = [];
var users = response.ocs.data.exact.users.concat(response.ocs.data.users); var users = response.ocs.data.exact.users.concat(response.ocs.data.users.slice(0, 4));
var groups = response.ocs.data.exact.groups.concat(response.ocs.data.groups); var groups = response.ocs.data.exact.groups.concat(response.ocs.data.groups.slice(0, 4));
// filter out everyone who is already in the share list // filter out everyone who is already in the share list
angular.forEach(users, function (item) { angular.forEach(users, function (item) {
@@ -125,8 +125,8 @@ app.factory('BoardService', function (ApiService, $http, $q) {
displayname: ocsItem.label displayname: ocsItem.label
}, },
permissionEdit: true, permissionEdit: true,
permissionManage: true, permissionManage: false,
permissionShare: true, permissionShare: false,
type: type type: type
}; };
}; };
@@ -141,6 +141,11 @@ app.factory('BoardService', function (ApiService, $http, $q) {
board.acl = {}; board.acl = {};
} }
board.acl[response.data.id] = response.data; board.acl[response.data.id] = response.data;
if (response.data.type === OC.Share.SHARE_TYPE_USER) {
self._updateUsers();
} else {
self.fetchOne(response.data.boardId);
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error creating ACL ' + _acl); deferred.reject('Error creating ACL ' + _acl);
@@ -155,6 +160,11 @@ app.factory('BoardService', function (ApiService, $http, $q) {
var self = this; var self = this;
$http.delete(this.baseUrl + '/' + acl.boardId + '/acl/' + acl.id).then(function (response) { $http.delete(this.baseUrl + '/' + acl.boardId + '/acl/' + acl.id).then(function (response) {
delete board.acl[response.data.id]; delete board.acl[response.data.id];
if (response.data.type === OC.Share.SHARE_TYPE_USER) {
self._updateUsers();
} else {
self.fetchOne(response.data.boardId);
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error deleting ACL ' + acl.id); deferred.reject('Error deleting ACL ' + acl.id);
@@ -170,6 +180,11 @@ app.factory('BoardService', function (ApiService, $http, $q) {
var _acl = acl; var _acl = acl;
$http.put(this.baseUrl + '/' + acl.boardId + '/acl', _acl).then(function (response) { $http.put(this.baseUrl + '/' + acl.boardId + '/acl', _acl).then(function (response) {
board.acl[_acl.id] = response.data; board.acl[_acl.id] = response.data;
if (response.data.type === OC.Share.SHARE_TYPE_USER) {
self._updateUsers();
} else {
self.fetchOne(response.data.boardId);
}
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error updating ACL ' + _acl); deferred.reject('Error updating ACL ' + _acl);
@@ -178,6 +193,27 @@ app.factory('BoardService', function (ApiService, $http, $q) {
return deferred.promise; return deferred.promise;
}; };
BoardService.prototype._updateUsers = function () {
if (!this.getCurrent() || !this.getCurrent().acl) {
return [];
}
this.getCurrent().users = [this.getCurrent().owner];
let self = this;
angular.forEach(this.getCurrent().acl, function(value, key) {
if (value.type === OC.Share.SHARE_TYPE_USER) {
self.getCurrent().users.push(value.participant);
}
});
};
BoardService.prototype.getUsers = function () {
if (this.getCurrent() && !this.getCurrent().users) {
this._updateUsers();
}
return this.getCurrent().users;
};
BoardService.prototype.canRead = function () { BoardService.prototype.canRead = function () {
if (!this.getCurrent() || !this.getCurrent().permissions) { if (!this.getCurrent() || !this.getCurrent().permissions) {
return false; return false;

View File

@@ -4,21 +4,22 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('CardService', function (ApiService, $http, $q) { app.factory('CardService', function (ApiService, $http, $q) {
var CardService = function ($http, ep, $q) { var CardService = function ($http, ep, $q) {
@@ -105,11 +106,11 @@ app.factory('CardService', function (ApiService, $http, $q) {
CardService.prototype.assignUser = function (card, user) { CardService.prototype.assignUser = function (card, user) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
if (self.getCurrent().assignedUsers === null) { if (self.get(card.id).assignedUsers === null) {
self.getCurrent().assignedUsers = []; self.get(card.id).assignedUsers = [];
} }
$http.post(this.baseUrl + '/' + card.id + '/assign', {'userId': user}).then(function (response) { $http.post(this.baseUrl + '/' + card.id + '/assign', {'userId': user}).then(function (response) {
self.getCurrent().assignedUsers.push(response.data); self.get(card.id).assignedUsers.push(response.data);
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error while update ' + self.endpoint); deferred.reject('Error while update ' + self.endpoint);
@@ -122,7 +123,7 @@ app.factory('CardService', function (ApiService, $http, $q) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.delete(this.baseUrl + '/' + card.id + '/assign/' + user, {}).then(function (response) { $http.delete(this.baseUrl + '/' + card.id + '/assign/' + user, {}).then(function (response) {
self.getCurrent().assignedUsers = self.getCurrent().assignedUsers.filter(function (obj) { self.get(card.id).assignedUsers = self.get(card.id).assignedUsers.filter(function (obj) {
return obj.participant.uid !== user; return obj.participant.uid !== user;
}); });
deferred.resolve(response.data); deferred.resolve(response.data);
@@ -132,6 +133,45 @@ app.factory('CardService', function (ApiService, $http, $q) {
return deferred.promise; return deferred.promise;
}; };
CardService.prototype.attachmentRemove = function (attachment) {
var deferred = $q.defer();
var self = this;
$http.delete(this.baseUrl + '/' + this.getCurrent().id + '/attachment/' + attachment.id, {}).then(function (response) {
if (response.data.deletedAt > 0) {
let currentAttachment = self.getCurrent().attachments.find(function (obj) {
if (obj.id === attachment.id) {
obj.deletedAt = response.data.deletedAt;
}
});
} else {
self.getCurrent().attachments = self.getCurrent().attachments.filter(function (obj) {
return obj.id !== attachment.id;
});
}
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error when removing the attachment');
});
return deferred.promise;
};
CardService.prototype.attachmentRemoveUndo = function (attachment) {
var deferred = $q.defer();
var self = this;
$http.get(this.baseUrl + '/' + this.getCurrent().id + '/attachment/' + attachment.id + '/restore', {}).then(function (response) {
let currentAttachment = self.getCurrent().attachments.find(function (obj) {
if (obj.id === attachment.id) {
obj.deletedAt = response.data.deletedAt;
}
});
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error when restoring the attachment');
});
return deferred.promise;
};
var service = new CardService($http, 'cards', $q); var service = new CardService($http, 'cards', $q);
return service; return service;
}); });

137
js/service/FileService.js Normal file
View File

@@ -0,0 +1,137 @@
/*
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
/* global OC oc_requesttoken */
export default class FileService {
constructor (FileUploader, CardService, $rootScope, $filter) {
this.$filter = $filter;
this.uploader = new FileUploader();
this.cardservice = CardService;
this.uploader.onAfterAddingFile = this.onAfterAddingFile.bind(this);
this.uploader.onSuccessItem = this.onSuccessItem.bind(this);
this.uploader.onErrorItem = this.onErrorItem.bind(this);
this.uploader.onCancelItem = this.onCancelItem.bind(this);
this.maxUploadSize = $rootScope.config.maxUploadSize;
this.progress = [];
this.status = null;
}
reset () {
this.status = null;
}
runUpload (fileItem, attachmentId) {
this.status = null;
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment?type=deck_file');
if (typeof attachmentId !== 'undefined') {
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment/' + attachmentId + '?type=deck_file');
} else {
fileItem.formData = [
{
requesttoken: oc_requesttoken,
type: 'deck_file',
}
];
}
fileItem.headers = {requesttoken: oc_requesttoken};
this.uploader.uploadItem(fileItem);
}
onAfterAddingFile (fileItem) {
if (this.maxUploadSize > 0 && fileItem.file.size > this.maxUploadSize) {
this.status = {
error: t('deck', `Failed to upload {name}`, {name: fileItem.file.name}),
message: t('deck', 'Maximum file size of {size} exceeded', {size: this.$filter('bytes')(this.maxUploadSize)})
};
return;
}
// Fetch card details before trying to upload so we can detect filename collisions properly
let self = this;
this.progress.push(fileItem);
this.cardservice.fetchOne(fileItem.cardId).then(function (data) {
let attachments = self.cardservice.get(fileItem.cardId).attachments;
let existingFile = attachments.find((attachment) => {
return attachment.data === fileItem.file.name;
});
if (typeof existingFile !== 'undefined') {
OC.dialogs.confirm(
`A file with the name ${fileItem.file.name} already exists. Do you want to overwrite it?`,
'File already exists',
function (result) {
if (result) {
self.runUpload(fileItem, existingFile.id);
} else {
let fileName = existingFile.extendedData.info.filename;
let foundFilesMatching = attachments.filter((attachment) => {
return attachment.extendedData.info.extension === existingFile.extendedData.info.extension
&& attachment.extendedData.info.filename.startsWith(fileName);
});
let nextIndex = foundFilesMatching.length + 1;
fileItem.file.name = fileName + ' (' + nextIndex + ').' + existingFile.extendedData.info.extension;
self.runUpload(fileItem);
}
}
);
} else {
self.runUpload(fileItem);
}
}, function (error) {
this.progress = this.progress.filter((item) => (fileItem.file.name !== item.file.name));
});
}
onSuccessItem (item, response) {
let attachments = this.cardservice.get(item.cardId).attachments;
let index = attachments.indexOf(attachments.find((attachment) => attachment.id === response.id));
if (~index) {
attachments = attachments.splice(index, 1);
}
this.cardservice.get(item.cardId).attachments.push(response);
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
}
onErrorItem (item, response) {
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
this.status = {
error: t('deck', `Failed to upload:`) + ' ' + item.file.name,
message: response.message
};
}
onCancelItem (item) {
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
}
getProgressItemsForCard (cardId) {
return this.progress.filter((fileItem) => (fileItem.cardId === cardId));
}
}
app.service('FileService', FileService);

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('LabelService', function (ApiService, $http, $q) { app.factory('LabelService', function (ApiService, $http, $q) {
var LabelService = function ($http, ep, $q) { var LabelService = function ($http, ep, $q) {

View File

@@ -4,33 +4,46 @@
* @author Julius Härtl <jus@bitgrid.net> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('StackService', function (ApiService, $http, $q) { /* global app angular */
app.factory('StackService', function (ApiService, CardService, $http, $q) {
var StackService = function ($http, ep, $q) { var StackService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q); ApiService.call(this, $http, ep, $q);
}; };
StackService.prototype = angular.copy(ApiService.prototype); StackService.prototype = angular.copy(ApiService.prototype);
StackService.prototype.afterFetch = function(stack) {
CardService.addAll(stack.cards);
};
StackService.prototype.fetchAll = function (boardId) { StackService.prototype.fetchAll = function (boardId) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.get(this.baseUrl + '/' + boardId).then(function (response) { $http.get(this.baseUrl + '/' + boardId).then(function (response) {
self.clear(); self.clear();
self.addAll(response.data); self.addAll(response.data);
// When loading a stack add cards to the CardService so we can fetch
// information from there. That way we don't need to refresh the whole
// stack data during digest if some value changes
angular.forEach(response.data, function (entity) {
CardService.addAll(entity.cards);
});
deferred.resolve(self.data); deferred.resolve(self.data);
}, function (error) { }, function (error) {
deferred.reject('Error while loading stacks'); deferred.reject('Error while loading stacks');
@@ -44,6 +57,9 @@ app.factory('StackService', function (ApiService, $http, $q) {
$http.get(this.baseUrl + '/' + boardId + '/archived').then(function (response) { $http.get(this.baseUrl + '/' + boardId + '/archived').then(function (response) {
self.clear(); self.clear();
self.addAll(response.data); self.addAll(response.data);
angular.forEach(response.data, function (entity) {
CardService.addAll(entity.cards);
});
deferred.resolve(self.data); deferred.resolve(self.data);
}, function (error) { }, function (error) {
deferred.reject('Error while loading stacks'); deferred.reject('Error while loading stacks');
@@ -121,4 +137,3 @@ app.factory('StackService', function (ApiService, $http, $q) {
var service = new StackService($http, 'stacks', $q); var service = new StackService($http, 'stacks', $q);
return service; return service;
}); });

View File

@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('StatusService', function () { app.factory('StatusService', function () {
// Status Helper // Status Helper

68
js/webpack.config.js Normal file
View File

@@ -0,0 +1,68 @@
const path = require('path');
const webpack = require('webpack');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
require('babel-polyfill');
module.exports = {
node: {
fs: 'empty',
},
entry: {
deck: ['babel-polyfill', './init.js'],
},
output: {
filename: '[name].js',
path: __dirname + '/build'
},
resolve: {
modules: [path.resolve(__dirname), 'node_modules'],
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['@babel/preset-env'],
}
},
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
}
]
},
optimization: {
splitChunks: {
cacheGroups: {
/* separate vendor chunk for node_modules and legacy scripts */
commons: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
chunks: 'all'
},
legacy: {
test: /[\\/]legacy[\\/]/,
name: 'vendor',
chunks: 'all'
}
}
}
},
/* use external jQuery from server */
externals: {
'jquery': 'jQuery'
},
plugins: [
new MiniCssExtractPlugin('[name].css'),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
};

7
js/webpack.dev.config.js Normal file
View File

@@ -0,0 +1,7 @@
const merge = require('webpack-merge');
const baseConfig = require('./webpack.config.js');
module.exports = merge(baseConfig, {
mode: 'development',
devtool: 'source-map',
});

15
js/webpack.prod.config.js Normal file
View File

@@ -0,0 +1,15 @@
const webpack = require('webpack');
const merge = require('webpack-merge');
const baseConfig = require('./webpack.config.js');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports = merge(baseConfig, {
mode: 'production',
optimization: {
minimizer: [
new UglifyJsPlugin({
test: /(vendor\.js)+/i
})
]
}});

View File

@@ -4,13 +4,18 @@ exclude = [
".git", ".git",
"js/node_modules", "js/node_modules",
"js/tests", "js/tests",
"js/legacy",
"js/controller",
"js/directive",
"js/filters",
"js/service",
"js/bower.json", "js/bower.json",
"js/.bowerrc", "js/.bowerrc",
"js/.jshintrc", "js/.jshintrc",
"js/Gruntfile.js", "js/Gruntfile.js",
"js/package.json", "js/package.json",
"js/package-lock.json", "js/package-lock.json",
"js/vendor/jquery", "docs/",
"tests", "tests",
".codecov.yml", ".codecov.yml",
"composer.json", "composer.json",
@@ -24,6 +29,7 @@ exclude = [
"issue_template.md", "issue_template.md",
"krankerl.toml", "krankerl.toml",
"Makefile", "Makefile",
"mkdocs.yml",
"run-eslint.sh" "run-eslint.sh"
] ]

Some files were not shown because too many files have changed in this diff Show More