Compare commits

..
644 Commits
Author SHA1 Message Date
Julius HärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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]andJulius Härtl 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 KurzandJulius Härtl 4a9ef92e5d Fixed color-picker width. #204, #395
Signed-off-by: oskar <oskar.kurz@gmail.com>
2018-06-10 20:38:01 +02:00
Oskar KurzandJulius Härtl 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 08d9d51bea Update README.md 2018-05-12 12:49:14 +02:00
Julius HärtlandGitHub 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]andJulius Härtl 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 83e62a9bc9 Delete issue_template.md
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-11 17:58:04 +02:00
Julius HärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 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ärtlandGitHub 6227583917 Merge pull request #388 from cloud2018/translation
translate attributes in templates/part.card.php
2018-01-13 11:36:44 +01:00
cloud2018andGitHub 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
Julius HärtlandGitHub acc168e174 Merge pull request #384 from nextcloud/prepare-0.3.0
Prepare 0.3.0
2018-01-12 15:12:36 +01:00
Julius Härtl 6998a4a643 Fix jquery exclude
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-12 14:17:01 +01:00
Julius Härtl 2a6db83804 Bump version to 0.3.0 final and update CHANGELOG
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-12 10:31:16 +01:00
Julius Härtl 31e4d370c3 Exclude more files from build
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-12 10:28:04 +01:00
Julius HärtlandGitHub ce3e979452 Merge pull request #382 from nextcloud/small-prerelease-fixes
Small fixes
2018-01-12 10:16:53 +01:00
Nextcloud bot 4ec2ae2a61 [tx-robot] updated from transifex 2018-01-12 01:17:41 +00:00
Nextcloud bot 904eecd155 [tx-robot] updated from transifex 2018-01-11 01:17:43 +00:00
Julius Härtl e70045f7d3 Hide "no actions" from current users avatar menu
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-10 10:54:12 +01:00
Julius Härtl 75f95db0b1 Fix undelete description not being translated
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-10 10:39:31 +01:00
Nextcloud bot 63d29ae533 [tx-robot] updated from transifex 2018-01-10 01:17:12 +00:00
Julius HärtlandGitHub 59ac632d0e Merge pull request #377 from nextcloud/fix-label-style
Fix label style issue when list of labels is updated
2018-01-08 14:52:17 +01:00
Julius HärtlandGitHub b57e8e56fa Merge branch 'master' into fix-label-style 2018-01-08 14:38:42 +01:00
Julius HärtlandGitHub 5b28365444 Merge pull request #376 from nextcloud/fix-avatar-stuff
Fix avatar issues
2018-01-08 14:38:05 +01:00
Julius Härtl f55fb90cfa Fix label style issue when list of labels is updated
fixes #373

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-08 14:37:44 +01:00
Julius HärtlandGitHub c517dbdb77 Merge pull request #371 from nextcloud/minor-fixes
Various fixes
2018-01-08 13:44:46 +01:00
Julius Härtl 14d5af683e Show contacts menu for board owner
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-08 13:42:37 +01:00
Julius Härtl e1e01c0e0d Unify avatar directive
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-08 13:35:49 +01:00
Julius Härtl 403629c91a Move unassign button to avatar menu
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-08 12:44:15 +01:00
Nextcloud bot 15d642efa4 [tx-robot] updated from transifex 2018-01-04 01:07:56 +00:00
Nextcloud bot d3d888fb43 [tx-robot] updated from transifex 2017-12-31 01:07:33 +00:00
Nextcloud bot 5ac2b91542 [tx-robot] updated from transifex 2017-12-30 01:07:44 +00:00
Julius Härtl de4e90b52e Check for undefined type when getting the acl string representation
fixes #367

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-22 12:40:31 +01:00
Julius Härtl dc37dd2c60 Use separate object when editing card descriptions (fixes #369)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-22 12:37:57 +01:00
Julius Härtl 5d38f6a176 Fix board bullet opacity (fixes #364)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-22 12:20:21 +01:00
Julius Härtl 70d28ec376 Remove duplicate and unused id
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-22 12:16:29 +01:00
Julius Härtl 8cec7cb571 Check if board is undefined (fixes #366)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-22 12:16:08 +01:00
Nextcloud bot 52ac77ea90 [tx-robot] updated from transifex 2017-12-21 01:07:11 +00:00
Nextcloud bot dd0c26b298 [tx-robot] updated from transifex 2017-12-19 01:07:09 +00:00
Julius HärtlandGitHub 19dda17e71 Merge pull request #361 from nextcloud/prepare-0.3.0-beta1
Prepare 0.3.0 beta1
2017-12-17 19:36:27 +01:00
Julius HärtlandGitHub cd6f661dc9 Merge pull request #362 from nextcloud/php-7.2
Add drone test for php 7.2
2017-12-17 19:36:09 +01:00
Julius Härtl 5dcf52b489 Allow failure for stable12/php7.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 19:15:19 +01:00
Julius Härtl ea5203049b Only test syntax of the app
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 18:56:10 +01:00
Julius Härtl a388a04a06 Update drone matrix
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 18:45:08 +01:00
Julius Härtl 4393b44e0d Add php version to travis
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 18:34:36 +01:00
Julius Härtl d3b34fc3f6 Add drone test for php 7.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 18:33:05 +01:00
Julius HärtlandGitHub cd81192cae Merge branch 'master' into prepare-0.3.0-beta1 2017-12-17 18:25:52 +01:00
Julius Härtl d33cce3725 Fix remaining bug with save indicator
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 18:20:52 +01:00
Julius Härtl 5ffef2fd3a Fix section headers being shrinked
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 18:10:22 +01:00
Julius Härtl d7da990a55 Fix small styling bugs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 18:00:16 +01:00
Julius Härtl 95f4e4b014 Update stack data after label update request has been processed
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 17:59:55 +01:00
Julius Härtl 66cfa72839 Remove apha warning
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 17:45:55 +01:00
Julius Härtl f707bed675 Update changelog and krankerl exclude list
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 17:45:02 +01:00
Julius Härtl 173b0f4756 Move building to krankerl
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 17:45:01 +01:00
Julius Härtl 2425018897 Bump version to 0.3.0-beta1
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-17 17:45:01 +01:00
Julius HärtlandGitHub 415e5b5a1a Merge pull request #358 from nextcloud/add-tooltips
Add tooltips and support for contacts menu at avatars
2017-12-17 17:44:35 +01:00
Julius HärtlandGitHub eb0810de27 Merge pull request #359 from nextcloud/fix-autosave
Fix save indicator for description (fixes #354)
2017-12-17 17:44:23 +01:00
Julius HärtlandGitHub 0af0124c12 Merge pull request #360 from nextcloud/stable12-fixes
Add breadcrumb flex css to keep styles correct on stable12
2017-12-17 17:44:06 +01:00
Julius Härtl ebe3666b9f Add breadcrumb flex css to keep styles correct on stable12
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-16 17:36:32 +01:00
Julius Härtl 183c2665eb Show tooltip with displayname and add contactsmenu to avatars
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-16 17:07:30 +01:00
Julius Härtl 63da73600f Add tooltip to assigned users and info button
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-16 11:21:59 +01:00
Julius Härtl 253e60f88a Fix save indicator for description (fixes #354)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-16 10:48:02 +01:00
Julius HärtlandJulius Härtl 1d5ed11a8c Make the whole stack a drop target
fixes #307

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-16 10:47:48 +01:00
Julius HärtlandJulius Härtl 28208f168d Improve card positioning when dragging
fixes #307
fixes #236

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-16 10:47:48 +01:00
Julius HärtlandJulius Härtl 84502db00b Fix scrolling on mobile browsers
fixes #164

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-16 10:47:48 +01:00
Nextcloud bot 6d8afe6252 [tx-robot] updated from transifex 2017-12-15 14:53:55 +00:00
Nextcloud bot d674abb7b6 [tx-robot] updated from transifex 2017-12-09 01:16:06 +00:00
Julius HärtlandJulius Härtl 7200e17d33 Fix some codestyle issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 1ace5de9e6 Make sure both board lists are initialized
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 5394d0f59b Do some cleanup
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl d386ab80d4 Fix eslint errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 9fa88cac6b Use settings icon in board list as well
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 827aceecda Adjust board header actions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 9cefecb45d Add share icon and archived view state to the breadcrumbs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl a48169de18 Rework parameter handling, highlight active card and allow switching tabs in the board sidebar
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl fbf48e1be0 Fix color loading
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl c8d5f179be Adapt new breadcrumb layout
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 137f429cfa Fix tests for acl type
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 367873beaa Add avatars to share selection
fix #208

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl a8aab8d049 Move to numeric acl types
fixes #297

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl ef64dfc5a2 Fix bug when board list was not in sync when adding a new one
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-08 20:12:53 +01:00
Julius HärtlandJulius Härtl 7c552e9a52 Only send overdue notifications for unarchived cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-12-07 20:20:47 +01:00
Nextcloud bot 02724fd4eb [tx-robot] updated from transifex 2017-12-04 01:16:01 +00:00
Nextcloud bot 89643fb681 [tx-robot] updated from transifex 2017-12-01 01:16:14 +00:00
Julius HärtlandJulius Härtl 1b19ba2385 Propagate card update to StackService
fixes #203

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-29 23:05:43 +01:00
Nextcloud bot 8b9ae38303 [tx-robot] updated from transifex 2017-11-28 01:15:10 +00:00
Julius HärtlandJulius Härtl 175f47be5b Remove legacy css build and move scss imports to the top
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl 8cfaca8a75 Fix overlooked rebasing error
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl 03fc1fd0f2 Fix popover hiding
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl 066f67ef7b Fix popovermenus on 13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl 081b3520a0 CSS: restore variables that are not part of the server
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl 8324410578 CSS: Move icons to separate file
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl b3db3daf91 Add fix for nc<13 app menu
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl aa5e0a1d5e Move variables to legacy scss
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl c38039ad80 Fix menu
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl a9a5b6a52a Fix board updating reset
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl e1793b5c31 Performance optimizations in list template
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl f533f2bd80 Refactor boardlist loading process
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl 35fc02734f Navigation: make editing work again
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Julius HärtlandJulius Härtl 91261f2e4e Frontend: Update app menu to fit new NC13 flex layout
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-27 21:14:04 +01:00
Nextcloud bot c519e1b841 [tx-robot] updated from transifex 2017-11-19 01:14:54 +00:00
Nextcloud bot 8668a900b1 [tx-robot] updated from transifex 2017-11-18 01:15:45 +00:00
Nextcloud bot 4ca45a5629 [tx-robot] updated from transifex 2017-11-17 01:14:55 +00:00
Nextcloud bot 78020635c8 [tx-robot] updated from transifex 2017-11-14 01:14:49 +00:00
Julius HärtlandJulius Härtl abc039a634 Fix issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-13 09:40:28 +01:00
Julius HärtlandJulius Härtl afec4f211c eslint auto fix
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-13 09:40:28 +01:00
Julius HärtlandJulius Härtl 47b51c512d Add eslintrc
Signed-off-by: Julius Härtl <jus@bitgrid.net>

Make run-eslint.sh executable

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-13 09:40:28 +01:00
Julius HärtlandJulius Härtl f8f755f31e Add eslint drone test
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-13 09:40:28 +01:00
Julius Härtl a2adcf2487 Add default for injected value since out app container is not queried during update
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-11 12:05:46 +01:00
Nextcloud bot 650313254f [tx-robot] updated from transifex 2017-11-11 01:16:12 +00:00
Julius HärtlandJulius Härtl 5dd91f4261 Tests: remove NC11 from travis
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-10 11:13:47 +01:00
Julius HärtlandJulius Härtl 8499a28921 Drop support for NC11
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-11-10 11:13:47 +01:00
Nextcloud bot c1bc287fe1 [tx-robot] updated from transifex 2017-11-10 01:15:37 +00:00
Nextcloud bot 68b3c0216d [tx-robot] updated from transifex 2017-11-08 01:14:39 +00:00
Nextcloud bot 58885f6598 [tx-robot] updated from transifex 2017-11-07 01:13:46 +00:00
Nextcloud bot af3201b293 [tx-robot] updated from transifex 2017-11-05 01:13:35 +00:00
Jan-Christoph BorchardtandJulius Härtl d2dde30098 Change style of add card buttons to be less distracting
Signed-off-by: Jan-Christoph Borchardt <hey@jancborchardt.net>
2017-11-03 15:05:45 +01:00
Nextcloud bot 10c836d864 [tx-robot] updated from transifex 2017-11-03 01:14:22 +00:00
Nextcloud bot ff2503f857 [tx-robot] updated from transifex 2017-11-01 01:13:21 +00:00
Nextcloud bot fcd5918686 [tx-robot] updated from transifex 2017-10-31 01:13:00 +00:00
Riccardo PadovaniandJulius Härtl 8213b39949 Fix #308 - Document title doesn't update when renaming active board
Signed-off-by: Riccardo Padovani riccardo@rpadovani.com
2017-10-28 17:12:28 +02:00
Nextcloud bot 88474bb11b [tx-robot] updated from transifex 2017-10-27 00:12:59 +00:00
Nextcloud bot 546b71926a [tx-robot] updated from transifex 2017-10-26 00:13:13 +00:00
Riccardo PadovaniandJulius Härtl 37967f5bfb Simplify code
Signed-off-by: Riccardo Padovani <riccardo@rpadovani.com>
2017-10-25 22:27:26 +02:00
Riccardo PadovaniandJulius Härtl cd651ebda5 When creating a board, choose the less used color
Fix issue #245

Signed-off-by: Riccardo Padovani <riccardo@rpadovani.com>
2017-10-25 22:27:26 +02:00
Nextcloud bot 5f69c56c3a [tx-robot] updated from transifex 2017-10-25 00:13:25 +00:00
Brandon RaittandJulius Härtl 3f8806c81f Remove empty title tags.
Signed-off-by: Brandon Raitt <npm.pxoink@gmail.com>
2017-10-24 12:11:46 +02:00
Brandon RaittandJulius Härtl 32a7c5f765 Update requested changes for accessibility. 2017-10-24 12:11:46 +02:00
Brandon RaittandJulius Härtl 7b45a92a60 Update various template files to increase accessibility support.
Signed-off-by: Brandon Raitt <npm.pxoink@gmail.com>
2017-10-24 12:11:46 +02:00
Nextcloud bot 7b88d56e7a [tx-robot] updated from transifex 2017-10-24 00:13:35 +00:00
Julius HärtlandJulius Härtl 19b13456a5 Notifications: Fix sending notifications to users with numeric uid
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:33 +02:00
Julius HärtlandJulius Härtl 53b1af9dbe Frontend: Remove unrequired css and fix language strings
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 3037effb5a Card: Fix styling issue when only duedate is set
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Marin TreseljandJulius Härtl 8357599361 Add some space between multiple assignees
Signed-off-by: Marin Treselj <marin.treselj@forlagshuset.no>
2017-10-23 22:12:08 +02:00
Marin TreseljandJulius Härtl 5d54772b1b Give 44*44px clickable area for the icon-more button
Signed-off-by: Marin Treselj <marin.treselj@forlagshuset.no>
2017-10-23 22:12:08 +02:00
Marin TreseljandJulius Härtl afa16ee3ba Use default (larger) avatar size, default (smaller) action bar height
Signed-off-by: Marin Treselj <marin.treselj@forlagshuset.no>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 090d99a360 Frontend: fix warnings in withoutAssignedUsers filter
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl a322c7a3b5 Tests: Add integration test for user assignment
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 1f3276acee Card: Only show users that are not already assigned
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl dc917b1e5d Fix inspection issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl ff2d96a1fb Fix tests that invoke findUsers
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl a56ceb348d Fix issue with new findUser implementation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 8cb95c4105 Frontend: Fix codacy errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 28d6f4196e Tests: Fix tests for user assignment
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 99c31d3c00 Card: Show assigned users on board
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 02ec4ae9d1 Frontend: cleanup dom structure and css
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl f42e3eb857 Frontend: Fix assigning/removing users
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 447cb80573 Backend: assign/remove user impelementation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 01f11d1be9 Frontend: Add UI for user assignment
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl f746588111 Backend: Get list of users to assign
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 458a795460 Fix card headings
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Julius HärtlandJulius Härtl 4cf746dd6f WIP: assign users
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-23 22:12:08 +02:00
Morris JobkeandJulius Härtl 4fa37f0548 Border-radius does not need the vendor prefixes anymore
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2017-10-23 21:04:26 +02:00
Nextcloud bot fa70d329cd [tx-robot] updated from transifex 2017-10-21 00:12:48 +00:00
Nextcloud bot 98978b019a [tx-robot] updated from transifex 2017-10-20 00:13:00 +00:00
Julius HärtlandJulius Härtl 07da13bdf9 Fix assigning newly created labels
fixes #252

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-19 11:46:41 +02:00
Riccardo PadovaniandJulius Härtl 794fcb76b8 Update part.board.sidebarView.php
Don't use ng-keyup as per merge review

Signed-off-by: Riccardo Padovani riccardo@rpadovani.com
2017-10-19 11:41:35 +02:00
Riccardo PadovaniandJulius Härtl 2ca1e1eed8 Ability to save tag changes with enter
Fix issue #306

Signed-off-by: Riccardo Padovani <riccardo@rpadovani.com>
2017-10-19 11:41:35 +02:00
Nextcloud bot 063bf59ddb [tx-robot] updated from transifex 2017-10-18 00:12:47 +00:00
Nextcloud bot 5fde7a19bf [tx-robot] updated from transifex 2017-10-17 00:12:51 +00:00
Julius HärtlandJulius Härtl 6901314382 Remove unused code
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-17 01:17:37 +02:00
Julius HärtlandJulius Härtl c45bb71084 Fix phpstorm inspection issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-17 01:17:37 +02:00
Julius HärtlandJulius Härtl 320f2bf5c8 JS: Fix scrutinizer warnings and indentation for services
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-17 01:17:37 +02:00
Julius HärtlandJulius Härtl 9014ae1490 JS: Fix scrutinizer warnings and indentation for filters
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-17 01:17:37 +02:00
Julius HärtlandJulius Härtl 516e396a58 JS: Fix scrutinizer warnings and indentation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-17 01:17:37 +02:00
Julius HärtlandJulius Härtl 9b9c1432f2 Tests: Add Nextcloud public api for better scrutinizer inspection
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-17 01:17:37 +02:00
Julius HärtlandJulius Härtl 8d39fd9ad1 Card: Auto save while typing
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-16 22:39:45 +02:00
Nextcloud bot 3d54d129b9 [tx-robot] updated from transifex 2017-10-14 02:33:28 +00:00
Julius HärtlandJulius Härtl 05395dbfbe Fix mysql datetime format
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-10 17:50:01 +02:00
Julius Härtl 1b0ac8c1e2 Update appstore building excludes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-08 11:51:04 +02:00
Nextcloud bot 4fc96e40ff [tx-robot] updated from transifex 2017-10-07 00:12:56 +00:00
Nextcloud bot 8b4eac0854 [tx-robot] updated from transifex 2017-10-06 00:13:00 +00:00
Nextcloud bot 1d4c019588 [tx-robot] updated from transifex 2017-10-05 00:12:52 +00:00
Nextcloud bot dbef69e9ce [tx-robot] updated from transifex 2017-10-04 00:12:43 +00:00
Julius HärtlandJulius Härtl 7c6e48d15b Notifications: Fix issues with user fetching
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl d9c3aa44b9 Tests: Add tests for sharing a board notifications
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl ac1b1e826f Fix scritinizer issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl 3c2ee00ad7 Notifications: Add more tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl 6a575baadd Notifications: remove pending notifications if duedate is changed
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl f8c9bc1c7c Cron: Ignore unused parameters in codacy
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl e1ac6b0a9e Notifications: Add test for Notifier
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl ed55b0db51 Notifications: Do not use rich text for board/card
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl e8ecfce134 Notifications: Workaround to use announcement type for now
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl 07132126a9 Add separate NotificationHelper to keep code together
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl a346e215cd Send notifications when a card is overdue
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Julius HärtlandJulius Härtl 52fc971529 Send notifications when a board gets shared
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-03 23:00:09 +02:00
Nextcloud bot e0bab217a0 [tx-robot] updated from transifex 2017-10-03 00:12:45 +00:00
Julius HärtlandJulius Härtl f770b2e7af Fix card action menu
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-01 17:06:16 +02:00
Julius HärtlandJulius Härtl 0d3916d450 Fix issues with new header levels
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-10-01 17:05:56 +02:00
Nextcloud bot 8fbd400c3c [tx-robot] updated from transifex 2017-10-01 00:12:46 +00:00
Nextcloud bot fa9067b47a [tx-robot] updated from transifex 2017-09-30 00:12:53 +00:00
Nextcloud bot af83e8a3d0 [tx-robot] updated from transifex 2017-09-29 00:12:52 +00:00
Julius HärtlandGitHub e8ba47564c Merge pull request #304 from nextcloud/remove-console-log
Frontend: remove javascript console.log statements
2017-09-28 13:27:30 +02:00
Julius Härtl ea1b597fc0 Frontend: remove javascript console.log statements
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-28 11:48:18 +02:00
Regina M. SiposandJulius Härtl 5312751cb8 Fix further uses of the word label to tag 2017-09-28 11:47:28 +02:00
Regina M. SiposandJulius Härtl a2bef30759 Change the word labels to tags for consistency 2017-09-28 11:47:28 +02:00
Nextcloud bot b2f58b3404 [tx-robot] updated from transifex 2017-09-27 00:12:46 +00:00
Nextcloud bot d212a426f2 [tx-robot] updated from transifex 2017-09-19 00:12:52 +00:00
Julius Härtl 4689619ba4 Bump version to 0.3.0 development
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-18 19:29:40 +02:00
Nextcloud bot e2e8e98c1f [tx-robot] updated from transifex 2017-09-18 00:14:45 +00:00
Julius HärtlandJulius Härtl f9b9973c29 Fix positioning of card description heading
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-16 15:55:30 +02:00
Julius HärtlandJulius Härtl c3ba8fa536 Use proper heading levels
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-16 15:55:30 +02:00
Julius HärtlandJulius Härtl e1d1e0c2c8 Align stacks to start (fixes #290)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-16 15:55:20 +02:00
Julius HärtlandJulius Härtl aaf04ffbd4 Fix card positioning when draging them around
fixes #293

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-16 15:55:06 +02:00
Nextcloud bot 1d08c67353 [tx-robot] updated from transifex 2017-09-12 00:12:25 +00:00
Julius HärtlandJulius Härtl 2706dfaf4e Acl: Fix wrong permission type being set
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-07 23:57:03 +02:00
Julius Härtl 830f8a13fc Prepare 0.2.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-07 13:03:23 +02:00
Nextcloud bot a15997a2c8 [tx-robot] updated from transifex 2017-09-07 00:12:26 +00:00
Nextcloud bot 287e1fe2d0 [tx-robot] updated from transifex 2017-09-03 00:12:19 +00:00
Julius HärtlandJulius Härtl ec5389beb3 Disable draging of the sidebar
Fixes #262 #241

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-01 16:21:25 +02:00
Julius HärtlandJulius Härtl 8d8c7587d7 Use archive state to disable datepicker/labels
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-01 16:20:17 +02:00
Julius HärtlandJulius Härtl c67b5eab6b Fix datepicker layout
closes #283

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-09-01 16:20:17 +02:00
Julius Härtl daee347ea5 Add site url to jekyll config
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-08-27 10:26:48 +02:00
Robert KorulczykandJulius Härtl 1765ab2c34 Add scrollbar for too wide pre tags.
Signed-off-by: Robert Korulczyk <robert@korulczyk.pl>
2017-08-26 18:07:44 +02:00
Robert KorulczykandJulius Härtl 0cc322f133 Fix white-space styles for pre code blocks
Signed-off-by: Robert Korulczyk <robert@korulczyk.pl>
2017-08-26 18:07:44 +02:00
Nextcloud bot 857e22a8c9 [tx-robot] updated from transifex 2017-08-25 00:13:01 +00:00
Nextcloud bot a8f3119d26 [tx-robot] updated from transifex 2017-08-22 00:12:33 +00:00
Nextcloud bot ef52ab5bca [tx-robot] updated from transifex 2017-08-21 00:12:26 +00:00
Nextcloud bot 22c20426b3 [tx-robot] updated from transifex 2017-08-19 00:12:33 +00:00
Nextcloud bot 42fa3fa039 [tx-robot] updated from transifex 2017-08-12 00:12:16 +00:00
Morris JobkeandGitHub 2a8a6784f1 Merge pull request #280 from nextcloud/drone-update
Update syntax to drone 0.8
2017-08-09 12:17:04 +02:00
Morris Jobke d50cdcb343 Update syntax to drone 0.8
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2017-08-09 11:15:25 +02:00
Julius HärtlandJulius Härtl 1cbfd1b6bf Use ISO8601 date format for duedate
Fixes issues with Date.parse on webkit based browsers
closes #240

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-08-08 22:12:38 +02:00
Artem AnufrijandGitHub 38ec1abfa5 Merge pull request #278 from nextcloud/fix-card-editing-placeholder
Fix card description placeholder
2017-08-08 20:29:53 +02:00
Julius Härtl ac453636a9 Fix card description placeholder
fixes #261

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-08-08 16:20:31 +02:00
Julius HärtlandJulius Härtl 698f1eea25 Fix shared icon in sidebar
closes #247

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-08-08 16:11:36 +02:00
Nextcloud bot 8e858fac5c [tx-robot] updated from transifex 2017-08-08 00:12:09 +00:00
Artem AnufrijandGitHub ce7c5d6196 Merge pull request #275 from nextcloud/fix-tests
Fix tests
2017-08-08 00:15:35 +02:00
Julius Härtl 9cfb561c1c Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-08-06 14:25:10 +02:00
Nextcloud bot bf06ec29ca [tx-robot] updated from transifex 2017-08-05 00:12:06 +00:00
jacestkandJulius Härtl 1ec13802af IE11 Fixes
Fixes for displaying AngularJS style in IE11
replace style="css{angular}" by ng-style="{angular}css"
2017-08-04 15:46:21 +01:00
Julius HärtlandJulius Härtl 86385f0d6f Fix drag-zone when sorting cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-08-04 12:55:32 +01:00
Nextcloud bot 3c12c84c7b [tx-robot] updated from transifex 2017-08-02 00:12:19 +00:00
Nextcloud bot 168c83fea0 [tx-robot] updated from transifex 2017-08-01 00:12:33 +00:00
Nextcloud bot 04ba531e2f [tx-robot] updated from transifex 2017-07-30 00:11:58 +00:00
Nextcloud bot 460b55f002 [tx-robot] updated from transifex 2017-07-29 00:12:29 +00:00
Morris Jobke 850cecb0b9 Run drone push only on specific branches
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2017-07-27 17:44:34 +02:00
Nextcloud bot ba6e980cba [tx-robot] updated from transifex 2017-07-27 00:11:59 +00:00
Nextcloud bot b28e549353 [tx-robot] updated from transifex 2017-07-25 00:11:56 +00:00
Nextcloud bot b3c16a5a92 [tx-robot] updated from transifex 2017-07-23 00:11:26 +00:00
Jan-Christoph BorchardtandGitHub 2b7d1b1085 Merge pull request #238 from nextcloud/fix-drag-empty-stack
Add min-height to card list and merge duplicate rules for .card
2017-07-14 10:24:19 +02:00
Nextcloud bot c8c32eba8c [tx-robot] updated from transifex 2017-07-14 00:12:19 +00:00
Nextcloud bot 124403f8aa [tx-robot] updated from transifex 2017-07-13 00:12:12 +00:00
Nextcloud bot f61377d95f [tx-robot] updated from transifex 2017-07-11 00:12:21 +00:00
Nextcloud bot ec2b0d2c7d [tx-robot] updated from transifex 2017-07-08 00:12:00 +00:00
Marin TreseljandGitHub c68275c325 Merge branch 'master' into fix-drag-empty-stack 2017-07-07 23:01:43 +02:00
Nextcloud bot e67aee4019 [tx-robot] updated from transifex 2017-07-07 00:11:51 +00:00
Julius Härtl cfcaa6939b Add min-height to card list and merge duplicate rules for .card
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-07-06 16:51:07 +02:00
Julius HärtlandJulius Härtl 631a96f8da Add viewbox to icon
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-07-06 13:42:43 +02:00
Artem AnufrijandJulius Härtl de800f79fb fixed margin for DnD class
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-07-06 13:32:41 +02:00
Artem AnufrijandJulius Härtl 43d46830d1 changed space between cards
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-07-06 13:32:41 +02:00
Artem AnufrijandJulius Härtl 14c90e53ce fix for due date control
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-07-06 13:27:34 +02:00
Nextcloud bot a14b74223b [tx-robot] updated from transifex 2017-07-06 00:12:19 +00:00
Artem AnufrijandGitHub 4cbaff461e Merge pull request #224 from nextcloud/fix-scss-stable11
Include nextcloud variables/functions when building legacy css file
2017-07-04 21:57:06 +02:00
Julius Härtl 7461b186a5 Include nextcloud variables/functions when building legacy css file
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-07-04 21:48:52 +02:00
Artem AnufrijandJulius Härtl 34a253cff2 0.2.1
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-07-04 21:39:48 +02:00
Nextcloud bot 1cb37ac8fa [tx-robot] updated from transifex 2017-07-03 00:11:46 +00:00
Nextcloud bot 5648557be0 [tx-robot] updated from transifex 2017-07-02 00:11:27 +00:00
Nextcloud bot 6eb10bd667 [tx-robot] updated from transifex 2017-07-01 00:11:50 +00:00
Marin TreseljandJulius Härtl 1105363d9a Better border visibility in board list
Signed-off-by: Marin Treselj <marin.treselj@forlagshuset.no>
2017-06-30 18:55:12 +02:00
Julius HärtlandJulius Härtl 2b1bac9a2f Fix issues with board list
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-30 18:55:12 +02:00
Marin TreseljandJulius Härtl 227f510d73 Add as author
Signed-off-by: Marin Treselj <marin.treselj@forlagshuset.no>
2017-06-30 18:55:12 +02:00
Marin TreseljandJulius Härtl 2fa56cdd77 Convert to SCSS and cleanup
Signed-off-by: Marin Treselj <marin.treselj@forlagshuset.no>
2017-06-30 18:55:12 +02:00
Julius HärtlandJulius Härtl 1346d085fe Move to SCSS
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-30 18:55:12 +02:00
Nextcloud bot 8e3db9147b [tx-robot] updated from transifex 2017-06-30 00:11:51 +00:00
Nextcloud bot 587f2ef3e3 [tx-robot] updated from transifex 2017-06-29 00:11:51 +00:00
Nextcloud bot 7839f3ea10 [tx-robot] updated from transifex 2017-06-28 00:11:50 +00:00
Artem AnufrijandJulius Härtl 1029a21f87 Polish sidebar (#215)
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-27 21:29:38 +02:00
Artem AnufrijandJulius Härtl e908593ce0 show due date on mouse over
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-27 09:11:33 +02:00
Nextcloud bot be555529f0 [tx-robot] updated from transifex 2017-06-26 00:11:58 +00:00
Nextcloud bot 53e4eb345a [tx-robot] updated from transifex 2017-06-25 00:11:42 +00:00
Julius HärtlandJulius Härtl 6a2dbf61d9 Simplify board view
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-23 22:47:37 +02:00
Julius HärtlandJulius Härtl 27d99f4a50 Align text in label list to the left
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-23 22:46:12 +02:00
Artem AnufrijandJulius Härtl 6f479727d5 some css fixes
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-23 22:46:12 +02:00
Artem AnufrijandJulius Härtl 64c3606e09 polish label editor
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-23 22:46:12 +02:00
Marin TreseljandJulius Härtl acaff1e99e Add viewBox and make deck.svg similar to deck.svg
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-06-23 21:51:42 +02:00
Julius HärtlandJulius Härtl d584b45114 Rename icons to avoid issues with theming app
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-23 21:51:42 +02:00
Nextcloud bot bf52f85c08 [tx-robot] updated from transifex 2017-06-23 00:12:42 +00:00
Artem AnufrijandGitHub 237df08414 Merge pull request #209 from nextcloud/fix-last-opacity
Fix opacity of last entry in board list
2017-06-23 00:25:52 +02:00
Julius Härtl e9ef790295 Fix opacity of last entry in board list
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-22 22:28:00 +02:00
Artem AnufrijandGitHub 1388da0fa0 Merge pull request #198 from nextcloud/edit-board-in-board-list-view
edit board in board list view
2017-06-22 21:26:25 +02:00
Julius Härtl aa69584afd Fix wrong status object in elements
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-22 21:21:51 +02:00
Artem AnufrijandJulius Härtl a03986b1bb improved 'add new board' row
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-22 20:54:02 +02:00
Artem AnufrijandJulius Härtl e970fca3f3 css changes
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-22 20:54:02 +02:00
Artem AnufrijandJulius Härtl b15555e5e2 added save and cancel button
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-22 20:54:01 +02:00
Artem AnufrijandJulius Härtl 017b4b5b29 edit board in board list view
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-22 20:54:01 +02:00
Nextcloud bot 905aeed75a [tx-robot] updated from transifex 2017-06-22 00:11:57 +00:00
Julius Härtl 86fe38832c Set theme jekyll-theme-cayman 2017-06-21 14:33:24 +02:00
Nextcloud bot 935026fb0f [tx-robot] updated from transifex 2017-06-21 00:11:32 +00:00
Julius Härtl da35eb45da Fix screenshot url
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-20 10:49:53 +02:00
Julius Härtl 0b2884cdfb Fix database index
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-20 10:34:00 +02:00
Julius HärtlandJulius Härtl 515b5c5310 Remove the alpha warning
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-20 10:19:59 +02:00
Julius HärtlandJulius Härtl f9674db40a Update screenshot in README
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-20 10:19:59 +02:00
Julius HärtlandJulius Härtl 4dfc11db56 Cleanup CHANGELOG
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-20 10:19:59 +02:00
Julius HärtlandJulius Härtl 5b620879de Add new screenshots
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-20 10:19:59 +02:00
Julius HärtlandJulius Härtl 0c478a0636 Prepare 0.2 release
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-20 10:19:59 +02:00
Nextcloud bot 4a2ee8f9d0 [tx-robot] updated from transifex 2017-06-20 00:12:13 +00:00
Julius HärtlandJulius Härtl 630104c37f Fix app-navigation-toggle height and small typo
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 22:11:26 +02:00
Artem AnufrijandJulius Härtl 882bf773c8 Toggle navigation bar on mobile and desktop devices
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-19 22:11:26 +02:00
Marin TreseljandGitHub 42f3f5c1dd Merge pull request #191 from nextcloud/browser-title
Set board title as browser title
2017-06-19 21:02:07 +02:00
Julius Härtl 6d8dbeebcd Set board title as browser title
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 20:38:08 +02:00
Julius HärtlandJulius Härtl 1d9a0d35d8 Add timepicker css
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Artem AnufrijandJulius Härtl eabcb12185 css fixes
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

some css changes

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

removed unused css line

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

some margin changes

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl ae88f2291c Add tests for overdue state
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl a5199127da Add padding only for colored due date badges
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl 9c19246b8b Optimize calendar-white icon
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl 396a0d6d3a Fix due date colors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl 0ffb8a0dbd Fix small issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl 2063e1d9f4 Fix unit tests for duedate
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl b350213a01 Fix margin issues and eslint warnings
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Julius HärtlandJulius Härtl 9a77bd7c7c Implement due dates for cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-19 10:36:29 +02:00
Nextcloud bot 58bf51accd [tx-robot] updated from transifex 2017-06-19 00:11:41 +00:00
Nextcloud bot ead01055fc [tx-robot] updated from transifex 2017-06-17 00:12:03 +00:00
Nextcloud bot 848521a8ef [tx-robot] updated from transifex 2017-06-16 00:12:24 +00:00
Nextcloud bot 7e81b6c182 [tx-robot] updated from transifex 2017-06-15 00:12:24 +00:00
Nextcloud bot 231c4e1acb [tx-robot] updated from transifex 2017-06-14 16:22:24 +00:00
Nextcloud bot 094d5334aa [tx-robot] updated from transifex 2017-06-14 00:12:10 +00:00
Nextcloud bot 989f09ed98 [tx-robot] updated from transifex 2017-06-13 00:11:48 +00:00
Nextcloud bot fe936f42c4 [tx-robot] updated from transifex 2017-06-12 00:11:40 +00:00
Nextcloud bot b82ef2b401 [tx-robot] updated from transifex 2017-06-11 00:11:53 +00:00
Artem AnufrijandGitHub 4de11b8f95 Merge pull request #186 from nextcloud/fix-sharing-icon
Hotfix for user/group icons on sharing list
2017-06-11 00:07:48 +02:00
Julius Härtl 61c4e70046 Hotfix for user/group icons on sharing list
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-11 00:02:35 +02:00
Artem AnufrijandJulius Härtl d052325874 fixed css
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-10 23:46:52 +02:00
Artem AnufrijandJulius Härtl 9b6869862c some design changes in board list
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-10 23:46:52 +02:00
Artem AnufrijandJulius Härtl d421e23f9d added assigned-users into css block
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-10 23:20:35 +02:00
Artem AnufrijandJulius Härtl bdd47c8dc6 fixed avatar margin
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-10 23:20:35 +02:00
Julius HärtlandGitHub bb8c0909f2 Merge pull request #181 from nextcloud/add-toggle-button-into-board-list
added board header for board list
2017-06-10 23:16:23 +02:00
Artem Anufrij 8e89c36ba8 added board header for board list
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-10 10:41:13 +02:00
Nextcloud bot 4391af0e84 [tx-robot] updated from transifex 2017-06-10 00:12:06 +00:00
Artem AnufrijandGitHub b1ac1b3d4e Merge pull request #177 from nextcloud/toggle-navi-bar
toggle navibar visibility
2017-06-09 23:54:28 +02:00
Artem Anufrij 6b8c084ed4 better mobile support
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-09 22:53:10 +02:00
Artem Anufrij ac39568ff6 toggle navibar visibility
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-09 18:58:45 +02:00
Nextcloud bot e7b095591a [tx-robot] updated from transifex 2017-06-09 00:12:01 +00:00
Julius HärtlandGitHub 2e1f743698 Merge pull request #175 from nextcloud/optimized-deck-icon
Optimized 16px version of deck.svg
2017-06-08 23:18:06 +02:00
Marin Treselj 537adc09b4 OPtimized 16px version of deck.svg
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-06-08 22:53:10 +02:00
Julius HärtlandGitHub 48842dd53e Merge pull request #133 from nextcloud/archive-boards
Archive boards
2017-06-08 22:46:04 +02:00
Julius Härtl 68b2025390 Some minor fixes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 20:52:56 +02:00
Artem AnufrijandJulius Härtl 034ac5e2ad add_delete_menu_in_default_view
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-08 20:52:56 +02:00
Artem AnufrijandJulius Härtl 727a33535d fixed_context_menu_position
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-08 20:52:33 +02:00
Julius Härtl 3062c82083 Allow force delete to have a clean test env after creating boards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:44 +02:00
Julius Härtl 4623688852 Fix codacy errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:44 +02:00
Julius Härtl 19a90809f9 Add more unit testing
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:44 +02:00
Julius Härtl 57f74c98db Fix adding new boards in the sidebar
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:43 +02:00
Julius Härtl c7586377ea Fix stateParam changes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:43 +02:00
Julius Härtl f5dc4ac0e9 Fix missing card actions
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:43 +02:00
Julius Härtl 06e41f59f6 Add unit tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:43 +02:00
Julius Härtl f7b69d9c42 Fix varius small issues
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:43 +02:00
Julius Härtl 2c63bfb4b8 Keep deleted boards for a while and delete with cron
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:43 +02:00
Julius Härtl 247b4dde0c Fix getting permissions and active indicator
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:43 +02:00
Julius Härtl 90eb9ce28e Fix unit tests for board archiving
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:42 +02:00
Julius Härtl 8c04ea8dc9 Archive boards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-06-08 19:35:42 +02:00
Nextcloud bot fa5cba631f [tx-robot] updated from transifex 2017-06-08 00:11:59 +00:00
Nextcloud bot b220bab8c6 [tx-robot] updated from transifex 2017-06-07 00:12:51 +00:00
Artem AnufrijandJulius Härtl 786aa00f83 missing translation for 'Add a new stack' (#169)
* missing translation for 'Add a new stack'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* fixed pixelipo's comment

* label->tag

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* 'Board title' -> 'New Board title'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* 'Board title' -> 'Boards' in Boardlist

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* renamed column header 'Boards' -> 'Title'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* missing translation for 'Add a new stack'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

fixed pixelipo's comment
label->tag

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

'Board title' -> 'New Board title'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

'Board title' -> 'Boards' in Boardlist

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

[tx-robot] updated from transifex

renamed column header 'Boards' -> 'Title'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

Merge branch 'master' into missing_translation

* fixed h2 tag

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* fixed space

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-06 09:37:38 +02:00
Nextcloud bot 6f9fe17004 [tx-robot] updated from transifex 2017-06-04 00:12:03 +00:00
Nextcloud bot 2efb78bfa3 [tx-robot] updated from transifex 2017-06-03 00:12:19 +00:00
Artem AnufrijandGitHub 64960956f9 Merge pull request #173 from nextcloud/click-title-to-edit
Click title to edit
2017-06-01 20:37:01 +02:00
Artem Anufrij cfd936b5c5 save on return/enter
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-06-01 20:06:27 +02:00
Marin Treselj 2cb151ba02 Temporary fix for card delete button position
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-31 22:44:44 +02:00
Marin Treselj 2f73f0492b Create new class for inline-editable text
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-31 15:43:30 +02:00
Marin Treselj e06a2ad743 fix tabs
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-31 08:17:18 +02:00
Marin Treselj 73eff3d64e Allows editing stack title by clicking it.
Deprecates edit icon in the stack header.

Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-31 08:13:53 +02:00
Nextcloud bot d14f4f20b6 [tx-robot] updated from transifex 2017-05-31 00:12:43 +00:00
Nextcloud bot c6159e5914 [tx-robot] updated from transifex 2017-05-30 00:12:44 +00:00
Nextcloud bot d8a287e9dc [tx-robot] updated from transifex 2017-05-29 00:12:39 +00:00
Artem AnufrijandGitHub 1d09de1d34 Merge pull request #168 from nextcloud/167-context-menus
Fix #167 - hide opened menus
2017-05-28 16:37:45 +02:00
Marin Treselj e633dd4d0f Fix #167 - hide opened menus
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-28 16:17:31 +02:00
Artem AnufrijandGitHub 7ce7543817 Merge pull request #166 from nextcloud/160-fix-regressions
Fixes few regressions caused by my last PR.
2017-05-28 15:23:53 +02:00
Marin Treselj 033897f877 Revert Artem's commits
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-28 15:12:59 +02:00
Marin Treselj ef31fec924 Merge branch '160-fix-regressions' of github.com:nextcloud/deck into 160-fix-regressions
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-28 15:09:04 +02:00
Marin Treselj 1780b4b21c Fixes few regressions caused by my last PR.
It tranaformed our css to the "mobile-first" paradigm so @media
query now targets large screens.
This commit also fixes share icon in the left sidebar.

Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-28 15:07:45 +02:00
Marin Treselj beef990a9f Fixes few regressions caused by my last PR.
It tranaformed our css to the "mobile-first" paradigm so @media
query now targets large screens.
This commit also fixes share icon in the left sidebar.

Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-28 14:41:29 +02:00
Julius HärtlandGitHub 18262c6159 Merge pull request #165 from nextcloud/fix_css_for_mobile
fix css for mobile devices
2017-05-28 14:41:25 +02:00
Artem Anufrij ff77fb68f5 moved css code
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-28 14:29:24 +02:00
Artem Anufrij c3b9579f1d fix css for mobile devices
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-28 14:21:21 +02:00
Julius HärtlandGitHub a86eaec7c6 Merge pull request #161 from nextcloud/160-css-cleanup
This is part one of the style cleanup mentioned in #160.
2017-05-28 13:56:45 +02:00
Marin TreseljandJulius Härtl f4a5a0c36c Fix alignment of buttons
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-28 13:36:52 +02:00
Marin TreseljandJulius Härtl 1defc48179 This is part one of the style cleanup mentioned in #160.
Functionality has not been affected (I hope). There will be few more related PRs but I want to keep each one simple so it's easy to review.

Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-28 13:36:08 +02:00
Julius HärtlandGitHub 98c87f4551 Merge pull request #159 from nextcloud/mobile_improvements
improve mobile behavior
2017-05-28 10:58:58 +02:00
Julius HärtlandGitHub 457b897135 Merge pull request #162 from nextcloud/build-cleanup
Cleanup makefiles
2017-05-28 10:56:49 +02:00
Nextcloud bot 314763acca [tx-robot] updated from transifex 2017-05-28 00:12:17 +00:00
Nextcloud bot 8c7190f84d [tx-robot] updated from transifex 2017-05-27 00:12:38 +00:00
Julius HärtlandGitHub 8105a4b211 Merge pull request #163 from nextcloud/rakekniven-patch-1
Update part.card.php
2017-05-26 22:54:02 +02:00
rakeknivenandGitHub 7c80b58dd7 Update part.card.php 2017-05-26 22:31:35 +02:00
Nextcloud bot 2adf972440 [tx-robot] updated from transifex 2017-05-26 00:12:11 +00:00
Julius Härtl aacf7716ce Cleanup makefiles
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-25 15:18:03 +02:00
Nextcloud bot a23b7e8f1a [tx-robot] updated from transifex 2017-05-25 00:11:53 +00:00
Artem Anufrij 2eb6118485 show stack action buttons on mobile device
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-24 22:49:19 +02:00
Artem Anufrij 855479fe68 added longTouch: true
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-24 22:24:27 +02:00
Artem Anufrij 2596ecae5b improve mobile behavior
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-24 21:23:34 +02:00
Julius HärtlandGitHub d60f79da65 Merge pull request #158 from nextcloud/fix_popover_menu_orientation
fix popover menu orientation
2017-05-24 20:26:40 +02:00
Artem Anufrij 58c6cf19a6 fix popover menu orientation
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-24 20:14:01 +02:00
Julius HärtlandGitHub a070fa3bac Merge pull request #146 from nextcloud/header-bar-improvements
header bar and mobile device improvements
2017-05-24 19:10:32 +02:00
Artem AnufrijandGitHub 286a56e6f4 Merge pull request #155 from nextcloud/keep-stack-order
Fix order of stacks
2017-05-24 18:03:47 +02:00
Julius Härtl 0b7b89b602 Fix button clickable area
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-24 16:32:41 +02:00
Julius Härtl 04108835a6 Fix order of stacks
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-24 16:12:37 +02:00
Marin Treselj 1143f0807c Fix popover closing on input focus
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-24 11:59:20 +02:00
Nextcloud bot f2dcede923 [tx-robot] updated from transifex 2017-05-24 00:12:29 +00:00
Julius HärtlandGitHub 5dd346fbe8 Merge pull request #151 from nextcloud/sort-stacks
Add stack sorting functionality
2017-05-23 23:07:04 +02:00
Julius Härtl b6d94ec9ff Add stack sorting functionality
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-23 22:54:44 +02:00
Artem Anufrij ec6c8d94c1 removed class from button
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-23 22:16:23 +02:00
Artem Anufrij ca3b89569f fixed icons if using subfolders for nc instance
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-23 22:05:13 +02:00
Julius HärtlandGitHub 69d16d7f39 Merge pull request #152 from nextcloud/travis-fix
Travis update since test seem to fail randomly
2017-05-23 20:56:09 +02:00
Marin Treselj 2fd06acca8 Home icon without div wrapper
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-23 20:39:54 +02:00
Julius Härtl b5afb42989 Travis extending
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-23 20:21:14 +02:00
Julius Härtl 4802f34c04 Fix home icon
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-23 20:08:22 +02:00
Julius HärtlandGitHub f553e88e29 Merge pull request #150 from nextcloud/untranslate-app-title
Application name should not be a transatable string.
2017-05-23 13:47:30 +02:00
Marin Treselj ebee72e9b3 Application name should not be a transatable string.
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-23 11:27:57 +02:00
Nextcloud bot 23a8863a35 [tx-robot] updated from transifex 2017-05-23 00:12:21 +00:00
Artem AnufrijandJulius Härtl 4ec59d24b4 small css improvement
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-22 21:05:42 +02:00
Artem AnufrijandJulius Härtl 543127c1e6 'add new stack' margin
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-22 21:05:42 +02:00
Artem AnufrijandJulius Härtl 1e4e0a3947 added home button
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-22 21:05:42 +02:00
Artem AnufrijandJulius Härtl 0b133c59d9 clear css
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-22 21:05:42 +02:00
Artem AnufrijandJulius Härtl d2b44c2ad0 added .icon-more button
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-22 21:05:41 +02:00
Artem AnufrijandJulius Härtl 0b12271ee3 fixed pixelipo comments 2017-05-22 21:05:41 +02:00
Artem AnufrijandJulius Härtl c6ebfdc11f header bar and mobile device improvements
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-22 21:05:41 +02:00
Julius HärtlandGitHub fbc12ae8f7 Merge pull request #148 from nextcloud/allow-nextcloud-13
Bump max-version to 13
2017-05-22 21:05:37 +02:00
Julius Härtl 77b5c7daa7 Bump max-version to 13
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-22 20:55:48 +02:00
Nextcloud bot 40482f6f03 [tx-robot] updated from transifex 2017-05-22 00:11:59 +00:00
Julius HärtlandGitHub ada458bacf Merge pull request #144 from nextcloud/card-title-fix
Fix extra-long words in card title overflowing.
2017-05-21 13:23:17 +02:00
Julius HärtlandGitHub 5a0b15a490 Merge pull request #143 from nextcloud/db-index-ci
Rename database indexes
2017-05-21 13:22:59 +02:00
Nextcloud bot 01794141a8 [tx-robot] updated from transifex 2017-05-21 00:12:06 +00:00
Artem AnufrijandGitHub 8cb30a0094 Merge branch 'master' into db-index-ci 2017-05-20 23:13:43 +02:00
Marin Treselj dabf46e886 Fix extra-long words in card title overflowing.
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-20 22:37:33 +02:00
Julius Härtl e2923abf90 Rename database indexes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-20 10:59:38 +02:00
Julius HärtlandGitHub 7ba9f769f6 Merge pull request #142 from nextcloud/comradekingu-patch-1
Spelling: Ellipsis… and consistency
2017-05-20 10:55:59 +02:00
comradekinguandGitHub 79408568b4 Spelling: Ellipsis… and consistency 2017-05-20 02:40:27 +02:00
Nextcloud bot 54f698c20d [tx-robot] updated from transifex 2017-05-20 00:11:44 +00:00
Julius HärtlandGitHub c696d9f287 Merge pull request #139 from nextcloud/card_redesing
added a card control bar
2017-05-19 23:00:07 +02:00
Artem AnufrijandJulius Härtl e9f71d1f40 rename stack (#137)
* rename stack Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* fixed 'lost focus without title change'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* fixed long words

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

* fixed 'lost focus without title change'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

fixed long words

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

code style

css

* fixed 'lost focus without title change'

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

fixed long words

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>

code style

css
Merge remote-tracking branch 'origin/stack_rename' into stack_rename
Merge branch 'master' into stack_rename
2017-05-19 22:54:51 +02:00
Artem Anufrij 92349f66a3 added a card control bar
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-19 12:02:54 +02:00
Nextcloud bot 1d797b1bf2 [tx-robot] updated from transifex 2017-05-19 00:11:52 +00:00
Nextcloud bot 63714d5133 [tx-robot] updated from transifex 2017-05-18 00:10:56 +00:00
Nextcloud bot 2fbed6342a [tx-robot] updated from transifex 2017-05-17 00:11:13 +00:00
Artem AnufrijandGitHub e7fd9d8b3a Merge pull request #132 from nextcloud/formating-help
Link to help for markdown usage
2017-05-16 20:02:22 +02:00
Julius Härtl 2d16f66ef7 Link to help for markdown usage
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-16 11:57:03 +02:00
Nextcloud bot d5c80c37cc [tx-robot] updated from transifex 2017-05-16 00:11:09 +00:00
Julius HärtlandGitHub 3471e7ac00 Merge pull request #130 from nextcloud/116-header-redesign
Header redesign - fixes #116
2017-05-15 11:06:10 +02:00
Nextcloud bot 1f4e0bdee1 [tx-robot] updated from transifex 2017-05-14 00:11:07 +00:00
Nextcloud bot 90c22e8f4a [tx-robot] updated from transifex 2017-05-13 00:11:21 +00:00
Nextcloud bot ccf19e3129 [tx-robot] updated from transifex 2017-05-12 00:10:45 +00:00
Marin Treselj be75d28170 Header redesign - fixes #116
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-05-10 14:44:05 +02:00
Nextcloud bot 9c6b2b160e [tx-robot] updated from transifex 2017-05-09 00:10:48 +00:00
Julius HärtlandGitHub 23d8c1aa30 Merge pull request #121 from nextcloud/icon-size-position
small css changes
2017-05-08 11:02:40 +02:00
Artem AnufrijandJulius Härtl 96ab5e70fa small css changes
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-08 10:30:47 +02:00
Nextcloud bot 7e5c7a9cb8 [tx-robot] updated from transifex 2017-05-07 00:10:22 +00:00
Nextcloud bot e700d9d781 [tx-robot] updated from transifex 2017-05-05 00:10:17 +00:00
Julius Härtl 452f9a3312 Update CHANGELOG.md for 0.1.4
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-04 22:02:56 +02:00
Julius Härtl 95b0f49739 Bump version to 0.1.4
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-04 14:15:43 +02:00
Julius HärtlandGitHub b330f03a32 Merge pull request #118 from nextcloud/fix-acl-nonexisting
Do not fail on nonexisting acl users/groups
2017-05-04 14:12:28 +02:00
Julius Härtl 12ebffb885 Do not use getDisplayName for groups
it is not supported in Nextcloud 11

https://github.com/nextcloud/server/pull/4690
https://github.com/nextcloud/server/pull/2833
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-04 12:10:17 +02:00
Julius Härtl 860cbab1d3 Add proper error handling when user/group cannot be found
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-04 11:26:45 +02:00
Julius HärtlandGitHub c08455e11b Merge pull request #113 from nextcloud/delete-fix-and-undo
Fix deleting boards and add a simple undo function
2017-05-04 08:37:05 +02:00
Julius Härtl a6b6842e2b No not fail on nonexisting acl users/groups
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-03 13:25:58 +02:00
Julius Härtl 588252d949 Fix deleting boards and add a simple undo function
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-03 13:22:30 +02:00
Julius HärtlandGitHub 3b0390f50f Merge pull request #114 from nextcloud/firefox-red-input
Remove firefox invalid box shadow
2017-05-03 09:35:44 +02:00
Julius Härtl c8389fbcb0 Remove firefox invalid box shadow
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-02 09:05:11 +02:00
Julius HärtlandGitHub 94788bed39 Add IRC channel to README 2017-05-01 14:16:10 +02:00
270 changed files with 26748 additions and 3318 deletions
+77 -38
View File
@@ -1,9 +1,11 @@
pipeline:
clone:
clone:
git:
image: plugins/git
depth: 1
pipeline:
check-app-compatbility:
image: nextcloudci/php5.6:php5.6-3
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
@@ -21,57 +23,72 @@ pipeline:
matrix:
TESTS: check-app-compatbility
signed-off-check:
image: nextcloudci/php7.0:php7.0-2
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- DB=sqlite
commands:
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server
- php ./build/signed-off-checker.php
- wget https://raw.githubusercontent.com/nextcloud/server/master/build/signed-off-checker.php
- php ./signed-off-checker.php
secrets: [ github_token ]
when:
matrix:
TESTS: signed-off-check
syntax-php5.6:
image: nextcloudci/php5.6:php5.6-3
image: nextcloudci/php5.6:php5.6-8
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- 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
- composer install
- ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
when:
matrix:
TESTS: syntax-php5.6
syntax-php7.0:
image: nextcloudci/php7.0:php7.0-2
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- 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
- composer install
- ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
when:
matrix:
TESTS: syntax-php7.0
php5.6:
image: nextcloudci/php5.6:php5.6-3
syntax-php7.1:
image: nextcloudci/php7.1:php7.1-15
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- DB=sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
when:
matrix:
TESTS: syntax-php7.1
syntax-php7.2:
image: nextcloudci/php7.2:php7.2-9
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- DB=sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
when:
matrix:
TESTS: syntax-php7.2
php5.6:
image: nextcloudci/php5.6:php5.6-8
environment:
- APP_NAME=deck
- CORE_BRANCH=stable13
- DB=sqlite
commands:
- apt update && apt-get -y install php5-xdebug
@@ -81,19 +98,13 @@ pipeline:
- cd ../server/
- ./occ app:enable $APP_NAME
- cd apps/$APP_NAME
- 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
# 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:
matrix:
TESTS: php5.6
php7.0:
image: nextcloudci/php7.0:php7.0-7
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
@@ -112,14 +123,13 @@ pipeline:
matrix:
TESTS: php7.0
php7.1:
image: nextcloudci/php7.1:php7.1-11
image: nextcloudci/php7.1:php7.1-15
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- DB=sqlite
commands:
# Pre-setup steps
- yum -y install wget
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server/
@@ -130,8 +140,26 @@ pipeline:
when:
matrix:
TESTS: php7.1
php7.2:
image: nextcloudci/php7.2:php7.2-9
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- 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
- 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.2
integration:
image: nextcloudci/integration-php7.0:integration-php7.0-3
image: nextcloudci/integration-php7.0:integration-php7.0-6
environment:
- APP_NAME=deck
- CORE_BRANCH=master
@@ -148,13 +176,18 @@ pipeline:
when:
matrix:
TESTS: integration
eslint:
image: nextcloudci/eslint:eslint-1
commands:
- ./run-eslint.sh
when:
matrix:
TESTS: eslint
jsbuild:
image: mhart/alpine-node:6.8.0
commands:
- apk add --no-cache git
- cd js
- npm install --deps
- ./node_modules/.bin/bower --allow-root install
- apk add --no-cache make
- make build-js
when:
matrix:
TESTS: jsbuild
@@ -164,10 +197,16 @@ matrix:
- TESTS: signed-off-check
- TESTS: syntax-php5.6
- TESTS: syntax-php7.0
- TESTS: syntax-php7.1
- TESTS: syntax-php7.2
- TESTS: php5.6
- TESTS: php7.0
- TESTS: php7.1
- TESTS: php7.2
- TESTS: eslint
- TESTS: jsbuild
- TESTS: integration
#- TESTS: integration
branches: [ master, stable* ]
+9
View File
@@ -0,0 +1,9 @@
/js/tests/*
/js/vendor/*
/js/legacy/*
/js/node_modules/*
/js/public/*
/karma.conf.js
/tests/*
/l10n/*
+42
View File
@@ -0,0 +1,42 @@
root: true
extends:
- eslint:recommended
env:
browser: true
amd: true
globals:
global: false
app: false
angular: false
$: false
escapeHTML: false
OC: false
OCA: false
t: false
oc_current_user: false
oc_requesttoken: false
Clipboard: false
oc_defaults: false
parserOptions:
ecmaVersion: 6
sourceType: "module"
rules:
curly: error
eqeqeq: ["error", "smart"]
guard-for-in: error
no-console: off
no-fallthrough: error
no-mixed-spaces-and-tabs: error
no-unused-vars: warn
no-useless-escape: warn
no-use-before-define: error
semi: ["error", "always"]
indent:
- error
- tab
- SwitchCase: 1
@@ -1,79 +1,97 @@
### Steps to reproduce
1.
2.
3.
### Expected behaviour
Tell us what should happen
### Actual behaviour
Tell us what happens instead
### Server configuration
<!--
You can use the Issue Template application to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
-->
**Operating system**:
**Web server:**
**Database:**
**PHP version:**
**Nextcloud version:** (see Nextcloud admin page)
**Where did you install Nextcloud from:**
**Signing status:**
```
Login as admin user into your Nextcloud and access
http://example.com/index.php/settings/integrity/failed
paste the results here.
```
**List of activated apps:**
```
If you have access to your command line run e.g.:
sudo -u www-data php occ app:list
from within your Nextcloud installation folder
```
**Nextcloud configuration:**
```
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
or
Insert your config.php content here
Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …)
```
**Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/...
### Client configuration
**Browser:**
**Operating system:**
### Logs
#### 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) ...
```
---
name: Bug report
about: Create a report to help us improve
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Client details:**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
- Device: [e.g. iPhone6, desktop]
<details>
<summary>Server details</summary>
<!--
You can use the Issue Template application to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
-->
**Operating system**:
**Web server:**
**Database:**
**PHP version:**
**Nextcloud version:** (see Nextcloud admin page)
**Where did you install Nextcloud from:**
**Signing status:**
```
Login as admin user into your Nextcloud and access
http://example.com/index.php/settings/integrity/failed
paste the results here.
```
**List of activated apps:**
```
If you have access to your command line run e.g.:
sudo -u www-data php occ app:list
from within your Nextcloud installation folder
```
**Nextcloud configuration:**
```
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
or
Insert your config.php content here
Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …)
```
**Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/...
</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>
+17
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.
+6 -1
View File
@@ -1,6 +1,11 @@
js/node_modules/*
js/vendor/
build/
js/public/
js/build/
build/
css/style.css
css/vendor.css
tests/integration/vendor/
tests/integration/composer.lock
vendor/
*.lock
+8 -7
View File
@@ -2,25 +2,23 @@ language: php
services:
- mysql
php:
- 5.6
- 7
- 7.0
- 7.1
- 7.2
env:
matrix:
- CORE_BRANCH=master DB=mysql
- CORE_BRANCH=stable11 DB=mysql
- CORE_BRANCH=master DB=mysql
before_install:
- wget https://phar.phpunit.de/phpunit-5.7.phar
- chmod +x phpunit-5.7.phar
- mkdir bin
- sudo mv phpunit-5.7.phar bin/phpunit
- mv phpunit-5.7.phar bin/phpunit
- export PATH="$PWD/bin:$PATH"
- phpunit --version
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh deck $CORE_BRANCH $DB
- cd ../server
- ./occ app:enable deck
- php -S localhost:8080 &
before_script:
- cd apps/deck
@@ -28,6 +26,9 @@ before_script:
script:
- make test-unit
after_success:
- bash <(curl -s https://codecov.io/bash)
after_failure:
- cat ../../data/nextcloud.log
+2 -2
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
[nextcloud.deck]
file_filter = <lang>/deck.po
source_file = templates/deck.pot
file_filter = translationfiles/<lang>/deck.po
source_file = translationfiles/templates/deck.pot
source_lang = en
type = PO
+123 -2
View File
@@ -1,11 +1,129 @@
## 0.1.3 - 2017-05-01
# Changelog
All notable changes to this project will be documented in this file.
## 0.4.0 - unreleased
### 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
### Fixed
- Improve frontend data management
- Fix bug the user list being empty on some occasions
## 0.3.0 - 2018-01-12
### Added
- Allow to assign users to cards
- Emit notifications for overdue cards
- Emit notifications if boards gets shared to a user
- Add support for Nextcloud 13
- Simplify layout for cleaner user experience
- Add contacts menu to avatars
- Automatically save card description on inactivity
### Fixed
- Fix card dragging behaviour
- Fix scrolling and dragging on mobile
- Various fixes when data is not syncronized between different views
- Improved performance
- Update document title when renaming a board
- Automatically chose the least used color
- Improve accessibility
- Fix issue when assigning labels after creating them
- Allow to save tag changes with enter
- Fix bug when removing labels changed the color of the remaining ones
- Fix issues with auto saving of card descriptions
## 0.2.8 - 2017-11-26
### Fixed
- Drop support for NC 13, since that will only be supported by the next version of Deck
## 0.2.7 - 2017-11-10
### Fixed
- Fix bug that caused update to fail
## 0.2.6 - 2017-11-10
### Fixed
- Fix duedates not being updated with MySQL databases
## 0.2.5 - 2017-11-08
### Fixed
- Fix duedates not being saved with MySQL databases
## 0.2.4 - 2017-10-08
### Fixed
- Fix card action menu not being accessible
## 0.2.3 - 2017-09-23
### Fixed
- Fix delete stack button being not available
- Fix acl issues with PostgreSQL
## 0.2.2 - 2017-09-07
### Fixed
- Various frontend fixes
- Fix sidebar drag issues
- Improvements for IE11
- Fix bug when draging a card to an empty stack
## 0.2.1 - 2017-07-04
### Added
- Editing board details in board list
- Due date on mouse over
### Changed
- Polished label editor
- Polished sidebar
- UI improvements in board view
- Moved to SCSS
### Fixed
- Fix opacity of last entry in board list
## 0.2.0 - 2017-06-20
### Added
- Due dates for cards
- Archive boards
- Filter board list for archived/shared boards
- Rearange stack order
- Improved card overview with description indicator
- Navigation sidebar visibility can be toggled
### Fixed
- Undo on delete for boards
- Various fixes for mobile devices
- UI improvements to fit the Nextcloud design
## 0.1.4 - 2017-05-04
### Fixed
- Avoid red shadow on input in firefox
- Fix broken delete function for boards
- Fix broken board loading when groups were used for sharing
- Fix bug when users/groups got deleted
## 0.1.3 - 2017-05-01
### Added
- Icon to show if a card has a description
### Changed
- Use OCS API to get users/groups for sharing
- Various UI improvements
- Show display name instead of uid
@@ -15,6 +133,7 @@
## 0.1.2
### Added
- Add translations
@@ -29,6 +148,7 @@
- Fixed SQL statements without prefixes
## 0.1.1
### Fixed
- Various styling improvements
- Fix problems with MySQL and PostgreSQL
@@ -36,6 +156,7 @@
- Fix error when changing board permissions
## 0.1.0
### Added
- Sharing boards with other users
- Create and manage boards
+11 -6
View File
@@ -19,19 +19,20 @@ clean-build:
clean-dist:
rm -rf js/node_modules
rm -rf js/vendor
install-deps:
cd js && npm install --deps
cd js && ./node_modules/.bin/bower install
cd js && npm install
build: build-js
build-js:
$(MAKE) -C js build
build-js: install-deps
cd js && npm run build
build-js-dev: install-deps
cd js && npm run dev
watch:
$(make) -C js watch
cd js && npm run watch
# appstore: clean install-deps
appstore: clean-build build
@@ -48,6 +49,7 @@ appstore: clean-build build
--exclude="../$(app_name)/js/tests" \
--exclude="../$(app_name)/js/test" \
--exclude="../$(app_name)/js/*.log" \
--exclude="../$(app_name)/js/package-lock.json" \
--exclude="../$(app_name)/js/package.json" \
--exclude="../$(app_name)/js/bower.json" \
--exclude="../$(app_name)/js/karma.*" \
@@ -57,7 +59,10 @@ appstore: clean-build build
--exclude="../$(app_name)/karma.*" \
--exclude="../$(app_name)/protractor\.*" \
--exclude="../$(app_name)/.*" \
--exclude="../$(app_name)/*.lock" \
--exclude="../$(app_name)/run-eslint.sh" \
--exclude="../$(app_name)/js/.*" \
--exclude="../$(app_name)/vendor" \
--exclude-vcs \
../$(app_name)
+5 -15
View File
@@ -1,6 +1,7 @@
# 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)
[![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) [![Dependency Status](https://www.versioneye.com/user/projects/5af6c4090fb24f0e3a423c40/badge.svg)](https://www.versioneye.com/user/projects/5af6c4090fb24f0e3a423c40) [![#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.
@@ -11,21 +12,11 @@ Deck is a kanban style organization tool aimed at personal planning and project
- :rocket: Get your project organized
![Deck - Manage cards on your board](https://bitgrid.net/~jus/deck_1.png)
:boom: This is still alpha software: it may not be stable enough for production
### 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 ...
![Deck - Manage cards on your board](https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.png)
## Installation/Update
This app is supposed to work on Nextcloud version 11 or later.
This app is supposed to work on Nextcloud version 12 or later.
### Install latest release
@@ -56,8 +47,7 @@ Nothing to prepare, just dig into the code.
### 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.
Make sure you have installed the dependencies with ```make install-deps```.
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.
### Running tests
You can use the provided Makefile to run all tests by using:
+1
View File
@@ -23,3 +23,4 @@
$app = new \OCA\Deck\AppInfo\Application();
$app->registerNavigationEntry();
$app->registerNotifications();
+77 -14
View File
@@ -38,6 +38,14 @@
<type>boolean</type>
<default>false</default>
</field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
</declaration>
</table>
<table>
@@ -122,7 +130,6 @@
<name>last_modified</name>
<type>integer</type>
<default></default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
@@ -130,7 +137,6 @@
<name>created_at</name>
<type>integer</type>
<default></default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
@@ -151,6 +157,16 @@
<type>boolean</type>
<default>false</default>
</field>
<field>
<name>duedate</name>
<type>timestamp</type>
<default>0</default>
</field>
<field>
<name>notified</name>
<type>boolean</type>
<default>false</default>
</field>
<index>
<name>deck_cards_stack_id_index</name>
<field>
@@ -182,12 +198,6 @@
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>title</name>
<type>text</type>
<notnull>true</notnull>
<length>100</length>
</field>
<field>
<name>card_id</name>
<type>integer</type>
@@ -202,12 +212,12 @@
</field>
<field>
<name>data</name>
<type>clob</type>
<type>text</type>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
<default/>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
@@ -215,7 +225,21 @@
<field>
<name>created_at</name>
<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>
<notnull>false</notnull>
<unsigned>true</unsigned>
@@ -287,13 +311,51 @@
<length>4</length>
</field>
<index>
<name>deck_assigned_labels_label_id_index</name>
<name>deck_assigned_labels_idx_i</name>
<field>
<name>label_id</name>
</field>
</index>
<index>
<name>deck_assigned_labels_card_id_index</name>
<name>deck_assigned_labels_idx_c</name>
<field>
<name>card_id</name>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*deck_assigned_users</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>participant</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>card_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<length>4</length>
</field>
<index>
<name>deck_assigned_users_idx_p</name>
<field>
<name>participant</name>
</field>
</index>
<index>
<name>deck_assigned_users_idx_c</name>
<field>
<name>card_id</name>
</field>
@@ -345,6 +407,7 @@
<default>false</default>
</field>
<index>
<name>deck_board_acl_uq_i</name>
<unique>true</unique>
<field>
<name>board_id</name>
@@ -360,7 +423,7 @@
</field>
</index>
<index>
<name>deck_board_acl_board_id_index</name>
<name>deck_board_acl_idx_i</name>
<field>
<name>board_id</name>
</field>
+14 -7
View File
@@ -13,21 +13,28 @@
- 👥 Share with your team, friends or family
- 🚀 Get your project organized
💥 This is still alpha software: it may not be stable enough for production!
</description>
<version>0.1.3</version>
<version>0.4.0-beta1</version>
<licence>agpl</licence>
<author>Julius Härtl</author>
<namespace>Deck</namespace>
<category>organization</category>
<category>office</category>
<website>https://github.com/nextcloud/deck</website>
<bugs>https://github.com/nextcloud/deck/issues</bugs>
<repository type="git">https://github.com/nextcloud/deck.git</repository>
<screenshot>https://bitgrid.net/~jus/deck_1.png</screenshot>
<screenshot>https://bitgrid.net/~jus/deck_2.png</screenshot>
<screenshot>https://bitgrid.net/~jus/deck_3.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Details.png</screenshot>
<dependencies>
<nextcloud min-version="11" max-version="12" />
<nextcloud min-version="12" max-version="14" />
</dependencies>
<background-jobs>
<job>OCA\Deck\Cron\DeleteCron</job>
<job>OCA\Deck\Cron\ScheduledNotifications</job>
</background-jobs>
<repair-steps>
<post-migration>
<step>OCA\Deck\Migration\UnknownUsers</step>
</post-migration>
</repair-steps>
</info>
+14
View File
@@ -31,6 +31,7 @@ return [
['name' => 'board#read', 'url' => '/boards/{boardId}', 'verb' => 'GET'],
['name' => 'board#update', 'url' => '/boards/{boardId}', 'verb' => 'PUT'],
['name' => 'board#delete', 'url' => '/boards/{boardId}', 'verb' => 'DELETE'],
['name' => 'board#deleteUndo', 'url' => '/boards/{boardId}/deleteUndo', 'verb' => 'POST'],
['name' => 'board#getUserPermissions', 'url' => '/boards/{boardId}/permissions', 'verb' => 'GET'],
['name' => 'board#addAcl', 'url' => '/boards/{boardId}/acl', 'verb' => 'POST'],
['name' => 'board#updateAcl', 'url' => '/boards/{boardId}/acl', 'verb' => 'PUT'],
@@ -40,6 +41,7 @@ return [
['name' => 'stack#index', 'url' => '/stacks/{boardId}', 'verb' => 'GET'],
['name' => 'stack#create', 'url' => '/stacks', 'verb' => 'POST'],
['name' => 'stack#update', 'url' => '/stacks/{stackId}', 'verb' => 'PUT'],
['name' => 'stack#reorder', 'url' => '/stacks/{stackId}/reorder', 'verb' => 'PUT'],
['name' => 'stack#delete', 'url' => '/stacks/{stackId}', 'verb' => 'DELETE'],
['name' => 'stack#archived', 'url' => '/stacks/{boardId}/archived', 'verb' => 'GET'],
@@ -54,6 +56,18 @@ return [
['name' => 'card#unarchive', 'url' => '/cards/{cardId}/unarchive', 'verb' => 'PUT'],
['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'],
['name' => 'card#removeLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'DELETE'],
['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'],
['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
['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'],
+16
View File
@@ -0,0 +1,16 @@
{
"name": "nextcloud/deck",
"type": "project",
"license": "AGPLv3",
"authors": [
{
"name": "Julius Härtl",
"email": "jus@bitgrid.net"
}
],
"require": {},
"require-dev": {
"christophwurst/nextcloud": "^13.0",
"jakub-onderka/php-parallel-lint": "^1.0.0"
}
}
+113
View File
@@ -0,0 +1,113 @@
/*
* @copyright Copyright (c) 2017 Julius Härtl <jus@bitgrid.net>
* @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
*
* @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/>.
*
*/
/**
* Hotfix for support <NC13 with new app sidebar
*/
#app-navigation {
.app-navigation-entry-menu.open {
ul li a {
background-position: 10px center;
padding: 0 10px 0 36px !important;
}
}
.app-navigation-entry-edit {
display: none;
}
.editing {
.app-navigation-entry-edit {
display: block;
position: absolute;
background: $color-main-background;
height: auto;
z-index: 250;
}
}
}
/**
* copied styles from core/css/styles.scss
* to have the same breadcrumb styling in NC12
*/
.breadcrumb {
display: inline-flex;
}
div.crumb {
display: inline-flex;
background-repeat: no-repeat;
background-position: right center;
height: 44px;
background-size: auto 24px;
flex: 0 0 auto;
order: 1;
padding-right: 7px;
&.crumbmenu {
order: 2;
position: relative;
a {
opacity: 0.5
}
}
&.hidden {
display: none;
~ .crumb {
order: 3;
}
}
> a,
> span {
position: relative;
padding: 12px;
opacity: 0.5;
top: 0 !important;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
flex: 0 0 auto;
&.icon-home {
// Hide home text
text-indent: -9999px;
}
}
> a[class^='icon-'] {
padding: 0;
width: 44px;
}
&:not(:first-child) a {
}
&:last-child {
font-weight: 600;
margin-right: 10px;
// Allow multiple span next to the main 'a'
a ~ span {
padding-left: 0;
}
}
&:hover, &:focus, a:focus, &:active {
> a,
> span {
opacity: .7;
}
}
}
+42
View File
@@ -0,0 +1,42 @@
/**
* Custom icons
*/
.icon-deck {
background-image: url('../img/deck-dark.svg');
}
.icon-group {
background-image: url('../../../settings/img/users.svg');
}
.icon-help {
background-image: url('../../../settings/img/help.svg');
}
.icon-add-white {
background-image: url('../img/add-white.svg');
}
.icon-archive {
background-image: url('../img/archive.svg');
}
.icon-archive-white {
background-image: url('../img/archive-white.svg');
}
.icon-details {
background-image: url('../img/details.svg');
}
.icon-details-white {
background-image: url('../img/details-white.svg');
}
.icon-home {
background-image: url('../../../core/img/places/home.svg');
}
.icon-badge {
background-image: url('../../../core/img/places/calendar-dark.svg');
}
-915
View File
@@ -1,915 +0,0 @@
/*
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Artem Anufrij <artem.anufrij@live.de>
*
* @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/>.
*
*/
/**
* General styles
*/
.app-deck .icon {
display: inline-block;
}
input.input-inline {
font-size: inherit !important;
font-weight: inherit;
background-color: transparent;
padding: 0;
border: none;
width: 100%;
border-bottom: 1px solid #333333;
-webkit-border-radius: 0;
line-height: 100%;
margin: -4px 0;
}
button {
border: 0;
background-color: transparent;
}
button:hover {
border: 0;
background-color: transparent;
}
#searchbox {
display: block !important;
}
/**
* Navigation sidebar
*/
.app-navigation-entry-utils-menu-button {
display: block !important;
}
.app-navigation-entry-utils-menu-share {
display: block !important;
text-align: right;
padding-top: 3px;
padding-right: 5px;
opacity: 0.4;
}
#app-navigation .app-navigation-entry-edit {
height: auto;
}
#app-navigation .board-bullet {
position: absolute;
margin-left: 17px;
margin-top: 16px;
width: 12px;
height: 12px;
border: none;
border-radius: 50%;
cursor: pointer;
}
/**
* Board view
*/
#board-status {
position: absolute;
z-index: 999;
width: 100%;
height: 100%;
background-color: #fff;
}
#board {
position: relative;
height: 100%;
white-space: nowrap;
overflow: auto;
top: -40px;
padding: 40px 0 0;
z-index: 100;
width: 100%;
}
#board #innerBoard {
padding: 10px;
}
#board-header {
width: inherit;
color: #333333;
position: relative;
z-index: 120;
height: 44px;
background-color: #eee;
}
#board-header h1 {
font-size: 14pt;
margin: 0;
padding: 12px;
float: left;
}
#board-actions {
font-size: 10pt;
float: right;
position: relative;
color: #888;
margin: 8px;
}
#board-actions .filter .filter-button {
margin-left: 10px;
margin-right: 10px;
}
#board-actions .filter:hover {
color: #333333;
cursor: pointer;
}
.filter-select {
position: absolute;
right: auto;
top: 42px;
left: -21%;
}
.filter-select li {
padding: 3px;
overflow: hidden;
width: auto;
}
.filter-select li span {
display: block;
float: left;
width: 20px;
height: 20px;
margin-right: 5px;
}
#board-actions div {
padding: 5px;
float: left;
}
.board-actions button {
border: none;
background-color: transparent;
}
.board-action-button {
font-size: 12pt;
font-weight: 100;
border: none;
margin-left: 10px;
}
#stack-add {
float: right;
margin: 8px;
background-color: #ffffff;
border: 1px solid #bbb;
border-radius: 4px;
}
#stack-add input {
padding: 4px 5px;
margin: 0px;
border: 0px none transparent;
display: table-cell;
vertical-align: middle;
min-height: initial;
}
#stack-add button {
display: table-cell;
vertical-align: middle;
}
.stack {
width: 320px;
margin-right: 10px;
vertical-align: top;
display: inline-block !important;
background-color: #f8f8f8;
}
.stack h2 {
padding: 10px 10px 8px;
margin: 0;
font-size: 12pt;
font-weight: 700;
overflow: hidden;
height: 40px;
}
.stack h2 input {
padding: 0;
width: 80%;
margin: 0;
font-size: 12pt;
font-weight: 700;
border: 0;
background-color: transparent;
float: left;
min-height: initial;
}
.stack h2 button,
.stack .stack-actions {
float: right;
}
.stack h2 span {
float: left;
}
.stack h2 .stack-actions {
display: none;
}
.stack h2:hover .stack-actions {
display: inline-block;
float: right;
}
.card {
background-color: #ffffff;
margin: 10px;
white-space: normal;
position: relative;
opacity: 1.0;
-webkit-box-shadow: 0 0 5px #bbb;
}
.card.archived .card-upper {
opacity: 0.5;
}
.card-upper {
overflow: hidden;
position: relative;
padding: 5px;
}
.card .card-options {
position: absolute;
bottom: 10px;
right: 10px;
display: none;
}
.card:hover .card-options {
display: block;
}
.card .popovermenu {
z-index: 999;
opacity: 1;
margin-left: 10px;
display: block;
}
.card .popovermenu.hidden {
display: none;
}
.card .card-assignees {
margin: 5px;
}
.card:hover {
background-color: #fcfcfc;
}
.card a {
display: block;
}
.card h3 {
font-weight: bold;
font-size: 10pt;
padding: 0;
margin: 5px;
display: inline-block;
float: left;
}
.card.has-labels h3 {
margin-top: 15px;
}
.card .labels {
position: absolute;
top: -5px;
left: 10px;
}
.card .labels li {
padding: 0;
width: 15px;
height: 20px;
-webkit-border-radius: 3px;
font-size: 80%;
border: none transparent;
float: left;
}
.card .labels li span {
display: none;
}
.card .labels li:hover {
}
.card .labels li:hover span {
position: absolute;
padding: 3px;
background-color: inherit;
}
.as-sortable-placeholder {
margin: 10px;
border: 1px dashed #aaa;
}
.info {
padding-left: 5px;
padding-right: 5px;
display: inline-block;
color: #aaa;
}
.info i {
margin-left: 2px;
}
.info span {
margin-right: 2px;
}
.card.create {
text-align: center;
padding: 10px;
margin: 10px;
border: none;
overflow: hidden;
-webkit-box-shadow: none;
}
.card.create:hover {
text-align: center;
opacity: 1;
}
.card.create h3 {
width: 100%;
padding: 0;
margin: 0 0 1px;
}
.card.create h3 input {
width: 100%;
border: 0;
font-weight: bold;
font-size: 10pt;
margin: 0;
padding: 0;
border-bottom: 1px solid #ffffff;
border-radius: 0;
color: #ffffff;
background-color: transparent !important;
min-height: initial;
}
.due {
background-color: #eee;
color: #aaa;
padding: 1px 3px;
border-radius: 4px;
margin-right: 2px;
}
/**
* Card view right sidebar
*/
#card-header {
}
#card-header h2 {
font-size: 14pt;
padding: 10px 10px 9px;
overflow: hidden;
margin-bottom: 0;
background-color: #f0f0f0;
}
.icon-close {
position: absolute;
top: 5px;
right: 5px;
}
#card-meta {
height: 100%;
display: flex;
flex-direction: column;
}
#card-dates {
font-size: 80%;
color: #aaaaaa;
margin-bottom: 3px;
}
#card-meta #labels {
margin-bottom: 10px;
}
#card-dates span {
}
#card-description {
height: 100%;
display: flex;
flex-direction: column;
}
#card-description > h3 {
border-bottom: 1px solid #333333;
font-weight: 600;
font-size: 10pt;
padding: 5px;
}
#card-description > div {
height: 100%;
}
#card-description textarea {
width: 100%;
height: 200px;
border: none;
margin: 0;
padding: 0;
}
#card-description .container {
background-color: white;
}
.save-indicator {
background-color: #009900;
color: #ffffff;
border-radius: 3px;
float: right;
padding: 1px 10px;
font-size: 8pt !important;
display: none;
}
#sidebar-header,
.card-block {
padding: 15px;
}
#card-attachments ul {
margin: 5px;
}
#card-attachments .details {
font-size: 8pt;
padding-left: 15px;
}
#attachment-add button {
background-color: #eeeeee;
font-size: 9pt;
}
#app-sidebar {
right: -500px;
max-width: 100%;
border-left: none;
width: 500px;
border-left: 1px solid #eeeeee;
display:flex;
flex-direction: column;
}
#app-sidebar.details-visible {
right: 0;
}
#app-content {
overflow: hidden;
}
#app-content.details-visible {
margin-right: 500px;
}
.labels {
display: block;
overflow: hidden;
}
.labels li {
padding: 1px;
-webkit-border-radius: 3px;
margin: 1px;
float: left;
color: #ffffff;
font-size: 80%;
font-weight: 900;
min-width: 20px;
display: inline-block;
text-align: center;
}
.avatardiv {
float: left;
background-color: #eee;
border-radius: 16px;
width: 32px;
height: 32px;
margin-right: 3px;
}
.avatardiv .icon-group {
margin: 7px;
opacity: 0.5;
display: block !important;
}
/**
* Color selection
*/
.colorselect {
overflow: hidden;
clear: both;
padding-top: 4px;
padding-left: 4px;
}
.colorselect .color {
opacity: 0.7;
width: 27px;
height: 27px;
float: left;
margin-right: 2px;
border: none;
}
.colorselect .selected {
opacity: 1.0;
border: 1px solid #333333;
}
.labels .colorselect {
padding: 0;
clear: none;
overflow: visible;
}
.labels .colorselect .color {
width: 26px;
height: 26px;
}
/**
* Board list main screen area
*/
#boardlist {
width: 100%;
height: 100%;
overflow: scroll;
}
#boardlist td .board-bullet {
width: 30px;
height: 30px;
border: none;
border-radius: 50%;
position: relative;
cursor: pointer;
display: block;
}
#boardlist td {
padding: 10px;
border-bottom: 1px solid #eee;
}
#boardlist span.icon {
width: 30px;
height: 30px;
display: inline-block;
}
.cell-board-bullet {
width: 60px;
}
.cell-board-title {
width: 50%;
}
#boardlist .colorselect,
#boardlist input {
float: left;
}
#boardlist .colorselect {
margin-top: 5px;
}
/**
* Board details
*/
#shareWithList {
list-style-type: none;
padding: 0 0 16px;
}
#shareWithList li {
padding-top: 5px;
padding-bottom: 5px;
font-weight: bold;
white-space: normal;
display: flex;
align-items: center;
}
#shareWithList .username {
padding-right: 8px;
padding-left: 8px;
white-space: nowrap;
text-overflow: ellipsis;
display: inline-block;
overflow: hidden;
vertical-align: middle;
}
.shareWithList .icon-delete {
display: inline-block;
background-size: 16px 16px;
width: 16px;
height: 16px;
padding: 0;
margin-top: 5px;
}
.shareOption {
margin-top: 4px;
}
#board-detail-labels {
padding: 10px;
}
#board-detail-labels ul li {
display: block;
font-size: 10pt;
float: none;
margin-bottom: 1px;
overflow: hidden;
}
#board-detail-labels ul li input {
float: left;
font-size: 10pt;
padding: 5px;
}
#board-detail-labels ul li .label-title {
float: left;
width: 88%;
font-size: 10pt;
padding: 5px;
border: none;
margin-right: 2px;
}
#board-detail-labels ul li a.icon {
float: right;
padding: 5px;
}
.label-create {
width: 88%;
}
.label-create .icon {
margin-bottom: -3px;
}
#board-detail-labels .color {
width: 28px;
height: 31px;
}
.tabHeaders {
clear: both;
overflow: hidden;
margin-bottom: 0;
}
#shareWithList .avatar {
float: left;
margin-top: -5px;
margin-right: 10px;
}
.ui-select-offscreen {
display: none;
}
.ui-select-match-close {
float: right;
z-index: 100;
position: relative;
display: inline-block !important;
margin-right: 7px;
}
.ui-select-match-item {
padding: 0;
float: left !important;
display: block;
}
.ui-select-match-item .select-label {
color: #fff;
padding: 6px 23px 6px 6px;
margin-right: -23px !important;
}
.select2-container-multi .select2-choices .select2-search-choice {
padding: 3px 0 !important;
border: 0 !important;
overflow: hidden;
}
.ui-select-container[disabled] .ui-select-match-item .select-label {
padding: 4px;
min-width: 26px !important;
height: 100%;
display: inline-block;
}
.ui-select-container[disabled] .ui-select-match-item {
margin-right: 0 !important;
}
.select2-search input {
width:100% !important;
}
/**
* Mobile optimizations
*/
@media (max-width: 480px) {
/* hide board actions on mobile */
#board-actions {
display: none !important;
}
}
@media only screen and (max-width: 768px) {
#board-header h1 {
margin-left: 50px;
}
}
/**
* Markdown rendering
*/
#markdown {
width: 100% !important;
}
#markdown p {
margin-bottom: 15px;
}
#markdown * {
white-space: normal;
word-wrap: break-word;
overflow-wrap: break-word;
}
#markdown a {
color: #666666;
text-decoration: underline;
}
#markdown ol, #markdown ul {
margin-left: 20px;
margin-bottom: 10px;
}
#markdown ul {
list-style-type: disc;
}
#markdown h1 {
font-size: 18px;
font-weight: 600;
margin-bottom: 5px;
}
#markdown h2 {
font-size: 16px;
font-weight: 600;
}
#markdown h3 {
font-size: 14px;
font-weight: 600;
}
#markdown h4 {
font-size: 13px;
font-weight: 600;
}
#markdown h6 {
font-size: 12px;
font-weight: 600;
}
#markdown pre {
background-color: #eeeeee;
padding: 3px;
}
/**
* Custom icons
*/
.icon-group {
background-image: url('../../../settings/img/users.svg');
}
.icon-add-white {
background-image: url('../img/add-white.svg');
}
.icon-archive {
background-image: url('../img/archive.svg');
}
.icon-archive-white {
background-image: url('../img/archive-white.svg');
}
.icon-details {
background-image: url('../img/details.svg');
}
.icon-details-white {
background-image: url('../img/details-white.svg');
}
.icon-description-marker {
position: absolute;
top: 2px;
right: 2px;
}
/**
* Hotfix for https://github.com/angular-ui/ui-select/issues/1652
*/
.ui-select-dropdown.select2-drop-active {
opacity: 1 !important;
}
+1433
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="svg2"><style id="style4">.st0{display:none}.st1{display:inline}.st2{fill:#0071bc}.st3{display:inline}.st3,.st4{fill:#fff}</style><g id="Ebene_3"><path class="st4" d="M432.3 448.1h-348c-13.2 0-24-10.8-24-24V264.6c0-13.2 10.8-24 24-24h348c13.2 0 24 10.8 24 24v159.5c0 13.2-10.8 24-24 24zM380.4 89.8H127.8c-7.7 0-14-6.3-14-14v-6.3c0-7.7 6.3-14 14-14h252.6c7.7 0 14 6.3 14 14v6.3c0 7.7-6.3 14-14 14zm19.4 61.8H110.6c-7.7 0-14-6.3-14-14v-6.3c0-7.7 6.3-14 14-14h289.2c7.7 0 14 6.3 14 14v6.3c0 7.7-6.3 14-14 14zm21.6 61.4H94.6c-7.7 0-14-6.3-14-14v-6.3c0-7.7 6.3-14 14-14h326.8c7.7 0 14 6.3 14 14v6.3c0 7.7-6.3 14-14 14z" id="path12" fill="#fff"/></g></svg>

Before

Width:  |  Height:  |  Size: 715 B

+1
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="#fff" 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

+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg id="Layer_1" width="15" height="15" enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<path d="m91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727c-1.959-1.959-5.134-1.959-7.093 0s-1.959 5.134 0 7.093l3.727 3.727-41.51 41.508c-2.039 2.039-3.149 4.656-3.329 7.324-0.073 1.087-0.347 3.105-0.675 5.292-0.053 0.359-0.212 0.706-0.487 0.983l-3.105 3.106c-0.994 0.994-0.994 2.606 0 3.6l3.493 3.493c0.994 0.994 2.606 0.994 3.6 0l3.106-3.105c0.277-0.275 0.622-0.433 0.981-0.486 2.187-0.329 4.205-0.602 5.293-0.675 2.668-0.18 5.285-1.29 7.325-3.33l41.508-41.508 3.727 3.727c1.959 1.959 5.134 1.959 7.093 0s1.959-5.134 0-7.093l-12.365-12.366 9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726 1e-3 -16.2zm-26.594 34.394l-20.53 20.53c-0.994 0.994-2.606 0.994-3.6 0l-3.27-3.27c-0.994-0.993-2.605-0.993-3.599 1e-3l-0.616 0.616-2e-3 -2e-3 -14.728 14.727c-0.337 0.337-0.819 0.401-1.076 0.143s-0.194-0.74 0.143-1.076l23.841-23.841 4e-3 4e-3 15.633-15.633c0.994-0.994 2.606-0.994 3.6 0l4.2 4.201c0.994 0.994 0.994 2.606 0 3.6z" fill="#fff"/>
<metadata><rdf:RDF><cc:Work><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/><dc:publisher><cc:Agent rdf:about="http://openclipart.org/"><dc:title>Openclipart</dc:title></cc:Agent></dc:publisher></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"><cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/><cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/><cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/></cc:License></rdf:RDF></metadata></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewBox="0 0 16 16">
<rect ry="1" height="8" width="14" y="7" x="1"/>
<rect ry=".5" height="1" width="12" y="5" x="2"/>
<rect ry=".5" height="1" width="10" y="3" x="3"/>
<rect ry=".5" height="1" width="8" y="1" x="4"/>
</svg>

After

Width:  |  Height:  |  Size: 311 B

+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewBox="0 0 16 16">
<g fill="#fff">
<rect ry="1" height="8" width="14" y="7" x="1"/>
<rect ry=".5" height="1" width="12" y="5" x="2"/>
<rect ry=".5" height="1" width="10" y="3" x="3"/>
<rect ry=".5" height="1" width="8" y="1" x="4"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 364 B

-3
View File
@@ -1,3 +0,0 @@
{
"directory": "vendor"
}
-123
View File
@@ -1,123 +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/>.
*
*/
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']);
};
-10
View File
@@ -1,10 +0,0 @@
build:
./node_modules/.bin/grunt build
watch:
./node_modules/.bin/grunt watch
install:
npm install
./node_modules/.bin/bower install
+17 -7
View File
@@ -20,6 +20,9 @@
*
*/
/* global angular */
angular.module('markdown', [])
.provider('markdown', [function () {
var opts = {};
@@ -38,13 +41,20 @@ 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';
var app = angular.module('Deck', [
'ngRoute',
'ngSanitize',
'ui.router',
'ui.select',
'as.sortable',
'mdMarkdownIt',
'ngAnimate'
ngsanitize,
uirouter,
angularuiselect,
ngsortable, md, nganimate,
'angularFileUpload'
]);
export default app;
+81 -41
View File
@@ -20,53 +20,93 @@
*
*/
app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) {
'use strict';
$httpProvider.defaults.headers.common.requesttoken = oc_requesttoken;
/* global app oc_requesttoken markdownitLinkTarget */
$compileProvider.debugInfoEnabled(true);
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';
markdownItConverterProvider.config({
breaks: true,
linkify: true,
xhtmlOut: true
});
markdownItConverterProvider.use(markdownitLinkTarget);
app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) {
'use strict';
$httpProvider.defaults.headers.common.requesttoken = oc_requesttoken;
$urlRouterProvider.otherwise("/");
$stateProvider
.state('list', {
url: "/",
templateUrl: "/boardlist.mainView.html",
controller: 'ListController'
$compileProvider.debugInfoEnabled(true);
markdownItConverterProvider.use(markdownitLinkTarget, {
breaks: true,
linkify: true,
xhtmlOut: true
}).use(markdownitCheckbox);
$urlRouterProvider.otherwise('/');
$stateProvider
.state('list', {
url: '/:filter',
templateUrl: '/boardlist.mainView.html',
controller: 'ListController',
reloadOnSearch: false,
params: {
filter: {value: '', dynamic: true}
}
})
.state('board', {
url: "/board/:boardId/:filter",
templateUrl: "/board.html",
controller: 'BoardController',
params: {
filter: { value: '', dynamic: true }
}
})
.state('board.detail', {
url: "/detail/",
reloadOnSearch : false,
views: {
"sidebarView": {
templateUrl: "/board.sidebarView.html"
.state('board', {
url: '/board/:boardId/:filter',
templateUrl: '/board.html',
controller: 'BoardController',
params: {
filter: {value: '', dynamic: true}
}
})
.state('board.detail', {
url: '/detail/',
reloadOnSearch: false,
params: {
tab: {value: 0, dynamic: true},
},
views: {
'sidebarView': {
templateUrl: '/board.sidebarView.html'
}
}
}
})
.state('board.card', {
url: "/card/:cardId",
views: {
"sidebarView": {
templateUrl: "/card.sidebarView.html",
controller: 'CardController'
}
}
});
.state('board.card', {
url: '/card/:cardId',
params: {
tab: {value: 0, dynamic: true},
},
views: {
'sidebarView': {
templateUrl: '/card.sidebarView.html',
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;
});
});
+59 -27
View File
@@ -19,34 +19,66 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from './App.js';
app.run(function ($document, $rootScope, $transitions) {
'use strict';
$document.click(function (event) {
$rootScope.$broadcast('documentClicked', event);
});
$transitions.onEnter({to: 'board.card'}, function ($state, $transition$) {
$rootScope.sidebar.show = true;
});
$transitions.onEnter({to: 'board.detail'}, function ($state, $transition$) {
$rootScope.sidebar.show = true;
});
$transitions.onEnter({to: 'board'}, function ($state) {
$rootScope.sidebar.show = false;
});
$transitions.onExit({from: 'board.card'}, function ($state) {
$rootScope.sidebar.show = false;
});
$transitions.onExit({from: 'board.detail'}, function ($state) {
$rootScope.sidebar.show = false;
});
$transitions.onEnter({to: 'board.archive'}, function ($state) {
//BoardController.loadArchived();
});
/* global Snap */
app.run(function ($document, $rootScope, $transitions, BoardService) {
'use strict';
$('link[rel="shortcut icon"]').attr(
'href',
OC.filePath('deck', 'img', 'app-512.png')
);
$document.click(function (event) {
$rootScope.$broadcast('documentClicked', event);
});
$transitions.onEnter({from: 'list'}, function ($state, $transition$) {
BoardService.unsetCurrrent();
});
$transitions.onEnter({to: 'list'}, function ($state, $transition$) {
BoardService.unsetCurrrent();
document.title = "Deck - " + oc_defaults.name;
});
$transitions.onEnter({to: 'board.card'}, function ($state, $transition$) {
$rootScope.sidebar.show = true;
});
$transitions.onEnter({to: 'board.detail'}, function ($state, $transition$) {
$rootScope.sidebar.show = true;
});
$transitions.onEnter({to: 'board'}, function ($state) {
$rootScope.sidebar.show = false;
});
$transitions.onExit({from: 'board.card'}, function ($state) {
$rootScope.sidebar.show = false;
});
$transitions.onExit({from: 'board.detail'}, function ($state) {
$rootScope.sidebar.show = false;
});
$('link[rel="shortcut icon"]').attr(
'href',
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
$('body').tooltip({
selector: '[data-toggle="tooltip"]'
});
});
-28
View File
@@ -1,28 +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"
},
"license": "AGPL-3.0",
"private": true,
"ignore": [
"'**/.*",
"node_modules",
"bower_components",
"test",
"tests"
]
}
+10 -7
View File
@@ -20,10 +20,13 @@
*
*/
app.controller('AppController', function ($scope, $location, $http, $route, $log, $rootScope, $stateParams) {
$rootScope.sidebar = {
show: false
};
$scope.sidebar = $rootScope.sidebar;
$scope.user = oc_current_user;
});
import app from '../app/App.js';
/** global: OC */
app.controller('AppController', function ($scope, $location, $http, $log, $rootScope) {
$rootScope.sidebar = {
show: false
};
$scope.sidebar = $rootScope.sidebar;
$scope.user = oc_current_user;
});
+78
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;
+155 -36
View File
@@ -20,7 +20,9 @@
*
*/
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter) {
import app from '../app/App.js';
/* global oc_defaults OC */
app.controller('BoardController', function ($rootScope, $scope, $stateParams, StatusService, BoardService, StackService, CardService, LabelService, $state, $transitions, $filter, FileService) {
$scope.sidebar = $rootScope.sidebar;
@@ -29,65 +31,104 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
addCard: [],
};
$scope.newLabel = {};
$scope.status.boardtab = $stateParams.detailTab;
$scope.OC = OC;
$scope.stackservice = StackService;
$scope.boardservice = BoardService;
$scope.cardservice = CardService;
$scope.statusservice = StatusService.getInstance();
$scope.labelservice = LabelService;
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
$scope.board = BoardService.getCurrent();
$scope.uploader = FileService.uploader;
// workaround for $stateParams changes not being propagated
$scope.$watch(function() {
return $state.params;
}, function (params) {
$scope.params = params;
}, true);
$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|\_|\-)\]\s(.*)/ig;
const regFinished = /\[(X|\_|\-)\]\s(.*)/ig;
return [
((text || '').match(regFinished) || []).length,
((text || '').match(regTotal) || []).length
];
};
$scope.search = function (searchText) {
$scope.searchText = searchText;
$scope.refreshData();
};
$scope.board = BoardService.getCurrent();
StackService.clear(); //FIXME: Is this still needed?
$scope.$watch(function () {
if (typeof BoardService.getCurrent() !== 'undefined') {
return BoardService.getCurrent().title;
} else {
return null;
}
}, function () {
$scope.setPageTitle();
});
$scope.setPageTitle = function () {
if (BoardService.getCurrent()) {
document.title = BoardService.getCurrent().title + ' | Deck - ' + oc_defaults.name;
} else {
document.title = 'Deck - ' + oc_defaults.name;
}
};
$scope.statusservice.retainWaiting();
$scope.statusservice.retainWaiting();
// FIXME: ugly solution for archive
$scope.$state = $stateParams;
$scope.filter = $stateParams.filter;
$scope.$watch('$state.filter', function (name) {
$scope.filter = name;
});
// handle filter parameter for switching between archived/unarchived cards
$scope.switchFilter = function (filter) {
$state.go('.', {filter: filter}, {notify: false});
$scope.filter = filter;
$state.go('.', {filter: filter});
};
$scope.$watch('filter', function (name) {
if (name === "archive") {
$scope.$watch(function() {
return $scope.params.filter;
}, function (filter) {
if (filter === 'archive') {
$scope.loadArchived();
} else {
$scope.loadDefault();
}
});
$scope.stacksData = StackService;
$scope.stacks = {};
$scope.$watch('stacksData', function (value) {
$scope.stacks = [];
$scope.$watch('stacksData', function () {
$scope.refreshData();
}, true);
$scope.refreshData = function () {
if ($scope.filter === "archive") {
if ($scope.params.filter === 'archive') {
$scope.filterData('-lastModified', $scope.searchText);
} else {
$scope.filterData('order', $scope.searchText);
}
};
$scope.checkCanEdit = function () {
return !$scope.archived;
return !BoardService.getCurrent().archived;
};
// filter cards here, as ng-sortable will not work nicely with html-inline filters
$scope.filterData = function (order, text) {
if ($scope.stacks === undefined)
if ($scope.stacks === undefined) {
return;
angular.copy(StackService.getAll(), $scope.stacks);
}
angular.copy(StackService.getData(), $scope.stacks);
$scope.stacks = $filter('orderBy')($scope.stacks, 'order');
angular.forEach($scope.stacks, function (value, key) {
var cards = $filter('cardSearchFilter')(value.cards, text);
cards = $filter('orderBy')(cards, order);
@@ -113,8 +154,8 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
// Handle initial Loading
BoardService.fetchOne($scope.id).then(function (data) {
BoardService.getPermissions();
$scope.statusservice.releaseWaiting();
$scope.setPageTitle();
}, function (error) {
$scope.statusservice.setError('Error occured', error);
});
@@ -129,7 +170,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
// Create a new Stack
$scope.createStack = function () {
StackService.create($scope.newStack).then(function (data) {
$scope.newStack.title = "";
$scope.newStack.title = '';
});
};
@@ -141,13 +182,19 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
};
CardService.create(newCard).then(function (data) {
$scope.stackservice.addCard(data);
$scope.newCard.title = "";
$scope.newCard.title = '';
});
};
$scope.cardDelete = function (card) {
CardService.delete(card.id);
StackService.removeCard(card);
OC.dialogs.confirm(t('deck', 'Are you sure you want to delete this card with all of its data?'), t('deck', 'Delete'), function(state) {
if (!state) {
return;
}
CardService.delete(card.id).then(function () {
StackService.removeCard(card);
});
});
};
$scope.cardArchive = function (card) {
CardService.archive(card);
@@ -167,10 +214,12 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
};
$scope.labelCreate = function (label) {
label.boardId = $scope.id;
LabelService.create(label);
BoardService.getCurrent().labels.push(label);
$scope.status.createLabel = false;
$scope.newLabel = {};
LabelService.create(label).then(function (data) {
$scope.newStack.title = '';
BoardService.getCurrent().labels.push(data);
$scope.status.createLabel = false;
$scope.newLabel = {};
});
};
$scope.labelUpdate = function (label) {
label.edit = false;
@@ -183,15 +232,32 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
$scope.status.addSharee = null;
};
$scope.aclDelete = function (acl) {
BoardService.deleteAcl(acl);
BoardService.deleteAcl(acl).then(function(data) {
$scope.loadDefault();
$scope.refreshData();
});
};
$scope.aclUpdate = function (acl) {
BoardService.updateAcl(acl);
};
$scope.aclTypeString = function (acl) {
if (typeof acl === 'undefined') {
return '';
}
switch (acl.type) {
case OC.Share.SHARE_TYPE_USER:
return 'user';
case OC.Share.SHARE_TYPE_GROUP:
return 'group';
default:
return '';
}
};
// settings for card sorting
$scope.sortOptions = {
id: 'card',
itemMoved: function (event) {
event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column;
var order = event.dest.index;
@@ -202,7 +268,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
CardService.update(card);
CardService.reorder(card, order).then(function (data) {
StackService.addCard(card);
StackService.reorder(card, order);
StackService.reorderCard(card, order);
StackService.removeCard({
id: card.id,
stackId: oldStack
@@ -214,17 +280,53 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
var card = event.source.itemScope.c;
var stack = event.dest.sortableScope.$parent.s.id;
CardService.reorder(card, order).then(function (data) {
StackService.reorder(card, order);
StackService.reorderCard(card, order);
$scope.refreshData();
});
},
scrollableContainer: '#innerBoard',
containerPositioning: 'relative',
containment: '#innerBoard',
longTouch: true,
// auto scroll on drag
dragMove: function (itemPosition, containment, eventObj) {
if (eventObj) {
var container = $('#board');
var offset = container.offset();
var targetX = eventObj.pageX - (offset.left || container.scrollLeft());
var targetY = eventObj.pageY - (offset.top || container.scrollTop());
if (targetX < offset.left) {
container.scrollLeft(container.scrollLeft() - 25);
} else if (targetX > container.width()) {
container.scrollLeft(container.scrollLeft() + 25);
}
if (targetY < offset.top) {
container.scrollTop(container.scrollTop() - 25);
} else if (targetY > container.height()) {
container.scrollTop(container.scrollTop() + 25);
}
}
},
accept: function (sourceItemHandleScope, destSortableScope, destItemScope) {
return sourceItemHandleScope.sortableScope.options.id === 'card';
}
};
$scope.sortOptionsStack = {
id: 'stack',
orderChanged: function (event) {
var order = event.dest.index;
var stack = event.source.itemScope.s;
StackService.reorder(stack, order).then(function (data) {
$scope.refreshData();
});
},
scrollableContainer: '#board',
containerPositioning: 'relative',
containment: '#board',
// auto scroll on drag
containment: '#innerBoard',
dragMove: function (itemPosition, containment, eventObj) {
if (eventObj) {
var container = $("#board");
var container = $('#board');
var offset = container.offset();
var targetX = eventObj.pageX - (offset.left || container.scrollLeft());
var targetY = eventObj.pageY - (offset.top || container.scrollTop());
@@ -239,7 +341,24 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
container.scrollTop(container.scrollTop() + 50);
}
}
},
accept: function (sourceItemHandleScope, destSortableScope, destItemScope) {
return sourceItemHandleScope.sortableScope.options.id === 'stack';
}
};
$scope.labelStyle = function (color) {
return {
'background-color': '#' + color,
'color': $filter('textColorFilter')(color)
};
};
$scope.attachmentCount = function(card) {
if (Array.isArray(card.attachments)) {
return card.attachments.filter((obj) => obj.deletedAt === 0).length;
}
return card.attachmentCount;
};
});
+230 -56
View File
@@ -1,5 +1,3 @@
/*
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
@@ -22,65 +20,241 @@
*
*/
app.controller('CardController', function ($scope, $rootScope, $routeParams, $location, $stateParams, BoardService, CardService, StackService, StatusService) {
$scope.sidebar = $rootScope.sidebar;
$scope.status = {};
/* global app moment angular OC */
import app from '../app/App.js';
$scope.cardservice = CardService;
$scope.cardId = $stateParams.cardId;
app.controller('CardController', function ($scope, $rootScope, $sce, $location, $stateParams, $state, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService, markdownItConverter, FileService) {
$scope.sidebar = $rootScope.sidebar;
$scope.status = {
lastEdit: 0,
lastSave: Date.now()
};
$scope.statusservice = StatusService.getInstance();
$scope.boardservice = BoardService;
$scope.cardservice = CardService;
$scope.fileservice = FileService;
$scope.cardId = $stateParams.cardId;
$scope.statusservice.retainWaiting();
$scope.statusservice = StatusService.getInstance();
$scope.boardservice = BoardService;
CardService.fetchOne($scope.cardId).then(function(data) {
$scope.statusservice.releaseWaiting();
$scope.archived = CardService.getCurrent().archived;
}, function(error) {
});
$scope.isArray = angular.isArray;
// workaround for $stateParams changes not being propagated
$scope.$watch(function() {
return $state.params;
}, function (params) {
$scope.params = params;
}, true);
$scope.params = $state.params;
$scope.cardRenameShow = function() {
if($scope.archived || !BoardService.canEdit())
return false;
else {
$scope.status.cardRename=true;
}
};
$scope.cardEditDescriptionShow = function($event) {
var node = $event.target.nodeName;
console.log($event);
console.log(BoardService);
if($scope.card.archived || !$scope.boardservice.canEdit()) {
console.log(node);
} else {
console.log("edit");
$scope.status.cardEditDescription=true;
}
console.log($scope.status.canEditDescription);
};
// handle rename to update information on the board as well
$scope.cardRename = function(card) {
CardService.rename(card).then(function(data) {
StackService.updateCard(card);
$scope.status.renameCard = false;
});
};
$scope.cardUpdate = function(card) {
CardService.update(CardService.getCurrent()).then(function(data) {
$scope.status.cardEditDescription = false;
$('#card-description').find('.save-indicator').fadeIn(500).fadeOut(1000);
});
};
$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.labelAssign = function(element, model) {
CardService.assignLabel($scope.cardId, element.id);
var card = CardService.getCurrent();
StackService.updateCard(card);
};
$scope.labelRemove = function(element, model) {
CardService.removeLabel($scope.cardId, element.id)
}
$scope.abortAttachmentSelection = function() {
$scope.status.continueEdit = false;
$scope.status.selectAttachment = false;
let el = document.querySelectorAll('textarea')[0];
el.focus();
};
$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) {
$scope.statusservice.releaseWaiting();
$scope.archived = CardService.getCurrent().archived;
$scope.updateMarkdown(CardService.getCurrent().description);
}, function (error) {
});
$scope.cardRenameShow = function () {
if ($scope.archived || !BoardService.canEdit())
{return false;}
else {
$scope.status.cardRename = true;
}
};
$scope.toggleCheckbox = function (id) {
$('#markdown input[type=checkbox]').attr('disabled', true);
$scope.status.edit = angular.copy(CardService.getCurrent());
var reg = /\[(X|\s|\_|\-)\]\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 = $('.section-header-tabbed .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);
return;
}
if ($event.target.tagName === 'INPUT') {
$scope.toggleCheckbox(checkboxId);
return;
}
if (BoardService.isArchived() || CardService.getCurrent().archived) {
return false;
}
if ($scope.card.archived || !$scope.boardservice.canEdit()) {
return false;
}
$scope.status.cardEditDescription = true;
$scope.status.edit = angular.copy(CardService.getCurrent());
return true;
};
$scope.cardEditDescriptionChanged = function ($event) {
$scope.status.lastEdit = Date.now();
var header = $('.section-header-tabbed .tabDetails');
header.find('.save-indicator.unsaved').show();
header.find('.save-indicator.saved').hide();
};
$interval(function() {
var currentTime = Date.now();
var timeSinceEdit = currentTime-$scope.status.lastEdit;
if (timeSinceEdit > 1000 && $scope.status.lastEdit > $scope.status.lastSave && !$scope.status.saving) {
$scope.status.lastSave = currentTime;
$scope.status.saving = true;
var header = $('.section-header-tabbed .tabDetails');
header.find('.save-indicator.unsaved').fadeIn(500);
CardService.update($scope.status.edit).then(function (data) {
var header = $('.section-header-tabbed .tabDetails');
header.find('.save-indicator.unsaved').hide();
header.find('.save-indicator.saved').fadeIn(250).fadeOut(1000);
$scope.status.saving = false;
});
}
}, 500, 0, false);
// handle rename to update information on the board as well
$scope.cardRename = function (card) {
CardService.rename(card).then(function (data) {
$scope.status.renameCard = false;
});
};
$scope.cardUpdate = function (card) {
CardService.update(card).then(function (data) {
$scope.status.cardEditDescription = false;
$scope.updateMarkdown($scope.status.edit.description);
var header = $('.section-header-tabbed .tabDetails');
header.find('.save-indicator.unsaved').hide();
header.find('.save-indicator.saved').fadeIn(500).fadeOut(1000);
});
};
$scope.labelAssign = function (element, model) {
CardService.assignLabel($scope.cardId, element.id).then(function (data) {
});
};
$scope.labelRemove = function (element, model) {
CardService.removeLabel($scope.cardId, element.id).then(function (data) {
});
};
$scope.setDuedate = function (duedate) {
var element = CardService.getCurrent();
var newDate = moment(element.duedate);
if(!newDate.isValid()) {
newDate = moment();
}
newDate.date(duedate.date());
newDate.month(duedate.month());
newDate.year(duedate.year());
element.duedate = newDate.toISOString();
CardService.update(element);
};
$scope.setDuedateTime = function (time) {
var element = CardService.getCurrent();
var newDate = moment(element.duedate);
if(!newDate.isValid()) {
newDate = moment();
}
newDate.hour(time.hour());
newDate.minute(time.minute());
element.duedate = newDate.toISOString();
CardService.update(element);
};
$scope.resetDuedate = function () {
var element = CardService.getCurrent();
element.duedate = null;
CardService.update(element);
};
/**
* Show ui-select field when clicking the add button
*/
$scope.toggleAssignUser = function() {
$scope.status.showAssignUser = !$scope.status.showAssignUser;
if ($scope.status.showAssignUser === true) {
$timeout(function () {
$('#assignUserSelect').find('a').click();
});
}
};
/**
* Hide ui-select when select list is closed
*/
$scope.assingUserOpenClose = function(isOpen) {
$scope.status.showAssignUser = isOpen;
};
$scope.addAssignedUser = function(item) {
CardService.assignUser(CardService.getCurrent(), item.uid).then(function (data) {
});
$scope.status.showAssignUser = false;
};
$scope.removeAssignedUser = function(uid) {
CardService.unassignUser(CardService.getCurrent(), uid).then(function (data) {
});
};
$scope.labelStyle = function (color) {
return {
'background-color': '#' + color,
'color': $filter('textColorFilter')(color)
};
};
});
+44
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};
};
}]);
+141 -23
View File
@@ -1,4 +1,3 @@
/*
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
@@ -21,32 +20,119 @@
*
*/
app.controller('ListController', function ($scope, $location, $filter, BoardService, $element) {
$scope.boards = [];
$scope.newBoard = {};
$scope.status = {};
$scope.colors = ['0082c9', '00c9c6','00c906', 'c92b00', 'F1DB50', '7C31CC', '3A3B3D', 'CACBCD'];
$scope.boardservice = BoardService;
$scope.newBoard.color = $scope.colors[0];
/* global app angular */
// FIXME: not nice, but we want to load this only once
if($element.attr('id') === 'app-navigation') {
BoardService.fetchAll().then(function(data) {
$scope.filterData();
}, function (error) {
// TODO: show error when loading fails
});
var ListController = function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService) {
function calculateNewColor() {
var boards = BoardService.getAll();
var boardKeys = Object.keys(boards);
var colorOccurrences = [];
for (var i = 0; i < $scope.colors.length; i++) {
colorOccurrences.push(0);
}
for (var j = 0; j < boardKeys.length; j++) {
var key = boardKeys[j];
var board = boards[key];
if (board && $scope.colors.indexOf(board.color) !== -1) {
colorOccurrences[$scope.colors.indexOf(board.color)]++;
}
}
return $scope.colors[colorOccurrences.indexOf(Math.min.apply(Math, colorOccurrences))];
}
$scope.filterData = function () {
angular.copy($scope.boardservice.getData(), $scope.boardservice.sorted);
$scope.boardservice.sorted = $filter('orderBy')($scope.boardservice.sorted, 'title');
$scope.boards = [];
$scope.newBoard = {};
$scope.status = {
deleteUndo: [],
filter: $stateParams.filter ? $stateParams.filter : '',
sidebar: false
};
$scope.colors = ['0082c9', '00c9c6','00c906', 'c92b00', 'F1DB50', '7C31CC', '3A3B3D', 'CACBCD'];
$scope.boardservice = BoardService;
$scope.updatingBoard = null;
var filterData = function () {
if($element.attr('id') === 'app-navigation') {
$scope.boardservice.sidebar = $scope.boardservice.getData();
$scope.boardservice.sidebar = $filter('orderBy')($scope.boardservice.sidebar, 'title');
$scope.boardservice.sidebar = $filter('cardFilter')($scope.boardservice.sidebar, {archived: false});
} else {
$scope.boardservice.sorted = $scope.boardservice.getData();
if ($scope.status.filter === 'archived') {
var filter = {};
filter[$scope.status.filter] = true;
$scope.boardservice.sorted = $filter('cardFilter')($scope.boardservice.sorted, filter);
} else if ($scope.status.filter === 'shared') {
$scope.boardservice.sorted = $filter('cardFilter')($scope.boardservice.sorted, {archived: false});
$scope.boardservice.sorted = $filter('boardFilterAcl')($scope.boardservice.sorted);
} else {
$scope.boardservice.sorted = $filter('cardFilter')($scope.boardservice.sorted, {archived: false});
}
$scope.boardservice.sorted = $filter('orderBy')($scope.boardservice.sorted, ['deletedAt', 'title']);
}
};
var finishedLoading = function() {
filterData();
$scope.newBoard.color = calculateNewColor();
};
var initialize = function () {
$scope.statusservice = StatusService.listStatus;
if($element.attr('id') === 'app-navigation') {
$scope.statusservice.retainWaiting();
BoardService.fetchAll().then(function(data) {
finishedLoading();
$scope.statusservice.releaseWaiting();
BoardService.loaded = true;
}, function (error) {
$scope.statusservice.setError('Error occured', error);
});
} else {
/* initialize main list controller when board list is loaded */
var boardDataWatch = $scope.$watch(function () {
return $scope.boardservice.loaded;
}, function () {
if (BoardService.loaded === true) {
boardDataWatch();
finishedLoading();
}
});
}
$scope.$watch(function () {
return $scope.boardservice.data;
}, function () {
filterData();
}, true);
/* Watch for board filter change */
$scope.$watchCollection(function(){
return $state.params;
}, function(){
$scope.status.filter = $state.params.filter;
filterData();
});
};
initialize();
$scope.selectColor = function(color) {
$scope.newBoard.color = color;
};
$scope.gotoBoard = function(board) {
if(board.deletedAt > 0) {
return false;
}
return $state.go('board', {boardId: board.id});
};
$scope.boardCreate = function() {
if(!$scope.newBoard.title || !$scope.newBoard.color) {
$scope.status.addBoard=false;
@@ -55,9 +141,9 @@ app.controller('ListController', function ($scope, $location, $filter, BoardServ
BoardService.create($scope.newBoard)
.then(function (response) {
$scope.newBoard = {};
$scope.newBoard.color = $scope.colors[0];
$scope.newBoard.color = calculateNewColor();
$scope.status.addBoard=false;
$scope.filterData();
filterData();
}, function(error) {
$scope.status.createBoard = 'Unable to insert board: ' + error.message;
});
@@ -65,16 +151,48 @@ app.controller('ListController', function ($scope, $location, $filter, BoardServ
$scope.boardUpdate = function(board) {
BoardService.update(board).then(function(data) {
$scope.filterData();
board.status.edit = false;
filterData();
});
};
$scope.boardUpdateBegin = function(board) {
$scope.updatingBoard = angular.copy(board);
};
$scope.boardUpdateReset = function(board) {
board.title = $scope.updatingBoard.title;
board.color = $scope.updatingBoard.color;
filterData();
board.status.edit = false;
};
$scope.boardArchive = function (board) {
board.archived = true;
BoardService.update(board).then(function(data) {
filterData();
});
};
$scope.boardUnarchive = function (board) {
board.archived = false;
BoardService.update(board).then(function(data) {
filterData();
});
};
$scope.boardDelete = function(board) {
BoardService.delete(board.id).then(function (data) {
$scope.filterData();
filterData();
});
};
});
$scope.boardDeleteUndo = function (board) {
BoardService.deleteUndo(board.id).then(function (data) {
filterData();
});
};
};
export default ListController;
+26 -26
View File
@@ -4,45 +4,45 @@
* @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('appPopoverMenuUtils', function () {
'use strict';
return {
restrict: 'C',
link: function (scope, elm) {
var menu = elm.find('.popovermenu');
var button = elm.find('button');
button.click(function (e) {
menu.toggleClass('hidden');
if(!menu.hasClass('hidden')) {
button.css('display','block');
} else {
button.css('display','');
}
'use strict';
return {
restrict: 'C',
link: function (scope, elm) {
var menu = elm.find('.popovermenu');
var button = elm.find('button');
button.click(function (e) {
var popovermenus = $('.popovermenu');
var shouldShow = menu.hasClass('hidden');
popovermenus.addClass('hidden');
if (shouldShow) {
menu.toggleClass('hidden');
}
e.stopPropagation();
});
scope.$on('documentClicked', function (scope, event) {
if (event.target !== button) {
menu.addClass('hidden');
}
button.css('display','');
});
}
};
scope.$on('documentClicked', function (scope, event) {
/* prevent closing popover if target has no-close class */
if (event.target !== button && !$(event.target).hasClass('no-close')) {
menu.addClass('hidden');
}
});
}
};
});
+18 -17
View File
@@ -20,27 +20,28 @@
*
*/
import app from '../app/App.js';
// OwnCloud Click Handling
// https://doc.owncloud.org/server/8.0/developer_manual/app/css.html
app.directive('appNavigationEntryUtils', function () {
'use strict';
return {
restrict: 'C',
link: function (scope, elm) {
'use strict';
return {
restrict: 'C',
link: function (scope, elm) {
var menu = elm.siblings('.app-navigation-entry-menu');
var button = $(elm)
.find('.app-navigation-entry-utils-menu-button button');
var menu = elm.siblings('.app-navigation-entry-menu');
var button = $(elm)
.find('.app-navigation-entry-utils-menu-button button');
button.click(function () {
menu.toggleClass('open');
});
scope.$on('documentClicked', function (scope, event) {
if (event.target !== button[0]) {
menu.removeClass('open');
}
});
}
};
button.click(function () {
menu.toggleClass('open');
});
scope.$on('documentClicked', function (scope, event) {
if (event.target !== button[0]) {
menu.removeClass('open');
}
});
}
};
});
+5 -4
View File
@@ -19,10 +19,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('autofocusOnInsert', function () {
'use strict';
return function (scope, elm) {
elm.focus();
};
'use strict';
return function (scope, elm) {
elm.focus();
};
});
+23 -8
View File
@@ -19,18 +19,33 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('avatar', function() {
'use strict';
return {
restrict: 'A',
scope: true,
restrict: 'AEC',
transclude: true,
replace: true,
template: '<div class="avatardiv-container"><div class="avatardiv" data-toggle="tooltip" ng-transclude></div></div>',
scope: { attr: '=' },
link: function(scope, element, attr){
attr.$observe('displayname', function(value){
if(value!==undefined) {
$(element).avatar(value, 32);
}
});
}
scope.uid = attr.displayname;
scope.displayname = attr.displayname;
var value = attr.user;
var avatardiv = $(element).find('.avatardiv');
if(typeof attr.contactsmenu !== 'undefined' && attr.contactsmenu !== 'false') {
avatardiv.contactsMenu(value, 0, $(element));
avatardiv.addClass('has-contactsmenu');
}
if(typeof attr.tooltip !== 'undefined' && attr.tooltip !== 'false') {
$(element).tooltip({
title: scope.displayname,
placement: 'top'
});
}
avatardiv.avatar(value, 32, false, false, false, attr.displayname);
},
controller: function () {}
};
});
+42
View File
@@ -0,0 +1,42 @@
/*
* @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('contactsmenudelete', function() {
'use strict';
return {
restrict: 'A',
priority: 1,
link: function(scope, element, attr){
var user = attr.user;
var menu = $(element).parent().find('.contactsmenu-popover');
if (oc_current_user === user) {
menu.children(':first').remove();
}
var menuEntry = $('<li><a><span class="icon icon-delete"></span><span>' + t('deck', 'Remove user from card') + '</span></a></li>');
menuEntry.on('click', function () {
scope.removeAssignedUser(user);
});
$(menu).append(menuEntry);
}
};
});
+54
View File
@@ -0,0 +1,54 @@
/*
* @copyright Copyright (c) 2017 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 app */
/* gloabl t */
/* global moment */
app.directive('datepicker', function () {
'use strict';
return {
link: function (scope, elm, attr) {
return elm.datepicker({
dateFormat: 'yy-mm-dd',
onSelect: function(date, inst) {
scope.setDuedate(moment(date));
scope.$apply();
},
beforeShow: function(input, inst) {
var dp, marginLeft;
dp = $(inst).datepicker('widget');
marginLeft = -Math.abs($(input).outerWidth() - dp.outerWidth()) / 2 + 'px';
dp.css({
'margin-left': marginLeft
});
$('div.ui-datepicker:before').css({
'left': 100 + 'px'
});
return $('.hasDatepicker').datepicker();
},
minDate: null
});
}
};
});
+1
View File
@@ -19,6 +19,7 @@
* 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
app.directive('elastic', [
+1
View File
@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.directive('search', function ($document, $location) {
'use strict';
+48
View File
@@ -0,0 +1,48 @@
/*
* @copyright Copyright (c) 2017 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 '../legacy/jquery.ui.timepicker.js';
import 'legacy/jquery.ui.timepicker.css';
/* global app */
/* global t */
/* global moment */
app.directive('timepicker', function() {
'use strict';
return {
restrict: 'A',
link: function(scope, elm, attr) {
return $(elm).timepicker({
onSelect: function(date, inst) {
scope.setDuedateTime(moment('2000-01-01 ' + date));
scope.$apply();
},
myPosition: 'center top',
atPosition: 'center bottom',
hourText: t('deck', 'Hours'),
minuteText: t('deck', 'Minutes'),
showPeriodLabels: false
});
}
};
});
@@ -1,27 +1,34 @@
/*
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
* @copyright Copyright (c) 2017 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/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.filter('relativeDateFilter', function() {
return function (timestamp) {
return OC.Util.relativeModifiedDate(timestamp*1000);
}
});
app.filter('boardFilterAcl', function() {
return function(boards) {
var _result = [];
angular.forEach(boards, function(board){
if(board.acl !== null && Object.keys(board.acl).length > 0) {
_result.push(board);
}
});
return _result;
};
});
+37
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];
};
});
+8 -6
View File
@@ -19,20 +19,22 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
// usage | cardFilter({ member: 'admin'})
app.filter('cardFilter', function() {
return function(cards, rules) {
var _result = {};
return function(cards, rules) {
var _result = [];
angular.forEach(cards, function(card){
var _card = card;
angular.some(rules, function(rule, condition) {
if(_card[rule]===condition) {
var keys = Object.keys(rules);
keys.some(function(key, condition) {
if(_card[key]===rules[key]) {
_result.push(_card);
}
});
});
return result;
};
return _result;
};
});
+1
View File
@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.filter('cardSearchFilter', function() {
return function(cards, searchString) {
+62
View File
@@ -0,0 +1,62 @@
/*
* @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/>.
*
*/
import app from '../app/App.js';
/* global app */
/* global OC */
/* global moment */
app.filter('relativeDateFilter', function() {
return function (timestamp) {
return OC.Util.relativeModifiedDate(timestamp*1000);
};
});
app.filter('relativeDateFilterString', function() {
return function (date) {
return OC.Util.relativeModifiedDate(Date.parse(date));
};
});
app.filter('dateToTimestamp', function() {
return function (date) {
return Date.parse(date);
};
});
app.filter('parseDate', function() {
return function (date) {
if(moment(date).isValid()) {
return moment(date).format('YYYY-MM-DD');
}
return '';
};
});
app.filter('parseTime', function() {
return function (date) {
if(moment(date).isValid()) {
return moment(date).format('HH:mm');
}
return '';
};
});
+33 -31
View File
@@ -19,8 +19,9 @@
* 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) {
// RGB2HLS by Garry Tan
// http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c
@@ -30,36 +31,37 @@ app.filter('iconWhiteFilter', function() {
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
if(result !== null) {
var r = color.r/255;
var g = color.g/255;
var b = color.b/255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if(max == min){
h = s = 0; // achromatic
}else{
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch(max){
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
// TODO: Maybe just darken/lighten the color
if(l<0.5) {
return "-white";
} else {
return "";
}
//var rgba = "rgba(" + color.r + "," + color.g + "," + color.b + ",0.7)";
//return rgba;
} else {
return "";
if (result === null) {
return '';
}
var r = color.r / 255;
var g = color.g / 255;
var b = color.b / 255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
}
if (max === min) {
h = s = 0; // achromatic
} else {
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0);
break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
}
h /= 6;
}
if (l < 0.5) {
return '-white';
} else {
return '';
}
};
});
+5 -4
View File
@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.filter('lightenColorFilter', function() {
return function (hex) {
@@ -29,9 +30,9 @@ app.filter('lightenColorFilter', function() {
b: parseInt(result[3], 16)
} : 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 {
return "#" + hex;
return '#' + hex;
}
}
});
};
});
+8 -3
View File
@@ -19,13 +19,18 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.filter('orderObjectBy', function(){
return function(input, attribute) {
if (!angular.isObject(input)) return input;
if (!angular.isObject(input)) {
return input;
}
var array = [];
for(var objectKey in input) {
array.push(input[objectKey]);
if ({}.hasOwnProperty.call(input, objectKey)) {
array.push(input[objectKey]);
}
}
array.sort(function(a, b){
@@ -34,5 +39,5 @@ app.filter('orderObjectBy', function(){
return a < b;
});
return array;
}
};
});
+24 -17
View File
@@ -19,44 +19,51 @@
* 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) {
// RGB2HLS by Garry Tan
// http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c
var result = /^([A-Fa-f\d]{2})([A-Fa-f\d]{2})([A-Fa-f\d]{2})$/i.exec(hex);
var result = /^#?([A-Fa-f\d]{2})([A-Fa-f\d]{2})([A-Fa-f\d]{2})$/i.exec(hex);
var color = result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
if(result !== null) {
var r = color.r/255;
var g = color.g/255;
var b = color.b/255;
if (result !== null) {
var r = color.r / 255;
var g = color.g / 255;
var b = color.b / 255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if(max == min){
if (max === min) {
h = s = 0; // achromatic
}else{
} else {
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch(max){
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0);
break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
}
h /= 6;
}
if(l<0.5) {
return "#ffffff";
if (l < 0.5) {
return '#ffffff';
} else {
return "#000000";
return '#000000';
}
} else {
return "#000000";
return '#000000';
}
}
};
});
+46
View File
@@ -0,0 +1,46 @@
/*
* @copyright Copyright (c) 2017 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 app */
/* global angular */
/*
* Remove all assignedUsers from users list
*/
app.filter('withoutAssignedUsers', function () {
return function (users, assignedUsers) {
var _result = [];
angular.forEach(users, function (user) {
var _found = false;
angular.forEach(assignedUsers, function (assignedUser) {
if (assignedUser.participant.uid === user.uid) {
_found = true;
}
});
if (_found === false) {
_result.push(user);
}
});
return _result;
};
});
+28
View File
@@ -0,0 +1,28 @@
'use strict';
// 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';
app.controller('ListController', ListController);
app.component('attachmentListComponent', attachmentListComponent);
// require all the js files from subdirectories
var context = require.context('.', true, /(controller|service|filters|directive)\/(.*)\.js$/);
context.keys().forEach(function (key) {
context(key);
});
+57
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
View File
File diff suppressed because it is too large Load Diff
+114
View File
@@ -0,0 +1,114 @@
/**
* 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|\_|\-)\]\s(.*)/i;
createTokens = function(checked, label, Token) {
var id, idNumeric, nodes, token;
nodes = [];
/**
* <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"]);
}
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;
text = original.content;
matches = text.match(pattern);
if (matches === null) {
return original;
}
checked = false;
value = matches[1];
label = matches[2];
if (value === "X" || value === "x") {
checked = true;
}
return createTokens(checked, label, Token);
};
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 = tokens.length - 1;
while (i >= 0) {
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));
};
+9512
View File
File diff suppressed because it is too large Load Diff
+27 -13
View File
@@ -1,28 +1,42 @@
{
"name": "deck",
"description": "Frontend for the Nextcloud Deck app",
"repository": "https://github.com/nextcloud/deck",
"version": "1.0.0",
"main": "Gruntfile.js",
"directories": {
"test": "tests"
},
"dependencies": {},
"dependencies": {
"angular": "^1.7.2",
"angular-animate": "^1.7.2",
"angular-file-upload": "^2.5.0",
"angular-markdown-it": "^0.6.1",
"angular-sanitize": "^1.7.2",
"markdown-it": "^8.4.1",
"markdown-it-link-target": "^1.0.2",
"ng-sortable": "^1.3.8",
"ui-select": "^0.19.8",
"@uirouter/angularjs": "^1.0.18"
},
"devDependencies": {
"bower": "^1.8.0",
"grunt": "^1.0.1",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-jshint": "^1.1.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-karma": "^2.0.0",
"grunt-phpunit": "^0.3.6",
"grunt-wrap": "^0.3.0",
"jshint-stylish": "^2.2.1",
"karma": "^1.4.1"
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"css-loader": "^0.28.9",
"mini-css-extract-plugin": "^0.4.0",
"node-sass": "^4.5.3",
"webpack": "^4.12.0",
"webpack-cli": "^3.0.8",
"webpack-merge": "^4.1.3",
"karma": "^2.0.3"
},
"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"
},
"author": "",
"license": "AGPL-3.0",
"keywords": [],
"description": ""
"keywords": []
}
+135 -123
View File
@@ -19,148 +19,160 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.factory('ApiService', function($http, $q){
var ApiService = function(http, endpoint) {
this.endpoint = endpoint;
this.baseUrl = OC.generateUrl('/apps/deck/' + endpoint);
this.http = http;
this.q = $q;
this.data = {};
this.id = null;
this.sorted = [];
};
/** global: oc_defaults */
app.factory('ApiService', function ($http, $q) {
var ApiService = function (http, endpoint) {
this.endpoint = endpoint;
this.baseUrl = OC.generateUrl('/apps/deck/' + endpoint);
this.http = http;
this.q = $q;
this.data = {};
this.id = null;
this.sorted = [];
};
ApiService.prototype.fetchAll = function(){
var deferred = $q.defer();
var self = this;
$http.get(this.baseUrl).then(function (response) {
var objects = response.data;
objects.forEach(function (obj) {
self.data[obj.id] = obj;
});
deferred.resolve(self.data);
}, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed');
});
return deferred.promise;
};
ApiService.prototype.fetchAll = function () {
var deferred = $q.defer();
var self = this;
$http.get(this.baseUrl).then(function (response) {
var objects = response.data;
objects.forEach(function (obj) {
self.data[obj.id] = obj;
});
deferred.resolve(self.data);
}, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed');
});
return deferred.promise;
};
ApiService.prototype.fetchOne = function (id) {
ApiService.prototype.fetchOne = function (id) {
this.id = id;
var deferred = $q.defer();
this.id = id;
var deferred = $q.defer();
if(id===undefined) {
return deferred.promise;
}
if (id === undefined) {
return deferred.promise;
}
var self = this;
$http.get(this.baseUrl + '/' + id).then(function (response) {
data = response.data;
if(self.data[data.id]===undefined) {
self.data[data.id] = response.data;
}
$.each(response.data, function(key, value) {
self.data[data.id][key] = value;
});
deferred.resolve(response.data);
var self = this;
$http.get(this.baseUrl + '/' + id).then(function (response) {
var data = response.data;
if (self.data[data.id] === undefined) {
self.data[data.id] = response.data;
}
$.each(response.data, function (key, value) {
self.data[data.id][key] = value;
});
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed');
});
return deferred.promise;
};
}, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed');
});
return deferred.promise;
};
ApiService.prototype.create = function (entity) {
var deferred = $q.defer();
var self = this;
$http.post(this.baseUrl, entity).then(function (response) {
self.add(response.data);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Fetching' + self.endpoint + ' failed');
});
return deferred.promise;
};
ApiService.prototype.create = function (entity) {
var deferred = $q.defer();
var self = this;
$http.post(this.baseUrl, entity).then(function (response) {
self.add(response.data);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Fetching' + self.endpoint + ' failed');
});
return deferred.promise;
};
ApiService.prototype.update = function (entity) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + entity.id, entity).then(function (response) {
self.add(response.data);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Updating ' + self.endpoint + ' failed');
});
return deferred.promise;
ApiService.prototype.update = function (entity) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + entity.id, entity).then(function (response) {
self.add(response.data);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Updating ' + self.endpoint + ' failed');
});
return deferred.promise;
};
};
ApiService.prototype.delete = function (id) {
var deferred = $q.defer();
var self = this;
ApiService.prototype.delete = function (id) {
var deferred = $q.defer();
var self = this;
$http.delete(this.baseUrl + '/' + id).then(function (response) {
self.remove(id);
deferred.resolve(response.data);
$http.delete(this.baseUrl + '/' + id).then(function (response) {
self.remove(id);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Deleting ' + self.endpoint + ' failed');
});
return deferred.promise;
}, function (error) {
deferred.reject('Deleting ' + self.endpoint + ' failed');
});
return deferred.promise;
};
};
// methods for managing data
ApiService.prototype.clear = function() {
this.data = {};
};
ApiService.prototype.add = function (entity) {
var element = this.data[entity.id];
if(element===undefined) {
this.data[entity.id] = entity;
} else {
Object.keys(entity).forEach(function (key) {
element[key] = entity[key];
if(element[key]!==null)
element[key].status = {};
});
}
};
ApiService.prototype.remove = function(id) {
if (this.data[id] !== undefined) {
delete this.data[id];
}
};
ApiService.prototype.addAll = function (entities) {
var self = this;
angular.forEach(entities, function(entity) {
self.add(entity);
});
};
ApiService.prototype.getCurrent = function () {
return this.data[this.id];
};
// methods for managing data
ApiService.prototype.clear = function () {
this.data = {};
};
ApiService.prototype.add = function (entity) {
var element = this.data[entity.id];
if (element === undefined) {
this.data[entity.id] = entity;
} else {
Object.keys(entity).forEach(function (key) {
if (entity[key] !== null && element[key] !== entity[key]) {
element[key] = entity[key];
}
});
element.status = {};
}
};
ApiService.prototype.remove = function (id) {
if (this.data[id] !== undefined) {
delete this.data[id];
}
};
ApiService.prototype.addAll = function (entities) {
var self = this;
angular.forEach(entities, function (entity) {
self.add(entity);
});
};
ApiService.prototype.getData = function() {
return $.map(this.data, function(value, index) {
return [value];
});
};
ApiService.prototype.getCurrent = function () {
return this.data[this.id];
};
ApiService.prototype.getAll = function () {
return this.data;
};
ApiService.prototype.unsetCurrrent = function () {
this.id = null;
};
ApiService.prototype.getName = function() {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((this).constructor.toString());
return (results && results.length > 1) ? results[1] : "";
};
return ApiService;
ApiService.prototype.getData = function () {
return $.map(this.data, function (value, index) {
return [value];
});
};
ApiService.prototype.getAll = function () {
return this.data;
};
ApiService.prototype.get = function (id) {
return this.data[id];
};
ApiService.prototype.getName = function () {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((this).constructor.toString());
return (results && results.length > 1) ? results[1] : '';
};
return ApiService;
});
+137 -76
View File
@@ -19,12 +19,39 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
/* global app OC */
app.factory('BoardService', function (ApiService, $http, $q) {
var BoardService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
BoardService.prototype = angular.copy(ApiService.prototype);
app.factory('BoardService', function(ApiService, $http, $q){
var BoardService = function($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
BoardService.prototype = angular.copy(ApiService.prototype);
BoardService.prototype.delete = function (id) {
var deferred = $q.defer();
var self = this;
$http.delete(this.baseUrl + '/' + id).then(function (response) {
self.data[id].deletedAt = response.data.deletedAt;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Deleting ' + self.endpoint + ' failed');
});
return deferred.promise;
};
BoardService.prototype.deleteUndo = function (id) {
var deferred = $q.defer();
var self = this;
var _id = id;
$http.post(this.baseUrl + '/' + id + '/deleteUndo').then(function (response) {
self.data[_id].deletedAt = 0;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Deleting ' + self.endpoint + ' failed');
});
return deferred.promise;
};
BoardService.prototype.searchUsers = function (search) {
var deferred = $q.defer();
@@ -50,12 +77,12 @@ app.factory('BoardService', function(ApiService, $http, $q){
}
self.sharees = [];
var users = response.ocs.data.exact.users.concat(response.ocs.data.users);
var groups = response.ocs.data.exact.groups.concat(response.ocs.data.groups);
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.slice(0, 4));
// filter out everyone who is already in the share list
angular.forEach(users, function (item) {
var acl = self.generateAcl('user', item);
var acl = self.generateAcl(OC.Share.SHARE_TYPE_USER, item);
var exists = false;
angular.forEach(self.getCurrent().acl, function (acl) {
if (acl.participant.primaryKey === item.value.shareWith) {
@@ -67,7 +94,7 @@ app.factory('BoardService', function(ApiService, $http, $q){
}
});
angular.forEach(groups, function (item) {
var acl = self.generateAcl('group', item);
var acl = self.generateAcl(OC.Share.SHARE_TYPE_GROUP, item);
var exists = false;
angular.forEach(self.getCurrent().acl, function (acl) {
if (acl.participant.primaryKey === item.value.shareWith) {
@@ -87,7 +114,7 @@ app.factory('BoardService', function(ApiService, $http, $q){
return deferred.promise;
};
BoardService.prototype.generateAcl = function(type, ocsItem) {
BoardService.prototype.generateAcl = function (type, ocsItem) {
return {
boardId: null,
id: null,
@@ -101,7 +128,7 @@ app.factory('BoardService', function(ApiService, $http, $q){
permissionManage: true,
permissionShare: true,
type: type
}
};
};
BoardService.prototype.addAcl = function (acl) {
@@ -114,6 +141,11 @@ app.factory('BoardService', function(ApiService, $http, $q){
board.acl = {};
}
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);
}, function (error) {
deferred.reject('Error creating ACL ' + _acl);
@@ -122,75 +154,104 @@ app.factory('BoardService', function(ApiService, $http, $q){
return deferred.promise;
};
BoardService.prototype.deleteAcl = function(acl) {
var board = this.getCurrent();
var deferred = $q.defer();
var self = this;
$http.delete(this.baseUrl + '/' + acl.boardId + '/acl/' + acl.id).then(function (response) {
delete board.acl[response.data.id];
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error deleting ACL ' + acl.id);
});
acl = null;
return deferred.promise;
};
BoardService.prototype.deleteAcl = function (acl) {
var board = this.getCurrent();
var deferred = $q.defer();
var self = this;
$http.delete(this.baseUrl + '/' + acl.boardId + '/acl/' + acl.id).then(function (response) {
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);
}, function (error) {
deferred.reject('Error deleting ACL ' + acl.id);
});
acl = null;
return deferred.promise;
};
BoardService.prototype.updateAcl = function(acl) {
var board = this.getCurrent();
var deferred = $q.defer();
var self = this;
var _acl = acl;
$http.put(this.baseUrl + '/' + acl.boardId + '/acl', _acl).then(function (response) {
board.acl[_acl.id] = response.data;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error updating ACL ' + _acl);
});
acl = null;
return deferred.promise;
};
BoardService.prototype.updateAcl = function (acl) {
var board = this.getCurrent();
var deferred = $q.defer();
var self = this;
var _acl = acl;
$http.put(this.baseUrl + '/' + acl.boardId + '/acl', _acl).then(function (response) {
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);
}, function (error) {
deferred.reject('Error updating ACL ' + _acl);
});
acl = null;
return deferred.promise;
};
BoardService.prototype.getPermissions = function() {
var board = this.getCurrent();
var deferred = $q.defer();
$http.get(this.baseUrl + '/' + board.id + '/permissions').then(function (response) {
board.permissions = response.data;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error fetching board permissions ' + board);
});
};
BoardService.prototype._updateUsers = function () {
if (!this.getCurrent() || !this.getCurrent().acl) {
return [];
}
BoardService.prototype.canRead = function() {
if(!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_READ'];
}
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.canEdit = function() {
if(!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_EDIT'];
}
BoardService.prototype.getUsers = function () {
if (this.getCurrent() && !this.getCurrent().users) {
this._updateUsers();
}
return this.getCurrent().users;
};
BoardService.prototype.canManage = function() {
if(!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_MANAGE'];
}
BoardService.prototype.canRead = function () {
if (!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_READ'];
};
BoardService.prototype.canShare = function() {
if(!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_SHARE'];
}
BoardService.prototype.canEdit = function () {
if (!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_EDIT'];
};
service = new BoardService($http, 'boards', $q);
return service;
});
BoardService.prototype.canManage = function (board) {
if (board !== null && board !== undefined) {
return board.permissions['PERMISSION_MANAGE'];
}
if (!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_MANAGE'];
};
BoardService.prototype.canShare = function () {
if (!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_SHARE'];
};
BoardService.prototype.isArchived = function () {
if (!this.getCurrent() || this.getCurrent().archived) {
return true;
}
return false;
};
return new BoardService($http, 'boards', $q);
});
+146 -70
View File
@@ -19,83 +19,159 @@
* 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){
var CardService = function($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
CardService.prototype = angular.copy(ApiService.prototype);
app.factory('CardService', function (ApiService, $http, $q) {
var CardService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
CardService.prototype = angular.copy(ApiService.prototype);
CardService.prototype.reorder = function(card, order) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/reorder', {cardId: card.id, order: order, stackId: card.stackId}).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.reorder = function (card, order) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/reorder', {
cardId: card.id,
order: order,
stackId: card.stackId
}).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.rename = function(card) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/rename', {cardId: card.id, title: card.title}).then(function (response) {
self.data[card.id].title = card.title;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while renaming ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.rename = function (card) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/rename', {
cardId: card.id,
title: card.title
}).then(function (response) {
self.data[card.id].title = card.title;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while renaming ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.assignLabel = function(card, label) {
var url = this.baseUrl + '/' + card + '/label/' + label;
var deferred = $q.defer();
var self = this;
$http.post(url).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.removeLabel = function(card, label) {
var url = this.baseUrl + '/' + card + '/label/' + label;
var deferred = $q.defer();
var self = this;
$http.delete(url).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.assignLabel = function (card, label) {
var url = this.baseUrl + '/' + card + '/label/' + label;
var deferred = $q.defer();
var self = this;
$http.post(url).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.removeLabel = function (card, label) {
var url = this.baseUrl + '/' + card + '/label/' + label;
var deferred = $q.defer();
var self = this;
$http.delete(url).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.archive = function (card) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/archive', {}).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
CardService.prototype.archive = function (card) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/archive', {}).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
};
CardService.prototype.unarchive = function (card) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/unarchive', {}).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
CardService.prototype.unarchive = function (card) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + card.id + '/unarchive', {}).then(function (response) {
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
};
CardService.prototype.assignUser = function (card, user) {
var deferred = $q.defer();
var self = this;
if (self.getCurrent().assignedUsers === null) {
self.getCurrent().assignedUsers = [];
}
$http.post(this.baseUrl + '/' + card.id + '/assign', {'userId': user}).then(function (response) {
self.getCurrent().assignedUsers.push(response.data);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
service = new CardService($http, 'cards', $q);
return service;
};
CardService.prototype.unassignUser = function (card, user) {
var deferred = $q.defer();
var self = this;
$http.delete(this.baseUrl + '/' + card.id + '/assign/' + user, {}).then(function (response) {
self.getCurrent().assignedUsers = self.getCurrent().assignedUsers.filter(function (obj) {
return obj.participant.uid !== user;
});
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
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);
return service;
});
+100
View File
@@ -0,0 +1,100 @@
/*
* @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 ($http, FileUploader, CardService) {
this.uploader = new FileUploader();
this.cardservice = CardService;
this.uploader.onAfterAddingFile = this.onAfterAddingFile.bind(this);
this.uploader.onSuccessItem = this.onSuccessItem.bind(this);
}
runUpload (fileItem, attachmentId) {
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment');
if (typeof attachmentId !== 'undefined') {
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment/' + attachmentId);
} else {
fileItem.formData = [
{
requesttoken: oc_requesttoken,
type: 'deck_file',
}
];
}
fileItem.headers = {requesttoken: oc_requesttoken};
this.uploader.uploadItem(fileItem);
}
onAfterAddingFile (fileItem) {
// Fetch card details before trying to upload so we can detect filename collisions properly
let self = this;
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) {
});
}
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);
}
}
app.service('FileService', FileService);
+7 -7
View File
@@ -19,12 +19,12 @@
* 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){
var LabelService = function($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
LabelService.prototype = angular.copy(ApiService.prototype);
service = new LabelService($http, 'labels', $q);
return service;
app.factory('LabelService', function (ApiService, $http, $q) {
var LabelService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
LabelService.prototype = angular.copy(ApiService.prototype);
return new LabelService($http, 'labels', $q);
});
+127 -78
View File
@@ -19,88 +19,137 @@
* 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){
var StackService = function($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
StackService.prototype = angular.copy(ApiService.prototype);
StackService.prototype.fetchAll = function(boardId) {
var deferred = $q.defer();
var self=this;
$http.get(this.baseUrl +'/'+boardId).then(function (response) {
self.clear();
self.addAll(response.data);
deferred.resolve(self.data);
}, function (error) {
deferred.reject('Error while loading stacks');
});
return deferred.promise;
};
/* global app angular */
app.factory('StackService', function (ApiService, CardService, $http, $q) {
var StackService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q);
};
StackService.prototype = angular.copy(ApiService.prototype);
StackService.prototype.fetchAll = function (boardId) {
var deferred = $q.defer();
var self = this;
$http.get(this.baseUrl + '/' + boardId).then(function (response) {
self.clear();
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);
}, function (error) {
deferred.reject('Error while loading stacks');
});
return deferred.promise;
};
StackService.prototype.fetchArchived = function(boardId) {
var deferred = $q.defer();
var self=this;
$http.get(this.baseUrl +'/'+boardId+'/archived').then(function (response) {
self.clear();
self.addAll(response.data);
deferred.resolve(self.data);
}, function (error) {
deferred.reject('Error while loading stacks');
});
return deferred.promise;
};
StackService.prototype.fetchArchived = function (boardId) {
var deferred = $q.defer();
var self = this;
$http.get(this.baseUrl + '/' + boardId + '/archived').then(function (response) {
self.clear();
self.addAll(response.data);
angular.forEach(response.data, function (entity) {
CardService.addAll(entity.cards);
});
deferred.resolve(self.data);
}, function (error) {
deferred.reject('Error while loading stacks');
});
return deferred.promise;
};
StackService.prototype.addCard = function(entity) {
if(!this.data[entity.stackId].cards) {
this.data[entity.stackId].cards = [];
}
this.data[entity.stackId].cards.push(entity);
};
StackService.prototype.addCard = function (entity) {
if (!this.data[entity.stackId].cards) {
this.data[entity.stackId].cards = [];
}
this.data[entity.stackId].cards.push(entity);
};
StackService.prototype.reorder = function(entity, order) {
// assign new order
for(var i=0, j=0;i<this.data[entity.stackId].cards.length;i++) {
if(this.data[entity.stackId].cards[i].id === entity.id) {
this.data[entity.stackId].cards[i].order = order;
}
if(j === order) {
j++;
}
if(this.data[entity.stackId].cards[i].id !== entity.id) {
this.data[entity.stackId].cards[i].order = j++;
}
}
// sort array by order
this.data[entity.stackId].cards.sort(function(a,b) {
if (a.order < b.order)
return -1;
if (a.order > b.order)
return 1;
return 0;
});
};
StackService.prototype.reorder = function (stack, order) {
var deferred = $q.defer();
var self = this;
$http.put(this.baseUrl + '/' + stack.id + '/reorder', {
stackId: stack.id,
order: order
}).then(function (response) {
angular.forEach(response.data, function (value, key) {
var id = value.id;
self.data[id].order = value.order;
});
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
StackService.prototype.updateCard = function(entity) {
var self = this;
var cards = this.data[entity.stackId].cards;
for(var i=0;i<cards.length;i++) {
if(cards[i].id == entity.id) {
cards[i] = entity;
}
}
};
StackService.prototype.removeCard = function(entity) {
var self = this;
var cards = this.data[entity.stackId].cards;
for(var i=0;i<cards.length;i++) {
if(cards[i].id == entity.id) {
cards.splice(i, 1);
}
}
};
service = new StackService($http, 'stacks', $q);
return service;
StackService.prototype.reorderCard = function (entity, order) {
// assign new order
for (var i = 0, j = 0; i < this.data[entity.stackId].cards.length; i++) {
if (this.data[entity.stackId].cards[i].id === entity.id) {
this.data[entity.stackId].cards[i].order = order;
}
if (j === order) {
j++;
}
if (this.data[entity.stackId].cards[i].id !== entity.id) {
this.data[entity.stackId].cards[i].order = j++;
}
}
// sort array by order
this.data[entity.stackId].cards.sort(function (a, b) {
if (a.order < b.order)
{return -1;}
if (a.order > b.order)
{return 1;}
return 0;
});
};
StackService.prototype.updateCard = function (entity) {
var self = this;
var cards = this.data[entity.stackId].cards;
for (var i = 0; i < cards.length; i++) {
if (cards[i].id === entity.id) {
cards[i] = entity;
}
}
};
StackService.prototype.removeCard = function (entity) {
var self = this;
var cards = this.data[entity.stackId].cards;
for (var i = 0; i < cards.length; i++) {
if (cards[i].id === entity.id) {
cards.splice(i, 1);
}
}
};
// FIXME: Should not show popup but proper undo mechanism
StackService.prototype.delete = function (id) {
var deferred = $q.defer();
var self = this;
OC.dialogs.confirm(t('deck', 'Are you sure you want to delete the stack with all of its data?'), t('deck', 'Delete'), function(state) {
if (!state) {
return;
}
$http.delete(self.baseUrl + '/' + id).then(function (response) {
self.remove(id);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Deleting ' + self.endpoint + ' failed');
});
});
return deferred.promise;
};
var service = new StackService($http, 'stacks', $q);
return service;
});
+49 -45
View File
@@ -19,59 +19,63 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import app from '../app/App.js';
app.factory('StatusService', function(){
// Status Helper
var StatusService = function() {
this.active = true;
this.icon = 'loading';
this.title = '';
this.text = '';
this.counter = 0;
};
app.factory('StatusService', function () {
// Status Helper
var StatusService = function () {
this.active = true;
this.icon = 'loading';
this.title = '';
this.text = '';
this.counter = 0;
};
StatusService.prototype.setStatus = function($icon, $title, $text) {
this.active = true;
this.icon = $icon;
this.title = $title;
this.text = $text;
};
StatusService.prototype.setStatus = function ($icon, $title, $text) {
this.active = true;
this.icon = $icon;
this.title = $title;
this.text = $text;
};
StatusService.prototype.setError = function($title, $text) {
this.active = true;
this.icon = 'error';
this.title = $title;
this.text = $text;
this.counter = 0;
};
StatusService.prototype.setError = function ($title, $text) {
this.active = true;
this.icon = 'error';
this.title = $title;
this.text = $text;
this.counter = 0;
};
StatusService.prototype.releaseWaiting = function() {
if(this.counter>0)
this.counter--;
if(this.counter<=0) {
this.active = false;
this.counter = 0;
}
};
StatusService.prototype.releaseWaiting = function () {
if (this.counter > 0) {
this.counter--;
}
if (this.counter <= 0) {
this.active = false;
this.counter = 0;
}
};
StatusService.prototype.retainWaiting = function() {
this.active = true;
this.icon = 'loading';
this.title = '';
this.text = '';
this.counter++;
};
StatusService.prototype.retainWaiting = function () {
this.active = true;
this.icon = 'loading';
this.title = '';
this.text = '';
this.counter++;
};
StatusService.prototype.unsetStatus = function() {
this.active = false;
};
StatusService.prototype.unsetStatus = function () {
this.active = false;
};
return {
getInstance: function() {
return new StatusService();
}
}
return {
getInstance: function () {
return new StatusService();
},
/* Shared StatusService instance between both ListController instances */
listStatus: new StatusService()
};
});
+63
View File
@@ -0,0 +1,63 @@
const path = require('path');
const webpack = require('webpack');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
node: {
fs: 'empty',
},
entry: {
deck: './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',
},
{
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'
})
]
};
+6
View File
@@ -0,0 +1,6 @@
const merge = require('webpack-merge');
const baseConfig = require('./webpack.config.js');
module.exports = merge(baseConfig, {
mode: 'development'
});
+15
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
})
]
}});
+37
View File
@@ -0,0 +1,37 @@
[package]
exclude = [
"build/",
".git",
"js/node_modules",
"js/tests",
"js/legacy",
"js/controller",
"js/directive",
"js/filters",
"js/service",
"js/bower.json",
"js/.bowerrc",
"js/.jshintrc",
"js/Gruntfile.js",
"js/package.json",
"js/package-lock.json",
"tests",
".codecov.yml",
"composer.json",
"composer.lock",
"_config.yml",
".drone.yml",
".travis.yml",
".eslintignore",
".eslintrc.yml",
".gitignore",
"issue_template.md",
"krankerl.toml",
"Makefile",
"run-eslint.sh"
]
before_cmds = [
'make clean-build',
'make build'
]
View File
+30
View File
@@ -0,0 +1,30 @@
OC.L10N.register(
"deck",
{
"Delete" : "Desaniciar",
"Hours" : "Hores",
"Minutes" : "Minutos",
"Finished" : "Finó",
"Action needed" : "Precísase aición",
"Later" : "Más sero",
"Deck" : "Deck",
"Submit" : "Unviar",
"Show archived cards" : "Amosar tarxetes archivaes",
"Close" : "Zarrar",
"Tags" : "Etiquetes",
"Select users or groups to share with" : "Esbilla usuarios o grupos colos que compartir",
"No matching user or group found." : "Nun s'alcontró dengún usuariu o grupu que concasara.",
"Loading" : "Cargando",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Xestionar",
"Discard share" : "Escartar compartición",
"Title" : "Títulu",
"Members" : "Miembros",
"More actions" : "Más aiciones",
"by" : "por",
"Click to set" : "Primi p'afitar",
"Description" : "Descripción",
"Saved" : "Guardóse"
},
"nplurals=2; plural=(n != 1);");
+28
View File
@@ -0,0 +1,28 @@
{ "translations": {
"Delete" : "Desaniciar",
"Hours" : "Hores",
"Minutes" : "Minutos",
"Finished" : "Finó",
"Action needed" : "Precísase aición",
"Later" : "Más sero",
"Deck" : "Deck",
"Submit" : "Unviar",
"Show archived cards" : "Amosar tarxetes archivaes",
"Close" : "Zarrar",
"Tags" : "Etiquetes",
"Select users or groups to share with" : "Esbilla usuarios o grupos colos que compartir",
"No matching user or group found." : "Nun s'alcontró dengún usuariu o grupu que concasara.",
"Loading" : "Cargando",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Xestionar",
"Discard share" : "Escartar compartición",
"Title" : "Títulu",
"Members" : "Miembros",
"More actions" : "Más aiciones",
"by" : "por",
"Click to set" : "Primi p'afitar",
"Description" : "Descripción",
"Saved" : "Guardóse"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -11
View File
@@ -1,33 +1,24 @@
OC.L10N.register(
"deck",
{
"Delete" : "Изтриване",
"Finished" : "Завършен",
"To review" : "За преглед",
"Action needed" : "Необходимо е действие",
"Later" : "По-късно",
"Archive" : "Архивиране",
"Unarchive" : "Разархивиране",
"Delete" : "Изтриване",
"Sharing" : "Споделяне",
"Labels" : "Етикети",
"Select users or groups to share with" : "Избор на потребители и групи за споделяне",
"No matching user or group found." : "Не са намерени съвпадащи потребители или групи",
"Share" : "Сподели",
"Edit" : "Редакция",
"Manage" : "Управление",
"Discard share" : "Отхвърляне на споделяне",
"Create a new label" : "Създаване на нов етикет",
"Members" : "Членове",
"Modified:" : "Променен на:",
"Created:" : "Създаден на:",
"by" : "от",
"Saved" : "Запазено",
"Attachments" : "Прикачени файлове",
"Comments" : "Коментари",
"History" : "История",
"Shared with you" : "Споделено с Вас",
"edit" : "редакция",
"delete" : "изтриване",
"remove share" : "премахване на споделяне"
"Saved" : "Запазено"
},
"nplurals=2; plural=(n != 1);");
+2 -11
View File
@@ -1,31 +1,22 @@
{ "translations": {
"Delete" : "Изтриване",
"Finished" : "Завършен",
"To review" : "За преглед",
"Action needed" : "Необходимо е действие",
"Later" : "По-късно",
"Archive" : "Архивиране",
"Unarchive" : "Разархивиране",
"Delete" : "Изтриване",
"Sharing" : "Споделяне",
"Labels" : "Етикети",
"Select users or groups to share with" : "Избор на потребители и групи за споделяне",
"No matching user or group found." : "Не са намерени съвпадащи потребители или групи",
"Share" : "Сподели",
"Edit" : "Редакция",
"Manage" : "Управление",
"Discard share" : "Отхвърляне на споделяне",
"Create a new label" : "Създаване на нов етикет",
"Members" : "Членове",
"Modified:" : "Променен на:",
"Created:" : "Създаден на:",
"by" : "от",
"Saved" : "Запазено",
"Attachments" : "Прикачени файлове",
"Comments" : "Коментари",
"History" : "История",
"Shared with you" : "Споделено с Вас",
"edit" : "редакция",
"delete" : "изтриване",
"remove share" : "премахване на споделяне"
"Saved" : "Запазено"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+36 -8
View File
@@ -1,26 +1,54 @@
OC.L10N.register(
"deck",
{
"Delete" : "Esborra",
"Remove user from card" : "Esborra usuari de la targeta",
"Hours" : "Hores",
"Minutes" : "Minuts",
"Finished" : "Acabat",
"To review" : "Per revisar",
"Action needed" : "Acció necessaria",
"Later" : "Més tard",
"Deck" : "Coberta",
"Add a new stack" : "Afegeix una nova pila",
"Show archived cards" : "Mostra les targetes arxivades",
"Hide archived cards" : "Amaga les targetes arxivades",
"Board details" : "Detalls de la junta",
"All Boards" : "Totes les juntes",
"Archived boards" : "Taulers arxivats",
"Archive" : "Arxiu",
"Delete" : "Esborra",
"Unarchive" : "Desbloquejar",
"Enter a card title" : "Introduïu un títol de la targeta",
"Sharing" : "Compartir",
"Labels" : "Etiqueta",
"Tags" : "Etiquetes",
"Select users or groups to share with" : "Seleccioneu usuaris o grups per compartir",
"No matching user or group found." : "No s'ha trobat cap usuari o grup coincident.",
"Share" : "Comparteix",
"Edit" : "Edita",
"Create a new label" : "Crea una nova etiqueta",
"Manage" : "Gestor",
"Discard share" : "Descarta la compartició",
"Create a new tag" : "Crea una nova etiqueta",
"Title" : "Title",
"Members" : "Membres",
"More actions" : "Més accions",
"Edit board" : "Edita el tauler",
"Archive board" : "Arxiu",
"Unarchive board" : "Desbloquejar",
"Delete board" : "Eliminat",
"Create new board" : "Crear nova",
"New board title" : "Nou títol",
"Modified:" : "Modificat:",
"Created:" : "Creat:",
"by" : "per",
"Due date" : "Per la data",
"Click to set" : "Feu clic per configurar",
"Remove due date" : "Elimina la data de venciment",
"Description" : "Descripció",
"Formatting help" : "Format d'ajuda",
"Saved" : "Desat",
"Comments" : "Comentaris",
"History" : "Història",
"Shared with you" : "Us han compartit",
"edit" : "edita",
"delete" : "esborra"
"Add a card description…" : "Afegeix una descripció de la targeta ...",
"Shared boards" : "Taulers compartits",
"Move board to archive" : "Mou la placa a l'arxiu",
"Create a new board" : "Crear nova"
},
"nplurals=2; plural=(n != 1);");
+36 -8
View File
@@ -1,24 +1,52 @@
{ "translations": {
"Delete" : "Esborra",
"Remove user from card" : "Esborra usuari de la targeta",
"Hours" : "Hores",
"Minutes" : "Minuts",
"Finished" : "Acabat",
"To review" : "Per revisar",
"Action needed" : "Acció necessaria",
"Later" : "Més tard",
"Deck" : "Coberta",
"Add a new stack" : "Afegeix una nova pila",
"Show archived cards" : "Mostra les targetes arxivades",
"Hide archived cards" : "Amaga les targetes arxivades",
"Board details" : "Detalls de la junta",
"All Boards" : "Totes les juntes",
"Archived boards" : "Taulers arxivats",
"Archive" : "Arxiu",
"Delete" : "Esborra",
"Unarchive" : "Desbloquejar",
"Enter a card title" : "Introduïu un títol de la targeta",
"Sharing" : "Compartir",
"Labels" : "Etiqueta",
"Tags" : "Etiquetes",
"Select users or groups to share with" : "Seleccioneu usuaris o grups per compartir",
"No matching user or group found." : "No s'ha trobat cap usuari o grup coincident.",
"Share" : "Comparteix",
"Edit" : "Edita",
"Create a new label" : "Crea una nova etiqueta",
"Manage" : "Gestor",
"Discard share" : "Descarta la compartició",
"Create a new tag" : "Crea una nova etiqueta",
"Title" : "Title",
"Members" : "Membres",
"More actions" : "Més accions",
"Edit board" : "Edita el tauler",
"Archive board" : "Arxiu",
"Unarchive board" : "Desbloquejar",
"Delete board" : "Eliminat",
"Create new board" : "Crear nova",
"New board title" : "Nou títol",
"Modified:" : "Modificat:",
"Created:" : "Creat:",
"by" : "per",
"Due date" : "Per la data",
"Click to set" : "Feu clic per configurar",
"Remove due date" : "Elimina la data de venciment",
"Description" : "Descripció",
"Formatting help" : "Format d'ajuda",
"Saved" : "Desat",
"Comments" : "Comentaris",
"History" : "Història",
"Shared with you" : "Us han compartit",
"edit" : "edita",
"delete" : "esborra"
"Add a card description…" : "Afegeix una descripció de la targeta ...",
"Shared boards" : "Taulers compartits",
"Move board to archive" : "Mou la placa a l'arxiu",
"Create a new board" : "Crear nova"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+48 -15
View File
@@ -1,44 +1,77 @@
OC.L10N.register(
"deck",
{
"Deck" : "Balík",
"Are you sure you want to delete this card with all of its data?" : "Opravdu chcete smazat tuto kartu a všechna její data?",
"Delete" : "Smazat",
"Remove user from card" : "Odebrat uživatele z karty",
"Hours" : "Hodiny",
"Minutes" : "Minuty",
"Are you sure you want to delete the stack with all of its data?" : "Opravdu chcete smazat stack a všechna data v něm?",
"The card \"%s\" on \"%s\" has reached its due date." : "U karty \"%s\" z tabule \"%s\" nastalo plánované datum dokončení.",
"The board \"%s\" has been shared with you by %s." : "Tabule \"%s\" s vámi byla nasdílena uživatelem %s.",
"{user} has shared the board %s with you." : "{user} s vámi nasdílel tabuli %s.",
"Finished" : "Dokončeno",
"To review" : "K revizi",
"Action needed" : "Nutná akce",
"Later" : "Později",
"Deck" : "Balík",
"Add a new stack" : "Přidat nový zásobník",
"Submit" : "Odeslat",
"Show archived cards" : "Zobrazit archivované karty",
"Hide archived cards" : "Skrýt archivované karty",
"Board details" : "Detaily desky",
"All Boards" : "Všechny desky",
"Archived boards" : "Archivované desky",
"Archive" : "Archiv",
"Unarchive" : "Zrušit archivování",
"Delete" : "Smazat",
"Enter a card title" : "Zadejte nadpis karty",
"Add card" : "Přidat kartu",
"Close" : "Zavřít",
"Sharing" : "Sdílení",
"Labels" : "Štítky",
"Tags" : "Značky",
"Select users or groups to share with" : "Vyberte uživatele nebo skupiny pro sdílení",
"Access for" : "Přístup pro",
"No matching user or group found." : "Nevyhovuje žádný uživatel ani skupina",
"Loading" : "Načítání",
"Share" : "Sdílet",
"Edit" : "Upravit",
"Manage" : "Spravovat",
"Discard share" : "Zrušit sdílení",
"Create a new label" : "Vytvořit nový štítek",
"Board title" : "Nadpis desky",
"Update" : "Aktualizovat",
"Create" : "Vytvořit",
"Create a new tag" : "Vytvořit nový štítek",
"Status" : "Stav",
"Title" : "Název",
"Members" : "Členové",
"More actions" : "Více akcí",
"Edit board" : "Upravit desku",
"Archive board" : "Archivovaná deska",
"Unarchive board" : "Odarchivovat desku",
"Delete board" : "Smazat desku",
"Reset" : "Obnovit",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule - Tabule bude jinak trvale odstraněna během příštího běhu cronjobu.",
"Create new board" : "VYtvořit ovou desku",
"New board title" : "Nadpis nové desky",
"Modified:" : "Upraveno:",
"Created:" : "Vytvořeno:",
"by" : "od",
"Choose a tag" : "Vyberte štítek",
"Add a tag" : "Přidat štítek",
"Select tags" : "Výběr štítků",
"Assign users" : "Přiřadit uživatele",
"Choose a user to assign" : "Zvolte uživatele kterého přiřadit",
"Assign this card to a user" : "Přiřadit kartu uživateli",
"Due date" : "Termín",
"Click to set" : "Klikněte pro výběr",
"Remove due date" : "Odstranit termín",
"Description" : "Popis",
"Formatting help" : "Nápověda k formátování",
"Saved" : "Uloženo",
"Add a card description ..." : "Přidat popis karty...",
"Attachments" : "Přílohy",
"Comments" : "Komentáře",
"History" : "Historie",
"All Boards" : "Všechny desky",
"Shared with you" : "Sdíleno s vámi",
"edit" : "upravit",
"delete" : "smazat",
"remove share" : "odebrat sdílení",
"Unsaved changes" : "Neuložené změny",
"Add a card description…" : "Přidat popis karty...",
"Shared boards" : "Sdílené desky",
"View more" : "Ukázat více",
"Move board to archive" : "Přesunout desku do archivu",
"Create a new board" : "Vytvořit novou desku"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
+48 -15
View File
@@ -1,42 +1,75 @@
{ "translations": {
"Deck" : "Balík",
"Are you sure you want to delete this card with all of its data?" : "Opravdu chcete smazat tuto kartu a všechna její data?",
"Delete" : "Smazat",
"Remove user from card" : "Odebrat uživatele z karty",
"Hours" : "Hodiny",
"Minutes" : "Minuty",
"Are you sure you want to delete the stack with all of its data?" : "Opravdu chcete smazat stack a všechna data v něm?",
"The card \"%s\" on \"%s\" has reached its due date." : "U karty \"%s\" z tabule \"%s\" nastalo plánované datum dokončení.",
"The board \"%s\" has been shared with you by %s." : "Tabule \"%s\" s vámi byla nasdílena uživatelem %s.",
"{user} has shared the board %s with you." : "{user} s vámi nasdílel tabuli %s.",
"Finished" : "Dokončeno",
"To review" : "K revizi",
"Action needed" : "Nutná akce",
"Later" : "Později",
"Deck" : "Balík",
"Add a new stack" : "Přidat nový zásobník",
"Submit" : "Odeslat",
"Show archived cards" : "Zobrazit archivované karty",
"Hide archived cards" : "Skrýt archivované karty",
"Board details" : "Detaily desky",
"All Boards" : "Všechny desky",
"Archived boards" : "Archivované desky",
"Archive" : "Archiv",
"Unarchive" : "Zrušit archivování",
"Delete" : "Smazat",
"Enter a card title" : "Zadejte nadpis karty",
"Add card" : "Přidat kartu",
"Close" : "Zavřít",
"Sharing" : "Sdílení",
"Labels" : "Štítky",
"Tags" : "Značky",
"Select users or groups to share with" : "Vyberte uživatele nebo skupiny pro sdílení",
"Access for" : "Přístup pro",
"No matching user or group found." : "Nevyhovuje žádný uživatel ani skupina",
"Loading" : "Načítání",
"Share" : "Sdílet",
"Edit" : "Upravit",
"Manage" : "Spravovat",
"Discard share" : "Zrušit sdílení",
"Create a new label" : "Vytvořit nový štítek",
"Board title" : "Nadpis desky",
"Update" : "Aktualizovat",
"Create" : "Vytvořit",
"Create a new tag" : "Vytvořit nový štítek",
"Status" : "Stav",
"Title" : "Název",
"Members" : "Členové",
"More actions" : "Více akcí",
"Edit board" : "Upravit desku",
"Archive board" : "Archivovaná deska",
"Unarchive board" : "Odarchivovat desku",
"Delete board" : "Smazat desku",
"Reset" : "Obnovit",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule - Tabule bude jinak trvale odstraněna během příštího běhu cronjobu.",
"Create new board" : "VYtvořit ovou desku",
"New board title" : "Nadpis nové desky",
"Modified:" : "Upraveno:",
"Created:" : "Vytvořeno:",
"by" : "od",
"Choose a tag" : "Vyberte štítek",
"Add a tag" : "Přidat štítek",
"Select tags" : "Výběr štítků",
"Assign users" : "Přiřadit uživatele",
"Choose a user to assign" : "Zvolte uživatele kterého přiřadit",
"Assign this card to a user" : "Přiřadit kartu uživateli",
"Due date" : "Termín",
"Click to set" : "Klikněte pro výběr",
"Remove due date" : "Odstranit termín",
"Description" : "Popis",
"Formatting help" : "Nápověda k formátování",
"Saved" : "Uloženo",
"Add a card description ..." : "Přidat popis karty...",
"Attachments" : "Přílohy",
"Comments" : "Komentáře",
"History" : "Historie",
"All Boards" : "Všechny desky",
"Shared with you" : "Sdíleno s vámi",
"edit" : "upravit",
"delete" : "smazat",
"remove share" : "odebrat sdílení",
"Unsaved changes" : "Neuložené změny",
"Add a card description…" : "Přidat popis karty...",
"Shared boards" : "Sdílené desky",
"View more" : "Ukázat více",
"Move board to archive" : "Přesunout desku do archivu",
"Create a new board" : "Vytvořit novou desku"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
+50 -15
View File
@@ -1,44 +1,79 @@
OC.L10N.register(
"deck",
{
"Deck" : "Tavle",
"Are you sure you want to delete this card with all of its data?" : "Er du sikker på, at du vil slette dette kort med alle dets data?",
"Delete" : "Slet",
"Remove user from card" : "Fjern bruger fra kort",
"Hours" : "Timer",
"Minutes" : "Minutter",
"Are you sure you want to delete the stack with all of its data?" : "Er du sikker på, at du ønsker at slette denne stak med alle data?",
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin udløbsdato.",
"The board \"%s\" has been shared with you by %s." : "Brættet \"%s\" er blevet delt med dig af %s.",
"{user} has shared the board %s with you." : "{user} har delt brættet %s med dig.",
"Finished" : "Færdiggjort",
"To review" : "Efterse",
"To review" : "Gennemse",
"Action needed" : "Handling påkrævet",
"Later" : "Senere",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Et Kanban-inspireret projekt- og styringsværktøj til Nextcloud",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck er et Kanban-inspireret organisationsværktøj beregnet til personlig planlægning og projektstyring for teams - integreret med Nextcloud.\n\n\n- 📥 Tilføj dine opgaver til kort og organiser dem\n- 📄 Skriv yderligere noter i Markdown\n- 🔖 Marker opgaver med tags for bedre organisering\n- 👥 Del med team, venner eller familie\n- 🚀 Organiser dit projekt",
"Add a new stack" : "Tilføj en ny stak",
"Submit" : "Tilføj",
"Show archived cards" : "Vis arkiverede kort",
"Hide archived cards" : "Skjul arkiverede kort",
"Board details" : "Liste detaljer",
"All Boards" : "Alle lister",
"Archived boards" : "Arkiverede lister",
"Archive" : "Arkivér",
"Unarchive" : "Annuller arkivering",
"Delete" : "Slet",
"Enter a card title" : "Angiv titel på kort",
"Add card" : "Tilføj kort",
"Close" : "Luk",
"Sharing" : "Deling",
"Labels" : "Labels",
"Tags" : "Mærkat",
"Select users or groups to share with" : "Vælg brugere eller grupper og dele med",
"Access for" : "Adgang for",
"No matching user or group found." : "Ingen bruger eller gruppe fundet",
"Loading" : "Loader",
"Share" : "Del",
"Edit" : "Redigér",
"Manage" : "Administrer ",
"Discard share" : "Kasser deling",
"Create a new label" : "Opret en ny etikette ",
"Board title" : "Titel på liste",
"Update" : "Opdatér",
"Create" : "Opret",
"Create a new tag" : "Opret et nyt mærkat",
"Status" : "Status",
"Title" : "Titel",
"Members" : "Medlemmer",
"More actions" : "Flere handlinger",
"Edit board" : "Rediger liste",
"Archive board" : "Arkivér liste",
"Unarchive board" : "Annuller arkivering af liste",
"Delete board" : "Slet liste",
"Reset" : "Nulstil",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Fortryd sletning af board - Ellers vil boardet blive slettet ved næste cronjob kørsel.",
"Create new board" : "Opret ny liste",
"New board title" : "Ny titel på liste",
"Modified:" : "Ændret:",
"Created:" : "Oprettet:",
"by" : "af",
"Choose a tag" : "Vælg et tag",
"Add a tag" : "Tilføj et tag",
"Select tags" : "Vælg tags",
"Assign users" : "Tildel brugere",
"Choose a user to assign" : "Vælg en bruger at tildele til",
"Assign this card to a user" : "Tildel dette kort til en bruger",
"Due date" : "Forfaldsdato",
"Click to set" : "Klik for at sætte",
"Remove due date" : "Fjern forfaldsdato",
"Description" : "Beskrivelse",
"Formatting help" : "Hjælp til formatering",
"Saved" : "Gemt",
"Add a card description ..." : "Tilføj en kort beskrivelse",
"Attachments" : "Vedhæftede filer",
"Comments" : "Kommentarer",
"History" : "Hostorik",
"All Boards" : "Alle lister",
"Shared with you" : "Delt med dig",
"edit" : "redigér",
"delete" : "slet",
"remove share" : "Fjern deling",
"Unsaved changes" : "Ikke gemte ændringer",
"Add a card description…" : "Tilføj en beskrivelse...",
"Shared boards" : "Delte lister",
"View more" : "Vis mere",
"Move board to archive" : "Flyt liste til arkiv",
"Create a new board" : "Opret ny liste"
},
"nplurals=2; plural=(n != 1);");
+50 -15
View File
@@ -1,42 +1,77 @@
{ "translations": {
"Deck" : "Tavle",
"Are you sure you want to delete this card with all of its data?" : "Er du sikker på, at du vil slette dette kort med alle dets data?",
"Delete" : "Slet",
"Remove user from card" : "Fjern bruger fra kort",
"Hours" : "Timer",
"Minutes" : "Minutter",
"Are you sure you want to delete the stack with all of its data?" : "Er du sikker på, at du ønsker at slette denne stak med alle data?",
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nået sin udløbsdato.",
"The board \"%s\" has been shared with you by %s." : "Brættet \"%s\" er blevet delt med dig af %s.",
"{user} has shared the board %s with you." : "{user} har delt brættet %s med dig.",
"Finished" : "Færdiggjort",
"To review" : "Efterse",
"To review" : "Gennemse",
"Action needed" : "Handling påkrævet",
"Later" : "Senere",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Et Kanban-inspireret projekt- og styringsværktøj til Nextcloud",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck er et Kanban-inspireret organisationsværktøj beregnet til personlig planlægning og projektstyring for teams - integreret med Nextcloud.\n\n\n- 📥 Tilføj dine opgaver til kort og organiser dem\n- 📄 Skriv yderligere noter i Markdown\n- 🔖 Marker opgaver med tags for bedre organisering\n- 👥 Del med team, venner eller familie\n- 🚀 Organiser dit projekt",
"Add a new stack" : "Tilføj en ny stak",
"Submit" : "Tilføj",
"Show archived cards" : "Vis arkiverede kort",
"Hide archived cards" : "Skjul arkiverede kort",
"Board details" : "Liste detaljer",
"All Boards" : "Alle lister",
"Archived boards" : "Arkiverede lister",
"Archive" : "Arkivér",
"Unarchive" : "Annuller arkivering",
"Delete" : "Slet",
"Enter a card title" : "Angiv titel på kort",
"Add card" : "Tilføj kort",
"Close" : "Luk",
"Sharing" : "Deling",
"Labels" : "Labels",
"Tags" : "Mærkat",
"Select users or groups to share with" : "Vælg brugere eller grupper og dele med",
"Access for" : "Adgang for",
"No matching user or group found." : "Ingen bruger eller gruppe fundet",
"Loading" : "Loader",
"Share" : "Del",
"Edit" : "Redigér",
"Manage" : "Administrer ",
"Discard share" : "Kasser deling",
"Create a new label" : "Opret en ny etikette ",
"Board title" : "Titel på liste",
"Update" : "Opdatér",
"Create" : "Opret",
"Create a new tag" : "Opret et nyt mærkat",
"Status" : "Status",
"Title" : "Titel",
"Members" : "Medlemmer",
"More actions" : "Flere handlinger",
"Edit board" : "Rediger liste",
"Archive board" : "Arkivér liste",
"Unarchive board" : "Annuller arkivering af liste",
"Delete board" : "Slet liste",
"Reset" : "Nulstil",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Fortryd sletning af board - Ellers vil boardet blive slettet ved næste cronjob kørsel.",
"Create new board" : "Opret ny liste",
"New board title" : "Ny titel på liste",
"Modified:" : "Ændret:",
"Created:" : "Oprettet:",
"by" : "af",
"Choose a tag" : "Vælg et tag",
"Add a tag" : "Tilføj et tag",
"Select tags" : "Vælg tags",
"Assign users" : "Tildel brugere",
"Choose a user to assign" : "Vælg en bruger at tildele til",
"Assign this card to a user" : "Tildel dette kort til en bruger",
"Due date" : "Forfaldsdato",
"Click to set" : "Klik for at sætte",
"Remove due date" : "Fjern forfaldsdato",
"Description" : "Beskrivelse",
"Formatting help" : "Hjælp til formatering",
"Saved" : "Gemt",
"Add a card description ..." : "Tilføj en kort beskrivelse",
"Attachments" : "Vedhæftede filer",
"Comments" : "Kommentarer",
"History" : "Hostorik",
"All Boards" : "Alle lister",
"Shared with you" : "Delt med dig",
"edit" : "redigér",
"delete" : "slet",
"remove share" : "Fjern deling",
"Unsaved changes" : "Ikke gemte ændringer",
"Add a card description…" : "Tilføj en beskrivelse...",
"Shared boards" : "Delte lister",
"View more" : "Vis mere",
"Move board to archive" : "Flyt liste til arkiv",
"Create a new board" : "Opret ny liste"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+53 -19
View File
@@ -1,44 +1,78 @@
OC.L10N.register(
"deck",
{
"Deck" : "Deck",
"Are you sure you want to delete this card with all of its data?" : "Möchtest Du wirklich diese Karte mit all ihren Daten löschen?",
"Delete" : "Löschen",
"Remove user from card" : "Benutzer von Karte entfernen",
"Hours" : "Stunden",
"Minutes" : "Minuten",
"Are you sure you want to delete the stack with all of its data?" : "Möchtest du diesen Stapel mit allen Daten wirklich löschen?",
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Dir geteilt.",
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Dir geteilt.",
"Finished" : "Abgeschlossen",
"To review" : "Zu bewerten",
"Action needed" : "Aktion erforderlich",
"To review" : "Zu überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für Nextcloud",
"Add a new stack" : "Stapel hinzufügen",
"Submit" : "Übermitteln",
"Show archived cards" : "Archivierte Karten anzeigen",
"Hide archived cards" : "Archivierte Karten ausblenden",
"Board details" : "Board-Details",
"All Boards" : "Alle Boards",
"Archived boards" : "Archivierte Boards",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Delete" : "Löschen",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Labels" : "Beschriftungen",
"Select users or groups to share with" : "Benutzern oder Gruppen auswählen, mit denen es geteilt werden soll",
"Tags" : "Schlagworte",
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
"Access for" : "Zugriff für",
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
"Share" : "Share",
"Loading" : "Lade",
"Share" : "Teilen",
"Edit" : "Bearbeiten",
"Manage" : "Verwalten",
"Discard share" : "Teilen aufheben",
"Create a new label" : "Neue Beschriftung erstellen",
"Board title" : "Board-Titel",
"Discard share" : "Teilen beenden",
"Update" : "Aktualisieren",
"Create" : "Erstellen",
"Create a new tag" : "Neues Etikett erstellen",
"Status" : "Status",
"Title" : "Titel",
"Members" : "Mitglieder",
"More actions" : "Weitere Aktionen",
"Edit board" : "Board bearbeiten",
"Archive board" : "Board archivieren",
"Unarchive board" : "Board dearchivieren",
"Delete board" : "Board löschen",
"Reset" : "Zurücksetzen",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
"Create new board" : "Neues Board erstellen",
"New board title" : "Neuer Board-Titel",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"by" : "von",
"Choose a tag" : "Schlagwort auswählen",
"Add a tag" : "Schlagwort hinzufügen",
"Select tags" : "Schlagworte auswählen",
"Assign users" : "Nutzer zuweisen",
"Choose a user to assign" : "Wähle einen Benutzer zum Zuweisen",
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
"Due date" : "Fälligkeitsdatum",
"Click to set" : "Klicken zum Übernehmen",
"Remove due date" : "Ablaufdatum löschen",
"Description" : "Beschreibung",
"Formatting help" : "Formatierungshilfe",
"Saved" : "Gespeichert",
"Add a card description ..." : "Eine Beschreibung der Karte hinzufügen",
"Attachments" : "Anhänge",
"Comments" : "Kommentare",
"History" : "Verlauf",
"All Boards" : "Alle Boards",
"Shared with you" : "Mit Dir geteilt",
"edit" : "Bearbeiten",
"delete" : "Löschen",
"remove share" : "Freigabe löschen",
"Unsaved changes" : "Ungesicherte Änderungen",
"Add a card description…" : "Eine Kartenbeschreibung hinzufügen…",
"Shared boards" : "Geteilte Boards",
"View more" : "Mehr anzeigen",
"Move board to archive" : "Board ins Archiv verschieben",
"Create a new board" : "Neues Board erstellen"
},
"nplurals=2; plural=(n != 1);");
+53 -19
View File
@@ -1,42 +1,76 @@
{ "translations": {
"Deck" : "Deck",
"Are you sure you want to delete this card with all of its data?" : "Möchtest Du wirklich diese Karte mit all ihren Daten löschen?",
"Delete" : "Löschen",
"Remove user from card" : "Benutzer von Karte entfernen",
"Hours" : "Stunden",
"Minutes" : "Minuten",
"Are you sure you want to delete the stack with all of its data?" : "Möchtest du diesen Stapel mit allen Daten wirklich löschen?",
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Dir geteilt.",
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Dir geteilt.",
"Finished" : "Abgeschlossen",
"To review" : "Zu bewerten",
"Action needed" : "Aktion erforderlich",
"To review" : "Zu überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für Nextcloud",
"Add a new stack" : "Stapel hinzufügen",
"Submit" : "Übermitteln",
"Show archived cards" : "Archivierte Karten anzeigen",
"Hide archived cards" : "Archivierte Karten ausblenden",
"Board details" : "Board-Details",
"All Boards" : "Alle Boards",
"Archived boards" : "Archivierte Boards",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Delete" : "Löschen",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Labels" : "Beschriftungen",
"Select users or groups to share with" : "Benutzern oder Gruppen auswählen, mit denen es geteilt werden soll",
"Tags" : "Schlagworte",
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
"Access for" : "Zugriff für",
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
"Share" : "Share",
"Loading" : "Lade",
"Share" : "Teilen",
"Edit" : "Bearbeiten",
"Manage" : "Verwalten",
"Discard share" : "Teilen aufheben",
"Create a new label" : "Neue Beschriftung erstellen",
"Board title" : "Board-Titel",
"Discard share" : "Teilen beenden",
"Update" : "Aktualisieren",
"Create" : "Erstellen",
"Create a new tag" : "Neues Etikett erstellen",
"Status" : "Status",
"Title" : "Titel",
"Members" : "Mitglieder",
"More actions" : "Weitere Aktionen",
"Edit board" : "Board bearbeiten",
"Archive board" : "Board archivieren",
"Unarchive board" : "Board dearchivieren",
"Delete board" : "Board löschen",
"Reset" : "Zurücksetzen",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
"Create new board" : "Neues Board erstellen",
"New board title" : "Neuer Board-Titel",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"by" : "von",
"Choose a tag" : "Schlagwort auswählen",
"Add a tag" : "Schlagwort hinzufügen",
"Select tags" : "Schlagworte auswählen",
"Assign users" : "Nutzer zuweisen",
"Choose a user to assign" : "Wähle einen Benutzer zum Zuweisen",
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
"Due date" : "Fälligkeitsdatum",
"Click to set" : "Klicken zum Übernehmen",
"Remove due date" : "Ablaufdatum löschen",
"Description" : "Beschreibung",
"Formatting help" : "Formatierungshilfe",
"Saved" : "Gespeichert",
"Add a card description ..." : "Eine Beschreibung der Karte hinzufügen",
"Attachments" : "Anhänge",
"Comments" : "Kommentare",
"History" : "Verlauf",
"All Boards" : "Alle Boards",
"Shared with you" : "Mit Dir geteilt",
"edit" : "Bearbeiten",
"delete" : "Löschen",
"remove share" : "Freigabe löschen",
"Unsaved changes" : "Ungesicherte Änderungen",
"Add a card description…" : "Eine Kartenbeschreibung hinzufügen…",
"Shared boards" : "Geteilte Boards",
"View more" : "Mehr anzeigen",
"Move board to archive" : "Board ins Archiv verschieben",
"Create a new board" : "Neues Board erstellen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+52 -18
View File
@@ -1,44 +1,78 @@
OC.L10N.register(
"deck",
{
"Deck" : "Deck",
"Are you sure you want to delete this card with all of its data?" : "Möchten Sie wirklich diese Karte mit all ihren Daten löschen?",
"Delete" : "Löschen",
"Remove user from card" : "Benutzer von Karte entfernen",
"Hours" : "Stunden",
"Minutes" : "Minuten",
"Are you sure you want to delete the stack with all of its data?" : "Möchten Sie diesen Stapel mit allen Daten wirklich löschen?",
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Ihnen geteilt.",
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Ihnen geteilt.",
"Finished" : "Abgeschlossen",
"To review" : "Zu bewerten",
"Action needed" : "Aktion erforderlich",
"To review" : "Zu überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für Nextcloud",
"Add a new stack" : "Neuen Stapel hinzufügen",
"Submit" : "Übermitteln",
"Show archived cards" : "Archivierte Karten anzeigen",
"Hide archived cards" : "Archivierte Karten ausblenden",
"Board details" : "Board-Details",
"All Boards" : "Alle Boards",
"Archived boards" : "Archivierte Boards",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Delete" : "Löschen",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Labels" : "Beschriftungen",
"Select users or groups to share with" : "Benutzern oder Gruppen auswählen, mit denen es geteilt werden soll",
"Tags" : "Schlagworte",
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
"Access for" : "Zugriff für",
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
"Loading" : "Lade",
"Share" : "Teilen",
"Edit" : "Bearbeiten",
"Manage" : "Verwalten",
"Discard share" : "Teilen aufheben",
"Create a new label" : "Neue Beschriftung erstellen",
"Board title" : "Board-Titel",
"Discard share" : "Teilen beenden",
"Update" : "Aktualisieren",
"Create" : "Erstellen",
"Create a new tag" : "Tag erstellen",
"Status" : "Status",
"Title" : "Titel",
"Members" : "Mitglieder",
"More actions" : "Weitere Aktionen",
"Edit board" : "Board bearbeiten",
"Archive board" : "Board archivieren",
"Unarchive board" : "Board dearchivieren",
"Delete board" : "Board löschen",
"Reset" : "Zurücksetzen",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
"Create new board" : "Neues Board erstellen",
"New board title" : "Neuer Board-Titel",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"by" : "von",
"Choose a tag" : "Schlagwort auswählen",
"Add a tag" : "Schlagwort hinzufügen",
"Select tags" : "Schlagworte auswählen",
"Assign users" : "Benutzer zuordnen",
"Choose a user to assign" : "Wählen Sie einen Benutzer zum Zuweisen",
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
"Due date" : "Zieltermin",
"Click to set" : "Setzen",
"Remove due date" : "Zieltermin entfernen",
"Description" : "Beschreibung",
"Formatting help" : "Formatierungshilfe",
"Saved" : "Gespeichert",
"Add a card description ..." : "Der Karte eine Beschreibung hinzufügen",
"Attachments" : "Anhänge",
"Comments" : "Kommentare",
"History" : "Verlauf",
"All Boards" : "Alle Boards",
"Shared with you" : "Mit Ihnen geteilt",
"edit" : "Bearbeiten",
"delete" : "Löschen",
"remove share" : "Freigabe löschen",
"Unsaved changes" : "Ungesicherte Änderungen",
"Add a card description…" : "Beschreibung hinzufügen…",
"Shared boards" : "Geteilte Boards",
"View more" : "Mehr anzeigen",
"Move board to archive" : "Board ins Archiv verschieben",
"Create a new board" : "Neues Board erstellen"
},
"nplurals=2; plural=(n != 1);");
+52 -18
View File
@@ -1,42 +1,76 @@
{ "translations": {
"Deck" : "Deck",
"Are you sure you want to delete this card with all of its data?" : "Möchten Sie wirklich diese Karte mit all ihren Daten löschen?",
"Delete" : "Löschen",
"Remove user from card" : "Benutzer von Karte entfernen",
"Hours" : "Stunden",
"Minutes" : "Minuten",
"Are you sure you want to delete the stack with all of its data?" : "Möchten Sie diesen Stapel mit allen Daten wirklich löschen?",
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Ihnen geteilt.",
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Ihnen geteilt.",
"Finished" : "Abgeschlossen",
"To review" : "Zu bewerten",
"Action needed" : "Aktion erforderlich",
"To review" : "Zu überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für Nextcloud",
"Add a new stack" : "Neuen Stapel hinzufügen",
"Submit" : "Übermitteln",
"Show archived cards" : "Archivierte Karten anzeigen",
"Hide archived cards" : "Archivierte Karten ausblenden",
"Board details" : "Board-Details",
"All Boards" : "Alle Boards",
"Archived boards" : "Archivierte Boards",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Delete" : "Löschen",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"Labels" : "Beschriftungen",
"Select users or groups to share with" : "Benutzern oder Gruppen auswählen, mit denen es geteilt werden soll",
"Tags" : "Schlagworte",
"Select users or groups to share with" : "Benutzer oder Gruppen auswählen, mit denen das Board geteilt werden soll",
"Access for" : "Zugriff für",
"No matching user or group found." : "Keine passenden Benutzer oder Gruppen gefunden.",
"Loading" : "Lade",
"Share" : "Teilen",
"Edit" : "Bearbeiten",
"Manage" : "Verwalten",
"Discard share" : "Teilen aufheben",
"Create a new label" : "Neue Beschriftung erstellen",
"Board title" : "Board-Titel",
"Discard share" : "Teilen beenden",
"Update" : "Aktualisieren",
"Create" : "Erstellen",
"Create a new tag" : "Tag erstellen",
"Status" : "Status",
"Title" : "Titel",
"Members" : "Mitglieder",
"More actions" : "Weitere Aktionen",
"Edit board" : "Board bearbeiten",
"Archive board" : "Board archivieren",
"Unarchive board" : "Board dearchivieren",
"Delete board" : "Board löschen",
"Reset" : "Zurücksetzen",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Löschen des Boards rückgängig machen - Andernfalls wird das Board beim nächsten CronJob-Lauf gelöscht.",
"Create new board" : "Neues Board erstellen",
"New board title" : "Neuer Board-Titel",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"by" : "von",
"Choose a tag" : "Schlagwort auswählen",
"Add a tag" : "Schlagwort hinzufügen",
"Select tags" : "Schlagworte auswählen",
"Assign users" : "Benutzer zuordnen",
"Choose a user to assign" : "Wählen Sie einen Benutzer zum Zuweisen",
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
"Due date" : "Zieltermin",
"Click to set" : "Setzen",
"Remove due date" : "Zieltermin entfernen",
"Description" : "Beschreibung",
"Formatting help" : "Formatierungshilfe",
"Saved" : "Gespeichert",
"Add a card description ..." : "Der Karte eine Beschreibung hinzufügen",
"Attachments" : "Anhänge",
"Comments" : "Kommentare",
"History" : "Verlauf",
"All Boards" : "Alle Boards",
"Shared with you" : "Mit Ihnen geteilt",
"edit" : "Bearbeiten",
"delete" : "Löschen",
"remove share" : "Freigabe löschen",
"Unsaved changes" : "Ungesicherte Änderungen",
"Add a card description…" : "Beschreibung hinzufügen…",
"Shared boards" : "Geteilte Boards",
"View more" : "Mehr anzeigen",
"Move board to archive" : "Board ins Archiv verschieben",
"Create a new board" : "Neues Board erstellen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+42 -9
View File
@@ -1,30 +1,63 @@
OC.L10N.register(
"deck",
{
"Are you sure you want to delete this card with all of its data?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την κάρτα με όλα τα δεδομένα της;",
"Delete" : "Διαγραφή",
"Remove user from card" : "Αφαίρεση χρήστη από την κάρτα",
"Hours" : "Ώρες",
"Minutes" : "Λεπτά",
"The card \"%s\" on \"%s\" has reached its due date." : "Η κάρτα \"1%s\" στο \"1%s\" έχει λήξει.",
"Finished" : "Ολοκληρώθηκε",
"To review" : "Προς επισκόπηση",
"Action needed" : "Απαιτείται ενέργεια",
"Later" : "Αργότερα",
"Deck" : "Deck",
"Add a new stack" : "Πρόσθεσε νέα συστοιχία",
"Submit" : "Υποβολή",
"Show archived cards" : "Εμφάνιση καρτελών που αρχειοθετήθηκαν",
"Hide archived cards" : "Απόκρυψη καρτελών που αρχειοθετήθηκαν",
"Board details" : "Λεπτομέριες πίνακα",
"All Boards" : "Όλοι οι πίνακες",
"Archived boards" : "Αρχειοθέτηση πινάκων ",
"Archive" : "Αρχειοθέτηση",
"Unarchive" : "Αναίρεση αρχειοθέτησης",
"Delete" : "Διαγραφή",
"Labels" : "Ετικέτες",
"Enter a card title" : "Καταχωρίστε έναν τίτλο κάρτας",
"Add card" : "Προσθήκη κάρτας",
"Close" : "Κλείσιμο",
"Sharing" : "Διαμοιρασμός",
"Tags" : "Ετικέτες",
"Select users or groups to share with" : "Επιλέξτε χρήστες ή ομάδες με τις οποίες θα μοιραστείτε",
"No matching user or group found." : "Δεν βρέθηκε χρήστης ή ομάδα να ταιριάζει.",
"Loading" : "Γίνεται φόρτωση",
"Share" : "Διαμοιρασμός",
"Edit" : "Επεξεργασία",
"Manage" : "Διαχείριση",
"Create a new label" : "Δημιουργία νέας ετικέτας",
"Discard share" : "Απόρριψη διαμοιρασμού",
"Update" : "Ενημέρωση",
"Create" : "Δημιουργία",
"Create a new tag" : "Δημιούργησε νέα ετικέτα",
"Title" : "Τίτλος",
"Members" : "Μέλη",
"More actions" : "Περισσότερες ενέργειες",
"Edit board" : "Επεξεργασία πίνακα",
"Archive board" : "Αρχειοθέτηση πίνακα",
"Unarchive board" : "Αναίρεση αρχειοθέτησης πίνακα",
"Delete board" : "Διαγραφή πίνακα",
"Create new board" : "Δημιουργία νέου πίνακα",
"New board title" : "Νέος τίτλος πίνακα",
"Modified:" : "Τροποποιήθηκε:",
"Created:" : "Δημιουργήθηκε:",
"by" : "από",
"Due date" : "Ημερομηνία λήξης",
"Click to set" : "Κλικ για να ορίσετε",
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
"Description" : "Περιγραφή",
"Formatting help" : "Βοήθεια μορφοποίησης",
"Saved" : "Αποθηκεύτηκε",
"Add a card description ..." : "Προσθήκη περιγραφής καρτέλας ...",
"Attachments" : "Συνημμένα",
"Comments" : "Σχόλια",
"History" : "Ιστορικό",
"edit" : "επεξεργασία",
"delete" : "διαγραφή"
"Add a card description" : "Προσθήκη περιγραφής κάρτας...",
"Shared boards" : "Διαμοιρασμένοι πίνακες",
"View more" : "Προβολή περισσοτέρων",
"Move board to archive" : "Μετακίνηση πίνακα στην αρχειοθήκη",
"Create a new board" : "Δημιουργία νέου πίνακα"
},
"nplurals=2; plural=(n != 1);");
+42 -9
View File
@@ -1,28 +1,61 @@
{ "translations": {
"Are you sure you want to delete this card with all of its data?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την κάρτα με όλα τα δεδομένα της;",
"Delete" : "Διαγραφή",
"Remove user from card" : "Αφαίρεση χρήστη από την κάρτα",
"Hours" : "Ώρες",
"Minutes" : "Λεπτά",
"The card \"%s\" on \"%s\" has reached its due date." : "Η κάρτα \"1%s\" στο \"1%s\" έχει λήξει.",
"Finished" : "Ολοκληρώθηκε",
"To review" : "Προς επισκόπηση",
"Action needed" : "Απαιτείται ενέργεια",
"Later" : "Αργότερα",
"Deck" : "Deck",
"Add a new stack" : "Πρόσθεσε νέα συστοιχία",
"Submit" : "Υποβολή",
"Show archived cards" : "Εμφάνιση καρτελών που αρχειοθετήθηκαν",
"Hide archived cards" : "Απόκρυψη καρτελών που αρχειοθετήθηκαν",
"Board details" : "Λεπτομέριες πίνακα",
"All Boards" : "Όλοι οι πίνακες",
"Archived boards" : "Αρχειοθέτηση πινάκων ",
"Archive" : "Αρχειοθέτηση",
"Unarchive" : "Αναίρεση αρχειοθέτησης",
"Delete" : "Διαγραφή",
"Labels" : "Ετικέτες",
"Enter a card title" : "Καταχωρίστε έναν τίτλο κάρτας",
"Add card" : "Προσθήκη κάρτας",
"Close" : "Κλείσιμο",
"Sharing" : "Διαμοιρασμός",
"Tags" : "Ετικέτες",
"Select users or groups to share with" : "Επιλέξτε χρήστες ή ομάδες με τις οποίες θα μοιραστείτε",
"No matching user or group found." : "Δεν βρέθηκε χρήστης ή ομάδα να ταιριάζει.",
"Loading" : "Γίνεται φόρτωση",
"Share" : "Διαμοιρασμός",
"Edit" : "Επεξεργασία",
"Manage" : "Διαχείριση",
"Create a new label" : "Δημιουργία νέας ετικέτας",
"Discard share" : "Απόρριψη διαμοιρασμού",
"Update" : "Ενημέρωση",
"Create" : "Δημιουργία",
"Create a new tag" : "Δημιούργησε νέα ετικέτα",
"Title" : "Τίτλος",
"Members" : "Μέλη",
"More actions" : "Περισσότερες ενέργειες",
"Edit board" : "Επεξεργασία πίνακα",
"Archive board" : "Αρχειοθέτηση πίνακα",
"Unarchive board" : "Αναίρεση αρχειοθέτησης πίνακα",
"Delete board" : "Διαγραφή πίνακα",
"Create new board" : "Δημιουργία νέου πίνακα",
"New board title" : "Νέος τίτλος πίνακα",
"Modified:" : "Τροποποιήθηκε:",
"Created:" : "Δημιουργήθηκε:",
"by" : "από",
"Due date" : "Ημερομηνία λήξης",
"Click to set" : "Κλικ για να ορίσετε",
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
"Description" : "Περιγραφή",
"Formatting help" : "Βοήθεια μορφοποίησης",
"Saved" : "Αποθηκεύτηκε",
"Add a card description ..." : "Προσθήκη περιγραφής καρτέλας ...",
"Attachments" : "Συνημμένα",
"Comments" : "Σχόλια",
"History" : "Ιστορικό",
"edit" : "επεξεργασία",
"delete" : "διαγραφή"
"Add a card description" : "Προσθήκη περιγραφής κάρτας...",
"Shared boards" : "Διαμοιρασμένοι πίνακες",
"View more" : "Προβολή περισσοτέρων",
"Move board to archive" : "Μετακίνηση πίνακα στην αρχειοθήκη",
"Create a new board" : "Δημιουργία νέου πίνακα"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+79
View File
@@ -0,0 +1,79 @@
OC.L10N.register(
"deck",
{
"Are you sure you want to delete this card with all of its data?" : "Are you sure you want to delete this card with all of its data?",
"Delete" : "Delete",
"Remove user from card" : "Remove user from card",
"Hours" : "Hours",
"Minutes" : "Minutes",
"Are you sure you want to delete the stack with all of its data?" : "Are you sure you want to delete the stack with all of its data?",
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
"{user} has shared the board %s with you." : "{user} has shared the board %s with you.",
"Finished" : "Finished",
"To review" : "To review",
"Action needed" : "Action needed",
"Later" : "Later",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "A kanban style project and personal management tool for Nextcloud",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck is a kanban style organization tool aimed at personal planning and project organisation for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organised",
"Add a new stack" : "Add a new stack",
"Submit" : "Submit",
"Show archived cards" : "Show archived cards",
"Hide archived cards" : "Hide archived cards",
"Board details" : "Board details",
"All Boards" : "All Boards",
"Archived boards" : "Archived boards",
"Archive" : "Archive",
"Unarchive" : "Unarchive",
"Enter a card title" : "Enter a card title",
"Add card" : "Add card",
"Close" : "Close",
"Sharing" : "Sharing",
"Tags" : "Tags",
"Select users or groups to share with" : "Select users or groups to share with",
"Access for" : "Access for",
"No matching user or group found." : "No matching user or group found.",
"Loading" : "Loading",
"Share" : "Share",
"Edit" : "Edit",
"Manage" : "Manage",
"Discard share" : "Discard share",
"Update" : "Update",
"Create" : "Create",
"Create a new tag" : "Create a new tag",
"Status" : "Status",
"Title" : "Title",
"Members" : "Members",
"More actions" : "More actions",
"Edit board" : "Edit board",
"Archive board" : "Archive board",
"Unarchive board" : "Unarchive board",
"Delete board" : "Delete board",
"Reset" : "Reset",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Undo board deletion - Otherwise the board will be deleted during the next cronjob run.",
"Create new board" : "Create new board",
"New board title" : "New board title",
"Modified:" : "Modified:",
"Created:" : "Created:",
"by" : "by",
"Choose a tag" : "Choose a tag",
"Add a tag" : "Add a tag",
"Select tags" : "Select tags",
"Assign users" : "Assign users",
"Choose a user to assign" : "Choose a user to assign",
"Assign this card to a user" : "Assign this card to a user",
"Due date" : "Due date",
"Click to set" : "Click to set",
"Remove due date" : "Remove due date",
"Description" : "Description",
"Formatting help" : "Formatting help",
"Saved" : "Saved",
"Unsaved changes" : "Unsaved changes",
"Add a card description…" : "Add a card description…",
"Shared boards" : "Shared boards",
"View more" : "View more",
"Move board to archive" : "Move board to archive",
"Create a new board" : "Create a new board"
},
"nplurals=2; plural=(n != 1);");
+77
View File
@@ -0,0 +1,77 @@
{ "translations": {
"Are you sure you want to delete this card with all of its data?" : "Are you sure you want to delete this card with all of its data?",
"Delete" : "Delete",
"Remove user from card" : "Remove user from card",
"Hours" : "Hours",
"Minutes" : "Minutes",
"Are you sure you want to delete the stack with all of its data?" : "Are you sure you want to delete the stack with all of its data?",
"The card \"%s\" on \"%s\" has reached its due date." : "The card \"%s\" on \"%s\" has reached its due date.",
"The board \"%s\" has been shared with you by %s." : "The board \"%s\" has been shared with you by %s.",
"{user} has shared the board %s with you." : "{user} has shared the board %s with you.",
"Finished" : "Finished",
"To review" : "To review",
"Action needed" : "Action needed",
"Later" : "Later",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "A kanban style project and personal management tool for Nextcloud",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck is a kanban style organization tool aimed at personal planning and project organisation for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organised",
"Add a new stack" : "Add a new stack",
"Submit" : "Submit",
"Show archived cards" : "Show archived cards",
"Hide archived cards" : "Hide archived cards",
"Board details" : "Board details",
"All Boards" : "All Boards",
"Archived boards" : "Archived boards",
"Archive" : "Archive",
"Unarchive" : "Unarchive",
"Enter a card title" : "Enter a card title",
"Add card" : "Add card",
"Close" : "Close",
"Sharing" : "Sharing",
"Tags" : "Tags",
"Select users or groups to share with" : "Select users or groups to share with",
"Access for" : "Access for",
"No matching user or group found." : "No matching user or group found.",
"Loading" : "Loading",
"Share" : "Share",
"Edit" : "Edit",
"Manage" : "Manage",
"Discard share" : "Discard share",
"Update" : "Update",
"Create" : "Create",
"Create a new tag" : "Create a new tag",
"Status" : "Status",
"Title" : "Title",
"Members" : "Members",
"More actions" : "More actions",
"Edit board" : "Edit board",
"Archive board" : "Archive board",
"Unarchive board" : "Unarchive board",
"Delete board" : "Delete board",
"Reset" : "Reset",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Undo board deletion - Otherwise the board will be deleted during the next cronjob run.",
"Create new board" : "Create new board",
"New board title" : "New board title",
"Modified:" : "Modified:",
"Created:" : "Created:",
"by" : "by",
"Choose a tag" : "Choose a tag",
"Add a tag" : "Add a tag",
"Select tags" : "Select tags",
"Assign users" : "Assign users",
"Choose a user to assign" : "Choose a user to assign",
"Assign this card to a user" : "Assign this card to a user",
"Due date" : "Due date",
"Click to set" : "Click to set",
"Remove due date" : "Remove due date",
"Description" : "Description",
"Formatting help" : "Formatting help",
"Saved" : "Saved",
"Unsaved changes" : "Unsaved changes",
"Add a card description…" : "Add a card description…",
"Shared boards" : "Shared boards",
"View more" : "View more",
"Move board to archive" : "Move board to archive",
"Create a new board" : "Create a new board"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+51 -16
View File
@@ -1,44 +1,79 @@
OC.L10N.register(
"deck",
{
"Deck" : "Deck",
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro de que quieres eliminar esta tarjeta con todos sus datos?",
"Delete" : "Eliminar",
"Remove user from card" : "Eliminar usuario de la tarjeta",
"Hours" : "Horas",
"Minutes" : "Minutos",
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro de que quieres eliminar el mazo con todos sus datos?",
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo.",
"Finished" : "Finalizado",
"To review" : "Para revisar",
"Action needed" : "Se necesita una acción",
"Action needed" : "Acción necesaria",
"Later" : "Después",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Una herramienta de manejo de proyectos y personal al estilo kanban para Nextcloud.",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deckes una herramienta de organización al estilo kanban enfocada en la planificación personal y en la organización de proyectos para equipos, integrada en Nextcloud.\n\n\n- 📥 Añade tus tareas a tarjetas y ordénalas\n- 📄 Escribe notas adicionales en markdown\n- 🔖 Asigna etiquetas para una organización aún mejor\n- 👥 Comparte con tu equipo, amigos o familia\n- 🚀 Organiza tu proyecto",
"Add a new stack" : "Añadir nuevo montón",
"Submit" : "Enviar",
"Show archived cards" : "Mostrar tarjetas archivadas",
"Hide archived cards" : "Ocultar tarjetas archivadas",
"Board details" : "Detalles del tablero",
"All Boards" : "Todos los tableros",
"Archived boards" : "Tableros archivados",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Delete" : "Eliminar",
"Enter a card title" : "Introducir un título de tarjeta",
"Enter a card title" : "Introducir título de tarjeta",
"Add card" : "Añadir tarjeta",
"Close" : "Cerrar",
"Sharing" : "Compartir",
"Labels" : "Etiquetas",
"Tags" : "Etiquetas",
"Select users or groups to share with" : "Seleccionar usuarios o grupos con los que compartir",
"Access for" : "Acceso para",
"No matching user or group found." : "No se encontraron usuarios o grupos coincidentes.",
"Loading" : "Cargando",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Organizar",
"Discard share" : "Descartar compartición",
"Create a new label" : "Crear una nueva etiqueta",
"Board title" : "Título del tablero",
"Update" : "Actualizar",
"Create" : "Crear",
"Create a new tag" : "Crear una etiqueta nueva",
"Status" : "Estado",
"Title" : "Título",
"Members" : "Miembros",
"More actions" : "Más acciones",
"Edit board" : "Editar tablero",
"Archive board" : "Archivar tablero",
"Unarchive board" : "Desarchivar tablero",
"Delete board" : "Eliminar tablero",
"Reset" : "Resetear",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado del tablero. Si no, el tablero será eliminado durante la próxima ejecución del cronjob.",
"Create new board" : "Crear nuevo tablero",
"New board title" : "Nuevo título de tablero",
"Modified:" : "Modificado: ",
"Created:" : "Creado: ",
"by" : "por",
"Choose a tag" : "Escoge una etiqueta",
"Add a tag" : "Añade una etiqueta",
"Select tags" : "Selecciona etiquetas",
"Assign users" : "Asignar usuarios",
"Choose a user to assign" : "Escoge un usuario al que asignar",
"Assign this card to a user" : "Asignar esta tarjeta a un usuario",
"Due date" : "Fecha límite",
"Click to set" : "Pinchar para establecer",
"Remove due date" : "Eliminar fecha límite",
"Description" : "Descripción",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Add a card description ..." : "Añadir una descripción de la tarjeta...",
"Attachments" : "Adjuntos",
"Comments" : "Comentario",
"History" : "Historia",
"All Boards" : "Todos los tableros",
"Shared with you" : "Compartido contigo",
"edit" : "editar",
"delete" : "eliminar",
"remove share" : "eliminar compartición",
"Unsaved changes" : "Cambios no guardados",
"Add a card description…" : "Añadir una descripción de tarjeta...",
"Shared boards" : "Tableros compartidos",
"View more" : "Ver más",
"Move board to archive" : "Mover tablero al archivo",
"Create a new board" : "Crear un tablero nuevo"
},
"nplurals=2; plural=(n != 1);");
+51 -16
View File
@@ -1,42 +1,77 @@
{ "translations": {
"Deck" : "Deck",
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro de que quieres eliminar esta tarjeta con todos sus datos?",
"Delete" : "Eliminar",
"Remove user from card" : "Eliminar usuario de la tarjeta",
"Hours" : "Horas",
"Minutes" : "Minutos",
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro de que quieres eliminar el mazo con todos sus datos?",
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo.",
"Finished" : "Finalizado",
"To review" : "Para revisar",
"Action needed" : "Se necesita una acción",
"Action needed" : "Acción necesaria",
"Later" : "Después",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Una herramienta de manejo de proyectos y personal al estilo kanban para Nextcloud.",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deckes una herramienta de organización al estilo kanban enfocada en la planificación personal y en la organización de proyectos para equipos, integrada en Nextcloud.\n\n\n- 📥 Añade tus tareas a tarjetas y ordénalas\n- 📄 Escribe notas adicionales en markdown\n- 🔖 Asigna etiquetas para una organización aún mejor\n- 👥 Comparte con tu equipo, amigos o familia\n- 🚀 Organiza tu proyecto",
"Add a new stack" : "Añadir nuevo montón",
"Submit" : "Enviar",
"Show archived cards" : "Mostrar tarjetas archivadas",
"Hide archived cards" : "Ocultar tarjetas archivadas",
"Board details" : "Detalles del tablero",
"All Boards" : "Todos los tableros",
"Archived boards" : "Tableros archivados",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Delete" : "Eliminar",
"Enter a card title" : "Introducir un título de tarjeta",
"Enter a card title" : "Introducir título de tarjeta",
"Add card" : "Añadir tarjeta",
"Close" : "Cerrar",
"Sharing" : "Compartir",
"Labels" : "Etiquetas",
"Tags" : "Etiquetas",
"Select users or groups to share with" : "Seleccionar usuarios o grupos con los que compartir",
"Access for" : "Acceso para",
"No matching user or group found." : "No se encontraron usuarios o grupos coincidentes.",
"Loading" : "Cargando",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Organizar",
"Discard share" : "Descartar compartición",
"Create a new label" : "Crear una nueva etiqueta",
"Board title" : "Título del tablero",
"Update" : "Actualizar",
"Create" : "Crear",
"Create a new tag" : "Crear una etiqueta nueva",
"Status" : "Estado",
"Title" : "Título",
"Members" : "Miembros",
"More actions" : "Más acciones",
"Edit board" : "Editar tablero",
"Archive board" : "Archivar tablero",
"Unarchive board" : "Desarchivar tablero",
"Delete board" : "Eliminar tablero",
"Reset" : "Resetear",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado del tablero. Si no, el tablero será eliminado durante la próxima ejecución del cronjob.",
"Create new board" : "Crear nuevo tablero",
"New board title" : "Nuevo título de tablero",
"Modified:" : "Modificado: ",
"Created:" : "Creado: ",
"by" : "por",
"Choose a tag" : "Escoge una etiqueta",
"Add a tag" : "Añade una etiqueta",
"Select tags" : "Selecciona etiquetas",
"Assign users" : "Asignar usuarios",
"Choose a user to assign" : "Escoge un usuario al que asignar",
"Assign this card to a user" : "Asignar esta tarjeta a un usuario",
"Due date" : "Fecha límite",
"Click to set" : "Pinchar para establecer",
"Remove due date" : "Eliminar fecha límite",
"Description" : "Descripción",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Add a card description ..." : "Añadir una descripción de la tarjeta...",
"Attachments" : "Adjuntos",
"Comments" : "Comentario",
"History" : "Historia",
"All Boards" : "Todos los tableros",
"Shared with you" : "Compartido contigo",
"edit" : "editar",
"delete" : "eliminar",
"remove share" : "eliminar compartición",
"Unsaved changes" : "Cambios no guardados",
"Add a card description…" : "Añadir una descripción de tarjeta...",
"Shared boards" : "Tableros compartidos",
"View more" : "Ver más",
"Move board to archive" : "Mover tablero al archivo",
"Create a new board" : "Crear un tablero nuevo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+73
View File
@@ -0,0 +1,73 @@
OC.L10N.register(
"deck",
{
"Delete" : "Borrar",
"Hours" : "Horas",
"Minutes" : "Minutos",
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
"Finished" : "Terminado",
"To review" : "Para revisar",
"Action needed" : "Acción requerida",
"Later" : "Después",
"Deck" : "Deck",
"Add a new stack" : "Agregar una nueva pila",
"Submit" : "Enviar",
"Show archived cards" : "Mostrar tarjetas archivadas",
"Hide archived cards" : "Ocultar tarjetas archivadas",
"Board details" : "Detalles del tablero",
"All Boards" : "Todos los Tableros",
"Archived boards" : "Tableros archivados",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Enter a card title" : "Ingresa el título de la tarjeta",
"Add card" : "Agregar tarjeta",
"Close" : "Cerrar",
"Sharing" : "Compartiendo",
"Tags" : "Etiquetas",
"Select users or groups to share with" : "Selecciona los usuarios o grupos con los cuales compartir",
"Access for" : "Acceso para",
"No matching user or group found." : "No se encontraron coincidencias de usuarios o grupos.",
"Loading" : "Cargando",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Administrar",
"Discard share" : "Descartar elemento compartido",
"Update" : "Actualizar",
"Create" : "Crear",
"Create a new tag" : "Crear una nueva etiqueta",
"Status" : "Estatus",
"Title" : "Título",
"Members" : "Miembros",
"More actions" : "Más acciones",
"Edit board" : "Editar el tablero",
"Archive board" : "Archivar tablero",
"Unarchive board" : "Desarchivar tablero",
"Delete board" : "Borrar tableros",
"Reset" : "Reiniciar",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
"Create new board" : "Crear un nuevo tablero",
"New board title" : "Nuevo título del tablero",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"by" : "por",
"Choose a tag" : "Elije una etiqueta",
"Add a tag" : "Agrega una etiqueta",
"Select tags" : "Selecciona las etiquetas",
"Assign users" : "Asingar usuarios",
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
"Due date" : "Fecha de vencimiento",
"Click to set" : "Da click aquí para establecer",
"Remove due date" : "Eliminar fecha de expiración",
"Description" : "Descripción",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Add a card description…" : "Agregar una descripción de tarjeta...",
"Shared boards" : "Tableros compartidos",
"View more" : "Ver más",
"Move board to archive" : "Mover el tablero al archivo",
"Create a new board" : "Crear un nuevo tablero"
},
"nplurals=2; plural=(n != 1);");
+71
View File
@@ -0,0 +1,71 @@
{ "translations": {
"Delete" : "Borrar",
"Hours" : "Horas",
"Minutes" : "Minutos",
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
"Finished" : "Terminado",
"To review" : "Para revisar",
"Action needed" : "Acción requerida",
"Later" : "Después",
"Deck" : "Deck",
"Add a new stack" : "Agregar una nueva pila",
"Submit" : "Enviar",
"Show archived cards" : "Mostrar tarjetas archivadas",
"Hide archived cards" : "Ocultar tarjetas archivadas",
"Board details" : "Detalles del tablero",
"All Boards" : "Todos los Tableros",
"Archived boards" : "Tableros archivados",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Enter a card title" : "Ingresa el título de la tarjeta",
"Add card" : "Agregar tarjeta",
"Close" : "Cerrar",
"Sharing" : "Compartiendo",
"Tags" : "Etiquetas",
"Select users or groups to share with" : "Selecciona los usuarios o grupos con los cuales compartir",
"Access for" : "Acceso para",
"No matching user or group found." : "No se encontraron coincidencias de usuarios o grupos.",
"Loading" : "Cargando",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Administrar",
"Discard share" : "Descartar elemento compartido",
"Update" : "Actualizar",
"Create" : "Crear",
"Create a new tag" : "Crear una nueva etiqueta",
"Status" : "Estatus",
"Title" : "Título",
"Members" : "Miembros",
"More actions" : "Más acciones",
"Edit board" : "Editar el tablero",
"Archive board" : "Archivar tablero",
"Unarchive board" : "Desarchivar tablero",
"Delete board" : "Borrar tableros",
"Reset" : "Reiniciar",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
"Create new board" : "Crear un nuevo tablero",
"New board title" : "Nuevo título del tablero",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"by" : "por",
"Choose a tag" : "Elije una etiqueta",
"Add a tag" : "Agrega una etiqueta",
"Select tags" : "Selecciona las etiquetas",
"Assign users" : "Asingar usuarios",
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
"Due date" : "Fecha de vencimiento",
"Click to set" : "Da click aquí para establecer",
"Remove due date" : "Eliminar fecha de expiración",
"Description" : "Descripción",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Add a card description…" : "Agregar una descripción de tarjeta...",
"Shared boards" : "Tableros compartidos",
"View more" : "Ver más",
"Move board to archive" : "Mover el tablero al archivo",
"Create a new board" : "Crear un nuevo tablero"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+36
View File
@@ -0,0 +1,36 @@
OC.L10N.register(
"deck",
{
"Delete" : "Borrar",
"Finished" : "Terminado",
"To review" : "Para revisar",
"Action needed" : "Acción requerida",
"Later" : "Después",
"Deck" : "Deck",
"Show archived cards" : "Mostrar tarjetas archivadas",
"Hide archived cards" : "Ocultar tarjetas archivadas",
"Board details" : "Detalles del tablero",
"All Boards" : "Todos los Tablero",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Enter a card title" : "Ingrese el títilo de la tarjeta",
"Sharing" : "Compartiendo",
"Select users or groups to share with" : "Seleccione los usuarios o grupos con los cuales compartir",
"No matching user or group found." : "No se encontraron coincidencias de usuarios o grupos.",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Administrar",
"Discard share" : "Descartar elemento compartido",
"Members" : "Miembros",
"Create new board" : "Crear un nuevo tablero",
"New board title" : "Nuevo título de tablero",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"by" : "por",
"Description" : "Descripción",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Add a card description…" : "Agregar una descripción de tarjeta...",
"Create a new board" : "Crear nuevo tablero"
},
"nplurals=2; plural=(n != 1);");
+34
View File
@@ -0,0 +1,34 @@
{ "translations": {
"Delete" : "Borrar",
"Finished" : "Terminado",
"To review" : "Para revisar",
"Action needed" : "Acción requerida",
"Later" : "Después",
"Deck" : "Deck",
"Show archived cards" : "Mostrar tarjetas archivadas",
"Hide archived cards" : "Ocultar tarjetas archivadas",
"Board details" : "Detalles del tablero",
"All Boards" : "Todos los Tablero",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Enter a card title" : "Ingrese el títilo de la tarjeta",
"Sharing" : "Compartiendo",
"Select users or groups to share with" : "Seleccione los usuarios o grupos con los cuales compartir",
"No matching user or group found." : "No se encontraron coincidencias de usuarios o grupos.",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Administrar",
"Discard share" : "Descartar elemento compartido",
"Members" : "Miembros",
"Create new board" : "Crear un nuevo tablero",
"New board title" : "Nuevo título de tablero",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"by" : "por",
"Description" : "Descripción",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Add a card description…" : "Agregar una descripción de tarjeta...",
"Create a new board" : "Crear nuevo tablero"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+77
View File
@@ -0,0 +1,77 @@
OC.L10N.register(
"deck",
{
"Are you sure you want to delete this card with all of its data?" : "¿Estás seguro que deseas borrar esta tarjeta con todos sus datos? ",
"Delete" : "Borrar",
"Remove user from card" : "Eliminar usuario de la tarjeta",
"Hours" : "Horas",
"Minutes" : "Minutos",
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro que deseas borrar la pila con todos sus datos?",
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alacanzado su fecha de entrega",
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo. ",
"Finished" : "Terminado",
"To review" : "Para revisar",
"Action needed" : "Acción requerida",
"Later" : "Después",
"Deck" : "Deck",
"Add a new stack" : "Agregar una nueva pila",
"Submit" : "Enviar",
"Show archived cards" : "Mostrar tarjetas archivadas",
"Hide archived cards" : "Ocultar tarjetas archivadas",
"Board details" : "Detalles del tablero",
"All Boards" : "Todos los Tableros",
"Archived boards" : "Tableros archivados",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Enter a card title" : "Ingresa el título de la tarjeta",
"Add card" : "Agregar tarjeta",
"Close" : "Cerrar",
"Sharing" : "Compartiendo",
"Tags" : "Etiquetas",
"Select users or groups to share with" : "Selecciona los usuarios o grupos con los cuales compartir",
"Access for" : "Acceso para",
"No matching user or group found." : "No se encontraron coincidencias de usuarios o grupos.",
"Loading" : "Cargando",
"Share" : "Compartir",
"Edit" : "Editar",
"Manage" : "Administrar",
"Discard share" : "Descartar elemento compartido",
"Update" : "Actualizar",
"Create" : "Crear",
"Create a new tag" : "Crear una nueva etiqueta",
"Status" : "Estatus",
"Title" : "Título",
"Members" : "Miembros",
"More actions" : "Más acciones",
"Edit board" : "Editar el tablero",
"Archive board" : "Archivar tablero",
"Unarchive board" : "Desarchivar tablero",
"Delete board" : "Borrar tableros",
"Reset" : "Reiniciar",
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado de tablero - De lo contrario el tablero se borrará durante la siguiente ejecución del cronjob. ",
"Create new board" : "Crear un nuevo tablero",
"New board title" : "Nuevo título del tablero",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"by" : "por",
"Choose a tag" : "Elije una etiqueta",
"Add a tag" : "Agrega una etiqueta",
"Select tags" : "Selecciona las etiquetas",
"Assign users" : "Asingar usuarios",
"Choose a user to assign" : "Elige un usuario a asignar",
"Assign this card to a user" : "Asignar esta tarjeta al usuario",
"Due date" : "Fecha de vencimiento",
"Click to set" : "Da click aquí para establecer",
"Remove due date" : "Eliminar fecha de expiración",
"Description" : "Descripción",
"Formatting help" : "Ayuda de formato",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Add a card description…" : "Agregar una descripción de tarjeta...",
"Shared boards" : "Tableros compartidos",
"View more" : "Ver más",
"Move board to archive" : "Mover el tablero al archivo",
"Create a new board" : "Crear un nuevo tablero"
},
"nplurals=2; plural=(n != 1);");

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