Compare commits

...
789 Commits
Author SHA1 Message Date
Julius Härtl bfe71900d3 Bump version to 0.4.0-beta3
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 18:14:59 +02:00
Julius HärtlandGitHub c6a6b41193 Merge pull request #505 from nextcloud/bugfix/noid/upload-errors
Display attachment errors properly and fix uploading big files
2018-06-25 18:12:44 +02:00
Julius Härtl b0f7bef279 Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 18:05:02 +02:00
Julius Härtl 014f76b2fb Provide resource of tmp file instead of putting all content in memory
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 17:55:40 +02:00
Julius Härtl 546928fb79 Throw proper StatusException
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 17:55:18 +02:00
Julius Härtl b4ead5a2eb Display proper file upload errors
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-25 17:54:28 +02:00
Nextcloud bot 124918b744 [tx-robot] updated from transifex 2018-06-25 00:18:22 +00:00
Nextcloud bot 9308ad125a [tx-robot] updated from transifex 2018-06-23 00:19:28 +00:00
Nextcloud bot 7dc43829ab [tx-robot] updated from transifex 2018-06-22 00:19:11 +00:00
Julius Härtl 63ac985f15 Add proper polyfill for IE11
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 14:55:28 +02:00
Julius Härtl 93725e481d Bump version to 0.4.0-beta2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 14:35:42 +02:00
Nextcloud bot 8e976cb2a6 [tx-robot] updated from transifex 2018-06-21 12:30:45 +00:00
Julius Härtl 58a89374e2 Properly use babel to fix IE11 support
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 14:13:39 +02:00
Julius Härtl 313bbca462 Add proper controller method annotations
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-06-21 11:44:45 +02:00
Nextcloud bot f0c22370e0 [tx-robot] updated from transifex 2018-06-21 00:20:04 +00:00
Julius Hä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
Julius HärtlandGitHub 8b4e7ec2bf Merge pull request #107 from nextcloud/release-0.1.3
Prepare 0.1.3 release
2017-05-01 10:04:13 +02:00
Julius Härtl 111a98ce88 Prepare 0.1.3 release
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-05-01 08:44:26 +02:00
Artem AnufrijandJulius Härtl 7fb0d2374d better behavior for comment field (#105)
* better behavior for comment field
* removed min-height

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-05-01 08:35:31 +02:00
Nextcloud bot 491a73456b [tx-robot] updated from transifex 2017-05-01 00:10:29 +00:00
artemanufrijandJulius Härtl 62d671bdd5 hide sidebar when clicked outside (#102)
* hide sidebar when clicked outside

* fixed show/hide behavior

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-04-30 21:23:48 +02:00
Julius HärtlandGitHub 955c5eb864 Merge pull request #99 from nextcloud/bump-dependencies
Bump bower dependencies
2017-04-30 13:13:38 +02:00
Julius HärtlandGitHub 49cd271cbc Add link to nightly builds 2017-04-30 13:07:49 +02:00
Julius HärtlandGitHub 37bdbecdc2 Merge pull request #103 from nextcloud/nightly
Fix paths to use local bower/grunt installation
2017-04-30 13:03:25 +02:00
Julius Härtl 62af080e78 Fix paths to use local bower/grunt installation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-30 12:57:10 +02:00
Julius Härtl 84d4b87bb8 Bump bower dependencies
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-30 09:37:04 +02:00
Julius HärtlandGitHub 5ad515f42a Merge pull request #96 from nextcloud/fix-db-columns
Move text fields to clob
2017-04-29 13:20:16 +02:00
Julius HärtlandGitHub 98b57fe0a4 Merge pull request #65 from nextcloud/test-behat
Add integration tests with behat
2017-04-29 13:08:18 +02:00
Julius Härtl b961206da3 Include App integration test
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-29 13:04:00 +02:00
artemanufrijandJulius Härtl d8d8137300 description marker (#98)
* description marker
* removed unused content
* removed unused content
* Changed Icon and removen unused .svg

Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-04-29 12:52:53 +02:00
Julius Haertl 56fcb081a4 Fix tests
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-04-29 12:36:38 +02:00
Julius Haertl 2b9b22f2f2 Add behat tests to drone
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-04-29 11:57:54 +02:00
Julius Haertl 084d892ce6 Add basic behat test structure
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-04-29 11:57:54 +02:00
Julius HärtlandGitHub 11610f306a Merge pull request #58 from nextcloud/displaynames
Implement relational mapping for users and groups to show displaynames
2017-04-29 11:57:21 +02:00
Julius Härtl 60e9cf7088 Apply maxlength to input fields and fix card header height
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-29 11:55:00 +02:00
Julius Härtl 7e345256cb Move text fields to clob
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-29 11:53:20 +02:00
Julius HärtlandGitHub 52a7b8d560 Merge pull request #97 from pixelipo/fix-readme
Change app name in README.md
2017-04-28 15:31:47 +02:00
Marin Treselj d98db33a02 Change app name in README.md
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2017-04-28 13:26:13 +02:00
Julius Härtl 04f5e2c2e1 Don't show own user account
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-27 13:14:58 +02:00
Julius Härtl 74c8a6e848 Fix board acl type
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-27 13:08:25 +02:00
Julius Härtl 02eecb3a3f Use mapper classes for relational data
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-27 13:08:25 +02:00
Julius Haertl 1e9c86e158 Code cleaup
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-27 13:08:25 +02:00
Julius Haertl 2b05227f4b Add Group class
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-27 13:08:10 +02:00
Julius Haertl 3e304a9ff2 Use display name for users and groups
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-27 13:08:10 +02:00
Julius HärtlandGitHub 000e447801 Merge pull request #95 from nextcloud/add-stack-header
Moved "Add a new Stack" into the top Bar [rebased]
2017-04-27 13:01:24 +02:00
Julius Härtl 1b6531e748 Fix positioning on Nextcloud 12
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-27 12:48:25 +02:00
artemanufrijandJulius Härtl e2012dd2c5 Fixed css
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-04-27 12:25:56 +02:00
artemanufrijandJulius Härtl 5346cc4042 Move add stack input to the header
Signed-off-by: Artem Anufrij <artem.anufrij@live.de>
2017-04-27 12:25:17 +02:00
Julius HärtlandGitHub 22438f8f3e Merge pull request #94 from nextcloud/use-ocs-api
Use OCS API to search for users/groups
2017-04-27 12:18:52 +02:00
Julius Härtl 6033baca23 Remove old search endpoint
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-26 14:54:56 +02:00
Julius Härtl c1ff005710 Use OCS API to search for users/groups
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-04-26 14:42:11 +02:00
Nextcloud bot 05adda1e03 [tx-robot] updated from transifex 2017-04-26 00:10:41 +00:00
Lukas ReschkeandGitHub 6ae6bdf74a Update issue_template.md 2017-04-18 12:40:53 +02:00
Nextcloud bot 35ea7255cb [tx-robot] updated from transifex 2017-04-15 00:10:36 +00:00
Nextcloud bot c80deaaaee [tx-robot] updated from transifex 2017-04-14 00:10:39 +00:00
Nextcloud bot ab60f4e3ab [tx-robot] updated from transifex 2017-04-07 00:12:08 +00:00
Nextcloud bot 965708e784 [tx-robot] updated from transifex 2017-04-06 00:11:00 +00:00
Nextcloud bot 1b364b4f85 [tx-robot] updated from transifex 2017-04-05 00:11:20 +00:00
Nextcloud bot aad1cb4fb5 [tx-robot] updated from transifex 2017-04-04 00:10:27 +00:00
Nextcloud bot 99725765fc [tx-robot] updated from transifex 2017-03-31 00:11:14 +00:00
Nextcloud bot f313a9ba6b [tx-robot] updated from transifex 2017-03-30 00:10:28 +00:00
Julius HärtlandGitHub 6bbe0a3161 Merge pull request #80 from nextcloud/drone-only-master
Only build master branch
2017-03-28 14:02:26 +02:00
Julius Härtl 4414fdebd4 Only build master branch
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-03-28 13:49:19 +02:00
Julius HärtlandGitHub 0c0b663b9e Merge pull request #77 from nextcloud/release-0.1.2
Bump version to 0.1.2
2017-03-27 20:29:31 +02:00
Julius Haertl b6645cfaa1 Bump version to 0.1.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-03-27 20:16:15 +02:00
Nextcloud bot 9351a04eb3 [tx-robot] updated from transifex 2017-03-25 01:10:30 +00:00
Nextcloud bot c1f828b894 [tx-robot] updated from transifex 2017-03-23 01:10:22 +00:00
Julius HärtlandGitHub cb233ba35b Merge pull request #75 from nextcloud/emoji-fix
Fix info.xml emoji usage
2017-03-22 17:04:16 +01:00
Marius Blüm f09ce32f2b Fix info.xml emoji usage
Signed-off-by: Marius Blüm <marius@lineone.io>
2017-03-22 13:57:28 +01:00
Julius HärtlandGitHub 1e359adf18 Merge pull request #66 from nextcloud/default-json
Add jsonSerialize method to RelationalEntity
2017-03-20 14:37:16 +01:00
Julius Haertl 34c1a681b1 Add jsonSerialize method to RelationalEntity
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-03-20 14:26:03 +01:00
Julius HärtlandGitHub 3324556542 Merge pull request #72 from nextcloud/fix-travis
Use phpunit 5.7
2017-03-20 09:57:08 +01:00
Julius Härtl 7dba354767 Remove npm install 2017-03-20 09:39:10 +01:00
Julius Härtl 8444a00bdf Travis fix
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-03-20 09:28:24 +01:00
Julius Härtl 021b186424 Use phpunit 5.7
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2017-03-20 08:53:17 +01:00
Nextcloud bot 3e38ed7108 [tx-robot] updated from transifex 2017-03-17 01:10:07 +00:00
Julius HärtlandGitHub 5d95dbf1ff Merge pull request #68 from nextcloud/travis
Disable email notifications for travis
2017-03-16 11:54:24 +01:00
Nextcloud bot f17b046cb1 [tx-robot] updated from transifex 2017-03-12 01:10:43 +00:00
Nextcloud bot 7d55d22d42 [tx-robot] updated from transifex 2017-03-11 01:10:04 +00:00
Nextcloud bot 138c03160e [tx-robot] updated from transifex 2017-03-06 01:10:03 +00:00
Julius Haertl 286d4d7900 Disable email notifications for travis
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-03-05 14:21:21 +01:00
Julius HärtlandGitHub 3f6f80ce44 Merge pull request #67 from nextcloud/debug-js
Include source js files when debug is enabled
2017-03-05 14:14:13 +01:00
Julius HärtlandGitHub 7d7c605d36 Merge pull request #62 from SpaceCafe/master
Fixed SQL statements without prefixes
2017-03-05 14:00:01 +01:00
Julius Haertl 1d966033ec Update javascript section in README
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-03-05 13:53:05 +01:00
Julius Haertl 9de4051803 Include source js files when debug is enabled
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-03-05 13:46:38 +01:00
SpaceCafeandLars Thoms a2a3d8cae7 Merge branch 'master' into master
Signed-off-by: Lars Thoms <lars.thoms@spacecafe.org>
2017-03-04 20:48:12 +01:00
Lars Thoms 873e7cb1cf Fixed SQL statements without prefixes
Signed-off-by: Lars Thoms <lars.thoms@spacecafe.org>
2017-03-04 20:40:23 +01:00
Julius HärtlandGitHub 4766195872 Merge pull request #64 from nextcloud/contribution-guidelines
Add contribution guidelines to README
2017-03-04 12:49:01 +01:00
Julius HärtlandGitHub c35f6aa9ef Add contribution guidelines to README 2017-03-04 12:47:26 +01:00
Julius HärtlandGitHub 59ec9a15ff Merge pull request #61 from nextcloud/fix-legacy-code
use non-deprecated code in tests
2017-03-03 15:04:42 +01:00
Julius HärtlandGitHub 81cd17cf3a Merge branch 'master' into fix-legacy-code 2017-03-03 13:07:15 +01:00
Julius HärtlandGitHub 7ce44deb91 Merge pull request #59 from nextcloud/drone
Use drone for testing
2017-03-03 13:04:57 +01:00
Morris Jobke 96f5f5fe45 use non-deprecated code in tests
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2017-03-03 01:30:44 -06:00
Nextcloud bot 5c8d7b7644 [tx-robot] updated from transifex 2017-03-03 01:09:45 +00:00
Nextcloud bot 5136615650 [tx-robot] updated from transifex 2017-03-02 16:51:02 +00:00
Julius Haertl 3e3b120175 Add js build and remove tests from travis
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-03-02 11:32:12 +01:00
Julius HärtlandGitHub fef35d3929 Merge pull request #60 from nextcloud/transifex-update
Update transifex config
2017-03-02 11:04:22 +01:00
Morris Jobke 2a483b6f92 Update transifex config
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2017-03-01 22:48:17 -06:00
Nextcloud bot f34250ca67 [tx-robot] updated from transifex 2017-03-02 01:09:30 +00:00
Nextcloud bot 308ade1b6e [tx-robot] updated from transifex 2017-03-01 01:09:42 +00:00
Julius Haertl cf03e08d1e Use drone for testing
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-02-28 18:35:32 +01:00
Julius HärtlandGitHub 90e0c57224 Merge pull request #57 from nextcloud/exception-logging
Improve logging of exceptions catched by SharingMiddleware
2017-02-27 11:45:38 +01:00
Julius Haertl 15e5a432b6 Improve logging of exceptions catched by SharingMiddleware 2017-02-27 11:27:49 +01:00
Julius HärtlandGitHub 5372458288 Merge pull request #56 from roipoussiere/label_title
Add on label tiles a tooltip with the label name.
2017-02-27 09:59:26 +01:00
Nathanaël Jourdane 2d7e6f2efa Add on label tiles a tooltip with the label name. 2017-02-26 14:17:26 +01:00
Nextcloud bot 67f26ef9b2 [tx-robot] updated from transifex 2017-02-25 01:27:26 +00:00
Nextcloud bot 153fb6a0f0 [tx-robot] updated from transifex 2017-02-24 01:23:55 +00:00
Nextcloud bot 61b7228fb6 [tx-robot] updated from transifex 2017-02-23 01:21:00 +00:00
Julius HärtlandGitHub d2a2d7a63a Merge pull request #55 from nextcloud/move-repo
Move repo to nextcloud org
2017-02-22 10:36:17 +01:00
Julius Haertl db90911e5e Move repo to nextcloud org
Signed-off-by: Julius Haertl <jus@bitgrid.net>
2017-02-22 10:12:25 +01:00
Nextcloud bot a636b106c8 [tx-robot] updated from transifex 2017-02-22 01:14:29 +00:00
Morris JobkeandGitHub 1e19c44665 Merge pull request #54 from nextcloud/transifex
add transifex config
2017-02-21 10:31:19 -06:00
Morris Jobke c308087c4a add transifex config
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2017-02-21 10:20:49 -06:00
Julius HärtlandGitHub cb5cfe1c73 Merge pull request #51 from juliushaertl/safari-fix
Remove duplicate endtag and fix layout in safari
2017-02-15 07:44:38 +01:00
Julius Haertl 3a311197a8 Remove duplicate endtag and fix layout in safari 2017-02-14 22:11:15 +01:00
Julius Haertl b5feeeaee3 Fix group acl entries being interpreted as users 2017-02-13 22:06:27 +01:00
Julius HärtlandGitHub 8e890df7ab Add issue template 2017-02-10 10:45:21 +01:00
Julius Haertl d88f561adb Require the correct css file 2017-02-07 00:16:54 +01:00
Julius Haertl 65eb63d742 Bump version to 0.1.1 2017-02-06 23:44:08 +01:00
Julius HärtlandGitHub cde350decf Merge pull request #42 from juliushaertl/prepare-appstore-release
Release preparations for 0.1.1
2017-02-06 23:42:17 +01:00
Julius HärtlandGitHub ba3d98a8e4 Merge pull request #41 from juliushaertl/styling-improvements
Design improvements on select2 boxes and css cleanup
2017-02-06 23:37:21 +01:00
Julius HärtlandGitHub 3b7a83d2a4 Merge branch 'master' into styling-improvements 2017-02-06 23:27:19 +01:00
Julius Haertl eaf8402d31 Update changelog 2017-02-06 23:26:33 +01:00
Julius HärtlandGitHub b710bd00a7 Merge pull request #40 from juliushaertl/fix-card-dragging
Add ng-sortable css to fix #38
2017-02-06 23:19:20 +01:00
Julius Haertl bf94f787c3 More CSS cleanup 2017-02-06 23:17:42 +01:00
Julius Haertl d74b9f68d9 Use select2 styles from Nextcloud server 2017-02-06 22:57:35 +01:00
Julius HärtlandGitHub 198e443a24 Merge pull request #33 from juliushaertl/fix-acl-create
Use integer values for Acl type
2017-02-06 22:53:05 +01:00
Julius Haertl cb073897c3 Prepare for appstore release 2017-02-06 13:14:02 +01:00
Julius Haertl cba8112ff6 Add ng-sortable css to fix #38 2017-02-05 23:41:21 +01:00
Julius HärtlandGitHub f8c2d86e4f Merge pull request #38 from juliushaertl/cleanup-debug
Remove debug logging and unused function
2017-02-05 23:04:25 +01:00
Julius HärtlandGitHub dd612a0c5e Merge pull request #23 from juliushaertl/styling-fixes
Styling fixes
2017-02-05 22:55:38 +01:00
Julius Haertl 8342e1f99a Remove debug logging and unused function 2017-02-05 22:53:28 +01:00
Julius Haertl f604f2f779 Remove another string representation 2017-02-05 22:46:29 +01:00
Julius Haertl 2fd10f9201 CSS cleanup 2017-02-03 18:41:26 +01:00
Julius Haertl 0333f31b9a Move to int values for permission type checks 2017-02-03 18:38:01 +01:00
Julius Haertl dfe8bad832 Do not return string on Acl type getter 2017-02-03 18:35:41 +01:00
Julius HärtlandGitHub 161a6715da Merge pull request #26 from juliushaertl/select-first-color
Always select the first color when creating a board
2017-02-02 18:46:32 +01:00
Julius HärtlandGitHub 929ed247c9 Merge pull request #24 from juliushaertl/fix-acl-permissioncheck
Fix check for acl permissions
2017-02-02 18:40:05 +01:00
Julius HärtlandGitHub 54c6d669f5 Merge branch 'master' into select-first-color 2017-02-02 18:33:00 +01:00
Julius HärtlandGitHub fdb7b7fb98 Merge branch 'master' into fix-acl-permissioncheck 2017-02-02 18:31:15 +01:00
Julius HaertlandJulius Härtl 8375108412 Run js stuff only once on travis 2017-02-02 18:30:59 +01:00
Julius Haertl b6d057a284 Always select first color fixes #19 2017-02-01 19:10:38 +01:00
Julius Haertl 37437c1d76 Fix check for acl permissions 2017-02-01 18:52:34 +01:00
Julius Haertl 9f61417a58 Use server select2 styles 2017-02-01 18:51:47 +01:00
Julius Haertl e05c2469b4 Add active class to appmenu 2017-02-01 18:51:09 +01:00
Julius Haertl 2085e9b300 Remove unneeded stuff 2017-02-01 16:32:21 +01:00
279 changed files with 30402 additions and 2905 deletions
+212
View File
@@ -0,0 +1,212 @@
clone:
git:
image: plugins/git
depth: 1
pipeline:
check-app-compatbility:
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
# Code checker
- ./occ app:check-code $APP_NAME -c strong-comparison
- ./occ app:check-code $APP_NAME -c deprecation
- cd apps/$APP_NAME/
when:
matrix:
TESTS: check-app-compatbility
signed-off-check:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- DB=sqlite
commands:
- wget https://raw.githubusercontent.com/nextcloud/server/master/build/signed-off-checker.php
- php ./signed-off-checker.php
secrets: [ github_token ]
when:
matrix:
TESTS: signed-off-check
syntax-php5.6:
image: nextcloudci/php5.6:php5.6-8
environment:
- APP_NAME=deck
- CORE_BRANCH=stable13
- DB=sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
when:
matrix:
TESTS: syntax-php5.6
syntax-php7.0:
image: nextcloudci/php7.0:php7.0-17
environment:
- APP_NAME=deck
- CORE_BRANCH=master
- DB=sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
when:
matrix:
TESTS: syntax-php7.0
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
# 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/
- ./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
when:
matrix:
TESTS: php5.6
php7.0:
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/
- php occ app:enable deck
- cd apps/$APP_NAME
# Run phpunit tests
- 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.0
php7.1:
image: nextcloudci/php7.1:php7.1-15
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.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-6
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
- cd tests/integration
- ./run.sh
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 make
- make build-js
when:
matrix:
TESTS: jsbuild
matrix:
include:
- TESTS: check-app-compatbility
- 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
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
+97
View File
@@ -0,0 +1,97 @@
---
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.
+8
View File
@@ -1,3 +1,11 @@
js/node_modules/* js/node_modules/*
js/vendor/ js/vendor/
js/public/
js/build/
build/ build/
css/style.css
css/vendor.css
tests/integration/vendor/
tests/integration/composer.lock
vendor/
*.lock
+16 -16
View File
@@ -2,35 +2,35 @@ language: php
services: services:
- mysql - mysql
php: php:
- 5.6 - 7.0
- 7 - 7.1
- 7.2
env: env:
matrix: - CORE_BRANCH=master DB=mysql
- CORE_BRANCH=master DB=sqlite
- CORE_BRANCH=master DB=mysql
- CORE_BRANCH=stable11 DB=sqlite
- CORE_BRANCH=stable11 DB=mysql
before_install: before_install:
- wget https://phar.phpunit.de/phpunit-5.7.phar
- chmod +x phpunit-5.7.phar
- mkdir bin
- 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 - wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh deck $CORE_BRANCH $DB - bash ./before_install.sh deck $CORE_BRANCH $DB
- cd ../server - cd ../server
- ./occ app:enable deck - ./occ app:enable deck
- ./occ app:check-code deck
- php -S localhost:8080 &
before_script: before_script:
- cd apps/deck - cd apps/deck
- make install-deps
script: script:
- node --version - make test-unit
- npm --version
- make build-js after_success:
- make test - bash <(curl -s https://codecov.io/bash)
after_failure: after_failure:
- cat ../../data/nextcloud.log - cat ../../data/nextcloud.log
after_success: notifications:
- bash <(curl -s https://codecov.io/bash) email: false
+9
View File
@@ -0,0 +1,9 @@
[main]
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 = translationfiles/<lang>/deck.po
source_file = translationfiles/templates/deck.pot
source_lang = en
type = PO
+158
View File
@@ -1,4 +1,162 @@
# 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
- Fix bugs with limited field length
- Automatically hide sidebar when clicking the board view
- Start editing from everywhere in the description section
## 0.1.2
### Added
- Add translations
### Fixed
- Fix issues with Acl checks
- Always select first color fixes
- Add active class to appmenu
- Use server select2 styles
- Remove debug logging and unused function
- Fix issue while sorting cards
- Improve logging of exceptions
- Fixed SQL statements without prefixes
## 0.1.1
### Fixed
- Various styling improvements
- Fix problems with MySQL and PostgreSQL
- Select first color by default when creating boards
- Fix error when changing board permissions
## 0.1.0 ## 0.1.0
### Added ### Added
- Sharing boards with other users - Sharing boards with other users
- Create and manage boards - Create and manage boards
+21 -9
View File
@@ -19,19 +19,20 @@ clean-build:
clean-dist: clean-dist:
rm -rf js/node_modules rm -rf js/node_modules
rm -rf js/vendor
install-deps: install-deps:
cd js && npm install --deps cd js && npm install
cd js && bower install
build: build-js build: build-js
build-js: build-js: install-deps
$(MAKE) -C js build cd js && npm run build
build-js-dev: install-deps
cd js && npm run dev
watch: watch:
$(make) -C js watch cd js && npm run watch
# appstore: clean install-deps # appstore: clean install-deps
appstore: clean-build build appstore: clean-build build
@@ -48,6 +49,7 @@ appstore: clean-build build
--exclude="../$(app_name)/js/tests" \ --exclude="../$(app_name)/js/tests" \
--exclude="../$(app_name)/js/test" \ --exclude="../$(app_name)/js/test" \
--exclude="../$(app_name)/js/*.log" \ --exclude="../$(app_name)/js/*.log" \
--exclude="../$(app_name)/js/package-lock.json" \
--exclude="../$(app_name)/js/package.json" \ --exclude="../$(app_name)/js/package.json" \
--exclude="../$(app_name)/js/bower.json" \ --exclude="../$(app_name)/js/bower.json" \
--exclude="../$(app_name)/js/karma.*" \ --exclude="../$(app_name)/js/karma.*" \
@@ -57,7 +59,10 @@ appstore: clean-build build
--exclude="../$(app_name)/karma.*" \ --exclude="../$(app_name)/karma.*" \
--exclude="../$(app_name)/protractor\.*" \ --exclude="../$(app_name)/protractor\.*" \
--exclude="../$(app_name)/.*" \ --exclude="../$(app_name)/.*" \
--exclude="../$(app_name)/*.lock" \
--exclude="../$(app_name)/run-eslint.sh" \
--exclude="../$(app_name)/js/.*" \ --exclude="../$(app_name)/js/.*" \
--exclude="../$(app_name)/vendor" \
--exclude-vcs \ --exclude-vcs \
../$(app_name) ../$(app_name)
@@ -69,17 +74,24 @@ appstore: clean-build build
echo $(appstore_package_name).tar.gz echo $(appstore_package_name).tar.gz
test: test-unit test-integration
test: test-unit:
mkdir -p build/ mkdir -p build/
cd js && $(npm) run test
ifeq (, $(shell which phpunit 2> /dev/null)) ifeq (, $(shell which phpunit 2> /dev/null))
@echo "No phpunit command available, downloading a copy from the web" @echo "No phpunit command available, downloading a copy from the web"
mkdir -p $(build_tools_directory) mkdir -p $(build_tools_directory)
curl -sSL https://phar.phpunit.de/phpunit.phar -o $(build_tools_directory)/phpunit.phar curl -sSL https://phar.phpunit.de/phpunit-5.7.phar -o $(build_tools_directory)/phpunit.phar
php $(build_tools_directory)/phpunit.phar -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml php $(build_tools_directory)/phpunit.phar -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
php $(build_tools_directory)/phpunit.phar -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml php $(build_tools_directory)/phpunit.phar -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
else else
phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
endif endif
test-integration:
cd tests/integration && ./run.sh
test-js: install-deps
cd js && run test
+56 -17
View File
@@ -1,6 +1,7 @@
# Deck # Deck
[![Build Status](https://travis-ci.org/juliushaertl/deck.svg?branch=master)](https://travis-ci.org/juliushaertl/deck) [![CodeCov](https://codecov.io/github/juliushaertl/deck/coverage.svg?branch=master)](https://codecov.io/github/juliushaertl/deck) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/juliushaertl/deck/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/juliushaertl/deck/?branch=master) [![Dependency Status](https://www.versioneye.com/user/projects/58908fc0a23e810038c34e0a/badge.svg?style=flat)](https://www.versioneye.com/user/projects/58908fc0a23e810038c34e0a) [![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. Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.
@@ -11,32 +12,22 @@ Deck is a kanban style organization tool aimed at personal planning and project
- :rocket: Get your project organized - :rocket: Get your project organized
![Deck - Manage cards on your board](https://bitgrid.net/~jus/deck.png) ![Deck - Manage cards on your board](https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.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 ...
## Installation/Update ## 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 ### Install latest release
Grab the latest release over here, extract it to your Nextcloud apps folder and enable the app. You can download and install the latest release from the [Nextcloud app store](https://apps.nextcloud.com/apps/deck)
### Install from git ### Install from git
If you want to run the latest development version from git source, you need to clone the repo to your apps folder: If you want to run the latest development version from git source, you need to clone the repo to your apps folder:
``` ```
git clone https://github.com/juliushaertl/deck.git git clone https://github.com/nextcloud/deck.git
cd deck cd deck
make install-deps make install-deps
make make
@@ -44,6 +35,10 @@ make
Please make sure you have installed the following dependencies: `make, which, tar, npm, curl` Please make sure you have installed the following dependencies: `make, which, tar, npm, curl`
### Install the nightly builds
Instead of setting everything up manually, you can just [download the nightly builds](https://download.bitgrid.net/nextcloud/deck/nightly/) instead. These builds are updated every 24 hours, and are pre-configured with all the needed dependencies.
## Developing ## Developing
### PHP ### PHP
@@ -52,9 +47,53 @@ Nothing to prepare, just dig into the code.
### JavaScript ### JavaScript
Make sure you have installed the dependencies with ```make install-deps```. After that you can run ```make``` to build the javascript code once or run ```make watch``` to run in on every file change. Deck requires running a `make build-js` to install npm dependencies and build the JavaScript code using webpack. While developing you can also use `make watch` to rebuild everytime the code changes.
### Running tests ### Running tests
You can use the provided Makefile to run all tests by using: You can use the provided Makefile to run all tests by using:
make test make test
## Contribution Guidelines
Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
For more information please review the [guidelines for contributing](https://github.com/nextcloud/server/blob/master/CONTRIBUTING.md) to this repository.
### Apply a license
All contributions to this repository are considered to be licensed under
the GNU AGPLv3 or any later version.
Contributors to the Deck app retain their copyright. Therefore we recommend
to add following line to the header of a file, if you changed it substantially:
```
@copyright Copyright (c) <year>, <your name> (<your email address>)
```
For further information on how to add or update the license header correctly please have a look at [our licensing HowTo][applyalicense].
### Sign your work
We use the Developer Certificate of Origin (DCO) as a additional safeguard
for the Nextcloud project. This is a well established and widely used
mechanism to assure contributors have confirmed their right to license
their contribution under the project's license.
Please read [developer-certificate-of-origin][dcofile].
If you can certify it, then just add a line to every git commit message:
````
Signed-off-by: Random J Developer <random@developer.example.org>
````
Use your real name (sorry, no pseudonyms or anonymous contributions).
If you set your `user.name` and `user.email` git configs, you can sign your
commit automatically with `git commit -s`. You can also use git [aliases](https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases)
like `git config --global alias.ci 'commit -s'`. Now you can commit with
`git ci` and the commit will be signed.
[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md
+1
View File
@@ -23,3 +23,4 @@
$app = new \OCA\Deck\AppInfo\Application(); $app = new \OCA\Deck\AppInfo\Application();
$app->registerNavigationEntry(); $app->registerNavigationEntry();
$app->registerNotifications();
+82 -20
View File
@@ -19,7 +19,7 @@
<name>title</name> <name>title</name>
<type>text</type> <type>text</type>
<notnull>true</notnull> <notnull>true</notnull>
<length>64</length> <length>100</length>
</field> </field>
<field> <field>
<name>owner</name> <name>owner</name>
@@ -38,6 +38,14 @@
<type>boolean</type> <type>boolean</type>
<default>false</default> <default>false</default>
</field> </field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
</declaration> </declaration>
</table> </table>
<table> <table>
@@ -55,7 +63,7 @@
<name>title</name> <name>title</name>
<type>text</type> <type>text</type>
<notnull>true</notnull> <notnull>true</notnull>
<length>64</length> <length>100</length>
</field> </field>
<field> <field>
<name>board_id</name> <name>board_id</name>
@@ -97,14 +105,13 @@
<field> <field>
<name>title</name> <name>title</name>
<type>text</type> <type>text</type>
<length>100</length>
<notnull>true</notnull> <notnull>true</notnull>
<length>64</length>
</field> </field>
<field> <field>
<name>description</name> <name>description</name>
<type>text</type> <type>clob</type>
<notnull>false</notnull> <notnull>false</notnull>
<length>4096</length>
</field> </field>
<field> <field>
<name>stack_id</name> <name>stack_id</name>
@@ -123,7 +130,6 @@
<name>last_modified</name> <name>last_modified</name>
<type>integer</type> <type>integer</type>
<default></default> <default></default>
<length>8</length>
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>
</field> </field>
@@ -131,7 +137,6 @@
<name>created_at</name> <name>created_at</name>
<type>integer</type> <type>integer</type>
<default></default> <default></default>
<length>8</length>
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>
</field> </field>
@@ -152,6 +157,16 @@
<type>boolean</type> <type>boolean</type>
<default>false</default> <default>false</default>
</field> </field>
<field>
<name>duedate</name>
<type>timestamp</type>
<default>0</default>
</field>
<field>
<name>notified</name>
<type>boolean</type>
<default>false</default>
</field>
<index> <index>
<name>deck_cards_stack_id_index</name> <name>deck_cards_stack_id_index</name>
<field> <field>
@@ -183,12 +198,6 @@
<autoincrement>1</autoincrement> <autoincrement>1</autoincrement>
<length>4</length> <length>4</length>
</field> </field>
<field>
<name>title</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field> <field>
<name>card_id</name> <name>card_id</name>
<type>integer</type> <type>integer</type>
@@ -203,12 +212,12 @@
</field> </field>
<field> <field>
<name>data</name> <name>data</name>
<type>clob</type> <type>text</type>
</field> </field>
<field> <field>
<name>last_modified</name> <name>last_modified</name>
<type>integer</type> <type>integer</type>
<default></default> <default/>
<length>8</length> <length>8</length>
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>
@@ -216,7 +225,21 @@
<field> <field>
<name>created_at</name> <name>created_at</name>
<type>integer</type> <type>integer</type>
<default></default> <default/>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>created_by</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length> <length>8</length>
<notnull>false</notnull> <notnull>false</notnull>
<unsigned>true</unsigned> <unsigned>true</unsigned>
@@ -239,7 +262,7 @@
<name>title</name> <name>title</name>
<type>text</type> <type>text</type>
<notnull>false</notnull> <notnull>false</notnull>
<length>64</length> <length>100</length>
</field> </field>
<field> <field>
<name>color</name> <name>color</name>
@@ -288,13 +311,51 @@
<length>4</length> <length>4</length>
</field> </field>
<index> <index>
<name>deck_assigned_labels_label_id_index</name> <name>deck_assigned_labels_idx_i</name>
<field> <field>
<name>label_id</name> <name>label_id</name>
</field> </field>
</index> </index>
<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> <field>
<name>card_id</name> <name>card_id</name>
</field> </field>
@@ -346,6 +407,7 @@
<default>false</default> <default>false</default>
</field> </field>
<index> <index>
<name>deck_board_acl_uq_i</name>
<unique>true</unique> <unique>true</unique>
<field> <field>
<name>board_id</name> <name>board_id</name>
@@ -361,7 +423,7 @@
</field> </field>
</index> </index>
<index> <index>
<name>deck_board_acl_board_id_index</name> <name>deck_board_acl_idx_i</name>
<field> <field>
<name>board_id</name> <name>board_id</name>
</field> </field>
+21 -12
View File
@@ -7,25 +7,34 @@
<description>Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud. <description>Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.
- :inbox_tray: Add your tasks to cards and put them in order - 📥 Add your tasks to cards and put them in order
- :page_facing_up: Write down additional notes in markdown - 📄 Write down additional notes in markdown
- :bookmark: Assign labels for even better organization - 🔖 Assign labels for even better organization
- :busts_in_silhouette: Share with your team, friends or family - 👥 Share with your team, friends or family
- :rocket: Get your project organized - 🚀 Get your project organized
:boom: This is still alpha software: it may not be stable enough for production!
</description> </description>
<version>0.4.0-beta3</version>
<licence>agpl</licence> <licence>agpl</licence>
<author>Julius Härtl</author> <author>Julius Härtl</author>
<version>0.1.0</version>
<namespace>Deck</namespace> <namespace>Deck</namespace>
<category>organization</category> <category>organization</category>
<category>office</category> <category>office</category>
<website>https://github.com/nextcloud/deck</website>
<bugs>https://github.com/nextcloud/deck/issues</bugs>
<repository type="git">https://github.com/nextcloud/deck.git</repository>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Board.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/Deck_Details.png</screenshot>
<dependencies> <dependencies>
<nextcloud min-version="11" max-version="12" /> <nextcloud min-version="12" max-version="14" />
</dependencies> </dependencies>
<repository type="git">https://github.com/juliushaertl/deck.git</repository> <background-jobs>
<bugs>https://github.com/juliushaertl/deck/issues</bugs> <job>OCA\Deck\Cron\DeleteCron</job>
<screenshot>https://bitgrid.net/~jus/deck.png</screenshot> <job>OCA\Deck\Cron\ScheduledNotifications</job>
</background-jobs>
<repair-steps>
<post-migration>
<step>OCA\Deck\Migration\UnknownUsers</step>
</post-migration>
</repair-steps>
</info> </info>
+14 -3
View File
@@ -25,15 +25,13 @@ return [
'routes' => [ 'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
// share
['name' => 'share#searchUser', 'url' => '/share/search/{search}', 'verb' => 'GET'],
// boards // boards
['name' => 'board#index', 'url' => '/boards', 'verb' => 'GET'], ['name' => 'board#index', 'url' => '/boards', 'verb' => 'GET'],
['name' => 'board#create', 'url' => '/boards', 'verb' => 'POST'], ['name' => 'board#create', 'url' => '/boards', 'verb' => 'POST'],
['name' => 'board#read', 'url' => '/boards/{boardId}', 'verb' => 'GET'], ['name' => 'board#read', 'url' => '/boards/{boardId}', 'verb' => 'GET'],
['name' => 'board#update', 'url' => '/boards/{boardId}', 'verb' => 'PUT'], ['name' => 'board#update', 'url' => '/boards/{boardId}', 'verb' => 'PUT'],
['name' => 'board#delete', 'url' => '/boards/{boardId}', 'verb' => 'DELETE'], ['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#getUserPermissions', 'url' => '/boards/{boardId}/permissions', 'verb' => 'GET'],
['name' => 'board#addAcl', 'url' => '/boards/{boardId}/acl', 'verb' => 'POST'], ['name' => 'board#addAcl', 'url' => '/boards/{boardId}/acl', 'verb' => 'POST'],
['name' => 'board#updateAcl', 'url' => '/boards/{boardId}/acl', 'verb' => 'PUT'], ['name' => 'board#updateAcl', 'url' => '/boards/{boardId}/acl', 'verb' => 'PUT'],
@@ -43,6 +41,7 @@ return [
['name' => 'stack#index', 'url' => '/stacks/{boardId}', 'verb' => 'GET'], ['name' => 'stack#index', 'url' => '/stacks/{boardId}', 'verb' => 'GET'],
['name' => 'stack#create', 'url' => '/stacks', 'verb' => 'POST'], ['name' => 'stack#create', 'url' => '/stacks', 'verb' => 'POST'],
['name' => 'stack#update', 'url' => '/stacks/{stackId}', 'verb' => 'PUT'], ['name' => 'stack#update', 'url' => '/stacks/{stackId}', 'verb' => 'PUT'],
['name' => 'stack#reorder', 'url' => '/stacks/{stackId}/reorder', 'verb' => 'PUT'],
['name' => 'stack#delete', 'url' => '/stacks/{stackId}', 'verb' => 'DELETE'], ['name' => 'stack#delete', 'url' => '/stacks/{stackId}', 'verb' => 'DELETE'],
['name' => 'stack#archived', 'url' => '/stacks/{boardId}/archived', 'verb' => 'GET'], ['name' => 'stack#archived', 'url' => '/stacks/{boardId}/archived', 'verb' => 'GET'],
@@ -57,6 +56,18 @@ return [
['name' => 'card#unarchive', 'url' => '/cards/{cardId}/unarchive', 'verb' => 'PUT'], ['name' => 'card#unarchive', 'url' => '/cards/{cardId}/unarchive', 'verb' => 'PUT'],
['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'], ['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'],
['name' => 'card#removeLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'DELETE'], ['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 // labels
['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'], ['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');
}
-918
View File
@@ -1,918 +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/>.
*
*/
#searchbox {
display: block !important;
}
.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 .active,
#app-navigation .active a,
#app-navigation li:hover > a,
#app-navigation li:focus > a,
#app-navigation a:focus,
#app-navigation .selected,
#app-navigation .selected a {
background-color: #fafafa;
}
#app-navigation .board-bullet {
position: absolute;
margin-left: 17px;
margin-top: 16px;
width: 12px;
height: 12px;
border: none;
border-radius: 50%;
cursor: pointer;
}
#app-view {
position: relative;
height: 100%;
white-space: nowrap;
overflow: none;
padding: 0;
z-index: 100;
width: 100%;
}
#board-status {
position: absolute;
z-index: 999;
width: 100%;
height: 100%;
background-color: #fff;
}
#board {
position: relative;
height: 100%;
white-space: nowrap; /* important */
overflow: auto;
padding: 0;
top: -40px;
padding-top: 40px;
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 {
}
.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;
color: #fff;
}
.board-action-button {
font-size: 12pt;
font-weight: 100;
border: none;
margin-left: 10px;
}
.stack {
width: 320px;
margin-right: 10px;
vertical-align: top;
display: inline-block !important;
background-color: #f8f8f8;
}
.stack h2 {
padding:10px;
padding-bottom: 8px;
margin: 0;
font-size: 12pt;
font-weight: 700;
overflow: hidden;
height: 40px;
}
.stack h2 input {
padding: 0px;
width: 80%;
margin: 0;
font-size: 12pt;
font-weight: 700;
border: 0;
background-color: transparent;
float: left;
}
.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: 0px 0px 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;
margin: 0;
padding: 0;
margin: 5px;
display: inline-block;
float: left;
}
.card.has-labels h3 {
margin-top: 15px;
}
.card h3 .fa {
font-size: 18pt;
line-height: 10pt;
vertical-align: middle;
}
.card .labels {
position: absolute;
top: -5px;
left: 10px;
}
.card .labels li {
padding: 0px;
width: 15px;
height: 20px;
-webkit-border-radius: 3px;
font-size: 80%;
border-color: transparent;
border: none;
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;
margin: 0;
padding: 0;
padding: 10px;
border: none;
overflow: hidden;
margin: 10px;
-webkit-box-shadow: none;
}
.card.create:hover {
text-align: center;
opacity: 1;
}
.card.create h3 {
margin: 0;
padding: 0;
width: 100%;
}
.card.create h3 input {
width: 100%;
border: 0px;
padding: 0px;
margin: 0px;
font-weight: bold;
font-size: 10pt;
margin: 0;
padding: 0;
border-bottom: 1px solid #ffffff;
border-radius: 0px;
color: #ffffff;
background-color: transparent !important;
}
.card.create .fa {
color: #ffffff;
width: 100%;
}
.card.create .fa:hover {
opacity: 0.5;
cursor: pointer;
}
.due {
background-color: #eee;
color: #aaa;
padding: 1px;
padding-left: 3px;
padding-right: 3px;
border-radius: 4px;
margin-right: 2px;
}
#card-header {
height: 44px;
}
#card-header h2 {
font-size: 14pt;
padding: 10px;
padding-bottom: 9px;
overflow: hidden;
margin-bottom: 0px;
background-color: #f0f0f0;
}
.icon-close {
position: absolute;
top: 5px;
right: 5px;
}
#card-meta {
padding-top: 0px;
}
#card-dates {
font-size: 80%;
color: #aaaaaa;
margin-bottom: 3px;
}
#card-meta #labels {
margin-bottom: 10px;
}
#card-dates span {
}
#card-description > h3 {
border-bottom: 1px solid #333333;
font-weight: 600;
font-size: 10pt;
padding: 5px;
}
.save-indicator {
background-color: #009900;
color: #ffffff;
border-radius: 3px;
float:right;
padding:1px 10px;
font-size: 8pt !important;
display:none;
}
#card-description textarea {
width: 100%;
height: 200px;
border: none;
margin: 0px;
padding: 0px;
}
#card-description .container {
background-color: white;
}
#card-description .container.ng-hide-remove {
animation: fade 1s forwards;
background-color: rgba(255, 255, 100, 1);
}
@keyframes fade {
from {
background-color: rgba(255, 255, 100, 1);
}
to {
background-color: rgba(255, 255, 255, 0);
}
}
#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;
/*box-shadow: 0px 0px 5px 0px #aaa;*/
border-left: 1px solid #eeeeee;
}
#app-sidebar.details-visible {
right: 0px;
}
#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;
}
.labels li span {
}
.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 selector */
.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;
}
#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;
}
input.input-inline {
font-size: inherit !important;
font-weight: inherit;
background-color: transparent;
padding: 0;
margin: 0;
border: none;
width: 100%;
border-bottom: 1px solid #333333;
-webkit-border-radius: 0;
margin-top: -4px;
line-height: 100%;
margin-bottom: -4px;
}
button {
border: 0;
background-color: transparent;
}
button:hover {
border: 0;
background-color: transparent;
}
/* board detail */
#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-container.dropdown {
background: #ffffff;
border-radius: 0px;
box-shadow: none;
display: block;
margin-right: 0;
position: static;
width: 100%;
z-index: auto;
padding: 3px;
}
.ui-select-match-close {
float: right;
left: -20px;
margin-top: 3px;
z-index: 100;
position: relative;
}
.ui-select-match-item {
padding: 2px;
float: left;
display: block;
margin-right: -17px !important;
}
.ui-select-match-item .select-label {
padding: 4px;
color: #fff;
padding-right: 23px;
}
.ui-select-container {
background-color: #fafafa !important;
border: 1px solid #fafafa;
}
.ui-select-container.open {
border: 1px solid #aaaaaa;
}
.ui-select-container input.ui-select-search {
padding: 0px !important;
margin: 2px !important;
background-color: transparent;
border: none;
}
.ui-select-bootstrap .ui-select-choices-row > a {
padding: 3px !important;
}
.ui-select-choices-row-inner {
margin-bottom: 2px;
width: 100%;
padding: 0;
}
.ui-select-choices-row-inner span {
padding: 3px;
padding-left: 10px;
padding-right: 10px;
width: 100%;
}
/* ui-select disabled */
.ui-select-container[disabled] {
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: 0px !important;
}
@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 {
width:100% !important;
}
#markdown p {
margin-bottom: 15px;
}
#markdown * {
white-space: normal;
word-wrap:break-word;
word-wrap: break-word; /* All browsers since IE 5.5+ */
overflow-wrap: break-word; /* Renamed property in CSS3 draft spec */
}
#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;
}
.shareWithList .username {
min-width: 100px;
}
.shareWithList .icon {
display: inline-block;
background-size: 16px 16px;
width: 16px;
height: 16px;
}
.shareWithList .fa {
font-size: 12pt;
width: 16px;
text-align: center;
}
.shareOption {
margin-top: 4px;
}
.app-deck .icon {
display: inline-block;
}
.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');
}
+1430
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:
grunt build
watch:
grunt watch
install:
npm install
bower install
+17 -7
View File
@@ -20,6 +20,9 @@
* *
*/ */
/* global angular */
angular.module('markdown', []) angular.module('markdown', [])
.provider('markdown', [function () { .provider('markdown', [function () {
var opts = {}; 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', [ var app = angular.module('Deck', [
'ngRoute', ngsanitize,
'ngSanitize', uirouter,
'ui.router', angularuiselect,
'ui.select', ngsortable, md, nganimate,
'as.sortable', 'angularFileUpload'
'mdMarkdownIt',
'ngAnimate'
]); ]);
export default app;
+81 -41
View File
@@ -20,53 +20,93 @@
* *
*/ */
app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) { /* global app oc_requesttoken markdownitLinkTarget */
'use strict';
$httpProvider.defaults.headers.common.requesttoken = oc_requesttoken;
$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({ app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterProvider, $stateProvider, $compileProvider, markdownItConverterProvider) {
breaks: true, 'use strict';
linkify: true, $httpProvider.defaults.headers.common.requesttoken = oc_requesttoken;
xhtmlOut: true
});
markdownItConverterProvider.use(markdownitLinkTarget);
$urlRouterProvider.otherwise("/");
$stateProvider $compileProvider.debugInfoEnabled(true);
.state('list', {
url: "/", markdownItConverterProvider.use(markdownitLinkTarget, {
templateUrl: "/boardlist.mainView.html", breaks: true,
controller: 'ListController' 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', { .state('board', {
url: "/board/:boardId/:filter", url: '/board/:boardId/:filter',
templateUrl: "/board.html", templateUrl: '/board.html',
controller: 'BoardController', controller: 'BoardController',
params: { params: {
filter: { value: '', dynamic: true } filter: {value: '', dynamic: true}
} }
}) })
.state('board.detail', { .state('board.detail', {
url: "/detail/", url: '/detail/',
reloadOnSearch : false, reloadOnSearch: false,
views: { params: {
"sidebarView": { tab: {value: 0, dynamic: true},
templateUrl: "/board.sidebarView.html" },
views: {
'sidebarView': {
templateUrl: '/board.sidebarView.html'
} }
} }
}) })
.state('board.card', { .state('board.card', {
url: "/card/:cardId", url: '/card/:cardId',
views: { params: {
"sidebarView": { tab: {value: 0, dynamic: true},
templateUrl: "/card.sidebarView.html", },
controller: 'CardController' 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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from './App.js';
app.run(function ($document, $rootScope, $transitions) { /* global Snap */
'use strict'; app.run(function ($document, $rootScope, $transitions, BoardService) {
$document.click(function (event) { 'use strict';
$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();
});
$('link[rel="shortcut icon"]').attr( $document.click(function (event) {
'href', $rootScope.$broadcast('documentClicked', event);
OC.filePath('deck', 'img', 'app-512.png') });
); $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.6",
"jquery": "3.1.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) { import app from '../app/App.js';
$rootScope.sidebar = {
show: false /** global: OC */
}; app.controller('AppController', function ($scope, $location, $http, $log, $rootScope) {
$scope.sidebar = $rootScope.sidebar; $rootScope.sidebar = {
$scope.user = oc_current_user; 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 -41
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; $scope.sidebar = $rootScope.sidebar;
@@ -29,65 +31,104 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
addCard: [], addCard: [],
}; };
$scope.newLabel = {}; $scope.newLabel = {};
$scope.status.boardtab = $stateParams.detailTab;
$scope.OC = OC;
$scope.stackservice = StackService; $scope.stackservice = StackService;
$scope.boardservice = BoardService; $scope.boardservice = BoardService;
$scope.cardservice = CardService; $scope.cardservice = CardService;
$scope.statusservice = StatusService.getInstance(); $scope.statusservice = StatusService.getInstance();
$scope.labelservice = LabelService; $scope.labelservice = LabelService;
$scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD']; $scope.defaultColors = ['31CC7C', '317CCC', 'FF7A66', 'F1DB50', '7C31CC', 'CC317C', '3A3B3D', 'CACBCD'];
$scope.board = BoardService.getCurrent();
$scope.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.search = function (searchText) {
$scope.searchText = searchText; $scope.searchText = searchText;
$scope.refreshData(); $scope.refreshData();
}; };
$scope.board = BoardService.getCurrent(); $scope.$watch(function () {
StackService.clear(); //FIXME: Is this still needed? 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();
$scope.statusservice.retainWaiting(); $scope.statusservice.retainWaiting();
// FIXME: ugly solution for archive // handle filter parameter for switching between archived/unarchived cards
$scope.$state = $stateParams;
$scope.filter = $stateParams.filter;
$scope.$watch('$state.filter', function (name) {
$scope.filter = name;
});
$scope.switchFilter = function (filter) { $scope.switchFilter = function (filter) {
$state.go('.', {filter: filter}, {notify: false}); $state.go('.', {filter: filter});
$scope.filter = filter;
}; };
$scope.$watch('filter', function (name) { $scope.$watch(function() {
if (name === "archive") { return $scope.params.filter;
}, function (filter) {
if (filter === 'archive') {
$scope.loadArchived(); $scope.loadArchived();
} else { } else {
$scope.loadDefault(); $scope.loadDefault();
} }
}); });
$scope.stacksData = StackService; $scope.stacksData = StackService;
$scope.stacks = {}; $scope.stacks = [];
$scope.$watch('stacksData', function (value) { $scope.$watch('stacksData', function () {
$scope.refreshData(); $scope.refreshData();
}, true); }, true);
$scope.refreshData = function () { $scope.refreshData = function () {
if ($scope.filter === "archive") { if ($scope.params.filter === 'archive') {
$scope.filterData('-lastModified', $scope.searchText); $scope.filterData('-lastModified', $scope.searchText);
} else { } else {
$scope.filterData('order', $scope.searchText); $scope.filterData('order', $scope.searchText);
} }
}; };
$scope.checkCanEdit = function () { $scope.checkCanEdit = function () {
return !$scope.archived; return !BoardService.getCurrent().archived;
}; };
// filter cards here, as ng-sortable will not work nicely with html-inline filters // filter cards here, as ng-sortable will not work nicely with html-inline filters
$scope.filterData = function (order, text) { $scope.filterData = function (order, text) {
if ($scope.stacks === undefined) if ($scope.stacks === undefined) {
return; 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) { angular.forEach($scope.stacks, function (value, key) {
var cards = $filter('cardSearchFilter')(value.cards, text); var cards = $filter('cardSearchFilter')(value.cards, text);
cards = $filter('orderBy')(cards, order); cards = $filter('orderBy')(cards, order);
@@ -113,18 +154,13 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
// Handle initial Loading // Handle initial Loading
BoardService.fetchOne($scope.id).then(function (data) { BoardService.fetchOne($scope.id).then(function (data) {
BoardService.getPermissions();
$scope.statusservice.releaseWaiting(); $scope.statusservice.releaseWaiting();
$scope.setPageTitle();
}, function (error) { }, function (error) {
$scope.statusservice.setError('Error occured', error); $scope.statusservice.setError('Error occured', error);
}); });
BoardService.searchUsers('%25');
$scope.searchForUser = function (search) { $scope.searchForUser = function (search) {
if (search == "") {
search = "%25";
}
BoardService.searchUsers(search); BoardService.searchUsers(search);
}; };
@@ -134,7 +170,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
// Create a new Stack // Create a new Stack
$scope.createStack = function () { $scope.createStack = function () {
StackService.create($scope.newStack).then(function (data) { StackService.create($scope.newStack).then(function (data) {
$scope.newStack.title = ""; $scope.newStack.title = '';
}); });
}; };
@@ -146,13 +182,19 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
}; };
CardService.create(newCard).then(function (data) { CardService.create(newCard).then(function (data) {
$scope.stackservice.addCard(data); $scope.stackservice.addCard(data);
$scope.newCard.title = ""; $scope.newCard.title = '';
}); });
}; };
$scope.cardDelete = function (card) { $scope.cardDelete = function (card) {
CardService.delete(card.id); OC.dialogs.confirm(t('deck', 'Are you sure you want to delete this card with all of its data?'), t('deck', 'Delete'), function(state) {
StackService.removeCard(card); if (!state) {
return;
}
CardService.delete(card.id).then(function () {
StackService.removeCard(card);
});
});
}; };
$scope.cardArchive = function (card) { $scope.cardArchive = function (card) {
CardService.archive(card); CardService.archive(card);
@@ -172,10 +214,12 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
}; };
$scope.labelCreate = function (label) { $scope.labelCreate = function (label) {
label.boardId = $scope.id; label.boardId = $scope.id;
LabelService.create(label); LabelService.create(label).then(function (data) {
BoardService.getCurrent().labels.push(label); $scope.newStack.title = '';
$scope.status.createLabel = false; BoardService.getCurrent().labels.push(data);
$scope.newLabel = {}; $scope.status.createLabel = false;
$scope.newLabel = {};
});
}; };
$scope.labelUpdate = function (label) { $scope.labelUpdate = function (label) {
label.edit = false; label.edit = false;
@@ -188,15 +232,32 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
$scope.status.addSharee = null; $scope.status.addSharee = null;
}; };
$scope.aclDelete = function (acl) { $scope.aclDelete = function (acl) {
BoardService.deleteAcl(acl); BoardService.deleteAcl(acl).then(function(data) {
$scope.loadDefault();
$scope.refreshData();
});
}; };
$scope.aclUpdate = function (acl) { $scope.aclUpdate = function (acl) {
BoardService.updateAcl(acl); BoardService.updateAcl(acl);
}; };
$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 // settings for card sorting
$scope.sortOptions = { $scope.sortOptions = {
id: 'card',
itemMoved: function (event) { itemMoved: function (event) {
event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column; event.source.itemScope.modelValue.status = event.dest.sortableScope.$parent.column;
var order = event.dest.index; var order = event.dest.index;
@@ -207,7 +268,7 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
CardService.update(card); CardService.update(card);
CardService.reorder(card, order).then(function (data) { CardService.reorder(card, order).then(function (data) {
StackService.addCard(card); StackService.addCard(card);
StackService.reorder(card, order); StackService.reorderCard(card, order);
StackService.removeCard({ StackService.removeCard({
id: card.id, id: card.id,
stackId: oldStack stackId: oldStack
@@ -219,17 +280,53 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
var card = event.source.itemScope.c; var card = event.source.itemScope.c;
var stack = event.dest.sortableScope.$parent.s.id; var stack = event.dest.sortableScope.$parent.s.id;
CardService.reorder(card, order).then(function (data) { CardService.reorder(card, order).then(function (data) {
StackService.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(); $scope.refreshData();
}); });
}, },
scrollableContainer: '#board', scrollableContainer: '#board',
containerPositioning: 'relative', containerPositioning: 'relative',
containment: '#board', containment: '#innerBoard',
// auto scroll on drag
dragMove: function (itemPosition, containment, eventObj) { dragMove: function (itemPosition, containment, eventObj) {
if (eventObj) { if (eventObj) {
var container = $("#board"); var container = $('#board');
var offset = container.offset(); var offset = container.offset();
var targetX = eventObj.pageX - (offset.left || container.scrollLeft()); var targetX = eventObj.pageX - (offset.left || container.scrollLeft());
var targetY = eventObj.pageY - (offset.top || container.scrollTop()); var targetY = eventObj.pageY - (offset.top || container.scrollTop());
@@ -244,7 +341,24 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
container.scrollTop(container.scrollTop() + 50); 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> * @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) { /* global app moment angular OC */
$scope.sidebar = $rootScope.sidebar; import app from '../app/App.js';
$scope.status = {};
$scope.cardservice = CardService; app.controller('CardController', function ($scope, $rootScope, $sce, $location, $stateParams, $state, $interval, $timeout, $filter, BoardService, CardService, StackService, StatusService, markdownItConverter, FileService) {
$scope.cardId = $stateParams.cardId; $scope.sidebar = $rootScope.sidebar;
$scope.status = {
lastEdit: 0,
lastSave: Date.now()
};
$scope.statusservice = StatusService.getInstance(); $scope.cardservice = CardService;
$scope.boardservice = BoardService; $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.isArray = angular.isArray;
$scope.statusservice.releaseWaiting(); // workaround for $stateParams changes not being propagated
$scope.archived = CardService.getCurrent().archived; $scope.$watch(function() {
}, function(error) { return $state.params;
}); }, function (params) {
$scope.params = params;
}, true);
$scope.params = $state.params;
$scope.cardRenameShow = function() { $scope.addAttachmentToDescription = function(insertText) {
if($scope.archived || !BoardService.canEdit()) let el = document.querySelectorAll('textarea')[0];
return false; let start = el.selectionStart;
else { let end = el.selectionEnd;
$scope.status.cardRename=true; let text = $scope.status.edit.description || '';
} let before = text.substring(0, start);
}; let after = text.substring(end, text.length);
$scope.cardEditDescriptionShow = function($event) { let newText = before + '\n' + insertText + '\n' + after;
var node = $event.target.nodeName; $scope.status.edit.description = newText;
console.log($event); el.selectionStart = el.selectionEnd = start + newText.length;
console.log(BoardService); el.focus();
if($scope.card.archived || !$scope.boardservice.canEdit()) { $scope.status.continueEdit = false;
console.log(node); $scope.cardEditDescriptionChanged();
} else { $scope.status.selectAttachment = false;
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.labelAssign = function(element, model) { $scope.abortAttachmentSelection = function() {
CardService.assignLabel($scope.cardId, element.id); $scope.status.continueEdit = false;
var card = CardService.getCurrent(); $scope.status.selectAttachment = false;
StackService.updateCard(card); let el = document.querySelectorAll('textarea')[0];
}; el.focus();
};
$scope.labelRemove = function(element, model) {
CardService.removeLabel($scope.cardId, element.id) $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};
};
}]);
+168 -48
View File
@@ -1,4 +1,3 @@
/* /*
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net> * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
* *
@@ -21,58 +20,179 @@
* *
*/ */
app.controller('ListController', function ($scope, $location, $filter, BoardService, $element) { /* global app angular */
$scope.boards = [];
$scope.newBoard = {};
$scope.status = {};
$scope.colors = ['0082c9', '00c9c6','00c906', 'c92b00', 'F1DB50', '7C31CC', '3A3B3D', 'CACBCD'];
$scope.boardservice = BoardService;
// FIXME: not nice, but we want to load this only once var ListController = function ($scope, $location, $filter, BoardService, $element, $timeout, $stateParams, $state, StatusService) {
if($element.attr('id') === 'app-navigation') {
BoardService.fetchAll().then(function(data) {
$scope.filterData();
}, function (error) {
// TODO: show error when loading fails
});
}
$scope.filterData = function () { function calculateNewColor() {
angular.copy($scope.boardservice.getData(), $scope.boardservice.sorted); var boards = BoardService.getAll();
$scope.boardservice.sorted = $filter('orderBy')($scope.boardservice.sorted, 'title'); var boardKeys = Object.keys(boards);
}; var colorOccurrences = [];
$scope.selectColor = function(color) { for (var i = 0; i < $scope.colors.length; i++) {
$scope.newBoard.color = color; colorOccurrences.push(0);
}; }
$scope.boardCreate = function() { for (var j = 0; j < boardKeys.length; j++) {
if(!$scope.newBoard.title || !$scope.newBoard.color) { var key = boardKeys[j];
$scope.status.addBoard=false; var board = boards[key];
return;
}
BoardService.create($scope.newBoard)
.then(function (response) {
$scope.newBoard = {};
$scope.status.addBoard=false;
$scope.filterData();
}, function(error) {
$scope.status.createBoard = 'Unable to insert board: ' + error.message;
});
};
$scope.boardUpdate = function(board) { if (board && $scope.colors.indexOf(board.color) !== -1) {
BoardService.update(board).then(function(data) { colorOccurrences[$scope.colors.indexOf(board.color)]++;
$scope.filterData(); }
}); }
board.status.edit = false;
};
$scope.boardDelete = function(board) { return $scope.colors[colorOccurrences.indexOf(Math.min.apply(Math, colorOccurrences))];
BoardService.delete(board.id).then(function (data) { }
$scope.filterData();
});
};
}); $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;
return;
}
BoardService.create($scope.newBoard)
.then(function (response) {
$scope.newBoard = {};
$scope.newBoard.color = calculateNewColor();
$scope.status.addBoard=false;
filterData();
}, function(error) {
$scope.status.createBoard = 'Unable to insert board: ' + error.message;
});
};
$scope.boardUpdate = function(board) {
BoardService.update(board).then(function(data) {
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) {
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> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('appPopoverMenuUtils', function () { app.directive('appPopoverMenuUtils', function () {
'use strict'; 'use strict';
return { return {
restrict: 'C', restrict: 'C',
link: function (scope, elm) { link: function (scope, elm) {
var menu = elm.find('.popovermenu'); var menu = elm.find('.popovermenu');
var button = elm.find('button'); var button = elm.find('button');
button.click(function (e) { button.click(function (e) {
menu.toggleClass('hidden'); var popovermenus = $('.popovermenu');
if(!menu.hasClass('hidden')) { var shouldShow = menu.hasClass('hidden');
button.css('display','block'); popovermenus.addClass('hidden');
} else { if (shouldShow) {
button.css('display',''); menu.toggleClass('hidden');
} }
e.stopPropagation(); e.stopPropagation();
}); });
scope.$on('documentClicked', function (scope, event) { scope.$on('documentClicked', function (scope, event) {
if (event.target !== button) { /* prevent closing popover if target has no-close class */
menu.addClass('hidden'); if (event.target !== button && !$(event.target).hasClass('no-close')) {
} menu.addClass('hidden');
button.css('display',''); }
}); });
} }
}; };
}); });
+18 -17
View File
@@ -20,27 +20,28 @@
* *
*/ */
import app from '../app/App.js';
// OwnCloud Click Handling // OwnCloud Click Handling
// https://doc.owncloud.org/server/8.0/developer_manual/app/css.html // https://doc.owncloud.org/server/8.0/developer_manual/app/css.html
app.directive('appNavigationEntryUtils', function () { app.directive('appNavigationEntryUtils', function () {
'use strict'; 'use strict';
return { return {
restrict: 'C', restrict: 'C',
link: function (scope, elm) { link: function (scope, elm) {
var menu = elm.siblings('.app-navigation-entry-menu'); var menu = elm.siblings('.app-navigation-entry-menu');
var button = $(elm) var button = $(elm)
.find('.app-navigation-entry-utils-menu-button button'); .find('.app-navigation-entry-utils-menu-button button');
button.click(function () { button.click(function () {
menu.toggleClass('open'); menu.toggleClass('open');
}); });
scope.$on('documentClicked', function (scope, event) { scope.$on('documentClicked', function (scope, event) {
if (event.target !== button[0]) { if (event.target !== button[0]) {
menu.removeClass('open'); menu.removeClass('open');
} }
}); });
} }
}; };
}); });
+5 -4
View File
@@ -19,10 +19,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('autofocusOnInsert', function () { app.directive('autofocusOnInsert', function () {
'use strict'; 'use strict';
return function (scope, elm) { return function (scope, elm) {
elm.focus(); elm.focus();
}; };
}); });
+23 -8
View File
@@ -19,18 +19,33 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('avatar', function() { app.directive('avatar', function() {
'use strict'; 'use strict';
return { return {
restrict: 'A', restrict: 'AEC',
scope: true, 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){ link: function(scope, element, attr){
attr.$observe('displayname', function(value){ scope.uid = attr.displayname;
if(value!==undefined) { scope.displayname = attr.displayname;
$(element).avatar(value, 32); 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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
// original idea from blockloop: http://stackoverflow.com/a/24090733 // original idea from blockloop: http://stackoverflow.com/a/24090733
app.directive('elastic', [ app.directive('elastic', [
+1
View File
@@ -19,6 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.directive('search', function ($document, $location) { app.directive('search', function ($document, $location) {
'use strict'; '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> * @author Julius Härtl <jus@bitgrid.net>
* *
* @license GNU AGPL version 3 or any later version * @license GNU AGPL version 3 or any later version
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the * published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. * License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details. * GNU Affero General Public License for more details.
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('relativeDateFilter', function() { app.filter('boardFilterAcl', function() {
return function (timestamp) { return function(boards) {
return OC.Util.relativeModifiedDate(timestamp*1000); 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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
// usage | cardFilter({ member: 'admin'}) // usage | cardFilter({ member: 'admin'})
app.filter('cardFilter', function() { app.filter('cardFilter', function() {
return function(cards, rules) { return function(cards, rules) {
var _result = {}; var _result = [];
angular.forEach(cards, function(card){ angular.forEach(cards, function(card){
var _card = card; var _card = card;
angular.some(rules, function(rule, condition) { var keys = Object.keys(rules);
if(_card[rule]===condition) { keys.some(function(key, condition) {
if(_card[key]===rules[key]) {
_result.push(_card); _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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('cardSearchFilter', function() { app.filter('cardSearchFilter', function() {
return function(cards, searchString) { return function(cards, searchString) {
+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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('iconWhiteFilter', function() { app.filter('iconWhiteFilter', function () {
return function (hex) { return function (hex) {
// RGB2HLS by Garry Tan // RGB2HLS by Garry Tan
// http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c // 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), g: parseInt(result[2], 16),
b: parseInt(result[3], 16) b: parseInt(result[3], 16)
} : null; } : null;
if(result !== null) { if (result === null) {
var r = color.r/255; return '';
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 "";
} }
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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('lightenColorFilter', function() { app.filter('lightenColorFilter', function() {
return function (hex) { return function (hex) {
@@ -29,9 +30,9 @@ app.filter('lightenColorFilter', function() {
b: parseInt(result[3], 16) b: parseInt(result[3], 16)
} : null; } : null;
if (result !== null) { if (result !== null) {
return "rgba(" + color.r + "," + color.g + "," + color.b + ",0.7)"; return 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',0.7)';
} else { } else {
return "#" + hex; return '#' + hex;
} }
} };
}); });
+8 -3
View File
@@ -19,13 +19,18 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('orderObjectBy', function(){ app.filter('orderObjectBy', function(){
return function(input, attribute) { return function(input, attribute) {
if (!angular.isObject(input)) return input; if (!angular.isObject(input)) {
return input;
}
var array = []; var array = [];
for(var objectKey in input) { for(var objectKey in input) {
array.push(input[objectKey]); if ({}.hasOwnProperty.call(input, objectKey)) {
array.push(input[objectKey]);
}
} }
array.sort(function(a, b){ array.sort(function(a, b){
@@ -34,5 +39,5 @@ app.filter('orderObjectBy', function(){
return a < b; return a < b;
}); });
return array; return array;
} };
}); });
+24 -17
View File
@@ -19,44 +19,51 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.filter('textColorFilter', function() { app.filter('textColorFilter', function () {
return function (hex) { return function (hex) {
// RGB2HLS by Garry Tan // RGB2HLS by Garry Tan
// http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c // 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 ? { var color = result ? {
r: parseInt(result[1], 16), r: parseInt(result[1], 16),
g: parseInt(result[2], 16), g: parseInt(result[2], 16),
b: parseInt(result[3], 16) b: parseInt(result[3], 16)
} : null; } : null;
if(result !== null) { if (result !== null) {
var r = color.r/255; var r = color.r / 255;
var g = color.g/255; var g = color.g / 255;
var b = color.b/255; var b = color.b / 255;
var max = Math.max(r, g, b), min = Math.min(r, g, b); var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2; var h, s, l = (max + min) / 2;
if(max == min){ if (max === min) {
h = s = 0; // achromatic h = s = 0; // achromatic
}else{ } else {
var d = max - min; var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min); s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch(max){ switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break; case r:
case g: h = (b - r) / d + 2; break; h = (g - b) / d + (g < b ? 6 : 0);
case b: h = (r - g) / d + 4; break; break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
} }
h /= 6; h /= 6;
} }
if(l<0.5) { if (l < 0.5) {
return "#ffffff"; return '#ffffff';
} else { } else {
return "#000000"; return '#000000';
} }
} else { } else {
return "#000000"; return '#000000';
} }
} };
}); });
+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));
};
+10047
View File
File diff suppressed because it is too large Load Diff
+29 -13
View File
@@ -1,28 +1,44 @@
{ {
"name": "deck", "name": "deck",
"description": "Frontend for the Nextcloud Deck app",
"repository": "https://github.com/nextcloud/deck",
"version": "1.0.0", "version": "1.0.0",
"main": "Gruntfile.js", "main": "Gruntfile.js",
"directories": { "directories": {
"test": "tests" "test": "tests"
}, },
"dependencies": {}, "dependencies": {
"@uirouter/angularjs": "^1.0.18",
"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",
"babel-polyfill": "^6.26.0",
"markdown-it": "^8.4.1",
"markdown-it-link-target": "^1.0.2",
"ng-sortable": "^1.3.8",
"ui-select": "^0.19.8"
},
"devDependencies": { "devDependencies": {
"bower": "^1.8.0", "babel-core": "^6.26.0",
"grunt": "^1.0.1", "babel-loader": "^7.1.2",
"grunt-contrib-concat": "^1.0.1", "babel-preset-env": "^1.7.0",
"grunt-contrib-jshint": "^1.1.0", "css-loader": "^0.28.9",
"grunt-contrib-watch": "^1.0.0", "karma": "^2.0.3",
"grunt-karma": "^2.0.0", "mini-css-extract-plugin": "^0.4.0",
"grunt-phpunit": "^0.3.6", "node-sass": "^4.5.3",
"grunt-wrap": "^0.3.0", "webpack": "^4.12.0",
"jshint-stylish": "^2.2.1", "webpack-cli": "^3.0.8",
"karma": "^1.4.1" "webpack-merge": "^4.1.3"
}, },
"scripts": { "scripts": {
"build": "./node_modules/webpack-cli/bin/cli.js --mode production --config webpack.prod.config.js",
"dev": "./node_modules/webpack-cli/bin/cli.js --mode development --config webpack.dev.config.js",
"watch": "./node_modules/webpack-cli/bin/cli.js --mode development --config webpack.dev.config.js --watch",
"test": "echo \"Warning: no test specified\" && exit 0" "test": "echo \"Warning: no test specified\" && exit 0"
}, },
"author": "", "author": "",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"keywords": [], "keywords": []
"description": ""
} }
+135 -123
View File
@@ -19,148 +19,160 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('ApiService', function($http, $q){ /** global: oc_defaults */
var ApiService = function(http, endpoint) { app.factory('ApiService', function ($http, $q) {
this.endpoint = endpoint; var ApiService = function (http, endpoint) {
this.baseUrl = OC.generateUrl('/apps/deck/' + endpoint); this.endpoint = endpoint;
this.http = http; this.baseUrl = OC.generateUrl('/apps/deck/' + endpoint);
this.q = $q; this.http = http;
this.data = {}; this.q = $q;
this.id = null; this.data = {};
this.sorted = []; this.id = null;
}; this.sorted = [];
};
ApiService.prototype.fetchAll = function(){ ApiService.prototype.fetchAll = function () {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.get(this.baseUrl).then(function (response) { $http.get(this.baseUrl).then(function (response) {
var objects = response.data; var objects = response.data;
objects.forEach(function (obj) { objects.forEach(function (obj) {
self.data[obj.id] = obj; self.data[obj.id] = obj;
}); });
deferred.resolve(self.data); deferred.resolve(self.data);
}, function (error) { }, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed'); deferred.reject('Fetching ' + self.endpoint + ' failed');
}); });
return deferred.promise; return deferred.promise;
}; };
ApiService.prototype.fetchOne = function (id) { ApiService.prototype.fetchOne = function (id) {
this.id = id; this.id = id;
var deferred = $q.defer(); var deferred = $q.defer();
if(id===undefined) { if (id === undefined) {
return deferred.promise; return deferred.promise;
} }
var self = this; var self = this;
$http.get(this.baseUrl + '/' + id).then(function (response) { $http.get(this.baseUrl + '/' + id).then(function (response) {
data = response.data; var data = response.data;
if(self.data[data.id]===undefined) { if (self.data[data.id] === undefined) {
self.data[data.id] = response.data; self.data[data.id] = response.data;
} }
$.each(response.data, function(key, value) { $.each(response.data, function (key, value) {
self.data[data.id][key] = value; self.data[data.id][key] = value;
}); });
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Fetching ' + self.endpoint + ' failed'); deferred.reject('Fetching ' + self.endpoint + ' failed');
}); });
return deferred.promise; return deferred.promise;
}; };
ApiService.prototype.create = function (entity) { ApiService.prototype.create = function (entity) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.post(this.baseUrl, entity).then(function (response) { $http.post(this.baseUrl, entity).then(function (response) {
self.add(response.data); self.add(response.data);
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Fetching' + self.endpoint + ' failed'); deferred.reject('Fetching' + self.endpoint + ' failed');
}); });
return deferred.promise; return deferred.promise;
}; };
ApiService.prototype.update = function (entity) { ApiService.prototype.update = function (entity) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.put(this.baseUrl + '/' + entity.id, entity).then(function (response) { $http.put(this.baseUrl + '/' + entity.id, entity).then(function (response) {
self.add(response.data); self.add(response.data);
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Updating ' + self.endpoint + ' failed'); deferred.reject('Updating ' + self.endpoint + ' failed');
}); });
return deferred.promise; return deferred.promise;
}; };
ApiService.prototype.delete = function (id) { ApiService.prototype.delete = function (id) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.delete(this.baseUrl + '/' + id).then(function (response) { $http.delete(this.baseUrl + '/' + id).then(function (response) {
self.remove(id); self.remove(id);
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Deleting ' + self.endpoint + ' failed'); deferred.reject('Deleting ' + self.endpoint + ' failed');
}); });
return deferred.promise; return deferred.promise;
}; };
// 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 () { // methods for managing data
return this.data[this.id]; 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() { ApiService.prototype.getCurrent = function () {
return $.map(this.data, function(value, index) { return this.data[this.id];
return [value]; };
});
};
ApiService.prototype.getAll = function () { ApiService.prototype.unsetCurrrent = function () {
return this.data; 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;
}); });
+223 -112
View File
@@ -19,128 +19,239 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
/* global app OC */
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){ BoardService.prototype.delete = function (id) {
var BoardService = function($http, ep, $q) { var deferred = $q.defer();
ApiService.call(this, $http, ep, $q); var self = this;
};
BoardService.prototype = angular.copy(ApiService.prototype);
BoardService.prototype.searchUsers = function(search) { $http.delete(this.baseUrl + '/' + id).then(function (response) {
var url = OC.generateUrl('/apps/deck/share/search/'+search); self.data[id].deletedAt = response.data.deletedAt;
var deferred = $q.defer(); deferred.resolve(response.data);
var self = this; }, function (error) {
$http.get(url).then(function (response) { deferred.reject('Deleting ' + self.endpoint + ' failed');
});
return deferred.promise;
};
self.sharees = []; BoardService.prototype.deleteUndo = function (id) {
// filter out everyone who is already in the share list var deferred = $q.defer();
angular.forEach(response.data, function(item) { var self = this;
var exists = false; var _id = id;
angular.forEach(self.getCurrent().acl, function(acl) { $http.post(this.baseUrl + '/' + id + '/deleteUndo').then(function (response) {
if (acl.participant === item.participant) { self.data[_id].deletedAt = 0;
exists = true; deferred.resolve(response.data);
} }, function (error) {
}); deferred.reject('Deleting ' + self.endpoint + ' failed');
if(!exists) { });
self.sharees.push(item); return deferred.promise;
} };
});
deferred.resolve(response.data); BoardService.prototype.searchUsers = function (search) {
}, function (error) { var deferred = $q.defer();
deferred.reject('Error while update ' + self.endpoint); var self = this;
}); var searchData = {
return deferred.promise; format: 'json',
}; perPage: 4,
itemType: [0, 1]
};
if (search !== "") {
searchData.search = search;
}
$http({
method: 'GET',
url: OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees',
params: searchData
})
.then(function (result) {
var response = result.data;
if (response.ocs.meta.statuscode !== 100) {
deferred.reject('Error while searching for sharees');
return;
}
self.sharees = [];
BoardService.prototype.addAcl = function(acl) { var users = response.ocs.data.exact.users.concat(response.ocs.data.users.slice(0, 4));
var board = this.getCurrent(); var groups = response.ocs.data.exact.groups.concat(response.ocs.data.groups.slice(0, 4));
var deferred = $q.defer();
var self = this;
var _acl = acl;
$http.post(this.baseUrl + '/' + acl.boardId + '/acl', _acl).then(function (response) {
if(!board.acl) {
board.acl = {};
}
board.acl[response.data.id] = response.data;
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error creating ACL ' + _acl);
});
acl = null;
return deferred.promise;
};
BoardService.prototype.deleteAcl = function(acl) { // filter out everyone who is already in the share list
var board = this.getCurrent(); angular.forEach(users, function (item) {
var deferred = $q.defer(); var acl = self.generateAcl(OC.Share.SHARE_TYPE_USER, item);
var self = this; var exists = false;
$http.delete(this.baseUrl + '/' + acl.boardId + '/acl/' + acl.id).then(function (response) { angular.forEach(self.getCurrent().acl, function (acl) {
delete board.acl[response.data.id]; if (acl.participant.primaryKey === item.value.shareWith) {
deferred.resolve(response.data); exists = true;
}, function (error) { }
deferred.reject('Error deleting ACL ' + acl.id); });
}); if (!exists && OC.getCurrentUser().uid !== item.value.shareWith) {
acl = null; self.sharees.push(acl);
return deferred.promise; }
}; });
angular.forEach(groups, function (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) {
exists = true;
}
});
if (!exists) {
self.sharees.push(acl);
}
});
BoardService.prototype.updateAcl = function(acl) { deferred.resolve(self.sharees);
var board = this.getCurrent(); }, function () {
var deferred = $q.defer(); deferred.reject('Error while searching for sharees');
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.getPermissions = function() { return deferred.promise;
var board = this.getCurrent(); };
var deferred = $q.defer();
$http.get(this.baseUrl + '/' + board.id + '/permissions').then(function (response) {
board.permissions = response.data;
console.log(board.permissions);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error fetching board permissions ' + board);
});
};
BoardService.prototype.canRead = function() { BoardService.prototype.generateAcl = function (type, ocsItem) {
if(!this.getCurrent() || !this.getCurrent().permissions) { return {
return false; boardId: null,
} id: null,
return this.getCurrent().permissions['PERMISSION_READ']; owner: false,
} participant: {
primaryKey: ocsItem.value.shareWith,
uid: ocsItem.value.shareWith,
displayname: ocsItem.label
},
permissionEdit: true,
permissionManage: true,
permissionShare: true,
type: type
};
};
BoardService.prototype.canEdit = function() { BoardService.prototype.addAcl = function (acl) {
if(!this.getCurrent() || !this.getCurrent().permissions) { var board = this.getCurrent();
return false; var deferred = $q.defer();
} var self = this;
return this.getCurrent().permissions['PERMISSION_EDIT']; var _acl = acl;
} $http.post(this.baseUrl + '/' + acl.boardId + '/acl', _acl).then(function (response) {
if (!board.acl || board.acl.length === 0) {
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);
});
acl = null;
return deferred.promise;
};
BoardService.prototype.canManage = function() { BoardService.prototype.deleteAcl = function (acl) {
if(!this.getCurrent() || !this.getCurrent().permissions) { var board = this.getCurrent();
return false; var deferred = $q.defer();
} var self = this;
return this.getCurrent().permissions['PERMISSION_MANAGE']; $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.canShare = function() { BoardService.prototype.updateAcl = function (acl) {
if(!this.getCurrent() || !this.getCurrent().permissions) { var board = this.getCurrent();
return false; var deferred = $q.defer();
} var self = this;
return this.getCurrent().permissions['PERMISSION_SHARE']; 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;
};
service = new BoardService($http, 'boards', $q); BoardService.prototype._updateUsers = function () {
return service; if (!this.getCurrent() || !this.getCurrent().acl) {
return [];
}); }
this.getCurrent().users = [this.getCurrent().owner];
let self = this;
angular.forEach(this.getCurrent().acl, function(value, key) {
if (value.type === OC.Share.SHARE_TYPE_USER) {
self.getCurrent().users.push(value.participant);
}
});
};
BoardService.prototype.getUsers = function () {
if (this.getCurrent() && !this.getCurrent().users) {
this._updateUsers();
}
return this.getCurrent().users;
};
BoardService.prototype.canRead = function () {
if (!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_READ'];
};
BoardService.prototype.canEdit = function () {
if (!this.getCurrent() || !this.getCurrent().permissions) {
return false;
}
return this.getCurrent().permissions['PERMISSION_EDIT'];
};
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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('CardService', function(ApiService, $http, $q){ app.factory('CardService', function (ApiService, $http, $q) {
var CardService = function($http, ep, $q) { var CardService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q); ApiService.call(this, $http, ep, $q);
}; };
CardService.prototype = angular.copy(ApiService.prototype); CardService.prototype = angular.copy(ApiService.prototype);
CardService.prototype.reorder = function(card, order) { CardService.prototype.reorder = function (card, order) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.put(this.baseUrl + '/' + card.id + '/reorder', {cardId: card.id, order: order, stackId: card.stackId}).then(function (response) { $http.put(this.baseUrl + '/' + card.id + '/reorder', {
deferred.resolve(response.data); cardId: card.id,
}, function (error) { order: order,
deferred.reject('Error while update ' + self.endpoint); stackId: card.stackId
}); }).then(function (response) {
return deferred.promise; deferred.resolve(response.data);
}; }, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.rename = function(card) { CardService.prototype.rename = function (card) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.put(this.baseUrl + '/' + card.id + '/rename', {cardId: card.id, title: card.title}).then(function (response) { $http.put(this.baseUrl + '/' + card.id + '/rename', {
self.data[card.id].title = card.title; cardId: card.id,
deferred.resolve(response.data); title: card.title
}, function (error) { }).then(function (response) {
deferred.reject('Error while renaming ' + self.endpoint); self.data[card.id].title = card.title;
}); deferred.resolve(response.data);
return deferred.promise; }, function (error) {
}; deferred.reject('Error while renaming ' + self.endpoint);
});
return deferred.promise;
};
CardService.prototype.assignLabel = function(card, label) { CardService.prototype.assignLabel = function (card, label) {
var url = this.baseUrl + '/' + card + '/label/' + label; var url = this.baseUrl + '/' + card + '/label/' + label;
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.post(url).then(function (response) { $http.post(url).then(function (response) {
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error while update ' + self.endpoint); deferred.reject('Error while update ' + self.endpoint);
}); });
return deferred.promise; return deferred.promise;
}; };
CardService.prototype.removeLabel = function(card, label) { CardService.prototype.removeLabel = function (card, label) {
var url = this.baseUrl + '/' + card + '/label/' + label; var url = this.baseUrl + '/' + card + '/label/' + label;
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.delete(url).then(function (response) { $http.delete(url).then(function (response) {
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error while update ' + self.endpoint); deferred.reject('Error while update ' + self.endpoint);
}); });
return deferred.promise; return deferred.promise;
}; };
CardService.prototype.archive = function (card) { CardService.prototype.archive = function (card) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.put(this.baseUrl + '/' + card.id + '/archive', {}).then(function (response) { $http.put(this.baseUrl + '/' + card.id + '/archive', {}).then(function (response) {
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error while update ' + self.endpoint); deferred.reject('Error while update ' + self.endpoint);
}); });
return deferred.promise; return deferred.promise;
}; };
CardService.prototype.unarchive = function (card) { CardService.prototype.unarchive = function (card) {
var deferred = $q.defer(); var deferred = $q.defer();
var self = this; var self = this;
$http.put(this.baseUrl + '/' + card.id + '/unarchive', {}).then(function (response) { $http.put(this.baseUrl + '/' + card.id + '/unarchive', {}).then(function (response) {
deferred.resolve(response.data); deferred.resolve(response.data);
}, function (error) { }, function (error) {
deferred.reject('Error while update ' + self.endpoint); deferred.reject('Error while update ' + self.endpoint);
}); });
return deferred.promise; 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;
}); });
+111
View File
@@ -0,0 +1,111 @@
/*
* @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);
this.uploader.onErrorItem = this.onErrorItem.bind(this);
this.status = null;
}
runUpload (fileItem, attachmentId) {
this.status = null;
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment?type=deck_file');
if (typeof attachmentId !== 'undefined') {
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment/' + attachmentId + '?type=deck_file');
} else {
fileItem.formData = [
{
requesttoken: oc_requesttoken,
type: 'deck_file',
}
];
}
fileItem.headers = {requesttoken: oc_requesttoken};
this.uploader.uploadItem(fileItem);
}
onAfterAddingFile (fileItem) {
// 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);
}
onErrorItem (item, response) {
this.status = {
error: t('deck', `Failed to upload:`) + ' ' + item.file.name,
message: response.message
};
}
}
app.service('FileService', FileService);
+7 -7
View File
@@ -19,12 +19,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('LabelService', function(ApiService, $http, $q){ app.factory('LabelService', function (ApiService, $http, $q) {
var LabelService = function($http, ep, $q) { var LabelService = function ($http, ep, $q) {
ApiService.call(this, $http, ep, $q); ApiService.call(this, $http, ep, $q);
}; };
LabelService.prototype = angular.copy(ApiService.prototype); LabelService.prototype = angular.copy(ApiService.prototype);
service = new LabelService($http, 'labels', $q); return new LabelService($http, 'labels', $q);
return service;
}); });
+127 -78
View File
@@ -19,88 +19,137 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('StackService', function(ApiService, $http, $q){ /* global app angular */
var StackService = function($http, ep, $q) { app.factory('StackService', function (ApiService, CardService, $http, $q) {
ApiService.call(this, $http, ep, $q); var StackService = function ($http, ep, $q) {
}; ApiService.call(this, $http, ep, $q);
StackService.prototype = angular.copy(ApiService.prototype); };
StackService.prototype.fetchAll = function(boardId) { StackService.prototype = angular.copy(ApiService.prototype);
var deferred = $q.defer(); StackService.prototype.fetchAll = function (boardId) {
var self=this; var deferred = $q.defer();
$http.get(this.baseUrl +'/'+boardId).then(function (response) { var self = this;
self.clear(); $http.get(this.baseUrl + '/' + boardId).then(function (response) {
self.addAll(response.data); self.clear();
deferred.resolve(self.data); self.addAll(response.data);
}, function (error) { // When loading a stack add cards to the CardService so we can fetch
deferred.reject('Error while loading stacks'); // information from there. That way we don't need to refresh the whole
}); // stack data during digest if some value changes
return deferred.promise; 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) { StackService.prototype.fetchArchived = function (boardId) {
var deferred = $q.defer(); var deferred = $q.defer();
var self=this; var self = this;
$http.get(this.baseUrl +'/'+boardId+'/archived').then(function (response) { $http.get(this.baseUrl + '/' + boardId + '/archived').then(function (response) {
self.clear(); self.clear();
self.addAll(response.data); self.addAll(response.data);
deferred.resolve(self.data); angular.forEach(response.data, function (entity) {
}, function (error) { CardService.addAll(entity.cards);
deferred.reject('Error while loading stacks'); });
}); deferred.resolve(self.data);
return deferred.promise; }, function (error) {
}; deferred.reject('Error while loading stacks');
});
return deferred.promise;
};
StackService.prototype.addCard = function(entity) { StackService.prototype.addCard = function (entity) {
if(!this.data[entity.stackId].cards) { if (!this.data[entity.stackId].cards) {
this.data[entity.stackId].cards = []; this.data[entity.stackId].cards = [];
} }
this.data[entity.stackId].cards.push(entity); this.data[entity.stackId].cards.push(entity);
}; };
StackService.prototype.reorder = function(entity, order) { StackService.prototype.reorder = function (stack, order) {
// assign new order var deferred = $q.defer();
for(var i=0, j=0;i<this.data[entity.stackId].cards.length;i++) { var self = this;
if(this.data[entity.stackId].cards[i].id === entity.id) { $http.put(this.baseUrl + '/' + stack.id + '/reorder', {
this.data[entity.stackId].cards[i].order = order; stackId: stack.id,
} order: order
if(j === order) { }).then(function (response) {
j++; angular.forEach(response.data, function (value, key) {
} var id = value.id;
if(this.data[entity.stackId].cards[i].id !== entity.id) { self.data[id].order = value.order;
this.data[entity.stackId].cards[i].order = j++; });
} deferred.resolve(response.data);
} }, function (error) {
// sort array by order deferred.reject('Error while update ' + self.endpoint);
this.data[entity.stackId].cards.sort(function(a,b) { });
if (a.order < b.order) return deferred.promise;
return -1; };
if (a.order > b.order)
return 1;
return 0;
});
};
StackService.prototype.updateCard = function(entity) { StackService.prototype.reorderCard = function (entity, order) {
var self = this; // assign new order
var cards = this.data[entity.stackId].cards; for (var i = 0, j = 0; i < this.data[entity.stackId].cards.length; i++) {
for(var i=0;i<cards.length;i++) { if (this.data[entity.stackId].cards[i].id === entity.id) {
if(cards[i].id == entity.id) { this.data[entity.stackId].cards[i].order = order;
cards[i] = entity; }
} if (j === order) {
} j++;
}; }
StackService.prototype.removeCard = function(entity) { if (this.data[entity.stackId].cards[i].id !== entity.id) {
var self = this; this.data[entity.stackId].cards[i].order = j++;
var cards = this.data[entity.stackId].cards; }
for(var i=0;i<cards.length;i++) { }
if(cards[i].id == entity.id) { // sort array by order
cards.splice(i, 1); this.data[entity.stackId].cards.sort(function (a, b) {
} if (a.order < b.order)
} {return -1;}
}; if (a.order > b.order)
{return 1;}
service = new StackService($http, 'stacks', $q); return 0;
return service; });
};
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/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */
import app from '../app/App.js';
app.factory('StatusService', function(){ app.factory('StatusService', function () {
// Status Helper // Status Helper
var StatusService = function() { var StatusService = function () {
this.active = true; this.active = true;
this.icon = 'loading'; this.icon = 'loading';
this.title = ''; this.title = '';
this.text = ''; this.text = '';
this.counter = 0; this.counter = 0;
}; };
StatusService.prototype.setStatus = function($icon, $title, $text) { StatusService.prototype.setStatus = function ($icon, $title, $text) {
this.active = true; this.active = true;
this.icon = $icon; this.icon = $icon;
this.title = $title; this.title = $title;
this.text = $text; this.text = $text;
}; };
StatusService.prototype.setError = function($title, $text) { StatusService.prototype.setError = function ($title, $text) {
this.active = true; this.active = true;
this.icon = 'error'; this.icon = 'error';
this.title = $title; this.title = $title;
this.text = $text; this.text = $text;
this.counter = 0; this.counter = 0;
}; };
StatusService.prototype.releaseWaiting = function() { StatusService.prototype.releaseWaiting = function () {
if(this.counter>0) if (this.counter > 0) {
this.counter--; this.counter--;
if(this.counter<=0) { }
this.active = false; if (this.counter <= 0) {
this.counter = 0; this.active = false;
} this.counter = 0;
}; }
};
StatusService.prototype.retainWaiting = function() { StatusService.prototype.retainWaiting = function () {
this.active = true; this.active = true;
this.icon = 'loading'; this.icon = 'loading';
this.title = ''; this.title = '';
this.text = ''; this.text = '';
this.counter++; this.counter++;
}; };
StatusService.prototype.unsetStatus = function() { StatusService.prototype.unsetStatus = function () {
this.active = false; this.active = false;
}; };
return { return {
getInstance: function() { getInstance: function () {
return new StatusService(); return new StatusService();
} },
} /* Shared StatusService instance between both ListController instances */
listStatus: new StatusService()
};
}); });
+68
View File
@@ -0,0 +1,68 @@
const path = require('path');
const webpack = require('webpack');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
require('babel-polyfill');
module.exports = {
node: {
fs: 'empty',
},
entry: {
deck: ['babel-polyfill', './init.js'],
},
output: {
filename: '[name].js',
path: __dirname + '/build'
},
resolve: {
modules: [path.resolve(__dirname), 'node_modules'],
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['env'],
}
},
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
}
]
},
optimization: {
splitChunks: {
cacheGroups: {
/* separate vendor chunk for node_modules and legacy scripts */
commons: {
test: /[\\/]node_modules[\\/]/,
name: 'vendor',
chunks: 'all'
},
legacy: {
test: /[\\/]legacy[\\/]/,
name: 'vendor',
chunks: 'all'
}
}
}
},
/* use external jQuery from server */
externals: {
'jquery': 'jQuery'
},
plugins: [
new MiniCssExtractPlugin('[name].css'),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
};
+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);"
}
+54
View File
@@ -0,0 +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",
"Unarchive" : "Desbloquejar",
"Enter a card title" : "Introduïu un títol de la targeta",
"Sharing" : "Compartir",
"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",
"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",
"by" : "per",
"Modified:" : "Modificat:",
"Created:" : "Creat:",
"Due date" : "Per la data",
"Click to set" : "Feu clic per configurar",
"Remove due date" : "Elimina la data de venciment",
"Description" : "Descripció",
"Saved" : "Desat",
"Formatting help" : "Format d'ajuda",
"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);");
+52
View File
@@ -0,0 +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",
"Unarchive" : "Desbloquejar",
"Enter a card title" : "Introduïu un títol de la targeta",
"Sharing" : "Compartir",
"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",
"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",
"by" : "per",
"Modified:" : "Modificat:",
"Created:" : "Creat:",
"Due date" : "Per la data",
"Click to set" : "Feu clic per configurar",
"Remove due date" : "Elimina la data de venciment",
"Description" : "Descripció",
"Saved" : "Desat",
"Formatting help" : "Format d'ajuda",
"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);"
}
+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?" : "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í",
"Enter a card title" : "Zadejte nadpis karty",
"Add card" : "Přidat kartu",
"Close" : "Zavřít",
"Sharing" : "Sdílení",
"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í",
"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",
"by" : "od",
"Modified:" : "Upraveno:",
"Created:" : "Vytvořeno:",
"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",
"Saved" : "Uloženo",
"Unsaved changes" : "Neuložené změny",
"Formatting help" : "Nápověda k formátování",
"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=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
+75
View File
@@ -0,0 +1,75 @@
{ "translations": {
"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í",
"Enter a card title" : "Zadejte nadpis karty",
"Add card" : "Přidat kartu",
"Close" : "Zavřít",
"Sharing" : "Sdílení",
"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í",
"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",
"by" : "od",
"Modified:" : "Upraveno:",
"Created:" : "Vytvořeno:",
"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",
"Saved" : "Uloženo",
"Unsaved changes" : "Neuložené změny",
"Formatting help" : "Nápověda k formátování",
"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=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
+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?" : "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" : "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",
"Enter a card title" : "Angiv titel på kort",
"Add card" : "Tilføj kort",
"Close" : "Luk",
"Sharing" : "Deling",
"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",
"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",
"by" : "af",
"Modified:" : "Ændret:",
"Created:" : "Oprettet:",
"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",
"Saved" : "Gemt",
"Unsaved changes" : "Ikke gemte ændringer",
"Formatting help" : "Hjælp til formatering",
"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);");
+77
View File
@@ -0,0 +1,77 @@
{ "translations": {
"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" : "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",
"Enter a card title" : "Angiv titel på kort",
"Add card" : "Tilføj kort",
"Close" : "Luk",
"Sharing" : "Deling",
"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",
"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",
"by" : "af",
"Modified:" : "Ændret:",
"Created:" : "Oprettet:",
"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",
"Saved" : "Gemt",
"Unsaved changes" : "Ikke gemte ændringer",
"Formatting help" : "Hjælp til formatering",
"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);"
}
+96
View File
@@ -0,0 +1,96 @@
OC.L10N.register(
"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 überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"The file was uploaded" : "Die Datei wurde hochgeladen",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded" : "Keine Datei hochgeladen",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für 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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 🚀 Organisiere Dein Projekt",
"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",
"Drop your files here to upload it to the card" : "Lege Deine Dateien hier ab, um sie auf die Karte hochzuladen",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"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 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",
"Select an attachment" : "Anhang auswählen",
"by" : "von",
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
"Undo file deletion" : "Dateilöschung rückgängig machen",
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"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 für die Zuweisung aus",
"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",
"Attachments" : "Anhänge",
"Saved" : "Gespeichert",
"Unsaved changes" : "Ungesicherte Änderungen",
"Formatting help" : "Formatierungshilfe",
"Upload attachment" : "Anhang hochladen",
"Insert attachment" : "Anhang einfügen",
"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);");
+94
View File
@@ -0,0 +1,94 @@
{ "translations": {
"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 überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"The file was uploaded" : "Die Datei wurde hochgeladen",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded" : "Keine Datei hochgeladen",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für 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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 🚀 Organisiere Dein Projekt",
"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",
"Drop your files here to upload it to the card" : "Lege Deine Dateien hier ab, um sie auf die Karte hochzuladen",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"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 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",
"Select an attachment" : "Anhang auswählen",
"by" : "von",
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
"Undo file deletion" : "Dateilöschung rückgängig machen",
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"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 für die Zuweisung aus",
"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",
"Attachments" : "Anhänge",
"Saved" : "Gespeichert",
"Unsaved changes" : "Ungesicherte Änderungen",
"Formatting help" : "Formatierungshilfe",
"Upload attachment" : "Anhang hochladen",
"Insert attachment" : "Anhang einfügen",
"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);"
}
+96
View File
@@ -0,0 +1,96 @@
OC.L10N.register(
"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 überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"The file was uploaded" : "Die Datei wurde hochgeladen",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded" : "Keine Datei hochgeladen",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für 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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 🚀 Organisieren Sie Ihr Projekt",
"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",
"Drop your files here to upload it to the card" : "Legen Sie Ihre Dateien hier ab, um sie auf die Karte hochzuladen",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"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 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",
"Select an attachment" : "Wählen Sie einen Anhang",
"by" : "von",
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
"Undo file deletion" : "Dateilöschung rückgängig machen",
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"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ähle einen Benutzer für die Zuweisung aus",
"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",
"Attachments" : "Anhänge",
"Saved" : "Gespeichert",
"Unsaved changes" : "Ungesicherte Änderungen",
"Formatting help" : "Formatierungshilfe",
"Upload attachment" : "Anhang hochladen",
"Insert attachment" : "Anhang einfügen",
"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);");
+94
View File
@@ -0,0 +1,94 @@
{ "translations": {
"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 überprüfen",
"Action needed" : "Handlung erforderlich",
"Later" : "Später",
"The file was uploaded" : "Die Datei wurde hochgeladen",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
"No file uploaded" : "Keine Datei hochgeladen",
"Deck" : "Deck",
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für 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 ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 🚀 Organisieren Sie Ihr Projekt",
"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",
"Drop your files here to upload it to the card" : "Legen Sie Ihre Dateien hier ab, um sie auf die Karte hochzuladen",
"Archive" : "Archivieren",
"Unarchive" : "Dearchivieren",
"Enter a card title" : "Kartentitel eingeben",
"Add card" : "Karte hinzufügen",
"Close" : "Schließen",
"Sharing" : "Teilen",
"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 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",
"Select an attachment" : "Wählen Sie einen Anhang",
"by" : "von",
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
"Undo file deletion" : "Dateilöschung rückgängig machen",
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
"Modified:" : "Geändert:",
"Created:" : "Erstellt:",
"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ähle einen Benutzer für die Zuweisung aus",
"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",
"Attachments" : "Anhänge",
"Saved" : "Gespeichert",
"Unsaved changes" : "Ungesicherte Änderungen",
"Formatting help" : "Formatierungshilfe",
"Upload attachment" : "Anhang hochladen",
"Insert attachment" : "Anhang einfügen",
"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);"
}
+63
View File
@@ -0,0 +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" : "Αναίρεση αρχειοθέτησης",
"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" : "Διαχείριση",
"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" : "Νέος τίτλος πίνακα",
"by" : "από",
"Modified:" : "Τροποποιήθηκε:",
"Created:" : "Δημιουργήθηκε:",
"Due date" : "Ημερομηνία λήξης",
"Click to set" : "Κλικ για να ορίσετε",
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
"Description" : "Περιγραφή",
"Saved" : "Αποθηκεύτηκε",
"Formatting help" : "Βοήθεια μορφοποίησης",
"Add a card description…" : "Προσθήκη περιγραφής κάρτας...",
"Shared boards" : "Διαμοιρασμένοι πίνακες",
"View more" : "Προβολή περισσοτέρων",
"Move board to archive" : "Μετακίνηση πίνακα στην αρχειοθήκη",
"Create a new board" : "Δημιουργία νέου πίνακα"
},
"nplurals=2; plural=(n != 1);");
+61
View File
@@ -0,0 +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" : "Αναίρεση αρχειοθέτησης",
"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" : "Διαχείριση",
"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" : "Νέος τίτλος πίνακα",
"by" : "από",
"Modified:" : "Τροποποιήθηκε:",
"Created:" : "Δημιουργήθηκε:",
"Due date" : "Ημερομηνία λήξης",
"Click to set" : "Κλικ για να ορίσετε",
"Remove due date" : "Αφαίρεση ημερομηνίας λήξης",
"Description" : "Περιγραφή",
"Saved" : "Αποθηκεύτηκε",
"Formatting help" : "Βοήθεια μορφοποίησης",
"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",
"by" : "by",
"Modified:" : "Modified:",
"Created:" : "Created:",
"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",
"Saved" : "Saved",
"Unsaved changes" : "Unsaved changes",
"Formatting help" : "Formatting help",
"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",
"by" : "by",
"Modified:" : "Modified:",
"Created:" : "Created:",
"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",
"Saved" : "Saved",
"Unsaved changes" : "Unsaved changes",
"Formatting help" : "Formatting help",
"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);"
}
+96
View File
@@ -0,0 +1,96 @@
OC.L10N.register(
"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" : "Acción necesaria",
"Later" : "Después",
"The file was uploaded" : "Se ha subido el archivo",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo subido excede la directiva upload_max_filesize en php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido excede la directiva MAX_FILE-SIZE directive que se especificó en el formulario web",
"The file was only partially uploaded" : "El archivo se ha subido solo parcialmente",
"No file was uploaded" : "No se ha subido ningún archivo",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
"No file uploaded" : "No se ha subido ningún archivo",
"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",
"Drop your files here to upload it to the card" : "Arrastra tus archivos aquí para subirlos a la tarjeta",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Enter a card title" : "Introducir título de tarjeta",
"Add card" : "Añadir tarjeta",
"Close" : "Cerrar",
"Sharing" : "Compartir",
"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",
"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",
"Select an attachment" : "Selecciona un adjunto",
"by" : "por",
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Deshacer eliminación del archivo. De otra forma el archivo se borrará durante la próxima ejecución del trabajo cron.",
"Undo file deletion" : "Deshacer eliminación del archivo",
"Insert the file into the description" : "Introduce el archivo en la descripción",
"Modified:" : "Modificado: ",
"Created:" : "Creado: ",
"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",
"Attachments" : "Adjuntos",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Formatting help" : "Ayuda de formato",
"Upload attachment" : "Subir adjunto",
"Insert attachment" : "Insertar adjunto",
"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);");
+94
View File
@@ -0,0 +1,94 @@
{ "translations": {
"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" : "Acción necesaria",
"Later" : "Después",
"The file was uploaded" : "Se ha subido el archivo",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo subido excede la directiva upload_max_filesize en php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido excede la directiva MAX_FILE-SIZE directive que se especificó en el formulario web",
"The file was only partially uploaded" : "El archivo se ha subido solo parcialmente",
"No file was uploaded" : "No se ha subido ningún archivo",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
"No file uploaded" : "No se ha subido ningún archivo",
"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",
"Drop your files here to upload it to the card" : "Arrastra tus archivos aquí para subirlos a la tarjeta",
"Archive" : "Archivar",
"Unarchive" : "Desarchivar",
"Enter a card title" : "Introducir título de tarjeta",
"Add card" : "Añadir tarjeta",
"Close" : "Cerrar",
"Sharing" : "Compartir",
"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",
"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",
"Select an attachment" : "Selecciona un adjunto",
"by" : "por",
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Deshacer eliminación del archivo. De otra forma el archivo se borrará durante la próxima ejecución del trabajo cron.",
"Undo file deletion" : "Deshacer eliminación del archivo",
"Insert the file into the description" : "Introduce el archivo en la descripción",
"Modified:" : "Modificado: ",
"Created:" : "Creado: ",
"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",
"Attachments" : "Adjuntos",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Formatting help" : "Ayuda de formato",
"Upload attachment" : "Subir adjunto",
"Insert attachment" : "Insertar adjunto",
"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",
"by" : "por",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"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",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Formatting help" : "Ayuda de formato",
"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",
"by" : "por",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"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",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Formatting help" : "Ayuda de formato",
"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",
"by" : "por",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"Description" : "Descripción",
"Saved" : "Guardado",
"Formatting help" : "Ayuda de formato",
"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",
"by" : "por",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"Description" : "Descripción",
"Saved" : "Guardado",
"Formatting help" : "Ayuda de formato",
"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",
"by" : "por",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"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",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Formatting help" : "Ayuda de formato",
"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);");
+75
View File
@@ -0,0 +1,75 @@
{ "translations": {
"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",
"by" : "por",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"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",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Formatting help" : "Ayuda de formato",
"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);"
}
+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",
"by" : "por",
"Modified:" : "Modificado:",
"Created:" : "Creado:",
"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",
"Saved" : "Guardado",
"Unsaved changes" : "Cambios no guardados",
"Formatting help" : "Ayuda de formato",
"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