Compare commits

...
370 Commits
Author SHA1 Message Date
Lauri Ojansivu 3125cefd41 v5.64 2021-10-09 14:42:03 +03:00
Lauri Ojansivu c27a622289 Update WeKan ® 2021-10-09 14:22:26 +03:00
Lauri Ojansivu 51875dc155 Updated translations. 2021-10-09 14:10:32 +03:00
Lauri Ojansivu f9bdfa54e7 Updated ChangeLog. 2021-10-09 14:04:19 +03:00
Lauri Ojansivu 8fbee23797 Merge pull request #4045 from Ben0it-T/master
Excel Export : add board description, add comments worksheet
2021-10-09 14:02:13 +03:00
Ben0it-T 153e4cc3fa Excel Export : add board description, add comments worksheet 2021-10-09 12:20:34 +02:00
Lauri Ojansivu 5a5d619b89 v5.63 2021-10-07 09:31:38 +03:00
Lauri Ojansivu 97c56baebb Updated ChangeLog. 2021-10-07 08:50:42 +03:00
Lauri Ojansivu 9c99c5c3ae Fixed SMTP by reverting MAIL_SERVICE changes.
Thanks to xet7 !

Fixes #4022,
fixes #4001,
fixes https://github.com/wekan/wekan/discussions/4030
2021-10-07 08:47:10 +03:00
Lauri Ojansivu 28d515436e Updated translations. 2021-10-07 08:46:32 +03:00
Lauri Ojansivu f70ec7f53c Updated translations. 2021-10-05 20:53:50 +03:00
Lauri Ojansivu 74825c099f Merge pull request #4031 from greenhost/allow-custom-kubernetes-labels
Allow setting custom kubernetes labels when using the helm chart
2021-10-05 20:51:00 +03:00
Arie Peterson 966670fe70 Allow setting custom kubernetes labels when using the helm chart 2021-10-05 11:36:24 +02:00
Lauri Ojansivu c406607fd2 v5.62 2021-10-04 18:22:09 +03:00
Lauri Ojansivu e812a3a087 Updated ChangeLog. 2021-10-04 18:14:22 +03:00
Lauri Ojansivu 9e6744d1e3 Added week numbers to dates at card, minicard, Custom Field dates, DatePicker and Calendar. Part 2.
Thanks to xet7 !
2021-10-04 18:13:00 +03:00
Lauri Ojansivu 835e3ef305 Updated translations. 2021-10-04 18:01:43 +03:00
Lauri Ojansivu ac658af462 Updated ChangeLog. 2021-10-04 17:52:23 +03:00
Lauri Ojansivu 6c3fcdcc4c Confirm Archive Card.
Thanks to xet7 !
2021-10-04 17:51:07 +03:00
Lauri Ojansivu 22cbd5097b Updated ChangeLog. 2021-10-04 15:37:27 +03:00
Lauri Ojansivu d06ac09485 Added week numbers to dates at card, minicard, Custom Field dates, DatePicker and Calendar.
Thanks to xet7 !
2021-10-04 15:34:32 +03:00
Lauri Ojansivu 94b67db78a Updated ChangeLog. 2021-10-03 17:17:30 +03:00
Lauri Ojansivu 5536525564 Removed extra quotes.
Thanks to xet7 !
2021-10-03 17:01:44 +03:00
Lauri Ojansivu e6c7463c03 Merge pull request #4028 from Ben0it-T/master
Export CSV, TSV and XLS
2021-10-03 14:33:28 +03:00
Ben0it-T 11bf4c7c07 Fix : export CSV, TSV and XLS translation
Feature : add export CSV with semicolon separator
2021-10-03 09:18:02 +02:00
Lauri Ojansivu bc9c7e5aa4 Updated ChangeLog. 2021-10-01 19:55:07 +03:00
Lauri Ojansivu 9a0f54f4fe Merge pull request #4026 from ilvar/fix-shrink-docker-image-size
Fix: clean up /tmp after Docker build
2021-10-01 19:52:54 +03:00
Lauri Ojansivu 3b6f3c58e1 Updated ChangeLog. 2021-10-01 19:52:08 +03:00
Lauri Ojansivu ff01c2a69f Merge pull request #4025 from ilvar/feature-rules-title-partial-match
Feature: allow word match for rules -> title filter
2021-10-01 19:48:16 +03:00
Arcady Chumachenko 1322c1fbbd Fix: clean up /tmp after Docker build; drastically reduces docker image size 280 -> 180 MB 2021-09-30 21:22:50 +01:00
Arcady Chumachenko 36e2c76456 Feature: allow word match for rules -> title filter; e.g. filter 'Foo' will now match both 'Foo' and 'Foo bar' 2021-09-30 21:19:47 +01:00
Lauri Ojansivu c42a8df65c v5.61 2021-09-25 18:30:24 +03:00
Lauri Ojansivu 01b38bb2e0 Updated translations. 2021-09-25 18:25:21 +03:00
Lauri Ojansivu 9f9a69286c Updated ChangeLog. 2021-09-25 18:20:01 +03:00
Lauri Ojansivu e3a0dea85f Fixed REST API, it shoud work now by Admin user.
Reverted Allow board members to use more of API of Wekan v5.35
https://github.com/wekan/wekan/commit/a719e8fda1f78bcbf9af6e7b4341f8be1d141e90

Thanks to tomhughes.

Fixes #4009,
fixes #2793,
fixes #2790
2021-09-25 18:09:18 +03:00
Lauri Ojansivu 5b5094ced6 Updated translations. 2021-09-23 22:33:11 +03:00
Lauri Ojansivu f5c2557338 Updated translations. 2021-09-22 19:54:13 +03:00
Lauri Ojansivu 802f1599a1 Updated ChangeLog. 2021-09-22 19:51:39 +03:00
Lauri Ojansivu 9781afa17e Merge branch 'Emile840-master' 2021-09-22 19:49:50 +03:00
Lauri Ojansivu 3319602f3f Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-09-22 19:48:30 +03:00
Emile NDAGIJIMANA 8bd2e4f0dd upgrade to wekan 5.60 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 8eaa490664 v5.60 2021-09-22 17:13:48 +02:00
Lauri Ojansivu db54eb87cd Updated translations. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu d1950efdd4 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu cf51ddb32e Update build scripts to install npm from NodeSource, and meteor with npm.
Thanks to Meteor developers!
2021-09-22 17:13:48 +02:00
Lauri Ojansivu 269551ead5 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu ee06e4f6de Toggle opened card Custom Fields layout between Grid and one per row.
Thanks to xet7 !
2021-09-22 17:13:48 +02:00
Lauri Ojansivu 87e9949f33 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 0b02e88ee3 Try to fix Bug: Card number equal to #0 when creating a sub-task from a card.
Thanks to marcungeschikts, olivierlambert and xet7 !

Fixes #3970
2021-09-22 17:13:48 +02:00
Lauri Ojansivu dd58698cef Updated translations. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu f9807bfad8 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 4f6bd86478 Custom Fields at opened card below each other.
Thanks to xet7 !
2021-09-22 17:13:48 +02:00
Lauri Ojansivu be6ff3782b Updated translations. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 7ae2360a55 Updated translations. 2021-09-22 17:13:47 +02:00
Emile NDAGIJIMANA 1852e66abd Search by name, userName or email address when adding a new user to a board 2021-09-22 16:55:23 +02:00
Lauri Ojansivu 367b2370a5 v5.60 2021-09-22 17:12:20 +03:00
Lauri Ojansivu 640df0f4a5 Updated translations. 2021-09-22 17:07:38 +03:00
Lauri Ojansivu 37984a6f9a Updated ChangeLog. 2021-09-22 13:16:53 +03:00
Lauri Ojansivu c062621dd5 Update build scripts to install npm from NodeSource, and meteor with npm.
Thanks to Meteor developers!
2021-09-22 13:15:06 +03:00
Lauri Ojansivu 437a2ea0e2 Updated ChangeLog. 2021-09-22 12:17:20 +03:00
Lauri Ojansivu fc2fb9a081 Toggle opened card Custom Fields layout between Grid and one per row.
Thanks to xet7 !
2021-09-22 12:14:42 +03:00
Lauri Ojansivu 41d9ae92e6 Updated ChangeLog. 2021-09-21 22:49:03 +03:00
Lauri Ojansivu 4c659da533 Try to fix Bug: Card number equal to #0 when creating a sub-task from a card.
Thanks to marcungeschikts, olivierlambert and xet7 !

Fixes #3970
2021-09-21 22:46:32 +03:00
Lauri Ojansivu 21a9226c4a Updated translations. 2021-09-21 22:39:08 +03:00
Lauri Ojansivu ee2c167be4 Updated ChangeLog. 2021-09-21 22:10:52 +03:00
Lauri Ojansivu 09b5359c45 Custom Fields at opened card below each other.
Thanks to xet7 !
2021-09-21 22:09:23 +03:00
Lauri Ojansivu e55e8ef000 Updated translations. 2021-09-20 18:29:04 +03:00
Lauri Ojansivu bffd56f5fc Updated translations. 2021-09-20 14:46:30 +03:00
Lauri Ojansivu ac0d7bda1c Updated ChangeLog. 2021-09-18 21:43:19 +03:00
Lauri Ojansivu 2912e541a0 Merge branch 'master' of github.com:wekan/wekan 2021-09-18 21:40:09 +03:00
Lauri Ojansivu 442e6bf983 Updated Docker base image to newer Ubuntu.
Thanks to xet7 !
2021-09-18 21:39:34 +03:00
Lauri Ojansivu 70ba1eca78 Create docker-publish.yml 2021-09-18 20:46:00 +03:00
Lauri Ojansivu e925877ae4 Delete not working workflow 2021-09-18 20:44:25 +03:00
Lauri Ojansivu 0e7cc1ef87 Create docker-publish.yml 2021-09-18 20:41:43 +03:00
Lauri Ojansivu 909b0ef1b7 Updated ChangeLog. 2021-09-17 21:29:22 +03:00
Lauri Ojansivu a573083291 v5.59 2021-09-17 20:39:25 +03:00
Lauri Ojansivu 6a42f738c9 Updated ChangeLog. 2021-09-17 18:34:34 +03:00
Lauri Ojansivu 9bee6ae666 Sum of cards. In Progress. Part 2: Show option for custom field sum only for currency and number fields.
Thanks to xet7 !

Related #3796
2021-09-17 18:30:53 +03:00
Lauri Ojansivu 533af4b39e Updated translations. 2021-09-17 15:48:39 +03:00
Lauri Ojansivu 99a200d0b2 Updated ChangeLog. 2021-09-17 04:28:10 +03:00
Lauri Ojansivu 889ec1339a Try to fix: Can't delete attachment.
Thanks to luistiktok and xet7 !

Fixes #4012
2021-09-17 04:25:57 +03:00
Lauri Ojansivu 0bdc3d04b4 Updated ChangeLog. 2021-09-17 04:19:19 +03:00
Lauri Ojansivu bd9fbedbf9 At card attachments, show play and fullscreen controls for video webm/mp4/ogg, and play controls for audio mp3/ogg.
Thanks to luistiktok and xet7 !

Fixes #4013
2021-09-17 04:16:56 +03:00
Lauri Ojansivu 6c0a958481 Updated translations. 2021-09-16 23:47:40 +03:00
Lauri Ojansivu 45a39ec213 Updated ChangeLog. 2021-09-16 10:38:57 +03:00
Lauri Ojansivu 800304270e Merge pull request #4011 from Emile840/master
[Admin panel / Settings / Layout] Customize OIDC button text
2021-09-16 10:19:39 +03:00
Emile NDAGIJIMANA 9defed2680 [Admin panel / Settings / Layout] Customize OIDC button text 2021-09-15 18:35:09 +02:00
Lauri Ojansivu 7be9d7ff49 Updated ChangeLog. 2021-09-13 22:06:25 +03:00
Lauri Ojansivu 287abe7640 Merge branch 'Ben0it-T-master' 2021-09-12 16:47:18 +03:00
Ben0it-T 262df6c4a0 Fix : Linked card cannot change date #2930 2021-09-12 11:22:15 +02:00
Lauri Ojansivu 10e3d963ef Updated translations. 2021-09-10 22:33:29 +03:00
Lauri Ojansivu d23920c886 Updated ChangeLog. 2021-09-10 22:30:08 +03:00
Lauri Ojansivu be2647556d Merge branch 'Emile840-master' 2021-09-10 22:28:57 +03:00
Lauri Ojansivu ea57864bcc Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-09-10 22:16:57 +03:00
Emile NDAGIJIMANA 0c121a5894 update package-lock.json 2021-09-09 17:53:10 +02:00
Emile NDAGIJIMANA c19723ae27 Add / remove team members as board members when adding / removing team to a board 2021-09-09 16:51:37 +02:00
Lauri Ojansivu 00b43df267 Updated translations. 2021-09-08 16:08:05 +03:00
Lauri Ojansivu edb6355960 Updated ChangeLog. 2021-09-08 15:57:54 +03:00
Lauri Ojansivu 8626b466b8 Sum of cards. In Progress.
Thanks to xet7 !

Related #3796
2021-09-08 15:55:53 +03:00
Lauri Ojansivu a80ab6e47a Updated ChangeLog. 2021-09-08 14:57:15 +03:00
Lauri Ojansivu 2b2978b8e7 Merge pull request #3999 from helioguardabaxo/master
When list has just one card, to show 'card' instead of 'cards'
2021-09-08 14:49:09 +03:00
helioguardabaxo 3bdea42f6d Includes JS file to previous commit 2021-09-07 18:13:08 -03:00
helioguardabaxo b56ea161cd When list has just one card, to show 'card' instead of 'cards' 2021-09-07 18:09:40 -03:00
Lauri Ojansivu cde74a9c0b Removed extra files. 2021-09-07 01:13:19 +03:00
Lauri Ojansivu 79b00f88b0 Updated ChangeLog. 2021-09-07 00:11:25 +03:00
Lauri Ojansivu 0da84f8f3e Enter new password 2 times when registering.
Thanks to sh2515 and xet7 !

Fixes #2378
2021-09-07 00:08:45 +03:00
Lauri Ojansivu 4f164a46a6 Updated ChangeLog. 2021-09-06 23:38:15 +03:00
Lauri Ojansivu 3d9b7eb7ab Added some translations to: Admin Panel/People: Possibility of adding a team to all selected users.
Thanks to xet7.

Related https://github.com/wekan/wekan/pull/3996
2021-09-06 23:35:56 +03:00
Lauri Ojansivu d3eb0ced83 Fixed dependencies.
Thanks to xet7 !
2021-09-06 23:10:01 +03:00
Lauri Ojansivu 08ac1f6b69 Merge pull request #3996 from Emile840/master
[Admin panel / People] possibility of adding a team to all selected Users
2021-09-06 23:08:35 +03:00
Lauri Ojansivu cc63be8ff0 Updated translations. 2021-09-06 22:56:40 +03:00
Lauri Ojansivu b1d8b0c7d4 Updated ChangeLog. 2021-09-06 22:47:07 +03:00
Lauri Ojansivu 3f6fde033b Merge pull request #3994 from ww-daniel-mora/fix/issue-2444-OIDC-first-login
Fix first user creation for via OIDC
2021-09-06 22:44:31 +03:00
Emile NDAGIJIMANA 0a9e10b21e ['Version 5.58' Admin panel / People] possibility of adding a team to all selected Users 2021-09-06 21:43:38 +02:00
Lauri Ojansivu 25e17fedb9 Updated ChangeLog. 2021-09-06 22:41:09 +03:00
Lauri Ojansivu 8ec54ffa5b Merge pull request #3993 from garrison/devel-broken-links
Links to devel branch are broken; use master instead
2021-09-06 22:36:40 +03:00
Emile NDAGIJIMANA b516275c24 [Admin panel / People] possibility of adding a team to all selected Users 2021-09-06 17:38:03 +02:00
Daniel Mora aea5d62556 Fix first user creation for via OIDC
When setting up a new deploy and registering the first user via OIDC no profile information would be populated. This also prevented updating profile information as the client would error when encountering a null email value. I manually tested this change against the OIDC use case, but, not others. This fix should address #2444
2021-09-04 16:08:55 -04:00
Jim Garrison de2fc69315 Links to devel branch are broken; use master instead 2021-09-03 21:55:18 -04:00
Lauri Ojansivu 8629537c3f v5.58 2021-09-01 17:32:53 +03:00
Lauri Ojansivu 57401e48c1 Updated ChangeLog. 2021-09-01 16:29:10 +03:00
Lauri Ojansivu 76f4b8316b Merge branch 'Emile840-master' 2021-09-01 16:20:38 +03:00
Lauri Ojansivu ef0e4e36f4 Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-09-01 16:17:36 +03:00
Emile NDAGIJIMANA 55296b676b [After update wekan to 5.57] Edit profil and change pswd menus are not displayed when SSO authentication is used 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 5b9a2a8bac Updated ChangeLog. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 8031b184f3 v5.57 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 1efd7bb33a Updated build scripts. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 53d663f77b v5.56 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 9969523b70 Updated ChangeLog. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 2cd0a414d5 Updated dependencies.
Thanks to developers of dependencies!
2021-09-01 14:43:14 +02:00
Lauri Ojansivu 256a673a7f v5.55 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 6d8a062e50 Updated ChangeLog. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 35a7159be4 Updated to Node.js v12.22.6. Thanks to Node.js developers. 2021-09-01 14:43:13 +02:00
Lauri Ojansivu 764d9fa806 Fix typo. 2021-09-01 14:43:13 +02:00
Lauri Ojansivu 292ff3c961 Updated translations. 2021-09-01 14:43:13 +02:00
Lauri Ojansivu 071929d3a6 Updated ChangeLog. 2021-09-01 14:43:13 +02:00
Emile NDAGIJIMANA c7cc9273a6 Edit profil and change password menus are not displayed when SSO authentication is used 2021-09-01 11:40:54 +02:00
Lauri Ojansivu 55a11a24f4 Updated ChangeLog. 2021-08-31 22:50:35 +03:00
Lauri Ojansivu d1f443bcd8 v5.57 2021-08-31 21:58:41 +03:00
Lauri Ojansivu 52fafe9976 Updated build scripts. 2021-08-31 21:54:31 +03:00
Lauri Ojansivu 9aa7b792be v5.56 2021-08-31 21:20:53 +03:00
Lauri Ojansivu 07e9fe3403 Updated ChangeLog. 2021-08-31 21:17:15 +03:00
Lauri Ojansivu 858967f420 Updated dependencies.
Thanks to developers of dependencies!
2021-08-31 21:15:08 +03:00
Lauri Ojansivu e07df35b61 v5.55 2021-08-31 20:58:17 +03:00
Lauri Ojansivu 2a3aa9331f Updated ChangeLog. 2021-08-31 19:21:25 +03:00
Lauri Ojansivu 4863689248 Updated to Node.js v12.22.6. Thanks to Node.js developers. 2021-08-31 19:19:24 +03:00
Lauri Ojansivu 8a53aa9fa4 Fix typo. 2021-08-30 19:13:28 +03:00
Lauri Ojansivu 57a990d91e Updated translations. 2021-08-30 19:02:40 +03:00
Lauri Ojansivu 76c0393c53 Updated ChangeLog. 2021-08-30 18:57:54 +03:00
Lauri Ojansivu 62d472fa54 Merge pull request #3981 from Emile840/master
Fix bugs #3978 and #3979
2021-08-30 18:53:14 +03:00
Emile NDAGIJIMANA 6d9d69e01d Fix bugs #3978 and #3979 2021-08-30 15:49:37 +02:00
Lauri Ojansivu 38666cbda2 v5.54 2021-08-28 01:50:03 +03:00
Lauri Ojansivu b3b81546f6 Updated translations. 2021-08-28 01:36:16 +03:00
Lauri Ojansivu 9c2151f802 Updated translations. 2021-08-28 01:26:01 +03:00
Lauri Ojansivu 1f2c4b5a9e Updated ChangeLog. 2021-08-28 01:19:24 +03:00
Lauri Ojansivu c9ef28b2ad Merge pull request #3977 from syndimann/fix/sub-task-card-numbers
Fix: Incorrect card numbers for sub tasks
2021-08-28 01:15:13 +03:00
Kai Lehmann 03a5f46131 fixes card numbers for sub tasks 2021-08-27 21:16:27 +02:00
Lauri Ojansivu f1e4297e00 Merge pull request #3976 from Emile840/master
[Admin panel] Added a parameter to display or not the visibility of a board in private mode only
2021-08-27 17:38:25 +03:00
Emile NDAGIJIMANA 9bb1425a81 [Admin panel] Add a parameter to display or not the visibility of a board in private mode only 2021-08-27 16:25:44 +02:00
Lauri Ojansivu b6277233a1 v5.53 2021-08-27 15:07:58 +03:00
Lauri Ojansivu 7bed8a7abb Updated ChangeLog. 2021-08-27 14:48:00 +03:00
Lauri Ojansivu 787df04419 Try to fix MAIL_FROM.
Thanks to xet7 !

Fixes #3972,
fixes #3975,
fixes #3969
2021-08-27 14:35:37 +03:00
Lauri Ojansivu 8e142dfdcf v5.52 2021-08-26 13:55:05 +03:00
Lauri Ojansivu 2a216d41f0 Updated ChangeLog. 2021-08-26 04:05:35 +03:00
Lauri Ojansivu 241eb9df0f Fixed New wide card edit view is all jumbled on mobile.
Thanks to jdaviescoates and xet7 !

Fixes #3890
2021-08-26 04:01:44 +03:00
Lauri Ojansivu 0bdd7c8973 Updated ChangeLog. 2021-08-26 03:41:10 +03:00
Lauri Ojansivu a59932af00 Fixed Save button not clickable in maximized card view.
Thanks to syndimann !

Fixes #3940
2021-08-26 03:38:31 +03:00
Lauri Ojansivu c2a073dec0 Updated ChangeLog. 2021-08-26 03:03:15 +03:00
Lauri Ojansivu 7808fdd22f Delete user is now possible at Admin Panel. But you should remove user first from all boards,
because otherwise there could be bug of empty avatars at boards, that need to be removed manually
from database.

Thanks to xet7 !

Fixes #3956
2021-08-26 02:57:49 +03:00
Lauri Ojansivu bf2f3ccec1 Updated ChangeLog. 2021-08-26 02:39:39 +03:00
Lauri Ojansivu 9c7c481f48 Initials not required for new user that is created at Admin Panel.
Thanks to xet7 !
2021-08-26 02:36:43 +03:00
Lauri Ojansivu df26bc9013 Updated ChangeLog. 2021-08-26 02:12:47 +03:00
Lauri Ojansivu b36a7621e0 Fixed translation of "Clear Filter" for "All boards page: Possibility of filtering board by team or organization".
Thanks to xet7 !
2021-08-26 02:10:44 +03:00
Lauri Ojansivu f2c242f49e Added Chinese (Simplified) (zh-Hans or zh-CN).
Thanks to translators!
2021-08-26 02:08:23 +03:00
Lauri Ojansivu 5175f13881 Updated ChangeLog. 2021-08-25 23:32:35 +03:00
Lauri Ojansivu 75a1854cc3 Merge pull request #3964 from Emile840/master
[All boards page] Possibility of filtering board by team or organization
2021-08-25 23:29:49 +03:00
Emile NDAGIJIMANA 48c3263e28 [all boards page] Possibility of filtering board by team or organization 2021-08-24 17:12:51 +02:00
Lauri Ojansivu f5e26fb2e6 Updated ChangeLog. 2021-08-21 17:55:49 +03:00
Lauri Ojansivu 1fadf204c2 Added MAIL_SERVICE settings. Part 2.
Thanks to xet7 !

Fixes #3702
2021-08-21 17:54:05 +03:00
Lauri Ojansivu f03b14a46b Updated ChangeLog. 2021-08-21 17:10:04 +03:00
Lauri Ojansivu ab8e56e16a Added MAIL_SERVICE settings for Well Known Email Services https://github.com/wekan/wekan/wiki/Troubleshooting-Mail . Please test.
Thanks to xet7 !

Fixes #3702
2021-08-21 16:32:07 +03:00
Lauri Ojansivu 2f33a1ecff v5.51 2021-08-17 22:04:39 +03:00
Lauri Ojansivu abadeb5e14 Updated ChangeLog. 2021-08-17 21:37:15 +03:00
Lauri Ojansivu 19c68895e9 Merge pull request #3949 from syndimann/fix/global-search
Fix: global search
2021-08-17 21:33:05 +03:00
Kai Lehmann bed6d6c591 fixes global search, remove unnecessary use of CardCommentReactions 2021-08-17 16:14:50 +02:00
Lauri Ojansivu b2652edf56 v5.50 2021-08-16 00:00:06 +03:00
Lauri Ojansivu 94bb3bee77 Updated translations. 2021-08-15 23:53:29 +03:00
Lauri Ojansivu e909ece2da Updated ChangeLog. 2021-08-15 23:48:16 +03:00
Lauri Ojansivu 7bc250ce84 Merge pull request #3946 from syndimann/fix/user-creation
Fix: Save user initials and fullname when a new user is created
2021-08-15 23:44:07 +03:00
Kai Lehmann 7706839fbe fix user creation to include fullname and initials 2021-08-15 22:33:31 +02:00
Lauri Ojansivu 68ad58431d Updated translations. 2021-08-15 00:02:02 +03:00
Lauri Ojansivu 2059752fc6 Updated translations. 2021-08-14 09:51:30 +03:00
Lauri Ojansivu 302afae0bb Updated dependencies. 2021-08-14 09:44:07 +03:00
Lauri Ojansivu 3d1d94d628 Updated ChangeLog. 2021-08-13 23:54:24 +03:00
Lauri Ojansivu d51fc2f12c v5.49 2021-08-13 23:36:36 +03:00
Lauri Ojansivu 2dee14b0d5 Updated translations. 2021-08-13 23:24:07 +03:00
Lauri Ojansivu e75849da98 Updated translations. 2021-08-13 22:49:46 +03:00
Lauri Ojansivu 508c7b7a90 Merge pull request #3945 from syndimann/master
Feature: Adds Card Comment Reactions
2021-08-13 22:27:10 +03:00
Lauri Ojansivu de67e051d7 Updated ChangeLog. 2021-08-13 22:26:36 +03:00
Lauri Ojansivu 9ce65c601a Text "Search" now translatable at Card Add Member/Assignee.
Thanks to xet7 !
2021-08-13 22:23:50 +03:00
Kai Lehmann 10d7eeb762 Merge branch 'wekan:master' into master 2021-08-13 21:03:55 +02:00
Kai Lehmann 104a6dd0b3 add comments for card comment reactions feature 2021-08-13 20:53:04 +02:00
Kai Lehmann 2977120129 adds card comment reactions feature 2021-08-13 20:47:55 +02:00
Kai Lehmann d8e8512d66 add i18n for add-reaction 2021-08-13 20:43:30 +02:00
Lauri Ojansivu 7bfbcf7e03 v5.48 2021-08-11 23:48:02 +03:00
Lauri Ojansivu 91cad7b49e Updated to Node.js v12.22.5. Thanks to Node.js developers. 2021-08-11 23:40:56 +03:00
Lauri Ojansivu 26f1defc56 Updated ChangeLog. 2021-08-11 23:16:27 +03:00
Lauri Ojansivu 9a03654062 Fixed: Can't save user without Initials.
Thanks to devagleo and xet7 !

Fixes #3928
2021-08-11 23:14:18 +03:00
Lauri Ojansivu 2576ef75bd Updated dependencies.
Thanks to developers of dependencies!
2021-08-11 23:11:50 +03:00
Lauri Ojansivu 752b45af42 Updated ChangeLog. 2021-08-11 23:11:34 +03:00
Lauri Ojansivu 23c70ac252 Added new translation: [French (Switzerland) (fr_CH).
Thanks to translators!
2021-08-11 23:10:20 +03:00
Lauri Ojansivu ad4de9e85d Updated dependencies. 2021-08-11 22:10:59 +03:00
Lauri Ojansivu 855d60f28e Merge branch 'master' of github.com:wekan/wekan 2021-08-11 22:07:23 +03:00
Lauri Ojansivu 781a94c05f Updated ChangeLog. 2021-08-11 22:06:56 +03:00
Lauri Ojansivu b3cc01b041 Updated dependencies.
Thanks to developers of dependencies!
2021-08-11 22:05:17 +03:00
Lauri Ojansivu e23ced47ae Merge pull request #3944 from wekan/dependabot/npm_and_yarn/jszip-3.7.0
Bump jszip from 3.6.0 to 3.7.0
2021-08-11 21:33:39 +03:00
dependabot[bot] f406b51a5f Bump jszip from 3.6.0 to 3.7.0
Bumps [jszip](https://github.com/Stuk/jszip) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/master/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.6.0...v3.7.0)

---
updated-dependencies:
- dependency-name: jszip
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-11 18:32:04 +00:00
Lauri Ojansivu c81cb786ed Updated version. 2021-08-11 21:28:18 +03:00
Lauri Ojansivu 846f1244c7 Updated ChangeLog. 2021-08-11 21:04:45 +03:00
Lauri Ojansivu 3ea723329a Merge pull request #3942 from syndimann/feature/searchable-members-in-card-popup
Feature: Searchfields for members and assignees card popups
2021-08-11 21:02:06 +03:00
Kai Lehmann 698c9ed1ea adds searchfields to members and assignees popup 2021-08-10 21:20:16 +02:00
Lauri Ojansivu 63044ac13a v5.47 2021-08-05 00:49:00 +03:00
Lauri Ojansivu 68d9de8946 Updated dependencies. 2021-08-05 00:42:50 +03:00
Lauri Ojansivu 92a7717e50 v5.46 2021-08-05 00:33:22 +03:00
Lauri Ojansivu d5c0a5d377 Updated dependencies. 2021-08-05 00:26:54 +03:00
Lauri Ojansivu c0b7fb0b84 v5.45 2021-08-05 00:24:29 +03:00
Lauri Ojansivu 9b4e556837 Updated ChangeLog. 2021-08-05 00:13:08 +03:00
Lauri Ojansivu 1aec0b5f0d Merge pull request #3939 from syndimann/bugfix/3866-mentions-in-maximized-card
Fix: Show missing user mentions popover when posting comments in maximized card layout
2021-08-05 00:10:56 +03:00
Lauri Ojansivu c5d4e06ea3 Updated ChangeLog. 2021-08-05 00:10:14 +03:00
Lauri Ojansivu 97bf907448 Merge pull request #3937 from syndimann/feature/card-and-board-mentions
Feature: Special handles to notify board or card members in a comment
2021-08-05 00:08:43 +03:00
Kai Lehmann 7ef2a2a9f4 fixes missing user mentions when in maximized card 2021-08-04 22:22:59 +02:00
Kai Lehmann 547d82fe57 adds handles to notifiy board or card members 2021-08-03 23:35:12 +02:00
Lauri Ojansivu 977821d293 v5.44 2021-08-03 17:42:26 +03:00
Lauri Ojansivu f4e5306181 Updated ChangeLog. 2021-08-03 16:14:15 +03:00
Lauri Ojansivu f01b440fb7 Merge pull request #3936 from syndimann/feature/boardwise-card-numbers
Fix: Consecutive Card numbering when a card is moved to another board or copied
2021-08-03 16:12:28 +03:00
Kai Lehmann 2fd741bf54 fix cardnumber assignment for moved or copied card 2021-08-03 14:03:05 +02:00
Kai Lehmann e8522c323f fixes retrieval of next board cardnumber 2021-08-03 14:02:22 +02:00
Lauri Ojansivu def2ec46e0 Updated ChangeLog. 2021-08-03 06:15:40 +03:00
Lauri Ojansivu 4e17d5a10f Wekan v5.43 for helm.
Thanks to xet7 !
2021-08-03 06:13:43 +03:00
Lauri Ojansivu dcba6909e2 v5.43 2021-08-03 05:56:55 +03:00
Lauri Ojansivu fc74324d1a Updated ChangeLog. 2021-08-03 05:51:56 +03:00
Lauri Ojansivu 8bb33c53f0 Merge pull request #3935 from syndimann/feature/boardwise-card-numbers
Feature: Consecutive boardwise card numbering
2021-08-03 05:44:39 +03:00
Kai Lehmann 236b6c3552 Fixes card-number migration
and further optimizes getNextCardNumber in board model
2021-08-02 22:41:46 +02:00
Kai Lehmann 28e9a6ac33 show cardNumber in minicard and cardDetails 2021-08-02 21:44:37 +02:00
Kai Lehmann f91cc25b11 assign next cardNumber to newly created card 2021-08-02 21:44:19 +02:00
Kai Lehmann 6fd45ce74b adds card number allowance to card settings 2021-08-02 21:41:58 +02:00
Kai Lehmann b57eae14d4 add cardNumber handling to card and board model 2021-08-02 21:41:30 +02:00
Lauri Ojansivu 12db3714f9 Updated ChangeLog. 2021-08-01 17:15:56 +03:00
Lauri Ojansivu 7a1f42fa4e v5.42 for helm 2021-08-01 17:10:10 +03:00
Lauri Ojansivu 74064324cf Merge pull request #3933 from varac/update_helmchart
Update helmchart, pin image version
2021-08-01 17:08:13 +03:00
Varac f3baa32d6c Update Chart apiVersion, pin image version
This makes this Chart compatible with [flux](https://fluxcd.io)
[helm-controller](https://fluxcd.io/docs/components/helm), which
requires v2 charts.
2021-08-01 15:54:17 +02:00
Lauri Ojansivu 33eed50290 v5.42 2021-08-01 15:46:03 +03:00
Lauri Ojansivu 11d9d1c889 Updated translations. 2021-08-01 15:41:57 +03:00
Lauri Ojansivu 5a7860ac8e Updated ChangeLog. 2021-08-01 15:31:58 +03:00
Lauri Ojansivu b13f691389 Updated to Node.js v12.22.4. Thanks to Node.js developers. 2021-08-01 15:30:08 +03:00
Varac d70e876388 Ignore downloaded chart dependencies 2021-07-27 22:06:26 +02:00
Lauri Ojansivu 36c2cb9573 v5.41 2021-07-26 19:59:42 +03:00
Lauri Ojansivu 88a47780a8 Updated translations. 2021-07-26 19:52:33 +03:00
Lauri Ojansivu d30ce3c5cf Updated ChangeLog. 2021-07-26 14:04:25 +03:00
Lauri Ojansivu 0fa8fc8b50 Fixed Wekan JSON import fails.
Thanks to BartoszBroda and xet7 !

Fixes #3918
2021-07-26 14:01:09 +03:00
Lauri Ojansivu 6d73618a48 v5.40 2021-07-25 15:48:10 +03:00
Lauri Ojansivu db493f1571 Updated translations.
Thanks to translators!
2021-07-25 15:44:54 +03:00
Lauri Ojansivu 2b51afaedf Updated ChangeLog. 2021-07-25 15:22:07 +03:00
Lauri Ojansivu 18b6381d79 Fixed Delete of Planning Poker doesn't work.
Thanks to xet7 !

Fixes #3915
2021-07-25 15:19:54 +03:00
Lauri Ojansivu c65d8ed6a9 Updated ChangeLog. 2021-07-25 00:00:55 +03:00
Lauri Ojansivu b3ba156d20 v5.39 2021-07-24 23:38:10 +03:00
Lauri Ojansivu e1de787f19 Updated translations.
Thanks to translators!
2021-07-24 23:27:34 +03:00
Lauri Ojansivu e1f08b157b Updated ChangeLog. 2021-07-24 21:18:06 +03:00
Lauri Ojansivu 508915462d Merge pull request #3912 from Emile840/master
Organizations and teams are taken into account when displaying board in « All boards page »
2021-07-24 21:15:24 +03:00
Lauri Ojansivu 7c2ef6fbd5 Updated ChangeLog. 2021-07-24 19:58:59 +03:00
Lauri Ojansivu ae73029dda Added translation: English (Italy).
Thanks to translators!
2021-07-24 19:57:07 +03:00
Lauri Ojansivu 542972fc5c Updated ChangeLog. 2021-07-24 19:37:18 +03:00
Lauri Ojansivu d7cb143b0a Fix typo. 2021-07-24 19:35:24 +03:00
Lauri Ojansivu d594555227 Merge pull request #3910 from helioguardabaxo/master
Add Convert checklist item to card feature
2021-07-24 19:33:17 +03:00
Lauri Ojansivu fe25ed5202 Updated ChangeLog. 2021-07-24 19:25:49 +03:00
Lauri Ojansivu f6c36d6edd Merge branch 'indika-dev-master' 2021-07-24 19:22:23 +03:00
Lauri Ojansivu fe40f35d6d LDAP AD Simple Auth: Added settings for all Wekan Standalone (non-Sandstorm) platforms.
Thanks to xet7 !
2021-07-24 19:20:47 +03:00
Emile NDAGIJIMANA 789d1d1d1c « All boards page » only displays tables to which the current user has access 2021-07-23 10:39:42 +02:00
helioguardabaxo 70265deb47 Add Convert checklist item to card feature 2021-07-22 22:44:40 -03:00
Stefan Maaßen c0d1ed714e added comment because of change in configuration dependencies 2021-07-22 10:46:35 +02:00
Stefan Maaßen 0555b7e34c added comment to clarify additional use case of LDAP_DEFAULT_DOMAIN 2021-07-22 10:35:12 +02:00
Stefan Maaßen c1c2eb22ba removed unnecessary changes 2021-07-22 10:28:37 +02:00
Stefan Maaßen 697d7613f2 Merge branch 'master' of https://github.com/wekan/wekan 2021-07-22 10:06:55 +02:00
Lauri Ojansivu 33836af1f9 Try to fix Snap.
Thanks to roadmr and xet7 !
2021-07-21 23:40:13 +03:00
Stefan Maaßen 4f0c2dafca removed unnecessary files 2021-07-21 10:13:39 +02:00
Stefan Maaßen 84801010d5 merged with wekan master @ v5.38 2021-07-20 13:34:22 +02:00
Stefan Maaßen cb418f5e23 merged with wekan master @ v5.38 2021-07-20 13:33:42 +02:00
Lauri Ojansivu f7d6ac9401 v5.38 2021-07-18 15:46:34 +03:00
Lauri Ojansivu d939ab0d76 Updated ChangeLog. 2021-07-18 15:39:51 +03:00
Lauri Ojansivu d538a01d19 Updated to Node.js v12.22.3. Thanks to Node.js developers. 2021-07-18 15:37:50 +03:00
Lauri Ojansivu 8770326ed3 Updated translations. 2021-07-18 15:32:00 +03:00
Lauri Ojansivu b2e96746db Updated translations. 2021-07-16 16:22:08 +03:00
Lauri Ojansivu 6ce0be635b Updated ChangeLog. 2021-07-13 20:46:39 +03:00
Lauri Ojansivu 1001e95a87 Updated ChangeLog. 2021-07-13 20:13:43 +03:00
Lauri Ojansivu 609adcdf10 Updated dependencies.
Thanks to developers of dependencies !
2021-07-13 20:12:08 +03:00
Lauri Ojansivu 9de2580e30 Updated ChangeLog. 2021-07-13 20:11:44 +03:00
Lauri Ojansivu 9eb9081c6d Merge pull request #3902 from jghaanstra/master
Small fixes for ModernDark theme
2021-07-13 20:09:54 +03:00
Jelger Haanstra f551b03dc7 Small fixes for ModernDark theme 2021-07-13 15:49:20 +02:00
Lauri Ojansivu 1d5dd5e60f Fixed rebuild-wekan.sh .
Thanks to xet7 !
2021-07-12 18:16:12 +03:00
Lauri Ojansivu 35a7036d4a Updated ChangeLog. 2021-07-06 22:41:59 +03:00
Lauri Ojansivu 7024929881 Updated dependencies.
Thanks to developers of dependencies!
2021-07-06 22:40:44 +03:00
Lauri Ojansivu 90058f25bf Updated ChangeLog. 2021-07-06 21:20:49 +03:00
Lauri Ojansivu 24ec9018fb Updated ChangeLog. 2021-07-06 21:16:11 +03:00
Lauri Ojansivu ec01e5182d Fixed Line break which is wrongly added in Cards description and Cards comments.
Added Code View `</>` button when RICHER_CARD_COMMENT_EDITOR=true and in desktop view
(=non-mobile, so there is enough screen space for buttons in desktop view).

Thanks to Emile840 and xet7 !

Fixes #3885
2021-07-06 20:59:47 +03:00
Lauri Ojansivu 06d2880a7e Fix typos. 2021-07-05 13:43:03 +03:00
Lauri Ojansivu 2a611a8935 Merge pull request #3895 from Emile840/master
Add or remove an organization and team from a board
2021-07-05 13:38:13 +03:00
Emile NDAGIJIMANA b236d95636 Add or remove organizations and teams from boards 2021-07-05 11:27:38 +02:00
Lauri Ojansivu b1abfc768a v5.37 2021-07-04 08:05:19 +03:00
Lauri Ojansivu 9b97810109 Updated ChangeLog. 2021-07-04 07:53:00 +03:00
Lauri Ojansivu 4feffd90e3 Updated to Node.js v12.22.2. Thanks to Node.js developers. 2021-07-04 07:50:50 +03:00
Lauri Ojansivu dd8d2ea276 Updated ChangeLog. 2021-07-01 14:10:19 +03:00
Lauri Ojansivu 4c29b72242 Merge pull request #3889 from bentiss/fix-openapi
openapi: actually catch the error when esprima fails at parsing the file
2021-07-01 14:07:11 +03:00
Benjamin Tissoires ebe39771a6 openapi: actually catch the error when esprima fails at parsing the file
39f8a138d7 added a try/except around esprima to catch any hard error
from the parsing, but the returned value was not checked.

We now have the file models/exportExcel.js which gives us an unexpected
symbol on line 3 (not sure why it is not happy), but that fails the
generation of the doc entirely.

Fixes #3884

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2021-07-01 10:23:29 +02:00
Lauri Ojansivu 63605ee42e v5.36 2021-06-29 14:36:04 +03:00
Lauri Ojansivu b7f047db88 Updated translations. 2021-06-29 14:18:33 +03:00
Lauri Ojansivu 96289210d7 Updated ChangeLog. 2021-06-29 14:08:34 +03:00
Lauri Ojansivu 3b4a44abb1 Shared Templates: In Progress. Hide this feature while it's not finished yet.
Thanks to xet7 !
2021-06-29 14:03:47 +03:00
Lauri Ojansivu e0797c83f8 Updated ChangeLog. 2021-06-29 13:45:52 +03:00
Lauri Ojansivu 30ffcc9246 Fixed "Search All Boards" instructions are gone.
Thanks to ClaudiaK21 and xet7 !

Fixes #3882
2021-06-29 13:38:57 +03:00
Lauri Ojansivu a0945d2a2e Updated ChangeLog. 2021-06-25 00:15:41 +03:00
Lauri Ojansivu c4cea9e71b Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874

Thanks to xet7 !
2021-06-25 00:13:07 +03:00
Lauri Ojansivu 35ec61726d Updated ChangeLog. 2021-06-25 00:08:28 +03:00
Lauri Ojansivu f18a57b059 Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874

Thanks to xet7 !
2021-06-25 00:07:27 +03:00
Lauri Ojansivu 4ba180fbc4 Updated ChangeLog. 2021-06-24 23:38:07 +03:00
Lauri Ojansivu 0f34d407a4 Try to fix tests. Part 3.
Thanks to xet7 !
2021-06-24 23:37:13 +03:00
Lauri Ojansivu 4b29e9fbcb Updated ChangeLog. 2021-06-24 23:09:34 +03:00
Lauri Ojansivu 7f648720af Try to fix tests. Part 2.
Thanks to xet7 !
2021-06-24 23:08:14 +03:00
Lauri Ojansivu 58081c13cf Updated ChangeLog. 2021-06-24 22:54:57 +03:00
Lauri Ojansivu 78555f57a7 Try to fix tests.
Thanks to xet7 !
2021-06-24 22:52:53 +03:00
Lauri Ojansivu 1ad40134dd Updated ChangeLog. 2021-06-24 22:35:58 +03:00
Lauri Ojansivu 9e16a405d8 Delete user at REST API and Admin Panel/People/People. There is still bug of
leaving empty user avatars to boards: boards members, card members and assignees have
empty users. So it would be better to delete user from all boards before deleting user.

Thanks to darren-teo and xet7 !

Fixes #2716
2021-06-24 22:29:03 +03:00
Lauri Ojansivu 9122a339cb Updated ChangeLog. 2021-06-24 22:23:26 +03:00
Lauri Ojansivu 56197274b6 Fixes tests, that need to be in tests directory to not get build errors.
Thanks to xet7 !
2021-06-24 22:21:29 +03:00
Lauri Ojansivu 6cf65ba82a Updated ChangeLog. 2021-06-23 13:44:06 +03:00
Lauri Ojansivu aa59007409 Merge branch 'jankapunkt-tests' 2021-06-23 13:40:54 +03:00
Lauri Ojansivu 66729e4c05 Merge branch 'tests' of https://github.com/jankapunkt/wekan into jankapunkt-tests 2021-06-23 13:29:51 +03:00
Jan Küster 6387d32c2f ci fix script name 2021-06-23 12:25:02 +02:00
Jan Küster 48dbeb1e14 initial tests added 2021-06-23 12:12:29 +02:00
Jan Küster 20452d7296 initial tests added 2021-06-23 12:08:14 +02:00
Jan Küster 7daa67c792 script added for running tests 2021-06-23 12:06:33 +02:00
Jan Küster 4d9ba8d73b tests ci added 2021-06-23 11:52:34 +02:00
Jan Küster 3650ef4805 testinfrastructure created 2021-06-23 11:51:58 +02:00
Lauri Ojansivu be9154a015 Updated ChangeLog. 2021-06-22 19:35:47 +03:00
Lauri Ojansivu 0e00ca2350 Updated translations. 2021-06-22 19:17:56 +03:00
Lauri Ojansivu 2c0549a67a Updated ChangeLog. 2021-06-22 19:14:14 +03:00
Lauri Ojansivu 59e23e4296 Merge pull request #3871 from jankapunkt/fix-exceljs-client-leakage
remove unused exceljs from client bundle
2021-06-22 19:09:56 +03:00
Jan Küster 3aa7a6e244 remove unused exceljs from client bundle 2021-06-22 17:53:14 +02:00
Lauri Ojansivu 838c74a83b Updated ChangeLog. 2021-06-16 20:03:32 +03:00
Lauri Ojansivu 7f17bc9fb0 Shared Templates. In Progress.
Part 3:
- Template container titles "Card/List/Board Templates" automatically
  translated.

Thanks to xet7 !

Related #3313
2021-06-16 19:59:59 +03:00
Lauri Ojansivu 2dca6e8e7c Updated translations. 2021-06-16 19:19:20 +03:00
Lauri Ojansivu a1bb3f9031 Updated ChangeLog. 2021-06-16 19:16:39 +03:00
Lauri Ojansivu d1d4453120 Shared Templates. In Progress.
Part 2:
- Ablity to Add Template Container, checkbox in Create Board popup.
- Do not create Template Container by default, when creating user.

Thanks to xet7 !

Related #3313
2021-06-16 19:06:10 +03:00
Lauri Ojansivu 48dcb02328 Updated translations. 2021-06-16 16:19:08 +03:00
Lauri Ojansivu 0a0cec6ef0 Shared Templates. In Progress.
Thanks to xet7 !

Related #3313
2021-06-16 16:10:34 +03:00
Lauri Ojansivu c3dd9f47fb Updated translations. 2021-06-15 22:24:52 +03:00
Lauri Ojansivu 5417f9b190 Updated translations. 2021-06-15 12:53:30 +03:00
Lauri Ojansivu f03c873815 Fix typos. 2021-06-15 12:48:08 +03:00
Lauri Ojansivu 80adca5134 Merge pull request #3865 from Emile840/master
Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it
2021-06-15 12:43:06 +03:00
Emile840 6efcac2a0e Merge branch 'master' into master 2021-06-14 17:04:21 +02:00
Emile NDAGIJIMANA 5162317298 -warning messages when user try to delete an organization / remove user from organization or team 2021-06-14 16:43:07 +02:00
Emile NDAGIJIMANA 90139b978c merge of two branchs 2021-06-14 15:38:15 +02:00
Emile NDAGIJIMANA 080fcb9c62 -conflits resolve 2021-06-14 15:11:21 +02:00
Emile NDAGIJIMANA 250f95deb6 Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 12:51:15 +02:00
Emile NDAGIJIMANA bc98d82acf Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 12:46:00 +02:00
Emile NDAGIJIMANA ecd780962f Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 11:32:06 +02:00
Emile NDAGIJIMANA ab06597b7c Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 11:29:51 +02:00
Emile NDAGIJIMANA 220c52373a Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 10:03:48 +02:00
Emile NDAGIJIMANA 688ef08cd5 confilcts resolved for Addressed one of the point cited in issue #802 'Assigning a user to a team or organization 2021-06-10 18:27:27 +02:00
Emile NDAGIJIMANA 8607a18a26 Addressed one of the point cited in issue #802 'Assigning a user to a team or an organization' 2021-06-10 17:20:07 +02:00
Stefan Maaßen fe7962e10a AD Simple Auth is working 2020-04-07 14:03:16 +02:00
274 changed files with 11961 additions and 15830 deletions

No files matched your search

+8 -1
View File
@@ -1,5 +1,12 @@
{
"presets": [
"@babel/preset-stage-3"
]
],
"env": {
"COVERAGE": {
"plugins": [
"istanbul"
]
}
}
}
+1 -1
View File
@@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v12.22.1 \
NODE_VERSION=v12.22.6 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
+2
View File
@@ -122,6 +122,7 @@
"Activities": true,
"Attachments": true,
"Boards": true,
"CardCommentReactions": true,
"CardComments": true,
"DatePicker": true,
"Cards": true,
@@ -156,6 +157,7 @@
"Integrations": true,
"HTTP": true,
"AccountSettings": true,
"TableVisibilityModeSettings": true,
"Announcements": true,
"Swimlanes": true,
"ChecklistItems": true,
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.1
node-engine: 12.22.6
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.1
node-engine: 12.22.6
node-packages:
- node-gyp
- node-pre-gyp
+3
View File
@@ -1,5 +1,8 @@
## Issue
Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874
If you can not login for any reason:
- https://github.com/wekan/wekan/wiki/Forgot-Password
+63
View File
@@ -0,0 +1,63 @@
name: Docker
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
on:
schedule:
- cron: '28 23 * * *'
push:
branches: [ master ]
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
pull_request:
branches: [ master ]
env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
+160
View File
@@ -0,0 +1,160 @@
name: Test suite
on:
push:
branches:
- master
pull_request:
jobs:
# the following are optional jobs and need to be configured according
# to this project's settings:
#
# lintcode:
# name: Javascript lint
# runs-on: ubuntu-latest
# steps:
# - name: checkout
# uses: actions/checkout@v2
#
# - name: setup node
# uses: actions/setup-node@v1
# with:
# node-version: '12.x'
#
# - name: cache dependencies
# uses: actions/cache@v1
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
#
# - run: npm install
# - run: npm run lint:code
#
# lintstyle:
# name: SCSS lint
# runs-on: ubuntu-latest
# needs: [lintcode]
# steps:
# - name: checkout
# uses: actions/checkout@v2
#
# - name: setup node
# uses: actions/setup-node@v1
# with:
# node-version: '12.x'
#
# - name: cache dependencies
# uses: actions/cache@v1
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
# - run: npm install
# - run: npm run lint:style
#
# lintdocs:
# name: documentation lint
# runs-on: ubuntu-latest
# needs: [lintcode,lintstyle]
# steps:
# - name: checkout
# uses: actions/checkout@v2
#
# - name: setup node
# uses: actions/setup-node@v1
# with:
# node-version: '12.x'
#
# - name: cache dependencies
# uses: actions/cache@v1
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
#
# - run: npm install
# - run: npm run lint:markdown
tests:
name: Meteor ${{ matrix.meteor }} tests
runs-on: ubuntu-latest
steps:
# CHECKOUTS
- name: Checkout
uses: actions/checkout@v2
# CACHING
- name: Install Meteor
id: cache-meteor-install
uses: actions/cache@v2
with:
path: ~/.meteor
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
restore-keys: |
v1-meteor-
- name: Cache NPM dependencies
id: cache-meteor-npm
uses: actions/cache@v2
with:
path: ~/.npm
key: v1-npm-${{ hashFiles('package-lock.json') }}
restore-keys: |
v1-npm-
- name: Cache Meteor build
id: cache-meteor-build
uses: actions/cache@v2
with:
path: |
.meteor/local/resolver-result-cache.json
.meteor/local/plugin-cache
.meteor/local/isopacks
.meteor/local/bundler-cache/scanner
key: v1-meteor_build_cache-${{ github.ref }}-${{ github.sha }}
restore-key: |
v1-meteor_build_cache-
- name: Setup meteor
uses: meteorengineer/setup-meteor@v1
with:
meteor-release: '2.2'
- name: Install NPM Dependencies
run: meteor npm ci
- name: Run Tests
run: sh ./test-wekan.sh -cv
- name: Upload coverage
uses: actions/upload-artifact@v2
with:
name: coverage-folder
path: .coverage/
coverage:
name: Coverage report
runs-on: ubuntu-latest
needs: [tests]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Download coverage
uses: actions/download-artifact@v2
with:
name: coverage-folder
path: .coverage/
- name: Coverage Report
uses: VeryGoodOpenSource/very_good_coverage@v1.1.1
with:
path: ".coverage/lcov.info"
min_coverage: 1 # TODO add tests and increase to 95!
+5
View File
@@ -33,3 +33,8 @@ ehthumbs.db
.meteor/local
.devcontainer/docker-compose.extend.yml
.devcontainer/volumes*/
.coverage
# Helm chart
# Chart dependencies
/helm/wekan/**/*.tgz
+2
View File
@@ -145,3 +145,5 @@ spacebars
easylogic:summernote
pascoual:pdfkit
wekan-accounts-lockout
lmieulet:meteor-coverage
meteortesting:mocha
+4
View File
@@ -69,6 +69,7 @@ lamhieu:meteorx@2.1.1
lamhieu:unblock@1.0.0
launch-screen@1.2.1
livedata@1.0.18
lmieulet:meteor-coverage@3.2.0
localstorage@1.2.0
logging@1.2.0
matb33:collection-hooks@0.9.1
@@ -82,6 +83,9 @@ meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
meteortesting:browser-tests@1.3.4
meteortesting:mocha@2.0.1
meteortesting:mocha-core@8.0.1
minifier-css@1.5.4
minifier-js@2.6.0
minifiers@1.1.8-faster-rebuild.0
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.22.1
TRAVIS_NODE_VERSION: 12.22.6
TRAVIS_NPM_VERSION: latest
before_install:
+1 -1
View File
@@ -39,7 +39,7 @@ host = https://www.transifex.com
# tap:i18n requires us to use `-` separator in the language identifiers whereas
# Transifex uses a `_` separator, without an option to customize it on one side
# or the other, so we need to do a Manual mapping.
lang_map = ar_EG:ar-EG, bg_BG:bg, de_CH:de-CH, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
lang_map = ar_EG:ar-EG, bg_BG:bg, de_CH:de-CH, en_IT:en-IT, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, fr_CH:fr-CH, hu_HU:hu, id_ID:id, mn_MN:mn, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK
[wekan.application]
file_filter = i18n/<lang>.i18n.json
+499 -3
View File
@@ -1,5 +1,501 @@
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
# v5.64 2021-10-09 WeKan ® release
This release adds the following new features:
- [Excel Export : add board description, add comments worksheet](https://github.com/wekan/wekan/pull/4045).
Thanks to Ben0it-T.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.63 2021-10-07 Wekan release
This release adds the following new features:
- [Allow setting custom kubernetes labels when using the helm chart](https://github.com/wekan/wekan/pull/4031).
Thanks to ariep.
and fixes the following bugs:
- [Fixed SMTP by reverting MAIL_SERVICE changes](https://github.com/wekan/wekan/commit/9c99c5c3ae8d291df5305b3b6cd1825fc5cc2c21).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.62 2021-10-04 Wekan release
This release adds the following new features:
- [Allow word match for rules -> title filter](https://github.com/wekan/wekan/pull/4025).
Thanks to ilvar.
- [CSV/TSV/Excel Export translatable and fixed, CSV semicolon option added](https://github.com/wekan/wekan/pull/4028).
Thanks to Ben0it-T.
- Added week numbers to dates at card, minicard, Custom Field dates, DatePicker and Calendar.
[Part 1](https://github.com/wekan/wekan/commit/d06ac09485dafb0256ae7fbe613ab2dbe00b70f3),
[Part 2](https://github.com/wekan/wekan/commit/9e6744d1e33b37e0d23eea5869ccac3ff37f7d53).
Thanks to xet7.
- [Confirm Archive Card](https://github.com/wekan/wekan/commit/6c3fcdcc4c446fd4c8dc4dca1b2846f6e3ea72e4).
Thanks to xet7.
and fixes the following bugs:
- [Clean up /tmp after Docker build. This drastically reduces docker image size from ~280 MB to ~180 MB](https://github.com/wekan/wekan/pull/4026).
Thanks to ilvar.
- [Removed extra quotes from Export menu](https://github.com/wekan/wekan/commit/553652556468ac88c0691d4d688d5a922ef6a0c2).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.61 2021-09-25 Wekan release
This release adds the following new features:
- [Search by name or username or emails address when adding a new user to a board](https://github.com/wekan/wekan/pull/4018).
Thanks to Emile840.
and fixes the following bugs:
- [Fixed REST API, it shoud work now by Admin user](https://github.com/wekan/wekan/commit/e3a0dea85fa1f8e2f580f419b30cf5f36775d731).
Reverted [Allow board members to use more of API of Wekan v5.35](https://github.com/wekan/wekan/commit/a719e8fda1f78bcbf9af6e7b4341f8be1d141e90).
Thanks to tomhughes and xet7.
- [Wekan Gantt GPL: Fix Tasks not displayed in Gantt screen](https://github.com/wekan/wekan-gantt-gpl/commit/72d464f5eb55501f08eb0cfd31fd5340380d7f3b).
Thanks to MrLovegreen and khjde1207.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.60 2021-09-22 Wekan release
This release adds the following new features:
- [Toggle opened card Custom Fields layout between Grid and one per row](https://github.com/wekan/wekan/commit/fc2fb9a081021663cc822bf2a687fda74cd0afa6).
Thanks to xet7.
and adds the following updates:
- [Updated Docker base image to newer Ubuntu](https://github.com/wekan/wekan/commit/442e6bf983ada47c26a15dbc1982c554118fa84d).
Thanks to xet7.
- [Try to add Docker image to GitHub Docker Image Registry](https://github.com/wekan/wekan/commit/70ba1eca787671879215726c16335a84e2b636c9).
Thanks to xet7.
- [Update build scripts to install npm from NodeSource, and meteor with npm](https://github.com/wekan/wekan/commit/c062621dd5486b60bdd200a9279a38b98fc0d410).
Thanks to Meteor developers.
and fixes the following bugs:
- [Try to fix Bug: Card number equal to #0 when creating a sub-task from a card](https://github.com/wekan/wekan/commit/4c659da5334641f558e77285f7ca47e562f7c853).
Thanks to marcungeschikts, olivierlambert and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.59 2021-09-17 Wekan release
This release adds the following new features:
- [Admin Panel/People: Possibility of adding a team to all selected users](https://github.com/wekan/wekan/pull/3996).
Thanks to Emile840.
- [Add / remove team members as board members when adding / removing team from board](https://github.com/wekan/wekan/pull/4000).
Thanks to Emile840.
- [Added more translations to: Admin Panel/People: Possibility of adding a team to all selected users](https://github.com/wekan/wekan/commit/3d9b7eb7ab41c6450b473f6f349d894f516c5487).
Thanks to xet7.
- [Enter new password 2 times when registering](https://github.com/wekan/wekan/commit/0da84f8f3eb91c5bf726e058f5ec74a7891d734b).
Thanks to sh2515 and xet7.
- Sum of cards. In Progress, not ready yet.
[Part 1: Add Custom Field options for field sum](https://github.com/wekan/wekan/commit/8626b466b830adf6c671211bbd61b53b96ac5a49).
[Part 2: Show option for custom field sum only for currency and number custom fields](https://github.com/wekan/wekan/commit/9bee6ae6663a5e1c974de2811f6a5fdd2d66efe5).
Thanks to xet7.
- [Admin Panel/Settings/Layout: Customize OIDC button text](https://github.com/wekan/wekan/pull/4011).
Thanks to Emile840.
- [At card attachments, show play and fullscreen controls for video webm/mp4/ogg, and play controls for audio mp3/ogg](https://github.com/wekan/wekan/commit/bd9fbedbf9fbe0181913876b930b335261cd2a0a).
Thanks to luistiktok and xet7.
and fixes the following bugs:
- [Links to devel branch are broken; use master instead](https://github.com/wekan/wekan/pull/3993).
Thanks to garrison.
- [Fix first user creation for via OIDC](https://github.com/wekan/wekan/pull/3994).
Thanks to ww-daniel-mora.
- [When list has just one card, to show 'card' instead of 'cards'](https://github.com/wekan/wekan/pull/3999).
Thanks to helioguardabaxo.
- [Fix: Linked card cannot change date](https://github.com/wekan/wekan/pull/4002).
Thanks to Ben0it-T.
- [Try to fix: Can't delete attachment](https://github.com/wekan/wekan/commit/889ec1339a025a68ec919f059b9d58e8d94a3376).
Thanks to luistiktok and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.58 2021-09-01 Wekan release
This release fixes the following bugs:
- [1) Edit profile and modify password menus are not displayed if SSO authentication is used.
2) Board filtering will be displayed only if user belongs to atleast one team or
organization](https://github.com/wekan/wekan/pull/3983).
Thanks to Emile840.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.57 2021-08-31 Wekan release
This release adds the following updates:
- [Updated build scripts](https://github.com/wekan/wekan/commit/52fafe997659e933e403acb0ee0cffc99f74e35f).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.56 2021-08-31 Wekan release
This release adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/commit/858967f4200783cadaa62d0e3436f661c772ede7).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.55 2021-08-31 Wekan release
This release adds to following CRITICAL SECURITY UPDATES:
- [Updated to Node.js v12.22.6](https://github.com/wekan/wekan/commit/48636892489dd01c6f6b930bafb94651c00859d8).
Thanks to Node.js developers.
and fixes the following bugs:
- [Fixed bugs](https://github.com/wekan/wekan/pull/3981):
1) Public Boards page shows only "Add Board" button, not any Public Boards.
2) When at Admin Panel / Boards visibility / Private only, public board still accessible publicly by it's
public board URL.
Thanks to Emile840.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.54 2021-08-28 Wekan release
This release adds the following new features:
- [Admin panel: Added a parameter to display or not the visibility of a board in private mode only](https://github.com/wekan/wekan/pull/3976).
Thanks to Emile840.
and fixes the following bugs:
- [Fix: Incorrect card numbers for sub tasks](https://github.com/wekan/wekan/pull/3977).
Thanks to syndimann.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.53 2021-08-27 Wekan release
This release fixes the following bugs:
- [Try to fix MAIL_FROM](https://github.com/wekan/wekan/commit/787df044190915c46e22159f3c40fb611846dc07).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.52 2021-08-26 Wekan release
This release adds the following new features:
- Added MAIL_SERVICE settings for Well Known Email Services
[Part 1](https://github.com/wekan/wekan/commit/ab8e56e16a02ef0afb7b4023a43b4adf2558a8ff),
[Part 2](https://github.com/wekan/wekan/commit/1fadf204c2d5fa96ea41b9cb39f003cc05e2fe46).
https://github.com/wekan/wekan/wiki/Troubleshooting-Mail . Please test.
Thanks to xet7.
- [All Boards page: Possibility of filtering board by team or organization](https://github.com/wekan/wekan/pull/3964).
Thanks to Emile840.
- [Fixed translation of "Clear Filter" for "All boards page: Possibility of filtering board by team or organization"](https://github.com/wekan/wekan/commit/b36a7621e0feca5c22fc4a24eceba1a9fc584ab0).
Thanks to xet7.
and adds the following new translations:
- [Added Chinese (Simplified) (zh-Hans or zh-CN)](https://github.com/wekan/wekan/commit/f2c242f49e18e2197f1f90c9b2dac5934a08325d).
Thanks to translators.
and fixes the following bugs:
- [Initials not required for new user that is created at Admin Panel](https://github.com/wekan/wekan/commit/9c7c481f48cb66406715f7571439f9d7fa332b87).
Thanks to xet7.
- [Delete user is now possible at Admin Panel](https://github.com/wekan/wekan/commit/7808fdd22f04cc482b7df21187aaf3e9623f19e6).
But you should remove user first from all boards, because otherwise there could be
bug of empty avatars at boards, that need to be removed manually from database.
Thanks to xet7.
- [Fixed Save button not clickable in maximized card view](https://github.com/wekan/wekan/commit/a59932af00c066871102970d252b78d262d06fa0).
Thanks to hatl, urmel1960 and syndimann.
- [Fixed New wide card edit view is all jumbled on mobile](https://github.com/wekan/wekan/commit/241eb9df0fb446b3775704848281b0cc032c4921).
Thanks to jdaviescoates and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.51 2021-08-17 Wekan release
This release fixes the following bugs:
- [Fixed exception in global search](https://github.com/wekan/wekan/pull/3949).
Thanks to syndimann.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.50 2021-08-15 Wekan release
This release fixes the following bugs:
- [Fix: Save user initials and fullname when a new user is created](https://github.com/wekan/wekan/pull/3946).
Thanks to syndimann.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.49 2021-08-14 Wekan release
This release adds the following new features:
- [Text "Search" now translatable at Card Add Member/Assignee](https://github.com/wekan/wekan/commit/9ce65c601a875a4259fb69fdda45124b8412ae6f).
Thanks to xet7.
- [Add Card Comment Reactions](https://github.com/wekan/wekan/pull/3945).
Thanks to syndimann.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.48 2021-08-11 Wekan release
This release adds the following CRITICAL SECURITY UPDATES:
- [Updated to Node.js v12.22.5](https://github.com/wekan/wekan/commit/91cad7b49e25cecdf417321dadcdd9ea5cd8b020).
Thanks to Node.js developers.
- Also jszip update in some of included update commits.
and adds the following new features:
- [Searchfields for members and assignees card popups](https://github.com/wekan/wekan/pull/3942).
Thanks to syndimann.
and adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/commit/b3cc01b04167bd67dde02c6c899baf8917ae09c1).
Thanks to developers of dependencies.
and adds the following new translations:
- [French (Switzerland) (fr_CH)](https://github.com/wekan/wekan/commit/23c70ac252494b464cd2a268d7e680370775ddc4).
Thanks to translators.
and fixes the following bugs:
- [Fixed: Can't save user without Initials](https://github.com/wekan/wekan/commit/9a03654062f9c8ac7aac257f11b386a054cd39e7).
Thanks to devagleo and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.47 2021-08-05 Wekan release
This release adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/commit/68d9de89466611521db7d942dcf8daf58ba15a3e).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.46 2021-08-05 Wekan release
This release adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/commit/d5c0a5d377d31bedadf3730756406355a17a563a).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.45 2021-08-05 Wekan release
This release adds the following new features:
- [Special handles to notify board or card members in a comment](https://github.com/wekan/wekan/pull/3937).
Thanks to syndimann.
and fixes the following bugs:
- [Fix: Show missing user mentions popover when posting comments in maximized card layout](https://github.com/wekan/wekan/pull/3939).
Thanks to syndimann.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.44 2021-08-03 Wekan release
This release adds the following updates:
- [Wekan v5.43](https://github.com/wekan/wekan/commit/4e17d5a10f95fcea420c794ed8b30ea18dc2a725) and v5.44 for helm.
Thanks to xet7.
and fixes the following bugs:
- [Fix: Consecutive Card numbering when a card is moved to another board or copied](https://github.com/wekan/wekan/pull/3936).
Thanks to syndimann.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.43 2021-08-03 Wekan release
This release adds the following new features:
- [Consecutive boardwise card numbering](https://github.com/wekan/wekan/pull/3935).
Thanks to syndimann.
and adds the following updates:
- [Update Helm Chart apiVersion, pin image version](https://github.com/wekan/wekan/pulls/3933).
This makes this Chart compatible with [flux](https://fluxcd.io)
[helm-controller](https://fluxcd.io/docs/components/helm), which requires v2 charts.
Thanks to varac.
- [Wekan v5.42 for helm](https://github.com/wekan/wekan/commit/7a1f42fa4e153ff4a0fb481ca5a363ac62033b7f).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.42 2021-08-01 Wekan release
This release adds the following CRITICAL SECURITY UPDATES:
- [Updated to Node.js v12.22.4](https://github.com/wekan/wekan/commit/b13f6913896f787e1cae485381d98345d9f8b830).
Thanks to Node.js developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.41 2021-07-26 Wekan release
This release fixes the following bugs:
- [Fixed Wekan JSON import fails](https://github.com/wekan/wekan/commit/0fa8fc8b506831a60649d100ce93c96f8f7b76f5).
Thanks to BartoszBroda and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.40 2021-07-25 Wekan release
This release fixes the following bugs:
- [Fixed Delete of Planning Poker doesn't work](https://github.com/wekan/wekan/commit/18b6381d790848062752b211d48c84a2de268bd0).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.39 2021-07-24 Wekan release
This release adds the following new features:
- [LDAP AD Simple Auth](https://github.com/wekan/wekan/pull/3909).
Thanks to indika-dev.
- [LDAP AD Simple Auth: Added settings for all remaining Wekan Standalone (non-Sandstorm)
platforms](https://github.com/wekan/wekan/commit/fe40f35d6d9b6293f3bdbf5bc0f3e8e708c59518)
and Docs to https://github.com/wekan/wekan/wiki/LDAP-AD-Simple-Auth .
Thanks to xet7.
- [Convert Checklist Item to Card](https://github.com/wekan/wekan/pull/3910).
Thanks to helioguardabaxo.
- [Organizations and Teams are taken into account when displaying board at
`All Boards` page](https://github.com/wekan/wekan/pull/3912).
Thanks to Emile840.
and adds the following new translations:
- [English (Italy)](https://github.com/wekan/wekan/commit/ae73029dda63db361925e378202e6f8c137cf5bd).
Thanks to translators.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.38 2021-07-18 Wekan release
This release adds the following new features:
- [Added Code View `</>` button when `RICHER_CARD_COMMENT_EDITOR=true` and in desktop view
where is enough screen space for buttons (not added to mobile
view)](https://github.com/wekan/wekan/commit/ec01e5182d6b8c848d752540887a8113472b0226).
Thanks to xet7.
and adds the following updates:
- Updated dependencies
[Part 1](https://github.com/wekan/wekan/commit/7024929881c05cad472de74c86517cf80c8e240c),
[Part 2](https://github.com/wekan/wekan/commit/609adcdf100db226c5f310577195afa4b1a4aead).
Thanks to developers of dependencies.
- [Updated to Node.js v12.22.3](https://github.com/wekan/wekan/commit/d538a01d1962464cf4cb001462669150eeafaa99).
Thanks to Node.js developers.
and fixes the following bugs:
- [Fixed Line break which is wrongly added in Cards description and Cards
comments](https://github.com/wekan/wekan/commit/ec01e5182d6b8c848d752540887a8113472b0226).
Thanks to Emile840 and xet7.
- [Fixed rebuild-wekan.sh](https://github.com/wekan/wekan/commit/1d5dd5e60fec151de6c7dce7ef4e758b562923b9).
Thanks to xet7.
- [Small fixes for ModernDark theme](https://github.com/wekan/wekan/pull/3902).
Thanks to jghaanstra.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.37 2021-07-04 Wekan release
This release adds the following CRITICAL SECURITY UPDATES:
- [Updated to Node.js v12.22.2](https://github.com/wekan/wekan/commit/4feffd90e3f466609e09524e0ddccdafa2faef32).
Thanks to Node.js developers.
and fixes the following bugs:
- [Building OpenAPI docs is broken in Wekan v3.56](https://github.com/wekan/wekan/pull/3889).
Thanks to bentiss.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.36 2021-06-29 Wekan release
This release adds the following new features:
- [Added some controls and warning messages when user try to delete an organization or team that has
at least one user belongs to it](https://github.com/wekan/wekan/pull/3865).
Thanks to Emile840.
- Shared Templates. In Progress.
[Part 1](https://github.com/wekan/wekan/commit/0a0cec6ef0eb55391608aade897004db430ba10a).
Template Containers visible at All Boards page, with white border around board icon.
[Part 2](https://github.com/wekan/wekan/commit/d1d4453120005de61eaf2cbadc6a7b9d80e75fc1).
Ablity to Add Template Container, checkbox in Create Board popup.
Do not create Template Container by default, when creating user.
[Part 3](https://github.com/wekan/wekan/commit/7f17bc9fb03d6f4b43a2cd71ecc372e0f1b0f491).
Template container titles "Card/List/Board Templates" automatically translated.
Thanks to xet7.
[Part 4](https://github.com/wekan/wekan/commit/3b4a44abb1c1c4339c3d1b00dfac1c69ec3684cd).
Hide this Shared Templates feature while it's not finished yet.
Added back creating Template Container by default, when creating user.
Thanks to xet7.
- [Added testsuite](https://github.com/wekan/wekan/pull/3872).
Thanks to jankapunkt.
- [Delete user at REST API and `Admin Panel/People/People`](https://github.com/wekan/wekan/commit/9e16a405d8ca32a4e1be9cf89f8f978a2985593c).
There is still bug of leaving empty user avatars to boards: boards members, card members and assignees have
empty users. So it would be better to delete user from all boards before deleting user.
Thanks to darren-teo and xet7.
and adds the following improvements:
- [Removed unused exceljs from client bundle](https://github.com/wekan/wekan/pull/3871).
This decreased Wekan browserside frontend amount of Javascript from 5.4 MB to 4.3 MB.
Thanks to jankapunkt.
- Added note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874 .
[Part 1](https://github.com/wekan/wekan/commit/f18a57b059994b8a6a3588a69cf095fe599b3a90),
[Part 2](https://github.com/wekan/wekan/commit/c4cea9e71b467731fd8290538dd039b7691097af).
Thanks to xet7.
and fixes the following bugs:
- [Fixed tests, that need to be in tests directory to not get build
errors](https://github.com/wekan/wekan/commit/56197274b6c4782fa20c7d9b5b9d58255d1f830a).
Thanks to xet7.
- Try to fix tests.
[Part 1](https://github.com/wekan/wekan/commit/78555f57a7c2ba0fb3e3986608bcf11509af9a21),
[Part 2](https://github.com/wekan/wekan/commit/7f648720afa42a2b53bfdee7e709fd891eb33373),
[Part 3](https://github.com/wekan/wekan/commit/0f34d407a43c8a63d882e69ea64ea17fc4b22c7b).
Thanks to xet7.
- [Fixed "Search All Boards" instructions are gone](https://github.com/wekan/wekan/commit/30ffcc924663f39406b250d93b14384a2f38ab6a).
Thanks to ClaudiaK21 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.35 2021-06-14 Wekan release
This release adds the following new features:
@@ -5364,7 +5860,7 @@ This release adds the following new features:
and fixes the following bugs:
- Revert [Sandstorm API changes](https://github.com/wekan/wekan/commit/be03a191c4321c2f80116c0ee1ae6c826d882535)
that were done at [Wekan v2.05](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v205-2019-01-27-wekan-release)
that were done at [Wekan v2.05](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v205-2019-01-27-wekan-release)
to fix #2143. Thanks to pantraining and xet7.
Thanks to above GitHub users and translators for contributions.
@@ -5511,7 +6007,7 @@ Update translations. Thanks to translators.
This release adds the following new features:
- [IFTTT Rules improvements](https://github.com/wekan/wekan/pull/2088). Thanks to Angtrim.
- Add [find.sh](https://github.com/wekan/wekan/blob/devel/find.sh) bash script that ignores
- Add [find.sh](https://github.com/wekan/wekan/blob/master/find.sh) bash script that ignores
extra directories when searching. xet7 uses this a lot when developing. Thanks to xet7.
Thanks to above GitHub users for their contributions.
@@ -7022,7 +7518,7 @@ This release adds the following new features:
- [Checklist templates](https://github.com/wekan/wekan/pull/1470);
- Added [Finnish language changelog](https://github.com/wekan/wekan/tree/devel/meta/t9n-changelog)
and [more Finnish traslations](https://github.com/wekan/wekan/blob/devel/sandstorm-pkgdef.capnp)
and [more Finnish traslations](https://github.com/wekan/wekan/blob/master/sandstorm-pkgdef.capnp)
to Sandstorm.
Thanks to GitHub users erikturk and xet7 for their contributions.
+8 -6
View File
@@ -1,8 +1,8 @@
FROM quay.io/wekan/ubuntu:groovy-20210115
FROM quay.io/wekan/ubuntu:hirsute-20210825
LABEL maintainer="wekan"
# 2020-12-03:
# - Above Ubuntu base image copied from Docker Hub ubuntu:groovy-20201125.2
# 2021-09-18:
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
# to Quay to avoid Docker Hub rate limits.
# Set the environment variables (defaults where required)
@@ -12,7 +12,7 @@ ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
NODE_VERSION=v12.22.1 \
NODE_VERSION=v12.22.6 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -64,6 +64,9 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
LDAP_ENABLE=false \
LDAP_PORT=389 \
LDAP_HOST="" \
LDAP_AD_SIMPLE_AUTH="" \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_BASEDN="" \
LDAP_LOGIN_FALLBACK=false \
LDAP_RECONNECT=true \
@@ -81,8 +84,6 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
LDAP_ENCRYPTION=false \
LDAP_CA_CERT="" \
LDAP_REJECT_UNAUTHORIZED=false \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_USER_SEARCH_FILTER="" \
LDAP_USER_SEARCH_SCOPE="" \
LDAP_USER_SEARCH_FIELD="" \
@@ -308,6 +309,7 @@ RUN \
apt-get remove --purge -y ${BUILD_DEPS} && \
apt-get autoremove -y && \
npm uninstall -g api2html &&\
rm -R /tmp* && \
rm -R /var/lib/apt/lists/* && \
rm -R /home/wekan/.meteor && \
rm -R /home/wekan/app && \
+2 -2
View File
@@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.1 \
NODE_VERSION=v12.22.6 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64
@@ -40,7 +40,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.1 \
NODE_VERSION=v12.22.6 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
+30 -25
View File
@@ -1,6 +1,6 @@
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
# Wekan - Open Source kanban
# WeKan ® - Open Source kanban
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan)
@@ -14,31 +14,36 @@
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_shield)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619/badge)](https://bestpractices.coreinfrastructure.org/projects/4619)
## [Translate Wekan at Transifex](https://transifex.com/wekan/wekan)
## [Translate WeKan ® at Transifex](https://transifex.com/wekan/wekan)
Translations to non-English languages are accepted only at [Transifex](https://transifex.com/wekan/wekan) using webbrowser.
New English strings of new features can be added as PRs to edge branch file wekan/i18n/en.i18n.json .
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
Please add most of your questions as GitHub issue: [Wekan Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
Please add most of your questions as GitHub issue: [WeKan ® Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
It's better than at chat where details get lost when chat scrolls up.
## Chat
[Discussions][discussions] - Wekan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Discussions][discussions] - WeKan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
## Docker: Please only use Docker release tags
Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874
## FAQ
**NOTE**:
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
- Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
## About Wekan
## About WeKan ®
Wekan is an completely [Open Source][open_source] and [Free software][free_software]
WeKan ® is an completely [Open Source][open_source] and [Free software][free_software]
collaborative kanban board application with MIT license.
Whether you’re maintaining a personal todo list, planning your holidays with some friends,
@@ -46,58 +51,58 @@ or working in a team on your next revolutionary idea, Kanban boards are an unbea
to keep your things organized. They give you a visual overview of the current state of your project,
and make you productive by allowing you to focus on the few items that matter the most.
Since Wekan is a free software, you don’t have to trust us with your data and can
Since WeKan ® is a free software, you don’t have to trust us with your data and can
install Wekan on your own computer or server. In fact we encourage you to do
that by providing one-click installation on various platforms.
- Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
- WeKan ® is used in [most countries of the world](https://snapcraft.io/wekan).
- Wekan largest user has 13k users using Wekan in their company.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 63 languages.
- [Features][features]: Wekan has real-time user interface.
- [Platforms][platforms]: Wekan supports many platforms.
Wekan is critical part of new platforms Wekan is currently being integrated to.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 70 languages.
- [Features][features]: WeKan ® has real-time user interface.
- [Platforms][platforms]: WeKan ® supports many platforms.
WeKan ® is critical part of new platforms Wekan is currently being integrated to.
## Requirements
- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
[Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
- 1 GB RAM minimum free for WeKan ®. Production server should have minimum total 4 GB RAM.
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
- SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
Wekan on Sandstorm is not usually affected by any Standalone Wekan (Snap/Docker/Source) security issues.
- SECURITY: Updating to newest WeKan ® version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest WeKan ® is supported.
WeKan ® on Sandstorm is not usually affected by any Standalone WeKan ® (Snap/Docker/Source) security issues.
- [Reporting all new bugs immediately](https://github.com/wekan/wekan/issues).
New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of Wekan database once a day miminum.
New features and fixes are added to WeKan ® [many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of WeKan ® database once a day miminum.
Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
Some bug can cause Wekan board to not load at all, requiring manual fixing of database content.
Some bug can cause WeKan ® board to not load at all, requiring manual fixing of database content.
## Roadmap and Demo
[Roadmap][roadmap_wekan] - Public read-only board at Wekan demo.
[Roadmap][roadmap_wekan] - Public read-only board at WeKan ® demo.
[Developer Documentation][dev_docs]
- There is many companies and individuals contributing code to Wekan, to add features and bugfixes
[many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
- There is many companies and individuals contributing code to WeKan ®, to add features and bugfixes
[many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
- [Commercial Support](https://wekan.team/commercial-support/).
We also welcome sponsors for features and bugfixes.
By working directly with Wekan you get the benefit of active maintenance and new features added by growing Wekan developer community.
By working directly with WeKan ® you get the benefit of active maintenance and new features added by growing WeKan ® developer community.
## Screenshot
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)
[![Screenshot of Wekan][screenshot_wekan]][roadmap_wekan]
[![Screenshot of WeKan ®][screenshot_wekan]][roadmap_wekan]
## License
Wekan is released under the very permissive [MIT license](LICENSE), and made
WeKan ® is released under the very permissive [MIT license](LICENSE), and made
with [Meteor](https://www.meteor.com).
[platforms]: https://github.com/wekan/wekan/wiki/Platforms
+4 -4
View File
@@ -51,8 +51,8 @@ This also means all Standalone Wekan functionality works in offline local networ
Wekan is used by companies that have [thousands of users](https://github.com/wekan/wekan/wiki/AWS) and at healthcare.
Wekan uses xss package for input fields like cards, as you can see from
[package.json](https://github.com/wekan/wekan/blob/devel/package.json). Other used versions can be seen from
[Meteor versions file](https://github.com/wekan/wekan/blob/devel/.meteor/versions).
[package.json](https://github.com/wekan/wekan/blob/master/package.json). Other used versions can be seen from
[Meteor versions file](https://github.com/wekan/wekan/blob/master/.meteor/versions).
Forms can include markdown links, html, image tags etc like you see at https://wekan.github.io .
It's possible to add attachments to cards, and markdown/html links to files.
@@ -69,7 +69,7 @@ access to outside of Wekan grain.
Standalone Wekan only has password auth currently, there is work in progress to add
[oauth2](https://github.com/wekan/wekan/pull/1578), [Openid](https://github.com/wekan/wekan/issues/538),
[LDAP](https://github.com/wekan/wekan/issues/119) etc. If you need more login security for Standalone Wekan now,
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
like for example [AWS WAF](https://aws.amazon.com/waf/).
[All Wekan Platforms](https://github.com/wekan/wekan/wiki/Platforms)
@@ -106,7 +106,7 @@ a security issue, we'd like to know about it, and also how to fix it:
Typical already known or "no impact" bugs such as:
- Brute force password guessign. Currently there is
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release).
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v080-2018-04-04-wekan-release).
- Security issues related to that Wekan uses Meteor 1.6.0.1 related packages, and upgrading to newer
Meteor 1.6.1 is complicated process that requires lots of changes to many dependency packages.
Upgrading [has been tried many times, spending a lot of time](https://github.com/meteor/meteor/issues/9609)
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v5.35.0"
appVersion: "v5.64.0"
files:
userUploads:
- README.md
+20 -3
View File
@@ -21,6 +21,22 @@ template(name="editOrDeleteComment")
= ' - '
a.js-delete-comment {{_ "delete"}}
template(name="commentReactions")
.reactions
each reaction in reactions
span.reaction(class="{{#if isSelected reaction.userIds}}selected{{/if}}" data-codepoint="#{reaction.reactionCodepoint}" title="{{userNames reaction.userIds}}")
span.reaction-codepoint !{reaction.reactionCodepoint}
span.reaction-count #{reaction.userIds.length}
if (currentUser.isBoardMember)
a.open-comment-reaction-popup(title="{{_ 'addReactionPopup-title'}}")
i.fa.fa-smile-o
i.fa.fa-plus
template(name="addReactionPopup")
.reactions-popup
each codepoint in codepoints
span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint}
template(name="activity")
.activity
+userAvatar(userId=activity.user._id)
@@ -124,6 +140,7 @@ template(name="activity")
.activity-comment
+viewer
= activity.comment.text
+commentReactions(reactions=activity.comment.reactions commentId=activity.comment._id)
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
if($eq currentUser._id activity.comment.userId)
+editOrDeleteComment
@@ -150,20 +167,20 @@ template(name="activity")
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
if($eq activity.activityType 'a-endAt')
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
if($eq mode 'board')
if($eq activity.activityType 'a-receivedAt')
| {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}.
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
+57 -1
View File
@@ -113,8 +113,10 @@ BlazeComponent.extendComponent({
).getLabelById(lastLabelId);
if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) {
return lastLabel.color;
} else {
} else if (lastLabel.name !== undefined && lastLabel.name !== '') {
return lastLabel.name;
} else {
return null;
}
},
@@ -240,6 +242,60 @@ Template.activity.helpers({
},
});
Template.commentReactions.events({
'click .reaction'(event) {
if (Meteor.user().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
cardComment.toggleReaction(codepoint);
}
},
'click .open-comment-reaction-popup': Popup.open('addReaction'),
})
Template.addReactionPopup.events({
'click .add-comment-reaction'(event) {
if (Meteor.user().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
cardComment.toggleReaction(codepoint);
}
Popup.close();
},
})
Template.addReactionPopup.helpers({
codepoints() {
// Starting set of unicode codepoints as comment reactions
return [
'&#128077;',
'&#128078;',
'&#128064;',
'&#9989;',
'&#10060;',
'&#128591;',
'&#128079;',
'&#127881;',
'&#128640;',
'&#128522;',
'&#129300;',
'&#128532;'];
}
})
Template.commentReactions.helpers({
isSelected(userIds) {
return userIds.includes(Meteor.user()._id);
},
userNames(userIds) {
return Users.find({_id: {$in: userIds}})
.map(user => user.profile.fullname)
.join(', ');
}
})
function createCardLink(card) {
if (!card) return '';
return (
+54 -1
View File
@@ -5,6 +5,20 @@
display: flex
justify-content:space-between
.reactions-popup
.add-comment-reaction
display: inline-block
cursor: pointer
border-radius: 5px
font-size: 22px
text-align: center
line-height: 30px
width: 40px
&:hover {
background-color: #b0c4de
}
.activities
clear: both
@@ -18,7 +32,7 @@
height: @width
.activity-member
font-weight: 700
font-weight: 700
.activity-desc
word-wrap: break-word
@@ -39,6 +53,45 @@
margin-top: 5px
padding: 5px
.reactions
display: flex
margin-top: 5px
gap: 5px
.open-comment-reaction-popup
display: flex
align-items: center
text-decoration: none
height: 24px;
i.fa.fa-smile-o
font-size: 17px
font-weight: 500
margin-left: 2px
i.fa.fa-plus
font-size: 8px;
margin-top: -7px;
margin-left: 1px;
.reaction
cursor: pointer
border: 1px solid grey
border-radius: 15px
display: flex
padding: 2px 5px
&.selected {
background-color: #b0c4de
}
&:hover {
background-color: #b0c4de
}
.reaction-count
font-size: 12px
.activity-checklist
display: block
border-radius: 3px
+23 -20
View File
@@ -13,26 +13,29 @@ template(name="board")
+spinner
template(name="boardBody")
.board-wrapper(class=currentBoard.colorClass)
+sidebar
.board-canvas.js-swimlanes(
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
if showOverlay.get
.board-overlay
if currentBoard.isTemplatesBoard
each currentBoard.swimlanes
+swimlane(this)
else if isViewSwimlanes
each currentBoard.swimlanes
+swimlane(this)
else if isViewLists
+listsGroup(currentBoard)
else if isViewCalendar
+calendarView
else
+listsGroup(currentBoard)
if notDisplayThisBoard
| {{_ 'tableVisibilityMode-allowPrivateOnly'}}
else
.board-wrapper(class=currentBoard.colorClass)
+sidebar
.board-canvas.js-swimlanes(
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
if showOverlay.get
.board-overlay
if currentBoard.isTemplatesBoard
each currentBoard.swimlanes
+swimlane(this)
else if isViewSwimlanes
each currentBoard.swimlanes
+swimlane(this)
else if isViewLists
+listsGroup(currentBoard)
else if isViewCalendar
+calendarView
else
+listsGroup(currentBoard)
template(name="calendarView")
if isViewCalendar
+12
View File
@@ -33,6 +33,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('tableVisibilityModeSettings');
this.showOverlay = new ReactiveVar(false);
this.draggingActive = new ReactiveVar(false);
this._isDragging = false;
@@ -235,6 +236,16 @@ BlazeComponent.extendComponent({
}
},
notDisplayThisBoard(){
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
let currentBoard = Boards.findOne(Session.get('currentBoard'));
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue && currentBoard.permission == 'public'){
return true;
}
return false;
},
isViewSwimlanes() {
currentUser = Meteor.user();
if (currentUser) {
@@ -325,6 +336,7 @@ BlazeComponent.extendComponent({
defaultView: 'agendaDay',
editable: true,
timezone: 'local',
weekNumbers: true,
header: {
left: 'title today prev,next',
center:
+57 -18
View File
@@ -766,7 +766,15 @@ setBoardClear(color1,color2)
.toggle-label:after, .board-color-modern .toggle-switch:checked~.toggle-label:after
background-color: #819C5D !important
button, input:not([type=file]), select, textarea
border-radius: 2px
/* Headers */
&#header
background-color: #262626
border-bottom: 1px solid #555555;
border-top: 1px solid #555555;
&#header-quick-access, .background-box, #header
background-color: #333333
@@ -774,14 +782,16 @@ setBoardClear(color1,color2)
padding: 4px
font-size: 14px
&#header-quick-access .allBoards
padding: 5px 10px 0 10px;
&#header-quick-access ul.header-quick-access-list
margin: -5px 0 -5px 0
&#header #header-main-bar
height: 30px
padding-top: 3px
padding-bottom: 3px
&#header
box-shadow: 0 6px 6px -6px rgba(0,0,0,0.8)
&#header-quick-access ul
overflow: visible
@@ -812,18 +822,23 @@ setBoardClear(color1,color2)
/* Content */
.board-canvas
background: #2a2a2a
padding: 10px 10px 0
/* Swimlanes */
.swimlane .swimlane-header-wrap
background-color: #666666
background-color: #494949
color: #cccccc
padding: 4px 0
margin-bottom: 10px
.swimlane .swimlane-header-wrap .swimlane-header
font-family: Poppins
.swimlane .swimlane-header-wrap .swimlane-header-menu
padding: 6px
font-size: 16px
.swimlane .swimlane-header-wrap .swimlane-header-plus-icon
font-size: 16px
.swimlane
background: #2a2a2a
line-height: 15px
@@ -836,13 +851,19 @@ setBoardClear(color1,color2)
border: 0px solid #666666
flex: 0 0 265px;
.swimlane .list:first-child
margin-left: 0
.swimlane .list:nth-child(even)
background: #5f5f5f
.swimlane .list:nth-child(odd) .list-header
background: #3b3b3b
.list-header
background: #333333
padding-top: 10px
border-bottom: 6px solid #333333
padding: 10px
border-bottom: 0
.list-header .viewer
padding-left: 10px
@@ -852,7 +873,11 @@ setBoardClear(color1,color2)
color: #eeeeee
.list-header .list-header-menu
padding-top: 17px
padding: 10px
top: 0
.list-header .list-header-plus-icon
color: #a6a6a6
.list-body
scrollbar-width: thin
@@ -883,35 +908,43 @@ setBoardClear(color1,color2)
color: #ffffff
/* Mini Card */
.minicard-wrapper
margin-bottom: 12px
.minicard
background-color: #444444
color: #cccccc
border-radius: 2px
font-size: 0.9em
font-size: 0.95em
padding: 10px
box-shadow: 0 4px 3px -3px rgba(0,0,0,0.8)
border-bottom: 1px solid #666666
.minicard:hover
background-color: #555555 !important
background-color: #494949 !important
.minicard .minicard-labels
margin-bottom: 4px
.minicard .card-label
font-size: 11px
font-weight: 400
padding: 2px 6px 0
padding: 1px 6px 0
border-radius: 2px
.minicard .badges
color: #bbbbbb
.minicard .date
margin-top: 7px
margin-top: 10px
font-size: 11px
.card-date
color: #555555
color: #444444
border-radius: 2px
.card-date.almost-due
color: #666666
color: #444444
.minicard.minicard-composer textarea.minicard-composer-textarea:focus
background-color: #eeeeee
@@ -970,11 +1003,17 @@ setBoardClear(color1,color2)
.card-details .checklist-item
background-color: rgba(255,255,255,0.1)
padding: 2px 8px
border-radius: 3px
padding: 4px 8px
border-radius: 2px
font-size: 13px
margin-top: 5px
.card-details .checklist-item:hover
background-color: rgba(255,255,255,0.2)
.card-details .checklist-item .item-title .viewer p
max-width: auto
.card-details .check-box.materialCheckBox
border-color: #ffffff
+17 -10
View File
@@ -1,8 +1,11 @@
template(name="boardHeaderBar")
h1.header-board-menu
with currentBoard
+viewer
= title
if $eq title 'Templates'
| {{_ 'templates'}}
else
+viewer
= title
.board-header-btns.left
unless isMiniScreen
@@ -144,14 +147,15 @@ template(name="boardVisibilityList")
if visibilityCheck
i.fa.fa-check
span.sub-name {{_ 'private-desc'}}
li
with "public"
a.js-select-visibility
i.fa.fa-globe.colorful
| {{_ 'public'}}
if visibilityCheck
i.fa.fa-check
span.sub-name {{_ 'public-desc'}}
if notAllowPrivateVisibilityOnly
li
with "public"
a.js-select-visibility
i.fa.fa-globe.colorful
| {{_ 'public'}}
if visibilityCheck
i.fa.fa-check
span.sub-name {{_ 'public-desc'}}
template(name="boardChangeVisibilityPopup")
+boardVisibilityList
@@ -225,6 +229,9 @@ template(name="createBoard")
= " "
| {{{_ 'board-private-info'}}}
a.js-change-visibility {{_ 'change'}}.
//a.flex.js-toggle-add-template-container
// .materialCheckBox#add-template-container
// span {{_ 'add-template-container'}}
input.primary.wide(type="submit" value="{{_ 'create'}}")
span.quiet
| {{_ 'or'}}
+76 -12
View File
@@ -194,6 +194,11 @@ const CreateBoard = BlazeComponent.extendComponent({
this.visibilityMenuIsOpen = new ReactiveVar(false);
this.visibility = new ReactiveVar('private');
this.boardId = new ReactiveVar('');
Meteor.subscribe('tableVisibilityModeSettings');
},
notAllowPrivateVisibilityOnly(){
return !TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
},
visibilityCheck() {
@@ -209,24 +214,79 @@ const CreateBoard = BlazeComponent.extendComponent({
this.visibilityMenuIsOpen.set(!this.visibilityMenuIsOpen.get());
},
toggleAddTemplateContainer() {
$('#add-template-container').toggleClass('is-checked');
},
onSubmit(event) {
event.preventDefault();
const title = this.find('.js-new-board-title').value;
const visibility = this.visibility.get();
this.boardId.set(
Boards.insert({
title,
permission: visibility,
}),
);
const addTemplateContainer = $('#add-template-container.is-checked').length > 0;
if (addTemplateContainer) {
//const templateContainerId = Meteor.call('setCreateTemplateContainer');
//Utils.goBoardId(templateContainerId);
//alert('niinku template ' + Meteor.call('setCreateTemplateContainer'));
Swimlanes.insert({
title: 'Default',
boardId: this.boardId.get(),
});
this.boardId.set(
Boards.insert({
// title: TAPi18n.__('templates'),
title: title,
permission: 'private',
type: 'template-container',
}),
);
Utils.goBoardId(this.boardId.get());
// Insert the card templates swimlane
Swimlanes.insert({
// title: TAPi18n.__('card-templates-swimlane'),
title: 'Card Templates',
boardId: this.boardId.get(),
sort: 1,
type: 'template-container',
}),
// Insert the list templates swimlane
Swimlanes.insert(
{
// title: TAPi18n.__('list-templates-swimlane'),
title: 'List Templates',
boardId: this.boardId.get(),
sort: 2,
type: 'template-container',
},
);
// Insert the board templates swimlane
Swimlanes.insert(
{
//title: TAPi18n.__('board-templates-swimlane'),
title: 'Board Templates',
boardId: this.boardId.get(),
sort: 3,
type: 'template-container',
},
);
Utils.goBoardId(this.boardId.get());
} else {
const visibility = this.visibility.get();
this.boardId.set(
Boards.insert({
title,
permission: visibility,
}),
);
Swimlanes.insert({
title: 'Default',
boardId: this.boardId.get(),
});
Utils.goBoardId(this.boardId.get());
}
},
events() {
@@ -240,6 +300,7 @@ const CreateBoard = BlazeComponent.extendComponent({
submit: this.onSubmit,
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-board-template': Popup.open('searchElement'),
'click .js-toggle-add-template-container': this.toggleAddTemplateContainer,
},
];
},
@@ -254,6 +315,9 @@ const CreateBoard = BlazeComponent.extendComponent({
}.register('headerBarCreateBoardPopup'));
BlazeComponent.extendComponent({
notAllowPrivateVisibilityOnly(){
return !TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
},
visibilityCheck() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return this.currentData() === currentBoard.permission;
+106 -42
View File
@@ -1,11 +1,32 @@
template(name="boardList")
.wrapper
ul.AllBoardTeamsOrgs
li.AllBoardTeams
if userHasTeams
select.js-AllBoardTeams#jsAllBoardTeams("multiple")
option(value="-1") {{_ 'teams'}} :
each teamsDatas
option(value="{{teamId}}") {{_ teamDisplayName}}
li.AllBoardOrgs
if userHasOrgs
select.js-AllBoardOrgs#jsAllBoardOrgs("multiple")
option(value="-1") {{_ 'organizations'}} :
each orgsDatas
option(value="{{orgId}}") {{_ orgDisplayName}}
li.AllBoardBtns
div.AllBoardButtonsContainer
if userHasOrgsOrTeams
i.fa.fa-filter
input#filterBtn(type="button" value="{{_ 'filter'}}")
input#resetBtn(type="button" value="{{_ 'filter-clear'}}")
ul.board-list.clearfix.js-boards
li.js-add-board
a.board-list-item.label(title="{{_ 'add-board'}}")
| {{_ 'add-board'}}
each boards
li(class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
li(class="{{_id}}" class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
if isInvited
.board-list-item
span.details
@@ -17,47 +38,90 @@ template(name="boardList")
button.js-accept-invite.primary {{_ 'accept'}}
button.js-decline-invite {{_ 'decline'}}
else
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
span.details
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
+viewer
= title
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
p.board-list-item-desc
+viewer
= description
if hasSpentTimeCards
i.fa.js-has-spenttime-cards(
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
if isMiniScreen
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
unless isMiniScreen
if isSandstorm
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if isAdministrable
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if currentUser.isAdmin
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
if $eq type "template-container"
a.js-open-board.template-container.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
span.details
span.board-list-item-name(title="{{_ 'template-container'}}")
+viewer
= title
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
p.board-list-item-desc
+viewer
= description
if hasSpentTimeCards
i.fa.js-has-spenttime-cards(
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
if isMiniScreen
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
unless isMiniScreen
if isSandstorm
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if isAdministrable
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if currentUser.isAdmin
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
span.details
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
+viewer
= title
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
p.board-list-item-desc
+viewer
= description
if hasSpentTimeCards
i.fa.js-has-spenttime-cards(
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
if isMiniScreen
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
unless isMiniScreen
if isSandstorm
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if isAdministrable
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if currentUser.isAdmin
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
template(name="boardListHeaderBar")
h1 {{_ title }}
+163 -6
View File
@@ -22,6 +22,7 @@ Template.boardListHeaderBar.helpers({
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('setting');
Meteor.subscribe('tableVisibilityModeSettings');
let currUser = Meteor.user();
let userLanguage;
if(currUser && currUser.profile){
@@ -84,15 +85,103 @@ BlazeComponent.extendComponent({
}
});
},
userHasTeams(){
if(Meteor.user().teams && Meteor.user().teams.length > 0)
return true;
else
return false;
},
teamsDatas() {
if(Meteor.user().teams)
return Meteor.user().teams;
else
return [];
},
userHasOrgs(){
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
return true;
else
return false;
},
orgsDatas() {
if(Meteor.user().orgs)
return Meteor.user().orgs;
else
return [];
},
userHasOrgsOrTeams(){
let boolUserHasOrgs;
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
boolUserHasOrgs = true;
else
boolUserHasOrgs = false;
let boolUserHasTeams;
if(Meteor.user().teams && Meteor.user().teams.length > 0)
boolUserHasTeams = true;
else
boolUserHasTeams = false;
return (boolUserHasOrgs || boolUserHasTeams);
},
boards() {
const query = {
archived: false,
type: 'board',
let query = {
//archived: false,
////type: { $in: ['board','template-container'] },
//type: 'board',
$and: [
{ archived: false },
{ type: 'board' },
{ $or:[] }
]
};
if (FlowRouter.getRouteName() === 'home')
query['members.userId'] = Meteor.userId();
else query.permission = 'public';
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
if (FlowRouter.getRouteName() === 'home'){
query.$and[2].$or.push({'members.userId': Meteor.userId()});
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue){
query.$and.push({'permission': 'private'});
}
const currUser = Users.findOne(Meteor.userId());
// const currUser = Users.findOne(Meteor.userId(), {
// fields: {
// orgs: 1,
// teams: 1,
// },
// });
let orgIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
if(orgIdsUserBelongs && orgIdsUserBelongs != ''){
let orgsIds = orgIdsUserBelongs.split(',');
// for(let i = 0; i < orgsIds.length; i++){
// query.$and[2].$or.push({'orgs.orgId': orgsIds[i]});
// }
//query.$and[2].$or.push({'orgs': {$elemMatch : {orgId: orgsIds[0]}}});
query.$and[2].$or.push({'orgs.orgId': {$in : orgsIds}});
}
let teamIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
if(teamIdsUserBelongs && teamIdsUserBelongs != ''){
let teamsIds = teamIdsUserBelongs.split(',');
// for(let i = 0; i < teamsIds.length; i++){
// query.$or[2].$or.push({'teams.teamId': teamsIds[i]});
// }
//query.$and[2].$or.push({'teams': { $elemMatch : {teamId: teamsIds[0]}}});
query.$and[2].$or.push({'teams.teamId': {$in : teamsIds}});
}
}
else if(allowPrivateVisibilityOnly !== undefined && !allowPrivateVisibilityOnly.booleanValue){
query = {
archived: false,
//type: { $in: ['board','template-container'] },
type: 'board',
permission: 'public',
};
}
return Boards.find(query, {
sort: { sort: 1 /* boards default sorting */ },
@@ -169,6 +258,74 @@ BlazeComponent.extendComponent({
}
});
},
'click #resetBtn'(event){
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
for(let i=0; i < allBoards.length; i++){
currBoard = allBoards[i];
currBoard.style.display = "block";
}
},
'click #filterBtn'(event) {
event.preventDefault();
let selectedTeams = document.querySelectorAll('#jsAllBoardTeams option:checked');
let selectedTeamsValues = Array.from(selectedTeams).map(function(elt){return elt.value});
let index = selectedTeamsValues.indexOf("-1");
if (index > -1) {
selectedTeamsValues.splice(index, 1);
}
let selectedOrgs = document.querySelectorAll('#jsAllBoardOrgs option:checked');
let selectedOrgsValues = Array.from(selectedOrgs).map(function(elt){return elt.value});
index = selectedOrgsValues.indexOf("-1");
if (index > -1) {
selectedOrgsValues.splice(index, 1);
}
if(selectedTeamsValues.length > 0 || selectedOrgsValues.length > 0){
const query = {
$and: [
{ archived: false },
{ type: 'board' },
{ $or:[] }
]
};
if(selectedTeamsValues.length > 0)
{
query.$and[2].$or.push({'teams.teamId': {$in : selectedTeamsValues}});
}
if(selectedOrgsValues.length > 0)
{
query.$and[2].$or.push({'orgs.orgId': {$in : selectedOrgsValues}});
}
let filteredBoards = Boards.find(query, {}).fetch();
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
if(filteredBoards.length > 0){
let currBoardId;
let found;
for(let i=0; i < allBoards.length; i++){
currBoard = allBoards[i];
currBoardId = currBoard.classList[0];
found = filteredBoards.find(function(board){
return board._id == currBoardId;
});
if(found !== undefined)
currBoard.style.display = "block";
else
currBoard.style.display = "none";
}
}
else{
for(let i=0; i < allBoards.length; i++){
currBoard = allBoards[i];
currBoard.style.display = "none";
}
}
}
},
},
];
},
+25
View File
@@ -45,6 +45,9 @@ $spaceBetweenTiles = 16px
text-decoration: none
word-wrap: break-word
&.template-container
border: 4px solid #fff
&.tile
background-size: auto
background-repeat: repeat
@@ -226,3 +229,25 @@ $spaceBetweenTiles = 16px
transform: translateY(-50%)
right: 10px
font-size: 24px
.AllBoardTeamsOrgs
list-style-type: none;
overflow: hidden;
.AllBoardTeams,.AllBoardOrgs,.AllBoardBtns
float: left;
.js-AllBoardOrgs
margin-left: 16px;
.AllBoardTeams
margin-left : 16px;
.AllBoardButtonsContainer
margin: 16px;
#filterBtn,#resetBtn
display: inline;
.js-board
display: block;
+12
View File
@@ -26,6 +26,18 @@ template(name="attachmentsGalery")
if isUploaded
if isImage
img.attachment-thumbnail-img(src="{{url}}")
else if($eq extension 'mp3')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="audio/mpeg")
else if($eq extension 'ogg')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/ogg")
else if($eq extension 'webm')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/webm")
else if($eq extension 'mp4')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/mp4")
else
span.attachment-thumbnail-ext= extension
else
+1 -1
View File
@@ -9,7 +9,7 @@
margin: 10px 1% 0
text-align: center
border-radius: 3px
overflow: hidden
overflow: auto
background: darken(white, 7%)
min-height: 120px
+15 -11
View File
@@ -79,18 +79,22 @@ template(name="cardCustomField-currency")
template(name="cardCustomField-date")
if canModifyCard
a.js-edit-date(title="{{showTitle}}" class="{{classes}}")
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
else
| {{_ 'edit'}}
else
a.js-edit-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
else
| {{_ 'edit'}}
else
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
template(name="cardCustomField-dropdown")
if canModifyCard
@@ -149,6 +149,10 @@ CardCustomField.register('cardCustomField');
});
}
showWeek() {
return this.date.get().week().toString();
}
showDate() {
// this will start working once mquandalle:moment
// is updated to at least moment.js 2.10.5
+9 -3
View File
@@ -1,14 +1,20 @@
template(name="dateBadge")
if canModifyCard
a.js-edit-date.card-date(title="{{showTitle}}" class="{{classes}}")
a.js-edit-date.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
else
a.card-date(title="{{showTitle}}" class="{{classes}}")
a.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
template(name="dateCustomField")
a(title="{{showTitle}}" class="{{classes}}")
a(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
+20 -3
View File
@@ -115,6 +115,10 @@ const CardDate = BlazeComponent.extendComponent({
}, 60000);
},
showWeek() {
return this.date.get().week().toString();
},
showDate() {
// this will start working once mquandalle:moment
// is updated to at least moment.js 2.10.5
@@ -284,12 +288,25 @@ class CardCustomFieldDate extends CardDate {
});
}
classes() {
return 'customfield-date';
showWeek() {
return this.date.get().week().toString();
}
showDate() {
// this will start working once mquandalle:moment
// is updated to at least moment.js 2.10.5
// until then, the date is displayed in the "L" format
return this.date.get().calendar(null, {
sameElse: 'llll',
});
}
showTitle() {
return '';
return `${this.date.get().format('LLLL')}`;
}
classes() {
return 'customfield-date';
}
events() {
+23 -3
View File
@@ -25,6 +25,9 @@ template(name="cardDetails")
h2.card-details-title.js-card-title(
class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
+viewer
if currentBoard.allowsCardNumber
span.card-number
| ##{getCardNumber}
= getTitle
if isWatching
i.card-details-watch.fa.fa-eye
@@ -224,8 +227,17 @@ template(name="cardDetails")
//.card-details-items
if customFieldsWD
hr
.material-toggle-switch(title="{{_ 'change'}} {{_ 'custom-fields'}} {{_ 'layout'}}")
if customFieldsGrid
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton" checked="checked")
else
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton")
label.toggle-label(for="toggleCustomFieldsGridButton")
unless customFieldsGrid
hr
each customFieldsWD
if customFieldsGrid
hr
.card-details-item.card-details-item-customfield
h3.card-details-item-title
i.fa.fa-list-alt
@@ -705,8 +717,9 @@ template(name="boardsAndLists")
button.primary.confirm.js-done {{_ 'done'}}
template(name="cardMembersPopup")
input.card-members-filter(type="text" placeholder="{{_ 'search'}}")
ul.pop-over-list.js-card-member-list
each board.activeMembers
each members
li.item(class="{{#if isCardMember}}active{{/if}}")
a.name.js-select-member(href="#")
+userAvatar(userId=user._id)
@@ -717,9 +730,10 @@ template(name="cardMembersPopup")
i.fa.fa-check
template(name="cardAssigneesPopup")
input.card-assignees-filter(type="text" placeholder="{{_ 'search'}}")
unless currentUser.isWorker
ul.pop-over-list.js-card-assignee-list
each board.activeMembers
each members
li.item(class="{{#if isCardAssignee}}active{{/if}}")
a.name.js-select-assignee(href="#")
+userAvatar(userId=user._id)
@@ -812,6 +826,12 @@ template(name="cardDeletePopup")
p {{_ "card-delete-suggest-archive"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
template(name="cardArchivePopup")
p {{_ "card-archive-pop"}}
unless archived
p {{_ "card-archive-suggest-cancel"}}
button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
template(name="deleteVotePopup")
p {{_ "vote-delete-pop"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
+136 -11
View File
@@ -43,6 +43,13 @@ BlazeComponent.extendComponent({
this.calculateNextPeak();
Meteor.subscribe('unsaved-edits');
// this.findUsersOptions = new ReactiveVar({});
// this.page = new ReactiveVar(1);
// this.autorun(() => {
// const limitUsers = this.page.get() * Number.MAX_SAFE_INTEGER;
// this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
// });
},
isWatching() {
@@ -54,6 +61,11 @@ BlazeComponent.extendComponent({
return Meteor.user().hasHiddenSystemMessages();
},
customFieldsGrid() {
return Meteor.user().hasCustomFieldsGrid();
},
cardMaximized() {
return Meteor.user().hasCardMaximized();
},
@@ -180,7 +192,7 @@ BlazeComponent.extendComponent({
integration,
'CardSelected',
params,
() => {},
() => { },
);
});
}
@@ -412,6 +424,9 @@ BlazeComponent.extendComponent({
'click #toggleButton'() {
Meteor.call('toggleSystemMessages');
},
'click #toggleCustomFieldsGridButton'() {
Meteor.call('toggleCustomFieldsGrid');
},
'click .js-maximize-card-details'() {
Meteor.call('toggleCardMaximized');
autosize($('.card-details'));
@@ -541,8 +556,8 @@ BlazeComponent.extendComponent({
}).register('exportCardPopup');
// only allow number input
Template.editCardSortOrderForm.onRendered(function() {
this.$('input').on("keypress paste", function(event) {
Template.editCardSortOrderForm.onRendered(function () {
this.$('input').on("keypress paste", function (event) {
let keyCode = event.keyCode;
let charCode = String.fromCharCode(keyCode);
let regex = new RegExp('[-0-9.]');
@@ -627,6 +642,7 @@ Template.cardDetailsActionsPopup.events({
'click .js-spent-time': Popup.open('editCardSpentTime'),
'click .js-move-card': Popup.open('moveCard'),
'click .js-copy-card': Popup.open('copyCard'),
'click .js-convert-checklist-item-to-card': Popup.open('convertChecklistItemToCard'),
'click .js-copy-checklist-cards': Popup.open('copyChecklistToManyCards'),
'click .js-set-card-color': Popup.open('setCardColor'),
'click .js-move-card-to-top'(event) {
@@ -647,11 +663,11 @@ Template.cardDetailsActionsPopup.events({
);
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
},
'click .js-archive'(event) {
event.preventDefault();
this.archive();
'click .js-archive': Popup.afterConfirm('cardArchive', function () {
Popup.close();
},
this.archive();
Utils.goBoardId(this.boardId);
}),
'click .js-more': Popup.open('cardMore'),
'click .js-toggle-watch-card'() {
const currentCard = this;
@@ -666,6 +682,64 @@ Template.editCardTitleForm.onRendered(function () {
autosize(this.$('.js-edit-card-title'));
});
Template.cardMembersPopup.onCreated(function () {
let currBoard = Boards.findOne(Session.get('currentBoard'));
let members = currBoard.activeMembers();
// let query = {
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
// };
// let boardTeamUsers = Users.find(query, {
// sort: { sort: 1 },
// });
// members = currBoard.activeMembers2(members, boardTeamUsers);
this.members = new ReactiveVar(members);
});
Template.cardMembersPopup.events({
'keyup .card-members-filter'(event) {
const members = filterMembers(event.target.value);
Template.instance().members.set(members);
}
});
Template.cardMembersPopup.helpers({
members() {
return Template.instance().members.get();
},
});
const filterMembers = (filterTerm) => {
let currBoard = Boards.findOne(Session.get('currentBoard'));
let members = currBoard.activeMembers();
// let query = {
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
// };
// let boardTeamUsers = Users.find(query, {
// sort: { sort: 1 },
// });
// members = currBoard.activeMembers2(members, boardTeamUsers);
if (filterTerm) {
members = members
.map(member => ({
member,
user: Users.findOne(member.userId)
}))
.filter(({ user }) =>
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
.map(({ member }) => member);
}
return members;
}
Template.editCardTitleForm.events({
'keydown .js-edit-card-title'(event) {
// If enter key was pressed, submit the data
@@ -791,6 +865,34 @@ Template.copyCardPopup.events({
},
});
Template.convertChecklistItemToCardPopup.events({
'click .js-done'() {
const card = Cards.findOne(Session.get('currentCard'));
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
const boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
const title = textarea.val().trim();
if (title) {
const _id = Cards.insert({
title: title,
listId: listId,
boardId: boardId,
swimlaneId: swimlaneId,
sort: 0,
});
Filter.addException(_id);
Popup.close();
}
},
});
Template.copyChecklistToManyCardsPopup.events({
'click .js-done'() {
const card = Cards.findOne(Session.get('currentCard'));
@@ -990,9 +1092,8 @@ BlazeComponent.extendComponent({
// https://github.com/wekan/wekan/issues/2785
const message = `${TAPi18n.__(
'delete-linked-card-before-this-card',
)} linkedId: ${
this._id
} at client/components/cards/cardDetails.js and https://github.com/wekan/wekan/issues/2785`;
)} linkedId: ${this._id
} at client/components/cards/cardDetails.js and https://github.com/wekan/wekan/issues/2785`;
alert(message);
}
Utils.goBoardId(this.boardId);
@@ -1297,7 +1398,6 @@ BlazeComponent.extendComponent({
Popup.close();
},
'click .js-remove-poker': Popup.afterConfirm('deletePoker', (event) => {
event.preventDefault();
this.currentCard.unsetPoker();
Popup.close();
}),
@@ -1561,6 +1661,23 @@ EscapeActions.register(
},
);
Template.cardAssigneesPopup.onCreated(function () {
let currBoard = Boards.findOne(Session.get('currentBoard'));
let members = currBoard.activeMembers();
// let query = {
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
// };
// let boardTeamUsers = Users.find(query, {
// sort: { sort: 1 },
// });
// members = currBoard.activeMembers2(members, boardTeamUsers);
this.members = new ReactiveVar(members);
});
Template.cardAssigneesPopup.events({
'click .js-select-assignee'(event) {
const card = Cards.findOne(Session.get('currentCard'));
@@ -1568,6 +1685,10 @@ Template.cardAssigneesPopup.events({
card.toggleAssignee(assigneeId);
event.preventDefault();
},
'keyup .card-assignees-filter'(event) {
const members = filterMembers(event.target.value);
Template.instance().members.set(members);
},
});
Template.cardAssigneesPopup.helpers({
@@ -1578,6 +1699,10 @@ Template.cardAssigneesPopup.helpers({
return _.contains(cardAssignees, this.userId);
},
members() {
return Template.instance().members.get();
},
user() {
return Users.findOne(this.userId);
},
+38 -32
View File
@@ -114,6 +114,12 @@ avatar-radius = 50%
background: darken(white, 7%)
border-bottom: 1px solid darken(white, 14%)
.card-number {
color: darken(white, 30%);
display: inline-block;
margin-right: 5px;
}
.close-card-details,
.maximize-card-details,
.minimize-card-details,
@@ -237,42 +243,42 @@ avatar-radius = 50%
.activities
padding-top: 10px
.card-details-maximized
padding: 0
flex-shrink: 0
flex-basis: calc(100% - 20px)
will-change: flex-basis
overflow-y: scroll
overflow-x: scroll
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 1000 !important
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
position: absolute
top: 0
left: 0
height: calc(100% - 20px)
width: calc(100% - 20px)
float: left
.card-details-left
@media screen and (min-width: 801px)
.card-details-maximized
padding: 0
flex-shrink: 0
flex-basis: calc(100% - 20px)
will-change: flex-basis
overflow-y: scroll
overflow-x: scroll
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 1000 !important
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
position: absolute
top: 0
left: 0
height: calc(100% - 20px)
width: calc(100% - 20px)
float: left
top: 60px
left: 20px
width: 47%
.card-details-right
position: absolute
float: right
top: 20px
left: 50%
.card-details-left
float: left
top: 60px
left: 20px
width: 47%
.card-details-header
width: 47%
.card-details-right
position: absolute
float: right
top: 20px
left: 50%
.card-details-header
width: 47%
input[type="text"].attachment-add-link-input
float: left
+32
View File
@@ -80,6 +80,9 @@ template(name="editChecklistItemForm")
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-checklist-item {{_ "delete"}}...
a.js-convert-checklist-item-to-card
i.fa.fa-copy
| {{_ 'convertChecklistItemToCardPopup-title'}}
template(name="checklistItems")
.checklist-items.js-checklist-items
@@ -110,3 +113,32 @@ template(name='checklistItemDetail')
.item-title(class="{{#if item.isFinished }}is-checked{{/if}}")
+viewer
= item.title
template(name="convertChecklistItemToCardPopup")
label(for='convert-checklist-item-to-card-title') {{_ 'title'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
= item.title
+boardsSwimlanesAndLists
template(name="boardsSwimlanesAndLists")
unless currentUser.isWorker
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each aBoardLists
option(value="{{_id}}") {{title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+46
View File
@@ -1,3 +1,7 @@
import Cards from '/models/cards';
import Boards from '/models/boards';
const subManager = new SubsManager();
const { calculateIndexData, capitalize } = Utils;
function initSorting(items) {
@@ -206,6 +210,7 @@ BlazeComponent.extendComponent({
'submit .js-edit-checklist-title': this.editChecklist,
'submit .js-add-checklist-item': this.addChecklistItem,
'submit .js-edit-checklist-item': this.editChecklistItem,
'click .js-convert-checklist-item-to-card': Popup.open('convertChecklistItemToCard'),
'click .js-delete-checklist-item': this.deleteItem,
'click .confirm-checklist-delete': this.deleteChecklist,
'focus .js-add-checklist-item': this.focusChecklistItem,
@@ -215,6 +220,47 @@ BlazeComponent.extendComponent({
},
}).register('checklists');
BlazeComponent.extendComponent({
onCreated() {
subManager.subscribe('board', Session.get('currentBoard'), false);
this.selectedBoardId = new ReactiveVar(Session.get('currentBoard'));
},
boards() {
return Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
_id: { $ne: Meteor.user().getTemplatesBoardId() },
},
{
sort: { sort: 1 /* boards default sorting */ },
},
);
},
swimlanes() {
const board = Boards.findOne(this.selectedBoardId.get());
return board.swimlanes();
},
aBoardLists() {
const board = Boards.findOne(this.selectedBoardId.get());
return board.lists();
},
events() {
return [
{
'change .js-select-boards'(event) {
this.selectedBoardId.set($(event.currentTarget).val());
subManager.subscribe('board', this.selectedBoardId.get(), false);
},
},
];
},
}).register('boardsSwimlanesAndLists');
Template.checklists.helpers({
hideCheckedItems() {
const currentUser = Meteor.user();
+2 -1
View File
@@ -159,7 +159,8 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
padding-top: 2px
padding-right: 10px;
.js-delete-checklist-item
.js-delete-checklist-item,
.js-convert-checklist-item-to-card
margin: 0 0 0.5em 1.33em
@extends .delete-text
padding: 12px 0 0 0
+3
View File
@@ -37,6 +37,9 @@ template(name="minicard")
if getArchived
span.linked-icon.linked-archived.fa.fa-archive
+viewer
if currentBoard.allowsCardNumber
span.card-number
| ##{getCardNumber}
= getTitle
if $eq 'subtext-with-full-path' currentBoard.presentParentTask
.parent-subtext
+4
View File
@@ -114,6 +114,10 @@
font-size:20px;
color: #ccc;
.minicard-title
.card-number
color: darken(white, 30%);
display: inline-block;
margin-right: 5px;
p:last-child
margin-bottom: 0
.viewer
+3
View File
@@ -37,6 +37,8 @@ BlazeComponent.extendComponent({
? targetBoard.getDefaultSwimline()._id
: targetSwimlane._id;
const nextCardNumber = targetBoard.getNextCardNumber();
if (title) {
const _id = Cards.insert({
title,
@@ -49,6 +51,7 @@ BlazeComponent.extendComponent({
sort: sortIndex,
swimlaneId,
type: 'cardType-card',
cardNumber: nextCardNumber
});
// In case the filter is active we need to add the newly inserted card in
+11
View File
@@ -4,6 +4,17 @@ template(name="listBody")
if cards.count
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
ul.sidebar-list
each customFieldsSum
li
+viewer
= name
if $eq customFieldsSum.type "number"
+viewer
= value
if $eq customFieldsSum.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(value)
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
+24 -14
View File
@@ -13,6 +13,13 @@ BlazeComponent.extendComponent({
return [];
},
customFieldsSum() {
return CustomFields.find({
boardIds: { $in: [Session.get('currentBoard')] },
showSumAtTopOfList: true,
});
},
openForm(options) {
options = options || {};
options.position = options.position || 'top';
@@ -81,7 +88,9 @@ BlazeComponent.extendComponent({
Utils.boardView() === 'board-view-cal' ||
!Utils.boardView()
)
swimlaneId = board.getDefaultSwimline()._id;
swimlaneId = board.getDefaultSwimline()._id;
const nextCardNumber = board.getNextCardNumber();
const _id = Cards.insert({
title,
@@ -93,6 +102,7 @@ BlazeComponent.extendComponent({
sort: sortIndex,
swimlaneId,
type: cardType,
cardNumber: nextCardNumber,
linkedId,
});
@@ -241,7 +251,7 @@ BlazeComponent.extendComponent({
Boards.findOne(currentBoardId)
.customFields()
.fetch(),
function(field) {
function (field) {
if (field.automaticallyOnCard || field.alwaysOnCard)
arr.push({ _id: field._id, value: null });
},
@@ -552,7 +562,7 @@ BlazeComponent.extendComponent({
board = Boards.findOne((Meteor.user().profile || {}).templatesBoardId);
} else {
// Prefetch first non-current board id
board = Boards.findOne({
board = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
_id: {
@@ -750,17 +760,17 @@ BlazeComponent.extendComponent({
checkIdleTime() {
return window.requestIdleCallback ||
function(handler) {
const startTime = Date.now();
return setTimeout(function() {
handler({
didTimeout: false,
timeRemaining() {
return Math.max(0, 50.0 - (Date.now() - startTime));
},
});
}, 1);
};
function (handler) {
const startTime = Date.now();
return setTimeout(function () {
handler({
didTimeout: false,
timeRemaining() {
return Math.max(0, 50.0 - (Date.now() - startTime));
},
});
}, 1);
};
}
updateList() {
+1 -1
View File
@@ -20,7 +20,7 @@ template(name="listHeader")
if showCardsCountForList cards.count
|&nbsp;
span(class="cardCount") {{cardsCount}} {{_ 'cards-count'}}
span(class="cardCount") {{cardsCount}} {{cardsCountForListIsOne cards.count}}
if isMiniScreen
if currentList
if isWatching
+8
View File
@@ -85,6 +85,14 @@ BlazeComponent.extendComponent({
return limit >= 0 && count >= limit;
},
cardsCountForListIsOne(count) {
if (count === 1) {
return TAPi18n.__('cards-count-one');
} else {
return TAPi18n.__('cards-count');
}
},
events() {
return [
{
+12 -5
View File
@@ -1,3 +1,9 @@
const specialHandles = [
{userId: 'board_members', username: 'board_members'},
{userId: 'card_members', username: 'card_members'}
];
const specialHandleNames = specialHandles.map(m => m.username);
Template.editor.onRendered(() => {
const textareaSelector = 'textarea';
const mentions = [
@@ -7,13 +13,14 @@ Template.editor.onRendered(() => {
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
callback(
_.union(
currentBoard
.activeMembers()
.map(member => {
const username = Users.findOne(member.userId).username;
return username.includes(term) ? username : null;
})
.filter(Boolean),
.filter(Boolean), [...specialHandleNames])
);
},
template(value) {
@@ -50,7 +57,7 @@ Template.editor.onRendered(() => {
['table', ['table']],
//['insert', ['link', 'picture', 'video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled
['insert', ['link']], //, 'picture']], // modal popup has issue somehow :(
['view', ['fullscreen', 'help']],
['view', ['fullscreen', 'codeview', 'help']],
];
const cleanPastedHTML = function(input) {
const badTags = [
@@ -229,7 +236,7 @@ Template.editor.onRendered(() => {
// (and multiplies by pasting more) by changing paste "p" to "br".
// Fixes https://github.com/wekan/wekan/2890 .
// == Fix Start ==
//someNote.execCommand('defaultParagraphSeparator', false, 'br');
someNote.execCommand('defaultParagraphSeparator', false, 'br');
// == Fix End ==
const original = someNote.summernote('code');
const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML.
@@ -323,13 +330,13 @@ Blaze.Template.registerHelper(
return HTML.Raw(
DOMPurify.sanitize(content, { ALLOW_UNKNOWN_PROTOCOLS: true }),
);
const knowedUsers = currentBoard.members.map(member => {
const knowedUsers = _.union(currentBoard.members.map(member => {
const u = Users.findOne(member.userId);
if (u) {
member.username = u.username;
}
return member;
});
}), [...specialHandles]);
const mentionRegex = /\B@([\w.]*)/gi;
let currentMention;
+33 -31
View File
@@ -158,40 +158,42 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
['# ', 'globalSearch-instructions-heading'],
['\n', 'globalSearch-instructions-description'],
['\n\n', 'globalSearch-instructions-operators'],
['\n* ', 'globalSearch-instructions-operator-board'],
['\n* ', 'globalSearch-instructions-operator-list'],
['\n* ', 'globalSearch-instructions-operator-swimlane'],
['\n* ', 'globalSearch-instructions-operator-comment'],
['\n* ', 'globalSearch-instructions-operator-label'],
['\n* ', 'globalSearch-instructions-operator-hash'],
['\n* ', 'globalSearch-instructions-operator-user'],
['\n* ', 'globalSearch-instructions-operator-at'],
['\n* ', 'globalSearch-instructions-operator-member'],
['\n* ', 'globalSearch-instructions-operator-assignee'],
['\n* ', 'globalSearch-instructions-operator-creator'],
['\n* ', 'globalSearch-instructions-operator-due'],
['\n* ', 'globalSearch-instructions-operator-created'],
['\n* ', 'globalSearch-instructions-operator-modified'],
['\n* ', 'globalSearch-instructions-operator-status'],
['\n * ', 'globalSearch-instructions-status-archived'],
['\n * ', 'globalSearch-instructions-status-public'],
['\n * ', 'globalSearch-instructions-status-private'],
['\n * ', 'globalSearch-instructions-status-all'],
['\n * ', 'globalSearch-instructions-status-ended'],
['\n* ', 'globalSearch-instructions-operator-has'],
['\n* ', 'globalSearch-instructions-operator-sort'],
['\n* ', 'globalSearch-instructions-operator-limit'],
['\n- ', 'globalSearch-instructions-operator-board'],
['\n- ', 'globalSearch-instructions-operator-list'],
['\n- ', 'globalSearch-instructions-operator-swimlane'],
['\n- ', 'globalSearch-instructions-operator-comment'],
['\n- ', 'globalSearch-instructions-operator-label'],
['\n- ', 'globalSearch-instructions-operator-hash'],
['\n- ', 'globalSearch-instructions-operator-user'],
['\n- ', 'globalSearch-instructions-operator-at'],
['\n- ', 'globalSearch-instructions-operator-member'],
['\n- ', 'globalSearch-instructions-operator-assignee'],
['\n- ', 'globalSearch-instructions-operator-creator'],
['\n- ', 'globalSearch-instructions-operator-due'],
['\n- ', 'globalSearch-instructions-operator-created'],
['\n- ', 'globalSearch-instructions-operator-modified'],
['\n- ', 'globalSearch-instructions-operator-status'],
['\n - ', 'globalSearch-instructions-status-archived'],
['\n - ', 'globalSearch-instructions-status-public'],
['\n - ', 'globalSearch-instructions-status-private'],
['\n - ', 'globalSearch-instructions-status-all'],
['\n - ', 'globalSearch-instructions-status-ended'],
['\n- ', 'globalSearch-instructions-operator-has'],
['\n- ', 'globalSearch-instructions-operator-sort'],
['\n- ', 'globalSearch-instructions-operator-limit'],
['\n## ', 'heading-notes'],
['\n* ', 'globalSearch-instructions-notes-1'],
['\n* ', 'globalSearch-instructions-notes-2'],
['\n* ', 'globalSearch-instructions-notes-3'],
['\n* ', 'globalSearch-instructions-notes-3-2'],
['\n* ', 'globalSearch-instructions-notes-4'],
['\n* ', 'globalSearch-instructions-notes-5'],
['\n- ', 'globalSearch-instructions-notes-1'],
['\n- ', 'globalSearch-instructions-notes-2'],
['\n- ', 'globalSearch-instructions-notes-3'],
['\n- ', 'globalSearch-instructions-notes-3-2'],
['\n- ', 'globalSearch-instructions-notes-4'],
['\n- ', 'globalSearch-instructions-notes-5'],
].forEach(([prefix, instruction]) => {
text += `${prefix}${TAPi18n.__(instruction, tags)}`;
text += `${prefix}${TAPi18n.__(instruction, tags)}`
// Replace *<text>* with `<text>` so markdown shows correctly
.replace(/\*\</, '`<')
.replace(/\>\*/, '\>\`')
});
return text;
}
+10
View File
@@ -28,6 +28,12 @@ Template.userFormsLayout.onCreated(function() {
Meteor.subscribe('setting', {
onReady() {
templateInstance.currentSetting.set(Settings.findOne());
let currSetting = templateInstance.currentSetting.curValue;
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
oidcBtnElt.html(htmlvalue);
}
return this.stop();
},
});
@@ -86,12 +92,16 @@ Template.userFormsLayout.helpers({
name = 'Français (Belgique)';
} else if (lang.name === 'fr-CA') {
name = 'Français (Canada)';
} else if (lang.name === 'fr-CH') {
name = 'Français (Schweiz)';
} else if (lang.name === 'ig') {
name = 'Igbo';
} else if (lang.name === 'lv') {
name = 'Latviešu';
} else if (lang.name === 'latviešu valoda') {
name = 'Latviešu';
} else if (lang.name === 'en-IT') {
name = 'English (Italy)';
} else if (lang.name === 'Español') {
name = 'español';
} else if (lang.name === 'es_419') {
+3
View File
@@ -317,6 +317,9 @@ kbd
.grabbing
cursor: grabbing
.textcomplete-dropdown
z-index: 2000 !important;
// Implement a thiner close icon as suggested in
// https://github.com/FortAwesome/Font-Awesome/issues/1540#issuecomment-68689950
.fa.fa-times-thin:before
@@ -21,7 +21,7 @@ template(name='statistics')
table
tbody
tr
th Wekan {{_ 'info'}}
th WeKan ® {{_ 'info'}}
td {{statistics.version}}
tr
th {{_ 'Meteor_version'}}
+53 -10
View File
@@ -40,6 +40,11 @@ template(name="people")
| {{_ 'search'}}
.ext-box-right
span {{#unless isMiniScreen}}{{_ 'people-number'}}{{/unless}} #{peopleNumber}
.divAddOrRemoveTeam#divAddOrRemoveTeam
button#addOrRemoveTeam
i.fa.fa-edit
| {{_ 'add'}} / {{_ 'delete'}} {{_ 'teams'}}
.content-body
.side-menu
ul
@@ -97,9 +102,12 @@ template(name="teamGeneral")
+teamRow(teamId=team._id)
template(name="peopleGeneral")
#divAddOrRemoveTeamContainer
+modifyTeamsUsers
table
tbody
tr
th
th {{_ 'username'}}
th {{_ 'fullname'}}
th {{_ 'initials'}}
@@ -202,6 +210,12 @@ template(name="teamRow")
template(name="peopleRow")
tr
if userData.loginDisabled
td
input.selectUserChkBox(type="checkbox", disabled="disabled", id="{{userData._id}}")
else
td
input.selectUserChkBox(type="checkbox", id="{{userData._id}}")
if userData.loginDisabled
td.username <s>{{ userData.username }}</s>
else
@@ -342,7 +356,7 @@ template(name="editUserPopup")
input.js-profile-fullname(type="text" value=user.profile.fullname required)
label
| {{_ 'initials'}}
input.js-profile-initials(type="text" value=user.profile.initials required)
input.js-profile-initials(type="text" value=user.profile.initials)
label
| {{_ 'admin'}}
select.select-role.js-profile-isadmin
@@ -453,6 +467,24 @@ template(name="newTeamPopup")
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="modifyTeamsUsers")
label
| {{_ 'teams'}}
select.js-teamsUser#jsteamsUser
each value in teamsDatas
option(value="{{value._id}}") {{_ value.teamDisplayName}}
hr
label
| {{_ 'r-action'}}
.form-group.flex
input.wekan-form-control#addAction(type="radio" name="action" value="true" checked="checked")
span {{_ 'add'}}
input.wekan-form-control#deleteAction(type="radio" name="action" value="false")
span {{_ 'delete'}}
div.buttonsContainer
input.primary.wide#addTeamBtn(type="submit" value="{{_ 'save'}}")
input.primary.wide#cancelBtn(type="submit" value="{{_ 'cancel'}}")
template(name="newUserPopup")
form
//label.hide.userId(type="text" value=user._id)
@@ -469,7 +501,7 @@ template(name="newUserPopup")
input.js-profile-username(type="text" value="" required)
label
| {{_ 'initials'}}
input.js-profile-initials(type="text" value="" required)
input.js-profile-initials(type="text" value="")
label
| {{_ 'email'}}
span.error.hide.email-taken
@@ -531,6 +563,9 @@ template(name="settingsOrgPopup")
ul.pop-over-list
li
form
label#deleteOrgWarningMessage.hide
| {{_ 'delete-org-warning-message'}}
br
label
| {{_ 'delete-org-confirm-popup'}}
br
@@ -552,6 +587,9 @@ template(name="settingsTeamPopup")
ul.pop-over-list
li
form
label#deleteTeamWarningMessage.hide
| {{_ 'delete-team-warning-message'}}
br
label
| {{_ 'delete-team-confirm-popup'}}
br
@@ -565,15 +603,20 @@ template(name="settingsUserPopup")
a.impersonate-user
i.fa.fa-user
| {{_ 'impersonate-user'}}
//hr
//li
// form
// label.hide.userId(type="text" value=user._id)
// div.buttonsContainer
// input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
// Delete is not enabled yet, because it does leave empty user avatars
br
hr
li
form
label.hide.userId(type="text" value=user._id)
label
| {{_ 'delete-user-confirm-popup' }}
br
div.buttonsContainer
input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
// Delete is enabled, but there is still bug of leaving empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// empty users. So it is better to remove user from all boards before removing user.
// See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
+160 -23
View File
@@ -2,6 +2,7 @@ const orgsPerPage = 25;
const teamsPerPage = 25;
const usersPerPage = 25;
let userOrgsTeamsAction = ""; //poosible actions 'addOrg', 'addTeam', 'removeOrg' or 'removeTeam' when adding or modifying a user
let selectedUserChkBoxUserIds = [];
BlazeComponent.extendComponent({
mixins() {
@@ -81,6 +82,9 @@ BlazeComponent.extendComponent({
'click #searchButton'() {
this.filterPeople();
},
'click #addOrRemoveTeam'(){
document.getElementById("divAddOrRemoveTeamContainer").style.display = 'block';
},
'keydown #searchInput'(event) {
if (event.keyCode === 13 && !event.shiftKey) {
this.filterPeople();
@@ -385,11 +389,111 @@ BlazeComponent.extendComponent({
{
'click a.edit-user': Popup.open('editUser'),
'click a.more-settings-user': Popup.open('settingsUser'),
'click .selectUserChkBox': function(ev){
if(ev.currentTarget){
if(ev.currentTarget.checked){
if(!selectedUserChkBoxUserIds.includes(ev.currentTarget.id)){
selectedUserChkBoxUserIds.push(ev.currentTarget.id);
}
}
else{
if(selectedUserChkBoxUserIds.includes(ev.currentTarget.id)){
let index = selectedUserChkBoxUserIds.indexOf(ev.currentTarget.id);
if(index > -1)
selectedUserChkBoxUserIds.splice(index, 1);
}
}
}
if(selectedUserChkBoxUserIds.length > 0)
document.getElementById("divAddOrRemoveTeam").style.display = 'block';
else
document.getElementById("divAddOrRemoveTeam").style.display = 'none';
},
},
];
},
}).register('peopleRow');
BlazeComponent.extendComponent({
onCreated() {},
teamsDatas() {
return Team.find({}, {sort: { createdAt: -1 }});
},
events() {
return [
{
'click #cancelBtn': function(){
let selectedElt = document.getElementById("jsteamsUser");
document.getElementById("divAddOrRemoveTeamContainer").style.display = 'none';
},
'click #addTeamBtn': function(){
let selectedElt;
let selectedEltValue;
let selectedEltValueId;
let userTms = [];
let currentUser;
let currUserTeamIndex;
selectedElt = document.getElementById("jsteamsUser");
selectedEltValue = selectedElt.options[selectedElt.selectedIndex].text;
selectedEltValueId = selectedElt.options[selectedElt.selectedIndex].value;
if(document.getElementById('addAction').checked){
for(let i = 0; i < selectedUserChkBoxUserIds.length; i++){
currentUser = Users.findOne(selectedUserChkBoxUserIds[i]);
userTms = currentUser.teams;
if(userTms == undefined || userTms.length == 0){
userTms = [];
userTms.push({
"teamId": selectedEltValueId,
"teamDisplayName": selectedEltValue,
})
}
else if(userTms.length > 0)
{
currUserTeamIndex = userTms.findIndex(function(t){ return t.teamId == selectedEltValueId});
if(currUserTeamIndex == -1){
userTms.push({
"teamId": selectedEltValueId,
"teamDisplayName": selectedEltValue,
});
}
}
Users.update(selectedUserChkBoxUserIds[i], {
$set:{
teams: userTms
}
});
}
}
else{
for(let i = 0; i < selectedUserChkBoxUserIds.length; i++){
currentUser = Users.findOne(selectedUserChkBoxUserIds[i]);
userTms = currentUser.teams;
if(userTms !== undefined || userTms.length > 0)
{
currUserTeamIndex = userTms.findIndex(function(t){ return t.teamId == selectedEltValueId});
if(currUserTeamIndex != -1){
userTms.splice(currUserTeamIndex, 1);
}
}
Users.update(selectedUserChkBoxUserIds[i], {
$set:{
teams: userTms
}
});
}
}
document.getElementById("divAddOrRemoveTeamContainer").style.display = 'none';
},
},
];
},
}).register('modifyTeamsUsers');
BlazeComponent.extendComponent({
events() {
return [
@@ -551,12 +655,15 @@ Template.editUserPopup.events({
let userTeamsList = userTeams.split(",");
let userTeamsIdsList = userTeamsIds.split(",");
let userTms = [];
for(let i = 0; i < userTeamsList.length; i++){
userTms.push({
"teamId": userTeamsIdsList[i],
"teamDisplayName": userTeamsList[i],
})
if(userTeams != ''){
for(let i = 0; i < userTeamsList.length; i++){
userTms.push({
"teamId": userTeamsIdsList[i],
"teamDisplayName": userTeamsList[i],
})
}
}
Users.update(this.userId, {
$set:{
teams: userTms
@@ -566,12 +673,15 @@ Template.editUserPopup.events({
let userOrgsList = userOrgs.split(",");
let userOrgsIdsList = userOrgsIds.split(",");
let userOrganizations = [];
for(let i = 0; i < userOrgsList.length; i++){
userOrganizations.push({
"orgId": userOrgsIdsList[i],
"orgDisplayName": userOrgsList[i],
})
if(userOrgs != ''){
for(let i = 0; i < userOrgsList.length; i++){
userOrganizations.push({
"orgId": userOrgsIdsList[i],
"orgDisplayName": userOrgsList[i],
})
}
}
Users.update(this.userId, {
$set:{
orgs: userOrganizations
@@ -724,7 +834,7 @@ UpdateUserOrgsOrTeamsElement = function(isNewUser = false){
lstInputValuesIds = [];
}
index = lstInputValues.indexOf(selectedEltValue);
indexId = lstInputValuesIds.indexOf(selectedEltValue);
indexId = lstInputValuesIds.indexOf(selectedEltValueId);
if(userOrgsTeamsAction == "addOrg" || userOrgsTeamsAction == "addTeam"){
if(index <= -1 && selectedEltValueId != "-1"){
lstInputValues.push(selectedEltValue);
@@ -833,20 +943,24 @@ Template.newUserPopup.events({
let userTeamsIdsList = userTeamsIds.split(",");
let userTms = [];
for(let i = 0; i < userTeamsList.length; i++){
userTms.push({
"teamId": userTeamsIdsList[i],
"teamDisplayName": userTeamsList[i],
})
if(!!userTeamsIdsList[i] && !!userTeamsList[i]) {
userTms.push({
"teamId": userTeamsIdsList[i],
"teamDisplayName": userTeamsList[i],
})
}
}
let userOrgsList = userOrgs.split(",");
let userOrgsIdsList = userOrgsIds.split(",");
let userOrganizations = [];
for(let i = 0; i < userOrgsList.length; i++){
userOrganizations.push({
"orgId": userOrgsIdsList[i],
"orgDisplayName": userOrgsList[i],
})
if(!!userOrgsIdsList[i] && !!userOrgsList[i]) {
userOrganizations.push({
"orgId": userOrgsIdsList[i],
"orgDisplayName": userOrgsList[i],
})
}
}
Meteor.call(
@@ -923,6 +1037,16 @@ Template.newUserPopup.events({
Template.settingsOrgPopup.events({
'click #deleteButton'(event) {
event.preventDefault();
if(Users.find({"orgs.orgId": this.orgId}).count() > 0)
{
let orgClassList = document.getElementById("deleteOrgWarningMessage").classList;
if(orgClassList.contains('hide'))
{
orgClassList.remove('hide');
document.getElementById("deleteOrgWarningMessage").style.color = "red";
}
return;
}
Org.remove(this.orgId);
Popup.close();
}
@@ -931,6 +1055,16 @@ Template.settingsOrgPopup.events({
Template.settingsTeamPopup.events({
'click #deleteButton'(event) {
event.preventDefault();
if(Users.find({"teams.teamId": this.teamId}).count() > 0)
{
let teamClassList = document.getElementById("deleteTeamWarningMessage").classList;
if(teamClassList.contains('hide'))
{
teamClassList.remove('hide');
document.getElementById("deleteTeamWarningMessage").style.color = "red";
}
return;
}
Team.remove(this.teamId);
Popup.close();
}
@@ -949,10 +1083,13 @@ Template.settingsUserPopup.events({
},
'click #deleteButton'(event) {
event.preventDefault();
Users.remove(this.userId);
/*
// Delete is not enabled yet, because it does leave empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// Delete user is enabled, but you should remove user from all boards
// before deleting user, because there is possibility of leaving empty user avatars
// to boards. You can remove non-existing user ids manually from database,
// if that happens.
//. See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
@@ -960,7 +1097,7 @@ Template.settingsUserPopup.events({
// but that should be used to remove user from all boards similarly
// - wekan/models/users.js Delete is not enabled
//
//Users.remove(this.userId);
//
*/
Popup.close();
},
@@ -55,3 +55,31 @@ table
.js-teams,.js-teamsNewUser
display: none;
.selectUserChkBox
position: static !important;
visibility: visible !important;
left: 0 !important;
#divAddOrRemoveTeam
background: green;
display: none;
#addOrRemoveTeam
background: green;
color: white;
#divAddOrRemoveTeamContainer
display: none;
margin: auto;
width: 50%;
border: 3px solid green;
padding: 10px;
#cancelBtn
margin-left: 5% !important;
background: orange;
color: white;
#deleteAction
margin-left: 5% !important;
+22 -1
View File
@@ -22,6 +22,10 @@ template(name="setting")
a.js-setting-menu(data-id="account-setting")
i.fa.fa-users
| {{_ 'accounts'}}
li
a.js-setting-menu(data-id="tableVisibilityMode-setting")
i.fa.fa-eye
| {{_ 'tableVisibilityMode'}}
li
a.js-setting-menu(data-id="announcement-setting")
i.fa.fa-bullhorn
@@ -44,6 +48,8 @@ template(name="setting")
+email
else if accountSetting.get
+accountSettings
else if tableVisibilityModeSetting.get
+tableVisibilityModeSettings
else if announcementSetting.get
+announcementSettings
else if layoutSetting.get
@@ -96,7 +102,7 @@ template(name='email')
// li.smtp-form
// .title {{_ 'smtp-username'}}
// .form-group
// input.wekan-form-control#mail-server-username(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
// input.wekan-form-control#mail-server-u"accounts-allowUserNameChange": "Allow Username Change",sername(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
// li.smtp-form
// .title {{_ 'smtp-password'}}
// .form-group
@@ -120,6 +126,17 @@ template(name='email')
li
button.js-send-smtp-test-email.primary {{_ 'send-smtp-test'}}
template(name='tableVisibilityModeSettings')
ul#tableVisibilityMode-setting.setting-detail
li.tableVisibilityMode-form
.title {{_ 'tableVisibilityMode-allowPrivateOnly'}}
.form-group.flex
input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="true" checked="{{#if allowPrivateOnly}}checked{{/if}}")
span {{_ 'yes'}}
input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="false" checked="{{#unless allowPrivateOnly}}checked{{/unless}}")
span {{_ 'no'}}
button.js-tableVisibilityMode-save.primary {{_ 'save'}}
template(name='accountSettings')
ul#account-setting.setting-detail
li
@@ -163,6 +180,10 @@ template(name='announcementSettings')
template(name='layoutSettings')
ul#layout-setting.setting-detail
li.layout-form
.title {{_ 'oidc-button-text'}}
.form-group
input.wekan-form-control#oidcBtnTextvalue(type="text", placeholder="" value="{{currentSetting.oidcBtnText}}")
li.layout-form
.title {{_ 'display-authentication-method'}}
.form-group.flex
+50
View File
@@ -7,6 +7,7 @@ BlazeComponent.extendComponent({
this.generalSetting = new ReactiveVar(true);
this.emailSetting = new ReactiveVar(false);
this.accountSetting = new ReactiveVar(false);
this.tableVisibilityModeSetting = new ReactiveVar(false);
this.announcementSetting = new ReactiveVar(false);
this.layoutSetting = new ReactiveVar(false);
this.webhookSetting = new ReactiveVar(false);
@@ -14,6 +15,7 @@ BlazeComponent.extendComponent({
Meteor.subscribe('setting');
Meteor.subscribe('mailServer');
Meteor.subscribe('accountSettings');
Meteor.subscribe('tableVisibilityModeSettings');
Meteor.subscribe('announcements');
Meteor.subscribe('globalwebhooks');
},
@@ -88,6 +90,7 @@ BlazeComponent.extendComponent({
this.announcementSetting.set('announcement-setting' === targetID);
this.layoutSetting.set('layout-setting' === targetID);
this.webhookSetting.set('webhook-setting' === targetID);
this.tableVisibilityModeSetting.set('tableVisibilityMode-setting' === targetID);
}
},
@@ -196,6 +199,12 @@ BlazeComponent.extendComponent({
)
.val()
.trim();
const oidcBtnText = $(
'#oidcBtnTextvalue',
)
.val()
.trim();
const hideLogoChange = $('input[name=hideLogo]:checked').val() === 'true';
const displayAuthenticationMethod =
$('input[name=displayAuthenticationMethod]:checked').val() === 'true';
@@ -218,6 +227,7 @@ BlazeComponent.extendComponent({
defaultAuthenticationMethod,
automaticLinkedUrlSchemes,
spinnerName,
oidcBtnText,
},
});
} catch (e) {
@@ -317,6 +327,46 @@ BlazeComponent.extendComponent({
},
}).register('accountSettings');
BlazeComponent.extendComponent({
saveTableVisibilityChange() {
const allowPrivateOnly =
$('input[name=allowPrivateOnly]:checked').val() === 'true';
TableVisibilityModeSettings.update('tableVisibilityMode-allowPrivateOnly', {
$set: { booleanValue: allowPrivateOnly },
});
},
allowPrivateOnly() {
return TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
},
allHideSystemMessages() {
Meteor.call('setAllUsersHideSystemMessages', (err, ret) => {
if (!err && ret) {
if (ret === true) {
const message = `${TAPi18n.__(
'now-system-messages-of-all-users-are-hidden',
)}`;
alert(message);
}
} else {
const reason = err.reason || '';
const message = `${TAPi18n.__(err.error)}\n${reason}`;
alert(message);
}
});
},
events() {
return [
{
'click button.js-tableVisibilityMode-save': this.saveTableVisibilityChange,
},
{
'click button.js-all-hide-system-messages': this.allHideSystemMessages,
},
];
},
}).register('tableVisibilityModeSettings');
BlazeComponent.extendComponent({
onCreated() {
this.loading = new ReactiveVar(false);
+92 -1
View File
@@ -31,6 +31,28 @@ template(name='homeSidebar')
+activities(mode="board")
template(name="membersWidget")
if AtLeastOneOrgWasCreated
.board-widget.board-widget-members
h3
i.fa.fa-users
| {{_ 'organizations'}}
.board-widget-content
+boardOrgGeneral
.clearfix
br
hr
if AtLeastOneTeamWasCreated
.board-widget.board-widget-members
h3
i.fa.fa-users
| {{_ 'teams'}}
.board-widget-content
+boardTeamGeneral
.clearfix
br
hr
.board-widget.board-widget-members
h3
i.fa.fa-users
@@ -65,6 +87,30 @@ template(name="membersWidget")
button.js-member-invite-accept.primary {{_ 'accept'}}
button.js-member-invite-decline {{_ 'decline'}}
template(name="boardOrgGeneral")
table
tbody
tr
th {{_ 'displayName'}}
th
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-addOrg(title="{{_ 'add-members'}}")
i.fa.fa-plus
each org in currentBoard.activeOrgs
+boardOrgRow(orgId=org.orgId)
template(name="boardTeamGeneral")
table
tbody
tr
th {{_ 'displayName'}}
th
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-addTeam(title="{{_ 'add-members'}}")
i.fa.fa-plus
each currentBoard.activeTeams
+boardTeamRow(teamId=this.teamId)
template(name="boardChangeColorPopup")
.board-backgrounds-list.clearfix
each backgroundColors
@@ -145,6 +191,13 @@ template(name="boardCardSettingsPopup")
span
i.fa.fa-tags
| {{_ 'labels'}}
div.check-div
a.flex.js-field-has-card-number(class="{{#if allowsCardNumber}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsCardNumber}}is-checked{{/if}}")
span
i.fa.fa-hashtag
| {{_ 'card'}}
| {{_ 'number'}}
div.check-div
a.flex.js-field-has-description-title(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
@@ -347,7 +400,11 @@ template(name="exportBoard")
li
a(href="{{exportCsvUrl}}", download="{{exportCsvFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-csv'}}
| {{_ 'export-board-csv'}} ,
li
a(href="{{exportScsvUrl}}", download="{{exportCsvFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-csv'}} ;
li
a(href="{{exportTsvUrl}}", download="{{exportTsvFilename}}")
i.fa.fa-share-alt
@@ -409,6 +466,40 @@ template(name="leaveBoardPopup")
p {{_ 'leave-board-pop' boardTitle=board.title}}
button.js-confirm.negate.full(type="submit") {{_ 'leave-board'}}
template(name="addBoardOrgPopup")
select.js-boardOrgs#jsBoardOrgs
option(value="-1") {{_ 'organizations'}} :
each value in orgsDatas
option(value="{{value._id}}") {{_ value.orgDisplayName}}
template(name="removeBoardOrgPopup")
form
input.hide#hideOrgId(type="text" value=org._id)
label
| {{_ 'leave-board'}} ?
br
hr
div.buttonsContainer
input.primary.wide.leaveBoardBtn#leaveBoardBtn(type="submit" value="{{_ 'leave-board'}}")
input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardBtn(type="submit" value="{{_ 'Cancel'}}")
template(name="addBoardTeamPopup")
select.js-boardTeams#jsBoardTeams
option(value="-1") {{_ 'teams'}} :
each value in teamsDatas
option(value="{{value._id}}") {{_ value.teamDisplayName}}
template(name="removeBoardTeamPopup")
form
input.hide#hideTeamId(type="text" value=team._id)
label
| {{_ 'leave-board'}} ?
br
hr
div.buttonsContainer
input.primary.wide.leaveBoardBtn#leaveBoardTeamBtn(type="submit" value="{{_ 'leave-board'}}")
input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardTeamBtn(type="submit" value="{{_ 'Cancel'}}")
template(name="addMemberPopup")
.js-search-member
+esInput(index="users")
+429
View File
@@ -183,6 +183,7 @@ Template.memberPopup.helpers({
},
});
Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-open-rules-view'() {
@@ -290,6 +291,42 @@ Template.leaveBoardPopup.helpers({
return Boards.findOne(Session.get('currentBoard'));
},
});
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.findOrgsOptions = new ReactiveVar({});
this.findTeamsOptions = new ReactiveVar({});
this.page = new ReactiveVar(1);
this.teamPage = new ReactiveVar(1);
this.autorun(() => {
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
});
this.autorun(() => {
const limitTeams = this.teamPage.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('team', this.findTeamsOptions.get(), limitTeams, () => {});
});
},
onRendered() {
this.setLoading(false);
},
setError(error) {
this.error.set(error);
},
setLoading(w) {
this.loading.set(w);
},
isLoading() {
return this.loading.get();
},
}).register('membersWidget');
Template.membersWidget.helpers({
isInvited() {
@@ -307,12 +344,29 @@ Template.membersWidget.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
AtLeastOneOrgWasCreated(){
let orgs = Org.find({}, {sort: { createdAt: -1 }});
if(orgs === undefined)
return false;
return orgs.count() > 0;
},
AtLeastOneTeamWasCreated(){
let teams = Team.find({}, {sort: { createdAt: -1 }});
if(teams === undefined)
return false;
return teams.count() > 0;
},
});
Template.membersWidget.events({
'click .js-member': Popup.open('member'),
'click .js-open-board-menu': Popup.open('boardMenu'),
'click .js-manage-board-members': Popup.open('addMember'),
'click .js-manage-board-addOrg': Popup.open('addBoardOrg'),
'click .js-manage-board-addTeam': Popup.open('addBoardTeam'),
'click .js-import': Popup.open('boardImportBoard'),
submit: this.onSubmit,
'click .js-import-board': Popup.open('chooseBoardSource'),
@@ -458,6 +512,21 @@ BlazeComponent.extendComponent({
};
const queryParams = {
authToken: Accounts._storedLoginToken(),
delimiter: ',',
};
return FlowRouter.path(
'/api/boards/:boardId/export/csv',
params,
queryParams,
);
},
exportScsvUrl() {
const params = {
boardId: Session.get('currentBoard'),
};
const queryParams = {
authToken: Accounts._storedLoginToken(),
delimiter: ';',
};
return FlowRouter.path(
'/api/boards/:boardId/export/csv',
@@ -774,6 +843,10 @@ BlazeComponent.extendComponent({
return this.currentBoard.allowsComments;
},
allowsCardNumber() {
return this.currentBoard.allowsCardNumber;
},
allowsDescriptionTitle() {
return this.currentBoard.allowsDescriptionTitle;
},
@@ -1017,6 +1090,22 @@ BlazeComponent.extendComponent({
this.currentBoard.allowsDescriptionTitle,
);
},
'click .js-field-has-card-number'(evt) {
evt.preventDefault();
this.currentBoard.allowsCardNumber = !this.currentBoard
.allowsCardNumber;
this.currentBoard.setAllowsCardNumber(
this.currentBoard.allowsCardNumber,
);
$(`.js-field-has-card-number ${MCB}`).toggleClass(
CKCLS,
this.currentBoard.allowsCardNumber,
);
$('.js-field-has-card-number').toggleClass(
CKCLS,
this.currentBoard.allowsCardNumber,
);
},
'click .js-field-has-description-text'(evt) {
evt.preventDefault();
this.currentBoard.allowsDescriptionText = !this.currentBoard
@@ -1168,6 +1257,346 @@ BlazeComponent.extendComponent({
},
}).register('addMemberPopup');
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.findOrgsOptions = new ReactiveVar({});
this.page = new ReactiveVar(1);
this.autorun(() => {
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
});
},
onRendered() {
this.setLoading(false);
},
setError(error) {
this.error.set(error);
},
setLoading(w) {
this.loading.set(w);
},
isLoading() {
return this.loading.get();
},
events() {
return [
{
'keyup input'() {
this.setError('');
},
'change #jsBoardOrgs'() {
let currentBoard = Boards.findOne(Session.get('currentBoard'));
let selectElt = document.getElementById("jsBoardOrgs");
let selectedOrgId = selectElt.options[selectElt.selectedIndex].value;
let selectedOrgDisplayName = selectElt.options[selectElt.selectedIndex].text;
let boardOrganizations = [];
if(currentBoard.orgs !== undefined){
for(let i = 0; i < currentBoard.orgs.length; i++){
boardOrganizations.push(currentBoard.orgs[i]);
}
}
if(!boardOrganizations.some((org) => org.orgDisplayName == selectedOrgDisplayName)){
boardOrganizations.push({
"orgId": selectedOrgId,
"orgDisplayName": selectedOrgDisplayName,
"isActive" : true,
})
if (selectedOrgId != "-1") {
Meteor.call('setBoardOrgs', boardOrganizations, currentBoard._id);
}
}
Popup.close();
},
},
];
},
}).register('addBoardOrgPopup');
Template.addBoardOrgPopup.helpers({
orgsDatas() {
// return Org.find({}, {sort: { createdAt: -1 }});
let orgs = Org.find({}, {sort: { createdAt: -1 }});
return orgs;
},
});
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.findOrgsOptions = new ReactiveVar({});
this.page = new ReactiveVar(1);
this.autorun(() => {
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
});
},
onRendered() {
this.setLoading(false);
},
setError(error) {
this.error.set(error);
},
setLoading(w) {
this.loading.set(w);
},
isLoading() {
return this.loading.get();
},
events() {
return [
{
'keyup input'() {
this.setError('');
},
'click #leaveBoardBtn'(){
let stringOrgId = document.getElementById('hideOrgId').value;
let currentBoard = Boards.findOne(Session.get('currentBoard'));
let boardOrganizations = [];
if(currentBoard.orgs !== undefined){
for(let i = 0; i < currentBoard.orgs.length; i++){
if(currentBoard.orgs[i].orgId != stringOrgId){
boardOrganizations.push(currentBoard.orgs[i]);
}
}
}
Meteor.call('setBoardOrgs', boardOrganizations, currentBoard._id);
Popup.close();
},
'click #cancelLeaveBoardBtn'(){
Popup.close();
},
},
];
},
}).register('removeBoardOrgPopup');
Template.removeBoardOrgPopup.helpers({
org() {
return Org.findOne(this.orgId);
},
});
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.findOrgsOptions = new ReactiveVar({});
this.page = new ReactiveVar(1);
this.autorun(() => {
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
});
this.findUsersOptions = new ReactiveVar({});
this.userPage = new ReactiveVar(1);
this.autorun(() => {
const limitUsers = this.userPage.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
});
},
onRendered() {
this.setLoading(false);
},
setError(error) {
this.error.set(error);
},
setLoading(w) {
this.loading.set(w);
},
isLoading() {
return this.loading.get();
},
events() {
return [
{
'keyup input'() {
this.setError('');
},
'change #jsBoardTeams'() {
let currentBoard = Boards.findOne(Session.get('currentBoard'));
let selectElt = document.getElementById("jsBoardTeams");
let selectedTeamId = selectElt.options[selectElt.selectedIndex].value;
let selectedTeamDisplayName = selectElt.options[selectElt.selectedIndex].text;
let boardTeams = [];
if(currentBoard.teams !== undefined){
for(let i = 0; i < currentBoard.teams.length; i++){
boardTeams.push(currentBoard.teams[i]);
}
}
if(!boardTeams.some((team) => team.teamDisplayName == selectedTeamDisplayName)){
boardTeams.push({
"teamId": selectedTeamId,
"teamDisplayName": selectedTeamDisplayName,
"isActive" : true,
})
if (selectedTeamId != "-1") {
let members = currentBoard.members;
let query = {
"teams.teamId": { $in: boardTeams.map(t => t.teamId) },
};
const boardTeamUsers = Users.find(query, {
sort: { sort: 1 },
});
if(boardTeams !== undefined && boardTeams.length > 0){
let index;
if(boardTeamUsers && boardTeamUsers.count() > 0){
boardTeamUsers.forEach((u) => {
index = members.findIndex(function(m){ return m.userId == u._id});
if(index == -1){
members.push({
"isActive": true,
"isAdmin": u.isAdmin !== undefined ? u.isAdmin : false,
"isCommentOnly" : false,
"isNoComments" : false,
"userId": u._id,
});
}
});
}
}
Meteor.call('setBoardTeams', boardTeams, members, currentBoard._id);
}
}
Popup.close();
},
},
];
},
}).register('addBoardTeamPopup');
Template.addBoardTeamPopup.helpers({
teamsDatas() {
let teams = Team.find({}, {sort: { createdAt: -1 }});
return teams;
},
});
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.findOrgsOptions = new ReactiveVar({});
this.page = new ReactiveVar(1);
this.autorun(() => {
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
});
this.findUsersOptions = new ReactiveVar({});
this.userPage = new ReactiveVar(1);
this.autorun(() => {
const limitUsers = this.userPage.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
});
},
onRendered() {
this.setLoading(false);
},
setError(error) {
this.error.set(error);
},
setLoading(w) {
this.loading.set(w);
},
isLoading() {
return this.loading.get();
},
events() {
return [
{
'keyup input'() {
this.setError('');
},
'click #leaveBoardTeamBtn'(){
let stringTeamId = document.getElementById('hideTeamId').value;
let currentBoard = Boards.findOne(Session.get('currentBoard'));
let boardTeams = [];
if(currentBoard.teams !== undefined){
for(let i = 0; i < currentBoard.teams.length; i++){
if(currentBoard.teams[i].teamId != stringTeamId){
boardTeams.push(currentBoard.teams[i]);
}
}
}
let members = currentBoard.members;
let query = {
"teams.teamId": stringTeamId
};
const boardTeamUsers = Users.find(query, {
sort: { sort: 1 },
});
if(currentBoard.teams !== undefined && currentBoard.teams.length > 0){
let index;
if(boardTeamUsers && boardTeamUsers.count() > 0){
boardTeamUsers.forEach((u) => {
index = members.findIndex(function(m){ return m.userId == u._id});
if(index !== -1 && (u.isAdmin === undefined || u.isAdmin == false)){
members.splice(index, 1);
}
});
}
}
Meteor.call('setBoardTeams', boardTeams, members, currentBoard._id);
Popup.close();
},
'click #cancelLeaveBoardTeamBtn'(){
Popup.close();
},
},
];
},
}).register('removeBoardTeamPopup');
Template.removeBoardTeamPopup.helpers({
team() {
return Team.findOne(this.teamId);
},
});
Template.changePermissionsPopup.events({
'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only, click .js-set-worker'(
event,
+10
View File
@@ -214,3 +214,13 @@
i.fa
padding: 8px 0px 8px 16px
font-weight: bold
#jsBoardOrgs, #jsBoardTeams
width: 90%
.leaveBoardBtn
background-color: green !important
.cancelLeaveBoardBtn
margin-left: 5% !important
background-color: red !important
@@ -43,6 +43,14 @@ template(name="createCustomFieldPopup")
option(value=value selected="selected") {{name}}
else
option(value=value) {{name}}
a.flex.js-field-show-sum-at-top-of-list(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
.materialCheckBox(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
span {{_ 'showSum-field-on-list'}}
div.js-field-settings.js-field-settings-currency(class="{{#if isTypeNotSelected 'number'}}hide{{/if}}")
a.flex.js-field-show-sum-at-top-of-list(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
.materialCheckBox(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
span {{_ 'showSum-field-on-list'}}
div.js-field-settings.js-field-settings-dropdown(class="{{#if isTypeNotSelected 'dropdown'}}hide{{/if}}")
label
@@ -234,6 +234,14 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
$target.find('.materialCheckBox').toggleClass('is-checked');
$target.toggleClass('is-checked');
},
'click .js-field-show-sum-at-top-of-list'(evt) {
let $target = $(evt.target);
if (!$target.hasClass('js-field-show-sum-at-top-of-list')) {
$target = $target.parent();
}
$target.find('.materialCheckBox').toggleClass('is-checked');
$target.toggleClass('is-checked');
},
'click .primary'(evt) {
evt.preventDefault();
@@ -248,6 +256,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
this.find('.js-field-automatically-on-card.is-checked') !== null,
alwaysOnCard:
this.find('.js-field-always-on-card.is-checked') !== null,
showSumAtTopOfList:
this.find('.js-field-show-sum-at-top-of-list.is-checked') !== null,
};
// insert or update
@@ -11,8 +11,15 @@ template(name="swimlaneHeader")
template(name="swimlaneFixedHeader")
.swimlane-header(
class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
+viewer
= title
if $eq title 'Card Templates'
| {{_ 'card-templates-swimlane'}}
else if $eq title 'List Templates'
| {{_ 'list-templates-swimlane'}}
else if $eq title 'Board Templates'
| {{_ 'board-templates-swimlane'}}
else
+viewer
= title
.swimlane-header-menu
unless currentUser.isCommentOnly
if currentUser.isBoardAdmin
+38
View File
@@ -19,6 +19,44 @@ template(name="userAvatarInitials")
svg.avatar.avatar-initials(viewBox="0 0 {{viewPortWidth}} 15")
text(x="50%" y="13" text-anchor="middle")= initials
template(name="orgAvatar")
a.member.orgOrTeamMember(class="js-member" title="{{orgData.orgDisplayName}}")
+boardOrgName(orgId=orgData._id)
template(name="boardOrgRow")
tr
if orgData.orgIsActive
td <s>{{ orgData.orgDisplayName }}</s>
else
td {{ orgData.orgDisplayName }}
td
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-removeOrg(title="{{_ 'remove-from-board'}}")
i.fa.fa-minus
template(name="boardTeamRow")
tr
if teamData.teamIsActive
td <s>{{ teamData.teamDisplayName }}</s>
else
td {{ teamData.teamDisplayName }}
td
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-removeTeam(title="{{_ 'remove-from-board'}}")
i.fa.fa-minus
template(name="boardOrgName")
svg.avatar.avatar-initials(viewBox="0 0 {{orgViewPortWidth}} 15")
text(x="50%" y="13" text-anchor="middle")= orgName
template(name="teamAvatar")
a.member.orgOrTeamMember(class="js-member" title="{{teamData.teamDisplayName}}")
+boardTeamName(orgId=orgData._id)
template(name="boardTeamName")
svg.avatar.avatar-initials(viewBox="0 0 {{teamViewPortWidth}} 15")
text(x="50%" y="13" text-anchor="middle")= teamName
template(name="userPopup")
.board-member-menu
.mini-profile-info
+128
View File
@@ -1,6 +1,8 @@
import Cards from '/models/cards';
import Avatars from '/models/avatars';
import Users from '/models/users';
import Org from '/models/org';
import Team from '/models/team';
Template.userAvatar.helpers({
userData() {
@@ -46,6 +48,132 @@ Template.userAvatarInitials.helpers({
},
});
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.findOrgsOptions = new ReactiveVar({});
this.page = new ReactiveVar(1);
this.autorun(() => {
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
});
},
onRendered() {
this.setLoading(false);
},
setError(error) {
this.error.set(error);
},
setLoading(w) {
this.loading.set(w);
},
isLoading() {
return this.loading.get();
},
events() {
return [
{
'keyup input'() {
this.setError('');
},
'click .js-manage-board-removeOrg': Popup.open('removeBoardOrg'),
},
];
},
}).register('boardOrgRow');
Template.boardOrgRow.helpers({
orgData() {
const orgCollection = this.esSearch ? ESSearchResults : Org;
return orgCollection.findOne(this.orgId);
},
currentUser(){
return Meteor.user();
},
});
Template.boardOrgName.helpers({
orgName() {
const org = Org.findOne(this.orgId);
return org && org.orgDisplayName;
},
orgViewPortWidth() {
const org = Org.findOne(this.orgId);
return ((org && org.orgDisplayName.length) || 1) * 12;
},
});
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.findOrgsOptions = new ReactiveVar({});
this.page = new ReactiveVar(1);
this.autorun(() => {
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
});
},
onRendered() {
this.setLoading(false);
},
setError(error) {
this.error.set(error);
},
setLoading(w) {
this.loading.set(w);
},
isLoading() {
return this.loading.get();
},
events() {
return [
{
'keyup input'() {
this.setError('');
},
'click .js-manage-board-removeTeam': Popup.open('removeBoardTeam'),
},
];
},
}).register('boardTeamRow');
Template.boardTeamRow.helpers({
teamData() {
const teamCollection = this.esSearch ? ESSearchResults : Team;
return teamCollection.findOne(this.teamId);
},
currentUser(){
return Meteor.user();
},
});
Template.boardTeamName.helpers({
teamName() {
const team = Team.findOne(this.teamId);
return team && team.teamDisplayName;
},
teamViewPortWidth() {
const team = Team.findOne(this.teamId);
return ((team && team.teamDisplayName.length) || 1) * 12;
},
});
BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
+10 -8
View File
@@ -49,10 +49,11 @@ template(name="memberMenuPopup")
i.fa.fa-lock
| {{_ 'admin-panel'}}
hr
li
a.js-edit-profile
i.fa.fa-user
| {{_ 'edit-profile'}}
if isNotOAuth2AuthenticationMethod
li
a.js-edit-profile
i.fa.fa-user
| {{_ 'edit-profile'}}
li
a.js-change-settings
i.fa.fa-cog
@@ -62,10 +63,11 @@ template(name="memberMenuPopup")
i.fa.fa-picture-o
| {{_ 'edit-avatar'}}
unless isSandstorm
li
a.js-change-password
i.fa.fa-key
| {{_ 'changePasswordPopup-title'}}
if isNotOAuth2AuthenticationMethod
li
a.js-change-password
i.fa.fa-key
| {{_ 'changePasswordPopup-title'}}
li
a.js-change-language
i.fa.fa-flag
+12
View File
@@ -22,6 +22,14 @@ Template.memberMenuPopup.helpers({
return false;
}
},
isNotOAuth2AuthenticationMethod(){
currentUser = Meteor.user();
if (currentUser) {
return currentUser.authenticationMethod != 'OAuth2';
} else {
return true;
}
}
});
Template.memberMenuPopup.events({
@@ -180,12 +188,16 @@ Template.changeLanguagePopup.helpers({
name = 'Français (Belgique)';
} else if (lang.name === 'fr-CA') {
name = 'Français (Canada)';
} else if (lang.name === 'fr-CH') {
name = 'Français (Schweiz)';
} else if (lang.name === 'ig') {
name = 'Igbo';
} else if (lang.name === 'lv') {
name = 'Latviešu';
} else if (lang.name === 'latviešu valoda') {
name = 'Latviešu';
} else if (lang.name === 'en-IT') {
name = 'English (Italy)';
} else if (lang.name === 'Español') {
name = 'español';
} else if (lang.name === 'es_419') {
+1
View File
@@ -34,6 +34,7 @@ export class DatePicker extends BlazeComponent {
todayBtn: 'linked',
language: TAPi18n.getLanguage(),
weekStart: this.startDayOfWeek(),
calendarWeeks: true,
})
.on(
'changeDate',
Executable → Regular
View File
File mode changed.
+197
View File
@@ -0,0 +1,197 @@
/* eslint-env mocha */
import sinon from 'sinon';
import { expect } from 'chai';
import { Random } from 'meteor/random';
import '../utils';
describe('Utils', function() {
beforeEach(function() {
sinon.stub(Utils, 'reload').callsFake(() => {});
});
afterEach(function() {
window.localStorage.removeItem(boardView);
sinon.restore();
});
const boardView = 'boardView';
describe(Utils.setBoardView.name, function() {
it('sets the board view if the user exists', function(done) {
const viewId = Random.id();
const user = {
setBoardView: (view) => {
expect(view).to.equal(viewId);
done();
},
};
sinon.stub(Meteor, 'user').callsFake(() => user);
Utils.setBoardView(viewId);
expect(window.localStorage.getItem(boardView)).to.equal(viewId);
});
it('sets a specific view if no user exists but a view is defined', function() {
const views = [
'board-view-swimlanes',
'board-view-lists',
'board-view-cal'
];
sinon.stub(Meteor, 'user').callsFake(() => {});
views.forEach(viewName => {
Utils.setBoardView(viewName);
expect(window.localStorage.getItem(boardView)).to.equal(viewName);
});
});
it('sets a default view if no user and no view are given', function() {
sinon.stub(Meteor, 'user').callsFake(() => {});
Utils.setBoardView();
expect(window.localStorage.getItem(boardView)).to.equal('board-view-swimlanes');
});
});
describe(Utils.unsetBoardView.name, function() {
it('removes the boardview from localStoage', function() {
window.localStorage.setItem(boardView, Random.id());
window.localStorage.setItem('collapseSwimlane', Random.id());
Utils.unsetBoardView();
expect(window.localStorage.getItem(boardView)).to.equal(null);
expect(window.localStorage.getItem('collapseSwimlane')).to.equal(null);
});
});
describe(Utils.boardView.name, function() {
it('returns the user\'s board view if a user exists', function() {
const viewId = Random.id();
const user = {};
sinon.stub(Meteor, 'user').callsFake(() => user);
expect(Utils.boardView()).to.equal(undefined);
const boardView = Random.id();
user.profile = { boardView };
expect(Utils.boardView()).to.equal(boardView);
});
it('returns the current defined view', function() {
const views = [
'board-view-swimlanes',
'board-view-lists',
'board-view-cal'
];
sinon.stub(Meteor, 'user').callsFake(() => {});
views.forEach(viewName => {
window.localStorage.setItem(boardView, viewName);
expect(Utils.boardView()).to.equal(viewName);
});
});
it('returns a default if nothing is set', function() {
sinon.stub(Meteor, 'user').callsFake(() => {});
expect(Utils.boardView()).to.equal('board-view-swimlanes');
expect(window.localStorage.getItem(boardView)).to.equal('board-view-swimlanes');
});
});
describe(Utils.myCardsSort.name, function() {
it('has no tests yet');
});
describe(Utils.myCardsSortToggle.name, function() {
it('has no tests yet');
});
describe(Utils.setMyCardsSort.name, function() {
it('has no tests yet');
});
describe(Utils.archivedBoardIds.name, function() {
it('has no tests yet');
});
describe(Utils.dueCardsView.name, function() {
it('has no tests yet');
});
describe(Utils.setDueCardsView.name, function() {
it('has no tests yet');
});
describe(Utils.goBoardId.name, function() {
it('has no tests yet');
});
describe(Utils.goCardId.name, function() {
it('has no tests yet');
});
describe(Utils.processUploadedAttachment.name, function() {
it('has no tests yet');
});
describe(Utils.shrinkImage.name, function() {
it('has no tests yet');
});
describe(Utils.capitalize.name, function() {
it('has no tests yet');
});
describe(Utils.isMiniScreen.name, function() {
it('has no tests yet');
});
describe(Utils.isShowDesktopDragHandles.name, function() {
it('has no tests yet');
});
describe(Utils.isMiniScreenOrShowDesktopDragHandles.name, function() {
it('has no tests yet');
});
describe(Utils.calculateIndexData.name, function() {
it('has no tests yet');
});
describe(Utils.calculateIndex.name, function() {
it('has no tests yet');
});
describe(Utils.isTouchDevice.name, function() {
it('has no tests yet');
});
describe(Utils.calculateTouchDistance.name, function() {
it('has no tests yet');
});
describe(Utils.enableClickOnTouch.name, function() {
it('has no tests yet');
});
describe(Utils.manageCustomUI.name, function() {
it('has no tests yet');
});
describe(Utils.setCustomUI.name, function() {
it('has no tests yet');
});
describe(Utils.setMatomo.name, function() {
it('has no tests yet');
});
describe(Utils.manageMatomo.name, function() {
it('has no tests yet');
});
describe(Utils.getTriggerActionDesc.name, function() {
it('has no tests yet');
});
});
+1
View File
@@ -0,0 +1 @@
import './Utils.tests';
+14 -7
View File
@@ -1,20 +1,27 @@
Utils = {
reload () {
// we move all window.location.reload calls into this function
// so we can disable it when running tests.
// This is because we are not allowed to override location.reload but
// we can override Utils.reload to prevent reload during tests.
window.location.reload();
},
setBoardView(view) {
currentUser = Meteor.user();
if (currentUser) {
Meteor.user().setBoardView(view);
} else if (view === 'board-view-swimlanes') {
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
location.reload();
Utils.reload();
} else if (view === 'board-view-lists') {
window.localStorage.setItem('boardView', 'board-view-lists'); //true
location.reload();
Utils.reload();
} else if (view === 'board-view-cal') {
window.localStorage.setItem('boardView', 'board-view-cal'); //true
location.reload();
Utils.reload();
} else {
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
location.reload();
Utils.reload();
}
},
@@ -39,7 +46,7 @@ Utils = {
return 'board-view-cal';
} else {
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
location.reload();
Utils.reload();
return 'board-view-swimlanes';
}
},
@@ -64,7 +71,7 @@ Utils = {
setMyCardsSort(sort) {
window.localStorage.setItem('myCardsSort', sort);
location.reload();
Utils.reload();
},
archivedBoardIds() {
@@ -87,7 +94,7 @@ Utils = {
setDueCardsView(view) {
window.localStorage.setItem('dueCardsView', view);
location.reload();
Utils.reload();
},
// XXX We should remove these two methods
+1 -1
View File
@@ -24,7 +24,7 @@ AccountsTemplates.addFields([
AccountsTemplates.configure({
defaultLayout: 'userFormsLayout',
defaultContentRegion: 'content',
confirmPassword: false,
confirmPassword: true,
enablePasswordChange: true,
sendVerificationEmail: true,
showForgotPasswordLink: true,
+43 -9
View File
@@ -166,6 +166,9 @@ services:
#- MAIL_URL=smtp://user:pass@mailserver.example.com:25/
- MAIL_URL=smtp://<mail_url>:25/?ignoreTLS=true&tls={rejectUnauthorized:false}
- MAIL_FROM=Wekan Notifications <noreply.wekan@mydomain.com>
#- MAIL_SERVICE=Outlook365
#- MAIL_SERVICE_USER=firstname.lastname@hotmail.com
#- MAIL_SERVICE_PASSWORD=SecretPassword
#---------------------------------------------------------------
# ==== OPTIONAL: MONGO OPLOG SETTINGS =====
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-378343587
@@ -440,9 +443,47 @@ services:
# The host server for the LDAP server
#- LDAP_HOST=localhost
#
#-----------------------------------------------------------------
# ==== LDAP AD Simple Auth ====
#
# Set to true, if you want to connect with Active Directory by Simple Authentication.
# When using AD Simple Auth, LDAP_BASEDN is not needed.
#
# Example:
#- LDAP_AD_SIMPLE_AUTH=true
#
# === LDAP User Authentication ===
#
# a) Option to login to the LDAP server with the user's own username and password, instead of
# an administrator key. Default: false (use administrator key).
#
# b) When using AD Simple Auth, set to true, when login user is used for binding,
# and LDAP_BASEDN is not needed.
#
# Example:
#- LDAP_USER_AUTHENTICATION=true
#
# Which field is used to find the user for the user authentication. Default: uid.
#- LDAP_USER_AUTHENTICATION_FIELD=uid
#
# === LDAP Default Domain ===
#
# a) In case AD SimpleAuth is configured, the default domain is appended to the given
# loginname for creating the correct username for the bind request to AD.
#
# b) The default domain of the ldap it is used to create email if the field is not map
# correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
#
# Example :
#- LDAP_DEFAULT_DOMAIN=mydomain.com
#
#-----------------------------------------------------------------
# ==== LDAP BASEDN Auth ====
#
# The base DN for the LDAP Tree
#- LDAP_BASEDN=ou=user,dc=example,dc=org
#
#-----------------------------------------------------------------
# Fallback on the default authentication method
#- LDAP_LOGIN_FALLBACK=false
#
@@ -493,12 +534,6 @@ services:
# Reject Unauthorized Certificate
#- LDAP_REJECT_UNAUTHORIZED=false
#
# Option to login to the LDAP server with the user's own username and password, instead of an administrator key. Default: false (use administrator key).
#- LDAP_USER_AUTHENTICATION=true
#
# Which field is used to find the user for the user authentication. Default: uid.
#- LDAP_USER_AUTHENTICATION_FIELD=uid
#
# Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
#- LDAP_USER_SEARCH_FILTER=
#
@@ -564,9 +599,8 @@ services:
#
#- LDAP_SYNC_GROUP_ROLES=
#
# The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#- LDAP_DEFAULT_DOMAIN=mydomain.com
# The default domain of the ldap it is used to create email if the field is not map correctly
# with the LDAP_SYNC_USER_DATA_FIELDMAP is defined in setting LDAP_DEFAULT_DOMAIN above.
#
# Enable/Disable syncing of admin status based on ldap groups:
#- LDAP_SYNC_ADMIN_STATUS=true
+6
View File
@@ -0,0 +1,6 @@
dependencies:
- name: mongodb
repository: https://charts.bitnami.com/bitnami
version: 10.0.5
digest: sha256:f6520f39b687cb52574ec2fda514662ce913665c0fd2391b68fdb4d2eb059497
generated: "2021-07-27T22:16:39.945592552+02:00"
+20 -10
View File
@@ -1,14 +1,24 @@
name: wekan
version: 1.0.3
apiVersion: v1
apiVersion: v2
appVersion: "5.64"
dependencies:
- condition: mongodb.enabled
name: mongodb
repository: https://charts.bitnami.com/bitnami
version: 10.0.x
description: Open Source kanban
home: https://wekan.github.io/
home: https://wekan.github.io
icon: https://wekan.github.io/wekan-logo.svg
keywords:
- kanban
maintainers:
- email: github@randall.cc
name: technotaff
- email: jiangyt.cn@gmail.com
name: jiangytcn
- email: varac@varac.net
name: varac
name: wekan
sources:
- https://github.com/wekan/wekan
maintainers:
- name: technotaff
email: github@randall.cc
- name: jiangytcn
email: jiangyt.cn@gmail.com
engine: gotpl
type: application
version: 1.1.0
-5
View File
@@ -1,5 +0,0 @@
dependencies:
- name: mongodb
version: 10.0.x
repository: "https://charts.bitnami.com/bitnami"
condition: mongodb.enabled
+6
View File
@@ -8,6 +8,9 @@ metadata:
component: wekan
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
{{- if .Values.deploymentLabels }}
{{- toYaml .Values.deploymentLabels | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
@@ -22,6 +25,9 @@ spec:
app: {{ template "wekan.name" . }}
component: wekan
release: {{ .Release.Name }}
{{- if .Values.podLabels }}
{{- toYaml .Values.podLabels | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ template "wekan.serviceAccountName" . }}
containers:
+7 -1
View File
@@ -14,7 +14,7 @@ serviceAccounts:
##
image:
repository: quay.io/wekan/wekan
tag: latest
tag: v5.64
pullPolicy: IfNotPresent
## Configuration for wekan component
@@ -103,6 +103,12 @@ autoscaling:
##
targetCPUUtilizationPercentage: 80
# Optional custom labels for the deployment resource.
deploymentLabels: {}
# Optional custom labels for the pods created by the deployment.
podLabels: {}
# ------------------------------------------------------------------------------
# MongoDB:
# ------------------------------------------------------------------------------
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-template": "Add Template",
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add Cover",
"add-label": "Add Label",
"add-list": "Add List",
@@ -119,6 +121,8 @@
"archives": "Archive",
"template": "Template",
"templates": "Templates",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Delete Card?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "إضافة مرفق",
"add-board": "إضافة لوحة",
"add-template": "Add Template",
"add-card": "إضافة بطاقة",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "إضافة مهمة فرعية",
"add-checklist": "إضافة قائمة تدقيق",
"add-checklist-item": "إضافة عنصر إلى قائمة التحقق",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "إضافة غلاف",
"add-label": "إضافة ملصق",
"add-list": "إضافة قائمة",
@@ -119,6 +121,8 @@
"archives": "أرشيف",
"template": "نموذج",
"templates": "نماذج",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "تعيين عضو",
"attached": "أُرفق)",
"attachment": "مرفق",
@@ -155,6 +159,8 @@
"card-delete-notice": "هذا حذف أبديّ . سوف تفقد كل الإجراءات المنوطة بهذه البطاقة",
"card-delete-pop": "سيتم إزالة جميع الإجراءات من تبعات النشاط، وأنك لن تكون قادرا على إعادة فتح البطاقة. لا يوجد التراجع.",
"card-delete-suggest-archive": "يمكنك نقل بطاقة إلى الأرشيف لإزالتها من اللوحة والمحافظة على النشاط.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "مستحق",
"card-due-on": "مستحق في",
"card-spent": "امضى وقتا",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "حذف البطاقة ?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "إجراءات على البطاقة",
"cardLabelsPopup-title": "علامات",
"cardMembersPopup-title": "أعضاء",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "تغيير تاريخ البدء",
"editCardDueDatePopup-title": "تغيير تاريخ الاستحقاق",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "تعديل العلامة",
"editNotificationPopup-title": "تصحيح الإشعار",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "نعم",
"no": "لا",
"accounts": "الحسابات",
"accounts-allowEmailChange": "السماح بتغيير البريد الإلكتروني",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Добави прикачен файл",
"add-board": "Добави Табло",
"add-template": "Add Template",
"add-card": "Добави карта",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Добави подзадача",
"add-checklist": "Добави списък със задачи",
"add-checklist-item": "Добави точка към списъка със задачи",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Добави корица",
"add-label": "Добави етикет",
"add-list": "Добави списък",
@@ -119,6 +121,8 @@
"archives": "Архив",
"template": "Шаблон",
"templates": "Шаблони",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Възложи на член от екипа",
"attached": "прикачен",
"attachment": "Прикаченн файл",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "Можете да преместите картата в Архива, за да я премахнете от Таблото и така да запазите активността в него.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Готова за",
"card-due-on": "Готова за",
"card-spent": "Изработено време",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Желаете да изтриете картата?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Опции",
"cardLabelsPopup-title": "Етикети",
"cardMembersPopup-title": "Членове",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Промени началната дата",
"editCardDueDatePopup-title": "Промени датата за готовност",
"editCustomFieldPopup-title": "Промени Полето",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Промени изработеното време",
"editLabelPopup-title": "Промяна на Етикета",
"editNotificationPopup-title": "Промени известията",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Експортиране на Табло",
"exportCardPopup-title": "Export card",
"sort": "Сортирай",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Покажи име на поле на мини-картата",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Да",
"no": "Не",
"accounts": "Профили",
"accounts-allowEmailChange": "Разреши промяна на имейла",
"accounts-allowUserNameChange": "Позволи смяна на потребителско име",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Създаден на",
"modifiedAt": "Modified at",
"verified": "Потвърден",
@@ -821,6 +834,7 @@
"error-undefined": "Нещо се обърка",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Копирай таблото",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-template": "Add Template",
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Ouzphenn ur golo",
"add-label": "Add Label",
"add-list": "Add List",
@@ -119,6 +121,8 @@
"archives": "Archive",
"template": "Template",
"templates": "Templates",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Diverkañ ar gartenn ?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Izili",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Afegeix adjunt",
"add-board": "Afegeix Tauler",
"add-template": "Add Template",
"add-card": "Afegeix Fitxa",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Afegir Subtasca",
"add-checklist": "Afegeix checklist",
"add-checklist-item": "Afegeix un ítem al checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Afegeix coberta",
"add-label": "Afegeix etiqueta",
"add-list": "Afegeix llista",
@@ -119,6 +121,8 @@
"archives": "Desa",
"template": "Plantilla",
"templates": "Plantilles",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assignar membre",
"attached": "adjuntat",
"attachment": "Adjunt",
@@ -155,6 +159,8 @@
"card-delete-notice": "L'esborrat és permanent. Perdreu totes les accions associades a aquesta fitxa.",
"card-delete-pop": "Totes les accions s'eliminaran de l'activitat i no podreu tornar a obrir la fitxa. No es pot desfer.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Finalitza",
"card-due-on": "Finalitza a",
"card-spent": "Temps Dedicat",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Esborrar fitxa?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Accions de fitxes",
"cardLabelsPopup-title": "Etiquetes",
"cardMembersPopup-title": "Membres",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Canvia data d'inici",
"editCardDueDatePopup-title": "Canvia data de finalització",
"editCustomFieldPopup-title": "Modificar camp",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Canvia temps dedicat",
"editLabelPopup-title": "Canvia etiqueta",
"editNotificationPopup-title": "Edita la notificació",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Exporta tauler",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Si",
"no": "No",
"accounts": "Comptes",
"accounts-allowEmailChange": "Permet modificar correu electrònic",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Creat ",
"modifiedAt": "Modified at",
"verified": "Verificat",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "editoval(a) datum ukončení na %s z %s",
"add-attachment": "Přidat přílohu",
"add-board": "Přidat tablo",
"add-template": "Přidat šablonu",
"add-card": "Přidat kartu",
"add-card-to-top-of-list": "Přidat kartu na začátek seznamu",
"add-card-to-bottom-of-list": "Přidat kartu na konec seznamu",
@@ -88,6 +89,7 @@
"add-subtask": "Přidat Podúkol",
"add-checklist": "Přidat zaškrtávací seznam",
"add-checklist-item": "Přidat položku do zaškrtávacího seznamu",
"convertChecklistItemToCardPopup-title": "Převést na kartu",
"add-cover": "Přidat obal",
"add-label": "Přidat štítek",
"add-list": "Přidat sloupec",
@@ -119,6 +121,8 @@
"archives": "Archiv",
"template": "Šablona",
"templates": "Šablony",
"template-container": "Kontejner šablony",
"add-template-container": "Přidat kontejner šablony",
"assign-member": "Přiřadit člena",
"attached": "přiloženo",
"attachment": "Příloha",
@@ -155,6 +159,8 @@
"card-delete-notice": "Smazání je trvalé. Přijdete o všechny akce asociované s touto kartou.",
"card-delete-pop": "Všechny akce budou odstraněny z kanálu aktivity a nebude možné kartu obnovit. Toto nelze vrátit zpět.",
"card-delete-suggest-archive": "Můžete přesunout kartu do archivu pro odstranění z tabla a zachovat aktivitu.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Termín",
"card-due-on": "Do",
"card-spent": "Strávený čas",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Smazat plánovací poker?",
"poker-delete-pop": "Smazání je trvalé. Přijdete o všechny akce asociované s tímto plánovacím pokerem.",
"cardDeletePopup-title": "Smazat kartu?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Akce karty",
"cardLabelsPopup-title": "Štítky",
"cardMembersPopup-title": "Členové",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Změnit datum startu úkolu",
"editCardDueDatePopup-title": "Změnit datum dokončení úkolu",
"editCustomFieldPopup-title": "Upravit pole",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Změnit strávený čas",
"editLabelPopup-title": "Změnit štítek",
"editNotificationPopup-title": "Změnit notifikace",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Exportovat tablo",
"exportCardPopup-title": "Exportovat kartu",
"sort": "řadit",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Kliknout pro třídění seznamu",
"list-sort-by": "řadit seznam podle",
"list-label-modifiedAt": "Čas posledního přístupu",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Přidat pole na nové karty",
"always-field-on-card": "Přidat pole na všechny karty",
"showLabel-field-on-card": "Ukázat štítek pole na minikartě",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Ano",
"no": "Ne",
"accounts": "Účty",
"accounts-allowEmailChange": "Povolit změnu Emailu",
"accounts-allowUserNameChange": "Povolit změnu uživatelského jména",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Vytvořeno v",
"modifiedAt": "Modifikováno",
"verified": "Ověřen",
@@ -821,6 +834,7 @@
"error-undefined": "Něco se pokazilo",
"error-ldap-login": "Během přihlašování nastala chyba",
"display-authentication-method": "Zobraz způsob ověřování",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Zobraz způsob ověřování",
"duplicate-board": "Duplikovat tablo",
"org-number": "Počet organizací je:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximalizovat kartu",
"minimize-card": "Minimalizovat kartu"
"minimize-card": "Minimalizovat kartu",
"delete-org-warning-message": "Tuto organizaci není možné smazat, protože do ní patří uživatel(é)",
"delete-team-warning-message": "Tento tým není možné smazat, protože do nej patří uživatel(é)"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Tilføj vedhæftning",
"add-board": "Tilføj tavle",
"add-template": "Add Template",
"add-card": "Tilføj kort",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Tilføj delopgave",
"add-checklist": "Tilføj tjekliste",
"add-checklist-item": "Tilføj et element til tjeklisten",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Tilføj omslag",
"add-label": "Tilføj etikette",
"add-list": "Tilføj liste",
@@ -119,6 +121,8 @@
"archives": "Arkiv",
"template": "Skabelon",
"templates": "Skabeloner",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Tilknyt medlem",
"attached": "vedhæftet",
"attachment": "Vedhæftning",
@@ -155,6 +159,8 @@
"card-delete-notice": "Sletning vil være permanent. Du mister alle handlinger knyttet til dette kort.",
"card-delete-pop": "Alle handlinger vil blive fjernet fra aktivitetsfeedet, og du kan ikke genåbne kortet. Det kan ikke omgøres.",
"card-delete-suggest-archive": "Du kan flytte et kort til arkivet for at fjerne det fra tavlen, og bevare aktiviteten.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Forfalder",
"card-due-on": "Forfaldsdato",
"card-spent": "Anvendt tid",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Slet kort?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Handlinger for kort",
"cardLabelsPopup-title": "Etiketter",
"cardMembersPopup-title": "Medlemmer",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Skift startdato",
"editCardDueDatePopup-title": "Skift forfaldsdato",
"editCustomFieldPopup-title": "Redigér felt",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Tilpas forbrugt tid",
"editLabelPopup-title": "Skift etikette",
"editNotificationPopup-title": "Redigér notifikation",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Eksportér tavle",
"exportCardPopup-title": "Export card",
"sort": "Sortér",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Klik for at sortere listen",
"list-sort-by": "Sortér listen efter:",
"list-label-modifiedAt": "Senest tilgået:",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Vis feltetikette på minikort",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Ja",
"no": "Nej",
"accounts": "Konti",
"accounts-allowEmailChange": "Tillad ændring af e-mail",
"accounts-allowUserNameChange": "Tillad ændring af brugernavn",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Oprettet per",
"modifiedAt": "Modified at",
"verified": "Verificeret",
@@ -821,6 +834,7 @@
"error-undefined": "Noget gik galt",
"error-ldap-login": "Fejl under forsøg på login",
"display-authentication-method": "Vis godkendelsesmetode",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Standard for godkendelsesmetode",
"duplicate-board": "Duplikér tavle",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+19 -3
View File
@@ -81,6 +81,7 @@
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
"add-attachment": "Datei anhängen",
"add-board": "Board hinzufügen",
"add-template": "Vorlage hinzufügen",
"add-card": "Karte hinzufügen",
"add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen",
"add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen",
@@ -88,6 +89,7 @@
"add-subtask": "Teilaufgabe hinzufügen",
"add-checklist": "Checkliste hinzufügen",
"add-checklist-item": "Element zu Checkliste hinzufügen",
"convertChecklistItemToCardPopup-title": "in Karte konvertieren",
"add-cover": "Cover hinzufügen",
"add-label": "Label hinzufügen",
"add-list": "Liste hinzufügen",
@@ -119,6 +121,8 @@
"archives": "Archiv",
"template": "Vorlage",
"templates": "Vorlagen",
"template-container": "Vorlagen-Container",
"add-template-container": "Vorlagen-Container hinzufügen",
"assign-member": "Mitglied zuweisen",
"attached": "angehängt",
"attachment": "Anhang",
@@ -155,6 +159,8 @@
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "fällig",
"card-due-on": "fällig am",
"card-spent": "Aufgewendete Zeit",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Planning Poker löschen ?",
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planning Poker verlieren.",
"cardDeletePopup-title": "Karte löschen?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
@@ -260,7 +267,7 @@
"color-white": "Weiss",
"color-yellow": "gelb",
"unset-color": "Nicht festgelegt",
"comment": "Kommentar",
"comment": "Kommentar speichern",
"comment-placeholder": "Kommentar schreiben",
"comment-only": "Nur Kommentare",
"comment-only-desc": "Kann Karten nur kommentieren.",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Startdatum ändern",
"editCardDueDatePopup-title": "Fälligkeitsdatum ändern",
"editCustomFieldPopup-title": "Feld bearbeiten",
"addReactionPopup-title": "Bewertung hinzufügen",
"editCardSpentTimePopup-title": "Aufgewendete Zeit ändern",
"editLabelPopup-title": "Label ändern",
"editNotificationPopup-title": "Benachrichtigung ändern",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Board exportieren",
"exportCardPopup-title": "Karte exportieren",
"sort": "Sortieren",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Zum Sortieren der Liste klicken",
"list-sort-by": "Sortieren der Liste nach:",
"list-label-modifiedAt": "Letzte Zugriffszeit",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Füge Feld neuen Karten hinzu",
"always-field-on-card": "Füge Feld allen Karten hinzu",
"showLabel-field-on-card": "Feldbezeichnung auf Minikarte anzeigen",
"showSum-field-on-list": "Zeige Summe der Felder oben in der Liste",
"yes": "Ja",
"no": "Nein",
"accounts": "Konten",
"accounts-allowEmailChange": "Ändern der E-Mailadresse erlauben",
"accounts-allowUserNameChange": "Ändern des Benutzernamens erlauben",
"tableVisibilityMode-allowPrivateOnly": "Sichtbarkeit von Boards: Erlaube nur private Boards",
"tableVisibilityMode": "Sichtbarkeit von Boards",
"createdAt": "Erstellt am",
"modifiedAt": "Geändert am",
"verified": "Geprüft",
@@ -821,6 +834,7 @@
"error-undefined": "Etwas ist schief gelaufen",
"error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten",
"display-authentication-method": "Anzeige Authentifizierungsverfahren",
"oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche",
"default-authentication-method": "Standardauthentifizierungsverfahren",
"duplicate-board": "Board duplizieren",
"org-number": "Die Anzahl an Organisationen ist:",
@@ -947,7 +961,7 @@
"operator-created": "erstellt",
"operator-modified": "geändert",
"operator-sort": "sortieren",
"operator-comment": "Kommentar",
"operator-comment": "kommentieren",
"operator-has": "hat",
"operator-limit": "Begrenzung",
"predicate-archived": "archiviert",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Karte maximieren",
"minimize-card": "Karte minimieren"
"minimize-card": "Karte minimieren",
"delete-org-warning-message": "Diese Organisation kann nicht gelöscht werden. Zumindest ein Benutzer ist ihr noch zugehörig.",
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden. Zumindest ein Benutzer ist ihm noch zugehörig."
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
"add-attachment": "Datei anhängen",
"add-board": "neues Board",
"add-template": "Vorlage hinzufügen",
"add-card": "Karte hinzufügen",
"add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen",
"add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen",
@@ -88,6 +89,7 @@
"add-subtask": "Teilaufgabe hinzufügen",
"add-checklist": "Checkliste hinzufügen",
"add-checklist-item": "Element zu Checkliste hinzufügen",
"convertChecklistItemToCardPopup-title": "Zu Karte umwandeln",
"add-cover": "Cover hinzufügen",
"add-label": "Label hinzufügen",
"add-list": "Liste hinzufügen",
@@ -119,6 +121,8 @@
"archives": "Archiv",
"template": "Vorlage",
"templates": "Vorlagen",
"template-container": "Vorlagen-Container",
"add-template-container": "Vorlagen-Container hinzufügen",
"assign-member": "Mitglied zuweisen",
"attached": "angehängt",
"attachment": "Anhang",
@@ -155,6 +159,8 @@
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Fällig",
"card-due-on": "Fällig am",
"card-spent": "Aufgewendete Zeit",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Planungspoker löschen?",
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planungspoker verlieren.",
"cardDeletePopup-title": "Karte löschen?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Startdatum ändern",
"editCardDueDatePopup-title": "Fälligkeitsdatum ändern",
"editCustomFieldPopup-title": "Feld bearbeiten",
"addReactionPopup-title": "Reaktion hinzufügen",
"editCardSpentTimePopup-title": "Aufgewendete Zeit ändern",
"editLabelPopup-title": "Label ändern",
"editNotificationPopup-title": "Benachrichtigung ändern",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Board exportieren",
"exportCardPopup-title": "Karte exportieren",
"sort": "Sortieren",
"sorted": "Sortiert",
"remove-sort": "Sortierung entfernen",
"sort-desc": "Zum Sortieren der Liste klicken",
"list-sort-by": "Sortieren der Liste nach:",
"list-label-modifiedAt": "Letzte Zugriffszeit",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Füge Feld neuen Karten hinzu",
"always-field-on-card": "Füge Feld allen Karten hinzu",
"showLabel-field-on-card": "Feldbezeichnung auf Minikarte anzeigen",
"showSum-field-on-list": "Zeige Summe der Felder oben in der Liste",
"yes": "Ja",
"no": "Nein",
"accounts": "Konten",
"accounts-allowEmailChange": "Ändern der E-Mailadresse erlauben",
"accounts-allowUserNameChange": "Ändern des Benutzernamens erlauben",
"tableVisibilityMode-allowPrivateOnly": "Board-Sichtbarkeit: Erlaube ausschließlich private Boards",
"tableVisibilityMode": "Sichtbarkeit der Boards",
"createdAt": "Erstellt am",
"modifiedAt": "Geändert am",
"verified": "Geprüft",
@@ -821,6 +834,7 @@
"error-undefined": "Etwas ist schief gelaufen",
"error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten",
"display-authentication-method": "Anzeige Authentifizierungsverfahren",
"oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche",
"default-authentication-method": "Standardauthentifizierungsverfahren",
"duplicate-board": "Board duplizieren",
"org-number": "Die Anzahl an Organisationen ist:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout-Warte-Symbol",
"Wave": "Wellen-Warte-Symbol",
"maximize-card": "Karte maximieren",
"minimize-card": "Karte minimieren"
"minimize-card": "Karte minimieren",
"delete-org-warning-message": "Diese Organisation kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört.",
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört."
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "η ημερομηνία λήξης άλλαξε σε %s από %s",
"add-attachment": "Προσθήκη Συνημμένου",
"add-board": "Προσθήκη Πίνακα",
"add-template": "Add Template",
"add-card": "Προσθήκη Κάρτας",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Προσθήκη Υποεργασίας",
"add-checklist": "Προσθήκη Λίστας ελέγχου",
"add-checklist-item": "Προσθήκη ενός στοιχείου στη λίστα ελέγχου - checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add Cover",
"add-label": "Προσθήκη Ετικέτας",
"add-list": "Προσθήκη Λίστας",
@@ -119,6 +121,8 @@
"archives": "Αρχείο",
"template": "Πρότυπο",
"templates": "Πρότυπα",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Ανάθεση μέλους",
"attached": "επισυνάφθηκε",
"attachment": "Συνημμένο",
@@ -155,6 +159,8 @@
"card-delete-notice": "Η Διαγραφή είναι μόνιμη. Θα χάσετε όλες τις ενέργειες που σχετίζονται με αυτή την κάρτα. ",
"card-delete-pop": "Όλες οι ενέργειες θα αφαιρεθούν από τη ροή δραστηριοτήτων και δε θα μπορείτε να ξανανοίξετε την κάρτα. Δεν υπάρχει δυνατότητα επαναφοράς.",
"card-delete-suggest-archive": "Μπορείτε να μετακινήσετε μια κάρτα στο Αρχείο για να την αφαιρέσετε από τον πίνακα και να διατηρήσετε τη δραστηριότητα.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Έως",
"card-due-on": "Έως τις",
"card-spent": "Δαπανηθείς Χρόνος",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Διαγραφή Κάρτας;",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Ενέργειες κάρτας",
"cardLabelsPopup-title": "Ετικέτες",
"cardMembersPopup-title": "Μέλοι",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Αλλαγή ημερομηνίας έναρξης",
"editCardDueDatePopup-title": "Αλλαγή ημερομηνίας λήξης προθεσμίας",
"editCustomFieldPopup-title": "Επεξεργασία Πεδίου",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Αλλαγή δαπανηθέντος χρόνου",
"editLabelPopup-title": "Αλλαγή Ετικέτας",
"editNotificationPopup-title": "Επεξεργασία Ειδοποίησης",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Εξαγωγή πίνακα",
"exportCardPopup-title": "Export card",
"sort": "Ταξινόμηση",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Κάντε κλικ για να ταξινομήστε τη λίστα",
"list-sort-by": "Ταξινόμηση λίστας βάσει:",
"list-label-modifiedAt": "Τελευταία Προσπέλαση",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Ναι",
"no": "Όχι",
"accounts": "Λογαριασμοί",
"accounts-allowEmailChange": "Επίτρεψε Αλλαγή Email",
"accounts-allowUserNameChange": "Επίτρεψε Αλλαγή Ονόματος χρήστη",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Δημιουργήθηκε στις",
"modifiedAt": "Modified at",
"verified": "Επιβεβαιώθηκε",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-template": "Add Template",
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add Cover",
"add-label": "Add Label",
"add-list": "Add List",
@@ -119,6 +121,8 @@
"archives": "Archive",
"template": "Template",
"templates": "Templates",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Delete Card?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+1073
View File
File diff suppressed because it is too large. Load diff
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-template": "Add Template",
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add Cover",
"add-label": "Add Label",
"add-list": "Add List",
@@ -119,6 +121,8 @@
"archives": "Archive",
"template": "Template",
"templates": "Templates",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Delete Card?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode" : "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is: ",
@@ -1054,5 +1068,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-template": "Add Template",
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add Cover",
"add-label": "Add Label",
"add-list": "Add List",
@@ -119,6 +121,8 @@
"archives": "Arkivi",
"template": "Template",
"templates": "Templates",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Delete Card?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Etikedoj",
"cardMembersPopup-title": "Membroj",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Redakti komencdaton",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Ŝanĝi etikedon",
"editNotificationPopup-title": "Edit Notification",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Jes",
"no": "Ne",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Agregar Adjunto",
"add-board": "Agregar Tablero",
"add-template": "Add Template",
"add-card": "Agregar Tarjeta",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Agregar Subtarea",
"add-checklist": "Agregar Lista de Tareas",
"add-checklist-item": "Agregar ítem a lista de tareas",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Agregar Portadas",
"add-label": "Agregar Etiqueta",
"add-list": "Agregar Lista",
@@ -119,6 +121,8 @@
"archives": "Archivar",
"template": "Plantilla",
"templates": "Plantillas",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Asignar miembro",
"attached": "adjunto(s)",
"attachment": "Adjunto",
@@ -155,6 +159,8 @@
"card-delete-notice": "Borrar es permanente. Perderás todas las acciones asociadas con esta tarjeta.",
"card-delete-pop": "Todas las acciones van a ser eliminadas del agregador de actividad y no podrás re-abrir la tarjeta. No hay deshacer.",
"card-delete-suggest-archive": "Podés mover una tarjeta al Archivo para eliminarla del tablero y preservar la actividad.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Vence",
"card-due-on": "Vence en",
"card-spent": "Tiempo Empleado",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "¿Borrar Tarjeta?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Acciones de la Tarjeta",
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Miembros",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Cambiar fecha de inicio",
"editCardDueDatePopup-title": "Cambiar fecha de vencimiento",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Cambiar tiempo empleado",
"editLabelPopup-title": "Cambiar Etiqueta",
"editNotificationPopup-title": "Editar Notificación",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Exportar tablero",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Si",
"no": "No",
"accounts": "Cuentas",
"accounts-allowEmailChange": "Permitir Cambio de Email",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Creado en",
"modifiedAt": "Modified at",
"verified": "Verificado",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Añadir adjunto",
"add-board": "Añadir tablero",
"add-template": "Add Template",
"add-card": "Añadir una tarjeta",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Añadir subtarea",
"add-checklist": "Añadir una lista de verificación",
"add-checklist-item": "Añadir un elemento a la lista de verificación",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Añadir portada",
"add-label": "Añadir una etiqueta",
"add-list": "Añadir una lista",
@@ -119,6 +121,8 @@
"archives": "Archivo",
"template": "Plantilla",
"templates": "Plantillas",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Asignar miembros",
"attached": "adjuntado",
"attachment": "Adjunto",
@@ -155,6 +159,8 @@
"card-delete-notice": "la eliminación es permanente. Perderás todas las acciones asociadas a esta tarjeta.",
"card-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la tarjeta. Esta acción no puede deshacerse.",
"card-delete-suggest-archive": "Puedes mover una tarjeta al Archivo para quitarla del tablero y preservar la actividad.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Vence",
"card-due-on": "Vence el",
"card-spent": "Tiempo consumido",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Miembros",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Cambiar la fecha de comienzo",
"editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
"editCustomFieldPopup-title": "Editar el campo",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
"editLabelPopup-title": "Cambiar la etiqueta",
"editNotificationPopup-title": "Editar las notificaciones",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Exportar el tablero",
"exportCardPopup-title": "Export card",
"sort": "Ordenar",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click para ordenar la lista",
"list-sort-by": "Ordenar la lista por:",
"list-label-modifiedAt": "Hora de último acceso",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Mostrar etiquetas de campos en la minitarjeta.",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Sí",
"no": "No",
"accounts": "Cuentas",
"accounts-allowEmailChange": "Permitir cambiar el correo electrónico",
"accounts-allowUserNameChange": "Permitir cambiar el nombre de usuario",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Fecha de alta",
"modifiedAt": "Modified at",
"verified": "Verificado",
@@ -821,6 +834,7 @@
"error-undefined": "Algo no está bien",
"error-ldap-login": "Ocurrió un error al intentar acceder",
"display-authentication-method": "Mostrar el método de autenticación",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Método de autenticación por defecto",
"duplicate-board": "Duplicar tablero",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-template": "Add Template",
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add Cover",
"add-label": "Add Label",
"add-list": "Add List",
@@ -119,6 +121,8 @@
"archives": "Archive",
"template": "Template",
"templates": "Templates",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Delete Card?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-template": "Add Template",
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add Cover",
"add-label": "Add Label",
"add-list": "Add List",
@@ -119,6 +121,8 @@
"archives": "Archive",
"template": "Template",
"templates": "Templates",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -155,6 +159,8 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Delete Card?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Created at",
"modifiedAt": "Modified at",
"verified": "Verified",
@@ -821,6 +834,7 @@
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
+17 -1
View File
@@ -81,6 +81,7 @@
"activity-endDate": "editada la fecha de finalización a %s de %s",
"add-attachment": "Agregar adjunto",
"add-board": "Agregar tablero",
"add-template": "Add Template",
"add-card": "Agregar una tarjeta",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
@@ -88,6 +89,7 @@
"add-subtask": "Agregar subtarea",
"add-checklist": "Agregar lista de comprobación",
"add-checklist-item": "Agregar un elemento a la lista de comprobación",
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Agregar portada",
"add-label": "Agregar una etiqueta",
"add-list": "Agregar una lista",
@@ -119,6 +121,8 @@
"archives": "Archivo",
"template": "Plantilla",
"templates": "Plantillas",
"template-container": "Template Container",
"add-template-container": "Add Template Container",
"assign-member": "Asignar miembros",
"attached": "adjuntado",
"attachment": "Adjunto",
@@ -155,6 +159,8 @@
"card-delete-notice": "la eliminación es permanente. Perderá todas las acciones asociadas a esta tarjeta.",
"card-delete-pop": "Se eliminarán todas las acciones de la fuente de actividades y no se podrá volver a abrir la tarjeta. Esta acción no puede deshacerse.",
"card-delete-suggest-archive": "Puede mover una tarjeta al archivo para quitarla del tablero y preservar la actividad.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-due": "Vence",
"card-due-on": "Vence el",
"card-spent": "Tiempo consumido",
@@ -203,6 +209,7 @@
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
"cardArchivePopup-title": "Archive Card?",
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Miembros",
@@ -318,6 +325,7 @@
"editCardStartDatePopup-title": "Cambiar la fecha de inicio",
"editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
"editCustomFieldPopup-title": "Editar el campo",
"addReactionPopup-title": "Add reaction",
"editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
"editLabelPopup-title": "Cambiar la etiqueta",
"editNotificationPopup-title": "Editar las notificaciones",
@@ -364,6 +372,8 @@
"exportBoardPopup-title": "Exportar tablero",
"exportCardPopup-title": "Export card",
"sort": "Ordenar",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Clic para ordenar lista",
"list-sort-by": "Ordenar la lista por:",
"list-label-modifiedAt": "Hora de último acceso",
@@ -647,11 +657,14 @@
"automatically-field-on-card": "Add field to new cards",
"always-field-on-card": "Add field to all cards",
"showLabel-field-on-card": "Mostrar etiquetas de campos en la minitarjeta.",
"showSum-field-on-list": "Show sum of fields at top of list",
"yes": "Sí",
"no": "No",
"accounts": "Cuentas",
"accounts-allowEmailChange": "Permitir cambiar el correo electrónico",
"accounts-allowUserNameChange": "Permitir cambiar el nombre de usuario",
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
"tableVisibilityMode": "Boards visibility",
"createdAt": "Creado en",
"modifiedAt": "Modified at",
"verified": "Verificado",
@@ -821,6 +834,7 @@
"error-undefined": "Algo no está bien",
"error-ldap-login": "Ocurrió un error al intentar acceder",
"display-authentication-method": "Mostrar el método de autenticación",
"oidc-button-text": "Customize the OIDC button text",
"default-authentication-method": "Método de autenticación por defecto",
"duplicate-board": "Duplicar tablero",
"org-number": "El número de organizaciones es:",
@@ -1053,5 +1067,7 @@
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card"
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
}
Loaded 100 of 274 files, more files were not shown because too many files have changed in this diff. Show more