Compare commits

...
2741 Commits
Author SHA1 Message Date
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
Lauri Ojansivu c437c2048d v5.35 2021-06-14 15:35:23 +03:00
Lauri Ojansivu f80fcfd7c0 Updated dependencies.
Thanks to developers of dependencies !
2021-06-14 15:31:06 +03:00
Lauri Ojansivu e9670aa5cb Updated ChangeLog. 2021-06-14 15:14:39 +03:00
Lauri Ojansivu 164b6e9070 Part 2: Allow board members to use more of API. Please add issue (or pull request) if this allows too much.
Thanks to JayVii and xet7 !

Fixes #3862
2021-06-14 15:13:15 +03:00
Lauri Ojansivu 5af18809a7 Updated ChangeLog. 2021-06-14 15:04:55 +03:00
Lauri Ojansivu a719e8fda1 Allow board members to use more of API. Please add issue (or pull request) if this allows too much.
Thanks to JayVii and xet7 !

Fixes #3862
2021-06-14 15:01:37 +03:00
Lauri Ojansivu 50fa8a0743 Updated translations. 2021-06-14 14:31:27 +03: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
Lauri Ojansivu 9e160d2431 Updated ChangeLog. 2021-06-14 13:04:19 +03:00
Lauri Ojansivu 77cff95c07 Merge pull request #3863 from mfilser/card_details_maximize_fixes
Card details maximize fixes
2021-06-14 13:01:41 +03: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
Martin Filser b98a46b78c forms.styl, wrong indentation 2021-06-14 11:05:37 +02:00
Martin Filser 49e31707e5 Card Details, minicard is now hidden 2021-06-14 11:05:46 +02:00
Martin Filser 92122e1fdd Card Details, maximize and minimize of card works now 2021-06-14 11:05:42 +02:00
Martin Filser 7238a65a6f Card Details, more space at maximize icon 2021-06-14 11:05:37 +02:00
Martin Filser e68ccf8532 Card Details, maximize and minimize of icon works
- Card isn't maximized yet
2021-06-14 11:05:37 +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
Lauri Ojansivu 362fd86dbf Updated translations. 2021-06-13 17:56:30 +03:00
Lauri Ojansivu 8aba58188d Updated ChangeLog. 2021-06-13 15:51:49 +03:00
Lauri Ojansivu 41848dd99e Merge pull request #3861 from mfilser/manual_sort_number_0_accepted
Manuel sort number 0 accepted
2021-06-13 15:49:34 +03:00
Martin Filser f2fcfd6a47 Manuel sort number 0 accepted
Fixes: #3859
2021-06-13 10:39:44 +02:00
Lauri Ojansivu 33cdb906e2 Updated translations. 2021-06-13 08:49:08 +03:00
Lauri Ojansivu 19e73009b1 Updated ChangeLog. 2021-06-13 00:17:23 +03:00
Lauri Ojansivu 401e256d84 Updated translations. 2021-06-12 23:49:49 +03:00
Lauri Ojansivu e1cd87433a Updated ChangeLog. 2021-06-12 23:37:24 +03:00
Lauri Ojansivu 23e5e1e3bd Reduced Wekan bundle size from 636 MB to 467 MB by deleting all
dependencies of lucasantoniassi:accounts-lockout and including
only required 10 files.

Thank to xet7 !
2021-06-12 23:28:57 +03:00
Lauri Ojansivu 8f19f043a1 Updated translations. 2021-06-12 15:19:20 +03:00
Lauri Ojansivu b1f07149c0 Updated ChangeLog. 2021-06-12 15:16:38 +03:00
Lauri Ojansivu 17acf18848 Export card to PDF. Part 2.
Thanks to xet7 !
2021-06-12 15:15:36 +03:00
Lauri Ojansivu f52f589f7d Updated translations. 2021-06-12 15:01:48 +03:00
Lauri Ojansivu e3e25bc233 Updated ChangeLog. 2021-06-12 14:52:43 +03:00
Lauri Ojansivu a2f2ce1135 Export Card to PDF. In Progress.
Thanks to xet7 !
2021-06-12 14:50:18 +03:00
Lauri Ojansivu 90152ab9f5 Updated ChangeLog. 2021-06-12 13:07:27 +03:00
Lauri Ojansivu 7a25f542e8 Updated translations. 2021-06-12 12:58:53 +03:00
Lauri Ojansivu 8c57250243 Maximize Card. In Progress.
Thanks to xet7 !

Related #1574
2021-06-12 12:48:12 +03:00
Lauri Ojansivu 2e1eb1e224 Add border and update label colors for better visibility.
Thanks to xet7 !
2021-06-12 12:46:30 +03:00
Lauri Ojansivu b9a15e68de Updated translations. 2021-06-12 08:53:19 +03:00
Lauri Ojansivu a9d2e03b65 Updated translations. 2021-06-11 21:01:38 +03:00
Lauri Ojansivu d84b04dc35 Updated ChangeLog. 2021-06-11 20:56:23 +03:00
Lauri Ojansivu 7f3f082557 Added more translations for Wait Spinners.
Thanks to xet7 !
2021-06-11 20:54:52 +03:00
Lauri Ojansivu c810c68923 Updated translations. 2021-06-11 20:49:55 +03:00
Lauri Ojansivu 865a585c7f Updated ChangeLog. 2021-06-11 20:38:24 +03:00
Lauri Ojansivu 8703dd4229 Wait Spinners can now be translated. Added Wait Spinners docs:
https://github.com/wekan/wekan/wiki/Wait-Spinners

Thanks to xet7 !
2021-06-11 20:35:27 +03:00
Lauri Ojansivu d0c417b17d v5.34 2021-06-11 15:35:13 +03:00
Lauri Ojansivu d09151d8f3 Updated translations. 2021-06-11 15:22:55 +03:00
Lauri Ojansivu 01a28860fe Updated ChangeLog. 2021-06-11 15:19:45 +03:00
Lauri Ojansivu 488b765f95 Added remaining WAIT_SPINNER settings.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/3858
2021-06-11 15:17:43 +03:00
Lauri Ojansivu 8a21b69fb0 Updated translations. 2021-06-11 14:52:31 +03:00
Lauri Ojansivu eda3ed59df Updated ChangeLog. 2021-06-11 14:48:09 +03:00
Lauri Ojansivu 611ac0ab57 Merge pull request #3858 from mfilser/more_spinners_and_configureable_in_admin_panel
More spinners + configureable in admin panel
2021-06-11 14:42:38 +03:00
Martin Filser d485154a12 Spinner Double-Bounce now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 0caff7d5d5 Spinner Cube-Grid now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 6df7657c8e Spinner Scaleout now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 55d0f0bacd Spinner Rotateplane now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser a74fac4cbf Spinner Dot now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 8aa58c0b11 Spinner Cube now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 4b9f8ab2b1 Adding DEFAULT_WAIT_SPINNER to all environments 2021-06-11 13:34:33 +02:00
Martin Filser ba41533128 Default Spinner can be configured through environment variables 2021-06-11 13:34:33 +02:00
Martin Filser 38069c6d63 Spinner description insert in translation 2021-06-11 13:34:33 +02:00
Martin Filser 1d66058240 Spinner class in own .js library file 2021-06-11 13:34:33 +02:00
Martin Filser 43ac328e8a Spinner config is now reactive
- changed at boards as soon as changed in the settings
2021-06-11 13:34:33 +02:00
Martin Filser 7519abf3fe Spinner now configureable in the Settings 2021-06-11 13:34:33 +02:00
Martin Filser 849deae11e Spinners needs &nbsp;
- it's not formatted by Meteor well, \n is missing in the generated
  Javascript code, so i insert &nbsp; in the template
2021-06-11 13:34:33 +02:00
Martin Filser 06a2b08780 Spinner configureable in the source code 2021-06-11 13:34:33 +02:00
Martin Filser 4f9d3d8be5 List infinite scroll now always works
- before sometimes list scrolling stopped even the spinner was visible
  and scrolling was at the end of the list
2021-06-11 13:34:33 +02:00
Lauri Ojansivu ac3d658cb1 Merge pull request #3857 from mfilser/view_and_change_card_sort_number
View and change card sort number
2021-06-11 14:33:43 +03:00
Lauri Ojansivu 8f00191617 Updated ChangeLog. 2021-06-11 14:30:19 +03:00
Lauri Ojansivu 762391965e Try to fix BUG: Database error attempting to change a account.
Thanks to bbyszio and xet7 !

Fixes #3855
2021-06-11 14:28:25 +03:00
Lauri Ojansivu 0fa3a2729d Updated ChangeLog. 2021-06-11 13:55:33 +03:00
Martin Filser 54640bb125 Minicard, show sorting number if board config is enabled 2021-06-11 12:35:57 +02:00
Martin Filser 57d35a294d CardDetails sorting, only float number input possible (only working in an extra handler)
- defining in events() doesn't handle the return value and is ignored,
  maybe a bug in Blaze / Meteor.?
2021-06-11 12:35:57 +02:00
Martin Filser 39069b322d CardDetails sorting, only float number input possible 2021-06-11 12:35:57 +02:00
Martin Filser 540ce3a6ed CardDetails sorting number is displayed at card and can be modified (if configured) 2021-06-11 12:35:57 +02:00
Lauri Ojansivu ab22fb27ce Updated ChangeLog. 2021-06-11 13:35:06 +03:00
Lauri Ojansivu 0f564365f4 Merge pull request #3856 from mfilser/custom_fields_missing_after_adding_first_card
CustomFields were not created after adding 1 card
2021-06-11 13:33:26 +03:00
Lauri Ojansivu cccb7e4a39 Updated ChangeLog. 2021-06-11 13:16:20 +03:00
Lauri Ojansivu 1e837dec11 Fix Google SSO to access Wekan has not been working
by reverting Wekan v5.31 not-working fixes to OAUTH2_LOGIN_STYLE=redirect Has No Effect.

Thanks to unpokitodxfavor and xet7 !

Fixes #3854,
opens #3845
2021-06-11 13:08:23 +03:00
Martin Filser be3325ce35 CustomFields were not created after adding 1 card 2021-06-11 12:03:29 +02:00
Lauri Ojansivu c042d54714 Updated ChangeLog. 2021-06-11 12:59:20 +03:00
Lauri Ojansivu 77e2f95c66 Merge pull request #3852 from mfilser/development_in_docker_container
Development in docker container
2021-06-11 12:57:49 +03:00
Martin Filser 403b416b2a Development volumes now in the same folder
- It's easier for the development to have the files in the same folder
  than in an extra volume
2021-06-11 11:36:55 +02:00
Martin Filser b0901ccd01 Development uses now the same Mongo Version (4.4) 2021-06-11 11:36:55 +02:00
Martin Filser 6d2f8a97af Base Image of Development and Build are now the same
- libarchive-tools contains bsdtar. bsdtar is needed for meteor
  installation, it doesn't / or didn't work with docker and overlayfs.

  see also here:

  https://github.com/jshimko/meteor-launchpad/issues/39
  https://github.com/anchore/anchore-engine/issues/106
  https://github.com/coreos/bugs/issues/1095
2021-06-11 11:36:55 +02:00
Martin Filser bbd3324b79 ignore .git directory at docker build
- COPY copies the .git directory to the image. The docker build then
  stops with this error:

=> Errors while initializing project:

While building package wekan-cfs-data-man:
error: couldn't install npm package request@https://github.com/wekan/request:
Command failed:
/home/wekan/.meteor/packages/meteor-tool/.2.2.0.1j8auib.qcbe++os.linux.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/npm
install https://github.com/wekan/request
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t https://github.com/wekan/request.git
npm ERR!
npm ERR! fatal: not a git repository: /home/wekan/app/../.git/modules/src
npm ERR!
npm ERR! exited with error code: 128

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/wekan/.npm/_logs/2021-06-10T12_54_02_777Z-debug.log
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t https://github.com/wekan/request.git
npm ERR!
npm ERR! fatal: not a git repository: /home/wekan/app/../.git/modules/src
npm ERR!
npm ERR! exited with error code: 128

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/wekan/.npm/_logs/2021-06-10T12_54_02_777Z-debug.log
2021-06-11 11:36:54 +02:00
Martin Filser 5697b89817 .devcontainer now ready for Wekan Development in Docker Container
Check .devcontainer/docker-compose.yml to fit your environment

Enter this commands to start Wekan Development:

$ cd .devcontainer
$ docker-compose build
$ docker-compose up -d

Visit localhost:3000 or whatever you entered in ROOT_URL

Code changes triggers a rebuild / redeploy
2021-06-11 11:36:40 +02:00
Lauri Ojansivu 6bf6bcb192 Revert upgrading Dockerfile to hirsute, because of bug:
https://github.com/wekan/wekan/pull/3852#issuecomment-859095850

Thanks to xet7 !
2021-06-11 00:43:45 +03:00
Lauri Ojansivu df74b31541 Try different gpg package for Docker and Hirsute.
Thanks to xet7 !
2021-06-11 00:34:27 +03:00
Lauri Ojansivu 0b34bcdfa8 Updated Dockerfile gpg to gpgv2, that package is in hirsute.
Thanks to xet7 !
2021-06-11 00:26:47 +03:00
Lauri Ojansivu 09a060a57b Updated ChangeLog. 2021-06-10 23:31:59 +03:00
Lauri Ojansivu 2a5147a0c1 Updated Docker Ubuntu base image to newest hirsute.
Thanks to xet7 !
2021-06-10 23:30:13 +03:00
Lauri Ojansivu 4caa0e2f2e Updated ChangeLog. 2021-06-10 23:06:49 +03:00
Lauri Ojansivu 8f5c0af88e Merge pull request #3851 from mfilser/card_description_same_color_editing
Card Description has now the same color on editing
2021-06-10 23:04:46 +03:00
Martin Filser 665d7eb831 Card Description has now the same color on editing 2021-06-10 21:57:10 +02:00
Lauri Ojansivu d08b208bc6 v5.33 2021-06-10 22:10:34 +03:00
Lauri Ojansivu c5d8117052 Updated translations. 2021-06-10 22:03:45 +03:00
Lauri Ojansivu b769d18f73 Updated ChangeLog. 2021-06-10 22:01:14 +03:00
Lauri Ojansivu b17760d228 Merge branch 'Emile840-master' 2021-06-10 21:56:33 +03:00
Lauri Ojansivu 2983c51db1 Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-06-10 21:54:41 +03:00
Lauri Ojansivu d6e11940cc Updated ChangeLog. 2021-06-10 21:52:05 +03:00
Lauri Ojansivu 17f15f546f Merge pull request #3849 from mfilser/custom-field-stringtemplate_autofocus
custom fields stringtemplate, autofocus the last input box
2021-06-10 21:49:48 +03: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
Emile NDAGIJIMANA c5df78fd8b Addressed one of the point cited in issue #802 'Assigning a user to a team or an organization' 2021-06-10 16:38:28 +02:00
Martin Filser 62bd96e06e custom fields stringtemplate, autofocus the last input box 2021-06-09 21:25:49 +02:00
Lauri Ojansivu 399fd098b8 v5.32 2021-06-09 20:30:02 +03:00
Lauri Ojansivu f9c21a9b52 Updated translations. 2021-06-09 20:23:38 +03:00
Lauri Ojansivu 41893cf06a Updated ChangeLog. 2021-06-09 20:15:46 +03:00
Lauri Ojansivu 83a8d4c14f Updated ChangeLog. 2021-06-09 20:13:19 +03:00
Lauri Ojansivu 6ce5ab40a7 Moved many button texts etc to tooltips. Added more tooltips.
Thanks to xet7 !

Fixes #3848
2021-06-09 20:08:42 +03:00
Lauri Ojansivu 328fa194a0 v5.31 2021-06-09 01:45:05 +03:00
Lauri Ojansivu 482b9c9333 Updated ChangeLog. 2021-06-09 01:40:39 +03:00
Lauri Ojansivu 122757ca9c Updated dependencies.
Thanks to developers of dependencies !
2021-06-09 01:39:16 +03:00
Lauri Ojansivu 49dd2204f4 Updated ChangeLog. 2021-06-09 01:16:38 +03:00
Lauri Ojansivu 07a3a0b388 Gantt: Retain links created between tasks. Part 1: Database changes, not active in MIT Wekan.
Thanks to benjaminhrivera !

Related https://github.com/wekan/wekan/issues/2870#issuecomment-857115753
2021-06-09 01:12:23 +03:00
Lauri Ojansivu 56efbf1de7 Updated ChangeLog. 2021-06-09 00:57:27 +03:00
Lauri Ojansivu 57f31d443f Partial Fix: Vote and Planning Poker: Setting date and time now works
for some languages that have ascii characters in date format.

Thanks to xet7 !

Related #3837
2021-06-09 00:51:52 +03:00
Lauri Ojansivu 65f308434a Updated ChangeLog. 2021-06-08 17:02:25 +03:00
Lauri Ojansivu 007e0f1c16 Try to fix: Wekan UI fails to finish import of closed Trello boards.
Thanks to berezovskyi and xet7 !

Fixes #3840
2021-06-08 17:00:53 +03:00
Lauri Ojansivu c249a2d187 Updated ChangeLog. 2021-06-08 16:53:06 +03:00
Lauri Ojansivu 78324263c1 Try to fix OAUTH2_LOGIN_STYLE=redirect Has No Effect.
Thanks to xet7 !

Fixes #3845
2021-06-08 16:50:48 +03:00
Lauri Ojansivu c20229b56a Updated translations. 2021-06-08 16:50:29 +03:00
Lauri Ojansivu 1fd10771b0 Updated ChangeLog. 2021-06-08 16:41:14 +03:00
Lauri Ojansivu 1637920170 Admin Panel Organizations/Teams: Show confirm text above delete button.
Thanks to xet7 !

Related #802
2021-06-08 16:38:21 +03:00
Lauri Ojansivu 87ba966db8 Updated translations. 2021-06-08 05:25:01 +03:00
Lauri Ojansivu 258391cd8c Updated ChangeLog. 2021-06-08 05:15:25 +03:00
Lauri Ojansivu 481404e8d7 Now new boards do not have any labels added by default.
Thanks to tedkoch and xet7 !

Related https://github.com/wekan/wekan/discussions/3835#discussioncomment-836223 Issue 7.
2021-06-08 05:07:32 +03:00
Lauri Ojansivu 48737dcd01 Updated ChangeLog. 2021-06-08 04:54:42 +03:00
Lauri Ojansivu b95585b0f6 Updated ChangeLog. 2021-06-08 04:44:59 +03:00
Lauri Ojansivu 14b2c1309f Delete Organizations and Teams.
Thanks to xet7 !

Related #802
2021-06-08 04:38:47 +03:00
Lauri Ojansivu 7e036b9df3 Merge branch 'Emile840-master' 2021-06-08 01:24:54 +03:00
Lauri Ojansivu 72fa32151d Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-06-08 01:24:25 +03:00
Emile NDAGIJIMANA f5dbe8c6f6 Addressed one of the bugs cited in issue #802 'bug when creating and modifying organization and team' 2021-06-07 11:03:49 +02:00
Lauri Ojansivu 93950a3b2e Updated translations. 2021-06-05 16:02:59 +03:00
Lauri Ojansivu eec818f9fd Updated translations. 2021-06-04 12:52:54 +03:00
Lauri Ojansivu a6f15af270 Updated ChangeLog. 2021-06-04 12:48:03 +03:00
Lauri Ojansivu 646497c3f0 Removed extra package.
Thanks to xet7 !
2021-06-04 12:46:21 +03:00
Lauri Ojansivu 2342c27ced v5.30 2021-06-03 23:29:01 +03:00
Lauri Ojansivu 80f6004404 Updated translations. 2021-06-03 23:20:51 +03:00
Lauri Ojansivu a94946c77c Updated ChangeLog. 2021-06-03 23:18:12 +03:00
Lauri Ojansivu 659a65b8b9 Moved Keyboard Shortcuts from bottom to top of sidebar.
Thanks to ClaudiaK21 and xet7 !
2021-06-03 23:15:13 +03:00
Lauri Ojansivu c4b55e862f Updated ChangeLog. 2021-06-03 22:33:04 +03:00
Lauri Ojansivu f8a75930b3 Updated ChangeLog. 2021-06-03 22:09:05 +03:00
Lauri Ojansivu 3a04b1b787 Updated ChangeLog. 2021-06-03 21:49:13 +03:00
Lauri Ojansivu ad61a15611 Updated translations. 2021-06-03 21:47:52 +03:00
Lauri Ojansivu d21bc0c277 Merge branch 'helioguardabaxo-master' 2021-06-03 21:26:55 +03:00
helioguardabaxo fa3d117372 Add Feature: Planning Poker 2021-06-03 12:01:15 -03:00
Lauri Ojansivu 26249f5928 Updated ChangeLog. 2021-06-01 18:55:25 +03:00
Lauri Ojansivu b7e6600e88 Merge pull request #3833 from Emile840/master
Fix bug #3832 'Default language is still used although this one has b…
2021-06-01 18:53:25 +03:00
Emile NDAGIJIMANA 6e46cad56c Fix bug #3832 'Default language is still used although this one has been modified previously' 2021-06-01 15:55:42 +02:00
Lauri Ojansivu e7340c5021 Reverted PR https://github.com/wekan/wekan/pull/3831
The default wekan logo appears briefly before displaying the custom logo

Thanks to xet7 !

Related #3832
2021-06-01 16:44:23 +03:00
Lauri Ojansivu 05d6c5f15a Updated translations. 2021-06-01 16:28:49 +03:00
Lauri Ojansivu 428442b310 Updated ChangeLog. 2021-06-01 16:20:52 +03:00
Lauri Ojansivu 753d247cf6 Merge pull request #3831 from Emile840/master
Fix bug #3830 '[Login page] The default wekan logo appears briefly before d…
2021-06-01 16:16:04 +03:00
Lauri Ojansivu 802f544cd5 Updated ChangeLog. 2021-06-01 12:46:35 +03:00
Lauri Ojansivu bf62a947fb Fixed Python API example: Edit card, etc.
Thanks to Lucky-Shi and xet7 !

Fixes #3767
2021-06-01 12:41:54 +03:00
Emile NDAGIJIMANA 5b08ae12a6 Fix bug '[Login page] The default wekan logo appears briefly before displaying the custom logo #3830' 2021-05-31 15:36:57 +02:00
Lauri Ojansivu 46e881bea3 v5.29 2021-05-29 01:06:44 +03:00
Lauri Ojansivu 5d1714dbd5 Updated ChangeLog. 2021-05-29 00:56:24 +03:00
Lauri Ojansivu bd1de94312 Fixed Importing JSON exports fails.
Thanks to KeptnArgo and xet7 !

Fixes #3742
2021-05-29 00:52:36 +03:00
Lauri Ojansivu 06937d0aa0 Updated translations. 2021-05-29 00:29:03 +03:00
Lauri Ojansivu 9e39731133 Updated ChangeLog. 2021-05-29 00:26:09 +03:00
Lauri Ojansivu 3908cd5413 Fix: Impersonate user can now export Excel/CSV/TSV/JSON.
Impersonate user and export Excel/CSV/TSV/JSON is now logged into
database table impersonatedUsers.

Thanks to xet7 !

Fixes #3827,
fixes #3284
2021-05-29 00:19:12 +03:00
Lauri Ojansivu 6be1a33093 Updated dependencies.
Thanks to developers of dependencies!
2021-05-29 00:15:42 +03:00
Lauri Ojansivu c656cbf6ae Updated translations. 2021-05-25 17:42:28 +03:00
Lauri Ojansivu 83045a6512 Updated ChangeLog. 2021-05-18 12:59:07 +03:00
Lauri Ojansivu 199485640f Merge pull request #3813 from spasche/typos
Fix typos
2021-05-18 12:43:18 +03:00
Sylvain Pasche 2e41ff1121 Fix typos. 2021-05-17 23:41:36 +02:00
Lauri Ojansivu 487c6fae8d Updated ChangeLog. 2021-05-16 17:10:34 +03:00
Lauri Ojansivu ea64b17b82 Reworded issue template about can not login.
Thanks to xet7 !
2021-05-16 13:34:49 +03:00
Lauri Ojansivu 6d0578fd5a Added Forgot Password page to GitHub issue template.
Thanks to xet7 !
2021-05-16 13:27:56 +03:00
Lauri Ojansivu 76a4deda78 Updated ChangeLog. 2021-05-12 19:33:05 +03:00
Lauri Ojansivu 595abd303c Merge pull request #3799 from Enishowk/feature/excel_parentNameExport
Feature/excel parent card name export
2021-05-12 19:30:43 +03:00
Lauri Ojansivu 5dd6466c0a Removed not working GitHub workflow.
Thanks to xet7 !
2021-05-10 20:26:23 +03:00
Lauri Ojansivu 38655ee478 Merge branch 'master' of github.com:wekan/wekan 2021-05-09 07:53:08 +03:00
Lauri Ojansivu 23ca25a1ca Updated translations. 2021-05-09 07:52:45 +03:00
Enishowk 120cb4820e fix: typo 2021-05-07 18:58:24 +02:00
Enishowk 3ee0add6f6 feat: add parent name column in excel export 2021-05-07 18:54:59 +02:00
Lauri Ojansivu 8911fe5c8d Try to fix Snap: Removed linting packages.
Thanks to xet7 !
2021-05-07 18:12:49 +03:00
Lauri Ojansivu 1d9346513e Update dependencies.
Thanks to developers of dependencies !
2021-05-07 17:46:22 +03:00
Lauri Ojansivu 62150ce6c4 Updated dependencies.
Thanks to developers of dependencies!
2021-05-07 17:09:31 +03:00
Lauri Ojansivu b2d4135dca v5.28 2021-05-07 16:23:55 +03:00
Lauri Ojansivu 49e3e01ece Updated translations. 2021-05-07 13:20:53 +03:00
Lauri Ojansivu 23c2ff0e29 Updated ChangeLog. 2021-05-07 12:53:18 +03:00
Lauri Ojansivu a550c255e6 Updated dependencies.
Thanks to developers of dependencies !
2021-05-07 12:51:54 +03:00
Lauri Ojansivu 6b897faaa8 Updated ChangeLog. 2021-05-07 12:34:10 +03:00
Lauri Ojansivu 48255f6f1e Updated dependencies.
Thanks to developers of dependencies !
2021-05-07 12:32:44 +03:00
Lauri Ojansivu 45bc3bd3db Updated ChangeLog. 2021-05-07 02:23:40 +03:00
Lauri Ojansivu 5ab20a9257 Added markdown-it-mermaid for some charts support in all input fields. Replaced xss with dompurify.
Thanks to xuguotong and xet7 !

Fixes #3794
2021-05-07 02:13:20 +03:00
Lauri Ojansivu 88e4918208 Updated ChangeLog. 2021-05-06 18:29:44 +03:00
Lauri Ojansivu 521ef8b6da Updated dependencies.
Thanks to developers of dependencies !
2021-05-06 18:26:32 +03:00
Lauri Ojansivu 0d86dfa571 Updated translations. 2021-05-06 18:14:05 +03:00
Lauri Ojansivu 472350e56f Merge branch 'listenerri-patch-1' 2021-05-06 18:00:06 +03:00
listenerri 68569b9640 Update cardDate.js 2021-05-06 10:08:01 +08:00
Lauri Ojansivu 823f11d5dd v5.27 2021-04-29 13:39:08 +03:00
Lauri Ojansivu ae19018831 Updated translations. 2021-04-29 13:33:13 +03:00
Lauri Ojansivu d5b09c7b3e Updated dependencies. 2021-04-29 13:32:25 +03:00
Lauri Ojansivu d3b4aa4dc7 Updated ChangeLog. 2021-04-29 13:29:06 +03:00
Lauri Ojansivu c2da477735 Fixed Non-ASCII attachment filename will crash when downloading.
Thanks to xet7 !

Fixes #2759
2021-04-29 13:26:49 +03:00
Lauri Ojansivu 843ff8eaaa v5.26 2021-04-28 12:38:15 +03:00
Lauri Ojansivu c5143e2c54 Updated translations. 2021-04-28 12:34:30 +03:00
Lauri Ojansivu 0596f5e864 Updated ChangeLog. 2021-04-28 12:28:09 +03:00
Lauri Ojansivu 8ca1b25daf Bring back Almost-Due for Start Date.
Thanks to darren-teo !

Fixes #3766
2021-04-28 12:26:31 +03:00
Lauri Ojansivu 1f76159bfe Updated ChangeLog. 2021-04-28 12:19:43 +03:00
Lauri Ojansivu 39ece35f52 Merge pull request #3765 from HappyMushroom-TechTeam/feature/miniCard_subtaskCount
Feature/mini card subtask count
2021-04-28 12:18:03 +03:00
ryanMushy 63c1bb9e17 count subtasks just like checklists 2021-04-27 18:28:23 -07:00
Lauri Ojansivu 354622c5ad v5.25 2021-04-27 23:11:23 +03:00
Lauri Ojansivu df7fd8c900 v5.25 2021-04-27 23:02:49 +03:00
Lauri Ojansivu 7957690fca Updated translations. 2021-04-27 22:57:25 +03:00
Lauri Ojansivu 63d19447a0 Updated ChangeLog. 2021-04-27 22:50:53 +03:00
Lauri Ojansivu 018a84ec59 Merge pull request #3764 from HappyMushroom-TechTeam/feature/excel_swimlanExport
cherry pick the excel export feature to add swimlanes to the output
2021-04-27 22:47:41 +03:00
ryanMushy e5c0e623a0 cherry pick the excel export feature to add swimlanes to the output 2021-04-27 12:38:38 -07:00
ryan neal 9a2d3e15e8 Merge pull request #2 from wekan/master
newest version
2021-04-27 12:36:57 -07:00
Lauri Ojansivu c07e262e68 Updated translations. 2021-04-27 20:29:01 +03:00
Lauri Ojansivu cacb2b91ee Updated ChangeLog. 2021-04-27 20:18:37 +03:00
Lauri Ojansivu 6f269d598f Merge pull request #3762 from bentiss/nested-openapi
openapi: better handle nested schemas
2021-04-27 20:16:59 +03:00
Lauri Ojansivu 57ea254bff Updated ChangeLog. 2021-04-27 19:51:09 +03:00
Lauri Ojansivu 7e183c838f Merge pull request #3761 from HappyMushroom-TechTeam/bugfix/summernoteOnPaste
Bugfix/summernote on paste
2021-04-27 19:48:46 +03:00
Lauri Ojansivu 3ffdfd9736 Updated ChangeLog. 2021-04-27 19:47:40 +03:00
Lauri Ojansivu 621c701bef Fixed language name of Deutsch (Schweiz).
Thanks to urmel1960 !

Fixes #3763
2021-04-27 19:45:18 +03:00
Lauri Ojansivu 3c24c9966c Updated ChangeLog. 2021-04-27 19:38:20 +03:00
Lauri Ojansivu 995de525d9 Added missing postgres password to ToroDB.
Thanks to xet7 !
2021-04-27 19:36:34 +03:00
Benjamin Tissoires ae30b1220a openapi: better handle nested schemas
there is a 2 levels schemas in profile.notifications.

The code previously assumed we could only have one level, and so was not
producing the correct UsersProfileNotifications.

Fix that by being more generic in the way we retrieve the nested
subschemas.
2021-04-27 10:44:27 +02:00
ryanMushy e380ad26c2 Images are uploaded twice
- make sure only pastes which contain text are processed
- remove execCommand() as it results in errors
- enable drag & drop
- fix resize buttons to be the proper summernote commands
- remove un-needed comma
2021-04-26 23:31:07 -07:00
ryan neal 9bb31d2380 Merge pull request #1 from wekan/master
newest wekan
2021-04-26 12:10:21 -07:00
Lauri Ojansivu 8ec1e4f3fa Updated ChangeLog. 2021-04-24 20:18:04 +03:00
Lauri Ojansivu 9f0f6841b0 Updated release scripts. 2021-04-24 20:16:27 +03:00
Lauri Ojansivu 5d18f98b44 v5.24 2021-04-24 19:47:12 +03:00
Lauri Ojansivu e738177e08 Updated dependencies.
Thanks to developers of dependencies !
2021-04-24 19:40:50 +03:00
Lauri Ojansivu bb201935b9 Updated translations. 2021-04-24 19:35:48 +03:00
Lauri Ojansivu bcfe6bd616 Updated translations.
Thanks to translators and xet7 !

Fixes #3756
2021-04-24 19:08:08 +03:00
Lauri Ojansivu 9c6352a7bc Updated translations. 2021-04-23 12:53:15 +03:00
Lauri Ojansivu 9110e41f20 Updated ChangeLog. 2021-04-23 00:19:39 +03:00
Lauri Ojansivu 7ae871d3a6 Merge pull request #3753 from jrsupplee/copy-swimlane
Add copy swimlane functionality
2021-04-22 22:50:27 +03:00
Lauri Ojansivu 0ddf027d43 Updated ChangeLog. 2021-04-22 16:54:37 +03:00
Lauri Ojansivu 45124a39f3 Fix Snap: Delete extra symlink that prevented building Snap.
Thanks to xet7 !
2021-04-22 16:52:51 +03:00
John R. Supplee 4940af0573 Add copy swimlane functionality 2021-04-22 14:16:35 +02:00
Lauri Ojansivu 924b5d1733 v5.23 2021-04-22 15:16:22 +03:00
Lauri Ojansivu 2119a3a51e Updated translations. 2021-04-22 14:58:24 +03:00
Lauri Ojansivu dcda99ddf3 Updated ChangeLog. 2021-04-22 14:48:39 +03:00
Lauri Ojansivu 0e35dcd5ad Merge pull request #3749 from listenerri/patch-1
Fix: The bg color of start at button is almost-due
2021-04-22 14:44:34 +03:00
listenerri 991d42ca0b Fix: The bg color of start at button is almost-due
One minute earlier than the current time is almost-due? This should be a faulty logic.
2021-04-22 18:24:18 +08:00
Lauri Ojansivu ac242c96b7 Updated translations. 2021-04-20 21:13:04 +03:00
Lauri Ojansivu 79d45c8e33 Updated ChangeLog. 2021-04-20 21:09:43 +03:00
Lauri Ojansivu 8e9f7102f9 Merge pull request #3741 from jrsupplee/master
Bug fix for Due Cards
2021-04-20 21:07:05 +03:00
John R. Supplee 1952dc309b Bug fix for Due Cards 2021-04-20 16:23:56 +02:00
Lauri Ojansivu 5e7767247f Updated ChangeLog. 2021-04-20 10:09:49 +03:00
Lauri Ojansivu 676bf686c7 Updated dependencies.
Thanks to developers of dependencies !
2021-04-20 10:08:32 +03:00
Lauri Ojansivu 5cd6985368 Updated translations. 2021-04-20 10:02:37 +03:00
Lauri Ojansivu 807e72dcce Updated ChangeLog. 2021-04-20 09:59:30 +03:00
Lauri Ojansivu 71702b5821 Merge pull request #3733 from jrsupplee/issue-1569
Fix: Trello data without labels definition
2021-04-20 09:58:18 +03:00
Lauri Ojansivu 40c56248f1 Merge branch 'mcrute-master' 2021-04-20 08:37:40 +03:00
John R. Supplee 74ac7d8d3f Fix for issue #1569 Trello data without labels definition 2021-04-19 22:37:26 +02:00
Mike Crute e7186b47b0 Support filtering by due date 2021-04-19 07:44:09 -07:00
Lauri Ojansivu 12aa7ea2cb Updated ChangeLog. 2021-04-16 22:33:34 +03:00
Lauri Ojansivu ef584e2826 v5.22 2021-04-16 21:57:36 +03:00
Lauri Ojansivu f902be10b6 Updated translations. 2021-04-16 21:54:04 +03:00
Lauri Ojansivu 29b835de59 Updated ChangeLog. 2021-04-16 21:50:25 +03:00
Lauri Ojansivu 6ff9c5b58d Added German (Switzerland) (de_CH) Part 3.
Fixed lint.

Thanks to translators and xet7 !
2021-04-16 21:47:39 +03:00
Lauri Ojansivu 1b86aeb4f5 Updated ChangeLog. 2021-04-16 21:25:40 +03:00
Lauri Ojansivu dce99c00be Updated number of translated languages.
Thanks to translators and xet7 !
2021-04-16 21:24:00 +03:00
Lauri Ojansivu e47c700c36 Updated ChangeLog. 2021-04-16 21:23:14 +03:00
Lauri Ojansivu 09506c78f3 Updated translations. Added German (Switzerland) (de_CH).
Thanks to translators !
2021-04-16 21:20:45 +03:00
Lauri Ojansivu 9ec1fc0902 Updated ChangeLog. 2021-04-16 20:58:18 +03:00
Lauri Ojansivu 0b3ec2c19e Merge pull request #3724 from jrsupplee/master
Remove allowedValues from Cards.type schema
2021-04-16 20:55:50 +03:00
John R. Supplee a94bec921c Remove allowedValues from Cards.type schema 2021-04-16 19:52:09 +02:00
Lauri Ojansivu 3884da3c06 v5.21 2021-04-16 20:28:51 +03:00
Lauri Ojansivu d3fa177c7f Updated translations. 2021-04-16 20:24:19 +03:00
Lauri Ojansivu d2176e2c08 Updated ChangeLog. 2021-04-16 20:05:20 +03:00
Lauri Ojansivu 8d9c59486d Merge branch 'master' of github.com:wekan/wekan 2021-04-16 19:59:34 +03:00
Lauri Ojansivu 0e7c2b4b94 Upgraded to Meteor 2.2.
Thanks to Meteor developers!
2021-04-16 19:58:51 +03:00
Lauri Ojansivu 5c9bc1c745 Merge pull request #3723 from mfilser/bugfix-date_format_not_changed_to_local_format
Bugfix, date format not changed to local format
2021-04-16 19:57:24 +03:00
Martin Filser 5e7efa0098 Bugfix, date format not changed to local format
- Fixes #3718
- intoduced by commit 4aee129cdc
2021-04-16 17:04:36 +02:00
Lauri Ojansivu 424862e313 Updated ChangeLog. 2021-04-15 17:50:03 +03:00
Lauri Ojansivu 9b80ad5a3c Merge branch 'HappyMushroom-TechTeam-summernoteFeatureSet' 2021-04-15 17:44:26 +03:00
ryanMushy 96c6fa0276 - Add new button to insert a URL link
- Add new popover allowing you to edit URL links
- enable spell check and grammerly extension
2021-04-14 18:31:32 -07:00
Lauri Ojansivu 69305e1833 v5.20 2021-04-14 13:14:21 +03:00
Lauri Ojansivu 8aa74ab65e Updated translations. 2021-04-14 13:10:48 +03:00
Lauri Ojansivu aee12c2494 Updated ChangeLog. 2021-04-14 12:40:07 +03:00
Lauri Ojansivu 83976b3229 Merge pull request #3715 from bentiss/fix-docs
openapi: rework the allowedValues to allow for imported variables
2021-04-14 12:37:52 +03:00
Benjamin Tissoires 39f8a138d7 openapi: rework the allowedValues to allow for imported variables
Previously I was assuming all variables were declared in the same file.
Turns out that imports exists too, and we need to recurse one more time
in those imports./

Also "clean" up a bit the function to do the parsing in 2 steps:
- first find out the actual matching node in js
- then convert it based on its type
rinse wash repeat.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2021-04-14 11:32:03 +02:00
Lauri Ojansivu 120e4af7b2 Updated translations. 2021-04-14 12:26:58 +03:00
Lauri Ojansivu 15bddbc86a v5.19 2021-04-14 02:09:16 +03:00
Lauri Ojansivu 4e8b193801 Updated ChangeLog. 2021-04-14 02:00:15 +03:00
Lauri Ojansivu 37b65996a0 Merge branch 'master' of github.com:wekan/wekan 2021-04-14 01:55:38 +03:00
Lauri Ojansivu 9cd0d3488f Updated ChangeLog. 2021-04-14 01:55:31 +03:00
Lauri Ojansivu eaf07cef07 Merge pull request #3712 from HappyMushroom-TechTeam/bugfix/summernotePopover
popover needs to be destroyed anytime the details panel is closed.
2021-04-14 01:52:55 +03:00
Lauri Ojansivu 02a8775537 v5.18 2021-04-14 01:36:30 +03:00
ryanMushy f2d5698acb popover needs to be destroyed anytime the details panel is closed. 2021-04-13 15:34:59 -07:00
Lauri Ojansivu b0c0e456af Updated ChangeLog. 2021-04-14 01:23:40 +03:00
Lauri Ojansivu 0857a2ea91 Updated caniuse-lite etc dependencies.
Thanks to developers of dependencies !
2021-04-14 01:22:06 +03:00
Lauri Ojansivu 1f2e6d33ce Updated translations. 2021-04-14 01:12:21 +03:00
Lauri Ojansivu 250e0690d1 Updated ChangeLog. 2021-04-14 00:37:15 +03:00
Lauri Ojansivu e709094533 Merge pull request #3708 from jrsupplee/issue-3698
Bug fix for issue #3698
2021-04-14 00:35:43 +03:00
Lauri Ojansivu 4a5b16ee2e Updated ChangeLog. 2021-04-14 00:19:38 +03:00
Lauri Ojansivu 378d64f99a Merge pull request #3706 from jrsupplee/issue-3703
Bug fix: Rules for moving from list/swimlane
2021-04-14 00:18:05 +03:00
Lauri Ojansivu 4395760a40 Updated ChangeLog. 2021-04-14 00:16:12 +03:00
Lauri Ojansivu 8417fae89c Update Admin Panel Rules report icon and add missing translations.
Thanks to xet7 !
2021-04-14 00:11:05 +03:00
Lauri Ojansivu 6c8fae944c Merge branch 'jrsupplee-admin-reports' 2021-04-13 23:51:11 +03:00
Lauri Ojansivu decab9256b Merge branch 'admin-reports' of https://github.com/jrsupplee/wekan into jrsupplee-admin-reports 2021-04-13 23:50:37 +03:00
Lauri Ojansivu 183ed35ce8 Updated ChangeLog. 2021-04-13 23:33:24 +03:00
Lauri Ojansivu 2fcf85fd61 Merge branch 'tod31-customfield-stringtemplate' 2021-04-13 23:25:18 +03:00
Lauri Ojansivu 3613c1c75e Merge branch 'customfield-stringtemplate' of https://github.com/tod31/wekan into tod31-customfield-stringtemplate 2021-04-13 23:24:28 +03:00
Lauri Ojansivu e7813046f6 Updated ChangeLog. 2021-04-13 21:26:02 +03:00
Lauri Ojansivu 9871bf1963 Updated release scripts.
Thanks to xet7 !
2021-04-13 21:24:44 +03:00
Lauri Ojansivu b32e7b659b Updated ChangeLog. 2021-04-13 21:13:54 +03:00
Lauri Ojansivu 2201372744 Updated to Node.js v12.22.1. Thanks to Node.js developers. 2021-04-13 21:11:54 +03:00
Lauri Ojansivu 7431a082e2 Updated ChangeLog. 2021-04-13 21:07:45 +03:00
Lauri Ojansivu 6fe3edebb1 Added latest bundle symlink.
Thanks to xet7 !
2021-04-13 21:04:59 +03:00
Lauri Ojansivu 4b6406c264 Merge pull request #3692 from loganballard/fix-arm-dockerfile
Updating ARM Dockerfile
2021-04-13 21:03:58 +03:00
John R. Supplee 86f6bdf9af Merge branch 'master' of https://github.com/wekan/wekan into admin-reports 2021-04-13 13:02:57 +02:00
Lauri Ojansivu 1eeed6645d Updated ChangeLog. 2021-04-12 19:34:58 +03:00
Lauri Ojansivu bb8c4325c6 Updated dependencies.
Thanks to developers of dependencies !
2021-04-12 19:32:00 +03:00
John R. Supplee 07a3301414 Bug fix for issue #3698
* Rewrite routine for building the My Cards hierarchical list
* Use a separate publication for retrieving My Cards
* Fix bug with limit and skip projectsion
2021-04-12 17:34:02 +02:00
Martin Filser 1590701fc9 Custom Fields StringTemplate, Ctrl-Enter the same as the button "Save" 2021-04-12 17:23:51 +02:00
John R. Supplee 1d4a65d0b4 Add new rules report 2021-04-12 11:44:28 +02:00
tod31 c845d25ae5 add localization string 2021-04-12 11:14:25 +02:00
tod31 ceec27bf90 cleanup and cosmetics 2021-04-12 11:01:58 +02:00
tod31 4b90424773 event handling/focussing 2021-04-12 10:49:14 +02:00
tod31 31eb9b26b4 use tracker afterFlush to set focus 2021-04-11 20:07:31 +02:00
tod31 a8a3c9ad19 fix default value 2021-04-11 14:18:12 +02:00
tod31 5cfa03ec07 use string array to store items in database 2021-04-11 14:15:57 +02:00
John R. Supplee 17ab5978ad Bug fix: Rules for moving from list/swimlane
Issue: 3703
2021-04-11 00:09:32 +02:00
tod31 d4c69c3932 fix custom-field-stringtemplate-separator string 2021-04-09 12:46:12 +02:00
tod31 3778a9ebcf add configuration field for separator 2021-04-09 11:46:07 +02:00
tod31 880d94e220 use nonidentity instead of inequality 2021-04-09 11:46:03 +02:00
tod31 37607f72b2 code cosmetics 2021-04-09 11:45:56 +02:00
tod31 b1c26e6f64 remove empty lines 2021-04-09 11:45:48 +02:00
tod31 8164af281d add info text for placeholder 2021-04-09 11:45:40 +02:00
tod31 af676c8f26 fix custom field type name 2021-04-09 11:45:25 +02:00
tod31 b8dc7ff18e add custom field "stringtemplate" 2021-04-09 11:44:49 +02:00
John R. Supplee 4aee129cdc Remove redundant and unused code 2021-04-06 18:00:03 +02:00
John R. Supplee 03d29dd674 Updates to userAvatar and cardDetails template
* enable userAvatar to work with member and assignee
* remove userAvatarAssignee template
2021-04-06 17:50:03 +02:00
John R. Supplee 5a6f84ce34 * Add publications for admin reports
* remove broken cards from user menu
* Adjust report titles
2021-04-06 12:42:15 +02:00
John R. Supplee 0e593c7d81 Add admin reports to admin panel
* Broken cards
* Attachments
* Orphaned Attachments
2021-04-06 12:24:08 +02:00
John R. Supplee 4de830d663 Merge branch 'search' into admin-reports 2021-04-05 21:57:56 +02:00
Lauri Ojansivu 769bb7a55d Updated translations. 2021-04-04 22:09:23 +03:00
John R. Supplee ed6c6e5a25 Use new colors constants 2021-04-03 18:52:47 +02:00
John R. Supplee 302ba75729 * Fix bug with multiple label predicates
* Add new constants
2021-04-03 01:19:02 +02:00
John R. Supplee 69dc8f304c Only search label names in boards of type 'board' 2021-04-02 21:40:52 +02:00
John R. Supplee e43002d5ad Update Boards.userBoards() to only return type 'board' by default 2021-04-02 02:15:12 +02:00
John R. Supplee edd07befe2 Add a new search operator creator 2021-04-01 23:41:32 +02:00
John R. Supplee 5cc6a2f7d0 Add an avatar for the card creator
* Add avatar to minicard
* Add field to card details
* Add show option in Board / Card Settings
2021-04-01 23:40:07 +02:00
Lauri Ojansivu 926f39c96b Update translations. 2021-04-01 14:14:11 +03:00
Lauri Ojansivu abd38082de Updated ChangeLog. 2021-04-01 13:53:10 +03:00
Lauri Ojansivu 5ca90f4d22 Revert stable tag, because it did break Wekan version numbers.
Thanks to xet7 !
2021-04-01 13:47:57 +03:00
loganballard c9586e579a updating Dockefile 2021-03-31 21:46:52 -07:00
Lauri Ojansivu 4cadc5f4f3 v5.17 2021-04-01 01:51:20 +03:00
Lauri Ojansivu 8dfb6916c5 Added stable tag release script. 2021-04-01 01:49:41 +03:00
Lauri Ojansivu 6066be944a Updated translations. 2021-04-01 01:45:24 +03:00
Lauri Ojansivu e9f8279dbe Updated ChangeLog. 2021-04-01 01:38:05 +03:00
Lauri Ojansivu 454d3b5bbe Fix Link dialog closes card when clicking in dialog.
Thanks to ryanMushy !

Fixes #3455
2021-04-01 01:34:23 +03:00
Lauri Ojansivu fe185dd38a v5.16 2021-04-01 00:40:02 +03:00
Lauri Ojansivu 522b14d96d Updated translations. 2021-04-01 00:35:26 +03:00
Lauri Ojansivu d98b489263 Updated ChangeLog. 2021-04-01 00:33:13 +03:00
Lauri Ojansivu 47ecc654b8 Added back Summernote editor. Removed emoji picker.
Thanks to ryanMushy and xet7 !

Related https://github.com/wekan/wekan/commit/84fde1ecfc81e89ed1895cab3bcb328e4f166a87#commitcomment-48956373
2021-04-01 00:30:46 +03:00
Lauri Ojansivu b9a4ae654e Updated ChangeLog. 2021-03-31 22:00:45 +03:00
Lauri Ojansivu c40668be3f Added stable tag.
Thanks to rynr and xet7 !

Related https://github.com/wekan/wekan/discussions/3691
2021-03-31 21:58:23 +03:00
Lauri Ojansivu a9d77b975e v5.15 2021-03-31 18:20:06 +03:00
Lauri Ojansivu 085bf3b6e6 Updated ChangeLog. 2021-03-31 18:16:49 +03:00
Lauri Ojansivu 91dae9795e Updated release website scripts. Part 2.
Thanks to xet7 !
2021-03-31 18:15:21 +03:00
Lauri Ojansivu 42081db0d8 Updated translations. 2021-03-31 18:14:11 +03:00
Lauri Ojansivu 3af417209c Updated ChangeLog. 2021-03-31 18:11:13 +03:00
Lauri Ojansivu b6f60c08e5 Fixed release website script.
Thanks to xet7 !
2021-03-31 18:09:47 +03:00
Lauri Ojansivu 03d7940829 Updated ChangeLog. 2021-03-31 17:55:04 +03:00
Lauri Ojansivu 0b263cf582 - Fixed Bug: Move Swimlane to Archive does not work anymore.
- Fixed lint in router.js

Thanks to marcungeschikts and xet7 !

Fixes #3690
2021-03-31 17:52:22 +03:00
Lauri Ojansivu 8ef60a06ad Updated ChangeLog. 2021-03-31 16:18:00 +03:00
Lauri Ojansivu 91eb4b941d Merge pull request #3688 from jrsupplee/issue-1667
Fix bug in Due Cards introduced by last bug fix
2021-03-31 16:16:58 +03:00
Lauri Ojansivu 2171690d22 Updated ChangeLog. 2021-03-31 16:13:58 +03:00
Lauri Ojansivu 6819303047 Updated node update local script.
Thanks to xet7 !
2021-03-31 16:12:16 +03:00
Lauri Ojansivu 88e19bd011 Updated ChangeLog. 2021-03-31 16:08:35 +03:00
Lauri Ojansivu 09b9f690b1 Updated node-update.sh release script.
Thanks to xet7 !
2021-03-31 16:03:08 +03:00
Lauri Ojansivu 7a9c397264 Updated to Node.js v12.22.0. Thanks to Node.js developers. 2021-03-31 16:02:25 +03:00
Lauri Ojansivu c2b7525864 Updated to Node.js v12.22.0. Thanks to Node.js developers. 2021-03-31 16:01:12 +03:00
Lauri Ojansivu e2ecd490ff Updated ChangeLog. 2021-03-31 16:00:08 +03:00
Lauri Ojansivu 1d3673e9d3 Updated node update scipts. 2021-03-31 15:58:41 +03:00
Lauri Ojansivu 5bd85f975c Remove some extra text. 2021-03-31 15:44:18 +03:00
Lauri Ojansivu 89ab99b551 Updated ChangeLog. 2021-03-31 15:43:05 +03:00
Lauri Ojansivu 01de3f187c Set release script node-update.sh as executeable.
Thanks to xet7 !
2021-03-31 15:41:14 +03:00
Lauri Ojansivu dcd7925571 Updated ChangeLog. 2021-03-31 15:40:32 +03:00
Lauri Ojansivu 34b6aa0858 Updated release scripts.
Thanks to xet7 !
2021-03-31 15:39:07 +03:00
John R. Supplee 73fb62e941 Fix bug in Due Cards introduced by last bug fix 2021-03-31 13:53:35 +02:00
Lauri Ojansivu 55ced412a0 Updated ChangeLog. 2021-03-31 14:23:37 +03:00
Lauri Ojansivu 04a8d85836 Merge pull request #3687 from jrsupplee/issue-1667
Fix bug in My Cards and Global Search
2021-03-31 14:21:48 +03:00
John R. Supplee 392b701956 Fix bug in My Cards and Global Search 2021-03-31 13:05:39 +02:00
Lauri Ojansivu dee098c125 Updated translations. 2021-03-31 13:47:58 +03:00
Lauri Ojansivu 56e26a65ae Updated ChangeLog. 2021-03-31 13:15:55 +03:00
Lauri Ojansivu 69509d597f Merge pull request #3686 from ednamaeG/sort-fix
fixed sort reset
2021-03-31 13:13:44 +03:00
ednamaeG bc7b18abe7 Merge branch 'master' into sort-fix 2021-03-31 14:56:55 +08:00
mae 4a95cb42cd fixed sort reset 2021-03-31 14:51:08 +08:00
Lauri Ojansivu db311f677b Fix typo. 2021-03-29 12:05:06 +03:00
Lauri Ojansivu 685fb98e59 v5.14 2021-03-29 11:40:30 +03:00
Lauri Ojansivu 6dd98285a6 Updated translations. 2021-03-29 11:36:20 +03:00
Lauri Ojansivu e225d29d7a Updated translations. 2021-03-29 10:29:31 +03:00
Lauri Ojansivu eff7d123f2 Updated ChangeLog. 2021-03-29 10:18:22 +03:00
Lauri Ojansivu 4d62fe83f4 Merge pull request #3677 from jrsupplee/issue-3655
Require signed-in user for My Cards, Due Cards, and global search #3655
2021-03-29 10:15:31 +03:00
Lauri Ojansivu a37ca01703 Updated ChangeLog. 2021-03-29 10:13:09 +03:00
Lauri Ojansivu ba05f383ca Added environment variable RESULTS_PER_PAGE to all Wekan platforms.
Thanks to xet7 !
2021-03-29 10:11:13 +03:00
Lauri Ojansivu 4ea4913d72 Merge branch 'jrsupplee-search' 2021-03-29 09:43:21 +03:00
John R. Supplee 856f3bf864 Require signed-in user for My Cards, Due Cards, and global search 2021-03-29 02:01:12 +02:00
John R. Supplee 238b0f0725 Merge branch 'master' of https://github.com/wekan/wekan into search 2021-03-28 22:16:15 +02:00
Lauri Ojansivu a79a5c7299 Updated ChangeLog. 2021-03-28 19:31:01 +03:00
Lauri Ojansivu 59580e4b0f Updated release scripts.
Thanks to xet7 !
2021-03-28 19:28:48 +03:00
Lauri Ojansivu 7e05e02137 v5.13 2021-03-28 10:38:01 +03:00
Lauri Ojansivu d4a1611b86 Try to fix Sandstorm Wekan.
Thanks to xet7 !
2021-03-28 10:15:44 +03:00
Lauri Ojansivu 77abde7836 v5.12 2021-03-28 07:55:50 +03:00
Lauri Ojansivu 4c60916191 Fix HTTP not defined.
Thanks to xet7 !
2021-03-28 07:51:25 +03:00
Lauri Ojansivu 634eec7eb6 v5.11 2021-03-28 07:32:08 +03:00
Lauri Ojansivu 4ccbbc78cf Updated ChangeLog. 2021-03-28 07:26:05 +03:00
Lauri Ojansivu 4e1c0fdce8 Updated dependencies. Fixed lint.
Thanks to xet7 !
2021-03-28 07:24:24 +03:00
Lauri Ojansivu 9fa1d846e6 Updated translations. 2021-03-28 07:03:40 +03:00
Lauri Ojansivu 969dca292e Updated ChangeLog. 2021-03-28 07:01:28 +03:00
Lauri Ojansivu 84fde1ecfc Added emoji picker to card description edit and card comment edit.
Removed Summernote wysiwyg editor, package-lock.json etc.

Thanks to xet7 !
2021-03-28 06:56:05 +03:00
John R. Supplee db9ee59d9f Merge branch 'search' of supplee.net:wekan into search 2021-03-28 02:47:18 +02:00
John R. Supplee 20a2ea3e7a Add icon to clear the current search 2021-03-28 02:46:11 +02:00
John R. Supplee 39b4ada26d Do not include archived lists in global search help 2021-03-28 02:45:15 +02:00
Lauri Ojansivu 3ddfe7c1fd Updated dependencies. 2021-03-28 02:27:25 +02:00
Lauri Ojansivu f7955d5fd7 v5.10 2021-03-28 01:24:24 +02:00
Lauri Ojansivu f115afb64e Updated ChangeLog. 2021-03-28 01:17:10 +02:00
Lauri Ojansivu 3145ec65a3 Updated package-lock.json
Thanks to developers of dependencies!
2021-03-28 01:15:54 +02:00
Lauri Ojansivu e2f690d0db Updated ChangeLog. 2021-03-28 01:13:28 +02:00
Lauri Ojansivu e6c8c04394 Merge branch 'vagnernascimento-master' 2021-03-28 01:08:54 +02:00
Lauri Ojansivu a7741df5e4 Merge branch 'master' of https://github.com/vagnernascimento/wekan into vagnernascimento-master 2021-03-28 01:06:28 +02:00
Lauri Ojansivu 912577cab3 Updated translations. 2021-03-28 01:03:34 +02:00
Lauri Ojansivu cec43a63a7 Updated ChangeLog. 2021-03-28 00:53:19 +02:00
Lauri Ojansivu 10c9fc25a9 Merge branch 'jrsupplee-move-swimlane' 2021-03-28 00:50:10 +02:00
Lauri Ojansivu 16665bccf9 Added translatable Move Swimlane popup title.
Thanks to xet7 !
2021-03-28 00:48:55 +02:00
John R. Supplee 103cfb936d Merge branch 'master' of https://github.com/wekan/wekan into search 2021-03-27 23:10:53 +02:00
John R. Supplee 4bb8f3ab27 Merge branch 'master' of https://github.com/wekan/wekan into move-swimlane 2021-03-27 22:09:14 +02:00
John R. Supplee 36a4740429 Fix bug in call to get default swimlane 2021-03-27 19:02:07 +02:00
John R. Supplee ed54c09b48 Use a method call to move the swimlane server side 2021-03-27 18:50:05 +02:00
Vagner Nascimento 6eb90238b1 Included a new route to export (json) an attachment from a board.
GET  /api/boards/:id/attachments/:attachmentId/export
2021-03-26 22:37:42 -03:00
John R. Supplee aad300613d Add UI code and make some fixes to list move code
Still need to add new lists to all swimlanes
2021-03-27 00:56:44 +02:00
Lauri Ojansivu a2f8e54b67 v5.09 2021-03-26 23:30:40 +02:00
Lauri Ojansivu c9a10efe5c Updated translations. 2021-03-26 23:12:26 +02:00
Lauri Ojansivu 7e2f802169 Updated ChangeLog. 2021-03-26 22:56:30 +02:00
Lauri Ojansivu 9df5a0f530 Merge pull request #3672 from bentiss/fix-docs
Fix openapi docs generation
2021-03-26 22:54:08 +02:00
Lauri Ojansivu 16971ff1d8 Updated ChangeLog. 2021-03-26 22:53:07 +02:00
Lauri Ojansivu bef544ddc8 Merge branch 'sim51-patch-1' 2021-03-26 22:51:11 +02:00
Benjamin Tissoires 2c1f40357d Fix openapi docs generation
esprima-python is now safe to use
(https://github.com/Kronuz/esprima-python/pull/12)

And there was a new ArrowFunctionExpression used in db666eec65
that broke the python script
2021-03-26 18:41:34 +01:00
Benoît Simard ea544caf83 Replace edit icon by plus-square on new links 2021-03-26 16:36:26 +01:00
John Supplee be9e98b2a1 Merge branch 'master' of https://github.com/wekan/wekan into move-swimlane 2021-03-26 16:52:02 +02:00
John Supplee 59a3ac1f37 Add move() methods to Swimlanes and Lists collections 2021-03-26 16:51:01 +02:00
Lauri Ojansivu be22ca332b Updated translations. 2021-03-26 13:09:13 +02:00
Lauri Ojansivu 983e34ef80 Updated package-lock.json 2021-03-26 13:06:34 +02:00
Lauri Ojansivu c9830bc262 v5.08 2021-03-26 10:43:23 +02:00
Lauri Ojansivu fc21c6d1d6 Updated translations. 2021-03-26 10:38:15 +02:00
Lauri Ojansivu 960f332dce Updated ChangeLog. 2021-03-26 10:20:25 +02:00
Lauri Ojansivu d532a3591f Added package-lock.json and updated .gitignore
Thanks to xet7 !
2021-03-26 10:19:03 +02:00
Lauri Ojansivu 03a9f4766a Updated translations. 2021-03-26 10:17:27 +02:00
Lauri Ojansivu 96f3e3a958 Updated ChangeLog. 2021-03-26 10:09:51 +02:00
Lauri Ojansivu a249ffc805 Admin Panel/Settings/Accounts: Hide system messages of all users.
Thanks to bbyszio, r4nc0r and xet7 !

Related #3345
2021-03-26 10:05:28 +02:00
Lauri Ojansivu 5f53f8cc01 Updated translations. 2021-03-26 08:31:22 +02:00
Lauri Ojansivu ca3f621572 Updated ChangeLog. 2021-03-25 12:26:33 +02:00
Lauri Ojansivu a0e1b6f918 Fix translations. 2021-03-25 12:24:49 +02:00
Lauri Ojansivu c76d44b5c7 Updated ChangeLog. 2021-03-25 12:20:35 +02:00
Lauri Ojansivu ccc9efb270 - Added translation: español de América Latina
- Some lint fixes

Thanks to translators!
2021-03-25 12:18:33 +02:00
Lauri Ojansivu 2ebc34e901 Updated ChangeLog. 2021-03-25 11:25:26 +02:00
Lauri Ojansivu 04566d3f40 Merge pull request #3669 from jrsupplee/trello-import-links
Add Trello attached links to the card description
2021-03-25 11:16:32 +02:00
John R. Supplee 1083a92816 Add Trello attached links to the card description 2021-03-24 16:28:52 +02:00
John Supplee bb7490a32b Merge branch 'master' of https://github.com/wekan/wekan into search 2021-03-19 21:10:16 +02:00
John Supplee 9e8399612b Add environment variable and snap configuration option for results per page 2021-03-19 21:09:39 +02:00
Lauri Ojansivu df54863e72 v5.07 2021-03-19 11:12:32 +02:00
Lauri Ojansivu 8f340326b0 Updated translations. 2021-03-19 11:08:36 +02:00
Lauri Ojansivu 42975bc8ab Updated ChangeLog. 2021-03-19 11:05:29 +02:00
Lauri Ojansivu adb5487cdc Merge pull request #3662 from ednamaeG/sort-fix
Fixed sort cards feature
2021-03-19 11:03:10 +02:00
mae 4aad9ca498 fix sort cards feature 2021-03-19 12:13:20 +08:00
Lauri Ojansivu 972d023e95 v5.06 2021-03-18 18:36:13 +02:00
Lauri Ojansivu acabef4652 Updated translations. 2021-03-18 18:15:52 +02:00
Lauri Ojansivu f77651ba05 Updated ChangeLog. 2021-03-18 17:42:17 +02:00
Lauri Ojansivu 23e349d277 Merge pull request #3661 from Majed6/copy_href
Fixed Bug: copy to clipboard uses pathname
2021-03-18 17:41:47 +02:00
Lauri Ojansivu 37d9a6659a Merge pull request #3648 from Majed6/relative-url-fixes
Fixed Bug: Calendar & parent cards URLs used absolute URLs
2021-03-18 17:37:55 +02:00
Majed6 8796c46810 Fixed Bug: copy to clipboard uses pathname 2021-03-18 16:48:53 +03:00
John Supplee 0ebb427a00 Update the server error message 2021-03-18 02:04:25 +02:00
Lauri Ojansivu 4960891bd9 Updated translations. 2021-03-16 17:33:03 +02:00
Majed6 43482d9e48 Fixed Bug: Calendar & parent cards URLs used absolute URLs 2021-03-13 15:08:28 +03:00
John R. Supplee 299410f8b4 Merge branch 'master' into search 2021-03-11 18:28:55 +02:00
John R. Supplee 07aa20a3cd Fix for Due Cards and some cleanup 2021-03-11 02:05:46 +02:00
Lauri Ojansivu ee323d97b4 v5.05 2021-03-11 00:05:25 +02:00
Lauri Ojansivu d6b447f70a Updated translations. 2021-03-10 23:59:12 +02:00
John R. Supplee 06cae36199 Merge branch 'master' of https://github.com/wekan/wekan into search 2021-03-10 12:41:14 +02:00
John R. Supplee 183404a5f8 Code cleanup and remove debugging code 2021-03-10 12:40:20 +02:00
John R. Supplee 6def7d6f70 Move query parsing to Query class 2021-03-10 12:39:39 +02:00
John R. Supplee 097cae1f8c More integration with constants and query classes 2021-03-09 19:30:04 +02:00
John Supplee ba00311dd4 Add more constants and convert params object to a class 2021-03-09 02:21:43 +02:00
Lauri Ojansivu 203fafdf7c Updated translations. 2021-03-08 22:16:18 +02:00
Lauri Ojansivu 62e90723d1 Updated ChangeLog. 2021-03-08 22:13:50 +02:00
Lauri Ojansivu 77372ccce1 Merge pull request #3641 from chrisi51/master
change url scheme recognition for allowing abasurl to link
2021-03-08 22:10:49 +02:00
John R. Supplee 849b608933 Start adding constants for search operators and predicates 2021-03-08 19:18:01 +02:00
Christian Hillebrand fdb4980b68 change url scheme recognition for allowing abasurl to link
autolinking is not working for abasurl as it contains not url conform characters so you would still have to link it manually but it is not sanitized anymore.
2021-03-08 10:48:50 +01:00
Lauri Ojansivu ff4f5e6c04 v5.04 2021-03-07 18:06:27 +02:00
Lauri Ojansivu 0bb3b67075 Fixed generating API docs and Wekan Custom Fields REST API.
Thanks to xet7 !
2021-03-07 17:57:24 +02:00
Lauri Ojansivu e16b06b44a Updated ChangeLog. 2021-03-07 16:19:17 +02:00
Lauri Ojansivu ac9b23f00f OpenPower MiniCloud emergency maintenance has finished, so can now build Wekan for ppc64le.
Thanks to OpenPower Minicloud !
2021-03-07 16:16:12 +02:00
Lauri Ojansivu f562bdd801 Updated translations. 2021-03-07 16:06:22 +02:00
Lauri Ojansivu 0c05942b45 Updated ChangeLog. 2021-03-07 16:03:29 +02:00
Lauri Ojansivu 9db3c93116 Speed improvement: Delete presences older than one week, and add index to presences serverId.
Thanks to xet7 !

Related #3345
2021-03-07 15:58:15 +02:00
Lauri Ojansivu ce1f3365bb Updated translations. 2021-03-07 12:38:04 +02:00
John R. Supplee 4ed5c3e4b8 Create array of cards from card search result card ids instead of re-running
the search on the client side.
2021-03-07 02:12:58 +02:00
John R. Supplee 9061180983 Code cleanup 2021-03-07 02:12:31 +02:00
John R. Supplee be970e4cea Merge branch 'search' of github.com:jrsupplee/wekan into search 2021-03-06 10:40:28 +02:00
John Supplee 8f978c23b4 Modify Broken Cards to use new search functions and component 2021-03-05 23:47:12 +02:00
John Supplee 5f53c71b0c Merge branch 'master' into search 2021-03-05 21:46:06 +02:00
John Supplee 58020863a8 Handle subscriptions better
* use onReady and onStop callbacks when subscribing
* show an server error message when the server returns an error
* call stop() on subscriptions
2021-03-05 21:20:55 +02:00
Lauri Ojansivu 3ce3612047 Updated ChangeLog. 2021-03-05 21:15:31 +02:00
Lauri Ojansivu 44c9eebc4c Merge branch 'flawless-execution-feat/edit-custom-field' 2021-03-05 21:13:52 +02:00
Lauri Ojansivu cf6cc0e59d Merge branch 'feat/edit-custom-field' of https://github.com/flawless-execution/wekan into flawless-execution-feat/edit-custom-field 2021-03-05 21:13:41 +02:00
Lauri Ojansivu 2b1fc8d07f Updated ChangeLog. 2021-03-05 21:13:13 +02:00
Lauri Ojansivu e7d7ddd698 Merge pull request #3635 from Majed6/originRelativeUrl
Fixed Bug: inconsistent use of relative/absolute URLs
2021-03-05 21:11:42 +02:00
Lauri Ojansivu 1d6bfc5dd6 Updated ChangeLog. 2021-03-05 20:54:40 +02:00
Lauri Ojansivu 0ccdbdcbe9 Merge pull request #3633 from chrisi51/autolink-settings
Added autolinking settings in admin backend - tbc
2021-03-05 20:52:13 +02:00
Lauri Ojansivu 463346b867 Updated ChangeLog. 2021-03-05 20:37:16 +02:00
Lauri Ojansivu f293700db3 Merge pull request #3634 from jrsupplee/issue-3587
Fix search on labels server error
2021-03-05 19:40:24 +02:00
Majed6 b4e343369a Fixed Bug: inconsistent use of relative/absolute URLs
Some pages use relative links such as boards link at the home page.
 Others use absolute url such as cards in boards' lists.
 This commits goal is to allow for consistent use of relative
  urls.

Origin relative URLs also helps decoupling Wekan from the infrastructure
 it's deployed on. i.e if it's being served, it should work.
2021-03-05 15:05:53 +03:00
John R. Supplee da1d94775c Fix search on labels crashing bug 2021-03-04 18:35:02 +02:00
Christian Hillebrand 28582b7e77 correction of a typo 2021-03-04 17:04:29 +01:00
Christian Hillebrand 0f4a97f3a6 add automatic-linked-url-schemes 2021-03-04 16:45:16 +01:00
Christian Hillebrand 0f75234ed2 add automaticLinkedUrlSchemes 2021-03-04 16:42:35 +01:00
Christian Hillebrand bc2556139a add automaticLinkedUrlSchemes 2021-03-04 16:40:03 +01:00
Christian Hillebrand c1f52a5e5a add automaticLinkedUrlSchemes 2021-03-04 16:38:47 +01:00
Christian Hillebrand ab24b3262c add automaticLinkedUrlSchemes 2021-03-04 16:36:48 +01:00
chrisi51 42994efa9d Added real autolinking and simpler adding of new url schemes
to add additional URL Schemes just put your scheme to urlschemes
2021-03-04 16:30:06 +01:00
John Supplee 28aebaa06b Make search instructions code more uniform 2021-03-04 02:13:22 +02:00
Lauri Ojansivu 44cf82caab Updated ChangeLog. 2021-03-03 18:19:32 +02:00
Lauri Ojansivu a44ca39eb8 Try to fix Snap: Removed fibers multi arch from Snap, because Snap build servers do not build corretly with it.
Thanks to xet7.
2021-03-03 18:16:29 +02:00
Lauri Ojansivu 3f70c395e1 v5.03 2021-03-03 16:56:02 +02:00
Lauri Ojansivu 04383c0302 Removed temporary file. 2021-03-03 16:52:15 +02:00
Lauri Ojansivu 55d022eefc Updated ChangeLog. 2021-03-03 16:44:13 +02:00
Lauri Ojansivu 7d3917adb7 Fixed Bug: Link at board title can not be edited.
Thanks to jonesrussell42, aiac, bbyszio and xet7 !

Fixes #3622
2021-03-03 16:39:34 +02:00
Lauri Ojansivu 7eeeab8486 Updated translations. 2021-03-03 15:34:37 +02:00
Lauri Ojansivu 88a46ef59a Updated ChangeLog. 2021-03-03 15:26:20 +02:00
Lauri Ojansivu e4a9dc25ec Revert Removed extra imports of Meteor. Hopefully fixes email notifications
and rules on old cars not working.

Thanks to xet7 !
2021-03-03 15:23:43 +02:00
Lauri Ojansivu dfb563a330 Add link to issue template about email settings. 2021-03-03 15:18:04 +02:00
John R. Supplee 329256712b Merge branch 'master' into search 2021-03-03 11:47:56 +02:00
Lauri Ojansivu 16dbb88ee3 Updated ChangeLog. 2021-03-02 18:50:18 +02:00
Lauri Ojansivu 626f435edf Hide email settings from Sandstorm Wekan Admin Panel.
Thanks to ocdtrekkie and xet7 !

Related https://github.com/wekan/wekan/commit/65b8220fe53349695a335bdb8b9692f82d4b3329
2021-03-02 18:45:02 +02:00
Lauri Ojansivu d4dd5d7a61 v5.02 2021-03-02 16:40:50 +02:00
Lauri Ojansivu de13b8b9ba Removed extra imports of Meteor.
Thanks to xet7 !
2021-03-02 16:25:27 +02:00
Lauri Ojansivu 0aabb0b364 Fix lint. 2021-03-02 16:08:29 +02:00
Lauri Ojansivu 3605072650 Updated translations. 2021-03-02 16:04:25 +02:00
Lauri Ojansivu 6272aabefb Updated ChangeLog. 2021-03-02 15:56:28 +02:00
Lauri Ojansivu bf2446614c Merge pull request #3620 from n8ores/master
Add attachmentId to the Webhook data
2021-03-02 15:50:53 +02:00
Lauri Ojansivu 65b8220fe5 Fix SMTP port lost after upgrade. STMP settings are made only with environment variables on non-Sandstorm platforms.
Note: Sending email on Sandstorm Wekan does not work yet.

Thanks to jrsupplee and xet7 !

Fixes #3529,
Fixes #3016,
Fixes #2375,
Fixes #2598,
Fixes wekan/wekan-snap#78
2021-03-02 15:33:59 +02:00
John R. Supplee e0b544fc7e Add new Blaze search component 2021-03-01 20:18:44 +02:00
n8ores d296918fcd Revert "Add startup script etc"
This reverts commit 3453690fc2.
2021-03-01 18:19:09 +13:00
n8ores c9a2d439e5 Merge remote-tracking branch 'upstream/master' 2021-03-01 18:13:41 +13:00
n8ores 73f36bcf33 Add AttachmentId to webhook data 2021-03-01 18:12:09 +13:00
John R. Supplee a1bda1169e Update Global Search, Due Cards, and My Cards to use the same
code for searching and display
2021-03-01 01:49:56 +02:00
Lauri Ojansivu 8f5089fd46 Updated translations. 2021-03-01 00:02:34 +02:00
n8ores ae8b17e0fb Merge remote-tracking branch 'upstream/master' 2021-03-01 10:57:07 +13:00
n8ores 3453690fc2 Add startup script etc 2021-03-01 10:56:51 +13:00
Lauri Ojansivu bc1f607c8e Updated ChangeLog. 2021-02-28 19:20:55 +02:00
Lauri Ojansivu e0382139b6 Merge pull request #3618 from ChrisMagnuson/master
Add sort to rest API
2021-02-28 19:13:26 +02:00
Chris Magnuson 65d280da8a Add sort to rest API 2021-02-27 16:24:12 -05:00
Lauri Ojansivu e618070068 Updated translations. 2021-02-27 18:51:34 +02:00
Lauri Ojansivu 8181074238 Merge pull request #3617 from jrsupplee/search
Global Search enhancements and fixes
2021-02-27 17:24:35 +02:00
John R. Supplee b0e4aedd3d Update search instructions 2021-02-27 17:02:42 +02:00
John R. Supplee faa101224a Add new has predicates for more fields 2021-02-27 02:26:58 +02:00
John R. Supplee eb7fc0fb26 Comment out debugging code 2021-02-27 00:56:12 +02:00
John Supplee a63a61e7fc Fix problem with dates in selector being unpickled as a String 2021-02-26 23:19:12 +02:00
John Supplee 223cc07139 Add instructions for limit operator 2021-02-26 18:51:54 +02:00
John Supplee 62b0d371ee Add new limit operator 2021-02-26 17:31:44 +02:00
Lauri Ojansivu 884b678bd0 Updated ChangeLog. 2021-02-26 15:01:18 +02:00
John Supplee 2930e9cadb Merge branch 'master' of https://github.com/wekan/wekan into search 2021-02-26 14:49:53 +02:00
Lauri Ojansivu 6103265488 v5.01 2021-02-26 14:24:19 +02:00
Lauri Ojansivu c1f5dfc02e Updated translations. 2021-02-26 14:19:20 +02:00
John Supplee 8e911a42f5 Fixes to due predicates 2021-02-26 14:11:24 +02:00
Lauri Ojansivu f41c1153d2 Updated ChangeLog. 2021-02-26 13:29:13 +02:00
Lauri Ojansivu ff03171f55 Merge pull request #3610 from n8ores/customFieldsFix
Fix syntax typo
2021-02-26 13:26:49 +02:00
John Supplee 5fe58dc9ae Add instructions for sort operator 2021-02-26 13:11:54 +02:00
John Supplee 0c1cff52b2 Update explanation of days predicate 2021-02-26 12:52:36 +02:00
n8ores 8e29a52d71 Correct typo 2021-02-26 20:44:03 +13:00
n8ores 12a0e73587 Fix syntax typo 2021-02-26 20:01:09 +13:00
John Supplee a3229ea965 Fixes for duration predicates 2021-02-26 01:13:45 +02:00
John R. Supplee 43f40c4085 Fix sort operator
* Add server publications for next and previous page
* Add ability to sort ascending or descending
2021-02-25 18:38:51 +02:00
Lauri Ojansivu 250e79f53c v5.00 2021-02-25 15:14:48 +02:00
Lauri Ojansivu c8b2c19010 Updated translations. 2021-02-25 15:12:47 +02:00
Lauri Ojansivu fe1add57f1 Updated ChangeLog. 2021-02-25 15:03:16 +02:00
Lauri Ojansivu 332f830cc2 Fixed Unable to remove old Board, reappears.
Thanks to chirrut2, uusijani, cimm, anicolaides, Philipoo0 and xet7.

Fixes #2613
2021-02-25 15:00:49 +02:00
Lauri Ojansivu ccd69dfcf7 Updated translations. 2021-02-25 12:09:31 +02:00
Lauri Ojansivu 7e13d09c3c v4.99 2021-02-25 09:26:27 +02:00
Lauri Ojansivu 71c0c62ee8 Updated translations. 2021-02-25 09:21:20 +02:00
Lauri Ojansivu c599e60e75 Updated ChangeLog. 2021-02-25 09:18:23 +02:00
Lauri Ojansivu f2241ba3de Updated to Meteor 2.1
Thanks to Meteor developers!
2021-02-25 09:16:49 +02:00
Lauri Ojansivu 85fb240b69 Updated ChangeLog. 2021-02-25 09:16:09 +02:00
Lauri Ojansivu 71725f1b26 Fixed CRITICAL SECURITY ISSUE of SMTP password visible to Admin at
Admin Panel by using browser inspect to see behind asterisks.

Thanks to Georg Krause and xet7 !
2021-02-25 09:02:23 +02:00
Lauri Ojansivu 64d4c3f971 Updated ChangeLog. 2021-02-24 20:51:46 +02:00
Lauri Ojansivu 4c24b042d0 Updated ChangeLog. 2021-02-24 20:26:01 +02:00
Lauri Ojansivu a43736b5c6 Update wekan/releases/up.sh script: Can not build ppc64le version because
OpenPower Minicloud is having emergency maintenance.

Thanks to xet7 !
2021-02-24 20:23:23 +02:00
Lauri Ojansivu 874c2a6212 v4.98 2021-02-24 19:54:37 +02:00
Lauri Ojansivu 94492b01cd v4.97 2021-02-24 19:48:03 +02:00
Lauri Ojansivu ab6f8397ce Updated ChangeLog. 2021-02-24 19:45:08 +02:00
Lauri Ojansivu b105088c28 Update release.sh script: Also build Sandstorm version of Wekan with same script.
Thanks to xet7 !
2021-02-24 19:43:20 +02:00
Lauri Ojansivu 1070805a0f Updated ChangeLog. 2021-02-24 19:41:27 +02:00
Lauri Ojansivu 799ae886c5 Update release-bundle.sh script: Can not build ppc64le version because
OpenPower Minicloud is having emergency maintenance.

Thanks to xet7 !
2021-02-24 19:37:51 +02:00
Lauri Ojansivu 1276b23817 Updated translations. 2021-02-24 19:28:57 +02:00
Lauri Ojansivu 6ecb5b5c64 Updated translations. 2021-02-24 19:14:39 +02:00
Lauri Ojansivu cbadf5e57c Updated ChangeLog. 2021-02-24 18:34:10 +02:00
Lauri Ojansivu 3a2deb0039 Admin Panel/People/People/New User: Added Initials.
Thanks to xet7 !
2021-02-24 18:31:44 +02:00
Lauri Ojansivu 0480c2195c Updated ChangeLog. 2021-02-24 17:24:17 +02:00
Lauri Ojansivu fde6a65933 Updated Node.js to v12.21.0
Thanks to Node.js developers!
2021-02-24 17:21:06 +02:00
Lauri Ojansivu 6f6249690b Updated ChangeLog. 2021-02-24 17:04:10 +02:00
Lauri Ojansivu c23aca78ba Updated GitHub issue template links.
Thanks to atlantsecurity and xet7 !

Related #3598
2021-02-24 17:01:53 +02:00
Lauri Ojansivu a195b52d34 Merge branch 'ednamaeG-sort-feature' 2021-02-24 16:47:31 +02:00
Lauri Ojansivu 09a13ef75f Made sort cards feature translatable. 2021-02-24 16:45:16 +02:00
Lauri Ojansivu 70e7534933 Merge branch 'sort-feature' of https://github.com/ednamaeG/wekan into ednamaeG-sort-feature 2021-02-24 16:01:59 +02:00
Lauri Ojansivu c95edbe25a Updated ChangeLog. 2021-02-24 15:57:25 +02:00
Lauri Ojansivu 4f9b4059a6 Merge pull request #3597 from jrsupplee/search
Global Search Updates
2021-02-24 15:55:46 +02:00
Lauri Ojansivu 9be19bf811 Updated ChangeLog. 2021-02-24 15:54:08 +02:00
Lauri Ojansivu 0a728f805b Added translation: Persian (Iran).
Thanks to translators!
2021-02-24 15:52:11 +02:00
John R. Supplee c7276ee614 Add new status predicates of public and private 2021-02-23 17:56:28 +02:00
John R. Supplee b419e17cac Only show label names on global search for type='board' 2021-02-23 17:49:32 +02:00
Lauri Ojansivu b9405bfb64 Update owasp-zap-scan.yml 2021-02-22 19:07:15 +02:00
Lauri Ojansivu 5d8856a1c7 Update owasp-zap-scan.yml 2021-02-22 19:04:16 +02:00
Lauri Ojansivu 076fd7e83c Create owasp-zap-scan.yml
https://github.com/marketplace/actions/owasp-zap-baseline-scan
2021-02-22 18:58:24 +02:00
Lauri Ojansivu 5073c0e9ad Create owasp-zap-scan.yml
https://github.com/marketplace/actions/owasp-zap-baseline-scan
2021-02-22 18:43:24 +02:00
Lauri Ojansivu d95df7245c Updated translations. 2021-02-22 18:01:46 +02:00
Lauri Ojansivu 41360ceb71 Updated ChangeLog. 2021-02-21 23:20:08 +02:00
Lauri Ojansivu 042594ffca Merge pull request #3584 from n8ores/customFieldsFix
Fix bugs with customFields identified in Issue #3574
2021-02-21 23:16:37 +02:00
John R. Supplee a8a9ee91bf Add help instructions for new has operator 2021-02-21 19:57:35 +02:00
John R. Supplee 726be664c8 Add new has operator for searching 2021-02-21 01:41:58 +02:00
John R. Supplee c02b71e0e1 Add searching of attachment names 2021-02-21 01:39:34 +02:00
Louis Orleans 9cbef4ba4b 🔒 fix warning from deepcode 2021-02-20 14:11:17 -08:00
Louis Orleans 24035329b8 ✨ edit custom field dropdown item 2021-02-20 13:50:24 -08:00
Louis Orleans 457977f954 ✨ add and remove dropdown items 2021-02-20 12:46:29 -08:00
Louis Orleans 373dc5cadb ⏪ Revert "🎨 format with Prettier"
This reverts commit a35cfe660e.
2021-02-20 09:27:33 -08:00
Louis Orleans a35cfe660e 🎨 format with Prettier 2021-02-20 09:02:36 -08:00
Louis Orleans db666eec65 🐛 fix updating fields 2021-02-20 09:02:12 -08:00
John R. Supplee 5b51a36c62 Add searching of checklists 2021-02-20 18:35:44 +02:00
Louis Orleans 586473aaa7 ✨ add custom field edit REST API 2021-02-19 11:21:13 -08:00
mae 2226ece4b7 added sort feature for viewing of cards 2021-02-19 08:42:09 +08:00
n8ores 950e41e8f7 Fix bugs with customFields identified in Issue #3574
Fixed bug with the reference to the customFieldValue in the cards.js

Activity Insert was not being passed the listId, swimlaneId which was required when building the webhook text string.

Added customField and customFieldValue as default values for the webhook msgs. There is no good reason to exclude these (they will only be included when changing a customField anyway). Updated the docker-compose comment to reflect this change.
2021-02-18 22:52:18 +13:00
Lauri Ojansivu 49df8f4b43 Updated ChangeLog. 2021-02-13 15:56:47 +02:00
Lauri Ojansivu 2e9ad941c0 Fix development script to escape character.
Thanks to xet7 !
2021-02-13 15:54:37 +02:00
Lauri Ojansivu dec21f34e9 v4.96 2021-02-13 15:06:15 +02:00
Lauri Ojansivu c8605b0cdf Updated translations. 2021-02-13 14:47:57 +02:00
Lauri Ojansivu 3d6d191d59 Updated ChangeLog. 2021-02-13 14:34:10 +02:00
Lauri Ojansivu 8f61278b33 Updated ChangeLog. 2021-02-13 02:43:33 +02:00
Lauri Ojansivu 5723c0c96f Merge pull request #3572 from mfilser/master
Lists, show also 0 cards at column description
2021-02-13 02:42:44 +02:00
Martin Filser 2830bdc075 Lists, show also 0 cards at column description 2021-02-13 01:13:10 +01:00
Lauri Ojansivu 37ab621a7e Updated ChangeLog. 2021-02-12 21:58:09 +02:00
Lauri Ojansivu f9f286e896 Merge pull request #3571 from mfilser/master
Checklist drag handle now at the left side (same place as for the checklist items)
2021-02-12 21:56:58 +02:00
Lauri Ojansivu e47545aa91 Updated ChangeLog. 2021-02-12 21:55:11 +02:00
Lauri Ojansivu 799417e0e8 Merge pull request #3570 from meerkampdvv/master
Helm: Made SecretEnv a secret and added default mongodb name as Wekan
2021-02-12 21:54:44 +02:00
Lauri Ojansivu cea5f0a30c Updated translations. 2021-02-12 21:51:43 +02:00
Lauri Ojansivu ce61e80261 Updated ChangeLog. 2021-02-12 21:46:39 +02:00
Lauri Ojansivu ec23124242 Merge pull request #3569 from helioguardabaxo/master
Modern theme: Remove font color when the card has a color
2021-02-12 21:46:10 +02:00
Lauri Ojansivu 678cc56836 Updated ChangeLog. 2021-02-12 21:44:14 +02:00
Lauri Ojansivu adf94b5e21 Merge pull request #3564 from lindhork/currency_decimal_separator
added replacement from comma to dot
2021-02-12 21:43:47 +02:00
Martin Filser d4e40c376a Checklist drag handle now at the left side (same place as for the checklist items)
- most people scroll with their right thumb, so it happens sometimes
  that they move whole checklists by accident.
- this fixes the problem, and also it looks more clean than a drag
  handle in the middle of the screen
2021-02-12 20:42:58 +01:00
Lauri Ojansivu 3cbf678671 Updated ChangeLog. 2021-02-12 21:42:07 +02:00
Lauri Ojansivu c7ec07ed47 Added ChangeLog update script. 2021-02-12 21:40:16 +02:00
Lauri Ojansivu 754d7d099b Updated ChangeLog. 2021-02-12 21:37:42 +02:00
Lauri Ojansivu c4cc3f176e Merge pull request #3563 from mfilser/master
Mobile View, list header is now always at top and only lists/cards view have a scroll area
2021-02-12 21:36:28 +02:00
Jan Meerkamp 79a2921e1d fixed fail when no secretEnv was defined 2021-02-12 18:54:56 +01:00
Jan Meerkamp d64a61bab9 removed not used var 2021-02-12 18:42:05 +01:00
Jan Meerkamp 0ee78865e1 Helm: Made SecretEnv a secret and added default mongodb name as Wekan 2021-02-12 18:34:55 +01:00
helioguardabaxo 2c29b150c5 Modern theme: Remove font color when the card has a color 2021-02-12 13:56:46 -03:00
lindhork 0801a2fbc4 added explanatory comment 2021-02-12 01:25:14 +01:00
lindhork af7ef25c9d added replacement from comma to dot 2021-02-12 01:17:11 +01:00
Martin Filser f852474b56 Mobile View, list header is now always at top and only lists/cards view have a scroll area 2021-02-12 00:34:50 +01:00
Lauri Ojansivu 54cfe5984b Updated ChangeLog. 2021-02-11 19:10:23 +02:00
Lauri Ojansivu 1bc07b1b4a Teams/Organizations: Added more code to Admin Panel for saving and editing. In Progress.
Thanks to xet7 !

Related #802
2021-02-11 19:07:34 +02:00
Lauri Ojansivu b8d52a5aa8 Updated ChangeLog. 2021-02-11 18:13:37 +02:00
Lauri Ojansivu af58b1039e Merge pull request #3561 from bronger/issue-3133
Changed default behaviour for BIGEVENTS that no activity matches it.
2021-02-11 18:11:47 +02:00
Torsten Bronger a124f1dc38 Changed default behaviour for BIGEVENTS that no activity matches it.
Previously, all changes to due dates notified all board members.  Now, you have
to set the environment variable BIGEVENTS_PATTERN explicitly to "due" to
restore this behaviour.  By default, no activity is considered a "big event".
Fixes <https://github.com/wekan/wekan/issues/3133>.
2021-02-11 16:21:36 +01:00
Lauri Ojansivu fa3e6267fd Updated ChangeLog. 2021-02-11 16:49:15 +02:00
Lauri Ojansivu 011f86f368 Updated Node.js to v12.20.2
Thanks to Node.js developers!
2021-02-11 16:46:40 +02:00
Lauri Ojansivu 0f6edc477e Removed package-lock.json. 2021-02-11 16:29:40 +02:00
Lauri Ojansivu bade652c02 Updated translations. 2021-02-11 16:28:02 +02:00
Lauri Ojansivu 03ab067d3a Updated ChangeLog. 2021-02-11 16:22:46 +02:00
Lauri Ojansivu e3a29ae82f Merge pull request #3559 from lindhork/header_padding
added padding
2021-02-11 16:21:51 +02:00
Lauri Ojansivu 3a9ce0f6ce Updated ChangeLog. 2021-02-11 16:19:07 +02:00
Lauri Ojansivu d6d40b35a5 Merge pull request #3557 from lindhork/master
Added possibility to specify hours in single digits in 24 hour format
2021-02-11 16:18:02 +02:00
Lauri Ojansivu 8baecb5911 Updated ChangeLog. 2021-02-11 16:16:38 +02:00
Lauri Ojansivu 3bb8fe9076 Merge pull request #3560 from mfilser/member_avatar_remove_red_line
Minicard, remove red line below member avatar icon
2021-02-11 16:15:20 +02:00
Lauri Ojansivu b93d66ce0b Updated ChangeLog. 2021-02-11 16:00:28 +02:00
Lauri Ojansivu b71fde7ff3 Merge pull request #3556 from pichouk/master
Add /api/boards_count endpoint for statistics
2021-02-11 15:57:35 +02:00
lindhork 5c7b060f19 moved the house icon slightly right 2021-02-11 13:39:51 +01:00
Martin Filser 1f544fff52 Minicard, remove red line below member avatar icon
- fixes comment at #3515
  https://github.com/wekan/wekan/issues/3515#issuecomment-777312174
2021-02-11 12:04:22 +01:00
lindhork 019520a793 added padding 2021-02-11 04:26:56 +01:00
lindhork 29c22efed0 Error message corrected 2021-02-11 03:55:16 +01:00
lindhork 650519683c Added compatibility for single digit hours in 24 hours format 2021-02-11 03:54:12 +01:00
Kyâne bcf5a586c7 Add /api/boards_count endpoint for statistics 2021-02-11 00:49:34 +01:00
Lauri Ojansivu 5d8f5beb2a Updated translations. 2021-02-10 18:09:22 +02:00
Lauri Ojansivu 7e58627eaf Updated ChangeLog. 2021-02-09 20:37:00 +02:00
Lauri Ojansivu 89be0f80b9 Merge pull request #3551 from mfilser/checklistitems-not_always_insert_at_the_end
Checklistitems are now inserted always at the end of the checklist
2021-02-09 20:35:32 +02:00
Martin Filser e8b6b78dfa Checklistitems are now inserted always at the end of the checklist 2021-02-09 16:08:05 +01:00
Lauri Ojansivu d5ea44a760 v4.95 2021-02-08 23:44:03 +02:00
Lauri Ojansivu 0638d43cae Updated translations. 2021-02-08 23:42:41 +02:00
Lauri Ojansivu c5d133aaff Updated ChangeLog. 2021-02-08 23:39:47 +02:00
Lauri Ojansivu 067c2a6fe0 Merge branch 'mfilser-master' 2021-02-08 23:35:59 +02:00
Lauri Ojansivu 9e73a72b8b Merge branch 'master' of https://github.com/mfilser/wekan into mfilser-master 2021-02-08 23:27:39 +02:00
Lauri Ojansivu ae23b7611d Updated ChangeLog. 2021-02-08 23:04:19 +02:00
Lauri Ojansivu e34a284036 Updated release scripts. 2021-02-08 23:00:35 +02:00
Martin Filser 116aae0828 Deleting a linked card blocked the parent board to load #3540 2021-02-08 21:42:16 +01:00
Lauri Ojansivu f33c31aa83 Removed extra unneeded text from ChangeLog. 2021-02-08 22:30:35 +02:00
Lauri Ojansivu c7a742d1de Updated ChangeLog. 2021-02-08 22:21:52 +02:00
Lauri Ojansivu d0df3a2915 Updated release scripts. 2021-02-08 22:16:55 +02:00
Lauri Ojansivu 1c494803b0 Updated dependencies. 2021-02-08 22:10:30 +02:00
Lauri Ojansivu 0bd0a70564 Fix typo. 2021-02-08 21:56:45 +02:00
Lauri Ojansivu 5cd6470358 v4.94 2021-02-08 21:47:37 +02:00
Lauri Ojansivu a7d0576736 Updated translations. 2021-02-08 21:41:57 +02:00
Lauri Ojansivu 76e9e2076e Updated ChangeLog. 2021-02-08 21:38:57 +02:00
Lauri Ojansivu dcec5b5cb0 Update release scripts.
Thanks to xet7 !
2021-02-08 21:37:04 +02:00
Lauri Ojansivu b4352ada27 Updated dependencies.
Thanks to developers of dependencies !
2021-02-08 21:30:17 +02:00
Lauri Ojansivu 76047e5351 Updated ChangeLog. 2021-02-08 21:12:28 +02:00
Lauri Ojansivu 60fedad3fe Fixed lint.
Thanks to xet7 !
2021-02-08 21:11:13 +02:00
Lauri Ojansivu d57eb6a2fc Fixed Board does not load, by disabling Custom Fields sorting.
Thanks to marcungeschikts, olivierlambert and xet7 !

Fixes #3540
2021-02-08 21:08:36 +02:00
Lauri Ojansivu c33d39f5d0 Updated ChangeLog. 2021-02-08 19:48:07 +02:00
Lauri Ojansivu 81aa17f3f0 Merge pull request #3545 from mfilser/settings-show_cards_count_broken_at_mobile_view
Settings, "Show cards count" now works at mobile view too
2021-02-08 19:45:40 +02:00
Martin Filser 8475201db8 Settings, "Show cards count" now shows also 1 card 2021-02-08 18:22:55 +01:00
Martin Filser 40907ef1d8 Settings, "Show cards count" max value now endless
- there could be users who want to enter moren than 99
2021-02-08 18:22:55 +01:00
Martin Filser b79fc53265 Settings, "Show cards count" keyboard input possible 2021-02-08 18:22:55 +01:00
Lauri Ojansivu 2972351e79 Updated ChangeLog. 2021-02-08 19:03:16 +02:00
Lauri Ojansivu c82de08886 Merge pull request #3544 from jrsupplee/issue-3539
Fix bug in adding new users #3539
2021-02-08 19:01:41 +02:00
Lauri Ojansivu 7806945965 Comment out multi arch. 2021-02-08 18:57:16 +02:00
John R. Supplee 9a6a0b0047 Fix bug in adding new users
New `importUsernames` was not being parsed into an array before
calling `setCreateUser()`

Issue #3539
2021-02-08 18:48:59 +02:00
Lauri Ojansivu e0c94e3cbb Updated translations. 2021-02-08 17:27:03 +02:00
Lauri Ojansivu 9f328bdee3 Removed duplicate words from translations. 2021-02-08 14:24:15 +02:00
Lauri Ojansivu 7a96adf957 Removed duplicate word from translations.
Thanks to translators!
2021-02-06 17:02:56 +02:00
Lauri Ojansivu 2111e19d59 v4.93 2021-02-06 15:34:39 +02:00
Lauri Ojansivu d93cf08a27 Updated translations. 2021-02-06 15:27:31 +02:00
Lauri Ojansivu a24b64f7ca Updated ChangeLog. 2021-02-06 15:24:04 +02:00
Lauri Ojansivu 625577f145 Merge pull request #3533 from mfilser/master
Notifications, enable line wrapping #3527
2021-02-06 15:22:25 +02:00
Martin Filser e13fa0d2d1 Notifications, enable line wrapping #3527 2021-02-06 12:46:06 +01:00
Lauri Ojansivu d470281a5e Updated ChangeLog. 2021-02-06 12:54:00 +02:00
Lauri Ojansivu 6021438e2e Merge pull request #3532 from mfilser/master
Red line below the avatar now correctly on FireFox #3515
2021-02-06 12:52:17 +02:00
Lauri Ojansivu 737b425aca Try to fix Snap. 2021-02-06 12:51:31 +02:00
Martin Filser d2a35453ef Red line below the avatar now correctly on FireFox #3515 2021-02-06 11:26:10 +01:00
Lauri Ojansivu 77160a76e8 Update rebuild-wekan.sh 2021-02-06 11:13:32 +02:00
Lauri Ojansivu f012a67182 Updated dependencies. 2021-02-06 11:03:18 +02:00
Lauri Ojansivu 2c5e4fad79 Try to fix Snap: Added Typescript. 2021-02-06 10:52:58 +02:00
Lauri Ojansivu 1486f5f620 Try to fix Snap. 2021-02-06 10:26:34 +02:00
Lauri Ojansivu eb1209cb00 Updated ChangeLog. 2021-02-06 08:02:31 +02:00
Lauri Ojansivu bcdaf77a9c Updated Ubuntu base image in Dockerfile. 2021-02-06 08:00:28 +02:00
Lauri Ojansivu e8e97838ef Updated translations. 2021-02-06 00:49:09 +02:00
Lauri Ojansivu bec3f309bd Updated ChangeLog. 2021-02-06 00:43:41 +02:00
Lauri Ojansivu 39bfbbbe0a Merge pull request #3530 from messagerie-melanie2/master
Add the ability to call get_user operation with username
2021-02-06 00:41:05 +02:00
Lauri Ojansivu 57a98e7a5d Updated ChangeLog. 2021-02-06 00:24:44 +02:00
Lauri Ojansivu ea697f2238 Fixed file permissions. Thanks to xet7 ! Fixes #3524, fixes meteor/meteor#11314 2021-02-06 00:18:07 +02:00
magicbelette fd20a9218f Add the ability to call get_user operation with username 2021-02-05 19:58:24 +01:00
Lauri Ojansivu b47794cbc1 Try to fix Docker. 2021-02-03 18:56:44 +02:00
Lauri Ojansivu c3ce44562e Try to fix Docker builds by deleting package-lock.json , see
https://stackoverflow.com/questions/53732973/npm-err-404-not-found-har-validator5-1-2

Thanks to xet7 !

Related #3524
2021-02-03 16:26:21 +02:00
Lauri Ojansivu 4f7803c384 Try to fix Docker builds.
Thanks to xet7 !

Related #3524
2021-02-03 16:07:01 +02:00
Lauri Ojansivu 6e313d1760 Merge branch 'master' of github.com:wekan/wekan 2021-02-03 15:47:22 +02:00
Lauri Ojansivu 0f7a8a25ad Updated ChangeLog. 2021-02-03 15:47:05 +02:00
Lauri Ojansivu c692b7847b Merge pull request #3526 from jrsupplee/fix-3
Fix bug in `uniqueTitle`
2021-02-03 15:46:53 +02:00
Lauri Ojansivu 207893fee8 Merge pull request #3525 from jrsupplee/pull-3519
Set the language on `TAPi18n` when user selects language
2021-02-03 15:41:59 +02:00
John R. Supplee 9ec3574ff6 Fix bug in uniqueTitle
`uniqueTitle` was returning a numbered title even when not necessary
2021-02-03 14:03:33 +02:00
John R. Supplee b0522836e6 Set the language on TAPi18n when user selects language
When the `TAPi18n` initialization code was removed from an `autorun()`
it no longer is rerun when a user's profile language is changed.
2021-02-03 12:20:29 +02:00
Lauri Ojansivu c62396e389 v4.92 2021-02-03 02:32:00 +02:00
Lauri Ojansivu d52e85f298 Updated ChangeLog. 2021-02-03 02:27:18 +02:00
Lauri Ojansivu 05ebae7329 Updated dependencies.
Thanks to developers of dependencies !
2021-02-03 02:25:37 +02:00
Lauri Ojansivu b697bb656e Updated ChangeLog. 2021-02-03 01:50:52 +02:00
Lauri Ojansivu 4d7de2adce Merge pull request #3523 from mfilser/notifications_overlap_avatar_mobile_view
Notifications avatar overlaped at mobile view
2021-02-03 01:49:32 +02:00
Lauri Ojansivu 8a9528e787 Updated README 2021-02-03 01:45:52 +02:00
Martin Filser 6c6cba51fa Notification trash link was not visible if actifity text is too long 2021-02-03 00:20:56 +01:00
Martin Filser 28e23f9d87 Notification, each notification has now more space at top 2021-02-02 23:07:28 +01:00
Martin Filser e31192e97e Notification, split line was missing at mobile view 2021-02-02 23:02:45 +01:00
Martin Filser 26b7137b5c Notification, Avatar overlaped at mobile view 2021-02-02 23:02:33 +01:00
Lauri Ojansivu 912200a2ec Updated ChangeLog.
Related https://github.com/wekan/wekan/discussions/3496
2021-02-02 21:12:56 +02:00
Lauri Ojansivu c42d0d7423 Merge branch 'bronger-sorted-archives' 2021-02-02 21:09:41 +02:00
Lauri Ojansivu 3da66a0fe3 Sorted archives Part 2.
Thanks to xet7 !
2021-02-02 21:08:34 +02:00
Lauri Ojansivu 41e1f8fbc3 Merge branch 'sorted-archives' of https://github.com/bronger/wekan into bronger-sorted-archives 2021-02-02 20:56:09 +02:00
Lauri Ojansivu 130ac3c917 Updated ChangeLog. 2021-02-02 20:55:25 +02:00
Lauri Ojansivu 3774060d32 Createtoken API: Added better description and deleted extra file.
Thanks to magicbelette and xet7 !

Fixes #2887
2021-02-02 20:51:41 +02:00
Lauri Ojansivu d8c8856548 Merge pull request #3520 from messagerie-melanie2/master
Add createtoken API
2021-02-02 20:48:00 +02:00
Lauri Ojansivu efec00a550 Updated ChangeLog. 2021-02-02 20:30:22 +02:00
Lauri Ojansivu 3d3cf1d551 Merge pull request #3521 from mfilser/master
Cards, CustomFields sorted alphabetically, fixes #3517
2021-02-02 20:28:35 +02:00
Lauri Ojansivu c52d17b6fb Updated translations. 2021-02-02 18:47:08 +02:00
Martin Filser c0b9ef5990 Cards, CustomFields sorted alphabetically #3517
- last fix didn't work and disabled alphabetic sorting
- also works with linked cards
2021-02-02 17:45:43 +01:00
Lauri Ojansivu e303159b98 Updated ChangeLog. 2021-02-02 18:40:12 +02:00
Lauri Ojansivu f274b3c26b Try fix removed nonexistent document error.
Thanks to xet7 !

Related #3203,
related #3252,
related #2230
related #1629
2021-02-02 18:36:21 +02:00
Lauri Ojansivu 81fdc9a865 Updated ChangeLog. 2021-02-02 18:33:23 +02:00
Lauri Ojansivu f40c9804f8 Disable some console.log code, that is only needed while developing.
Thanks to xet7 !
2021-02-02 18:31:13 +02:00
Lauri Ojansivu 4d13d51038 Updated ChangeLog. 2021-02-02 18:14:18 +02:00
magicbelette 5c4421dc38 Delete test file 2021-02-02 17:12:57 +01:00
Lauri Ojansivu 76ef6a81ab Merge pull request #3519 from jrsupplee/issue-2074
Hopeful fix for i18n not working in `onRendered()`
2021-02-02 18:07:25 +02:00
magicbelette a7b43d5b57 Add createtoken API 2021-02-02 17:06:06 +01:00
John R. Supplee e4f50d4713 Hopeful fix for i18n not working in onRendered()
* Remove the i18n initialization code from an `autorun()` block
* Add some console statements to help with debugging production.
* Add functions to `Boards` for label colors and color mapping
2021-02-02 17:56:18 +02:00
Lauri Ojansivu 1e71237627 Merge pull request #3516 from mfilser/notifications_overlap_avatar
Avatar overlaped notifications
2021-02-02 16:50:24 +02:00
Torsten Bronger 678c8f6bf6 Printed archivedAt under every item in the archive. 2021-02-02 14:52:14 +01:00
Torsten Bronger 786c27bbec Added sorting by archivedAt in the archive.
I use modifiedAt as a fall back for legacy cards which don't have archivedAt
set yet.
2021-02-02 14:52:12 +01:00
Torsten Bronger 710643d8cb Added field archivedAt to cards, lists, swimlanes, and boards. 2021-02-02 14:52:08 +01:00
Martin Filser e595aba189 Minicard, assignee and red line now aligned again 2021-02-02 09:24:26 +01:00
Martin Filser ea67e94c47 Notification, fixed avatar icon (was an ellipse) 2021-02-02 08:45:37 +01:00
Martin Filser b2c2067f7d Avatar overlaped notifications #3515 2021-02-01 18:26:18 +01:00
Lauri Ojansivu 4fc2d7b935 Updated translations. 2021-01-31 01:26:51 +02:00
Lauri Ojansivu b1b9dd208b Updated ChangeLog. 2021-01-30 20:54:54 +02:00
Lauri Ojansivu ee2f7c077f Added badge for CII Best Practices.
Thanks to CII and xet7 !
2021-01-30 20:51:36 +02:00
Lauri Ojansivu a385d6f4fd Added PGP public key for sending security vulnerability reports. 2021-01-30 20:15:52 +02:00
Lauri Ojansivu 7031b7a3c7 Updated security report email address. 2021-01-30 20:07:03 +02:00
Lauri Ojansivu 0f0a5fba1f Merge branch 'master' of github.com:wekan/wekan 2021-01-30 18:23:00 +02:00
Lauri Ojansivu 1d7af3f011 Updated translations. 2021-01-30 18:22:40 +02:00
Lauri Ojansivu 6fd85f97b3 Updated ChangeLog. 2021-01-30 18:18:54 +02:00
Lauri Ojansivu a6d17f3813 Merge pull request #3509 from jrsupplee/fix-2
Don't reload page when returning default sort
2021-01-30 18:17:39 +02:00
Lauri Ojansivu 4e830ea416 Updated ChangeLog. 2021-01-30 18:15:48 +02:00
Lauri Ojansivu fc5c936272 Merge pull request #3510 from jrsupplee/import-user-mapping
Import user mapping
2021-01-30 18:04:30 +02:00
John R. Supplee b2af684c4d JSON import: add note about unmapped members 2021-01-30 11:44:53 +02:00
John R. Supplee 0446999c63 Add new importUsernames field for import user mapping 2021-01-30 02:35:29 +02:00
John R. Supplee 6920c39752 Don't reload page when returning default sort 2021-01-29 21:09:28 +02:00
Lauri Ojansivu 62ba8ed8d8 v4.91 2021-01-29 15:16:35 +02:00
Lauri Ojansivu 6eeef96886 Updated ChangeLog. 2021-01-29 15:11:02 +02:00
Lauri Ojansivu 4acf852650 Fixed typos in docker-compose.yml.
Thanks to farfoodyou and xet7 !

Fixes #3506
2021-01-29 15:09:11 +02:00
Lauri Ojansivu 9b3f1562a5 Updated translations. 2021-01-29 14:59:37 +02:00
Lauri Ojansivu 49774e46a3 Updated ChangeLog. 2021-01-29 14:57:02 +02:00
Lauri Ojansivu ae2447393d Merge pull request #3505 from jrsupplee/new-search
Use `new RegExp(...)` to define a regex
2021-01-29 13:55:01 +02:00
John R. Supplee 3435192640 only use new RegExp(...) to define regex (not slashes) 2021-01-29 13:15:53 +02:00
John R. Supplee 6ba4da9711 Remove added backticks from regex 2021-01-28 23:42:47 +02:00
Lauri Ojansivu 010a1d07d9 v4.90 2021-01-28 19:24:10 +02:00
Lauri Ojansivu 94d09b0014 Updated translations. 2021-01-28 19:16:53 +02:00
Lauri Ojansivu d6ff442622 Updated ChangeLog. 2021-01-28 19:11:01 +02:00
Lauri Ojansivu f7cc1abc8e Merge pull request #3500 from jrsupplee/patch-5
Fix some bugs when importing Wekan JSON
2021-01-28 19:08:34 +02:00
Lauri Ojansivu bf7b1789ec Added missing backtick quotes.
Thanks to xet7 !
2021-01-28 19:01:30 +02:00
Lauri Ojansivu cf9b482546 Merge pull request #3499 from jrsupplee/patch-6
Create unique board names when importing
2021-01-28 18:58:41 +02:00
John R. Supplee ad6da9bf37 Create unique board names when importing 2021-01-28 18:21:56 +02:00
John R. Supplee d647884b91 Make sure user data is retrieved before proceeding with import 2021-01-28 18:18:31 +02:00
Lauri Ojansivu 5adaaa7f22 v4.89 2021-01-28 18:03:24 +02:00
Lauri Ojansivu 5b77543ab5 Updated ChangeLog. 2021-01-28 17:57:43 +02:00
Lauri Ojansivu 0ff215f78f Try to fix quotes in Global Search.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/3492
2021-01-28 17:51:35 +02:00
Lauri Ojansivu ff787bb6ca v4.88 2021-01-28 16:49:20 +02:00
Lauri Ojansivu 334dfa5cb6 Added back Global Search related code that caused Snap to not build.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/3492
2021-01-28 16:31:49 +02:00
Lauri Ojansivu a17e628872 Updated translations. 2021-01-28 16:24:17 +02:00
Lauri Ojansivu e87ce4cac5 Updated ChangeLog. 2021-01-28 13:49:39 +02:00
Lauri Ojansivu 8678e77c65 Merge pull request #3497 from robert-scheck/fix-ldap-reject-unauthorized
Repair LDAP_REJECT_UNAUTHORIZED=false (broken by commit 31f8912, fixes #3493)
2021-01-28 13:48:03 +02:00
Lauri Ojansivu 66f99f9ad7 Updated ChangeLog. 2021-01-28 13:42:18 +02:00
Lauri Ojansivu b1cdcda8ed Removed quotes from docker-compose.yml settings.
Thanks to XL-Reaper, Vinc89 and xet7 !

Related #2490
2021-01-28 13:39:48 +02:00
Robert Scheck 4c6084ab68 Repair LDAP_REJECT_UNAUTHORIZED=false (broken by commit 31f8912, fixes #3493)
Previous commit 31f89121fe happened to fix
CVE-2021-3309, but unfortunately breaks LDAP_REJECT_UNAUTHORIZED=false.
2021-01-28 11:31:50 +01:00
Lauri Ojansivu fa51ce6fb0 Update: Docker image builds at Docker Hub work. At Quay does not work.
Thanks to xet7 !
2021-01-28 10:11:42 +02:00
Lauri Ojansivu 5708954268 Updated translations. 2021-01-28 03:32:25 +02:00
Lauri Ojansivu 5f23e9caa7 Updated ChangeLog. 2021-01-28 03:24:04 +02:00
Lauri Ojansivu 37372466cc Added many more fields to Export to Excel, and better formatting. Does not yet have all fields.
Thanks to xet7 !

Related #3173
2021-01-28 03:19:35 +02:00
Lauri Ojansivu 442a7b0fcd Removed Global Search related code that caused Snap to not build.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/3492
2021-01-28 01:29:52 +02:00
John R. Supplee 0adde3e06d Fix Wekan JSON import bug
If not all users are mapped the import crashes.
2021-01-28 00:44:48 +02:00
Lauri Ojansivu e0576502d9 Updated translations. 2021-01-27 20:23:41 +02:00
Lauri Ojansivu f8e2fe5794 Updated ChangeLog. 2021-01-27 19:14:19 +02:00
Lauri Ojansivu c10f32cc30 Merge pull request #3492 from jrsupplee/new-search
Global Search Update
2021-01-27 19:11:21 +02:00
Lauri Ojansivu feb477ca48 Updated ChangeLog. 2021-01-27 19:05:24 +02:00
Lauri Ojansivu 2d1e4e8a1d Merge branch 'master' of github.com:wekan/wekan 2021-01-27 19:03:46 +02:00
Lauri Ojansivu ef166468e9 Merge pull request #3491 from mfilser/header_quick_access-scrollbar
Mobile and Desktop have now the same Quick Access view + scrollable
2021-01-27 19:03:39 +02:00
Lauri Ojansivu e58de99d0f Updated ChangeLog. 2021-01-27 18:51:21 +02:00
Lauri Ojansivu 56c7b7a8f1 Merge pull request #3489 from sato-64bit/fix-method-to-create-initials-on-oidc
changed method to create initials same as others for new user of oidc
2021-01-27 18:50:14 +02:00
John R. Supplee 2df0a54cb8 Return CustomFields data for display on minicard 2021-01-27 17:06:57 +02:00
John R. Supplee 78a1d08a17 Bug fixes and buttons for previous and next page
* Use buttons for next and previous page in search results
* Add custom routine for stringifying and parsing the selector to JSON
so RegExp objects are preserved
2021-01-27 16:57:31 +02:00
Martin Filser 4effccf96e Header, Quick Access, show boards at mobile view 2021-01-27 12:20:21 +01:00
Martin Filser 282505cde2 Header, Quick Access, Desktop and Mobile have now the same view 2021-01-27 12:20:06 +01:00
Martin Filser d2d4c19196 Header, Scrollbar now also at desktop version if needed 2021-01-27 12:20:06 +01:00
Martin Filser e6d42f21a2 Header, improve layout at Quick Access and Notifications on mobile view 2021-01-27 12:20:06 +01:00
Martin Filser 71483e8b04 Header, Notification doesn't overlap the avatar anymore at mobile view 2021-01-27 12:20:06 +01:00
Martin Filser 54a55a4a23 Header, Home-Button is now at the left of the Quick Access and not scrolled anymore 2021-01-27 12:20:06 +01:00
Martin Filser bad4cc12b4 Header, Quick Access Navigation now scrollable 2021-01-27 12:20:06 +01:00
sato-64bit 6289acd109 changed method to create initials same as others 2021-01-27 01:43:01 +00:00
John R. Supplee 4e8fc46475 Start work on paging search results 2021-01-27 02:21:12 +02:00
Lauri Ojansivu 4bd3329d07 Updated ChangeLog. 2021-01-26 19:56:41 +02:00
Lauri Ojansivu 4163841bcf Merge pull request #3487 from tod31/tod31-url-schemes
additional URL schemes #3218
2021-01-26 19:53:54 +02:00
John R. Supplee 7ad1171c5f Merge branch 'master' of https://github.com/wekan/wekan into new-search 2021-01-26 18:41:05 +02:00
John R. Supplee 6a32424a08 Add support for searching archived cards
* Add logic to search for archived or all cards
* Add icons to board, swimlane and list titles to indicate if they are archived
* Update search instructions
2021-01-26 18:39:09 +02:00
tod31 2c30714c6f Update editor.js
add custom URL schemes for SolidWorks PDM (conisio:) and abas ERP (abasurl:)
2021-01-26 13:54:22 +01:00
tod31 aa22d4e569 Update template-integration.js
add custom URL schemes for SolidWorks PDM (conisio:) and abas ERP (abasurl:)
2021-01-26 13:50:56 +01:00
Lauri Ojansivu ac020a401f v4.87 2021-01-26 01:51:32 +02:00
Lauri Ojansivu be238ac743 Try parallel build of releases, does it work.
Thanks to xet7 !
2021-01-26 01:49:13 +02:00
Lauri Ojansivu f377e66f02 Updated translations. 2021-01-26 00:58:24 +02:00
Lauri Ojansivu 6ea79dff51 Updated ChangeLog. 2021-01-26 00:54:35 +02:00
Lauri Ojansivu ba336de74b Merge pull request #3485 from robert-scheck/ldap_ca_cert_line_breaks
Handle '\n' line breaks in PEM-encoded SSL/TLS certificates
2021-01-26 00:49:59 +02:00
Lauri Ojansivu b6b3682d06 Merge pull request #3483 from robert-scheck/improper-certificate-validation
Reject by default LDAP connections not authorized via CA trust store
2021-01-26 00:47:56 +02:00
Robert Scheck 927d15f2d8 Handle '\n' line breaks in PEM-encoded SSL/TLS certificates
For example Podman, handling OCI containers, does not seem to have
a way to pass multi-line strings via env files (and Docker seems to
have the same issue at least outside of docker-compose). Thus this
change allows 'LDAP_CA_CERT' to handle a string with '\n', because
currently only 0x0A aka LF might work. An example for additionally
supported format:

LDAP_CA_CERT=-----BEGIN CERTIFICATE-----\n...\n...\n...\n-----END CERTIFICATE-----

See also: https://github.com/wekan/wekan/issues/3484
2021-01-25 23:46:48 +01:00
Robert Scheck 31f89121fe Reject by default LDAP connections not authorized via CA trust store
See also: https://github.com/wekan/wekan/issues/3482
2021-01-25 23:42:22 +01:00
Lauri Ojansivu 1189b66748 v4.86 2021-01-25 19:38:27 +02:00
John R. Supplee a9ceba690e Translatable predicates and UTF8 RegEx support
* Add support for recognizing UTF8 operators
* Make search predicates translatable
* Add translations for Egyptian Arabic based on standard Arabic
2021-01-25 19:01:07 +02:00
Lauri Ojansivu f6370782ec Updated ChangeLog. 2021-01-25 18:58:32 +02:00
Lauri Ojansivu 4c0bd359f9 Mention Wekan GitHub Discussions at readme.
Thanks to xet7 !
2021-01-25 18:56:35 +02:00
Lauri Ojansivu 76491515d9 Updated ChangeLog. 2021-01-25 18:45:50 +02:00
Lauri Ojansivu 2977f7cf47 Added PWA related monochrome icon.
Thanks to xet7 !
2021-01-25 18:44:15 +02:00
Lauri Ojansivu 931bff608c Updated translations. 2021-01-25 18:37:07 +02:00
Lauri Ojansivu fea445c902 Updated ChangeLog. 2021-01-25 18:00:58 +02:00
Lauri Ojansivu 027771b302 Added PWA related category, orientation, screenshots, maskable icon and IARC rating ID.
Thanks to xet7 !
2021-01-25 17:57:13 +02:00
John R. Supplee f2e7296d19 Remove old session data 2021-01-25 16:12:33 +02:00
John R. Supplee 20ab2f039b Send more fields to client 2021-01-25 15:55:35 +02:00
John R. Supplee 158a0807d9 Development
* Generate error when a comment text is not found
* Save errors to SessionData as objects
* Move all search code to globalSearch publication
* Add more translation tags
2021-01-25 15:39:36 +02:00
Lauri Ojansivu 814ae5e840 Updated ChangeLog. 2021-01-25 14:54:21 +02:00
Lauri Ojansivu 37d76e9e06 Use Node 12.20.1 in rebuild-wekan.sh
Thanks to xet7 !
2021-01-25 14:52:27 +02:00
Lauri Ojansivu 6ba2bb5087 Updated translations. 2021-01-25 13:49:14 +02:00
Lauri Ojansivu 4faab518a7 Updated ChangeLog. 2021-01-25 13:45:07 +02:00
Lauri Ojansivu e0c6f64788 Merge pull request #3478 from jrsupplee/fix-1
Move call to URL search to onRendered
2021-01-25 13:43:09 +02:00
John R. Supplee 211d27352a get input value from input, not reactive var 2021-01-25 01:35:44 +02:00
John R. Supplee 74ad7b9f8d Move call to URL search to onRendered 2021-01-25 00:08:58 +02:00
John R. Supplee c66a48e530 Move call to URL search to onRendered 2021-01-25 00:07:50 +02:00
John R. Supplee 91ef8ca1ae Make results a reactive var 2021-01-24 15:38:44 +02:00
John R. Supplee 9b6288e49c Add session id SessionData 2021-01-24 12:28:36 +02:00
John R. Supplee 9eca4566bf Merge branch 'master' of https://github.com/wekan/wekan into new-search 2021-01-24 02:35:31 +02:00
John R. Supplee 907bf4ffdc Pass found cards in sessionData cursor 2021-01-24 02:32:37 +02:00
Lauri Ojansivu 5b194285f5 v4.85 2021-01-23 21:14:06 +02:00
Lauri Ojansivu ae1269aa68 Updated translations. 2021-01-23 19:18:18 +02:00
Lauri Ojansivu d1c3c85af8 Updated ChangeLog. 2021-01-23 18:54:33 +02:00
Lauri Ojansivu 143f259904 Merge pull request #3476 from jrsupplee/patch-4
Bug fix: import regex escape function
2021-01-23 18:52:06 +02:00
John R. Supplee 082b16d422 Bug fix: import regex escape function 2021-01-23 18:15:08 +02:00
John R. Supplee dd163b9923 start work on searching in comments 2021-01-23 18:04:26 +02:00
Lauri Ojansivu 7a5aad9cd8 Updated ChangeLog. 2021-01-23 17:47:38 +02:00
Lauri Ojansivu 9b813dd6a1 Merge pull request #3475 from helioguardabaxo/master
Use simple border at My Cards
2021-01-23 17:45:03 +02:00
helioguardabaxo 66f5f254d0 Remove box-shadow in board to My Cards 2021-01-23 12:43:11 -03:00
John R. Supplee b40d53df84 Merge branch 'master' of https://github.com/wekan/wekan into new-search 2021-01-23 17:36:09 +02:00
Lauri Ojansivu 0c54260762 Updated translations. 2021-01-23 17:09:18 +02:00
Lauri Ojansivu 5346f89f77 Updated ChangeLog. 2021-01-23 17:05:18 +02:00
helioguardabaxo 7909af6a56 Remove border and add box-shadow in boards to My Cards 2021-01-23 11:55:09 -03:00
Lauri Ojansivu ef37cb762d Merge pull request #3474 from jrsupplee/patch-3
Display My Cards lists using inline-grid
2021-01-23 16:32:40 +02:00
Lauri Ojansivu 3799839539 Merge pull request #3473 from jrsupplee/patch-2
Boards.copyTitle - escape string used in regex
2021-01-23 16:31:21 +02:00
Lauri Ojansivu 81d496bac7 Merge pull request #3472 from jrsupplee/patch-1
Add checkbox as an option to custom field create dialog
2021-01-23 16:30:23 +02:00
Lauri Ojansivu 528c0d212a Merge pull request #3471 from helioguardabaxo/master
Add board title link and background color to My Cards
2021-01-23 16:26:04 +02:00
John R. Supplee 3b876b2d20 Display My Cards lists using inline-grid 2021-01-23 12:17:53 +02:00
John R. Supplee a7bd8d42e8 Boards.copyTitle - escape string used in regex 2021-01-23 12:06:37 +02:00
John R. Supplee f8f14613f9 Add checkbox as an option to custom field create dialog 2021-01-23 12:04:39 +02:00
John R. Supplee c9db8e0a26 Escape regex strings 2021-01-23 12:02:51 +02:00
helioguardabaxo 8dd088d727 Remove unsed class 2021-01-22 23:15:37 -03:00
Lauri Ojansivu 550f7201bb Reverted fetch back to http. 2021-01-23 04:11:35 +02:00
helioguardabaxo e1c14b04ad Add link to board title and remove horizontal scroll to My Cards 2021-01-22 23:06:25 -03:00
Lauri Ojansivu fb690e47e8 Updated ChangeLog. 2021-01-23 03:48:28 +02:00
Lauri Ojansivu b537275707 Updated dependencies Part 3: Changed http to fetch as recommended at Meteor 2.0 ChangeLog.
Thanks to developers of dependencies!
2021-01-23 03:46:14 +02:00
helioguardabaxo 545c72fca3 Merge remote-tracking branch 'upstream/master' 2021-01-22 22:12:22 -03:00
Lauri Ojansivu 39413faff0 Updated ChangeLog. 2021-01-23 02:39:24 +02:00
Lauri Ojansivu 953cfd6ecd Updated dependencies. Part 2. 2021-01-23 02:38:06 +02:00
Lauri Ojansivu 36919a25be Updated ChangeLog. 2021-01-23 02:33:38 +02:00
Lauri Ojansivu 7a66cb46a0 Updated dependencies.
Thanks to developers of dependencies !
2021-01-23 02:31:30 +02:00
Lauri Ojansivu 3a2926c22e Updated translations. 2021-01-23 02:07:45 +02:00
John R. Supplee 591a8cd807 Merge branch 'master' of https://github.com/wekan/wekan into new-search 2021-01-23 01:35:28 +02:00
Lauri Ojansivu 4a4c8c2404 Updated ChangeLog 2021-01-23 01:05:04 +02:00
John R. Supplee 9d2bb505ae Merge branch 'master' of https://github.com/wekan/wekan into new-search 2021-01-23 00:59:18 +02:00
Lauri Ojansivu 2531cf549e Merge pull request #3470 from jrsupplee/master
Fix for search operators with uppercase letters
2021-01-23 00:57:57 +02:00
Lauri Ojansivu 80c395906b Merge branch 'master' of github.com:wekan/wekan 2021-01-23 00:56:43 +02:00
Lauri Ojansivu da12c84609 Revert table-cell back to inline-block at my-cards-list-wrapper.
Thanks to jrsupplee and xet7 !

Fixes #1667,
related https://github.com/wekan/wekan/pull/3469
2021-01-23 00:52:58 +02:00
Lauri Ojansivu 69c0a3cba3 Merge pull request #3468 from bronger/issue-3467
Limited number of cards highlighting to true overbooking.
2021-01-23 00:48:53 +02:00
Lauri Ojansivu 124bce8f80 Merge pull request #3466 from jrsupplee/issue-3460
Option to add custom field to all cards
2021-01-23 00:32:06 +02:00
John R. Supplee 1d37f170fd Fix for search operators with uppercase letters 2021-01-22 23:07:38 +02:00
helioguardabaxo 99bdee5b12 Add link to open board in My Cards boards 2021-01-22 17:44:30 -03:00
Torsten Bronger 5476a5984c Limited number of cards highlighting to true overbooking.
Addresses <https://github.com/wekan/wekan/issues/3467>.
2021-01-22 21:02:15 +01:00
John R. Supplee 74d93a6adc Option to add custom field to all cards 2021-01-22 21:28:37 +02:00
helioguardabaxo fb9524bba8 Add horizontal scroll to My Cards boards 2021-01-22 16:02:25 -03:00
Lauri Ojansivu dc4a0bb462 v4.84 2021-01-22 17:37:12 +02:00
Lauri Ojansivu a0418b460a Updated translations. 2021-01-22 17:28:22 +02:00
Lauri Ojansivu 0c093b539a Updated ChangeLog. 2021-01-22 16:58:54 +02:00
Lauri Ojansivu 1971037049 Merge pull request #3458 from jrsupplee/issue-2924
Issue 2924: Rules not copied during board copy
2021-01-22 16:57:18 +02:00
Lauri Ojansivu 57af4ae70d Updated ChangeLog. 2021-01-22 16:52:50 +02:00
Lauri Ojansivu 8f553497e4 Tried to fix possible prototype pollution reported by Deepcode.ai.
Thanks to Deepcode.ai and xet7 !
2021-01-22 16:37:42 +02:00
Lauri Ojansivu 0373da44b3 Disable some logs that are not needed anymore.
Thanks to xet7 !
2021-01-22 16:24:47 +02:00
Lauri Ojansivu 1df060b8f6 Merge pull request #3459 from jrsupplee/new-search
Search All Boards: Added list of board, list and color names.
2021-01-22 16:21:01 +02:00
John R. Supplee b249fcbb2e Use the copyBoard method to duplicate a board
* Use `copyBoard` instead of `cloneBoard` to duplicate a board
* Give duplicated boards a unique title by appending number
2021-01-22 14:24:39 +02:00
John R. Supplee ff8a36653a Use a Meteor call to copy a board
The current method was to copy a board on the client side.  But
not all data was available for copying rules.  Moving the copy
function to the server side solves this problem.
2021-01-22 12:49:48 +02:00
John R. Supplee 1c7a9e4de8 Copy rules, triggers and actions when copying a board 2021-01-22 01:27:28 +02:00
John R. Supplee f56caa745a Merge branch 'master' of https://github.com/wekan/wekan into new-search 2021-01-22 00:51:29 +02:00
John R. Supplee fc0ee2e41b Global search add sort operator
* Add sort operator
* add 'overdue' value to 'due' operator
2021-01-22 00:37:16 +02:00
John R. Supplee 319783b008 Global search: add new operators
* add operators for due, created and modified
2021-01-21 18:11:09 +02:00
Lauri Ojansivu 0c3b92567e Updated translations. 2021-01-21 13:10:59 +02:00
Lauri Ojansivu 3513a3bd62 Updated ChangeLog. 2021-01-21 12:51:19 +02:00
Lauri Ojansivu a5f6dd6399 Fixed Upper/lowercase errors in some languages due to .toLowerCase.
Thanks to bronger and xet7 !

Fixes #3452
2021-01-21 12:48:15 +02:00
John R. Supplee 7ced6318a5 Global search
* Make some heading translatable
* set focus back to search phrase input after clicking a predicate
* Some spacing issues
2021-01-21 11:55:58 +02:00
John R. Supplee 61c691a267 Add support for clicking label names and board titles 2021-01-21 01:48:24 +02:00
John R. Supplee 52f920db12 Add clickable list titles 2021-01-20 21:52:27 +02:00
Lauri Ojansivu 16bb0c81f8 v4.83 2021-01-20 20:03:49 +02:00
Lauri Ojansivu 7ac9448ddc Updated ChangeLog. 2021-01-20 19:53:03 +02:00
Lauri Ojansivu 23c1723ae1 Upgrade to Meteor 2.0
Thanks to Meteor developers !
2021-01-20 19:51:00 +02:00
Lauri Ojansivu dfe3a52571 Updated translations. 2021-01-20 19:50:14 +02:00
Lauri Ojansivu 7deff0e14f Update translations. 2021-01-20 18:20:58 +02:00
Lauri Ojansivu 49a0451b6f Updated ChangeLog. 2021-01-20 18:11:06 +02:00
Lauri Ojansivu bafda03fd9 Merge pull request #3451 from jrsupplee/copy-custom-fields
Copy custom fields to new board
2021-01-20 18:08:35 +02:00
John R. Supplee 27d05ee828 Copy custom fields to new board 2021-01-20 18:04:55 +02:00
Lauri Ojansivu 484276b80d Merge pull request #3450 from jrsupplee/search
Global search fixes
2021-01-20 17:59:10 +02:00
Lauri Ojansivu 1c61350988 Update ChangeLog. 2021-01-20 17:57:59 +02:00
Lauri Ojansivu 01ef81ca58 Merge pull request #3449 from jrsupplee/issue-3445
Issue #3445 Custom field definitions duplicated on copy and move
2021-01-20 17:56:14 +02:00
John R. Supplee e1192d1200 Issue #3445 Custom field definitions duplicated on copy and move
Check the *to* board to see if it has a custome field of the same name
and type. If it does use that custome field definition.
2021-01-20 15:07:53 +02:00
Lauri Ojansivu 436134e0e3 v4.82 2021-01-20 13:36:47 +02:00
Lauri Ojansivu 8f506f1267 Updated translations. 2021-01-20 13:30:57 +02:00
John R. Supplee 6d9928ea8f Add color palette and allow selection 2021-01-20 13:15:10 +02:00
John R. Supplee ad759f2f9f Remove code pulled in by git hook 2021-01-20 13:05:41 +02:00
John R. Supplee 5553277a1e Global search fixes
* Fix error with infinite loop if whitespace on front of query
* Translate color to user's language if not found
2021-01-20 12:52:49 +02:00
John R. Supplee f0c9740c13 Merge branch 'patch' into search 2021-01-19 20:43:06 +02:00
Lauri Ojansivu b365599bc8 Update ChangeLog. 2021-01-19 20:23:19 +02:00
Lauri Ojansivu 56a530058b Export to Excel XLSX. Does work, but does not export all fields yet correctly. In Progress. Part 2.
Thanks to xet7 !
2021-01-19 20:20:58 +02:00
Lauri Ojansivu a1dbeda9ce Updated ChangeLog. 2021-01-19 19:36:55 +02:00
Lauri Ojansivu 1a049e4499 Fixed LDAP Group Filters not working in docker.
Thanks to Sancretor !

Fixes wekan/wekan-ldap#86
2021-01-19 19:31:10 +02:00
Lauri Ojansivu a6b10ebfbb Updated ChangeLog. 2021-01-19 19:09:15 +02:00
Lauri Ojansivu 8e4eade002 Fixed Card activity shows only 20 last entries of activities and comments, by changing limit to 500 entries.
Thanks to xet7 !

Fixes #2934
2021-01-19 19:03:29 +02:00
Lauri Ojansivu 059e9524b3 Update ChangeLog. 2021-01-19 18:40:28 +02:00
Lauri Ojansivu f0b46d5508 Merge pull request #3446 from jrsupplee/issue-3287
Issue #3287
2021-01-19 18:35:06 +02:00
John R. Supplee a556953a11 Merge branch 'master' of https://github.com/wekan/wekan into issue-3287 2021-01-19 18:04:52 +02:00
Lauri Ojansivu d1f44a152c Update ChangeLog. 2021-01-19 17:02:46 +02:00
Lauri Ojansivu 3a96f71b91 Merge branch 'jrsupplee-trello-import' 2021-01-19 16:59:58 +02:00
Lauri Ojansivu b8ab5e0e8d Merge branch 'trello-import' of https://github.com/jrsupplee/wekan into jrsupplee-trello-import 2021-01-19 16:49:45 +02:00
John R. Supplee f25e01323e anonymize trello import data 2021-01-19 16:35:51 +02:00
John R. Supplee 4fa0c2da4d remove unneeded template 2021-01-19 16:11:48 +02:00
John R. Supplee b09d656636 Fix custom date to display short version on minicard 2021-01-19 16:08:16 +02:00
Lauri Ojansivu 5ff6fc0246 Update ChangeLog. 2021-01-19 16:07:50 +02:00
Lauri Ojansivu fc68354e83 Translations: Added ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo).
Thanks to translators and xet7 !
2021-01-19 16:03:40 +02:00
John R. Supplee 22c868b4e6 Use materialCheckBox for displaying checkbox on minicard 2021-01-19 15:40:13 +02:00
John R. Supplee f476143e92 Use checklist checkbox for the custom field checkbox 2021-01-19 15:28:01 +02:00
Lauri Ojansivu 855151a8d1 Export to Excel XLSX. Does work, but does not export all fields yet correctly. In Progress.
Thanks to gameendman, alfredgu and xet7 !

Related #3173
2021-01-19 14:22:17 +02:00
John R. Supplee b9338a78f4 Add sample trello import data for testing 2021-01-19 11:36:29 +02:00
Lauri Ojansivu 815b32c9b6 Updated ChangeLog. 2021-01-19 07:09:54 +02:00
Lauri Ojansivu 2714032e77 Merge pull request #3442 from mfilser/master
Cards, custom fields are displayed in alphabetic order
2021-01-19 07:04:40 +02:00
John R. Supplee e463f79532 Correctly import Trello dropdown custom fields 2021-01-19 01:25:56 +02:00
Martin Filser 4cbc3cb71f Cards, custom fields are displayed in alphabetic order
This should fix #3367
2021-01-18 23:38:09 +01:00
John R. Supplee b793716e85 Trello custom field import basically working 2021-01-18 23:56:08 +02:00
Lauri Ojansivu 451acb1c30 v4.81 2021-01-18 22:05:26 +02:00
Lauri Ojansivu d7c663819c Update ChangeLog. 2021-01-18 22:00:38 +02:00
Lauri Ojansivu 63d933a51d Update translations. 2021-01-18 21:57:08 +02:00
Lauri Ojansivu 0afe8abdb8 Update ChangeLog. 2021-01-18 21:51:29 +02:00
Lauri Ojansivu 413f91d0c8 Reverted Cards, custom fields are displayed in alphabetic order from Wekan v4.71
https://github.com/wekan/wekan/pulls/3417 because it caused board not loading.

Thanks to olivierlambert and xet7 !

Fixes #3367
2021-01-18 21:46:39 +02:00
Lauri Ojansivu fbb98e23c3 Update ChangeLog. 2021-01-18 19:20:27 +02:00
Lauri Ojansivu c4ea7457dc Restore original working Dockerfile.
Thanks to xet7 !

Related #2762,
fixes #3441
2021-01-18 19:14:52 +02:00
Lauri Ojansivu d0083d37da Merge pull request #3440 from jrsupplee/search
Global Search: translate color names
2021-01-18 17:28:04 +02:00
John R. Supplee 6f18a75e5c Global Search: translate color names 2021-01-18 17:17:44 +02:00
John R. Supplee c89a0eb694 Initial work on import of custom fields from Trello
* start adding import functionality
* Add checkbox type to customFields
2021-01-18 16:41:35 +02:00
Lauri Ojansivu 6b8939c02e v4.80 2021-01-18 14:33:15 +02:00
Lauri Ojansivu 86e5356b0f Update ChangeLog. 2021-01-18 13:58:34 +02:00
Lauri Ojansivu c0f748bcb5 Update dependencies.
Thanks to developers of dependencies!
2021-01-18 13:56:52 +02:00
Lauri Ojansivu 0acb8f5d69 Update translations. 2021-01-18 13:55:37 +02:00
Lauri Ojansivu 37db870475 Update ChangeLog. 2021-01-18 13:47:28 +02:00
Lauri Ojansivu 0d5f33299e Fixed Linked card makes board not load when CustomField definition is undefined.
Thanks to olivierlambert and xet7 !

Fixes #3367
2021-01-18 13:43:53 +02:00
Lauri Ojansivu 78f818bbb0 Update ChangeLog. 2021-01-18 13:18:23 +02:00
Lauri Ojansivu edafb6a6d2 Update translations. 2021-01-18 12:39:30 +02:00
Lauri Ojansivu c0984aa740 Update translations. 2021-01-18 12:28:20 +02:00
Lauri Ojansivu 6253bbdc0b Fix file permissions. 2021-01-18 12:22:00 +02:00
John R. Supplee 74f89ef80d Use resultCard for displaying results in MyCards and DueCards 2021-01-18 12:20:03 +02:00
Lauri Ojansivu 254a9abad2 Try to use buster base images, because when using Wekan Alpine, registering new user of Wekan does not work (maybe because of glibc/musl).
Thanks to GavinLilly and xet7 !

Related #2762
2021-01-18 11:58:00 +02:00
Lauri Ojansivu 83e77f8d82 Update translations. 2021-01-18 11:33:19 +02:00
Lauri Ojansivu 2726643586 Try Alpine base image for running Wekan. 2021-01-18 10:27:02 +02:00
Lauri Ojansivu b8f2a468d8 Update ChangeLog. 2021-01-18 09:49:45 +02:00
Lauri Ojansivu fb771d46dd Added npm and curl to Dockerfile, because Docker build failed.
Thanks to xet7 !
2021-01-18 09:47:52 +02:00
Lauri Ojansivu ecd4c7fb02 Update ChangeLog. 2021-01-18 09:34:24 +02:00
Lauri Ojansivu da2be59185 Use Ubuntu base image in Dockerfile, because according to Quay.io security scan it does not have any vulnerabilities, that node base images do have.
Thanks to xet7 !

Fixes #2762,
fixes https://github.com/wekan/wekan/pull/3438
2021-01-18 09:29:14 +02:00
Lauri Ojansivu 93a3fa9c75 Update ChangeLog. 2021-01-18 09:16:08 +02:00
Lauri Ojansivu cf546c71e3 Merge branch 'master' of github.com:wekan/wekan 2021-01-18 09:09:10 +02:00
Lauri Ojansivu 2791b7da22 Use MongoDB setFeatureCompatibilityVersion 4.2 on Snap. TODO: Docker.
Thanks to GuidoDr and xet7 !

Related #3247
2021-01-18 09:08:02 +02:00
Lauri Ojansivu 48fc442b85 Merge pull request #3438 from GavinLilly/multi_stage_build
Use multi stage build based on Node images
2021-01-18 07:46:30 +02:00
Gavin Lilly 2e6b18dfa7 Move final npm install to builder and run node as non-root 2021-01-18 00:14:51 +00:00
Lauri Ojansivu 7f0da49e0a Merge pull request #3437 from jrsupplee/search
Global Search fixes and updates
2021-01-17 23:53:18 +02:00
John R. Supplee b5124d0f6a cleanup debug code 2021-01-17 21:43:56 +02:00
John R. Supplee e70a1f0a60 Fix bug when no search param specified 2021-01-17 21:18:45 +02:00
John R. Supplee 7e8475e64d Add link to search header for storing search 2021-01-17 21:04:05 +02:00
Gavin Lilly e161ada214 Use multi stage build based on Node images 2021-01-17 17:49:39 +00:00
John R. Supplee 409b8559d7 Merge branch 'master' of https://github.com/wekan/wekan into search 2021-01-17 16:07:43 +02:00
John R. Supplee d74dc92681 Global Search improvements
* support for searching from the URL
* add support for searching by assignee and member
2021-01-17 16:01:42 +02:00
Lauri Ojansivu 5f62d7307f Update ChangeLog. 2021-01-17 14:26:41 +02:00
Lauri Ojansivu 3866ed3196 Use table-cell instead of inline-block in my-cards-list-wrapper CSS.
Thanks to johappel and xet7 !

Related #1667
2021-01-17 14:22:54 +02:00
Lauri Ojansivu b039bad649 v4.79 2021-01-17 03:41:39 +02:00
Lauri Ojansivu 58a6354010 Update translations. 2021-01-17 03:36:00 +02:00
Lauri Ojansivu 429d9474a9 Updated ChangeLog. 2021-01-17 03:29:16 +02:00
Lauri Ojansivu be03d2ae9a Fixed: Linked card makes board not load.
Thanks to akitzing, galletl, pdonias, olivierlambert and xet7 !

Fixes #3367
2021-01-17 03:25:28 +02:00
Lauri Ojansivu 5db40beb79 Updated ChangeLog. 2021-01-17 01:06:26 +02:00
Lauri Ojansivu 10f74f5152 At Search All Cards, now it's possible to click found card to open it.
Thanks to xet7 !

Related #2074
2021-01-17 01:00:12 +02:00
Lauri Ojansivu 0580237270 Update translations. 2021-01-17 00:50:32 +02:00
John R. Supplee 8059856c39 Convert global search instructions to translatable tags 2021-01-17 00:35:39 +02:00
John R. Supplee a3518a3bcf cleanup 2021-01-16 21:08:15 +02:00
John R. Supplee 7b8d67de63 Global search - fix label not found 2021-01-16 21:07:49 +02:00
John R. Supplee 7a5aa469cd Modify search results translations
* use named place holders in translation tag with multiple values
2021-01-16 20:45:05 +02:00
John R. Supplee 1e415b38d2 Fix URL reference in resultCard template 2021-01-16 19:26:39 +02:00
John R. Supplee ff626fb559 Add a new SessionData collection and limit user fields
* Add new SessionData collection to store user session data available to
server and client
* Limit the Users fields sent to the client by `myCards`, `dueCards`,
`brokenCards`, and `globalSearch` using new `Users.safeFields`
* clean-up
2021-01-16 19:26:06 +02:00
Lauri Ojansivu ab183acac3 v4.78 2021-01-16 05:08:10 +02:00
Lauri Ojansivu d9b967a74d Updated translations. 2021-01-16 05:03:07 +02:00
Lauri Ojansivu 4180224fd9 Limit visibility of Global Search, My Cards and Due Cards to logged in users, because they do not work without logging in.
Thanks to xet7 !
2021-01-16 04:59:17 +02:00
Lauri Ojansivu aa34da61fe Fixed Display issues with assignee on minicard.
Thanks to bronger and xet7 !

Fixes #3434
2021-01-16 04:54:54 +02:00
Lauri Ojansivu 058b95f4eb Update ChangeLog. 2021-01-16 03:13:00 +02:00
Lauri Ojansivu 4115d62bac Limit amount of data in publications where possible.
Thanks to xet7 !
2021-01-16 03:10:20 +02:00
Lauri Ojansivu 3d72c82bca Update translations. 2021-01-16 02:43:45 +02:00
Lauri Ojansivu 4bed5059c2 Update translations. 2021-01-15 18:10:25 +02:00
Lauri Ojansivu ac57df409e Update translations. 2021-01-15 17:25:07 +02:00
Lauri Ojansivu e242e2b137 Update ChangeLog. 2021-01-15 17:08:52 +02:00
Lauri Ojansivu 94cb33a0ce Merge pull request #3433 from jrsupplee/search
Search
2021-01-15 16:50:59 +02:00
Lauri Ojansivu a2894bf0cb HTML is not needed in Rules translations, so disabled it.
Thanks to jrsuplee and xet7 !
2021-01-15 16:47:52 +02:00
John R. Supplee a56d47c768 Global search fixes
* use @ and # as the abbrevs for the user and list operators
* comment out debug code
* Modify display of card result counts
* Fix bug with publication not returning current user document
2021-01-15 00:33:24 +02:00
John R. Supplee 3214800741 Global search display total hits
* modify User model to store some session data for searches
* Display total hits in search results
2021-01-14 16:54:44 +02:00
John R. Supplee c11c3f9a88 code cleanup 2021-01-14 12:53:45 +02:00
John R. Supplee 81d120ac50 Update search instructions 2021-01-14 12:47:23 +02:00
John R. Supplee 50b25572f1 Make search operators translatable 2021-01-14 12:46:52 +02:00
John R. Supplee 39ac19db20 Fix search returning data for all users 2021-01-14 00:42:10 +02:00
John R. Supplee 5dbbaae6fd Merge branch 'master' of https://github.com/wekan/wekan into search 2021-01-13 21:55:13 +02:00
John R. Supplee 423480903f Fix bug in displaying results count 2021-01-13 21:54:15 +02:00
John R. Supplee f00395a6b6 Add resultCard component for standard display of a card search result 2021-01-13 21:46:18 +02:00
John R. Supplee 391c0606d1 Comment out debug statements 2021-01-13 20:34:20 +02:00
John R. Supplee a27aaca918 Global search instructions edits 2021-01-13 20:31:41 +02:00
John R. Supplee 03e5d84e0e Edit search operator help text 2021-01-13 18:12:21 +02:00
John R. Supplee 8f21c86737 Add global search to user menu
* Add an entry to the user menu to access the global search page
* remove some useless code
2021-01-13 17:05:02 +02:00
John R. Supplee 25dc779a73 Global search development
* Add translation tags
* Use translation tags for showing result count
* Add logic for selecting cards by labels
* Readd code for searching card text that was mistakenly deleted
2021-01-13 16:52:56 +02:00
Lauri Ojansivu 4396d7cfd5 v4.77 2021-01-13 16:17:54 +02:00
Lauri Ojansivu 4700ed52da Update translations. 2021-01-13 16:12:55 +02:00
Lauri Ojansivu 115d2c5fe9 Update ChangeLog. 2021-01-13 16:09:55 +02:00
Lauri Ojansivu afd5d1d0c0 Show membertype (admin, normal etc) in avatar/initials tooltip for board members.
Thanks to bronger and xet7 !

Fixes #3430
2021-01-13 16:05:22 +02:00
John R. Supplee a647768368 Merge branch 'master' of https://github.com/wekan/wekan into search 2021-01-13 01:29:46 +02:00
Lauri Ojansivu a9eddbbe9d v4.76 2021-01-13 01:19:03 +02:00
John R. Supplee 80b23e5cc1 Global search - add error messages for terms that are not found 2021-01-13 01:14:49 +02:00
Lauri Ojansivu 8cb4945617 Update translations. 2021-01-13 01:12:15 +02:00
Lauri Ojansivu f384e3d066 Updated ChangeLog. 2021-01-13 00:07:58 +02:00
Lauri Ojansivu 3977f2187a Try to allow links to onenote, mailspring and file.
Thanks to lime918, rgalonso, ocdtrekkie, gkarachuk and xet7 !

Fixes #1615
2021-01-13 00:02:17 +02:00
John R. Supplee 4ab1a04814 Global search add swimlane functionality
* streamline code
* fix bug in swimlane lookup
2021-01-12 17:35:01 +02:00
John R. Supplee 2e17f2b4b9 Global search development
* Add text query ability
* limit results to 50
* display results count
2021-01-12 16:48:29 +02:00
Lauri Ojansivu 4b3270e82a Update ChangeLog. 2021-01-12 01:05:44 +02:00
Lauri Ojansivu de27be0911 Removed wekan- from export filenames for whitelabeling.
Thanks to xet7 !
2021-01-12 01:01:10 +02:00
John R. Supplee 34000ad159 Move global search to cards model
* add some explanation of the operators
2021-01-12 00:48:43 +02:00
John R. Supplee bbcb236a46 Add methods to models for archived entities 2021-01-11 18:18:26 +02:00
Lauri Ojansivu d29f0eb5b6 v4.75 2021-01-11 05:50:31 +02:00
Lauri Ojansivu b480c82f86 Update ChangeLog. 2021-01-11 05:40:18 +02:00
Lauri Ojansivu 3105548c98 Upgrade to Meteor 1.12.1
Thanks to Meteor developers !
2021-01-11 05:38:53 +02:00
Lauri Ojansivu 118635facb Update translations. 2021-01-11 05:36:53 +02:00
Lauri Ojansivu 4746b7c361 Update ChangeLog. 2021-01-11 05:33:50 +02:00
Lauri Ojansivu 801d0aacf0 Due Cards and Broken Cards: In All Users view, fixed to show cards only from other users Public Boards. Not anymore from private boards.
Thanks to xet7 !

Related #1667
2021-01-11 05:23:11 +02:00
Lauri Ojansivu 82236484bc v4.74 2021-01-10 23:32:48 +02:00
Lauri Ojansivu 9a7cd8ae69 Update translations. 2021-01-10 23:23:23 +02:00
Lauri Ojansivu c330a47aac Update ChangeLog. 2021-01-10 23:21:19 +02:00
Lauri Ojansivu 9293de541b My Cards and Broken Cards: Added popup title and horizontal line between menu options.
Thanks to xet7 !
2021-01-10 23:18:03 +02:00
John R. Supplee 01bd94d2b3 Global search limited working prototype
* added publication
* need to filter cards on client side
2021-01-10 22:58:29 +02:00
John R. Supplee 5913a4af1b Global search development
* search input
* parse query with operators
2021-01-10 21:52:25 +02:00
Lauri Ojansivu 72e5cb00b3 v4.73 2021-01-10 21:12:37 +02:00
Lauri Ojansivu 1d866093f1 Update translations. 2021-01-10 21:04:08 +02:00
Lauri Ojansivu 0252591564 Update ChangeLog. 2021-01-10 21:01:28 +02:00
Lauri Ojansivu 9ec1904119 Fixed language names to lowercase español.
Thanks to xet7 !
2021-01-10 20:58:46 +02:00
Lauri Ojansivu f46243d943 Update translations. 2021-01-10 20:40:18 +02:00
Lauri Ojansivu dbcab96eea Update translations. 2021-01-10 20:18:40 +02:00
Lauri Ojansivu 059191702b Update translations. 2021-01-10 20:02:09 +02:00
Lauri Ojansivu 4f6cc96466 Update ChangeLog. 2021-01-10 19:46:15 +02:00
Lauri Ojansivu b98df8ef87 Added Broken Cards to User Settings menu.
Thanks to xet7 !
2021-01-10 19:40:56 +02:00
Lauri Ojansivu d09e448fbd Translate "Broken Cards". 2021-01-10 19:31:38 +02:00
Lauri Ojansivu fa00b797ee Merge pull request #3426 from jrsupplee/broken
Broken Cards page
2021-01-10 19:28:13 +02:00
Lauri Ojansivu 508ce6088e Update ChangeLog. 2021-01-10 19:26:14 +02:00
Lauri Ojansivu 4d71848360 Merge pull request #3425 from jrsupplee/master
My Cards and Due Cards
2021-01-10 19:17:27 +02:00
John R. Supplee 4ebad9efc1 Merge branch 'master' into broken 2021-01-10 18:19:33 +02:00
John R. Supplee 4e8ee8eb86 Merge branch 'master' of https://github.com/wekan/wekan 2021-01-10 18:15:02 +02:00
John R. Supplee ecc3558987 My Cards and Due Cards development
* add spinner while pages are loading
* use a single publication for My Cards
* add Due Cards to the user menu
* add description to the All Users option for Due Cards
* some code clean-up
2021-01-10 18:08:03 +02:00
John R. Supplee 986ab29676 Broken Cards development
* fix CSS and formatting
* refine selection criteria
2021-01-10 15:35:16 +02:00
John R. Supplee 4679db6ec4 New Broken Cards page 2021-01-10 00:17:59 +02:00
Lauri Ojansivu 35a7925a21 v4.72 2021-01-09 21:04:48 +02:00
Lauri Ojansivu 5ab449eb7e Update translations. 2021-01-09 21:03:33 +02:00
Lauri Ojansivu 5ba1d6f880 Update ChangeLog. 2021-01-09 20:59:01 +02:00
John R. Supplee 734c56a6b6 Merge branch 'master' of supplee.net:wekan 2021-01-09 20:39:45 +02:00
Lauri Ojansivu 103d03d4c8 Changed Sandstorm menus to be more similar like other Wekan versions, make Export visible, etc.
Thanks to PizzaProgram and xet7 !

Related #3423
2021-01-09 19:49:58 +02:00
John R. Supplee 55b121e0d3 Development and fixes to My Cards and Due Cards 2021-01-09 18:36:27 +02:00
John R. Supplee 0e1c510948 My Cards: fix bug when null board, swimlane, or list
* Add new functions to model card for retrieving associated board,
swimlane, or list with default values
* Use new card model methods
2021-01-08 21:51:28 +02:00
John R. Supplee b79ee281ec Merge branch 'master' of https://github.com/wekan/wekan 2021-01-08 21:06:14 +02:00
Lauri Ojansivu 758b829a3c Merge pull request #3421 from kuchengrab/patch-1
fixed badges
2021-01-08 21:00:32 +02:00
kuchengrab adc7846aff fixed badges 2021-01-08 14:37:49 +01:00
John R. Supplee 2e955cff54 Fix name of Due Cards in router 2021-01-08 12:18:05 +02:00
Lauri Ojansivu aeeea2281c v4.71 2021-01-08 11:50:17 +02:00
Lauri Ojansivu fa3af68836 Update translations. 2021-01-08 11:40:39 +02:00
John R. Supplee 1abdd5177d Initial work on due cards page 2021-01-07 22:36:10 +02:00
Lauri Ojansivu d62d890183 Update translations. 2021-01-07 14:15:02 +02:00
Lauri Ojansivu 62a8602b2b Update ChangeLog. 2021-01-07 13:22:52 +02:00
Lauri Ojansivu 1698b5cafb Merge pull request #3419 from jrsupplee/master
My Cards add Due Date sort
2021-01-07 12:17:24 +02:00
John R. Supplee 108d01ee35 Merge branch 'master' of https://github.com/wekan/wekan 2021-01-07 12:04:54 +02:00
John R. Supplee e55b50bc5a My Cards development
* Popup.open() not working so simply toggle between board sort and 'due by'
* clean-up CSS classes
* code clean-up
2021-01-07 12:04:14 +02:00
Lauri Ojansivu 4649553c5e Try to fix Color picker of lists is empty. Part 6.
Thanks to bronger and xet7 !

Related #3418
2021-01-06 22:15:06 +02:00
John R. Supplee 1ea99a5dc8 My Cards development
* Add cards due view
* Add input for selecting sort (not working)
* Add methods to `Utils` to save sort to local browser storage
*  CSS updates to make lists display horizontally within swimlanes
2021-01-06 20:13:36 +02:00
Lauri Ojansivu ff8d899266 Try to fix Color picker of lists is empty. Part 5, reverting part 4.
Thanks to bronger and xet7 !

Related #3418
2021-01-06 20:08:12 +02:00
Lauri Ojansivu 2e6064ce5c Try to fix Color picker of lists is empty. Part 4.
Thanks to bronger and xet7 !

Related #3418
2021-01-06 16:55:17 +02:00
Lauri Ojansivu c7f260d030 Fix lint errors. 2021-01-06 16:49:20 +02:00
Lauri Ojansivu f7e85ac86c Docker builds at Docker Hub seem to work OK. 2021-01-06 16:48:39 +02:00
Lauri Ojansivu 5f647fd2ab Try to fix Color picker of lists is empty. Part 3.
Thanks to bronger and xet7 !

Related #3418
2021-01-06 15:47:21 +02:00
Lauri Ojansivu 6007fe263e Try to fix Color picker of lists is empty. Part 2.
Thanks to bronger and xet7 !

Related #3418
2021-01-06 15:43:46 +02:00
Lauri Ojansivu 26921a9c36 Try to fix Color picker of lists is empty.
Thanks to bronger and xet7 !

Related #3418
2021-01-06 15:32:47 +02:00
Lauri Ojansivu 94a3c1dc21 Update CHANGELOG.md 2021-01-05 10:03:07 +02:00
Lauri Ojansivu 5f0cb23f52 Merge pull request #3417 from mfilser/cards_custom_fields_alphabetic_order
Cards, custom fields are displayed in alphabetic order
2021-01-05 09:56:16 +02:00
Lauri Ojansivu b1910d4300 Update CHANGELOG.md 2021-01-05 09:55:31 +02:00
Martin Filser 163e4c8060 Cards, custom fields are displayed in alphabetic order
- until now the order is undefined, it's different from card to card,
  it's the order in which the custom fields were added to the card.
2021-01-05 07:47:02 +01:00
Lauri Ojansivu 87e848beae Merge pull request #3416 from jrsupplee/master
Update to My Cards
2021-01-05 06:42:04 +02:00
John R. Supplee febc020cd3 Merge with main repository 2021-01-05 00:00:45 +02:00
John R. Supplee 1733162df8 My Cards development
* add default color for swimlane with no color
2021-01-04 23:58:29 +02:00
Lauri Ojansivu ee118d26b6 v4.70 2021-01-04 23:47:42 +02:00
Lauri Ojansivu 1dfe406ff9 Update translations. 2021-01-04 23:46:35 +02:00
Lauri Ojansivu 5549c49326 Update ChangeLog. 2021-01-04 23:41:49 +02:00
Lauri Ojansivu 754a91dbdc Show Admin Panel / People and Version also on mobile MiniScreen.
Thanks to xet7 !
2021-01-04 23:36:42 +02:00
Lauri Ojansivu e3b90fb579 Update ChangeLog. 2021-01-04 22:26:36 +02:00
Lauri Ojansivu 4bfe017b08 Upgrade to Node 12.20.1
Thanks to Node developers !
2021-01-04 22:18:26 +02:00
John R. Supplee 5e68362352 My Cards page development
* rename `findCards()` to `myBoards()`
* return model objects for Boards, Swimlanes, Lists, and Cards.
Previously created a data structure with limited properties.
* Sort the myBoards data structure according to the `sort` property
* add a `swimlane()` method in the cards model
2021-01-04 22:08:09 +02:00
John R. Supplee 0497d38c1d Fix bug with new return value for swimlane colorClass() 2021-01-04 22:04:24 +02:00
Lauri Ojansivu 1a1d6da451 Update ChangeLog. 2021-01-04 21:58:14 +02:00
Lauri Ojansivu 763dc9c8e0 Added markdown and emoji to My Cards board, swimlane and list names.
Thanks to xet7 !
2021-01-04 21:49:51 +02:00
John R. Supplee 89c68d1987 Merge branch 'master' of supplee.net:wekan 2021-01-04 21:11:27 +02:00
John Supplee 70803f31d4 Merge branch 'master' of https://github.com/wekan/wekan 2021-01-04 20:42:27 +02:00
John Supplee db2497424d Merge branch 'master' of supplee.net:wekan
# Conflicts:
#	client/components/main/myCards.jade
2021-01-04 20:40:58 +02:00
Lauri Ojansivu 0d3805d10a Wekan is translated to about 60 languages. 2021-01-04 20:21:21 +02:00
Lauri Ojansivu 7b8b132062 Update ChangeLog. 2021-01-04 20:13:15 +02:00
Lauri Ojansivu d171f4088f Added many new translations to Wekan, now there is total 60 translations in Wekan. Updated translations. Organized pull-translations.sh alphabetically by language name.
Thanks to translators and xet7 !
2021-01-04 20:05:23 +02:00
John R. Supplee e8e733184e Merge branch 'master' of https://github.com/wekan/wekan 2021-01-04 13:53:58 +02:00
John R. Supplee e793e71163 Reformat My Cards page
* make the page more visually pleasing
* user +viewer to display Markdown in titles
* modify `colorClass()` in Lists model to return 'list-header-{color}'
* modify `colorClass()` of Swimlanes model to return 'swimlane-{color}'
2021-01-04 13:53:08 +02:00
Lauri Ojansivu 46e47e3fc9 v4.69 2021-01-02 18:10:15 +02:00
Lauri Ojansivu d4b3dc7472 Update translations. 2021-01-02 17:54:13 +02:00
Lauri Ojansivu df47dcc3f3 Update ChangeLog. 2021-01-02 17:53:31 +02:00
Lauri Ojansivu bfc16fc544 Reorder My Cards to be first at menu.
Thanks to xet7 !
2021-01-02 17:50:05 +02:00
Lauri Ojansivu 991e1baffd Update translations. 2021-01-02 16:56:25 +02:00
Lauri Ojansivu cd54ced1b2 Update ChangeLog. 2021-01-02 16:55:58 +02:00
Lauri Ojansivu f88c3755e0 Merge branch 'jrsupplee-master' 2021-01-02 16:43:31 +02:00
Lauri Ojansivu 0592b0c56a Moved Public/Archive/Templates/etc options to click right top username Member Settings menu, where My Cards also is.
Thanks to xet7 !
2021-01-02 16:39:58 +02:00
John R. Supplee a0b72d0287 Merge branch 'master' of https://github.com/wekan/wekan 2021-01-02 00:17:31 +02:00
John R. Supplee 7a419c1563 My Cards development
* only find client side cards of the user
2021-01-02 00:17:03 +02:00
Lauri Ojansivu ea42a3763f Update translations. 2021-01-01 23:13:56 +02:00
John R. Supplee 0f6a60fa69 Merge branch 'master' of https://github.com/wekan/wekan 2021-01-01 22:04:04 +02:00
John R. Supplee a58b27e9b0 My Cards development
* always go to page
* use minicard for displaying cards
* change the icon for my cards menu option
2021-01-01 22:03:29 +02:00
Lauri Ojansivu cfdeaf2f5d Update ChangeLog. 2021-01-01 15:02:10 +02:00
Lauri Ojansivu b64cd358ed Teams/Organizations to Admin Panel. In Progress. Part 3.
Thanks to xet7 !

Related #802
2021-01-01 15:00:33 +02:00
Lauri Ojansivu 12034ab619 Update ChangeLog. 2021-01-01 14:59:58 +02:00
Lauri Ojansivu ad482d5cfb Teams/Organizations to Admin Panel. In Progress. Part 2.
Thanks to xet7 !

Related #802
2021-01-01 14:57:17 +02:00
John R. Supplee 885de88d35 more my cards
* add user menu entry (needs icon)
* format list
* add new translation slugs to English and Arabic
2021-01-01 01:06:42 +02:00
John R. Supplee 223fb78bd8 Merge branch 'master' of https://github.com/wekan/wekan 2020-12-31 19:15:59 +02:00
John R. Supplee 077e78d37c My Cards development
first prototype
2020-12-31 19:14:55 +02:00
Lauri Ojansivu e49d3923d0 Update ChangeLog. 2020-12-30 20:50:36 +02:00
Lauri Ojansivu 65795a673e Merge pull request #3412 from mfilser/master
Swimlane + and = Icons resized for better handling at mobile view
2020-12-30 20:46:46 +02:00
Martin Filser e39e0c9a85 Swimlane + and = Icons resized for better handling at mobile view 2020-12-30 19:40:10 +01:00
Lauri Ojansivu f35b042324 Update translations. 2020-12-30 19:15:03 +02:00
Lauri Ojansivu 9c8d5c2613 Merge branch 'mfilser-new_checklistitem_textarea_autoresize' 2020-12-30 19:12:40 +02:00
Martin Filser 03bfd9a2b5 New Checklistitems are now autoresized too
- also using for autoresize now:
  verron:autosize
2020-12-30 16:51:56 +01:00
Lauri Ojansivu 07aa1fd276 v4.68 2020-12-29 21:16:15 +02:00
Lauri Ojansivu 5aca681b36 Update translations. 2020-12-29 20:39:31 +02:00
Lauri Ojansivu 94f466102e Update ChangeLog. 2020-12-29 17:02:28 +02:00
Lauri Ojansivu 08866ae20b Merge pull request #3408 from mfilser/checklistitem_textarea_autoresize
Checklist-Items, Autoresize the textarea vertically to fit the user-input
2020-12-29 17:02:07 +02:00
Lauri Ojansivu f73bdcdfb6 Merge pull request #3407 from mfilser/master
Checklist-Items, Drag-Drop Handle now at the left side
2020-12-29 16:57:15 +02:00
Martin Filser 6410012384 Checklist-Items, Autoresize the textarea vertically to fit the user-input 2020-12-29 15:23:16 +01:00
Martin Filser 93a24aaef8 Checklist-Items, Drag-Drop Handle now at the left side
- Drag handle is not visible at long checklists, even with:
  padding-right: 20px
  Depending of all the screen sizes out there this is the most secure
  way to get around this and the drag handle is always visible

- first fix was at this commit: a8453657c9
2020-12-29 15:15:54 +01:00
Lauri Ojansivu 688a31877b v4.67 2020-12-29 15:53:35 +02:00
Lauri Ojansivu e9b9f204a5 Update translations. 2020-12-29 15:48:16 +02:00
Lauri Ojansivu dfee3a7a7c Update ChangeLog. 2020-12-29 15:38:22 +02:00
Lauri Ojansivu d03e2170dd Allow to edit email verified and initials at Admin Panel/People/People.
Thanks to xet7 !

Fixes #1426
2020-12-29 15:33:14 +02:00
Lauri Ojansivu d0cdc33c19 Update ChangeLog. 2020-12-29 13:39:39 +02:00
Lauri Ojansivu b7e1521e0d Merge branch 'mfilser-master' 2020-12-29 13:37:41 +02:00
Lauri Ojansivu ed12cfe160 Merge branch 'master' of https://github.com/mfilser/wekan into mfilser-master 2020-12-29 13:37:01 +02:00
Martin Filser 5578949bf5 Checklist Mini-Screen, appendTo: 'parent' not necessary anymore
- obsolete since commit c7808c5c03
2020-12-29 11:31:21 +01:00
Lauri Ojansivu 5603d159b3 Update ChangeLog. 2020-12-28 21:12:41 +02:00
Lauri Ojansivu 9e2093d6ae Teams/Organizations to Admin Panel. In Progress.
Thanks to xet7 !

Related #802
2020-12-28 21:08:27 +02:00
Lauri Ojansivu b7137e617e v4.66 2020-12-27 03:14:34 +02:00
Lauri Ojansivu 2c33f71ba7 Update translations. 2020-12-27 03:11:17 +02:00
Lauri Ojansivu 56c2c24638 Update ChangeLog. 2020-12-27 03:09:08 +02:00
Lauri Ojansivu a8453657c9 Fix Mobile miniscreen: Drag handle not visible in long checklist item text.
Thanks to xet7 !

Fixes #3402
2020-12-27 03:06:33 +02:00
Lauri Ojansivu 55ff74de95 v4.65 2020-12-26 12:52:56 +02:00
Lauri Ojansivu e2f7b1ec05 Update translations. 2020-12-26 12:48:33 +02:00
Lauri Ojansivu 1cd2d28a3b Update ChangeLog. 2020-12-26 12:46:30 +02:00
Lauri Ojansivu c7808c5c03 Fixed Drag and drop between checklists closes the card sometimes on Firefox.
xet7 thanks mfilser about [similar fix of appendTo parent](https://github.com/wekan/wekan/pull/3342)
that did work here too to fix this.

Thanks to mfilser and xet7 !

Fixes #2280
2020-12-26 12:38:24 +02:00
Lauri Ojansivu 3ed9f07015 v4.64 2020-12-24 17:08:56 +02:00
Lauri Ojansivu 676d2c46a1 Update translations. 2020-12-24 17:04:38 +02:00
Lauri Ojansivu b5f1a6b08b Update ChangeLog. 2020-12-24 14:09:50 +02:00
Lauri Ojansivu d9616b6d94 Merge branch 'jasontamez-master' 2020-12-24 14:07:46 +02:00
Jason Tamez 4812cb6412 attempt to fix a visual problem in Dark theme 2020-12-23 11:38:11 -06:00
Lauri Ojansivu 9e60a23845 v4.63 2020-12-21 18:42:25 +02:00
Lauri Ojansivu 6cca39af1b Update translations. 2020-12-21 18:37:24 +02:00
Lauri Ojansivu 7ffbe2ab5e Update ChangeLog. 2020-12-21 18:35:02 +02:00
Lauri Ojansivu 28850e5510 Fixed Remove Cover button gives JS error.
Thanks to tsukasa1989 and xet7 !

Fixes #3400
2020-12-21 18:32:00 +02:00
Lauri Ojansivu d62bed1536 v4.62 2020-12-18 05:58:33 +02:00
Lauri Ojansivu b19cf01a3a Update translations. 2020-12-18 05:52:27 +02:00
Lauri Ojansivu 39dece1e25 Update ChangeLog. 2020-12-18 05:48:41 +02:00
Lauri Ojansivu 61ae62a83a Board: When removing member from board, remove also from assignees.
Admin Panel/People: 1) Allow edit user that does not have email address.
2) When creating new user, require username and email address, and save also fullname.
3) Some in progress code for deleting user, that does not work correctly yet, so deleting user is not enabled yet.

Thanks to airtraxx and xet7.

Related #3396
2020-12-18 05:46:04 +02:00
Lauri Ojansivu 775f0d9fe6 Update ChangeLog. 2020-12-17 21:39:27 +02:00
Lauri Ojansivu 53a925cf7f Fix delete board button not visible.
Thanks to airtraxx and xet7 !

Related #3396
2020-12-17 21:37:18 +02:00
Lauri Ojansivu 6bf33a5578 Update ChangeLog. 2020-12-17 21:30:52 +02:00
Lauri Ojansivu 7f3c4acf62 Add some permission code, to see does it fix something.
Thanks to xet7 !

Related #3377
2020-12-17 21:27:02 +02:00
Lauri Ojansivu 8481c791d7 Update ChangeLog. 2020-12-17 18:59:36 +02:00
Lauri Ojansivu 9dd0fb88d6 Fix Move card from a board to another does not work anymore.
Thanks to lezioul and xet7 !

Fixes wekan/wekan-snap#141
2020-12-17 18:56:04 +02:00
Lauri Ojansivu 9b004d75c7 Update ChangeLog. 2020-12-17 17:56:11 +02:00
Lauri Ojansivu 86c7fbd717 Merge pull request #3395 from daniel-eder/fix/clone-board-binary-attachments
Treat unknown attachment types as binary on board import/clone
2020-12-17 17:36:02 +02:00
Daniel Eder 6bd7f40511 Treat unknown attachment types as binary on board import/clone
Fixes missing attachments and even missing
2020-12-17 11:10:30 +02:00
Lauri Ojansivu a82257f0b1 v4.61 2020-12-16 23:41:40 +02:00
Lauri Ojansivu ee26f32a20 Update translations. 2020-12-16 23:36:03 +02:00
Lauri Ojansivu 7df3d52635 Update ChangeLog. 2020-12-16 23:34:07 +02:00
Lauri Ojansivu f9ba17177e Allow normal user to delete checklist item.
Thanks to Samunosuke and xet7 !

Related #3377
2020-12-16 23:30:57 +02:00
Lauri Ojansivu ab4941390b Update translations. 2020-12-15 22:45:11 +02:00
Lauri Ojansivu 11d044ede9 Update ChangeLog. 2020-12-15 22:37:38 +02:00
Lauri Ojansivu 3c406d955e Removed cookie code that is not in use.
Thanks to xet7 !
2020-12-15 22:34:57 +02:00
Lauri Ojansivu ea37dd5e1d v4.60 2020-12-15 12:22:17 +02:00
Lauri Ojansivu fd7225d861 Update translations. 2020-12-15 12:14:02 +02:00
Lauri Ojansivu e0bd22e674 Update ChangeLog. 2020-12-15 12:11:43 +02:00
Lauri Ojansivu 89332cefc5 Merge branch 'master' of github.com:wekan/wekan 2020-12-15 12:09:09 +02:00
Lauri Ojansivu 5172f64b72 Update ChangeLog. 2020-12-15 12:08:53 +02:00
Lauri Ojansivu 6cb4b9fe4a Prevent normal user deleting or modifying too much.
Allow normal user to export board. Part 2.

Thanks to Samunosuke, pgh2357 and xet7 !

Related #3377
2020-12-15 12:05:54 +02:00
Lauri Ojansivu c978f55c56 Update ChangeLog. 2020-12-15 12:04:31 +02:00
Lauri Ojansivu 4a205fcfcb Prevent normal user deleting or modifying too much.
Allow normal user to export board.

Thanks to Samunosuke, pgh2357 and xet7 !

Related #3377
2020-12-15 11:52:57 +02:00
Lauri Ojansivu 2e1e703e35 Merge pull request #3393 from wekan/dependabot/npm_and_yarn/ini-1.3.7
Bump ini from 1.3.5 to 1.3.7
2020-12-12 17:38:08 +02:00
dependabot[bot] a75c162483 Bump ini from 1.3.5 to 1.3.7
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-11 19:53:26 +00:00
Lauri Ojansivu f6c0700633 v4.59 2020-12-10 12:16:44 +02:00
Lauri Ojansivu dece7ddf13 Update translations. 2020-12-10 12:11:13 +02:00
Lauri Ojansivu d06bcd9dcc Update ChangeLog. 2020-12-10 12:08:27 +02:00
Lauri Ojansivu ee7d82c006 Merge pull request #3389 from daniel-eder/fix/clone-board-checklist-items
Fix not all checklist items being imported/cloned
2020-12-10 12:06:28 +02:00
Daniel Eder b777f7f2af Fix not all checklist items being imported/cloned 2020-12-10 10:47:57 +02:00
Lauri Ojansivu fe87b9928c v4.58 2020-12-09 16:20:55 +02:00
Lauri Ojansivu fb36709047 Update translations. 2020-12-09 16:13:45 +02:00
Lauri Ojansivu 73aaccb6dd Update ChangeLog. 2020-12-09 16:10:39 +02:00
Lauri Ojansivu 1fe0059402 Merge branch 'daniel-eder-fix/clone-board' 2020-12-09 16:07:19 +02:00
Daniel Eder 0c12c45080 Fix missing subtasks when cloning board 2020-12-09 15:51:45 +02:00
Daniel Eder a6c48329ef Fix missing assignee assignment when cloning or importing board 2020-12-09 15:06:56 +02:00
Daniel Eder a3cd1b89ff Fix missing member assignments when cloning board 2020-12-09 15:02:50 +02:00
Daniel Eder 7a08f42edb Fix missing custom fields when cloning board 2020-12-09 14:01:33 +02:00
Lauri Ojansivu e8722b56e3 v4.57 2020-12-08 21:49:56 +02:00
Lauri Ojansivu 052948f6eb Update ChangeLog. 2020-12-08 21:41:10 +02:00
Lauri Ojansivu cd03395e05 Merge pull request #3385 from mfilser/minicard_space_after_assignees
Minicard, reduce space after assignees label
2020-12-08 21:37:16 +02:00
Lauri Ojansivu 61caf18fd4 Update ChangeLog. 2020-12-08 20:40:22 +02:00
Lauri Ojansivu 015f4d671d Upgrade to Node 12.20.0
Thanks to Node developers!
2020-12-08 20:38:31 +02:00
Lauri Ojansivu c13e828c79 Update ChangeLog. 2020-12-08 20:30:42 +02:00
Lauri Ojansivu 7a6abaac44 Update to Meteor 1.12
Thanks to Meteor developers!
2020-12-08 20:27:58 +02:00
Lauri Ojansivu 58dffd0a33 Update ChangeLog. 2020-12-08 20:17:13 +02:00
Lauri Ojansivu fe0232a4e8 Update translations. 2020-12-08 20:11:08 +02:00
Lauri Ojansivu 8dff6c2e2a Merge branch 'mfilser-drag_handle_checklistitem' 2020-12-08 19:27:32 +02:00
Martin Filser 3a6e2813a6 Minicard, reduce space after assignees label 2020-12-08 17:45:57 +01:00
Martin Filser 8005640b77 Drag handles at checklist items on mobile view #3240 2020-12-08 17:44:36 +01:00
Lauri Ojansivu bc929fb7e0 Update translations. 2020-12-08 00:08:40 +02:00
Lauri Ojansivu 019874b6af Update ChangeLog. 2020-12-08 00:06:05 +02:00
Lauri Ojansivu a7977a8fc7 Hide duplicate create board button, because it did not show board templates correctly.
Thanks to xet7 !

Fixes #2728
2020-12-08 00:02:51 +02:00
Lauri Ojansivu 62f6cc7198 Update translations. 2020-12-03 07:18:00 +02:00
Lauri Ojansivu ad331ee122 Update ChangeLog. 2020-12-03 07:16:06 +02:00
Lauri Ojansivu 387f0600ce REST API: Fix typos, remove extra code.
Thanks to xet7 !
2020-12-03 07:14:06 +02:00
Lauri Ojansivu 0801e33f97 Update ChangeLog. 2020-12-03 07:03:18 +02:00
Lauri Ojansivu f576d2f356 Merge pull request #3382 from ThoreKr/helm-secretenv
Helm: Introduce secretEnv for secret value provisioning
2020-12-03 07:00:07 +02:00
Lauri Ojansivu 051f7b2769 REST API: Added Wekan REST API Python CLI, for adding card, downloading attachments etc.
Thanks to xet7 !

Related #1482
2020-12-03 06:54:25 +02:00
Lauri Ojansivu 1f207c493d Update ChangeLog. 2020-12-03 06:36:10 +02:00
Thore 03f565bf95 Introduce secretEnv for secret value provisioning 2020-12-03 05:35:11 +01:00
Lauri Ojansivu 36e29a405e REST API: Added file download URL to listing of attachments of a board. Part 2.
Thanks to xet7 !

Related #1482
2020-12-03 06:30:27 +02:00
Lauri Ojansivu 2ec53b27d1 REST API: Added file download URL to listing of attachments of a board.
Thanks to xet7 !

Related #1482
2020-12-03 06:21:46 +02:00
Lauri Ojansivu 152a0b50f2 Update ChangeLog. 2020-12-03 01:53:10 +02:00
Lauri Ojansivu c09758fb91 Try to fix Docker. 2020-12-03 01:40:56 +02:00
Lauri Ojansivu 2b2884d996 Try to fix Docker. 2020-12-03 01:00:10 +02:00
Lauri Ojansivu 4537971300 Try to fix Docker on Quay.
Thanks to xet7 !

Related #3380
2020-12-02 20:06:34 +02:00
Lauri Ojansivu 0b43e8b42a Remove old text. 2020-11-30 20:48:19 +02:00
Lauri Ojansivu bf94161f30 REST API: List attachments of a board.
For using this, Python code example:
https://github.com/wekan/wekan/wiki/New-card-with-Python3-and-REST-API

Thanks to xet7 !

Related #1482
2020-11-30 20:41:54 +02:00
Lauri Ojansivu 573426899a v4.56 2020-11-30 00:05:41 +02:00
Lauri Ojansivu 3816227837 Update translations. 2020-11-29 23:34:24 +02:00
Lauri Ojansivu fe5e311673 Update translations. 2020-11-29 05:18:39 +02:00
Lauri Ojansivu bec0b7ec56 Update ChangeLog. Fix lint. 2020-11-29 04:24:53 +02:00
Lauri Ojansivu 9d2a9ee70b Fix lint. 2020-11-29 04:19:28 +02:00
Lauri Ojansivu baf652a569 Merge pull request #3374 from helioguardabaxo/master
Improvements in activities design
2020-11-29 04:17:38 +02:00
helioguardabaxo 9f340bcecd Improvements in activities design 2020-11-28 21:50:01 -03:00
Lauri Ojansivu cc0a866166 Update ChangeLog. 2020-11-28 01:42:35 +02:00
Lauri Ojansivu d39b62503f Merge pull request #3373 from helioguardabaxo/master
Fixed end date return
2020-11-28 01:40:55 +02:00
helioguardabaxo e9b9af4616 Fixed end date return 2020-11-27 20:02:49 -03:00
Lauri Ojansivu 7d88ef7ab2 Update translations. 2020-11-27 22:56:51 +02:00
Lauri Ojansivu 5a49bd6f8c Update ChangeLog. 2020-11-27 22:38:57 +02:00
Lauri Ojansivu a255fc8524 Merge pull request #3372 from helioguardabaxo/master
Attempt to implement date activities notification
2020-11-27 22:37:08 +02:00
Lauri Ojansivu d1b5c42d42 Update ChangeLog. 2020-11-27 21:33:56 +02:00
Lauri Ojansivu d957768a39 Merge pull request #3369 from jiangytcn/helm
fix: update helm mongodb dependency
2020-11-27 21:17:44 +02:00
Lauri Ojansivu 999630aed5 Update ChangeLog. 2020-11-27 19:15:39 +00:00
Lauri Ojansivu cf7efccde5 Merge branch 'progressify-master' 2020-11-27 19:11:03 +00:00
Lauri Ojansivu 7b82a80fb4 Fix typo. 2020-11-27 19:08:57 +00:00
helioguardabaxo cfe500794c Attempt to implement date activities notification 2020-11-27 14:41:20 -03:00
progressify a2d298f493 sticky swimlane again :) 2020-11-26 18:25:33 +01:00
progressify 4687a866f5 sticky swimlane 2020-11-25 22:54:17 +01:00
Jiang Yi Tao ff08aff131 fix: update helm mongodb dependency
1. removed unused test pod
2. update chart dependency with bitnami repo
3. removed unused configurations in default values

Signed-off-by: Jiang Yi Tao <jiangyt.cn@gmail.com>
2020-11-25 19:53:56 +08:00
Lauri Ojansivu 5510c2a37d 1) New default: sudo snap set wekan mongo-log-destination='devnull'. Other options: syslog/snapcommon.
This should lower amount of disk usage and logs.
2) Tried to fix command: sudo snap set wekan mongo-url='...'

Thanks to xet7 !

Fixes #3059,
fixes #2364,
fixes wekan/wekan-snap#138,
fixes wekan/wekan-snap#113
2020-11-23 20:40:37 +02:00
Lauri Ojansivu 608a084b94 Update ChangeLog. 2020-11-23 17:47:14 +02:00
Lauri Ojansivu 9e47abdaa3 Merge pull request #3366 from helioguardabaxo/master
Added date notification icons
2020-11-23 17:44:26 +02:00
Lauri Ojansivu 4d7bd455c9 Update ChangeLog. 2020-11-23 17:42:23 +02:00
Lauri Ojansivu 05a72f7c62 Fix typo on MONGO_URL on Snap.
Thanks to xet7 !
2020-11-23 17:40:26 +02:00
helioguardabaxo 4e23429cb8 Added date notification icons 2020-11-23 12:10:38 -03:00
Lauri Ojansivu b67d3e91af v4.55 2020-11-21 18:07:31 +02:00
Lauri Ojansivu 636487502d Update translations. 2020-11-21 17:57:06 +02:00
Lauri Ojansivu 3207f457d4 Update ChangeLog. 2020-11-21 04:32:44 +02:00
Lauri Ojansivu af0cb1d6e7 Merge pull request #3359 from jghaanstra/master
Modern Dark: card details as lightbox
2020-11-21 04:31:18 +02:00
Lauri Ojansivu 06c16b79e3 Update ChangeLog. 2020-11-21 04:30:46 +02:00
Lauri Ojansivu 09617e17d9 Merge pull request #3360 from centralhardware/increase_avatar_size
Increase avatar size
2020-11-20 20:38:01 +02:00
jghaanstra 94f50dd6b6 Modern Dark: card details as lightbox 2020-11-20 09:51:25 +01:00
Alexey Fedechkin d667554686 Update en.i18n.json 2020-11-20 14:04:16 +07:00
Alexey Fedechkin cbf3bcfe1c Update en-GB.i18n.json 2020-11-20 14:03:46 +07:00
Alexey Fedechkin 3d82323eaa Update avatars.js
increase the maximum avatar size
2020-11-20 13:51:34 +07:00
Lauri Ojansivu 83cd5e7494 Update translations. 2020-11-18 22:46:39 +02:00
Lauri Ojansivu e1e5554b88 Update ChangeLog. 2020-11-18 22:44:23 +02:00
Lauri Ojansivu 6193a0b64e Set minimum height to icons at All Boards page.
Thanks to xet7 !
2020-11-18 22:42:00 +02:00
Lauri Ojansivu d1c8917cd2 v4.54 2020-11-17 16:02:53 +02:00
Lauri Ojansivu 7e17db4feb Update translations. 2020-11-17 15:49:49 +02:00
Lauri Ojansivu c214510087 Update translations. 2020-11-17 14:16:07 +02:00
Lauri Ojansivu 9bac5aa58e Update ChangeLog. 2020-11-17 14:00:43 +02:00
Lauri Ojansivu 9dbb10c59b Added back variable auto height of icons at All Boards page.
Thanks to xet7 !
2020-11-17 13:59:02 +02:00
Lauri Ojansivu d5325cc830 Update translations. 2020-11-17 13:53:44 +02:00
Lauri Ojansivu 1539da75ed Update ChangeLog. 2020-11-17 12:52:15 +02:00
Lauri Ojansivu f786afc4b9 Upgrade to Node.js 12.19.1
Thanks to Node.js developers!
2020-11-17 12:50:34 +02:00
Lauri Ojansivu 37ae4d5302 Update ChangeLog. 2020-11-17 12:46:13 +02:00
Lauri Ojansivu 37b0543ed6 Merge branch 'helioguardabaxo-master' 2020-11-17 12:44:02 +02:00
helioguardabaxo 69fc2cd8f8 Add keyboard shortcut for search 2020-11-16 19:20:57 -03:00
Lauri Ojansivu 5e03507eba Update translations. 2020-11-16 19:24:12 +02:00
Lauri Ojansivu 01fea212ec v4.53 2020-11-15 00:34:07 +02:00
Lauri Ojansivu 81ff3ec5b1 Update translations. 2020-11-15 00:26:12 +02:00
Lauri Ojansivu 393464f2d8 Update ChangeLog. 2020-11-15 00:23:59 +02:00
Lauri Ojansivu 17867159ea Merge pull request #3351 from danger89/patch-1
Missing bottom padding on lists
2020-11-15 00:21:27 +02:00
Lauri Ojansivu 7b064ce448 Update ChangeLog. 2020-11-15 00:20:49 +02:00
Lauri Ojansivu bf403cacf8 Merge pull request #3348 from jghaanstra/master
Minor improvements to Modern Dark theme
2020-11-15 00:19:10 +02:00
Melroy van den Berg a08bc8bb81 Missing bottom padding on lists
Add some padding to the bottom of the list, much better!
2020-11-14 20:32:52 +01:00
jghaanstra 554e01a172 Minor improvements to Modern Dark theme 2020-11-14 08:35:08 +01:00
Lauri Ojansivu ed4260dd38 Removed not working fix-download-unicode/cfs_access-point.txt from build script.
Thanks to xet7 !
2020-11-13 03:22:28 +02:00
Lauri Ojansivu 9e56cd5ea3 Update ChangeLog. 2020-11-12 20:33:01 +02:00
Lauri Ojansivu 8db8766a48 Merge branch 'master' of github.com:wekan/wekan 2020-11-12 20:23:43 +02:00
Lauri Ojansivu 222fca3ad7 Update markdown-it and markdown-it-emoji dependencies.
Thanks to developers of markdown-it and markdown-it-emoji !
2020-11-12 20:22:54 +02:00
jghaanstra efc50aec07 Minor improvements to Modern Dark theme 2020-11-12 19:17:34 +01:00
Lauri Ojansivu 21aebe845f Uncomment chown. 2020-11-12 16:47:12 +02:00
Lauri Ojansivu 345e2357c8 Install npm. 2020-11-12 16:45:58 +02:00
Lauri Ojansivu 8250cbcf6e Use latest MongoDB on Docker. 2020-11-12 15:57:53 +02:00
Lauri Ojansivu d0040754ea Update Docker upgrade info. 2020-11-12 15:51:23 +02:00
Lauri Ojansivu 22501749da Note: Docker Hub buils are broken. Only Quay works. 2020-11-12 15:43:21 +02:00
Lauri Ojansivu c30bc77eea v4.52 2020-11-12 01:10:38 +02:00
Lauri Ojansivu f74bac4f6b Update ChangeLog. 2020-11-12 00:54:27 +02:00
Lauri Ojansivu f54036225d Merge pull request #3346 from jghaanstra/master
Some more small improvements to Modern Dark theme
2020-11-12 00:52:47 +02:00
jghaanstra f1b680119f Some more small improvements to Modern Dark theme 2020-11-11 23:47:11 +01:00
Lauri Ojansivu 9ffdb83004 v4.51 2020-11-11 14:34:58 +02:00
Lauri Ojansivu 7080a0ce7d Merge branch 'master' of github.com:wekan/wekan 2020-11-11 13:44:20 +02:00
Lauri Ojansivu de4f1aa8c4 Update ChangeLog. 2020-11-11 13:44:04 +02:00
Lauri Ojansivu fa6182b979 Merge pull request #3344 from jghaanstra/master
Improvements Modern Dark Theme
2020-11-11 13:42:49 +02:00
Lauri Ojansivu a457e337ac Update ChangeLog. 2020-11-11 13:41:54 +02:00
Lauri Ojansivu ba2c280d56 Merge pull request #3341 from mfilser/drag_handle_checklist
Drag handles for checklist #3240
2020-11-11 13:39:18 +02:00
Lauri Ojansivu c8ed4947e1 Update ChangeLog. 2020-11-11 13:38:30 +02:00
Lauri Ojansivu 5b700a30d9 Merge branch 'brian-j-master' 2020-11-11 13:36:37 +02:00
Lauri Ojansivu d62f9a716e Merge branch 'master' of https://github.com/brian-j/wekan into brian-j-master 2020-11-11 13:32:29 +02:00
Lauri Ojansivu 949f22acf0 Update ChangeLog. 2020-11-11 13:31:08 +02:00
Lauri Ojansivu 358c411255 Merge pull request #3340 from mfilser/admin_modify_comments
board admin can edit and delete comments as well #3201
2020-11-11 13:27:50 +02:00
jghaanstra cfec612704 Improvements Modern Dark Theme 2020-11-11 12:19:36 +01:00
brian-j 1741808e53 Replace tabs with spaces 2020-11-10 22:01:04 -03:00
Martin Filser fd41e8ba45 Drag handles for checklist #3240 2020-11-11 00:13:26 +01:00
Martin Filser 01285ba10d board admin can edit and delete comments as well #3201 2020-11-10 23:36:30 +01:00
brian-j 0180196d7e Alter call to sanitizeXss
Addressing feature: Custom URL Schemes autolinked #3218

Create a custom SafeAttrValue function which can allow non-standard protocols such as thunderlink: cbthunderlink: and aodroplink: to operate correctly without getting the value stripped away. Any other protocols and code remain to be processed by the default safeAttrValue routine.
2020-11-10 18:03:17 -03:00
Lauri Ojansivu 167d9d34eb v4.50 2020-11-10 13:57:27 +02:00
Lauri Ojansivu ab288f1593 Update translations. 2020-11-10 08:04:11 +02:00
Lauri Ojansivu 5813ad95cf Update ChangeLog. 2020-11-10 07:34:09 +02:00
Lauri Ojansivu 6801c960b1 Fix typo. 2020-11-10 07:23:59 +02:00
Lauri Ojansivu 76d1148a98 Merge pull request #3335 from helioguardabaxo/master
Add 'Modern Dark' theme
2020-11-10 07:22:46 +02:00
Lauri Ojansivu f63ed78f5b Update ChangeLog. 2020-11-10 07:20:21 +02:00
Lauri Ojansivu 0ef248574c Fix edit description to require only one click.
Thanks to uusijani and xet7 !

Fixes #3338
2020-11-10 07:16:14 +02:00
helioguardabaxo 415fac8a25 Add 'Modern Dark' theme 2020-11-08 16:45:15 -03:00
Lauri Ojansivu 6cbb77b591 v4.49 2020-11-04 19:40:11 +02:00
Lauri Ojansivu 65ea8edea7 Update translations. 2020-11-04 19:34:27 +02:00
Lauri Ojansivu c87fbfd3f8 Update ChangeLog. 2020-11-04 17:54:03 +02:00
Lauri Ojansivu faad739f97 Fix Trello import.
Thanks to elct9620 and xet7 !

Fixes #3330
2020-11-04 17:51:17 +02:00
Lauri Ojansivu 38bcb8a724 Update translations. 2020-11-04 17:27:37 +02:00
Lauri Ojansivu 82237f2e79 Update ChangeLog. 2020-11-04 17:20:09 +02:00
Lauri Ojansivu fd363c69cc Translate some part of Gantt chart of Wekan Gantt GPL version.
This only adds translations to all Wekan versions,
not any GPL code to MIT version.

Thanks to xet7 !
2020-11-04 17:15:55 +02:00
Lauri Ojansivu e7769ce467 Update ChangeLog. 2020-11-04 16:32:34 +02:00
Lauri Ojansivu 76273300e7 Changed board icons bigger at All Boards page.
Thanks to xet7 !
2020-11-04 16:28:51 +02:00
Lauri Ojansivu cb6d74d7d9 Update ChangeLog. 2020-11-04 16:21:56 +02:00
Lauri Ojansivu cfe78471aa Merge pull request #3329 from cloudron-io/ldap_sync_email
ldap: sync email address
2020-11-04 16:19:42 +02:00
Girish Ramakrishnan e79e0cfb66 ldap: sync email address 2020-11-03 14:25:42 -08:00
Lauri Ojansivu a74bc81ff8 v4.48 2020-11-02 23:47:50 +02:00
Lauri Ojansivu b10b7a713e Update translations. 2020-11-02 22:13:30 +02:00
Lauri Ojansivu c9a2120c54 Update ChangeLog. 2020-11-02 22:03:56 +02:00
Lauri Ojansivu 4e2d337620 When RICHER_CARD_COMMENT_EDITOR=true, use richer editor
also when editing card description.

Thanks to xet7 !
2020-11-02 21:58:13 +02:00
Lauri Ojansivu ec33cdcb29 Update ChangeLog. 2020-11-02 17:55:28 +02:00
Lauri Ojansivu 4cfddf1d8d Admin Panel / Settings / Layout / Custom Top Left Corner Logo Height.
Thanks to xet7 !
2020-11-02 17:53:01 +02:00
Lauri Ojansivu 3f9b86d8e7 Update ChangeLog. 2020-11-02 16:28:43 +02:00
Lauri Ojansivu f4fdb94a3f Fix Clone Board.
Thanks to e-gaulue and xet7 !

Fixes #3326
2020-11-02 16:25:01 +02:00
Lauri Ojansivu 02856877a6 Update ChangeLog. 2020-11-02 15:53:27 +02:00
Lauri Ojansivu 0a5f9307d2 Smaller board icons to All Boards Page, and use full page width, so more board icons fit visible at once.
Removed variable height, because different heights made it look a little unbalanced.

Thanks to xet7 !
2020-11-02 15:47:00 +02:00
Lauri Ojansivu 579968143c Update ChangeLog. 2020-11-02 15:46:29 +02:00
Lauri Ojansivu aa454a5542 Removed hot-module-replacement and mdg:meteor-apm-agent.
Thanks to xet7 !
2020-11-02 15:43:52 +02:00
Lauri Ojansivu ce563085b5 v4.47 2020-11-01 23:24:24 +02:00
Lauri Ojansivu 6f99b22dc6 Update translations. 2020-11-01 23:22:09 +02:00
Lauri Ojansivu b08f228191 Update ChangeLog. 2020-11-01 23:20:02 +02:00
Lauri Ojansivu 55252300c6 Add settings for OAUTH2_CA_CERT that is
Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299

Thanks to xet7 !

Related #3299 ,
related https://github.com/wekan/wekan/pull/3325
2020-11-01 23:14:20 +02:00
Lauri Ojansivu f99934b994 Update ChangeLog. 2020-11-01 23:02:17 +02:00
Lauri Ojansivu cd16fa43a0 Merge pull request #3325 from faust64/oidc-custom-ca
fix(oidc): wekan/wekan#3299
2020-11-01 22:53:43 +02:00
Samuel MARTIN MORO ae9d82430a fix(oidc): wekan/wekan#3299 2020-11-01 20:48:50 +01:00
Lauri Ojansivu d75ca0c8f0 Added Thanks. 2020-10-31 00:20:36 +02:00
Lauri Ojansivu 66a4b1c2df v4.46 2020-10-30 22:53:06 +02:00
Lauri Ojansivu 6fe39d99ac Update translations. 2020-10-30 22:42:44 +02:00
Lauri Ojansivu 388c249212 Update ChangeLog. 2020-10-30 22:39:37 +02:00
Lauri Ojansivu af583145ed Upgrade to Meteor 2.0-beta.4 .
Thanks to Meteor developers!
2020-10-30 22:37:11 +02:00
Lauri Ojansivu 9c8b7b324f Update ChangeLog. 2020-10-30 22:34:57 +02:00
Lauri Ojansivu a3f5ef1a54 Merge pull request #3323 from jtbairdsr/master
fix: use current boardId when a worker moves a card
2020-10-30 22:32:53 +02:00
Jonathan Baird 305658da3a fix: use current boardId when a worker moves a card 2020-10-30 13:20:29 -06:00
Lauri Ojansivu 2b24ebf539 v4.45 2020-10-30 13:16:18 +02:00
Lauri Ojansivu 13d5015fc3 Update translations. 2020-10-30 13:02:55 +02:00
Lauri Ojansivu 13cf1a687e Update ChangeLog. 2020-10-30 13:00:35 +02:00
Lauri Ojansivu d2f434879c Fix can not upload and download files, by changing back to Node.js 12.19.0 and adding fast-render.
Current file storing to MongoDB code was not yet compatible with newer Node.js.

Thanks to eskogito and xet7 !

Fixes #3320
2020-10-30 12:53:41 +02:00
Lauri Ojansivu c3ffaa7ce2 v4.44 2020-10-28 18:53:31 +02:00
Lauri Ojansivu 2955c167c2 Update ChangeLog. 2020-10-28 18:49:35 +02:00
Lauri Ojansivu 81d1bf6d27 Merge branch 'jtbairdsr-master' 2020-10-28 18:46:08 +02:00
Lauri Ojansivu 46ce345203 Merge branch 'master' of https://github.com/jtbairdsr/wekan into jtbairdsr-master 2020-10-28 18:02:14 +02:00
Jonathan Baird 363e69f01c fix: expose moving cards on mobile to workers
this fix also hides the move to another board functionality in the
submenu (only from the worker) so that the worker is still constrained
to a single board.
2020-10-28 09:38:41 -06:00
Lauri Ojansivu 9b0875169b Update ChangeLog. 2020-10-28 16:34:58 +02:00
Lauri Ojansivu e616247254 For development, add Meteor 2.0 Hot Module Replacement
https://forums.meteor.com/t/meteor-2-0-beta-with-hot-module-replacement-hmr/54313/8

Thanks to zodern!
2020-10-28 16:31:59 +02:00
Lauri Ojansivu cc5f22df79 Update ChangeLog. 2020-10-28 16:18:48 +02:00
Lauri Ojansivu 3448467953 Merge pull request #3312 from helioguardabaxo/master
Fix Modern theme board canvas background
2020-10-28 16:16:19 +02:00
Lauri Ojansivu 74dbb96d85 Update translations. 2020-10-28 16:15:16 +02:00
Lauri Ojansivu d2cfe76a28 Update ChangeLog. 2020-10-28 16:06:27 +02:00
Lauri Ojansivu 045e9db7b8 Upgrade to Node.js 14.15.0
Thanks to Node.js and Meteor.js developers!
2020-10-28 15:57:38 +02:00
Lauri Ojansivu 460b1d3a66 Changed public board changing Swimlanes/Lists/Calendar view
and changing Hide minicard label text
from using cookies to using browser localStorage.

Thanks to xet7 !
2020-10-28 15:45:37 +02:00
Lauri Ojansivu a463f2a855 Upgrade to Meteor 2.0-beta.3. Removed fast-render and ostrio:cookies.
Thanks to xet7 !
2020-10-28 15:44:47 +02:00
helioguardabaxo 8b3399b8f6 Fix Moder theme board canvas background 2020-10-26 19:58:51 -03:00
Lauri Ojansivu ef59d6dcb9 Update ChangeLog. 2020-10-21 19:30:38 +03:00
Lauri Ojansivu 1b429b3f99 Fixed: With ORACLE_OIM_ENABLED, allow setting OAUTH2_REQUEST_PERMISSIONS with environment variable.
Thanks to xet7 !
2020-10-21 19:20:48 +03:00
Lauri Ojansivu 5098f7dee1 v4.43 2020-10-20 19:11:48 +03:00
Lauri Ojansivu c509aaf246 Update translations. 2020-10-20 19:04:18 +03:00
Lauri Ojansivu d7333dec84 Fixed CSV/TSV export. Please test.
Thanks to xet7 !

Related #3173
2020-10-20 18:59:41 +03:00
Lauri Ojansivu 9d97494cfc Update ChangeLog. 2020-10-16 23:58:54 +03:00
Lauri Ojansivu acf9e7caea Allow more than one assignee.
Thanks to xet7 !

Fixes #3302
2020-10-16 23:56:20 +03:00
Lauri Ojansivu f6d000b26a Update translations. 2020-10-16 23:42:12 +03:00
Lauri Ojansivu ba5b35d0cc v4.42 2020-10-14 21:51:51 +03:00
Lauri Ojansivu 1eae8222c4 Update translations. 2020-10-14 21:40:32 +03:00
Lauri Ojansivu 9b5a519bc7 Update ChangeLog. 2020-10-12 16:42:26 +03:00
Lauri Ojansivu b8a209249e Updagrade to Node.js 12.19.0.
Thanks to Node.js developers !
2020-10-12 16:39:47 +03:00
Lauri Ojansivu ecc1b69f5c Update translations. 2020-10-12 16:19:25 +03:00
Lauri Ojansivu 6253bc6c14 Merge branch 'master' of github.com:wekan/wekan 2020-10-11 01:50:44 +03:00
Lauri Ojansivu 7768a4c1ba Reverted systemd changes that caused Snap to fail building.
Thanks to xet7 !
2020-10-11 01:50:24 +03:00
Lauri Ojansivu cd1bc7a695 Reverted systemd changed that caused Snap to fail building. 2020-10-11 01:49:55 +03:00
Lauri Ojansivu 42f45f9a83 Update translations. 2020-10-10 20:13:45 +03:00
Lauri Ojansivu d081eb0a2e Update dependencies. 2020-10-10 20:10:08 +03:00
Lauri Ojansivu 504533991b Update translations. 2020-10-04 23:25:23 +03:00
Lauri Ojansivu 44a5976b85 Update ChangeLog. 2020-10-03 23:51:54 +03:00
Lauri Ojansivu ac65b93b43 Added restart on failure delay of 10 seconds to Snap.
Thanks to xet7 !

Related #3293
2020-10-03 23:48:11 +03:00
Lauri Ojansivu e9d27c521e Update translations. 2020-10-03 23:23:26 +03:00
Lauri Ojansivu dc86ae21de v4.41 2020-10-03 00:34:30 +03:00
Lauri Ojansivu befb0f18b6 Update ChangeLog. 2020-10-03 00:28:41 +03:00
Lauri Ojansivu b796a6cbf4 Update dependencies. 2020-10-03 00:27:22 +03:00
Lauri Ojansivu 9336a55a50 Update ChangeLog. 2020-10-03 00:24:39 +03:00
Lauri Ojansivu 26749442fd Update translations. 2020-10-03 00:23:03 +03:00
Lauri Ojansivu 7223d6e750 At Admin Panel / Layout: Text below custom login logo. Can have markdown formatting.
Thanks to xet7 !
2020-10-03 00:21:19 +03:00
Lauri Ojansivu 41a8e79e0e Update ChangeLog. 2020-10-02 23:35:16 +03:00
Lauri Ojansivu ec8a78537f Login with OIDC OAuth2 Oracle on premise identity manager OIM, with setting ORACLE_OIM_ENABLED=true.
Thanks to xet7 !
2020-10-02 23:15:39 +03:00
Lauri Ojansivu 4eb7597aa9 Update translations. 2020-10-02 21:14:45 +03:00
Lauri Ojansivu 3d13fa3a26 Update translations. 2020-09-20 15:05:21 +03:00
Lauri Ojansivu 655fe8afd3 v4.40 2020-09-18 19:50:40 +03:00
Lauri Ojansivu 855c66976e Update ChangeLog. 2020-09-18 19:46:27 +03:00
Lauri Ojansivu 185cf163b2 Upgrade to Meteor v1.11.1 .
Thanks to Meteor developers !
2020-09-18 19:42:34 +03:00
Lauri Ojansivu 45b7365025 Update translations. 2020-09-18 19:34:56 +03:00
Lauri Ojansivu ed5f64ccd6 Update ChangeLog. 2020-09-18 19:23:16 +03:00
Lauri Ojansivu 3fc80e1145 Better translation: Target URL to Link URL. 2020-09-18 19:20:16 +03:00
Lauri Ojansivu 05e3fc31b4 Remove extra translation that is not used. 2020-09-18 19:06:02 +03:00
Lauri Ojansivu d5e1c4bfa5 Update ChangeLog. 2020-09-18 18:58:22 +03:00
Lauri Ojansivu a7c3317ed6 Custom Logo for Login and Top Left Corner. Optional link when clicking logo. Settings at Admin Panel / Layout.
Thanks to xet7 !

Fixes #1493,
fixes #2721,
fixes #2681,
fixes #1583,
fixes #1196,
fixes #336,
fixes wekan/wekan-snap#130
2020-09-18 18:45:48 +03:00
Lauri Ojansivu 7db08082bc v4.39 2020-09-17 00:19:45 +03:00
Lauri Ojansivu 32836d42c9 Update ChangeLog. 2020-09-16 23:26:38 +03:00
Lauri Ojansivu 789c4b480a Update translations. 2020-09-16 23:23:22 +03:00
Lauri Ojansivu abe291837a Merge branch 'Akuket-feature/impersonate-user' 2020-09-16 23:12:25 +03:00
Lauri Ojansivu 81ac0fdba9 Add translations strings for impersonate user feature.
Thanks to xet7 !
2020-09-16 23:11:43 +03:00
Guillaume d19cc972e0 Add admin ability : Impersonate one user. 2020-09-16 18:11:19 +00:00
Lauri Ojansivu 8f6c3550e3 v4.38 2020-09-16 05:52:19 +03:00
Lauri Ojansivu 40681ccda4 Update translations. 2020-09-16 05:43:58 +03:00
Lauri Ojansivu 4f76e1e1eb Update ChangeLog. 2020-09-16 05:42:15 +03:00
Lauri Ojansivu 5cd9f89b21 Upgrade to Node.js v12.18.4.
Thanks to Node developers !
2020-09-16 05:35:21 +03:00
Lauri Ojansivu b24685e38d v4.37 2020-09-15 23:19:51 +03:00
Lauri Ojansivu 5d7aa373fd Update translations. 2020-09-15 23:17:44 +03:00
Lauri Ojansivu e79b7fad0a Update release scripts. 2020-09-15 23:14:05 +03:00
Lauri Ojansivu e05541da88 Update translations. 2020-09-15 22:51:51 +03:00
Lauri Ojansivu 0ccbfcfc9e Merge branch 'master' of github.com:wekan/wekan 2020-09-15 22:39:29 +03:00
Lauri Ojansivu 8e6a570d47 Update ChangeLog. 2020-09-15 22:39:13 +03:00
Lauri Ojansivu 129a884a4e Merge branch 'helioguardabaxo-master' 2020-09-15 22:34:49 +03:00
Lauri Ojansivu 2d278f303a Fix linting.
Thanks to xet7 !
2020-09-15 22:34:19 +03:00
Lauri Ojansivu dd67bd4b5e Merge branch 'master' of https://github.com/helioguardabaxo/wekan into helioguardabaxo-master 2020-09-15 22:29:00 +03:00
Lauri Ojansivu 17239fe052 Merge pull request #3278 from devilmengcry/patch-1
Update docker-compose.yml
2020-09-15 22:26:01 +03:00
helioguardabaxo 389908be7c Adjut cardPanelWidth for card details 2020-09-15 16:00:23 -03:00
helioguardabaxo 33cf589c05 UI improvements in filter, multi-selection and rules 2020-09-15 12:47:07 -03:00
李李李 d961355016 Update docker-compose.yml
yaml.parser.ParserError
2020-09-15 20:16:42 +08:00
Lauri Ojansivu 9a72cf7ac2 v4.36 2020-09-15 04:32:12 +03:00
Lauri Ojansivu 53027559cd Update translations. 2020-09-15 04:27:59 +03:00
Lauri Ojansivu 2e5545491b Update ChangeLog. 2020-09-15 04:26:36 +03:00
Lauri Ojansivu f9b0da65f1 Added translations for date selection popups.
Thanks to xet7 !

Fixes #1670
2020-09-15 04:21:23 +03:00
Lauri Ojansivu 4c734ee70f v4.35 2020-09-14 21:29:59 +03:00
Lauri Ojansivu 7173e293ef Try to fix Snap. 2020-09-14 21:26:35 +03:00
Lauri Ojansivu 19ff17b3a5 v4.34 2020-09-14 21:04:01 +03:00
Lauri Ojansivu d2b84c7773 Try to fix Snap. 2020-09-14 20:55:04 +03:00
Lauri Ojansivu 623d6c09c4 v4.33 2020-09-14 20:31:24 +03:00
Lauri Ojansivu 8ae80138a0 Update ChangeLog. 2020-09-14 20:28:17 +03:00
Lauri Ojansivu cca041e21a Update dependencies.
Thanks to developers of dependencies !
2020-09-14 20:26:32 +03:00
Lauri Ojansivu b333061de7 Update translations. 2020-09-14 20:20:45 +03:00
Lauri Ojansivu abf4322b6c Add dot. 2020-09-14 20:17:36 +03:00
Lauri Ojansivu 4e1a73fa27 Update ChangeLog. 2020-09-14 20:17:02 +03:00
Lauri Ojansivu 214c86cc22 Added some CAS and SAML settings. Not tested. Please test and send pull requests if it does not work.
See https://github.com/wekan/wekan/wiki/SAML and https://github.com/wekan/wekan/wiki/CAS

Thanks to xet7 !

Related #3204,
related #708
2020-09-14 19:57:50 +03:00
Lauri Ojansivu e0192f570e Update translations. 2020-09-13 17:10:03 +03:00
Lauri Ojansivu f5b5ab6331 Update translations. 2020-09-13 12:57:34 +03:00
Lauri Ojansivu d1c83b28f3 Update translations. 2020-09-13 12:46:58 +03:00
Lauri Ojansivu aa12b3f162 v4.32 2020-09-13 12:31:56 +03:00
Lauri Ojansivu 754087b5cf v4.31 2020-09-13 11:58:54 +03:00
Lauri Ojansivu e656e36a92 Update translations. 2020-09-13 11:55:56 +03:00
Lauri Ojansivu 0bf138281e Update ChangeLog. 2020-09-13 11:53:58 +03:00
Lauri Ojansivu fe62e12ab4 Try to fix Snap.
Thanks to xet7 !
2020-09-13 11:51:56 +03:00
Lauri Ojansivu 3c64c504c8 Add missing text. 2020-09-13 11:17:03 +03:00
Lauri Ojansivu 479472c1d8 v4.30 2020-09-13 11:15:00 +03:00
Lauri Ojansivu c10c10c4a9 Update ChangeLog. 2020-09-13 11:07:48 +03:00
Lauri Ojansivu d8c515c858 Update translations. 2020-09-13 11:01:01 +03:00
Lauri Ojansivu 168a308f5f Merge branch 'helioguardabaxo-master' 2020-09-13 10:56:15 +03:00
Lauri Ojansivu fe40c5fd37 Update English text 2020-09-13 10:53:13 +03:00
Lauri Ojansivu c430e36357 Merge branch 'master' of https://github.com/helioguardabaxo/wekan into helioguardabaxo-master 2020-09-13 10:51:08 +03:00
Lauri Ojansivu 007bf743a6 Merge branch 'xoe-labs-da-use-grifs-stream-updated-fork' 2020-09-13 10:49:28 +03:00
Lauri Ojansivu 774f57f3f6 Merge branch 'da-use-grifs-stream-updated-fork' of https://github.com/xoe-labs/wekan into xoe-labs-da-use-grifs-stream-updated-fork 2020-09-13 09:57:37 +03:00
Lauri Ojansivu 044a64b964 Update ChangeLog. 2020-09-13 09:49:01 +03:00
Lauri Ojansivu f6bdb4d694 - Remove mouse scroll settings of already removed custom scrollbar.
- Add setting OAUTH2_ADFS_ENABLED=false
- Add testing for both string and boolean version of true

Thanks to xet7 !

Fixes #2949
2020-09-13 09:41:53 +03:00
helioguardabaxo 6a6b76e084 Bold minicard item title 2020-09-13 01:11:19 -03:00
helioguardabaxo 9357ce8a26 Card details layout improvements 2020-09-13 00:23:12 -03:00
helioguardabaxo 0aab2b3085 Put card custom field check in the same line 2020-09-12 16:11:54 -03:00
helioguardabaxo 3edafd6c67 This PR add 'Template' label and modify placeholder in template search 2020-09-12 13:33:29 -03:00
David Arnold 850ded2e17 Use forked & updated version of gridfs-stream 2020-09-11 12:43:01 -05:00
Lauri Ojansivu 67a58daaf3 Update ChangeLog. 2020-09-11 19:18:50 +03:00
Lauri Ojansivu 9fdafd2008 Update npm-mongo dependency.
Thanks to filipenevola.
2020-09-11 19:16:01 +03:00
Lauri Ojansivu 66c37ccd3e Update dependencies. 2020-09-11 14:35:50 +03:00
Lauri Ojansivu fd3139201a Merge pull request #3268 from blaggacao/patch-1
bump: mongodb -> 3.6.2
2020-09-11 14:16:49 +03:00
Lauri Ojansivu abfedf573b Merge pull request #3269 from phaseshift3r/patch-1
Update oidc_server.js
2020-09-11 14:10:14 +03:00
phaseshift3r a1f9536657 Update oidc_server.js
added hack for getting the claims in the accessToken instead of the /adfs/oauth2/userinfo endpoint 

https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-faq#i-am-trying-to-get-additional-claims-on-the-user-info-endpoint-but-its-only-returning-subject-how-can-i-get-additional-claims

Environment variable needed set
OAUTH2_ADFS=true
2020-09-11 11:16:28 +02:00
David Arnold dec0563e3c bump: mongodb -> 3.6.2
https://github.com/mongodb/node-mongodb-native/releases
2020-09-10 20:44:22 -05:00
Lauri Ojansivu 9a4136399f v4.29 2020-09-11 02:18:40 +03:00
Lauri Ojansivu 20b0177105 Changed markdown from marked to markdown-it. Added emoji support https://github.com/wekan/wekan/wiki/Emoji
Thanks to xet7 !

Fixes #2696,
fixes #1537
2020-09-11 02:04:17 +03:00
Lauri Ojansivu e0957f70e6 v4.28 2020-09-11 00:53:50 +03:00
Lauri Ojansivu 125c4684bd Update dependencies.
Thanks to developers of dependencies!
2020-09-11 00:45:46 +03:00
Lauri Ojansivu 991d4909e1 Update ChangeLog. 2020-09-11 00:31:56 +03:00
Lauri Ojansivu f81fd8084f Try to fix language names.
Thanks to buplet, xoas and xet7.

Fixes #3265
2020-09-11 00:28:33 +03:00
Lauri Ojansivu 231137617f Update translations. 2020-09-10 17:11:55 +03:00
Lauri Ojansivu f6b4c0ab25 Update ChangeLog. 2020-09-10 15:57:00 +03:00
Lauri Ojansivu 30f2de151b Update translations. 2020-09-10 15:54:02 +03:00
Lauri Ojansivu 20fe8bc09b Merge pull request #3264 from tborychowski/master
fix(card): fix card scrollbar on windows
2020-09-10 15:33:21 +03:00
Tomasz Borychowski 2e715444ed fix(card): fix card scrollbar on windows 2020-09-10 09:15:45 +01:00
Lauri Ojansivu 1b13beb106 v4.27 2020-09-09 09:14:13 +03:00
Lauri Ojansivu 88213911fd Update translations. 2020-09-09 09:08:19 +03:00
Lauri Ojansivu 50f3957011 Update ChangeLog. 2020-09-09 09:03:18 +03:00
Lauri Ojansivu bf18792d77 Reverted incomplete fix for "Checklist + card title with starting number and point", because it disabled some markdown. Related #2696
More fixes to GFM checklist not displayed properly in card title, fixes #2818

Thanks to xet7 !
2020-09-09 08:52:37 +03:00
Lauri Ojansivu ca39fce578 Update translations. 2020-09-08 21:01:31 +03:00
Lauri Ojansivu f0df8dcdc7 v4.26 2020-09-05 03:54:35 +03:00
Lauri Ojansivu 7d594705fb Update translations. 2020-09-05 03:47:20 +03:00
Lauri Ojansivu fe5e124f93 Update ChangeLog. 2020-09-05 03:04:38 +03:00
Lauri Ojansivu 41b1c55988 Disable list formatting and converting to HTML.
Fixes:
- Checklist + card title with starting number and point #2696
- How to begin a card title with "3. "? #1421
- GFM checklist not displayed properly in card title #2818

Thanks to xet7 !

Fixes #2696,
fixes #1421,
fixes #2818
2020-09-05 02:50:36 +03:00
Lauri Ojansivu cfcbf640d6 Update dependencies.
Thanks to developers of dependencies.
2020-09-05 01:36:43 +03:00
Lauri Ojansivu d344c39d49 Delete markdown demo that is not in use.
Thanks to xet7 !
2020-09-04 22:44:40 +03:00
Lauri Ojansivu 22d07d7a65 Update translations. 2020-09-04 20:56:29 +03:00
Lauri Ojansivu 44fc7c0771 Merge pull request #3254 from wekan/dependabot/npm_and_yarn/bl-2.2.1
Bump bl from 2.2.0 to 2.2.1
2020-09-04 17:21:30 +03:00
dependabot[bot] 7ec671bb9f Bump bl from 2.2.0 to 2.2.1
Bumps [bl](https://github.com/rvagg/bl) from 2.2.0 to 2.2.1.
- [Release notes](https://github.com/rvagg/bl/releases)
- [Commits](https://github.com/rvagg/bl/compare/v2.2.0...v2.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-03 18:55:54 +00:00
Lauri Ojansivu df35683043 Create codeql-analysis.yml 2020-09-03 19:32:02 +03:00
Lauri Ojansivu 03bfd8a734 v4.25 2020-08-31 15:25:27 +03:00
Lauri Ojansivu 409245e374 Update ChangeLog. 2020-08-31 15:11:37 +03:00
Lauri Ojansivu 5870d38e8e Restore original package.json and package-lock.json 2020-08-31 13:30:25 +03:00
Lauri Ojansivu c105e348d8 Merge branch 'tborychowski-master' 2020-08-31 13:29:13 +03:00
Lauri Ojansivu ccd0f89ae0 Merge branch 'master' of https://github.com/tborychowski/wekan into tborychowski-master 2020-08-31 13:28:34 +03:00
Lauri Ojansivu bdd28444bb Merge pull request #3248 from relikd/patch-1
Improving documentation for nextcloud integration
2020-08-31 12:28:22 +03:00
Oleg Geier c96468d76d Update docker-compose.yml
Important information missing in description
2020-08-30 18:58:11 +02:00
Lauri Ojansivu 943cd25592 Update translations. 2020-08-30 17:09:21 +03:00
Lauri Ojansivu 7f4d3ff3ec Update ChangeLog. 2020-08-30 17:07:37 +03:00
Lauri Ojansivu 5d2daa4a80 Mongo 4.4 does not work. Mongo 4.2 and 3.x works.
Thanks to GuidoDr for info.

Related #3247
2020-08-30 17:03:59 +03:00
Tomasz Borychowski 6372bb82c4 fix(scrollbar): revert formatting 2020-08-28 11:57:50 +01:00
Tomasz Borychowski 03a7da0795 fix(scrollbar): revert formatting 2020-08-28 11:56:10 +01:00
Tom bc1165ef3e revert formatting 2020-08-28 11:54:03 +01:00
Tom 47f34f6d12 revert formatting 2020-08-28 11:53:39 +01:00
Tomasz Borychowski d887e553ce fix(scrollbar): remove custom scrollbar 2020-08-28 11:46:51 +01:00
Lauri Ojansivu 13b5bb6407 v4.24 2020-08-27 17:16:09 +03:00
Lauri Ojansivu 5863df3323 Update translations. 2020-08-27 17:13:09 +03:00
Lauri Ojansivu b0cf69c160 Update ChangeLog. 2020-08-27 17:05:11 +03:00
Lauri Ojansivu 60b2787c55 Update dependencies.
Thanks to developers of dependencies!
2020-08-27 19:58:18 +03:00
Lauri Ojansivu 4d1e4f011f Update translations. 2020-08-27 19:40:05 +03:00
Lauri Ojansivu ec607596d1 Update ChangeLog. 2020-08-27 03:19:13 +03:00
Lauri Ojansivu 7e4b791c29 Add setting for mouse scroll deltafactor. Fix snap setting for mouse scroll amount.
Thanks to danger89 and xet7 !

Related #2949
2020-08-27 03:15:00 +03:00
Lauri Ojansivu 55d8d26b34 Update ChangeLog. 2020-08-27 02:40:46 +03:00
Lauri Ojansivu 3f5175778d Update translations. 2020-08-27 02:34:17 +03:00
Lauri Ojansivu 7e80db36cf Merge pull request #3244 from helioguardabaxo/master
Add Trigger and Action headers in Rule Details
2020-08-26 23:22:51 +03:00
Lauri Ojansivu 6828a1e07a Update translations. 2020-08-27 02:21:29 +03:00
helioguardabaxo 2a51a17ddc add Trigger and Action headers in Rule Details 2020-08-26 16:37:21 -03:00
Lauri Ojansivu ce11933dda Update ChangeLog. 2020-08-26 03:55:14 +03:00
Lauri Ojansivu b9f87bf310 Add Spanish (Peru) (es_PE).
Thanks to translators!
2020-08-26 03:49:53 +03:00
Lauri Ojansivu 28eeee3a28 Update translations. 2020-08-25 23:43:04 +03:00
Lauri Ojansivu e17e8d4154 Merge branch 'dependabot/npm_and_yarn/bcrypt-5.0.0' 2020-08-24 09:52:50 +03:00
dependabot[bot] dee7020a5a Bump bcrypt from 3.0.8 to 5.0.0
Bumps [bcrypt](https://github.com/kelektiv/node.bcrypt.js) from 3.0.8 to 5.0.0.
- [Release notes](https://github.com/kelektiv/node.bcrypt.js/releases)
- [Changelog](https://github.com/kelektiv/node.bcrypt.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kelektiv/node.bcrypt.js/compare/v3.0.8...v5.0.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-20 17:44:30 +00:00
Lauri Ojansivu 79f4e2ad6d Update translations. 2020-08-19 20:59:39 +03:00
Lauri Ojansivu 25f1256724 Update ChangeLog. 2020-08-19 20:10:18 +03:00
Lauri Ojansivu 4d49265b25 Upgrade to Meteor 1.11.
Thanks to Meteor developers!
2020-08-19 20:07:45 +03:00
Lauri Ojansivu 3d0e91f80e v4.23 2020-08-13 17:44:43 +03:00
Lauri Ojansivu 533857c961 Update ChangeLog. 2020-08-13 17:39:05 +03:00
Lauri Ojansivu 83bc176ebf Update translations. 2020-08-13 17:35:46 +03:00
Lauri Ojansivu 910f0cecbe Update vulnerable dependency elliptic that is dependency of meteor-node-stubs that is dependency of Wekan.
Thanks to filipenevola, neeldug, L25inux and xet7.

Closes #3234
2020-08-13 17:32:27 +03:00
Lauri Ojansivu 10f0c49007 Update translations. 2020-08-11 17:47:21 +03:00
Lauri Ojansivu ba2911a645 Update translations. 2020-08-10 19:12:26 +03:00
Lauri Ojansivu 07860bd4de Update translations. 2020-08-10 13:33:38 +03:00
Lauri Ojansivu 42bd03e333 Remove old code from rebuild-wekan.sh 2020-08-08 21:25:55 +03:00
Lauri Ojansivu 97f525fdbc Update dependencies. 2020-08-08 21:25:23 +03:00
Lauri Ojansivu 1050e04c10 Update translations. 2020-08-03 11:49:33 +03:00
Lauri Ojansivu 1534b22315 v4.22 2020-07-23 17:43:27 +03:00
Lauri Ojansivu bcec728c2e Update translations. 2020-07-23 17:36:05 +03:00
Lauri Ojansivu 6f503ca818 Upgrade to Node 12.18.3
Thanks to Node developers !
2020-07-23 17:32:08 +03:00
Lauri Ojansivu 1b927a9d3a Update ChangeLog. 2020-07-23 17:22:41 +03:00
Lauri Ojansivu 045b8a84a2 Hide CSV export until it's fixed in EdgeHTML compatible way.
Thanks to xet7 !
2020-07-23 17:16:02 +03:00
Lauri Ojansivu 1624fc82f7 Exports now work at #3173 at least for small boards. TODO: Fix EdgeHTML to work, before I can release this.
Thanks to xet7 !
2020-07-23 13:36:39 +03:00
Lauri Ojansivu 42d8773e36 Revert xss to previous compatible version.
Thanks to xet7 !
2020-07-23 12:32:57 +03:00
Lauri Ojansivu 15dff73b94 Update ChangeLog. 2020-07-23 11:53:38 +03:00
Lauri Ojansivu ec1d8f275f Fix detecting current IP address on rebuild-wekan.sh
Thanks to xet7 !
2020-07-23 11:47:37 +03:00
Lauri Ojansivu 68391a943b Try to fix Snap. TODO: Sometime migrate from Caddy v1 to Caddy v2.
Thanks to xet7 !
2020-07-22 14:45:03 +03:00
Lauri Ojansivu 9c48cc9ec0 v4.21 2020-07-21 22:06:09 +03:00
Lauri Ojansivu 41c06c1374 Update ChangeLog. 2020-07-21 21:20:11 +03:00
Lauri Ojansivu 2c6841210c Update translations. 2020-07-21 21:13:43 +03:00
Lauri Ojansivu eba8fb4c9c Merge pull request #3215 from gvespignani70/develop
changed edit_card and get_card_by_customfields
2020-07-21 21:03:00 +03:00
Unknown 95522ebcd9 changed edit_card and get_card_by_customfields
There was a bug in edit_card API: If I call API to edit listid and some fields It modifies only the listid. In addiction I've modified get_card_by_customfield to return full documents.
2020-07-21 17:36:46 +02:00
Unknown 8bf13f43e8 Merge remote-tracking branch 'myorigin/master' into develop 2020-07-21 16:13:56 +02:00
Unknown ca8f2a70a4 Merge remote-tracking branch 'origin/master' 2020-07-21 16:11:51 +02:00
Lauri Ojansivu f6e9f5a5e8 Fix typo. 2020-07-20 00:54:33 +03:00
Lauri Ojansivu be6d1044a0 v4.20 2020-07-20 00:21:03 +03:00
Lauri Ojansivu 52938b2f1c Update ChangeLog. 2020-07-20 00:16:23 +03:00
Lauri Ojansivu 116372e11e Update dependencies, part 2.
Thanks to developers of dependencies and xet7 !
2020-07-20 00:13:39 +03:00
Lauri Ojansivu 14cdb5bdf1 Update ChangeLog. 2020-07-19 23:13:22 +03:00
Lauri Ojansivu de28bf8569 Add missing Wekan logo sizes for PWAs and Apps.
Thanks to xet7 !
2020-07-19 23:11:00 +03:00
Lauri Ojansivu 419615bed4 Update dependencies.
Thanks to developers of dependencies and xet7 !
2020-07-19 23:07:17 +03:00
Lauri Ojansivu 3ee9b13b3b Update ChangeLog. 2020-07-19 22:47:43 +03:00
Lauri Ojansivu 0725ce3fb1 Update translations. 2020-07-19 22:44:32 +03:00
Lauri Ojansivu eb7623e218 Merge pull request #3214 from NicoP-S/master
Change slug on card rename
2020-07-19 22:35:25 +03:00
Nico 19acd7861d Change slug on card rename 2020-07-19 19:57:23 +02:00
Lauri Ojansivu 282f0f91fe v4.19 2020-07-18 10:28:52 +03:00
Lauri Ojansivu b51094d5cd Update ChangeLog. 2020-07-18 10:16:03 +03:00
Lauri Ojansivu b9a4b0b51d Add support for EdgeHTML browser (Microsoft Legacy Edge, not based on Chromium) by removing incompatible csv-stringify package.
CSV export will be fixed later.

Thanks to xet7 !

Closes #3125
2020-07-18 10:08:59 +03:00
Lauri Ojansivu 1a49d25c90 Update translations. 2020-07-18 10:01:51 +03:00
Lauri Ojansivu f57ed2990f Update dependencies. 2020-07-18 09:54:37 +03:00
Lauri Ojansivu 87412ceb55 Merge branch 'master' of github.com:wekan/wekan 2020-07-18 09:52:08 +03:00
Lauri Ojansivu 87cb4598f7 Update dependencies.
Thanks to developers of dependencies and xet7 !
2020-07-18 09:51:27 +03:00
Lauri Ojansivu b35b9d8aa2 Merge pull request #3211 from Robert-Lebedeu/master
Checklist Item PUT API: boolean cast on isFinished
2020-07-18 09:51:10 +03:00
Lauri Ojansivu 6646d48ccb Merge pull request #3212 from wekan/dependabot/npm_and_yarn/lodash-4.17.19
Bump lodash from 4.17.15 to 4.17.19
2020-07-18 09:48:32 +03:00
dependabot[bot] 23ee93ca3d Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-18 04:28:59 +00:00
Robert Lebedeu 0911511d0c Checklist Item PUT API: boolean cast on isFinished 2020-07-17 16:24:27 +02:00
Lauri Ojansivu b7562a7085 v4.18 2020-07-10 19:28:43 +03:00
Lauri Ojansivu 16a793e672 Update ChangeLog. 2020-07-10 19:14:47 +03:00
Lauri Ojansivu 6e4407ed9c Upgrade to Node 12.18.2.
Thanks to Node developers and xet7 !
2020-07-10 19:11:46 +03:00
Lauri Ojansivu 05cd1247ab Update dependencies. 2020-07-10 19:04:46 +03:00
Lauri Ojansivu af240450d6 Update ChangeLog. 2020-07-10 19:01:51 +03:00
Lauri Ojansivu ba24c4e40c All logged in users are now allowed to reorder boards by dragging at All Boards page and Public Boards page.
Thanks to xet7 !

Fixes #3147
2020-07-10 18:56:26 +03:00
Lauri Ojansivu 2cbd7d83f9 Update ChangeLog. 2020-07-10 16:08:31 +03:00
Lauri Ojansivu 892008563b Update translations. 2020-07-10 16:08:03 +03:00
Lauri Ojansivu c7a40784e7 Merge pull request #3206 from salleman33/patch-2
Update users.js
2020-07-10 14:10:45 +03:00
Allemand c5e0832e00 Update users.js
issue #3099 : we have to delete the existing user, Account Service create it again
2020-07-10 10:06:39 +02:00
Lauri Ojansivu eb4219504d Update ChangeLog. 2020-06-29 06:15:08 -04:00
Lauri Ojansivu a5e5b44330 Merge pull request #3197 from Lua00808/fix-typo
Fix typo.
2020-06-29 06:11:47 -04:00
Lua00808 ee6852f8ea Fix typo. 2020-06-29 14:05:01 +09:00
Lauri Ojansivu 2575552e11 Update ChangeLog. 2020-06-28 06:44:56 -04:00
Lauri Ojansivu a77cf56fbd Fix running meteor for dev in rebuild-wekan.sh
Thanks to xet7 !
2020-06-28 06:42:05 -04:00
Lauri Ojansivu 07dfe33ed8 Merge branch 'master' of github.com:wekan/wekan 2020-06-28 05:55:45 -04:00
Lauri Ojansivu c8b21b2e17 Update translations. 2020-06-28 05:55:12 -04:00
Lauri Ojansivu 0be1c00fcc Fix start-wekan.bat
Thanks to xet7 !
2020-06-25 22:08:57 +03:00
Lauri Ojansivu 20edac091a Update translations. 2020-06-24 10:02:05 -04:00
Lauri Ojansivu 311c0d23a4 Add meteor ens3 Ethernet interface to rebuild-wekan.sh
Thanks to xet7 !
2020-06-24 10:00:53 -04:00
Lauri Ojansivu 032099cfbe v4.17 2020-06-18 02:33:01 +03:00
Lauri Ojansivu cd97cca7b8 Update ChangeLog. 2020-06-18 02:23:48 +03:00
Lauri Ojansivu 3f0fddf448 Merge branch 'marc1006-mobile_fix' 2020-06-18 02:18:58 +03:00
Lauri Ojansivu f1e103b082 Merge branch 'mobile_fix' of https://github.com/marc1006/wekan into marc1006-mobile_fix 2020-06-18 02:16:35 +03:00
Lauri Ojansivu afe00d02cd Add back checks about can user export CSV/TSV.
Thanks to marc1006 and xet7 !

Related #3173
2020-06-18 02:13:19 +03:00
Marc Hartmayer e21c078521 Fix activities view on mobile devices
Turns out that the sidebar is not available on mobile device therefore add
guards for this for now. This needs further investigation.
2020-06-18 01:07:56 +02:00
Lauri Ojansivu 5eb3784527 Revert users changes that were made at Wekan v4.16.
Thanks to xet7 !
2020-06-18 02:00:51 +03:00
Lauri Ojansivu 0ff1e63a5d v4.16 2020-06-17 21:59:54 +03:00
Lauri Ojansivu b11ae567c9 Upgrade to Node 12.18.1
Thanks to Node developers and xet7 !
2020-06-17 21:49:49 +03:00
Lauri Ojansivu e41256f935 Update ChangeLog. 2020-06-17 21:39:34 +03:00
Lauri Ojansivu b00db983c8 Try to prevent errors on CSV/TSV export.
Thanks to xet7 !

Related #3173
2020-06-17 21:37:01 +03:00
Lauri Ojansivu 3e4a8bca36 Update ChangeLog. 2020-06-17 20:31:01 +03:00
Lauri Ojansivu 54b4682258 Update translations. 2020-06-17 20:30:38 +03:00
Lauri Ojansivu bda49ed609 Add find-replace.sh script. 2020-06-17 20:28:22 +03:00
Lauri Ojansivu 39be9aa58d Update ChangeLog. 2020-06-17 20:25:22 +03:00
Lauri Ojansivu f245b6b7fa Update users.js etc with global search replace, to try to fix selecting correct user.
Thanks to xet7 !
2020-06-17 20:21:44 +03:00
Lauri Ojansivu ad87f9ff4e Merge pull request #3180 from salleman33/patch-1
Update users.js
2020-06-17 20:11:20 +03:00
Lauri Ojansivu 40abff4c1e Update ChangeLog. 2020-06-17 20:06:18 +03:00
Lauri Ojansivu 51ad89c3af Merge branch 'bentiss-fix-docs' 2020-06-17 20:02:28 +03:00
Allemand 768412ba7c remove useless comments 2020-06-17 19:00:40 +02:00
Allemand 670b964e6b update comments 2020-06-17 18:50:44 +02:00
Allemand f6c377eb9f update onCreateUser for oidc
correct bug : remove the wrong user !
2020-06-17 18:44:12 +02:00
Allemand 6d063a4f64 Update users.js
change method to find existing user
2020-06-17 18:07:22 +02:00
Benjamin Tissoires 207be3a363 cards: fix JSDoc
There was one missing comma, and the return type was then invalid
2020-06-17 05:40:38 +02:00
Benjamin Tissoires e1ffe943c8 openapi: also consider Object type as valid
Not sure if this will end up in a correct openapi file, but the docs
are correctly generated, so... meh.
2020-06-17 05:40:38 +02:00
Benjamin Tissoires 431d884e83 openapi: fix jsdoc/operation matching
The script was considering that the operation
associated to a jsdoc was declared on the line
just after the end of the jsdoc.

Turns out that adding new lines makes the code
clearer, but the python script was then ignoring
some jsdocs.

Change the behaviour to consider that the jsdoc
associated with an operation is the last one
declared after the end of the previous operation.

Fixes #3169
2020-06-17 05:15:39 +02:00
Lauri Ojansivu 983714cd72 v4.15 2020-06-16 20:40:12 +03:00
Lauri Ojansivu e6629779f7 Fix lint errors. 2020-06-16 20:34:28 +03:00
Lauri Ojansivu f1587753cb Fix lint errors. 2020-06-16 20:30:15 +03:00
Lauri Ojansivu a6d4f445fb v4.14 2020-06-16 20:08:20 +03:00
Lauri Ojansivu 8f34cdc279 Update dependencies. 2020-06-16 20:02:39 +03:00
Lauri Ojansivu 71cbac358b Update ChangeLog. 2020-06-16 19:59:33 +03:00
Lauri Ojansivu 3b2b108744 Fix: Unable to delete a custom field in a board.
Thanks to xet7 !

Fixes #2605
2020-06-16 19:55:56 +03:00
Lauri Ojansivu 100e2d4696 Update translations. 2020-06-16 18:17:18 +03:00
Lauri Ojansivu d42c4fb4f6 Update ChangeLog. 2020-06-16 18:14:35 +03:00
Lauri Ojansivu ed3e20dce5 Merge pull request #3174 from hgustafsson/master
Alignment and spacing of minicard labels
2020-06-16 18:13:37 +03:00
Lauri Ojansivu 82b0bd9ddb Merge pull request #3172 from marc1006/margin_fix
Remove top and bottom margin for hidden checklist items
2020-06-16 18:11:16 +03:00
Lauri Ojansivu ab6ec59bfb Merge branch 'fix-docs' of https://github.com/bentiss/wekan into bentiss-fix-docs 2020-06-16 18:07:53 +03:00
Lauri Ojansivu b144fab042 Update ChangeLog. 2020-06-16 18:05:26 +03:00
Lauri Ojansivu b1d1c7c45a Merge branch 'NicoP-S-master' 2020-06-16 18:03:20 +03:00
Lauri Ojansivu 2353f654de Merge branch 'master' of https://github.com/NicoP-S/wekan into NicoP-S-master 2020-06-16 17:58:36 +03:00
Marc Hartmayer 6e0ae161ad Remove top and bottom margin for hidden checklist items
Remove top and bottom margin for hidden checklist items, otherwise there could
be a gap between unchecked items if multiple hidden/checked items were between
them.
2020-06-14 21:34:19 +02:00
Henrik Gustafsson f1660e3b9f Alignment and spacing of minicard labels 2020-06-12 20:55:22 -04:00
Benjamin Tissoires 336a22555f openapi: fix jsdoc/operation matching
The script was considering that the operation
associated to a jsdoc was declared on the line
just after the end of the jsdoc.

Turns out that adding new lines makes the code
clearer, but the python script was then ignoring
some jsdocs.

Change the behaviour to consider that the jsdoc
associated with an operation is the last one
declared after the end of the previous operation.

Fixes #3169
2020-06-12 07:22:36 +02:00
Nico 06b548f12e edit_card start vote
better visibility what was voted
2020-06-11 19:52:44 +02:00
Lauri Ojansivu e4de42d487 Update translations. 2020-06-11 16:32:48 +03:00
Lauri Ojansivu 1617577378 Update ChangeLog. 2020-06-11 15:27:11 +03:00
Lauri Ojansivu 2add82efc5 Merge branch 'marc1006-fix' 2020-06-11 15:07:22 +03:00
Marc Hartmayer 06cacd7a5a Fix infinite scrolling for activities
This fixes the error:

Uncaught TypeError: activitiesComponent.loadNextPage is not a function
    at constructor.reachNextPeak (sidebar.js:63)
    at constructor.BlazeComponent.callFirstWith (peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:660)
    at constructor.scroll (infiniteScrolling.js:28)
    at peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:469
    at Object.Blaze._withCurrentView (view.js:533)
    at peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:468
    at Template._withTemplateInstanceFunc (template.js:490)
    at Blaze.View.eventMap.<computed> (peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:467)
    at view.js:879
    at Object.Blaze._withCurrentView (view.js:533)
2020-06-11 02:36:06 +02:00
Lauri Ojansivu 2d4f29cb5a Update ChangeLog. 2020-06-10 15:17:27 +03:00
Lauri Ojansivu 0b26250b46 Merge branch 'marc1006-checklists' 2020-06-10 14:54:00 +03:00
Lauri Ojansivu 09677d0bfa Merge branch 'checklists' of https://github.com/marc1006/wekan into marc1006-checklists 2020-06-10 14:48:42 +03:00
Marc Hartmayer aa4bdf7efb Strikethrough checked items 2020-06-09 23:41:01 +02:00
Marc Hartmayer 5755ece33e Add user option to hide finished checklist items
Add a user option to hide finished items in a checklist.
2020-06-09 23:40:44 +02:00
Lauri Ojansivu 2e93a975c4 v4.13 2020-06-09 22:41:46 +03:00
Lauri Ojansivu c4df69a05b Update ChangeLog. 2020-06-09 22:35:44 +03:00
Lauri Ojansivu a562ee4ba1 Update ChangeLog. 2020-06-09 22:34:18 +03:00
Lauri Ojansivu 781b384fe9 Update translations. 2020-06-09 22:29:18 +03:00
Lauri Ojansivu b6cc6c440d Update ChangeLog. 2020-06-09 22:27:34 +03:00
Lauri Ojansivu 20da91b774 Merge branch 'marc1006-issue_3164' 2020-06-09 22:24:00 +03:00
Lauri Ojansivu e530077fc5 Merge branch 'issue_3164' of https://github.com/marc1006/wekan into marc1006-issue_3164 2020-06-09 22:19:56 +03:00
Lauri Ojansivu 444fff47dc Update ChangeLog. 2020-06-09 22:16:00 +03:00
Marc Hartmayer 1aa8f502ae Fix condition whether a card is in list
This fixes the issues https://github.com/wekan/wekan/issues/3164,
https://github.com/wekan/wekan/issues/3162, and
https://github.com/wekan/wekan/issues/3163. While at it, remove now useless
comments.
2020-06-09 17:24:17 +02:00
Lauri Ojansivu 2a25318ba8 Merge pull request #3158 from jimmyjones2/patch-1
OpenShift template updates
2020-06-08 21:35:15 +03:00
Lauri Ojansivu 39a8524354 Merge pull request #3154 from marc1006/issue_2970
Copy the labels only if the target board is different
2020-06-08 21:34:56 +03:00
Lauri Ojansivu 573ca73b45 Use Docker Hub image, it did build faster this time. 2020-06-08 21:22:34 +03:00
Lauri Ojansivu 07d1a864d8 v4.12 2020-06-08 20:29:55 +03:00
Lauri Ojansivu ffcd380523 Update ChangeLog. 2020-06-08 20:24:40 +03:00
Lauri Ojansivu 55534b8b2e Fix typos. 2020-06-08 20:23:34 +03:00
Lauri Ojansivu ca23934bde Update ChangeLog. 2020-06-08 20:21:36 +03:00
Lauri Ojansivu 8a622ec7c3 Change to correct dependency version. 2020-06-08 19:20:27 +03:00
Lauri Ojansivu 39519d1cc9 1) Public board default view to Swimlane.
2) When changing Public board view (sets view cookie), also reload page so view is changed immediately.

Thanks to xet7 !
2020-06-08 19:12:17 +03:00
Lauri Ojansivu dcbf92b5b1 Update dependencies. 2020-06-08 17:55:43 +03:00
Lauri Ojansivu 7f6d500cbe Default view Swimlanes part 3: Change dropdown order to Swimlanes/Lists/Calendar.
Thanks to xet7 !
2020-06-08 17:53:03 +03:00
Lauri Ojansivu cb1e91fee8 Update minifier-css.
Thanks to xet7 !
2020-06-08 17:37:20 +03:00
Lauri Ojansivu 96494bacf5 Fix indent part 2.
Thanks to xet7 !
2020-06-08 17:35:25 +03:00
Lauri Ojansivu 99f68f36b0 Fix XSS.
Thanks to xet7 !
2020-06-08 17:34:45 +03:00
Lauri Ojansivu 61e682470c Default view Swimlanes part 2.
Thanks to xet7 !
2020-06-08 17:33:38 +03:00
Lauri Ojansivu 415e94d187 Fix indent.
Thanks to xet7 !
2020-06-08 17:32:17 +03:00
Lauri Ojansivu 6b22f96313 Use markdown in Swimlane titles.
Thanks to xet7 !
2020-06-08 17:30:26 +03:00
Lauri Ojansivu 8c3322f9a9 Change default view to Swimlanes.
Thanks to xet7 !
2020-06-08 17:28:53 +03:00
Lauri Ojansivu f935cf391e Update translations. 2020-06-08 17:26:00 +03:00
Marc Hartmayer fb44df9815 WIP: XSS fixes 2020-06-07 23:22:04 +02:00
Jimmy Jones e127895cf3 OpenShift template updates
* Remove status fields (this is created by Kubernetes at run time)
* The latest MongoDB by [default available with OpenShift is 3.6](https://github.com/openshift/origin/blob/master/examples/image-streams/image-streams-rhel7.json#L334)
* Change MongoDB service name to contain wekan to avoid potentially conflicting with other mongodb instances in the same project
2020-06-07 20:18:17 +01:00
Marc Hartmayer 1f85b25549 WIP: markdown 2020-06-06 11:26:56 +02:00
Marc Hartmayer df9851e2b7 Copy the labels only if the target board is different
This fixes the issues https://github.com/wekan/wekan/issues/2404 and
https://github.com/wekan/wekan/issues/2970 if the target board doesn't differ
from the source board.
2020-06-05 08:54:10 +02:00
Lauri Ojansivu 232bc746f4 Update ChangeLog. 2020-06-04 02:52:18 +03:00
Lauri Ojansivu ea448cd6c3 Update ChangeLog. 2020-06-04 02:49:38 +03:00
Lauri Ojansivu a7d12ddcaa v4.11 2020-06-04 01:41:17 +03:00
Lauri Ojansivu 420e9b23d2 Update ChangeLog. 2020-06-04 01:36:05 +03:00
Lauri Ojansivu cd49018306 Add fibers. 2020-06-04 01:34:49 +03:00
Lauri Ojansivu ddbf4f18ff Update translations. 2020-06-04 01:33:58 +03:00
Lauri Ojansivu 24104991b4 Update ChangeLog. 2020-06-04 01:31:53 +03:00
Lauri Ojansivu d9d451a206 Upgrade to Node v12.18.0
Thanks to Node developers and xet7 !
2020-06-04 01:25:35 +03:00
Lauri Ojansivu 1f07050979 Merge pull request #3149 from marc1006/issue_3148
Update `markedjs` package
2020-06-04 00:57:44 +03:00
Marc Hartmayer 399ddd2dab Update markedjs package
Update `markedjs` to commit
https://github.com/markedjs/marked/commit/7b3036f8c0440cfd003ce47dd6e1a92af0f5e822.
This fixes the issue https://github.com/wekan/wekan/issues/3148.
2020-06-03 23:10:25 +02:00
Lauri Ojansivu 2876ce633c Merge pull request #3146 from GitGramm/patch-1
Added dates & assignees to REST API calls #3145
2020-06-01 16:51:57 +03:00
GitGramm 333b9c811d Merge pull request #2 from GitGramm/GitGramm-patch-2
Added dates & assignees to REST API calls incl receivedAt
2020-06-01 15:45:20 +02:00
GitGramm 1df3d56f7c Added dates & assignees to REST API calls incl receivedAt
I have added the dates (received, start, due, end) and the assignees to the output of the REST API Calls.
2020-06-01 15:44:51 +02:00
GitGramm d2a7a82870 Added dates & assignees to REST API calls #3145
I have added the dates (stat, due, end) and the assignees to the output of the REST API Calls
2020-06-01 14:23:43 +02:00
Lauri Ojansivu 5e49006b6f Update ChangeLog. 2020-05-31 05:29:11 +03:00
Lauri Ojansivu f73ea218ee Add Calendar Month Event List view.
Thanks to xet7 !
2020-05-30 17:12:09 +03:00
Lauri Ojansivu 6ac3249272 v4.10 2020-05-30 08:41:48 +03:00
Lauri Ojansivu 784f960e8f Update ChangeLog. 2020-05-30 08:35:46 +03:00
Lauri Ojansivu 04db8d739e Update translations. 2020-05-30 08:29:32 +03:00
Lauri Ojansivu 7226afdc39 Remove fibers. 2020-05-30 08:25:12 +03:00
Lauri Ojansivu 446a81ddd0 Merge pull request #3140 from marc1006/2310
Fix Registration broken "Templates board id is required"
2020-05-30 08:22:47 +03:00
Marc Hartmayer 5fd167c182 REALLY, REALLY UGLY HACK 2020-05-29 23:42:19 +02:00
Marc Hartmayer 7cd57ee023 WIP 2020-05-29 22:29:42 +02:00
Lauri Ojansivu 07ab3b83b1 Update ChangeLog. 2020-05-29 21:40:53 +03:00
Lauri Ojansivu 3ade9d95a6 Upgrade to Node v12.17.0
Thanks to Node developers and xet7 !
2020-05-29 21:37:28 +03:00
Lauri Ojansivu 55c5f07026 Update ChangeLog. 2020-05-29 21:24:44 +03:00
Lauri Ojansivu b4ade0256b Merge pull request #3135 from marc1006/sendSMTPTestEmail
Fix email verification in `sendSMTPTestEmail`
2020-05-29 21:24:21 +03:00
Marc Hartmayer afcb8aa49b Fix email verification in sendSMTPTestEmail
Fixes: 6e088af3
2020-05-29 13:35:29 +02:00
Lauri Ojansivu a47ca598e7 Merge pull request #3131 from gvespignani70/feature/new-API-cardsByCustomField
Added an API to get the cards for a specific custom field value
2020-05-28 18:51:30 +03:00
Giacomo Vespignani c9a28db3ab Added an API to get the cards for a specific custom field value 2020-05-27 11:16:35 +02:00
Lauri Ojansivu 1cfb6eee4b v4.09 2020-05-27 02:12:42 +03:00
Lauri Ojansivu 6c68867efe Update translations. 2020-05-27 02:04:43 +03:00
Lauri Ojansivu 0ef84a0d5f Update ChangeLog. 2020-05-27 01:45:48 +03:00
Lauri Ojansivu e0f4758667 Merge pull request #3128 from brymut/fix-export-csv-vote
Fix vote export & export/import currency custom field to CSV/TSV
2020-05-27 01:43:08 +03:00
Bryan Mutai 8c149da9e9 Fix vote export to CSV/TSV & export currency custom field. 2020-05-27 01:23:31 +03:00
Lauri Ojansivu 18eafe2fec v4.08 2020-05-26 17:12:29 +03:00
Lauri Ojansivu 5ac636fdd4 Update translations. 2020-05-26 17:08:23 +03:00
Lauri Ojansivu 6db3474cdf Update ChangeLog. 2020-05-26 17:03:52 +03:00
Lauri Ojansivu 6a1bc167cf Add some changes to Modern theme.
Thanks to jeroenstoker and xet7 !

Related #3086
2020-05-26 17:00:46 +03:00
Lauri Ojansivu 191071d295 Update ChangeLog. 2020-05-26 12:59:28 +03:00
Lauri Ojansivu 3e4a9471ba Merge branch 'habenamare-currency-custom-field' 2020-05-26 12:54:14 +03:00
Lauri Ojansivu 9b68aa919a Update translations. 2020-05-26 12:53:43 +03:00
Haben Amare 8732e4b18f use Intl.NumberFormat to format currency 2020-05-25 22:05:06 +00:00
Haben Amare d26786a628 display formatted currency custom field on minicard 2020-05-25 22:02:51 +00:00
Haben Amare 54b9035eb2 add 'cardCustomField-currency' template 2020-05-25 22:02:51 +00:00
Haben Amare 3cf6ed916f add the 'currency' custom field type 2020-05-25 22:02:51 +00:00
Lauri Ojansivu 351d9d0c95 Fix typo that caused parse error. 2020-05-26 00:51:10 +03:00
Lauri Ojansivu c0923ed3cf v4.07 2020-05-26 00:38:29 +03:00
Lauri Ojansivu fc2eb2e935 Update ChangeLog. 2020-05-26 00:35:32 +03:00
Lauri Ojansivu 88844034fc Merge pull request #3122 from marc1006/default_value
Fix default value of `sort`
2020-05-26 00:29:33 +03:00
Marc Hartmayer 3d33ea911a Fix default value of sort
The default has to be a numeric value.
2020-05-25 23:26:07 +02:00
Lauri Ojansivu bb08e40ea5 Merge pull request #3121 from marc1006/api_gen
Fix Python API generation
2020-05-26 00:13:00 +03:00
Marc Hartmayer c4879de4b1 Fix Python API generation 2020-05-25 23:10:01 +02:00
Lauri Ojansivu fd0afd7b05 Merge pull request #3120 from marc1006/issue_3119
Fix move selection
2020-05-25 23:50:51 +03:00
Marc Hartmayer 5c02850bc1 Fix move selection
This fixes https://github.com/wekan/wekan/issues/3119.
2020-05-25 22:48:57 +02:00
Lauri Ojansivu 1f450df1af v4.06 2020-05-25 23:22:35 +03:00
Lauri Ojansivu e933890730 Update translations. 2020-05-25 23:19:25 +03:00
Lauri Ojansivu 8eafa1ac66 Fix Card export CSV, check for vote undefined.
Thanks to xet7 !
2020-05-25 22:59:52 +03:00
Lauri Ojansivu 858bb35612 v4.05 2020-05-25 21:46:08 +03:00
Lauri Ojansivu f9018fc3a8 Sorry marc1006, I had to revert deepcode.ai arrow function fixes because
Python API docs generator does not work all when code has arrow functions.

Thanks to xet7 !
2020-05-25 21:33:38 +03:00
Lauri Ojansivu 252c4b19f9 Update ChangeLog. 2020-05-25 18:04:51 +03:00
Lauri Ojansivu 05349a5deb Prettifier fixes. 2020-05-25 18:04:32 +03:00
Lauri Ojansivu d52affe658 Move In Progress ostrio-files changes to separate branch, and revert ostrio-files changes, so that:
- Export to CSV/TSV with custom fields works
- Attachments are not exported to disk
- It is possible to build arm64/s390x versions again.

Thanks to xet7 !

Related #3110
2020-05-25 17:54:51 +03:00
Lauri Ojansivu 23dcd084a4 Update translations. 2020-05-24 19:29:38 +03:00
Lauri Ojansivu a853189486 Update ChangeLog. 2020-05-24 19:10:29 +03:00
Lauri Ojansivu 82d0a3df85 Merge branch 'brymut-import-export-custom-fields' 2020-05-24 19:06:38 +03:00
Lauri Ojansivu ef189477dd Merge branch 'import-export-custom-fields' of https://github.com/brymut/wekan into
brymut-import-export-custom-fields
2020-05-24 18:59:46 +03:00
Lauri Ojansivu 4bcc795778 Update ChangeLog. 2020-05-24 18:57:43 +03:00
Lauri Ojansivu 01346152b5 Merge pull request #3112 from marc1006/deepcode
Some fixes suggested by deepcode.ai
2020-05-24 18:56:36 +03:00
Lauri Ojansivu 5b7b5b3e7e Update ChangeLog. 2020-05-24 18:51:24 +03:00
Lauri Ojansivu 2df29324e6 Merge branch 'marc1006-minor_fixes' 2020-05-24 18:51:12 +03:00
Bryan Mutai 51f52fee23 enable exporting and importing custom fields. 2020-05-24 17:48:49 +03:00
Marc Hartmayer 6e088af3d1 Fix email verification in sendSMTPTestEmail
Found by deepcode.ai.
2020-05-24 13:19:24 +02:00
Marc Hartmayer fc9f0d8392 Sort callback should return 0 if values are equal
Fixes:
"The callback [:381] provided to sort [:381] should return 0 if the compared values are equal."
2020-05-24 13:19:24 +02:00
Marc Hartmayer cfa2bbd3d4 Fix false positive found by deepcode.ai 2020-05-24 13:19:24 +02:00
Marc Hartmayer 52d633ca69 Use on instead of bind
Suggested by deepcode.ai.
2020-05-24 12:46:39 +02:00
Marc Hartmayer b2fee6a6c1 Use an arrow function inside forEach() instead of an anonymous function
Suggested by deepcode.ai.
2020-05-24 12:44:14 +02:00
Marc Hartmayer 66d35a1528 Fix minicard cover functionality
Otherwise, if `this.coverId` is undefined then `Attachments.findOne()` would
return any attachment.
2020-05-24 11:55:44 +02:00
Marc Hartmayer b7105d7b57 Fix error link not available
Fixes:

Exception in template helper: TypeError: Cannot read property 'link' of undefined
    at constructor.attachmentLink (http://192.168.178.2:8080/app/app.js?hash=c0f961362c1318d650abaafcaaa6f6a77c8d11c8:3935:29)
    at http://192.168.178.2:8080/packages/blaze.js?hash=a20deb597f76789e171a9ee2b2e37d73fbb7ecda:1566:16
    at http://192.168.178.2:8080/packages/peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:395:66
    at Function.Template._withTemplateInstanceFunc (http://192.168.178.2:8080/packages/blaze.js?hash=a20deb597f76789e171a9ee2b2e37d73fbb7ecda:3575:14)
    at http://192.168.178.2:8080/packages/peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:394:27
    at Spacebars.call (http://192.168.178.2:8080/packages/spacebars.js?hash=6f2be25813c793c0b363a6a91ebb029723f294ec:169:51)
    at Spacebars.mustacheImpl (http://192.168.178.2:8080/packages/spacebars.js?hash=6f2be25813c793c0b363a6a91ebb029723f294ec:106:25)
    at Object.Spacebars.mustache (http://192.168.178.2:8080/packages/spacebars.js?hash=6f2be25813c793c0b363a6a91ebb029723f294ec:110:39)
    at Blaze.View._render (http://192.168.178.2:8080/app/app.js?hash=c0f961362c1318d650abaafcaaa6f6a77c8d11c8:3328:42)
    at Blaze.View.doRender (http://192.168.178.2:8080/packages/blaze.js?hash=a20deb597f76789e171a9ee2b2e37d73fbb7ecda:1925:25)
2020-05-24 11:31:25 +02:00
Marc Hartmayer d5fbd50b76 Make scrollParentContainer() more robust as it's used in a timeout callback
Example exception:

Exception in setTimeout callback: TypeError: Cannot read property 'parentComponent' of null
at constructor.scrollParentContainer (cardDetails.js:77)
at cardDetails.js:190
at Meteor.EnvironmentVariable.EVp.withValue (meteor.js?hash=857dafb4b9dff17e29ed8498a22ea5b1a3d6b41d:1207)
at meteor.js?hash=857dafb4b9dff17e29ed8498a22ea5b1a3d6b41d:588
at meteor.js?hash=857dafb4b9dff17e29ed8498a22ea5b1a3d6b41d:1234

Probably there is a better fix for this.
2020-05-24 11:28:05 +02:00
Lauri Ojansivu 06515559a6 Update translations. 2020-05-24 09:12:01 +03:00
Lauri Ojansivu c61a126c8b Add default attachments store path /var/snap/wekan/common/uploads
where attachments will be stored.
2020-05-24 09:03:50 +03:00
Lauri Ojansivu b737adfcdf Try to fix Snap. 2020-05-24 07:24:44 +03:00
Lauri Ojansivu 3b44acd87c Update packages. 2020-05-24 06:54:48 +03:00
Lauri Ojansivu 6fad68b9b9 Try to fix Snap. 2020-05-24 05:43:50 +03:00
Lauri Ojansivu b05f8e5251 Update translations. 2020-05-24 04:24:04 +03:00
Lauri Ojansivu 31c2afb072 Merge branch 'feature-meteor-files' 2020-05-24 04:18:52 +03:00
Lauri Ojansivu 863f0fc5db v4.04 2020-05-24 03:46:20 +03:00
Lauri Ojansivu 055b528532 Merge branch 'lib-change' of https://github.com/PDIS/wekan into
PDIS-lib-change
2020-05-24 03:13:53 +03:00
Lauri Ojansivu fda392e662 Update translations. 2020-05-24 02:45:09 +03:00
Lauri Ojansivu e5f9d0a4dd Update ChangeLog. 2020-05-24 02:37:24 +03:00
Lauri Ojansivu 3f16bf6054 Merge pull request #3109 from marc1006/issue_3107
Set '*' as default value for swimlane and list name in card move action
2020-05-24 02:13:55 +03:00
Lauri Ojansivu 6774b9e905 Update ChangeLog. 2020-05-24 02:11:23 +03:00
Lauri Ojansivu 00a38b36a4 Merge pull request #3108 from marc1006/issue_2757
Change the swimlaneid of a card only if a new target swimlaneid is se…
2020-05-24 01:56:58 +03:00
Lauri Ojansivu de365ad62a Merge branch 'master' of https://github.com/helioguardabaxo/wekan 2020-05-24 01:46:12 +03:00
Lauri Ojansivu fe631ff75b Update ChangeLog. 2020-05-24 01:16:42 +03:00
Lauri Ojansivu eed649fbe6 Merge branch 'Lewiscowles1986-feature-export-to-html-wip' 2020-05-24 01:13:07 +03:00
Lauri Ojansivu 8ddbc622db Merge branch 'feature-export-to-html-wip' of
https://github.com/Lewiscowles1986/wekan into
Lewiscowles1986-feature-export-to-html-wip
2020-05-24 00:55:32 +03:00
Marc Hartmayer 24b21d23ba Set '*' as default value for swimlane and list name in card move action
This is the same default as `Utils.getTriggerActionDesc` has. This commit fixes
https://github.com/wekan/wekan/issues/3107.
2020-05-23 19:37:23 +02:00
Marc Hartmayer 64fa02cdf5 Change the swimlaneid of a card only if a new target swimlaneid is selected
Fixes the issue https://github.com/wekan/wekan/issues/2757. While at it, fix the
same issue also for multi selection.
2020-05-23 17:35:22 +02:00
helioguardabaxo 3b50b2c59f Added Modern theme with Poppins font 2020-05-22 18:38:50 -03:00
Romulus Urakagi Tsai 921460db40 Fix export attachments (not tested) 2020-05-22 14:59:56 +08:00
Romulus Urakagi Tsai 4156073b1a Fix translation error 2020-05-22 14:53:10 +08:00
Romulus Urakagi Tsai af7c74b2d3 Merge branch 'lib-change' of https://github.com/PDIS/wekan into lib-change 2020-05-20 15:12:55 +08:00
Romulus Urakagi Tsai 4064f3f406 Fix migrated attachment not readable bug
Remove reduandant files
2020-05-20 15:11:22 +08:00
Lauri Ojansivu 94e47401cb Update ChangeLog. 2020-05-20 02:30:46 +03:00
Lewis Cowles 5ef83ab236 Export Board to Zip file
* Extracts Card covers
* Labels
* Re-works some CSS & HTML
* Produces deployable assets (minus WebFonts)
2020-05-18 11:06:18 +01:00
Lauri Ojansivu c22eaa26cd Update translations. 2020-05-17 03:19:30 +03:00
Lauri Ojansivu 060b9acd86 Update ChangeLog. 2020-05-17 01:08:50 +03:00
Lauri Ojansivu 213b7b4819 Merge branch 'helioguardabaxo-master' 2020-05-17 00:52:21 +03:00
helioguardabaxo 7a576f9ae4 Added natural theme 2020-05-16 18:07:38 -03:00
Lauri Ojansivu 62f06a792f v4.03 2020-05-16 03:42:57 +03:00
Lauri Ojansivu 1ac11d92ba Try to fix Sandstorm Export menu.
Thanks to xet7.
2020-05-15 20:37:30 -04:00
Lauri Ojansivu 0c299e3225 Update ChangeLog. 2020-05-16 03:33:17 +03:00
Lauri Ojansivu bcc3a39c06 Merge branch 'CidKramer-master' 2020-05-16 03:28:11 +03:00
Lauri Ojansivu 13dffca055 Merge branch 'master' of https://github.com/CidKramer/wekan into CidKramer-master 2020-05-16 03:25:06 +03:00
Lauri Ojansivu 68ee88a041 Update ChangeLog. 2020-05-16 03:15:39 +03:00
Lauri Ojansivu 3718dd4d45 Fix lint. 2020-05-16 03:15:14 +03:00
Lauri Ojansivu 506a747fce Update translations. 2020-05-16 03:12:07 +03:00
Lauri Ojansivu 98e255ccec Fix Can't Scroll on All Boards on mobile phone. Added drag handles.
Thanks to xet7 !

Fixes #3096
2020-05-16 03:08:05 +03:00
Lauri Ojansivu 4879df0244 v4.02 2020-05-15 20:20:29 +03:00
Lauri Ojansivu 3bdeaaf552 Update translations. 2020-05-15 20:08:34 +03:00
CidKramer 45dea737bf Added clearblue theme 2020-05-15 14:17:37 +02:00
蔡仲明 (Romulus Urakagi Tsai) b80396f627 Purge unneeded require 2020-05-14 17:36:57 +08:00
Romulus Tsai 蔡仲明 0735981366 Merge branch 'master' into lib-change 2020-05-14 16:47:05 +08:00
Romulus Tsai 蔡仲明 5d8cca40d2 Merge branch 'master' of https://github.com/wekan/wekan 2020-05-14 16:45:21 +08:00
Romulus Urakagi Tsai 09ce3e464f Fix typo 2020-05-14 16:43:59 +08:00
Romulus Urakagi Tsai 4c5a2fbd1f Card clone OK 2020-05-14 14:55:54 +08:00
Lauri Ojansivu 9c6cd51ca7 Merge branch 'marc1006-fixes' 2020-05-14 01:06:46 +03:00
Lauri Ojansivu ea74a34d72 Add popup and changelog for linked card fixes. 2020-05-14 01:04:52 +03:00
Lauri Ojansivu 28cffc4328 Update translations. 2020-05-14 01:04:21 +03:00
Lauri Ojansivu 0a12319002 Merge branch 'fixes' of https://github.com/marc1006/wekan into marc1006-fixes 2020-05-14 00:22:22 +03:00
Lauri Ojansivu 2f33e3a76b Update ChangeLog. 2020-05-13 23:52:30 +03:00
Lauri Ojansivu 96507e6777 Add Spanish (Chile).
Thanks to isos.

Update translations.
2020-05-13 23:48:53 +03:00
Lauri Ojansivu e6d6b5322e Update translations. 2020-05-13 23:22:32 +03:00
Lauri Ojansivu b8d8081ded Update ChangeLog. 2020-05-13 22:06:39 +03:00
Lauri Ojansivu 0e428233f2 Merge pull request #3088 from krupupakku/master
Swimlanes ID missing in new boards
2020-05-13 22:02:24 +03:00
Lauri Ojansivu fdbc1b5c22 Update translations. 2020-05-13 19:37:37 +03:00
mvolo17 ea0239538a Swimlanes ID missing in new boards
when creating a new card in a new board there were and error on console. Result: card was not created. adding this parenthesis it works now.
Just for info. without this change if you want to create a card you need to change view to swimlines and go back to list view
2020-05-13 12:44:40 +02:00
Lauri Ojansivu aa084b7a7e Merge branch 'brymut-add-more-import-export-options' 2020-05-13 05:27:28 +03:00
Lauri Ojansivu 8a2509007c Fix syntax. Maybe sometime later think about translations.
Thanks to xet7 !
2020-05-13 05:25:04 +03:00
Lauri Ojansivu d0208b2112 Update translations. 2020-05-13 04:25:22 +03:00
Lauri Ojansivu 851bfa53e6 Merge branch 'add-more-import-export-options' of https://github.com/brymut/wekan into brymut-add-more-import-export-options 2020-05-13 03:28:02 +03:00
Lauri Ojansivu ba01ebe05d Update ChangeLog. 2020-05-13 03:20:32 +03:00
Lauri Ojansivu e6a2ffc592 Merge branch 'master' of github.com:wekan/wekan 2020-05-13 03:17:11 +03:00
Lauri Ojansivu f90ca00669 Update translations. 2020-05-13 03:16:58 +03:00
Lauri Ojansivu bbb65ae4e2 Merge pull request #3084 from wackazong/master-patch-1
Create card does not allow an empty member list
2020-05-13 03:16:37 +03:00
Lauri Ojansivu eece32d51b Merge branch 'NicoP-S-master' 2020-05-13 03:07:05 +03:00
Lauri Ojansivu 1865bdbee9 Update translations and fix syntax. 2020-05-13 03:06:04 +03:00
Lauri Ojansivu 85f254da38 Merge branch 'master' of https://github.com/NicoP-S/wekan into NicoP-S-master 2020-05-13 02:57:36 +03:00
Lauri Ojansivu 1fe7394d05 Update ChangeLog. 2020-05-13 02:52:33 +03:00
Lauri Ojansivu 6b9a7a3fc1 Merge branch 'krupupakku-master' 2020-05-13 02:51:04 +03:00
Lauri Ojansivu 8f33517142 Merge branch 'master' of https://github.com/krupupakku/wekan into krupupakku-master 2020-05-13 02:46:57 +03:00
Lauri Ojansivu 0a51ea753f Update ChangeLog. 2020-05-13 02:45:10 +03:00
Lauri Ojansivu 235bedab00 Merge branch 'helioguardabaxo-master' 2020-05-13 02:43:16 +03:00
Lauri Ojansivu 564e1919af Merge branch 'master' of https://github.com/helioguardabaxo/wekan into helioguardabaxo-master 2020-05-13 02:39:38 +03:00
Lauri Ojansivu 1c9dd7233e Update translations. 2020-05-12 21:31:42 +03:00
Lauri Ojansivu 6e7a58b204 Update ChangeLog. 2020-05-12 21:26:19 +03:00
Lauri Ojansivu 75bdd33fda Update dependencies.
Thanks to xet7 !
2020-05-12 21:21:22 +03:00
Lauri Ojansivu 5f915ef966 Add options to rebuild-wekan.sh to run Meteor in development mode
where after file change it rebuilds.

Thanks to xet7 !
2020-05-12 19:05:51 +03:00
Bryan Mutai a570c4a861 add: export board/cards/lists to CSV/TSV 2020-05-10 23:58:15 +03:00
wackazong a797abaa36 Create card does not allow an empty member list
When I create a card via the API I always have the authorId in members, even if I pass an empty string as member list. Workaround: I can empty the member list by passing an empty string in a PUT request. This pull request proposes to not add the authorId to the member list when creating a card and the member list is empty.
2020-05-08 18:55:37 +02:00
Marco Volo 2bb5a31fa4 avatar-image fix 2020-05-08 15:25:31 +02:00
Romulus Urakagi Tsai 012ca39a8d Attachment activities merging done 2020-05-08 11:50:43 +08:00
Romulus Tsai 蔡仲明 c3458855bd Merge branch 'master' into lib-change 2020-05-08 10:13:11 +08:00
Romulus Tsai 蔡仲明 cfcc73724f Merge branch 'master' of https://github.com/wekan/wekan 2020-05-08 09:35:11 +08:00
Romulus Urakagi Tsai 4448488767 Done attachments activities operating 2020-05-08 09:32:19 +08:00
Bryan Mutai 1742bcd9b1 add: import board/cards/lists using CSV/TSV 2020-05-07 01:31:59 +03:00
Romulus Urakagi Tsai 7dc0bbd7b2 Set correct storage location 2020-05-06 11:15:01 +08:00
Romulus Urakagi Tsai 269698ba78 Attachments download 2020-05-05 14:18:10 +08:00
Romulus Urakagi Tsai 0a1bfd37b3 Migrating attachments 2020-05-05 14:08:36 +08:00
Nico ec03bbe260 API add boards to json where user is member of 2020-05-03 01:29:28 +02:00
Nico 3cc0a93e0e Card vote options in new fork 2020-05-03 00:33:15 +02:00
helioguardabaxo 079867ff37 Add white-space:normal to copy-to-clipboard button in card details 2020-05-02 14:48:49 -03:00
Lauri Ojansivu 533bc045d0 Update translations. 2020-04-30 07:26:13 +03:00
Lauri Ojansivu b5773232d5 Remove extra file. 2020-04-30 07:09:58 +03:00
Lauri Ojansivu 3042d2ff9a Update ChangeLog. 2020-04-30 07:03:43 +03:00
Lauri Ojansivu 8d5adc0464 Install Wekan to mobile homescreen icon and use fullscreen PWA.
Docs at https://github.com/wekan/wekan/wiki/PWA

Thanks to xet7 !

Closes #2879
2020-04-30 06:54:48 +03:00
Marc Hartmayer 9cba640120 Fix typo 2020-04-30 01:59:57 +02:00
Marc Hartmayer b740381a72 Refuse to delete a card as long as there is link to it
This fixes https://github.com/wekan/wekan/issues/2785.
2020-04-30 01:59:44 +02:00
Marc Hartmayer 2691f033cb Fix creation of card links
Without this fix, orphaned card links are created and therefore this leads to
problems as described in https://github.com/wekan/wekan/issues/2785.
2020-04-30 01:59:04 +02:00
Lauri Ojansivu c7d4a90d5c Update ChangeLog. 2020-04-29 18:33:42 +03:00
Lauri Ojansivu 92dd6bbba2 Update ChangeLog. 2020-04-29 16:34:51 +03:00
Lauri Ojansivu e42adcaed0 Merge pull request #3066 from marc1006/shortcuts
Fix shortcuts list and support card shortcuts when hovering a card
2020-04-29 16:32:59 +03:00
Marc Hartmayer 301d96f392 Support card shortcuts when hovering a card 2020-04-29 15:17:43 +02:00
Marc Hartmayer 1c488cb8a7 Fix shortcuts mapping in the shortcuts list
Shorcuts are case-sensitive therefore let's fix the keys in the shortcuts list.
2020-04-29 15:14:56 +02:00
Lauri Ojansivu 9e33d8cbab Update ChangeLog 2020-04-28 23:56:51 +03:00
Lauri Ojansivu 4c3907bd41 Merge pull request #3061 from marc1006/fix
Fix getStartDayOfWeek once again :)
2020-04-28 23:53:24 +03:00
Marc Hartmayer 153d729544 Fix getStartDayOfWeek function
In case profile.startDayOfWeek is 0 it's evaluated to false and 1 is returned.
Let's fix this by differentiating between undefined and an actual value.

Fixes: 9ae20a3f51
2020-04-28 20:56:11 +02:00
Lauri Ojansivu 3d5abd60cc v4.01 2020-04-28 19:02:42 +03:00
Lauri Ojansivu 1d89e96dd1 Upgrade to Node v12.16.3
Thanks to Node developers and xet7 !
2020-04-28 18:58:01 +03:00
Lauri Ojansivu bc3696b64a Update translations. 2020-04-28 15:22:12 +03:00
Lauri Ojansivu f803520c76 Update ChangeLog. 2020-04-28 15:17:09 +03:00
Lauri Ojansivu 6afc9259f0 Smaller height for Add Board button.
Thanks to xet7 !
2020-04-28 15:14:10 +03:00
Lauri Ojansivu 47df8d6737 Update translations. 2020-04-28 03:57:28 +03:00
Lauri Ojansivu d2dfd9c3b9 Update ChangeLog. 2020-04-28 03:53:43 +03:00
Lauri Ojansivu 63f501c574 Merge pull request #3056 from marc1006/header_height_fix
Fix list header height when cards count is shown
2020-04-28 03:51:18 +03:00
Lauri Ojansivu 6aa0aa50dc Update ChangeLog. 2020-04-28 03:38:27 +03:00
Lauri Ojansivu 9ae20a3f51 Fix Cards and Users docs not generated because of syntax error and new Javascript syntax.
Wekan uses wekan/releases/generate-docs*.sh Python code to generate OpenAPI docs,
it did not show any errors while generating docs, only left out parts of API docs.

Thanks to pvcon13 and xet7 !
2020-04-28 03:24:18 +03:00
Lauri Ojansivu 280e66947e Fix Docker builds.
Thanks to xet7 !
2020-04-27 16:14:02 +03:00
Marc Hartmayer 9b9e3c9e0c Fix list header height when cards count is shown 2020-04-27 14:22:26 +02:00
Lauri Ojansivu 1696bd688e v4.00 2020-04-27 03:35:38 +03:00
Lauri Ojansivu 63ad79a784 Merge pull request #3052 from marc1006/360px
Make sure that the board header buttons fit into one line
2020-04-27 03:29:27 +03:00
Marc Hartmayer f7a0d15db7 Make sure that the board header buttons fit into one line
...even for devices with 360px width resolution.
2020-04-27 02:21:48 +02:00
Lauri Ojansivu 6a7cb809f4 v3.99 2020-04-27 03:20:36 +03:00
Lauri Ojansivu 3244c3c32b Update translations. 2020-04-27 03:12:24 +03:00
Lauri Ojansivu 09666585e2 Revert part 2, related https://github.com/wekan/wekan/pull/3048 2020-04-27 02:56:11 +03:00
Lauri Ojansivu ee106d1cb4 Revert In Progress additional vote features. Translations are not removed.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/3048
2020-04-27 02:54:40 +03:00
Lauri Ojansivu 8ef435c83e Update translations related to vote feature. Code variables not changed.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/3048
2020-04-27 02:37:33 +03:00
Lauri Ojansivu 3a74b88294 Update ChangeLog. 2020-04-27 02:27:28 +03:00
Lauri Ojansivu c5079096b5 Merge branch 'master' of github.com:wekan/wekan 2020-04-27 02:23:42 +03:00
Lauri Ojansivu 927e43ab3f Merge pull request #3051 from marc1006/3049
Reactivate the touch event fix for the boards list
2020-04-27 02:23:00 +03:00
Marc Hartmayer eddcb2260b Reactivate the touch event fix for the boards list
This fixes https://github.com/wekan/wekan/issues/3049.
2020-04-27 01:16:13 +02:00
Lauri Ojansivu ff73aa4566 Merge branch 'NicoP-S-master' 2020-04-26 17:18:41 +03:00
Nico de993a079d Remove old code 2020-04-26 02:44:14 +02:00
Nico 7bb0aa7488 Additional vote features 2020-04-26 02:41:26 +02:00
Nico fe7398faef Put checkbox and label in same row 2020-04-26 02:37:18 +02:00
NicoP-S 8e709c1b79 Merge pull request #6 from wekan/master
Update
2020-04-26 00:37:30 +02:00
Lauri Ojansivu 3908fe0ab8 v3.98 2020-04-25 16:44:45 +03:00
Lauri Ojansivu 5d2ff89e9b Update ChangeLog. 2020-04-25 15:26:46 +03:00
Lauri Ojansivu 7f38bc7b95 Merge pull request #3046 from marc1006/3041
Partially fixes https://github.com/wekan/wekan/issues/3041
2020-04-25 15:21:50 +03:00
Marc Hartmayer ed0c64a270 Allow words in title/description to be able to break and wrap onto the next line 2020-04-25 13:34:30 +02:00
Marc Hartmayer e63e7b1131 Allow variable height for board list items
This fixes https://github.com/wekan/wekan/issues/3041.
2020-04-25 13:34:30 +02:00
Lauri Ojansivu 3f7d9fd42c Update ChangeLog. 2020-04-25 14:23:29 +03:00
Lauri Ojansivu 867344f070 Update translations. 2020-04-25 14:19:26 +03:00
Lauri Ojansivu a84195179e Merge pull request #3045 from marc1006/mobile_followup
Follow-up for https://github.com/wekan/wekan/pull/3040
2020-04-25 14:15:58 +03:00
Marc Hartmayer f1b18d79cd Don't interpret dragging an element as a click
Remove `enableClickOnTouch` as this behavior is not intuitive.
2020-04-25 09:49:41 +02:00
Marc Hartmayer 6d1cdebfe2 Make it compatible with newer and older versions of jQuery sortable
While at it, fix comments and prettify it.
2020-04-25 09:49:10 +02:00
Lauri Ojansivu 7cf8487f57 Merge branch 'master' of github.com:wekan/wekan 2020-04-25 04:16:45 +03:00
Lauri Ojansivu 5403027c9d Update ChangeLog. 2020-04-25 04:16:29 +03:00
Lauri Ojansivu daf397a1ba Merge pull request #3044 from VictorioBerra/patch-1
Fix comment typo in docker-compose.yml
2020-04-25 04:11:07 +03:00
Lauri Ojansivu 6104c1711f Update translations. 2020-04-25 03:58:48 +03:00
Lauri Ojansivu db41e41d90 Update ChangeLog. 2020-04-25 03:53:16 +03:00
Lauri Ojansivu 1235363465 Fix Wekan not load at all in Firefox v.68 for Android.
Thanks to xet7 !

Closes #3021
2020-04-25 03:47:44 +03:00
Lauri Ojansivu 7263d7497f Merge branch 'marc1006-mobile' 2020-04-25 01:41:37 +03:00
Lauri Ojansivu 666186fee8 Merge branch 'mobile' of https://github.com/marc1006/wekan into marc1006-mobile 2020-04-25 01:41:04 +03:00
Victorio Berra 27d1b5acca Fix comment typo in docker-compose.yml
webbroser -> web browser.
2020-04-24 09:07:32 -05:00
Lauri Ojansivu 5eb5ca5752 Update translations. 2020-04-23 18:38:57 +03:00
Lauri Ojansivu 16d371b814 Update ChangeLog. 2020-04-23 14:21:06 +03:00
Lauri Ojansivu df9b4db49d Merge branch 'marc1006-one_apply' 2020-04-23 14:17:57 +03:00
Lauri Ojansivu 2e8e58004d Merge branch 'one_apply' of https://github.com/marc1006/wekan into marc1006-one_apply 2020-04-23 14:17:35 +03:00
Lauri Ojansivu a83aa6162b Update ChangeLog. 2020-04-23 14:16:27 +03:00
Lauri Ojansivu 07c915ccf0 Merge pull request #3038 from marc1006/fix
Fix getStartDayOfWeek function
2020-04-23 14:14:09 +03:00
Marc Hartmayer 405f176bbb Fix getStartDayOfWeek function
In case profile.startDayOfWeek is 0 it's evaluated to false and 1 is returned.
Let's fix this by differentiating between undefined and an actual value.
2020-04-23 10:40:53 +02:00
Marc Hartmayer 6476503137 Fix drag-and-drop and scrolling on mobile devices
Use drag handles on "miniscreens" whenever useful, this is especially useful on
mobile device. This should hopefully fix https://github.com/wekan/wekan/issues/2947.
While at it, simplify the condition

 Utils.isMiniScreen() ||
   (!Utils.isMiniScreen() && showDesktopDragHandles)

 to

  Utils.isMiniScreen() || showDesktopDragHandle
2020-04-23 03:02:03 +02:00
Marc Hartmayer 981ed546f1 Newer versions of jQuery sortable use uiSortable key
Newer versions of jQuery sortable use `uiSortable` as key to store the data.
Let's adapt the code. While at it, refactor the code.
2020-04-23 02:55:33 +02:00
Marc Hartmayer c1287248a6 Mobile device layout fix 2020-04-23 02:55:24 +02:00
Marc Hartmayer 52f884f2b1 Use only one 'Apply' button for applying the user settings 2020-04-23 00:20:16 +02:00
Lauri Ojansivu 4550e10fbe Revert Snap MongoDB changes.
Thanks to xet7 !
2020-04-22 22:43:20 +03:00
Lauri Ojansivu 2efe974195 Update ChangeLog. 2020-04-22 21:50:35 +03:00
Lauri Ojansivu 6b808dd74b Try to upgrade MongoDB version in Snap.
Thanks to xet7 !
2020-04-22 21:48:46 +03:00
Lauri Ojansivu 8a917e0efc Update ChangeLog. 2020-04-22 21:37:33 +03:00
Lauri Ojansivu d1f98d0c47 Upgrade to Meteor 1.10.2
Thanks to Meteor developers and xet7 !
2020-04-22 21:35:13 +03:00
Lauri Ojansivu 323de77a83 Update ChangeLog. 2020-04-22 21:29:53 +03:00
Lauri Ojansivu 738e7f9ebc Merge branch 'boeserwolf-feature-add-babel' 2020-04-22 21:26:06 +03:00
Lauri Ojansivu b5b4af73a9 Merge branch 'feature-add-babel' of https://github.com/boeserwolf/wekan into boeserwolf-feature-add-babel 2020-04-22 21:25:49 +03:00
Lauri Ojansivu ab1014b7d8 Update ChangeLog. 2020-04-22 21:24:13 +03:00
Lauri Ojansivu 12964aa742 Update translations. 2020-04-22 21:16:28 +03:00
Lauri Ojansivu e4b1106acd Update ChangeLog. 2020-04-22 21:07:49 +03:00
Lauri Ojansivu d0524532a4 Merge branch 'master' of github.com:wekan/wekan 2020-04-22 21:05:58 +03:00
Lauri Ojansivu 7de18eccea - Set Snap MongoDB compatibility to 4.2 according to Meteor ChangeLog.
Thanks to xet7 !
2020-04-22 21:05:34 +03:00
Lauri Ojansivu f9747bc908 - Set Snap MongoDB compatibility to 4.2.5 according to Meteor ChangeLog.
Thanks to xet7 !
2020-04-22 21:03:47 +03:00
Lauri Ojansivu 6fd827792a Update ChangeLog. 2020-04-22 21:03:01 +03:00
Lauri Ojansivu 9e95c06415 Fix lint errors in lint error fix.
Thanks to xet7 !
2020-04-22 21:00:31 +03:00
Lauri Ojansivu e7603298d7 Merge branch 'marc1006-week_start' 2020-04-22 20:36:28 +03:00
Marc Hartmayer 8e14459cff Implement option to change the first day of week in user settings
Implements #2535.
2020-04-22 19:16:05 +02:00
Marc Hartmayer 3ac5dba243 Set first day of the week to Monday 2020-04-22 19:12:34 +02:00
Lauri Ojansivu 9969c89b1c Update ChangeLog. 2020-04-22 20:09:07 +03:00
Lauri Ojansivu 5a5b19d4fc Merge pull request #3031 from marc1006/style_issues
Multiple lint issue fixes
2020-04-22 20:06:50 +03:00
Lauri Ojansivu 4d48fa4d95 Update ChangeLog. 2020-04-22 16:43:47 +03:00
boeserwolf 57545f66d2 Add babel to build chain and linter
Enables fancy Javascript language features like optional chaining,
for developer happiness.
2020-04-22 15:16:30 +02:00
Lauri Ojansivu 8586c843a4 Merge pull request #3030 from boeserwolf/master
Pre-fill the title of checklists (Trello-style)
2020-04-22 16:08:06 +03:00
Marc Hartmayer b2acc3ba45 Multiple lint issue fixes
Found by using the command `meteor npm run lint:eslint:fix`.
2020-04-21 18:15:29 +02:00
boeserwolf 9f0273aa44 Pre-fill the title of checklists (Trello-style) 2020-04-21 00:58:15 +03:00
Lauri Ojansivu 3407b0e65b Add links to FAQ. 2020-04-20 16:22:29 +03:00
Lauri Ojansivu 6cd92ab2c6 v3.97 2020-04-19 17:05:41 +03:00
Lauri Ojansivu e92ebe5151 Update ChangeLog. 2020-04-19 16:52:06 +03:00
Lauri Ojansivu 8cb838c0de Merge branch 'boeserwolf-feature-sortable-boards' 2020-04-19 16:31:12 +03:00
Lauri Ojansivu 6cae14d6e9 Merge branch 'feature-sortable-boards' of https://github.com/boeserwolf/wekan into boeserwolf-feature-sortable-boards 2020-04-19 16:30:27 +03:00
boeserwolf b42d8346cd Insert new boards at last position 2020-04-19 15:53:13 +03:00
boeserwolf 1a065ff351 Refactor variable names 2020-04-19 15:52:43 +03:00
boeserwolf 3565ff2700 Export sort field 2020-04-19 15:52:06 +03:00
boeserwolf e354715a9d Remove sorting by _id 2020-04-19 15:51:29 +03:00
Lauri Ojansivu e7002f417b Update translations. 2020-04-19 14:00:24 +03:00
boeserwolf ef5f38f431 Make boards sortable 2020-04-19 13:49:10 +03:00
boeserwolf b3efa71d13 Add move function to boards mutations 2020-04-19 13:49:10 +03:00
boeserwolf 10fcc19b7f Add sortDefault helper for sorting boards 2020-04-19 13:49:07 +03:00
Lauri Ojansivu 948f05fecb Update ChangeLog. 2020-04-19 12:23:29 +03:00
Lauri Ojansivu 927bb83813 Merge pull request #3025 from boeserwolf/master
Make linked card clickable
2020-04-19 12:14:48 +03:00
boeserwolf 9f396e9038 Add a migration to add a sort field to the boards model 2020-04-19 10:51:58 +03:00
boeserwolf 2400c91013 Add sort field to boards model 2020-04-19 10:48:44 +03:00
boeserwolf f583645744 Make linked card clickable 2020-04-19 10:33:41 +03:00
Lauri Ojansivu 42b3cff99f Update ChangeLog. 2020-04-17 22:14:09 +03:00
Lauri Ojansivu 960fe5163b Remove old warning from Sandstorm import board data loss, because bug has been already fixed.
Thanks to aputsiaq and xet7 !
2020-04-17 21:58:19 +03:00
Lauri Ojansivu 41665c079d Update ChangeLog. 2020-04-17 21:48:06 +03:00
Lauri Ojansivu 8a0defc988 Merge pull request #3024 from marc1006/card_layout_fix
Improve card layout on mobile devices
2020-04-17 21:38:50 +03:00
Marc Hartmayer d7e0350ecf Improve card layout on mobile devices 2020-04-17 19:49:43 +02:00
Lauri Ojansivu bf15fa988d Rename Dockerfile.amd64 back to Dockerfile, because automatic builds did not work.
Thanks to xet7 !
2020-04-17 18:34:41 +03:00
Lauri Ojansivu db2d59181c Update ChangeLog. 2020-04-17 10:21:41 +03:00
Lauri Ojansivu dcc9a0d498 Merge branch 'brokencode64-arm64-dockerfile' 2020-04-17 10:18:53 +03:00
Lauri Ojansivu 936dea591a Merge branch 'arm64-dockerfile' of https://github.com/brokencode64/wekan into brokencode64-arm64-dockerfile 2020-04-17 10:18:30 +03:00
Lauri Ojansivu cf7e5472ba Update translations. 2020-04-17 10:10:40 +03:00
Lauri Ojansivu 5c61119716 Update ChangeLog. 2020-04-17 10:08:45 +03:00
Lauri Ojansivu 3558d711ff Merge pull request #3020 from ckavili/master
oidc server is updated to work with OCP OAuth
2020-04-17 10:02:38 +03:00
thewoosterisroot 72c1c49da3 Adding dockerfiles for multi-arch builds and manifest. 2020-04-16 19:30:50 +02:00
Cansu Kavili 93f8ff946f updated with env and annotation parameters 2020-04-15 09:54:22 +02:00
Cansu Kavili 61d582ffd9 updated with env and annotation parameters 2020-04-15 09:52:34 +02:00
Cansu Kavili 60384be5ff add annotations if specified in values file 2020-04-15 09:50:30 +02:00
Cansu Kavili 8ac305778a Add env parameters if specified in values file 2020-04-15 09:50:07 +02:00
Lauri Ojansivu 5be93741ee Update ChangeLog. 2020-04-15 03:44:30 +03:00
Lauri Ojansivu c2f91baaf9 Merge pull request #3019 from devinsm/mobile-friendly-checklist
Allows for use of checklist on mobile
2020-04-15 03:40:14 +03:00
Devin McAllester 9df5c0e2de Allows for use of checklist on mobile 2020-04-14 17:05:58 -07:00
Lauri Ojansivu f1a9e30956 v3.96 2020-04-15 00:05:48 +03:00
Lauri Ojansivu 4b202aaa08 Update ChangeLog. 2020-04-14 23:43:38 +03:00
Lauri Ojansivu 5ef1a92366 Update translations. 2020-04-14 23:41:22 +03:00
Lauri Ojansivu 1a836969e1 Remove 1.8.x files because Sandstorm now uses newest Meteor.
Thanks to xet7 !
2020-04-14 23:01:21 +03:00
Lauri Ojansivu 079b3da6ef Merge pull request #3015 from boeserwolf/master
Fix <p> margin in card labels
2020-04-14 21:23:41 +03:00
Lauri Ojansivu 13563e20e7 Merge pull request #3014 from salleman33/master
hide password auth with PASSWORD_LOGIN_ENABLED variable
2020-04-14 21:23:10 +03:00
Allemand 4f1330c777 Update docker-compose.yml 2020-04-14 09:12:39 +02:00
Allemand 94b558cf43 Update start-wekan.sh 2020-04-14 09:09:38 +02:00
Allemand e22e24d917 Update start-wekan.bat 2020-04-14 09:07:49 +02:00
Allemand 55545a52ca Update wekan-help 2020-04-14 09:05:14 +02:00
Allemand e0cb5a0c7a Update config 2020-04-14 09:01:43 +02:00
Allemand efd3faf9ef Update sandstorm-pkgdef.capnp 2020-04-14 08:58:47 +02:00
Allemand 2fd577d2c0 Update docker-compose.yml 2020-04-14 08:56:52 +02:00
Allemand 659e8418f7 Update Dockerfile 2020-04-14 08:51:59 +02:00
Allemand 18610d2fe6 Update settings.js 2020-04-14 08:49:47 +02:00
Allemand 1389ed0fce Update layouts.js 2020-04-14 08:48:51 +02:00
boeserwolf c39364af83 Fix margin in card labels 2020-04-13 23:47:00 +02:00
salleman 3e817257ef hide password auth with PASSWORD_LOGIN_ENABLED variable 2020-04-13 21:06:27 +02:00
Lauri Ojansivu c5f782976b Update Sandstorm release script for newest Meteor and Node 12.x 2020-04-13 10:55:00 -04:00
Lauri Ojansivu b841f798f8 Merge pull request #3013 from salleman33/master
debug isBoardAdmin on main page
2020-04-13 17:48:16 +03:00
salleman 35ae07e2a6 debug isBoardAdmin on main page 2020-04-13 15:46:29 +02:00
Cansu Kavili 2c792363bf ocp hack added 2020-04-13 14:03:19 +02:00
Lauri Ojansivu a68ecc079d Update translations. 2020-04-13 02:12:10 +03:00
Lauri Ojansivu b2d546579c Fix capnp workaround to work with newest Meteor and Node 12.x.
Thanks to kentonv !
2020-04-13 02:09:46 +03:00
Lauri Ojansivu 4bc6ad3b4c v3.95 2020-04-12 18:07:38 +03:00
Lauri Ojansivu 7f558fede0 Update translations. 2020-04-12 17:45:33 +03:00
Lauri Ojansivu 544bc1d6ad Merge branch 'master' of https://github.com/NicoP-S/wekan 2020-04-12 16:58:08 +03:00
Lauri Ojansivu 89d25f52fa Update ChangeLog. 2020-04-12 16:55:26 +03:00
Lauri Ojansivu 2fd71d5be8 Merge pull request #3009 from juniormendonca/juniormendonca/gitpod-setup
Add gitpod config
2020-04-12 16:53:32 +03:00
Lauri Ojansivu dc643f3d43 Merge pull request #3010 from jtbairdsr/master
fix error in notifications cleanup cron
2020-04-12 16:50:19 +03:00
Lauri Ojansivu 4469b12203 Merge pull request #3012 from boeserwolf/master
Fix styling issue in notifications drawer
2020-04-12 16:42:09 +03:00
boeserwolf 9cacaafb8f Fix styling issue in notifications drawer
The header of the notification drawer had a margin to the
right side in Google Chrome caused by overflow: scroll on
the #notifications-drawer element.
2020-04-12 11:57:22 +02:00
Jonathan Baird 269382869e fix error in notifications cleanup cron 2020-04-11 17:28:15 -06:00
Júnior Mendonça 8648e32108 Add gitpod config
this commit adds support for Gitpod.io, a free automated
dev environment that makes contributing and generally working on GitHub
projects much easier. It allows anyone to start a ready-to-code dev
environment for any branch, issue and pull request with a single click.
2020-04-11 23:27:59 +00:00
Nico edf52bc438 Public boards overview 2020-04-12 00:56:35 +02:00
Lauri Ojansivu 58ce859368 v3.94 2020-04-12 00:01:07 +03:00
Lauri Ojansivu e23aacedb3 Update translations. 2020-04-11 22:38:24 +03:00
Lauri Ojansivu 7f02990626 Update ChangeLog. 2020-04-11 22:25:25 +03:00
Lauri Ojansivu c86155f1aa Update ChangeLog. 2020-04-10 12:22:47 +03:00
Lauri Ojansivu 3fae5355d4 Add robots.txt disallow all.
Thanks to xet7 !

Related #3001
2020-04-10 12:19:18 +03:00
Lauri Ojansivu 20e88159ae Update translations. 2020-04-10 12:14:58 +03:00
Lauri Ojansivu a81921382a Merge pull request #3006 from NicoP-S/master
Public vote
2020-04-10 12:05:10 +03:00
Nico 8f28a409c7 Public vote 2020-04-10 01:46:36 +02:00
Lauri Ojansivu 7566f05b97 v3.93 2020-04-09 23:00:00 +03:00
Lauri Ojansivu 268d7fcb32 Upgrade Node to 12.16.2, part 2.
Thanks to Node developers and xet7 !
2020-04-09 22:53:04 +03:00
Lauri Ojansivu 70edd44a01 Update ChangeLog. 2020-04-09 22:50:00 +03:00
Lauri Ojansivu 6db717b9b3 Upgrade to Node v12.16.2
Thanks to Node developers and xet7 !
2020-04-09 22:47:11 +03:00
Lauri Ojansivu f389fd95fb Update translations. 2020-04-09 22:37:36 +03:00
Lauri Ojansivu 363bcab98b Update ChangeLog. 2020-04-09 22:30:31 +03:00
Lauri Ojansivu c4a7e53661 Merge pull request #3005 from jtbairdsr/master
fix bug that prevents editing or deleting comments
2020-04-09 22:30:02 +03:00
Lauri Ojansivu c6afe8d007 Merge pull request #3004 from slvrpdr/master
When adding a user to a board that has subtasks, also add user to the subtask board
2020-04-09 22:26:34 +03:00
Lauri Ojansivu 93eccffd44 Merge pull request #3000 from NicoP-S/master
Trello vote import & hide export button if with_api is disabled
2020-04-09 22:21:43 +03:00
Jonathan Baird fe66169415 fix bug that prevents editing or deleting comments 2020-04-09 12:46:24 -06:00
Pedro Sousa 6ced47aa8c When adding a user to a board that has subtasks, also add user to the subtask board 2020-04-09 19:10:50 +01:00
Nico e661d03e8d Add vote import from Trello 2020-04-09 02:00:15 +02:00
Nico f09219cbfd Remove export button if WITH_API is not enabled
#2938
https://github.com/wekan/wekan/issues/2938#issuecomment-589782402
2020-04-09 01:55:01 +02:00
NicoP-S 7c25542976 Merge pull request #5 from wekan/master
Update
2020-04-08 23:22:49 +02:00
Lauri Ojansivu 121686a928 v3.92 2020-04-08 23:51:38 +03:00
Lauri Ojansivu 3563e0145d Update translations. 2020-04-08 23:41:13 +03:00
Lauri Ojansivu c630714245 Update ChangeLog. 2020-04-08 23:23:45 +03:00
Lauri Ojansivu 5ebb47cb0e Add setting default NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE=2
to all Wekan platforms https://github.com/wekan/wekan/pull/2998

Thanks to xet7 !
2020-04-08 23:16:48 +03:00
Lauri Ojansivu 115701fa65 Merge branch 'jtbairdsr-master' 2020-04-08 22:29:15 +03:00
Jonathan Baird a182dde11f add a "remove all read" button to notification menu 2020-04-08 13:14:29 -06:00
Jonathan Baird 1e20e2601f add a scheduled notification cleanup job 2020-04-08 11:54:00 -06:00
Jonathan Baird 4d066b1f30 stop notifying users about their own behavior 2020-04-08 11:54:00 -06:00
Lauri Ojansivu 7856692946 v3.91 2020-04-08 20:37:43 +03:00
Lauri Ojansivu 7e7c8fd001 Update translations. 2020-04-08 20:29:31 +03:00
Lauri Ojansivu feb602ecd4 Update translations. 2020-04-08 19:59:23 +03:00
Lauri Ojansivu 6ed26e373a Update ChangeLog. 2020-04-08 19:54:12 +03:00
Lauri Ojansivu 4fba0fb1a1 Clarify translation. 2020-04-08 19:43:25 +03:00
Lauri Ojansivu 968ae122b0 Fix typos. 2020-04-08 19:38:30 +03:00
Lauri Ojansivu 06c32cb497 Update translations. 2020-04-08 19:37:41 +03:00
Lauri Ojansivu d2a4925cae Merge branch 'NicoP-S-master' 2020-04-08 19:17:00 +03:00
Lauri Ojansivu 9c97c301bd Merge branch 'master' of https://github.com/NicoP-S/wekan into NicoP-S-master 2020-04-08 19:15:05 +03:00
Lauri Ojansivu d4a91d30ff Update ChangeLog. 2020-04-08 19:14:13 +03:00
Lauri Ojansivu 6a56a495ad Update translations. 2020-04-08 18:47:17 +03:00
Lauri Ojansivu 3330aff12c Merge branch 'daniel-eder-feature/filter-assignee' 2020-04-08 18:39:32 +03:00
Lauri Ojansivu 43bdd56a41 Merge branch 'feature/filter-assignee' of https://github.com/daniel-eder/wekan into daniel-eder-feature/filter-assignee 2020-04-08 18:39:09 +03:00
Lauri Ojansivu a602f4b9ec Update ChangeLog. 2020-04-08 18:38:02 +03:00
Lauri Ojansivu 053e47173f Merge pull request #2996 from ckavili/master
Route template added to helm chart
2020-04-08 18:30:51 +03:00
Daniel Eder fe285c62e1 Add filter option for assignee
Works exactly like member
2020-04-08 16:59:59 +03:00
Cansu Kavili a3d44b0774 README updated 2020-04-08 14:38:55 +02:00
Cansu Kavili 0e79bd25ed values file updated 2020-04-08 14:33:29 +02:00
Cansu Kavili 71f7a680b6 Openshift Route def added 2020-04-08 13:59:33 +02:00
Nico 411b8d3f56 Merge branch 'vote' 2020-04-07 20:43:55 +02:00
Nico 2bbc312ad0 Voteing feature 2020-04-07 20:43:35 +02:00
NicoP-S 14de17b667 Merge pull request #4 from wekan/master
Update
2020-04-07 20:20:41 +02:00
Stefan Maaßen fe7962e10a AD Simple Auth is working 2020-04-07 14:03:16 +02:00
Lauri Ojansivu 9083c341c1 Merge pull request #2990 from doggy8088/langzhtwfix
Correct zh-TW language name (the right way)
2020-04-07 13:03:21 +03:00
Will e0930c32a6 Correct zh-TW language name (the right way) 2020-04-07 09:43:23 +00:00
Lauri Ojansivu f438d04c42 v3.90 2020-04-06 16:25:12 +03:00
Lauri Ojansivu d798f6e3ef Update dependencies. 2020-04-06 15:46:59 +03:00
Lauri Ojansivu c96ca4e875 Update translations. 2020-04-06 15:37:09 +03:00
Lauri Ojansivu 8a71fe39c5 Update ChangeLog. 2020-04-06 15:35:19 +03:00
Lauri Ojansivu e4ec5c38b7 Merge branch 'doggy8088-patch-1' 2020-04-06 15:27:53 +03:00
Will 保哥 b849d4c2ba Update layouts.js 2020-04-06 18:16:17 +08:00
Lauri Ojansivu db9c895da8 v3.89 2020-04-05 01:20:09 +03:00
Lauri Ojansivu a938c386cf Update translations. 2020-04-05 01:06:49 +03:00
NicoP-S a376fb2fab Merge pull request #3 from wekan/master
Update
2020-04-04 23:14:32 +02:00
Lauri Ojansivu 06c2ff0904 Update ChangeLog. 2020-04-04 01:43:09 +03:00
Lauri Ojansivu 76e832c3a6 Merge branch 'daniel-eder-feature/subtask-use-parent-swimlane' 2020-04-04 01:36:43 +03:00
Lauri Ojansivu b7fd79aef0 Merge branch 'feature/subtask-use-parent-swimlane' of https://github.com/daniel-eder/wekan into daniel-eder-feature/subtask-use-parent-swimlane 2020-04-04 01:26:49 +03:00
Lauri Ojansivu 28a9ab7131 Update translations. 2020-04-04 01:19:47 +03:00
Lauri Ojansivu 8e0b1cc056 Merge branch 'slvrpdr-master' 2020-04-04 01:04:17 +03:00
Lauri Ojansivu b424b34cab Merge branch 'master' of https://github.com/slvrpdr/wekan into slvrpdr-master 2020-04-04 00:42:14 +03:00
Lauri Ojansivu 45a83da7be Update translations. 2020-04-04 00:37:23 +03:00
Pedro Sousa 6e86292b99 Search also a Card's Custom Fields 2020-04-03 16:23:48 +01:00
NicoP-S e47ff25d45 Merge pull request #2 from wekan/master
Merge Wekan
2020-04-02 20:43:36 +02:00
Daniel Eder 89fe030fa3 subtasks now use swimlane with title matching parent lane title
As discussed in #1953 this is required to handle two-board scenarios correctly.
2020-04-02 07:49:26 +02:00
Lauri Ojansivu 1e0b53eb9b v3.88 2020-04-02 02:34:02 +03:00
Lauri Ojansivu a5f2ae497a Update translations. 2020-04-02 02:05:25 +03:00
Lauri Ojansivu 6441ebec83 Update ChangeLog. 2020-04-02 01:34:27 +03:00
Lauri Ojansivu 7c609d402a Update translations. 2020-04-02 01:29:22 +03:00
Lauri Ojansivu e34f240c35 Merge branch 'jtbairdsr-master' 2020-04-02 01:09:35 +03:00
Jonathan Baird 8ea86ae0b9 fix error from notifications subscriptions 2020-04-01 15:04:12 -06:00
Jonathan Baird f4d0791c6c add correct i18n for notifications menu 2020-04-01 14:50:31 -06:00
Jonathan Baird fcb1def355 Merge upstream/master
* commit '56667112d7fd146a9847794207e9a2224b1115d7':
  Update ChangeLog.
  Minicard labels on the top and title on bottom.
  Update translations.
  Update translations.
  Add translations for Notification drawer like Trello.
  Add translations for Board Settings / Allow Rename Board/Swimlane/Card.
  Update ChangeLog.
  Fix start-wekan.sh MongoDB port to 27017.
  v3.87
  Update translations.
  Update ChangeLog.
  Improvements on card details visualization.
  Update ChangeLog.
  Move "Rules" from "Board View" to "Board Settings".
  Update ChangeLog.
  Fix richer editor submit did not clear edit area.
  Update ChangeLog.
  Fix Browser always reload the whole page when I change one of the card color. Fixed by making label colors and text again editable. Regression from [Wekan v3.86 2)](https://github.com/wekan/wekan/commit/b9099a8b7ea6f63c79bdcbb871cb993b2cb7e325).
2020-04-01 14:47:53 -06:00
Lauri Ojansivu 56667112d7 Update ChangeLog. 2020-04-01 19:42:26 +03:00
Lauri Ojansivu d0003a334f Minicard labels on the top and title on bottom.
Thanks to helioguardabaxo and xet7 !

Closes #2980
2020-04-01 19:39:02 +03:00
Lauri Ojansivu 35427063ff Update translations. 2020-04-01 17:11:02 +03:00
Lauri Ojansivu f5182e6328 Update translations. 2020-04-01 17:04:01 +03:00
Lauri Ojansivu 0c911694c8 Add translations for Notification drawer like Trello. 2020-04-01 16:51:54 +03:00
Lauri Ojansivu 2eed1ca0eb Add translations for Board Settings / Allow Rename Board/Swimlane/Card.
Thanks to xet7 !
2020-04-01 16:48:14 +03:00
Lauri Ojansivu 99e5293ef5 Update ChangeLog. 2020-04-01 00:37:26 +03:00
Lauri Ojansivu c60a092fc0 Fix start-wekan.sh MongoDB port to 27017.
Thanks to Keelan and xet7 !

Related #2979
2020-04-01 00:34:21 +03:00
Lauri Ojansivu b33f44e23f v3.87 2020-04-01 00:12:35 +03:00
Lauri Ojansivu a65e39563b Update translations. 2020-04-01 00:04:18 +03:00
Lauri Ojansivu 703efa5216 Update ChangeLog. 2020-04-01 00:01:15 +03:00
Lauri Ojansivu 6b902bdb36 Improvements on card details visualization.
Thanks to helioguardabaxo and xet7 !

Closes #2974
2020-03-31 23:56:37 +03:00
Lauri Ojansivu d599fc12ff Update ChangeLog. 2020-03-31 23:36:47 +03:00
Lauri Ojansivu e7d2343593 Move "Rules" from "Board View" to "Board Settings".
Thanks to helioguardabaxo and xet7 !

Closes #2973
2020-03-31 23:32:32 +03:00
Lauri Ojansivu c8ec5d5f62 Update ChangeLog. 2020-03-31 23:20:07 +03:00
Lauri Ojansivu 033d671047 Fix richer editor submit did not clear edit area.
Thanks to xet7 !
2020-03-31 23:17:58 +03:00
Lauri Ojansivu 6ef3f8a1c8 Update ChangeLog. 2020-03-31 17:05:02 +03:00
Lauri Ojansivu 3546d7aa02 Fix Browser always reload the whole page when I change one of the card color.
Fixed by making label colors and text again editable.
Regression from [Wekan v3.86 2)](https://github.com/wekan/wekan/commit/b9099a8b7ea6f63c79bdcbb871cb993b2cb7e325).

Thanks to javen9881 and xet7 !

Closes #2971
2020-03-31 16:56:32 +03:00
Jonathan Baird 9819c9f801 add a notification drawer like trello 2020-03-27 11:35:03 -06:00
NicoP-S 7fa9603f9d Merge pull request #1 from wekan/master
update
2020-03-26 21:17:17 +01:00
Daniel Eder c41c1e5293 subtasks now use parent task swimlane by default 2020-03-26 10:57:05 +01:00
Lauri Ojansivu 29d62440a5 Update ChangeLog. 2020-03-25 13:41:33 +02:00
Lauri Ojansivu 5bd0459cc2 Hide duplicate "Hide system messages" at Change Settings/Member Settings, because it's also on card slider.
Thanks to notohiro and xet7 !

Closes #2837
2020-03-25 13:35:54 +02:00
Lauri Ojansivu 8b118c1939 v3.86 2020-03-24 21:01:14 +02:00
Lauri Ojansivu d7a0ab3c15 Update translations. 2020-03-24 20:48:58 +02:00
Lauri Ojansivu 8609e0e82d Update ChangeLog. 2020-03-24 20:45:25 +02:00
Lauri Ojansivu b9099a8b7e 1) Fix Pasting text into a card is adding a line before and after
(and multiplies by pasting more) by changing paste "p" to "br".
2) Fixes to summernote and markdown comment editors, related
   to keeping them open when adding comments, having
   @member mention not close card, and disabling clicking of
   @member mention.

Thanks to xet7 !

Closes #2890
2020-03-24 20:39:49 +02:00
Lauri Ojansivu 87a81789d1 Update ChangeLog. 2020-03-24 11:10:15 +02:00
Lauri Ojansivu 12ab8fac5d Fix Rich editor can not be disabled, regression from changes yesterday at Wekan v3.85.
Thanks to uusijani, vjrj and xet7 !

Closes #2967,
closes #104
2020-03-24 11:04:04 +02:00
Lauri Ojansivu 10b09b2da1 Fix typo. 2020-03-24 02:01:08 +02:00
Lauri Ojansivu 7c5f4a3849 v3.85 2020-03-23 23:01:58 +02:00
Lauri Ojansivu ec71849d84 Update ChangeLog. 2020-03-23 22:49:28 +02:00
Lauri Ojansivu 482682e500 SECURITY VULNERABILITY FIX: Fix XSS bug reported today 4 hours ago by Cyb3rjunky.
Logged in users could run javascript in input fields.
This affects Wekan versions v3.12-v3.84.
In [Wekan v3.12](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v312-2019-08-09-wekan-release)
there was [changes for XSS filter to allow inserting images, videos etc
on comment WYSIWYG editor](https://github.com/wekan/wekan/pull/2593)
so features related to that are now removed.
After this fix, Javascript in input fields is not executed.

Thanks to Cyb3rjunky and xet7 !
2020-03-23 22:29:20 +02:00
Lauri Ojansivu 3a6303e5c2 Update translations. 2020-03-23 22:25:08 +02:00
Lauri Ojansivu 81635d9217 Revert: Fix Pasting text into a card is adding a line before and after
(and multiplies by pasting more) by disabling WYSIWYG comment editor
for everyone.

Thanks to xet7.

TODO later: Fix wysiwyg editor paste bug.

Opens #2890
2020-03-23 22:23:31 +02:00
Lauri Ojansivu e8f89a8c4c Update translations. 2020-03-20 14:03:11 +02:00
Lauri Ojansivu 393482315f Fix typo. 2020-03-20 14:02:29 +02:00
Lauri Ojansivu cb67af02d7 Update ChangeLog. 2020-03-20 13:57:44 +02:00
Lauri Ojansivu a064b8d643 Fix Pasting text into a card is adding a line before and after
(and multiplies by pasting more) by disabling WYSIWYG comment editor
for everyone.

Closes #2890
2020-03-20 13:52:27 +02:00
Lauri Ojansivu 556621e60e Meteor 1.8 only in use at Sandstorm. 2020-03-17 14:04:50 +02:00
Lauri Ojansivu 0f95a513bf Meteor 1.8 only in use at Sandstorm. 2020-03-17 14:02:43 +02:00
Lauri Ojansivu dce624486f Merge branch 'master' of github.com:wekan/wekan 2020-03-17 13:35:00 +02:00
Lauri Ojansivu 64e76af8de Fix snap syntax. 2020-03-17 13:34:34 +02:00
Lauri Ojansivu acf2ede94e Fix typo. 2020-03-16 10:11:20 -04:00
Lauri Ojansivu b3a7c4dc88 For Sandstorm version of Wekan, leep stylus in 1.1.0, because building v2 takes extra 52 minutes.
Thanks to zodern !
2020-03-16 10:01:28 -04:00
Lauri Ojansivu 8d83c641e3 v3.84 2020-03-16 14:04:18 +02:00
Lauri Ojansivu c1aa0047c6 Update ChangeLog. 2020-03-16 13:55:39 +02:00
Lauri Ojansivu 7af4fe75ba Update ChangeLog. 2020-03-16 13:53:12 +02:00
Lauri Ojansivu ea6baa5c2b Update minimist. 2020-03-16 13:42:29 +02:00
Lauri Ojansivu 8183b7bdaa Update prettier-eslint 2020-03-16 13:33:08 +02:00
Lauri Ojansivu 51514ae22c Update prettier-eslint 2020-03-16 13:29:44 +02:00
Lauri Ojansivu 14b8610837 Update ostrio:cookies 2020-03-16 13:24:39 +02:00
Lauri Ojansivu 369a29707b Update acorn. 2020-03-16 13:22:16 +02:00
Lauri Ojansivu ae240af323 Update translations. 2020-03-16 13:16:47 +02:00
Lauri Ojansivu 2a715ec6c6 Update ChangeLog. 2020-03-15 03:02:08 +02:00
Lauri Ojansivu fca4cdcebf Downgrade stylus to v1.1.0 to speed up building Wekan.
https://github.com/meteor/meteor/issues/10881#issuecomment-599152333

Thanks to zodern !
2020-03-15 02:49:53 +02:00
Lauri Ojansivu 49bbfef3ec Update dependencies. 2020-03-15 02:00:11 +02:00
Lauri Ojansivu f968109e73 Add profiling to build script. 2020-03-15 00:44:03 +02:00
Lauri Ojansivu c0349c1ff9 Update dependencies. 2020-03-15 00:06:09 +02:00
Lauri Ojansivu e009bcf06e Update dependencies. 2020-03-14 17:00:21 +02:00
Lauri Ojansivu 8aae812aa4 Merge pull request #2959 from daMihe/add-current-description-ldap-groups
Added some descriptions for ldap-group authentication
2020-03-14 16:59:37 +02:00
Michael Wodniok 0b8f1cabef Added some descriptions for ldap-group authentication 2020-03-14 15:38:19 +01:00
Lauri Ojansivu e80d3ac79a Update dependencies. 2020-03-14 14:30:59 +02:00
Lauri Ojansivu ed9ba169fe Update dependencies. 2020-03-14 14:08:48 +02:00
Lauri Ojansivu 4720a6fbc3 Fix to be valid JSON. 2020-03-14 14:07:15 +02:00
Lauri Ojansivu ad45f82e27 Update ChangeLog. 2020-03-14 13:21:44 +02:00
Lauri Ojansivu 2174936613 Update acorn. 2020-03-14 13:19:54 +02:00
Lauri Ojansivu a6d7388919 Update ChangeLog. 2020-03-14 13:09:29 +02:00
Lauri Ojansivu f4e2bc0d32 Update dependencies. 2020-03-14 13:06:17 +02:00
Lauri Ojansivu 2f13141907 Update dependencies. 2020-03-14 12:36:12 +02:00
Lauri Ojansivu 365eded5c4 Update ChangeLog. 2020-03-14 12:22:28 +02:00
Lauri Ojansivu ed365c3d41 Update translations. 2020-03-14 12:10:33 +02:00
Lauri Ojansivu e16c65babc Upgrade to Meteor 1.10.1 2020-03-14 12:05:48 +02:00
Lauri Ojansivu 6e0fa78022 Update markdown. 2020-03-14 12:03:34 +02:00
Lauri Ojansivu 06fb201d80 Update translations. 2020-03-11 08:48:11 +02:00
Lauri Ojansivu 62e5622523 Update ChangeLog. 2020-03-06 03:59:09 +02:00
Lauri Ojansivu 2b26bbe78a Fix: img tag did not allow width and height.
Removed swipebox from markdown editor img tag and
updated marked markdown to newest version.

Thanks to hradec and xet7 !

Closes #2956
2020-03-06 03:52:12 +02:00
Lauri Ojansivu a6d702d1ab Update ChangeLog. 2020-03-05 22:04:22 +02:00
Lauri Ojansivu aaecac0912 Mouse scroll part 2. 2020-03-05 22:02:52 +02:00
Lauri Ojansivu 08b35e1fe7 Fix typo. 2020-03-05 21:57:48 +02:00
Lauri Ojansivu 78cf4618d5 Update ChangeLog. 2020-03-05 21:56:44 +02:00
Lauri Ojansivu 9d13001b90 Add settings for mouse wheen scroll inertia and scroll amount.
For example:
  sudo snap set scrollinertia='200'
  sudo snap set scrollamount='200'

Thanks to danger89 and xet7 !

Related #2949
2020-03-05 21:51:03 +02:00
Lauri Ojansivu 965c3fb07f Update translations. 2020-03-05 21:09:33 +02:00
Lauri Ojansivu c43366b7ac Update ChangeLog. 2020-03-05 20:51:27 +02:00
Lauri Ojansivu 3a50556656 Merge pull request #2955 from benoitm76/master
Fix: Error when retrieve token from some OIDC due to not necessary sc…
2020-03-05 20:29:37 +02:00
Benoit MOUQUET b26e65c70c Fix: Error when retrieve token from some OIDC due to not necessary scope parameter 2020-03-05 12:52:46 +01:00
Romulus Urakagi Tsai 5899b9366c Change coagmano:stylus package to 1.1.0 since 2.0.0 building is super slow 2020-03-02 02:10:54 +00:00
Lauri Ojansivu 75073bbdb2 v3.83 2020-03-01 22:12:11 +02:00
Lauri Ojansivu 88573ad2cd Try to revert remaining of the following changes:
- Revert change made at Wekan v3.81, because building did not work: [Try to make Meteor build time shorter
  by excluding legacy and cordova. This was made possible by
  Meteor 1.10-rc.2](https://github.com/wekan/wekan/commit/0d3002f69d97e646fa7368bfdade4f78c51e9884).

Thanks to xet7.
2020-03-01 22:07:55 +02:00
Lauri Ojansivu 058180687a v3.82 2020-03-01 21:44:38 +02:00
Lauri Ojansivu 897506eeac v3.81 2020-03-01 21:30:43 +02:00
Lauri Ojansivu aac7c380c8 - Fix critical and moderate security vulnerabilities reported at 2020-02-26 with
responsible disclosure by [Dejan Zelic](https://twitter.com/dejandayoff),
  Justin Benjamin and others at [Offensive Security](https://twitter.com/offsectraining),
  that follow standard 90 days before public disclosure.
  Thanks to xet7.
- Fix webhook error that prevented some card etc deleting from web UI of board.
  Thanks to xet7.
- Add some more Font Awesome icons.
  Thanks to xet7.
- Remove autofocus from many form input boxes so that they would not cause warnings.
  Thanks to xet7.
2020-03-01 20:59:53 +02:00
Lauri Ojansivu fc35c234a7 Update translations. 2020-03-01 20:38:05 +02:00
Lauri Ojansivu 0d3002f69d Try to make Meteor build time shorter by excluding legacy and cordova.
Thanks to xet7 !
2020-03-01 20:33:23 +02:00
Lauri Ojansivu 7d920e938b Merge branch 'master' of github.com:wekan/wekan 2020-03-01 20:27:22 +02:00
Lauri Ojansivu 26b521e86e Upgrade Meteor to 1.10-rc.2 2020-03-01 20:26:29 +02:00
Lauri Ojansivu 83b042701f Merge pull request #2948 from NicoP-S/master
Make profile.initials available in publications
2020-02-28 23:11:03 +02:00
Nico 21b75edcdd Make profile.initials available in publications 2020-02-28 22:05:33 +01:00
Lauri Ojansivu 493d71a198 Update translations. 2020-02-23 22:45:43 +02:00
Lauri Ojansivu 27f9c6b925 Update translations. 2020-02-22 20:07:16 +02:00
Lauri Ojansivu fa07dcf422 Update ChangeLog. 2020-02-22 16:39:28 +02:00
Lauri Ojansivu 2b9540ce02 Try to fix afterwards loading of cards by adding
fallback when requestIdleCallback is not available.

Thanks to xet7 !

Closes #2878,
closes #2250
2020-02-22 16:32:54 +02:00
Lauri Ojansivu 906c25d5e8 Update translations. 2020-02-22 10:32:48 +02:00
Lauri Ojansivu e9924a2f03 v3.80 2020-02-22 03:10:08 +02:00
Lauri Ojansivu 16e7fc6edc Update translations. 2020-02-22 02:55:26 +02:00
Lauri Ojansivu e0ca960a35 Create New User in Admin Panel. Works, but does not save fullname yet,
so currently it's needed to edit add fullname later.

Thanks to xet7 !

Related #802
2020-02-22 02:49:14 +02:00
Lauri Ojansivu 0e755e021b Update ChangeLog. 2020-02-21 00:48:02 +02:00
Lauri Ojansivu 9be3f3714a Update to Meteor 1.9.2 2020-02-21 00:46:05 +02:00
Lauri Ojansivu 02e425b39d Update ChangeLog. 2020-02-20 22:57:04 +02:00
Lauri Ojansivu ec01206030 Remove alethes:pages package, that had some indentation error.
Package is about pagination, but I did not find any pagination
related code in Wekan yet.

Thanks to xet7 !
2020-02-20 22:00:28 +02:00
Lauri Ojansivu cbbb5deff7 Update to Meteor 1.9.1, Node 12.16.1 etc newest dependencies. 2020-02-20 20:46:25 +02:00
Lauri Ojansivu 4377be8aa4 Merge branch 'master' of github.com:wekan/wekan 2020-02-20 20:20:11 +02:00
Lauri Ojansivu 26010476b8 Update translations. 2020-02-20 20:19:42 +02:00
Lauri Ojansivu aac27d4db3 Merge pull request #2937 from pbek/patch-1
Fix docker-compose link
2020-02-20 17:13:55 +02:00
Patrizio Bekerle 9762030920 Fix docker-compose link 2020-02-20 15:25:05 +01:00
Lauri Ojansivu cb1ffea5d6 Update translations. 2020-02-19 10:36:12 +02:00
Lauri Ojansivu a4ff6cc0af Update Sandstorm release build script. 2020-02-13 20:04:18 -05:00
Lauri Ojansivu 84acc65d04 v3.79 2020-02-13 15:16:07 +02:00
Lauri Ojansivu 2b1727c6e1 Update translations. 2020-02-13 15:12:46 +02:00
Lauri Ojansivu 178f376e21 Fix Card Opened Webhook can not be disabled.
Thanks to mvanvoorden and xet7 !

Closes #2932,
closes #2889,
closes #2666
2020-02-13 14:58:19 +02:00
Lauri Ojansivu 92538a6ac3 Update translations. 2020-02-13 14:34:53 +02:00
Romulus Urakagi Tsai 4b196d5378 Merge branch 'master' of https://github.com/wekan/wekan into lib-change 2020-02-13 09:02:26 +00:00
Romulus Urakagi Tsai b34ed58289 Start writing migration 2020-02-13 08:47:41 +00:00
Lauri Ojansivu 3fcde252f7 v3.78 2020-02-12 02:23:26 +02:00
Lauri Ojansivu e89965f642 Remove card element grouping to create compact card layout.
Card Settings / Show on Card: Description Title and Description Text.

Thanks to e-stoniauk, 2020product and xet7 !

Fixes https://github.com/wekan/wekan/pull/2922
2020-02-12 02:08:29 +02:00
Lauri Ojansivu b4e5583065 Update translations. 2020-02-12 02:06:26 +02:00
Lauri Ojansivu 65b11ce3bd v3.77 2020-02-10 20:45:02 +02:00
Lauri Ojansivu ea74e6ad23 Update ChangeLog. 2020-02-10 19:39:30 +02:00
Lauri Ojansivu 4467a68b97 Part 2: Fix Copy Card Link to Clipboard button at card title did not work.
Thanks to 2020product and xet7 !

Related https://github.com/wekan/wekan/pull/2922
2020-02-10 19:37:25 +02:00
Lauri Ojansivu 799bf5735b Update translations. 2020-02-10 19:14:25 +02:00
Lauri Ojansivu 92d0385911 Update ChangeLog. 2020-02-10 19:04:03 +02:00
Lauri Ojansivu 9a21b0a1c9 Fix Copy Card Link to Clipboard button at card title did not work.
Thanks to 2020product and xet7 !

Related https://github.com/wekan/wekan/pull/2922
2020-02-10 18:47:03 +02:00
Lauri Ojansivu 6eb21faca2 Update ChangeLog. 2020-02-10 17:27:18 +02:00
Lauri Ojansivu 2a54218f3f Remove hiding comments and activities. 2020-02-10 17:25:27 +02:00
Lauri Ojansivu 6eac38bde5 Update translations. 2020-02-07 14:05:39 +02:00
Lauri Ojansivu 947c1f81ee Update ChangeLog. 2020-02-07 14:03:57 +02:00
Lauri Ojansivu 2fce02afbc Add Feature: Card Settings/Show on card/Activities.
Fix: When in Card Settings hiding Comments, only adding new comment is hidden, not old comments.

Thanks to xet7 !

Closes #2925
2020-02-07 13:58:43 +02:00
Lauri Ojansivu a58e6be78d v3.76 2020-02-07 03:29:21 +02:00
Lauri Ojansivu 77b43e75a2 Update translations. 2020-02-07 03:28:33 +02:00
Lauri Ojansivu 228e5389cf Update ChangeLog. 2020-02-07 03:20:46 +02:00
Lauri Ojansivu bf78b093ba Try to disable dragging Swimlanes/Lists/Cards/Checklists/Subtasks on small mobile smartphones webbrowsers, and hide drag handles on mobile web.
Thanks to xet7 !
2020-02-07 03:16:16 +02:00
Lauri Ojansivu 8384d68a06 Use Meteor 1.9 and Node.js 12.15.0 on Snap and Docker.
Thanks to xet7 !
2020-02-07 03:12:27 +02:00
Lauri Ojansivu 120a430deb Fix Bug enable/disable Comments in Card Settings.
Thanks to warnt, mdurokov and xet7 !

Closes #2923
2020-02-07 02:34:57 +02:00
Lauri Ojansivu 8e7b9b73b5 Update translations. 2020-02-07 00:08:36 +02:00
Lauri Ojansivu 47afee63d1 v3.75 2020-02-05 20:12:22 +02:00
Lauri Ojansivu 243e4c856e Update translations. 2020-02-05 19:57:19 +02:00
Lauri Ojansivu f22785dbcd - Fix adding comments.
- Added some working layout changes from https://github.com/wekan/wekan/pull/2920.
- Fixed Card Settings not working at Sandstorm.

Thanks to 2020product xet7 !

Closes #2918,
closes https://github.com/wekan/wekan/pull/2920
2020-02-05 19:47:08 +02:00
Lauri Ojansivu 5848e7fe29 Update translations. 2020-02-05 17:26:05 +02:00
Romulus Urakagi Tsai 617fdaeb74 Fix sandstorm storage path 2020-01-14 07:06:20 +00:00
Romulus Urakagi Tsai d26bf04bfa Change to relative path and /var/attachments to store 2020-01-14 06:29:34 +00:00
Romulus Tsai 蔡仲明 a365899312 Merge branch 'master' of https://github.com/PDIS/wekan 2020-01-02 17:34:10 +08:00
Romulus Urakagi Tsai 6ebd6defe9 Uploading dialog done 2020-01-02 09:16:28 +00:00
Romulus Urakagi Tsai 93337c20f8 Change upload routine, add upload popup 2019-12-24 08:57:34 +00:00
Romulus Urakagi Tsai 6cdd464f54 Uploaded done, but uploading not 2019-11-27 09:40:19 +00:00
蔡仲明 (Romulus Urakagi Tsai) 3e0bedd8c7 Merge pull request #1 from wekan/master
Update master
2019-11-21 11:25:56 +08:00
Romulus Urakagi Tsai 4dcdec0084 Attachment upload from card done, need to fix download link 2019-11-20 10:40:09 +00:00
Romulus Urakagi Tsai 05c53ca01d Trying to upload an attachment with Meteor-Files 2019-11-18 01:47:26 +00:00
886 changed files with 143094 additions and 84508 deletions

No files matched your search

+12
View File
@@ -0,0 +1,12 @@
{
"presets": [
"@babel/preset-stage-3"
],
"env": {
"COVERAGE": {
"plugins": [
"istanbul"
]
}
}
}
+89 -18
View File
@@ -1,13 +1,13 @@
FROM ubuntu:disco
FROM quay.io/wekan/ubuntu:groovy-20210115
LABEL maintainer="sgr"
ENV BUILD_DEPS="gnupg gosu bsdtar wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=8.17.0 \
METEOR_RELEASE=1.8.1 \
NODE_VERSION=v12.22.6 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
@@ -15,16 +15,20 @@ ENV \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
RESULTS_PER_PAGE="" \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
RICHER_CARD_COMMENT_EDITOR=true \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
BIGEVENTS_PATTERN="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
BIGEVENTS_PATTERN=NONE \
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
NOTIFY_DUE_AT_HOUR_OF_DAY="" \
EMAIL_NOTIFICATION_TIMEOUT=30000 \
@@ -36,6 +40,8 @@ ENV \
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
OAUTH2_CLIENT_ID="" \
OAUTH2_SECRET="" \
@@ -108,23 +114,40 @@ ENV \
CORS="" \
CORS_ALLOW_HEADERS="" \
CORS_EXPOSE_HEADERS="" \
DEFAULT_AUTHENTICATION_METHOD=""
DEFAULT_AUTHENTICATION_METHOD="" \
PASSWORD_LOGIN_ENABLED=true \
CAS_ENABLED=false \
CAS_BASE_URL="" \
CAS_LOGIN_URL="" \
CAS_VALIDATE_URL="" \
SAML_ENABLED=false \
SAML_PROVIDER="" \
SAML_ENTRYPOINT="" \
SAML_ISSUER="" \
SAML_CERT="" \
SAML_IDPSLO_REDIRECTURL="" \
SAML_PRIVATE_KEYFILE="" \
SAML_PUBLIC_CERTFILE="" \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
DEFAULT_WAIT_SPINNER=""
# Install OS
RUN set -o xtrace \
&& useradd --user-group -m --system --home-dir /home/wekan wekan \
&& apt-get update \
&& apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
&& apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
&& apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
&& apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
# Install NodeJS
RUN set -o xtrace \
&& cd /tmp \
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" \
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& grep " node-v$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt.asc | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt.asc \
&& curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$ARCHITECTURE.tar.xz" \
&& curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/SHASUMS256.txt.asc" \
&& grep " node-$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt.asc | sha256sum -c - \
&& tar -xJf "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt.asc \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs \
&& mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \
&& npm install -g npm@${NPM_VERSION} \
@@ -146,17 +169,65 @@ RUN set -o xtrace \
ENV PATH=$PATH:/home/wekan/.meteor/
# Copy source dir
USER root
RUN echo "export PATH=$PATH" >> /etc/environment
RUN set -o xtrace \
&& mkdir /home/wekan/app
USER wekan
COPY ${SRC_PATH} /home/wekan/app/
# Copy source dir
RUN set -o xtrace \
&& mkdir -p /home/wekan/app/.meteor \
&& mkdir -p /home/wekan/app/packages
COPY \
.meteor/.finished-upgraders \
.meteor/.id \
.meteor/cordova-plugins \
.meteor/packages \
.meteor/platforms \
.meteor/release \
.meteor/versions \
/home/wekan/app/.meteor/
COPY \
package.json \
settings.json \
/home/wekan/app/
COPY \
packages \
/home/wekan/app/packages/
USER root
RUN set -o xtrace \
&& chown -R wekan:wekan /home/wekan/app /home/wekan/.meteor
USER wekan
RUN \
set -o xtrace && \
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
/home/wekan/.meteor/meteor -- help;
RUN \
set -o xtrace && \
# Build app
cd /home/wekan/app && \
/home/wekan/.meteor/meteor add standard-minifier-js && \
/home/wekan/.meteor/meteor npm install && \
/home/wekan/.meteor/meteor build --directory /home/wekan/app_build
RUN \
set -o xtrace && \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w package.json npm-shrinkwrap.json && \
npm install
ENV PORT=3000
EXPOSE $PORT
WORKDIR /home/wekan/app
CMD ["/home/wekan/.meteor/meteor", "run", "--verbose", "--settings", "settings.json"]
+12 -7
View File
@@ -3,17 +3,18 @@ version: '3.7'
services:
wekandb-dev:
image: mongo:4.0.12
image: mongo:4.4
container_name: wekan-dev-db
restart: unless-stopped
command: mongod --smallfiles --oplogSize 128
command: mongod --oplogSize 128
networks:
- wekan-dev-tier
expose:
- 27017
volumes:
- wekan-dev-db:/data/db
- wekan-dev-db-dump:/dump
- ./volumes/wekan-db:/data/db
- ./volumes/wekan-db-dump:/dump
- /etc/localtime:/etc/localtime:ro
wekan-dev:
container_name: wekan-dev-app
@@ -35,9 +36,13 @@ services:
depends_on:
- wekandb-dev
volumes:
- ..:/app:delegated
command:
sleep infinity
- ../client:/home/wekan/app/client
- ../models:/home/wekan/app/models
- ../config:/home/wekan/app/config
- ../i18n:/home/wekan/app/i18n
- ../server:/home/wekan/app/server
- ../public:/home/wekan/app/public
- /etc/localtime:/etc/localtime:ro
volumes:
wekan-dev-db:
+36
View File
@@ -0,0 +1,36 @@
*~
*.swp
.meteor-spk
*.sublime-workspace
tmp/
node_modules/
npm-debug.log
.gitmodules
.vscode/
.idea/
.build/*
**/parts/
**/stage
**/prime
**/*.snap
snap/.snapcraft/
.idea
.DS_Store
.DS_Store?
.build*
*.browserify.js.cached
*.browserify.js.map
.build*
versions.json
.versions
.npm
.build*
._*
.Trashes
Thumbs.db
ehthumbs.db
.eslintcache
.meteor/local
.devcontainer/docker-compose.extend.yml
.devcontainer/volumes*/
.git
+4 -1
View File
@@ -11,6 +11,7 @@
"browser": true,
"meteor": true
},
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
@@ -44,7 +45,7 @@
"no-spaced-func": 2,
"no-trailing-spaces": 2,
"operator-linebreak": 2,
"quotes": [2, "single"],
"quotes": [2, "single", { "avoidEscape": true }],
"semi-spacing": 2,
"space-unary-ops": 2,
"arrow-spacing": 2,
@@ -121,6 +122,7 @@
"Activities": true,
"Attachments": true,
"Boards": true,
"CardCommentReactions": true,
"CardComments": true,
"DatePicker": true,
"Cards": true,
@@ -155,6 +157,7 @@
"Integrations": true,
"HTTP": true,
"AccountSettings": true,
"TableVisibilityModeSettings": true,
"Announcements": true,
"Swimlanes": true,
"ChecklistItems": true,
@@ -65,9 +65,9 @@ apps:
parts:
mongodb:
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.22.tgz
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.6.tgz
plugin: dump
stage-packages: [libssl1.0.0]
stage-packages: [libssl1.0.0, libcurl3]
filesets:
mongo:
- usr
@@ -81,19 +81,20 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 8.17.0
node-engine: 12.22.6
node-packages:
- node-gyp
- node-pre-gyp
- fibers@2.0.0
- fibers
build-packages:
- ca-certificates
- apt-utils
- python
# - python3
- python3
- g++
- capnproto
- curl
- libcurl3
- execstack
- nodejs
- npm
@@ -104,6 +105,18 @@ parts:
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
# Create the OpenAPI specification
rm -rf .build
## Use Meteor 1.8.x on Snap
#rm -rf .meteor
#mv .snap-meteor-1.8/.meteor .
#mv .snap-meteor-1.8/package.json .
#mv .snap-meteor-1.8/package-lock.json .
## Meteor 1.9.x has changes to Buffer() => Buffer.alloc(), so reverting those
#mv .snap-meteor-1.8/cfs_access-point.txt fix-download-unicode/
#mv .snap-meteor-1.8/export.js models/
#mv .snap-meteor-1.8/wekanCreator.js models/
#mv .snap-meteor-1.8/ldap.js packages/wekan-ldap/server/ldap.js
#mv .snap-meteor-1.8/oidc_server.js packages/wekan-oidc/oidc_server.js
rm -rf .snap-meteor-1.8
#mkdir -p .build/python
#cd .build/python
#git clone --depth 1 -b master https://github.com/Kronuz/esprima-python
+198
View File
@@ -0,0 +1,198 @@
#!/bin/bash
echo "Note: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
echo " You can still use any other locale as your main locale."
#Below script installs newest node 8.x for Debian/Ubuntu/Mint.
#NODE_VERSION=12.21.0
#X64NODE="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz"
function pause(){
read -p "$*"
}
function cprec(){
if [[ -d "$1" ]]; then
if [[ ! -d "$2" ]]; then
sudo mkdir -p "$2"
fi
for i in $(ls -A "$1"); do
cprec "$1/$i" "$2/$i"
done
else
sudo cp "$1" "$2"
fi
}
# sudo npm doesn't work right, so this is a workaround
function npm_call(){
TMPDIR="/tmp/tmp_npm_prefix"
if [[ -d "$TMPDIR" ]]; then
rm -rf $TMPDIR
fi
mkdir $TMPDIR
NPM_PREFIX="$(npm config get prefix)"
npm config set prefix $TMPDIR
npm "$@"
npm config set prefix "$NPM_PREFIX"
echo "Moving files to $NPM_PREFIX"
for i in $(ls -A $TMPDIR); do
cprec "$TMPDIR/$i" "$NPM_PREFIX/$i"
done
rm -rf $TMPDIR
}
#function wekan_repo_check(){
## UNCOMMENTING, IT'S NOT REQUIRED THAT /HOME/USERNAME IS /HOME/WEKAN
# git_remotes="$(git remote show 2>/dev/null)"
# res=""
# for i in $git_remotes; do
# res="$(git remote get-url $i | sed 's/.*wekan\/wekan.*/wekan\/wekan/')"
# if [[ "$res" == "wekan/wekan" ]]; then
# break
# fi
# done
#
# if [[ "$res" != "wekan/wekan" ]]; then
# echo "$PWD is not a wekan repository"
# exit;
# fi
#}
echo
PS3='Please enter your choice: '
options=("Install Wekan dependencies" "Build Wekan" "Run Meteor for dev on http://localhost:4000" "Run Meteor for dev on http://CURRENT-IP-ADDRESS:4000" "Run Meteor for dev on http://CUSTOM-IP-ADDRESS:PORT" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Install Wekan dependencies")
if [[ "$OSTYPE" == "linux-gnu" ]]; then
echo "Linux";
# Debian, Ubuntu, Mint
sudo apt-get install -y build-essential gcc g++ make git curl wget
# npm nodejs
#sudo npm -g install npm
curl -0 -L https://npmjs.org/install.sh | sudo sh
sudo chown -R $(id -u):$(id -g) $HOME/.npm
sudo npm -g install n
sudo n 12.21.0
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#sudo apt-get install -y nodejs
elif [[ "$OSTYPE" == "darwin"* ]]; then
echo "macOS";
pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
elif [[ "$OSTYPE" == "cygwin" ]]; then
# POSIX compatibility layer and Linux environment emulation for Windows
echo "TODO: Add Cygwin";
exit;
elif [[ "$OSTYPE" == "msys" ]]; then
# Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
echo "TODO: Add msys on Windows";
exit;
elif [[ "$OSTYPE" == "win32" ]]; then
# I'm not sure this can happen.
echo "TODO: Add Windows";
exit;
elif [[ "$OSTYPE" == "freebsd"* ]]; then
echo "TODO: Add FreeBSD";
exit;
else
echo "Unknown"
echo ${OSTYPE}
exit;
fi
## Latest npm with Meteor 1.8.x
npm_call -g install npm
npm_call -g install node-gyp
# Latest fibers for Meteor 1.8.x
sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp
npm_call -g install fibers
# Install Meteor, if it's not yet installed
curl https://install.meteor.com | bash
sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor
break
;;
"Build Wekan")
echo "Building Wekan."
#wekan_repo_check
# REPOS BELOW ARE INCLUDED TO WEKAN REPO
#rm -rf packages/kadira-flow-router packages/meteor-useraccounts-core packages/meteor-accounts-cas packages/wekan-ldap packages/wekan-ldap packages/wekan-scrfollbar packages/meteor-accounts-oidc packages/markdown
#mkdir packages
#cd packages
#git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
#git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
#git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
#git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
#git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
#git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
#git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git
#mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
#mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
#rm -rf meteor-accounts-oidc
#if [[ "$OSTYPE" == "darwin"* ]]; then
# echo "sed at macOS";
# sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
#else
# echo "sed at ${OSTYPE}"
# sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
#fi
#cd ..
sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor
rm -rf node_modules .meteor/local
npm install
rm -rf .build
meteor build .build --directory
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf .build/bundle/programs/web.browser.legacy
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
#cd ~/repos/wekan/.build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
#rm -rf node_modules/bcrypt
#meteor npm install bcrypt
cd .build/bundle/programs/server
rm -rf node_modules
npm install
#meteor npm install bcrypt
cd ../../../..
echo Done.
break
;;
"Run Meteor for dev on http://localhost:4000")
WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://localhost:4000 meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000
break
;;
"Run Meteor for dev on http://CURRENT-IP-ADDRESS:4000")
IPADDRESS=$(ip a | grep 'noprefixroute' | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1)
echo "Your IP address is $IPADDRESS"
WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://$IPADDRESS:4000 meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000
break
;;
"Run Meteor for dev on http://CUSTOM-IP-ADDRESS:PORT")
ip address
echo "From above list, what is your IP address?"
read IPADDRESS
echo "On what port you would like to run Wekan?"
read PORT
echo "ROOT_URL=http://$IPADDRESS:$PORT"
WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://$IPADDRESS:$PORT meteor run --exclude-archs web.browser.legacy,web.cordova --port $PORT
break
;;
"Quit")
break
;;
*) echo invalid option;;
esac
done
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.14.1
node-engine: 12.22.6
node-packages:
- node-gyp
- node-pre-gyp
+10 -2
View File
@@ -1,8 +1,16 @@
## 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
Email settings:
- https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
Add these issues to elsewhere:
- Snap: https://github.com/wekan/wekan-snap/issues
- LDAP: https://github.com/wekan/wekan-ldap/issues
- SECURITY ISSUES: https://github.com/wekan/wekan/blob/master/SECURITY.md
- UCS: https://github.com/wekan/univention/issues
Other Wekan issues can be added here.
+62
View File
@@ -0,0 +1,62 @@
name: "CodeQL"
on:
push:
branches: [master]
pull_request:
# The branches below must be a subset of the branches above
branches: [master]
schedule:
- cron: '0 16 * * 3'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Override automatic language detection by changing the below list
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
language: ['javascript', 'python']
# Learn more...
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
+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!
+7 -1
View File
@@ -5,6 +5,7 @@
tmp/
node_modules/
npm-debug.log
.gitmodules
.vscode/
.idea/
.build/*
@@ -30,5 +31,10 @@ Thumbs.db
ehthumbs.db
.eslintcache
.meteor/local
.meteor-1.6-snap/.meteor/local
.devcontainer/docker-compose.extend.yml
.devcontainer/volumes*/
.coverage
# Helm chart
# Chart dependencies
/helm/wekan/**/*.tgz
+10
View File
@@ -0,0 +1,10 @@
FROM gitpod/workspace-mongodb
USER gitpod
# Install custom tools, runtime, etc. using apt-get
# For example, the command below would install "bastet" - a command line tetris clone:
#
# RUN sudo apt-get -q update && # sudo apt-get install -yq bastet && # sudo rm -rf /var/lib/apt/lists/*
#
# More information: https://www.gitpod.io/docs/config-docker/
+4
View File
@@ -0,0 +1,4 @@
tasks:
- init: npm install
image:
file: .gitpod.Dockerfile
+69 -19
View File
@@ -6,23 +6,24 @@
meteor-base@1.4.0
# Build system
ecmascript@0.14.0
standard-minifier-css@1.6.0
ecmascript@0.15.1
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
mquandalle:jade
coffeescript@2.4.1!
# Polyfills
es5-shim@4.8.0
# Collections
aldeed:collection2
cfs:standard-packages
wekan-cfs-standard-packages
cottz:publish-relations
dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
mongo@1.8.0
mongo@1.11.0
mquandalle:collection-mutations
# Account system
@@ -37,13 +38,12 @@ wekan-accounts-oidc
# Utilities
check@1.3.1
jquery@1.11.10
random@1.1.0
random@1.2.0
reactive-dict@1.3.0
session@1.2.0
tracker@1.2.0
underscore@1.0.10
3stack:presence
alethes:pages
arillo:flow-router-helpers
audit-argument-checks@1.0.7
kadira:blaze-layout
@@ -67,26 +67,22 @@ templates:tabs
verron:autosize
simple:json-routes
rajit:bootstrap3-datepicker
shell-server@0.4.0
shell-server@0.5.0
simple:rest-accounts-password
useraccounts:core
email@1.2.3
email@2.0.0
horka:swipebox
dynamic-import@0.5.1
staringatlights:fast-render
dynamic-import@0.6.0
accounts-password@1.5.2
cfs:gridfs
accounts-password@1.7.0
wekan-cfs-gridfs
rzymek:fullcalendar
momentjs:moment@2.22.2
browser-policy-framing@1.1.0
mquandalle:moment
msavin:usercache
wekan-scrollbar
mquandalle:perfect-scrollbar
mdg:meteor-apm-agent@3.2.0-rc.0!
coagmano:stylus
lucasantoniassi:accounts-lockout
# Keep stylus in 1.1.0, because building v2 takes extra 52 minutes.
coagmano:stylus@1.1.0!
meteorhacks:subs-manager
meteorhacks:picker
lamhieu:unblock
@@ -94,6 +90,60 @@ meteorhacks:aggregate@1.3.0
wekan-markdown
konecty:mongo-counter
percolate:synced-cron
wekan-cfs-filesystem
steffo:meteor-accounts-saml
rajit:bootstrap3-datepicker-fi
rajit:bootstrap3-datepicker-ar
rajit:bootstrap3-datepicker-bg
rajit:bootstrap3-datepicker-br
rajit:bootstrap3-datepicker-ca
rajit:bootstrap3-datepicker-cs
rajit:bootstrap3-datepicker-da
rajit:bootstrap3-datepicker-de
rajit:bootstrap3-datepicker-el
rajit:bootstrap3-datepicker-en-gb
rajit:bootstrap3-datepicker-eo
rajit:bootstrap3-datepicker-es
rajit:bootstrap3-datepicker-eu
rajit:bootstrap3-datepicker-fa
rajit:bootstrap3-datepicker-fr
rajit:bootstrap3-datepicker-gl
rajit:bootstrap3-datepicker-he
rajit:bootstrap3-datepicker-hi
rajit:bootstrap3-datepicker-hu
rajit:bootstrap3-datepicker-hy
rajit:bootstrap3-datepicker-id
rajit:bootstrap3-datepicker-it
rajit:bootstrap3-datepicker-ja
rajit:bootstrap3-datepicker-ka
rajit:bootstrap3-datepicker-km
rajit:bootstrap3-datepicker-ko
rajit:bootstrap3-datepicker-lv
rajit:bootstrap3-datepicker-mk
rajit:bootstrap3-datepicker-mn
rajit:bootstrap3-datepicker-nb
rajit:bootstrap3-datepicker-nl
rajit:bootstrap3-datepicker-oc
rajit:bootstrap3-datepicker-pl
rajit:bootstrap3-datepicker-pt-br
rajit:bootstrap3-datepicker-pt
rajit:bootstrap3-datepicker-ro
rajit:bootstrap3-datepicker-ru
rajit:bootstrap3-datepicker-sl
rajit:bootstrap3-datepicker-sr
rajit:bootstrap3-datepicker-sv
rajit:bootstrap3-datepicker-sw
rajit:bootstrap3-datepicker-ta
rajit:bootstrap3-datepicker-th
rajit:bootstrap3-datepicker-tr
rajit:bootstrap3-datepicker-uk
rajit:bootstrap3-datepicker-vi
rajit:bootstrap3-datepicker-zh-cn
rajit:bootstrap3-datepicker-zh-tw
staringatlights:fast-render
spacebars
easylogic:summernote
cfs:filesystem
ostrio:cookies
pascoual:pdfkit
wekan-accounts-lockout
lmieulet:meteor-coverage
meteortesting:mocha
+1 -1
View File
@@ -1 +1 @@
METEOR@1.9
METEOR@2.2
+131 -79
View File
@@ -1,68 +1,51 @@
3stack:presence@1.1.2
accounts-base@1.5.0
accounts-oauth@1.1.16
accounts-password@1.5.3
accounts-base@1.9.0
accounts-oauth@1.2.0
accounts-password@1.7.1
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
aldeed:schema-index@1.1.1
aldeed:simple-schema@1.5.4
alethes:pages@1.8.6
allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.6.0
babel-compiler@7.5.1
autoupdate@1.7.0
babel-compiler@7.6.1
babel-runtime@1.5.0
base64@1.0.12
binary-heap@1.0.11
blaze@2.3.4
blaze-tools@1.0.10
boilerplate-generator@1.6.0
blaze@2.5.0
blaze-tools@1.1.2
boilerplate-generator@1.7.1
browser-policy-common@1.0.11
browser-policy-framing@1.1.0
caching-compiler@1.2.1
caching-html-compiler@1.1.3
caching-compiler@1.2.2
caching-html-compiler@1.2.0
callback-hook@1.3.0
cfs:access-point@0.1.49
cfs:base-package@0.0.30
cfs:collection@0.5.5
cfs:collection-filters@0.2.4
cfs:data-man@0.0.6
cfs:file@0.1.17
cfs:filesystem@0.1.2
cfs:gridfs@0.0.34
cfs:http-methods@0.0.32
cfs:http-publish@0.0.13
cfs:power-queue@0.9.11
cfs:reactive-list@0.0.9
cfs:reactive-property@0.0.4
cfs:standard-packages@0.5.10
cfs:storage-adapter@0.2.4
cfs:tempstore@0.1.6
cfs:upload-http@0.0.20
cfs:worker@0.1.5
check@1.3.1
chuangbo:cookie@1.1.0
coagmano:stylus@2.0.0
coffeescript@1.0.17
coagmano:stylus@1.1.0
coffeescript@2.4.1
coffeescript-compiler@2.4.1
cottz:publish-relations@2.0.8
dburles:collection-helpers@1.1.0
ddp@1.4.0
ddp-client@2.3.3
ddp-client@2.4.1
ddp-common@1.4.0
ddp-rate-limiter@1.0.7
ddp-server@2.3.1
ddp-rate-limiter@1.0.9
ddp-server@2.3.3
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.5.1
dynamic-import@0.6.0
easylogic:summernote@0.8.8
ecmascript@0.14.1
ecmascript@0.15.1
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.10.0
ecmascript-runtime-server@0.9.0
ecmascript-runtime-client@0.11.1
ecmascript-runtime-server@0.10.1
ejson@1.1.1
email@1.2.3
email@2.0.0
es5-shim@4.8.0
fastclick@1.0.13
fetch@0.1.1
@@ -70,12 +53,12 @@ fortawesome:fontawesome@4.7.0
geojson-utils@1.0.10
horka:swipebox@1.0.2
hot-code-push@1.0.4
html-tools@1.0.11
htmljs@1.0.11
http@1.4.2
id-map@1.1.0
html-tools@1.1.2
htmljs@1.1.1
http@1.4.4
id-map@1.1.1
idmontie:migrations@1.0.3
inter-process-messaging@0.1.0
inter-process-messaging@0.1.1
jquery@1.11.11
kadira:blaze-layout@2.3.0
kadira:dochead@1.5.0
@@ -84,14 +67,13 @@ kenton:accounts-sandstorm@0.7.0
konecty:mongo-counter@0.0.5_3
lamhieu:meteorx@2.1.1
lamhieu:unblock@1.0.0
launch-screen@1.1.1
launch-screen@1.2.1
livedata@1.0.18
lmieulet:meteor-coverage@3.2.0
localstorage@1.2.0
logging@1.1.20
lucasantoniassi:accounts-lockout@1.0.0
logging@1.2.0
matb33:collection-hooks@0.9.1
matteodem:easy-search@1.6.4
mdg:meteor-apm-agent@3.2.5
mdg:validation-error@0.5.1
meteor@1.9.3
meteor-base@1.4.0
@@ -101,19 +83,22 @@ meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
minifier-css@1.5.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
minimongo@1.4.5
mobile-status-bar@1.0.14
minimongo@1.6.2
mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.15.0
modules@0.16.0
modules-runtime@0.12.0
momentjs:moment@2.24.0
mongo@1.8.0
mongo-decimal@0.1.1
momentjs:moment@2.29.1
mongo@1.11.1
mongo-decimal@0.1.2
mongo-dev-server@1.1.0
mongo-id@1.0.7
mongo-id@1.0.8
mongo-livedata@1.0.12
mousetrap:mousetrap@1.4.6_1
mquandalle:autofocus@1.0.0
@@ -124,16 +109,15 @@ mquandalle:jquery-textcomplete@0.8.0_1
mquandalle:jquery-ui-drag-drop-sort@0.2.0
mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1
mquandalle:perfect-scrollbar@0.6.5_2
msavin:usercache@1.8.0
npm-bcrypt@0.9.3
npm-mongo@3.3.0
oauth@1.2.8
oauth2@1.2.1
npm-bcrypt@0.9.4
npm-mongo@3.9.0
oauth@1.3.2
oauth2@1.3.0
observe-sequence@1.0.16
ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
ostrio:cookies@2.5.0
pascoual:pdfkit@1.0.7
peerlibrary:assert@0.3.0
peerlibrary:base-component@0.16.0
peerlibrary:blaze-components@0.15.1
@@ -144,11 +128,60 @@ promise@0.11.2
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
rajit:bootstrap3-datepicker@1.7.1_1
random@1.1.0
rajit:bootstrap3-datepicker-ar@1.7.1
rajit:bootstrap3-datepicker-bg@1.7.1
rajit:bootstrap3-datepicker-br@1.7.1
rajit:bootstrap3-datepicker-ca@1.7.1
rajit:bootstrap3-datepicker-cs@1.7.1
rajit:bootstrap3-datepicker-da@1.7.1
rajit:bootstrap3-datepicker-de@1.7.1
rajit:bootstrap3-datepicker-el@1.7.1
rajit:bootstrap3-datepicker-en-gb@1.7.1
rajit:bootstrap3-datepicker-eo@1.7.1
rajit:bootstrap3-datepicker-es@1.7.1
rajit:bootstrap3-datepicker-eu@1.7.1
rajit:bootstrap3-datepicker-fa@1.7.1
rajit:bootstrap3-datepicker-fi@1.7.1
rajit:bootstrap3-datepicker-fr@1.7.1
rajit:bootstrap3-datepicker-gl@1.7.1
rajit:bootstrap3-datepicker-he@1.7.1
rajit:bootstrap3-datepicker-hi@1.7.1
rajit:bootstrap3-datepicker-hu@1.7.1
rajit:bootstrap3-datepicker-hy@1.7.1
rajit:bootstrap3-datepicker-id@1.7.1
rajit:bootstrap3-datepicker-it@1.7.1
rajit:bootstrap3-datepicker-ja@1.7.1
rajit:bootstrap3-datepicker-ka@1.7.1
rajit:bootstrap3-datepicker-km@1.7.1
rajit:bootstrap3-datepicker-ko@1.7.1
rajit:bootstrap3-datepicker-lv@1.7.1
rajit:bootstrap3-datepicker-mk@1.7.1
rajit:bootstrap3-datepicker-mn@1.7.1
rajit:bootstrap3-datepicker-nb@1.7.1
rajit:bootstrap3-datepicker-nl@1.7.1
rajit:bootstrap3-datepicker-oc@1.7.1
rajit:bootstrap3-datepicker-pl@1.7.1
rajit:bootstrap3-datepicker-pt@1.7.1
rajit:bootstrap3-datepicker-pt-br@1.7.1
rajit:bootstrap3-datepicker-ro@1.7.1
rajit:bootstrap3-datepicker-ru@1.7.1
rajit:bootstrap3-datepicker-sl@1.7.1
rajit:bootstrap3-datepicker-sr@1.7.1
rajit:bootstrap3-datepicker-sv@1.7.1
rajit:bootstrap3-datepicker-sw@1.7.1
rajit:bootstrap3-datepicker-ta@1.7.1
rajit:bootstrap3-datepicker-th@1.7.1
rajit:bootstrap3-datepicker-tr@1.7.1
rajit:bootstrap3-datepicker-uk@1.7.1
rajit:bootstrap3-datepicker-vi@1.7.1
rajit:bootstrap3-datepicker-zh-cn@1.7.1
rajit:bootstrap3-datepicker-zh-tw@1.7.1
random@1.2.0
rate-limit@1.0.9
react-fast-refresh@0.1.1
reactive-dict@1.3.0
reactive-var@1.0.11
reload@1.3.0
reload@1.3.1
retry@1.1.0
routepolicy@1.1.0
rzymek:fullcalendar@3.8.0
@@ -156,43 +189,62 @@ server-render@0.3.1
service-configuration@1.0.11
session@1.2.0
sha@1.0.9
shell-server@0.4.0
shell-server@0.5.0
simple:authenticate-user-by-token@1.0.1
simple:json-routes@2.1.0
simple:rest-accounts-password@1.1.2
simple:rest-bearer-token-parser@1.0.1
simple:rest-json-error-handler@1.0.1
socket-stream-client@0.2.2
socket-stream-client@0.3.3
softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
srp@1.0.12
standard-minifier-css@1.6.0
spacebars@1.2.0
spacebars-compiler@1.2.1
srp@1.1.0
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
staringatlights:fast-render@3.2.0
staringatlights:fast-render@3.3.0
staringatlights:inject-data@2.3.0
steffo:meteor-accounts-saml@0.0.18
tap:i18n@1.8.2
templates:tabs@2.3.0
templating@1.3.2
templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
templating@1.4.0
templating-compiler@1.4.1
templating-runtime@1.4.0
templating-tools@1.2.0
tracker@1.2.0
twbs:bootstrap@3.3.6
ui@1.0.13
underscore@1.0.10
url@1.2.0
url@1.3.2
useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
webapp@1.8.2
webapp-hashing@1.0.9
webapp@1.10.1
webapp-hashing@1.1.0
wekan-accounts-cas@0.1.0
wekan-accounts-lockout@1.0.0
wekan-accounts-oidc@1.0.10
wekan-cfs-access-point@0.1.50
wekan-cfs-base-package@0.0.30
wekan-cfs-collection@0.5.5
wekan-cfs-collection-filters@0.2.4
wekan-cfs-data-man@0.0.6
wekan-cfs-file@0.1.17
wekan-cfs-filesystem@0.1.2
wekan-cfs-gridfs@0.0.34
wekan-cfs-http-methods@0.0.32
wekan-cfs-http-publish@0.0.13
wekan-cfs-power-queue@0.9.11
wekan-cfs-reactive-list@0.0.9
wekan-cfs-reactive-property@0.0.4
wekan-cfs-standard-packages@0.5.10
wekan-cfs-storage-adapter@0.2.4
wekan-cfs-tempstore@0.1.6
wekan-cfs-upload-http@0.0.21
wekan-cfs-worker@0.1.5
wekan-ldap@0.0.2
wekan-markdown@1.0.7
wekan-markdown@1.0.9
wekan-oidc@1.0.12
wekan-scrollbar@3.1.3
yasaricli:slugify@0.0.7
zimme:active-route@2.3.2
@@ -1,20 +0,0 @@
# This file contains information which helps Meteor properly upgrade your
# app when you run 'meteor update'. You should check it into version control
# with your project.
notices-for-0.9.0
notices-for-0.9.1
0.9.4-platform-file
notices-for-facebook-graph-api-2
1.2.0-standard-minifiers-package
1.2.0-meteor-platform-split
1.2.0-cordova-changes
1.2.0-breaking-changes
1.3.0-split-minifiers-package
1.3.5-remove-old-dev-bundle-link
1.4.0-remove-old-dev-bundle-link
1.4.1-add-shell-server-package
1.4.3-split-account-service-packages
1.5-add-dynamic-import-package
1.7-split-underscore-from-meteor-base
1.8.3-split-jquery-from-blaze
-2
View File
@@ -1,2 +0,0 @@
dev_bundle
local
-7
View File
@@ -1,7 +0,0 @@
# This file contains a token that is unique to your project.
# Check it into your repository along with the rest of this directory.
# It can be used for purposes such as:
# - ensuring you don't accidentally deploy one app on top of another
# - providing package authors with aggregated statistics
dvyihgykyzec6y1dpg
-99
View File
@@ -1,99 +0,0 @@
# Meteor packages used by this project, one per line.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
meteor-base@1.4.0
# Build system
ecmascript@0.13.2
standard-minifier-css@1.5.4
standard-minifier-js@2.5.2
mquandalle:jade
# Polyfills
es5-shim@4.8.0
# Collections
aldeed:collection2
cfs:standard-packages
cottz:publish-relations
dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
mongo@1.7.0
mquandalle:collection-mutations
# Account system
kenton:accounts-sandstorm
service-configuration@1.0.11
useraccounts:unstyled
useraccounts:flow-routing
wekan-ldap
wekan-accounts-cas
wekan-accounts-oidc
# Utilities
check@1.3.1
jquery@1.11.10
random@1.1.0
reactive-dict@1.3.0
session@1.2.0
tracker@1.2.0
underscore@1.0.10
3stack:presence
alethes:pages
arillo:flow-router-helpers
audit-argument-checks@1.0.7
kadira:blaze-layout
kadira:dochead
mquandalle:autofocus
ongoworks:speakingurl
raix:handlebar-helpers
tap:i18n
http@1.4.2
# UI components
blaze
reactive-var@1.0.11
fortawesome:fontawesome
mousetrap:mousetrap
mquandalle:jquery-textcomplete
mquandalle:jquery-ui-drag-drop-sort
mquandalle:mousetrap-bindglobal
peerlibrary:blaze-components@=0.15.1
templates:tabs
verron:autosize
simple:json-routes
rajit:bootstrap3-datepicker
shell-server@0.4.0
simple:rest-accounts-password
useraccounts:core
email@1.2.3
horka:swipebox
dynamic-import@0.5.1
staringatlights:fast-render
accounts-password@1.5.2
cfs:gridfs
rzymek:fullcalendar
momentjs:moment@2.22.2
browser-policy-framing@1.1.0
mquandalle:moment
msavin:usercache
wekan-scrollbar
mquandalle:perfect-scrollbar
mdg:meteor-apm-agent@3.2.0-rc.0!
coagmano:stylus
lucasantoniassi:accounts-lockout
meteorhacks:subs-manager
meteorhacks:picker
lamhieu:unblock
meteorhacks:aggregate@1.3.0
wekan-markdown
konecty:mongo-counter
percolate:synced-cron
easylogic:summernote
cfs:filesystem
ostrio:cookies
-2
View File
@@ -1,2 +0,0 @@
server
browser
-1
View File
@@ -1 +0,0 @@
METEOR@1.8.3
-198
View File
@@ -1,198 +0,0 @@
3stack:presence@1.1.2
accounts-base@1.4.5
accounts-oauth@1.1.16
accounts-password@1.5.2
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
aldeed:schema-index@1.1.1
aldeed:simple-schema@1.5.4
alethes:pages@1.8.6
allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.6.0
babel-compiler@7.4.2
babel-runtime@1.4.0
base64@1.0.12
binary-heap@1.0.11
blaze@2.3.4
blaze-tools@1.0.10
boilerplate-generator@1.6.0
browser-policy-common@1.0.11
browser-policy-framing@1.1.0
caching-compiler@1.2.1
caching-html-compiler@1.1.3
callback-hook@1.2.0
cfs:access-point@0.1.49
cfs:base-package@0.0.30
cfs:collection@0.5.5
cfs:collection-filters@0.2.4
cfs:data-man@0.0.6
cfs:file@0.1.17
cfs:filesystem@0.1.2
cfs:gridfs@0.0.34
cfs:http-methods@0.0.32
cfs:http-publish@0.0.13
cfs:power-queue@0.9.11
cfs:reactive-list@0.0.9
cfs:reactive-property@0.0.4
cfs:standard-packages@0.5.10
cfs:storage-adapter@0.2.4
cfs:tempstore@0.1.6
cfs:upload-http@0.0.20
cfs:worker@0.1.5
check@1.3.1
chuangbo:cookie@1.1.0
coagmano:stylus@2.0.0
coffeescript@1.0.17
cottz:publish-relations@2.0.8
dburles:collection-helpers@1.1.0
ddp@1.4.0
ddp-client@2.3.3
ddp-common@1.4.0
ddp-rate-limiter@1.0.7
ddp-server@2.3.0
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.5.1
easylogic:summernote@0.8.8
ecmascript@0.13.2
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.9.0
ecmascript-runtime-server@0.8.0
ejson@1.1.1
email@1.2.3
es5-shim@4.8.0
fastclick@1.0.13
fetch@0.1.1
fortawesome:fontawesome@4.7.0
geojson-utils@1.0.10
horka:swipebox@1.0.2
hot-code-push@1.0.4
html-tools@1.0.11
htmljs@1.0.11
http@1.4.2
id-map@1.1.0
idmontie:migrations@1.0.3
inter-process-messaging@0.1.0
jquery@1.11.11
kadira:blaze-layout@2.3.0
kadira:dochead@1.5.0
kadira:flow-router@2.12.1
kenton:accounts-sandstorm@0.7.0
konecty:mongo-counter@0.0.5_3
lamhieu:meteorx@2.1.1
lamhieu:unblock@1.0.0
launch-screen@1.1.1
livedata@1.0.18
localstorage@1.2.0
logging@1.1.20
lucasantoniassi:accounts-lockout@1.0.0
matb33:collection-hooks@0.9.1
matteodem:easy-search@1.6.4
mdg:meteor-apm-agent@3.2.5
mdg:validation-error@0.5.1
meteor@1.9.3
meteor-base@1.4.0
meteor-platform@1.2.6
meteorhacks:aggregate@1.3.0
meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
minifier-css@1.4.3
minifier-js@2.5.1
minifiers@1.1.8-faster-rebuild.0
minimongo@1.4.5
mobile-status-bar@1.0.14
modern-browsers@0.1.4
modules@0.14.0
modules-runtime@0.11.0
momentjs:moment@2.24.0
mongo@1.7.0
mongo-decimal@0.1.1
mongo-dev-server@1.1.0
mongo-id@1.0.7
mongo-livedata@1.0.12
mousetrap:mousetrap@1.4.6_1
mquandalle:autofocus@1.0.0
mquandalle:collection-mutations@0.1.0
mquandalle:jade@0.4.9
mquandalle:jade-compiler@0.4.5
mquandalle:jquery-textcomplete@0.8.0_1
mquandalle:jquery-ui-drag-drop-sort@0.2.0
mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1
mquandalle:perfect-scrollbar@0.6.5_2
msavin:usercache@1.8.0
npm-bcrypt@0.9.3
npm-mongo@3.2.0
oauth@1.2.8
oauth2@1.2.1
observe-sequence@1.0.16
ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
ostrio:cookies@2.5.0
peerlibrary:assert@0.3.0
peerlibrary:base-component@0.16.0
peerlibrary:blaze-components@0.15.1
peerlibrary:computed-field@0.10.0
peerlibrary:reactive-field@0.6.0
percolate:synced-cron@1.3.2
promise@0.11.2
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
rajit:bootstrap3-datepicker@1.7.1_1
random@1.1.0
rate-limit@1.0.9
reactive-dict@1.3.0
reactive-var@1.0.11
reload@1.3.0
retry@1.1.0
routepolicy@1.1.0
rzymek:fullcalendar@3.8.0
server-render@0.3.1
service-configuration@1.0.11
session@1.2.0
sha@1.0.9
shell-server@0.4.0
simple:authenticate-user-by-token@1.0.1
simple:json-routes@2.1.0
simple:rest-accounts-password@1.1.2
simple:rest-bearer-token-parser@1.0.1
simple:rest-json-error-handler@1.0.1
socket-stream-client@0.2.2
softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
srp@1.0.12
standard-minifier-css@1.5.4
standard-minifier-js@2.5.2
staringatlights:fast-render@3.2.0
staringatlights:inject-data@2.3.0
tap:i18n@1.8.2
templates:tabs@2.3.0
templating@1.3.2
templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
tracker@1.2.0
twbs:bootstrap@3.3.6
ui@1.0.13
underscore@1.0.10
url@1.2.0
useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
webapp@1.7.5
webapp-hashing@1.0.9
wekan-accounts-cas@0.1.0
wekan-accounts-oidc@1.0.10
wekan-ldap@0.0.2
wekan-markdown@1.0.7
wekan-oidc@1.0.12
wekan-scrollbar@3.1.3
yasaricli:slugify@0.0.7
zimme:active-route@2.3.2
-914
View File
@@ -1,914 +0,0 @@
(function () {
/* Imports */
var Meteor = Package.meteor.Meteor;
var global = Package.meteor.global;
var meteorEnv = Package.meteor.meteorEnv;
var FS = Package['cfs:base-package'].FS;
var check = Package.check.check;
var Match = Package.check.Match;
var EJSON = Package.ejson.EJSON;
var HTTP = Package['cfs:http-methods'].HTTP;
/* Package-scope variables */
var rootUrlPathPrefix, baseUrl, getHeaders, getHeadersByCollection, _existingMountPoints, mountUrls;
(function(){
///////////////////////////////////////////////////////////////////////
// //
// packages/cfs_access-point/packages/cfs_access-point.js //
// //
///////////////////////////////////////////////////////////////////////
//
(function () {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/cfs:access-point/access-point-common.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
rootUrlPathPrefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || ""; // 1
// Adjust the rootUrlPathPrefix if necessary // 2
if (rootUrlPathPrefix.length > 0) { // 3
if (rootUrlPathPrefix.slice(0, 1) !== '/') { // 4
rootUrlPathPrefix = '/' + rootUrlPathPrefix; // 5
} // 6
if (rootUrlPathPrefix.slice(-1) === '/') { // 7
rootUrlPathPrefix = rootUrlPathPrefix.slice(0, -1); // 8
} // 9
} // 10
// 11
// prepend ROOT_URL when isCordova // 12
if (Meteor.isCordova) { // 13
rootUrlPathPrefix = Meteor.absoluteUrl(rootUrlPathPrefix.replace(/^\/+/, '')).replace(/\/+$/, ''); // 14
} // 15
// 16
baseUrl = '/cfs'; // 17
FS.HTTP = FS.HTTP || {}; // 18
// 19
// Note the upload URL so that client uploader packages know what it is // 20
FS.HTTP.uploadUrl = rootUrlPathPrefix + baseUrl + '/files'; // 21
// 22
/** // 23
* @method FS.HTTP.setBaseUrl // 24
* @public // 25
* @param {String} newBaseUrl - Change the base URL for the HTTP GET and DELETE endpoints. // 26
* @returns {undefined} // 27
*/ // 28
FS.HTTP.setBaseUrl = function setBaseUrl(newBaseUrl) { // 29
// 30
// Adjust the baseUrl if necessary // 31
if (newBaseUrl.slice(0, 1) !== '/') { // 32
newBaseUrl = '/' + newBaseUrl; // 33
} // 34
if (newBaseUrl.slice(-1) === '/') { // 35
newBaseUrl = newBaseUrl.slice(0, -1); // 36
} // 37
// 38
// Update the base URL // 39
baseUrl = newBaseUrl; // 40
// 41
// Change the upload URL so that client uploader packages know what it is // 42
FS.HTTP.uploadUrl = rootUrlPathPrefix + baseUrl + '/files'; // 43
// 44
// Remount URLs with the new baseUrl, unmounting the old, on the server only. // 45
// If existingMountPoints is empty, then we haven't run the server startup // 46
// code yet, so this new URL will be used at that point for the initial mount. // 47
if (Meteor.isServer && !FS.Utility.isEmpty(_existingMountPoints)) { // 48
mountUrls(); // 49
} // 50
}; // 51
// 52
/* // 53
* FS.File extensions // 54
*/ // 55
// 56
/** // 57
* @method FS.File.prototype.url Construct the file url // 58
* @public // 59
* @param {Object} [options] // 60
* @param {String} [options.store] Name of the store to get from. If not defined, the first store defined in `options.stores` for the collection on the client is used.
* @param {Boolean} [options.auth=null] Add authentication token to the URL query string? By default, a token for the current logged in user is added on the client. Set this to `false` to omit the token. Set this to a string to provide your own token. Set this to a number to specify an expiration time for the token in seconds.
* @param {Boolean} [options.download=false] Should headers be set to force a download? Typically this means that clicking the link with this URL will download the file to the user's Downloads folder instead of displaying the file in the browser.
* @param {Boolean} [options.brokenIsFine=false] Return the URL even if we know it's currently a broken link because the file hasn't been saved in the requested store yet.
* @param {Boolean} [options.metadata=false] Return the URL for the file metadata access point rather than the file itself.
* @param {String} [options.uploading=null] A URL to return while the file is being uploaded. // 66
* @param {String} [options.storing=null] A URL to return while the file is being stored. // 67
* @param {String} [options.filename=null] Override the filename that should appear at the end of the URL. By default it is the name of the file in the requested store.
* // 69
* Returns the HTTP URL for getting the file or its metadata. // 70
*/ // 71
FS.File.prototype.url = function(options) { // 72
var self = this; // 73
options = options || {}; // 74
options = FS.Utility.extend({ // 75
store: null, // 76
auth: null, // 77
download: false, // 78
metadata: false, // 79
brokenIsFine: false, // 80
uploading: null, // return this URL while uploading // 81
storing: null, // return this URL while storing // 82
filename: null // override the filename that is shown to the user // 83
}, options.hash || options); // check for "hash" prop if called as helper // 84
// 85
// Primarily useful for displaying a temporary image while uploading an image // 86
if (options.uploading && !self.isUploaded()) { // 87
return options.uploading; // 88
} // 89
// 90
if (self.isMounted()) { // 91
// See if we've stored in the requested store yet // 92
var storeName = options.store || self.collection.primaryStore.name; // 93
if (!self.hasStored(storeName)) { // 94
if (options.storing) { // 95
return options.storing; // 96
} else if (!options.brokenIsFine) { // 97
// We want to return null if we know the URL will be a broken // 98
// link because then we can avoid rendering broken links, broken // 99
// images, etc. // 100
return null; // 101
} // 102
} // 103
// 104
// Add filename to end of URL if we can determine one // 105
var filename = options.filename || self.name({store: storeName}); // 106
if (typeof filename === "string" && filename.length) { // 107
filename = '/' + filename; // 108
} else { // 109
filename = ''; // 110
} // 111
// 112
// TODO: Could we somehow figure out if the collection requires login? // 113
var authToken = ''; // 114
if (Meteor.isClient && typeof Accounts !== "undefined" && typeof Accounts._storedLoginToken === "function") { // 115
if (options.auth !== false) { // 116
// Add reactive deps on the user // 117
Meteor.userId(); // 118
// 119
var authObject = { // 120
authToken: Accounts._storedLoginToken() || '' // 121
}; // 122
// 123
// If it's a number, we use that as the expiration time (in seconds) // 124
if (options.auth === +options.auth) { // 125
authObject.expiration = FS.HTTP.now() + options.auth * 1000; // 126
} // 127
// 128
// Set the authToken // 129
var authString = JSON.stringify(authObject); // 130
authToken = FS.Utility.btoa(authString); // 131
} // 132
} else if (typeof options.auth === "string") { // 133
// If the user supplies auth token the user will be responsible for // 134
// updating // 135
authToken = options.auth; // 136
} // 137
// 138
// Construct query string // 139
var params = {}; // 140
if (authToken !== '') { // 141
params.token = authToken; // 142
} // 143
if (options.download) { // 144
params.download = true; // 145
} // 146
if (options.store) { // 147
// We use options.store here instead of storeName because we want to omit the queryString // 148
// whenever possible, allowing users to have "clean" URLs if they want. The server will // 149
// assume the first store defined on the server, which means that we are assuming that // 150
// the first on the client is also the first on the server. If that's not the case, the // 151
// store option should be supplied. // 152
params.store = options.store; // 153
} // 154
var queryString = FS.Utility.encodeParams(params); // 155
if (queryString.length) { // 156
queryString = '?' + queryString; // 157
} // 158
// 159
// Determine which URL to use // 160
var area; // 161
if (options.metadata) { // 162
area = '/record'; // 163
} else { // 164
area = '/files'; // 165
} // 166
// 167
// Construct and return the http method url // 168
return rootUrlPathPrefix + baseUrl + area + '/' + self.collection.name + '/' + self._id + filename + queryString; // 169
} // 170
// 171
}; // 172
// 173
// 174
// 175
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/cfs:access-point/access-point-handlers.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
getHeaders = []; // 1
getHeadersByCollection = {}; // 2
// 3
FS.HTTP.Handlers = {}; // 4
// 5
/** // 6
* @method FS.HTTP.Handlers.Del // 7
* @public // 8
* @returns {any} response // 9
* // 10
* HTTP DEL request handler // 11
*/ // 12
FS.HTTP.Handlers.Del = function httpDelHandler(ref) { // 13
var self = this; // 14
var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 15
// 16
// If DELETE request, validate with 'remove' allow/deny, delete the file, and return // 17
FS.Utility.validateAction(ref.collection.files._validators['remove'], ref.file, self.userId); // 18
// 19
/* // 20
* From the DELETE spec: // 21
* A successful response SHOULD be 200 (OK) if the response includes an // 22
* entity describing the status, 202 (Accepted) if the action has not // 23
* yet been enacted, or 204 (No Content) if the action has been enacted // 24
* but the response does not include an entity. // 25
*/ // 26
self.setStatusCode(200); // 27
// 28
return { // 29
deleted: !!ref.file.remove() // 30
}; // 31
}; // 32
// 33
/** // 34
* @method FS.HTTP.Handlers.GetList // 35
* @public // 36
* @returns {Object} response // 37
* // 38
* HTTP GET file list request handler // 39
*/ // 40
FS.HTTP.Handlers.GetList = function httpGetListHandler() { // 41
// Not Yet Implemented // 42
// Need to check publications and return file list based on // 43
// what user is allowed to see // 44
}; // 45
// 46
/* // 47
requestRange will parse the range set in request header - if not possible it // 48
will throw fitting errors and autofill range for both partial and full ranges // 49
// 50
throws error or returns the object: // 51
{ // 52
start // 53
end // 54
length // 55
unit // 56
partial // 57
} // 58
*/ // 59
var requestRange = function(req, fileSize) { // 60
if (req) { // 61
if (req.headers) { // 62
var rangeString = req.headers.range; // 63
// 64
// Make sure range is a string // 65
if (rangeString === ''+rangeString) { // 66
// 67
// range will be in the format "bytes=0-32767" // 68
var parts = rangeString.split('='); // 69
var unit = parts[0]; // 70
// 71
// Make sure parts consists of two strings and range is of type "byte" // 72
if (parts.length == 2 && unit == 'bytes') { // 73
// Parse the range // 74
var range = parts[1].split('-'); // 75
var start = Number(range[0]); // 76
var end = Number(range[1]); // 77
// 78
// Fix invalid ranges? // 79
if (range[0] != start) start = 0; // 80
if (range[1] != end || !end) end = fileSize - 1; // 81
// 82
// Make sure range consists of a start and end point of numbers and start is less than end // 83
if (start < end) { // 84
// 85
var partSize = 0 - start + end + 1; // 86
// 87
// Return the parsed range // 88
return { // 89
start: start, // 90
end: end, // 91
length: partSize, // 92
size: fileSize, // 93
unit: unit, // 94
partial: (partSize < fileSize) // 95
}; // 96
// 97
} else { // 98
throw new Meteor.Error(416, "Requested Range Not Satisfiable"); // 99
} // 100
// 101
} else { // 102
// The first part should be bytes // 103
throw new Meteor.Error(416, "Requested Range Unit Not Satisfiable"); // 104
} // 105
// 106
} else { // 107
// No range found // 108
} // 109
// 110
} else { // 111
// throw new Error('No request headers set for _parseRange function'); // 112
} // 113
} else { // 114
throw new Error('No request object passed to _parseRange function'); // 115
} // 116
// 117
return { // 118
start: 0, // 119
end: fileSize - 1, // 120
length: fileSize, // 121
size: fileSize, // 122
unit: 'bytes', // 123
partial: false // 124
}; // 125
}; // 126
// 127
/** // 128
* @method FS.HTTP.Handlers.Get // 129
* @public // 130
* @returns {any} response // 131
* // 132
* HTTP GET request handler // 133
*/ // 134
FS.HTTP.Handlers.Get = function httpGetHandler(ref) { // 135
var self = this; // 136
// Once we have the file, we can test allow/deny validators // 137
// XXX: pass on the "share" query eg. ?share=342hkjh23ggj for shared url access? // 138
FS.Utility.validateAction(ref.collection._validators['download'], ref.file, self.userId /*, self.query.shareId*/); // 139
// 140
var storeName = ref.storeName; // 141
// 142
// If no storeName was specified, use the first defined storeName // 143
if (typeof storeName !== "string") { // 144
// No store handed, we default to primary store // 145
storeName = ref.collection.primaryStore.name; // 146
} // 147
// 148
// Get the storage reference // 149
var storage = ref.collection.storesLookup[storeName]; // 150
// 151
if (!storage) { // 152
throw new Meteor.Error(404, "Not Found", 'There is no store "' + storeName + '"'); // 153
} // 154
// 155
// Get the file // 156
var copyInfo = ref.file.copies[storeName]; // 157
// 158
if (!copyInfo) { // 159
throw new Meteor.Error(404, "Not Found", 'This file was not stored in the ' + storeName + ' store'); // 160
} // 161
// 162
// Set the content type for file // 163
if (typeof copyInfo.type === "string") { // 164
self.setContentType(copyInfo.type); // 165
} else { // 166
self.setContentType('application/octet-stream'); // 167
} // 168
// 169
// Add 'Content-Disposition' header if requested a download/attachment URL // 170
if (typeof ref.download !== "undefined") { // 171
var filename = ref.filename || copyInfo.name; // 172
self.addHeader('Content-Disposition', 'attachment; filename="' + filename + '"'); // 173
} else { // 174
self.addHeader('Content-Disposition', 'inline'); // 175
} // 176
// 177
// Get the contents range from request // 178
var range = requestRange(self.request, copyInfo.size); // 179
// 180
// Some browsers cope better if the content-range header is // 181
// still included even for the full file being returned. // 182
self.addHeader('Content-Range', range.unit + ' ' + range.start + '-' + range.end + '/' + range.size); // 183
// 184
// If a chunk/range was requested instead of the whole file, serve that' // 185
if (range.partial) { // 186
self.setStatusCode(206, 'Partial Content'); // 187
} else { // 188
self.setStatusCode(200, 'OK'); // 189
} // 190
// 191
// Add any other global custom headers and collection-specific custom headers // 192
FS.Utility.each(getHeaders.concat(getHeadersByCollection[ref.collection.name] || []), function(header) { // 193
self.addHeader(header[0], header[1]); // 194
}); // 195
// 196
// Inform clients about length (or chunk length in case of ranges) // 197
self.addHeader('Content-Length', range.length); // 198
// 199
// Last modified header (updatedAt from file info) // 200
self.addHeader('Last-Modified', copyInfo.updatedAt.toUTCString()); // 201
// 202
// Inform clients that we accept ranges for resumable chunked downloads // 203
self.addHeader('Accept-Ranges', range.unit); // 204
// 205
if (FS.debug) console.log('Read file "' + (ref.filename || copyInfo.name) + '" ' + range.unit + ' ' + range.start + '-' + range.end + '/' + range.size);
// 207
var readStream = storage.adapter.createReadStream(ref.file, {start: range.start, end: range.end}); // 208
// 209
readStream.on('error', function(err) { // 210
// Send proper error message on get error // 211
if (err.message && err.statusCode) { // 212
self.Error(new Meteor.Error(err.statusCode, err.message)); // 213
} else { // 214
self.Error(new Meteor.Error(503, 'Service unavailable')); // 215
} // 216
}); // 217
// 218
readStream.pipe(self.createWriteStream()); // 219
}; // 220
const originalHandler = FS.HTTP.Handlers.Get;
FS.HTTP.Handlers.Get = function (ref) {
//console.log(ref.filename);
try {
var userAgent = (this.requestHeaders['user-agent']||'').toLowerCase();
if(userAgent.indexOf('msie') >= 0 || userAgent.indexOf('trident') >= 0 || userAgent.indexOf('chrome') >= 0) {
ref.filename = encodeURIComponent(ref.filename);
} else if(userAgent.indexOf('firefox') >= 0) {
ref.filename = new Buffer(ref.filename).toString('binary');
} else {
/* safari*/
ref.filename = new Buffer(ref.filename).toString('binary');
}
} catch (ex){
ref.filename = 'tempfix';
}
return originalHandler.call(this, ref);
};
// 221
/** // 222
* @method FS.HTTP.Handlers.PutInsert // 223
* @public // 224
* @returns {Object} response object with _id property // 225
* // 226
* HTTP PUT file insert request handler // 227
*/ // 228
FS.HTTP.Handlers.PutInsert = function httpPutInsertHandler(ref) { // 229
var self = this; // 230
var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 231
// 232
FS.debug && console.log("HTTP PUT (insert) handler"); // 233
// 234
// Create the nice FS.File // 235
var fileObj = new FS.File(); // 236
// 237
// Set its name // 238
fileObj.name(opts.filename || null); // 239
// 240
// Attach the readstream as the file's data // 241
fileObj.attachData(self.createReadStream(), {type: self.requestHeaders['content-type'] || 'application/octet-stream'});
// 243
// Validate with insert allow/deny // 244
FS.Utility.validateAction(ref.collection.files._validators['insert'], fileObj, self.userId); // 245
// 246
// Insert file into collection, triggering readStream storage // 247
ref.collection.insert(fileObj); // 248
// 249
// Send response // 250
self.setStatusCode(200); // 251
// 252
// Return the new file id // 253
return {_id: fileObj._id}; // 254
}; // 255
// 256
/** // 257
* @method FS.HTTP.Handlers.PutUpdate // 258
* @public // 259
* @returns {Object} response object with _id and chunk properties // 260
* // 261
* HTTP PUT file update chunk request handler // 262
*/ // 263
FS.HTTP.Handlers.PutUpdate = function httpPutUpdateHandler(ref) { // 264
var self = this; // 265
var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 266
// 267
var chunk = parseInt(opts.chunk, 10); // 268
if (isNaN(chunk)) chunk = 0; // 269
// 270
FS.debug && console.log("HTTP PUT (update) handler received chunk: ", chunk); // 271
// 272
// Validate with insert allow/deny; also mounts and retrieves the file // 273
FS.Utility.validateAction(ref.collection.files._validators['insert'], ref.file, self.userId); // 274
// 275
self.createReadStream().pipe( FS.TempStore.createWriteStream(ref.file, chunk) ); // 276
// 277
// Send response // 278
self.setStatusCode(200); // 279
// 280
return { _id: ref.file._id, chunk: chunk }; // 281
}; // 282
// 283
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/cfs:access-point/access-point-server.js //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
var path = Npm.require("path"); // 1
// 2
HTTP.publishFormats({ // 3
fileRecordFormat: function (input) { // 4
// Set the method scope content type to json // 5
this.setContentType('application/json'); // 6
if (FS.Utility.isArray(input)) { // 7
return EJSON.stringify(FS.Utility.map(input, function (obj) { // 8
return FS.Utility.cloneFileRecord(obj); // 9
})); // 10
} else { // 11
return EJSON.stringify(FS.Utility.cloneFileRecord(input)); // 12
} // 13
} // 14
}); // 15
// 16
/** // 17
* @method FS.HTTP.setHeadersForGet // 18
* @public // 19
* @param {Array} headers - List of headers, where each is a two-item array in which item 1 is the header name and item 2 is the header value.
* @param {Array|String} [collections] - Which collections the headers should be added for. Omit this argument to add the header for all collections.
* @returns {undefined} // 22
*/ // 23
FS.HTTP.setHeadersForGet = function setHeadersForGet(headers, collections) { // 24
if (typeof collections === "string") { // 25
collections = [collections]; // 26
} // 27
if (collections) { // 28
FS.Utility.each(collections, function(collectionName) { // 29
getHeadersByCollection[collectionName] = headers || []; // 30
}); // 31
} else { // 32
getHeaders = headers || []; // 33
} // 34
}; // 35
// 36
/** // 37
* @method FS.HTTP.publish // 38
* @public // 39
* @param {FS.Collection} collection // 40
* @param {Function} func - Publish function that returns a cursor. // 41
* @returns {undefined} // 42
* // 43
* Publishes all documents returned by the cursor at a GET URL // 44
* with the format baseUrl/record/collectionName. The publish // 45
* function `this` is similar to normal `Meteor.publish`. // 46
*/ // 47
FS.HTTP.publish = function fsHttpPublish(collection, func) { // 48
var name = baseUrl + '/record/' + collection.name; // 49
// Mount collection listing URL using http-publish package // 50
HTTP.publish({ // 51
name: name, // 52
defaultFormat: 'fileRecordFormat', // 53
collection: collection, // 54
collectionGet: true, // 55
collectionPost: false, // 56
documentGet: true, // 57
documentPut: false, // 58
documentDelete: false // 59
}, func); // 60
// 61
FS.debug && console.log("Registered HTTP method GET URLs:\n\n" + name + '\n' + name + '/:id\n'); // 62
}; // 63
// 64
/** // 65
* @method FS.HTTP.unpublish // 66
* @public // 67
* @param {FS.Collection} collection // 68
* @returns {undefined} // 69
* // 70
* Unpublishes a restpoint created by a call to `FS.HTTP.publish` // 71
*/ // 72
FS.HTTP.unpublish = function fsHttpUnpublish(collection) { // 73
// Mount collection listing URL using http-publish package // 74
HTTP.unpublish(baseUrl + '/record/' + collection.name); // 75
}; // 76
// 77
_existingMountPoints = {}; // 78
// 79
/** // 80
* @method defaultSelectorFunction // 81
* @private // 82
* @returns { collection, file } // 83
* // 84
* This is the default selector function // 85
*/ // 86
var defaultSelectorFunction = function() { // 87
var self = this; // 88
// Selector function // 89
// // 90
// This function will have to return the collection and the // 91
// file. If file not found undefined is returned - if null is returned the // 92
// search was not possible // 93
var opts = FS.Utility.extend({}, self.query || {}, self.params || {}); // 94
// 95
// Get the collection name from the url // 96
var collectionName = opts.collectionName; // 97
// 98
// Get the id from the url // 99
var id = opts.id; // 100
// 101
// Get the collection // 102
var collection = FS._collections[collectionName]; // 103
// 104
// Get the file if possible else return null // 105
var file = (id && collection)? collection.findOne({ _id: id }): null; // 106
// 107
// Return the collection and the file // 108
return { // 109
collection: collection, // 110
file: file, // 111
storeName: opts.store, // 112
download: opts.download, // 113
filename: opts.filename // 114
}; // 115
}; // 116
// 117
/* // 118
* @method FS.HTTP.mount // 119
* @public // 120
* @param {array of string} mountPoints mount points to map rest functinality on // 121
* @param {function} selector_f [selector] function returns `{ collection, file }` for mount points to work with // 122
* // 123
*/ // 124
FS.HTTP.mount = function(mountPoints, selector_f) { // 125
// We take mount points as an array and we get a selector function // 126
var selectorFunction = selector_f || defaultSelectorFunction; // 127
// 128
var accessPoint = { // 129
'stream': true, // 130
'auth': expirationAuth, // 131
'post': function(data) { // 132
// Use the selector for finding the collection and file reference // 133
var ref = selectorFunction.call(this); // 134
// 135
// We dont support post - this would be normal insert eg. of filerecord? // 136
throw new Meteor.Error(501, "Not implemented", "Post is not supported"); // 137
}, // 138
'put': function(data) { // 139
// Use the selector for finding the collection and file reference // 140
var ref = selectorFunction.call(this); // 141
// 142
// Make sure we have a collection reference // 143
if (!ref.collection) // 144
throw new Meteor.Error(404, "Not Found", "No collection found"); // 145
// 146
// Make sure we have a file reference // 147
if (ref.file === null) { // 148
// No id supplied so we will create a new FS.File instance and // 149
// insert the supplied data. // 150
return FS.HTTP.Handlers.PutInsert.apply(this, [ref]); // 151
} else { // 152
if (ref.file) { // 153
return FS.HTTP.Handlers.PutUpdate.apply(this, [ref]); // 154
} else { // 155
throw new Meteor.Error(404, "Not Found", 'No file found'); // 156
} // 157
} // 158
}, // 159
'get': function(data) { // 160
// Use the selector for finding the collection and file reference // 161
var ref = selectorFunction.call(this); // 162
// 163
// Make sure we have a collection reference // 164
if (!ref.collection) // 165
throw new Meteor.Error(404, "Not Found", "No collection found"); // 166
// 167
// Make sure we have a file reference // 168
if (ref.file === null) { // 169
// No id supplied so we will return the published list of files ala // 170
// http.publish in json format // 171
return FS.HTTP.Handlers.GetList.apply(this, [ref]); // 172
} else { // 173
if (ref.file) { // 174
return FS.HTTP.Handlers.Get.apply(this, [ref]); // 175
} else { // 176
throw new Meteor.Error(404, "Not Found", 'No file found'); // 177
} // 178
} // 179
}, // 180
'delete': function(data) { // 181
// Use the selector for finding the collection and file reference // 182
var ref = selectorFunction.call(this); // 183
// 184
// Make sure we have a collection reference // 185
if (!ref.collection) // 186
throw new Meteor.Error(404, "Not Found", "No collection found"); // 187
// 188
// Make sure we have a file reference // 189
if (ref.file) { // 190
return FS.HTTP.Handlers.Del.apply(this, [ref]); // 191
} else { // 192
throw new Meteor.Error(404, "Not Found", 'No file found'); // 193
} // 194
} // 195
}; // 196
// 197
var accessPoints = {}; // 198
// 199
// Add debug message // 200
FS.debug && console.log('Registered HTTP method URLs:'); // 201
// 202
FS.Utility.each(mountPoints, function(mountPoint) { // 203
// Couple mountpoint and accesspoint // 204
accessPoints[mountPoint] = accessPoint; // 205
// Remember our mountpoints // 206
_existingMountPoints[mountPoint] = mountPoint; // 207
// Add debug message // 208
FS.debug && console.log(mountPoint); // 209
}); // 210
// 211
// XXX: HTTP:methods should unmount existing mounts in case of overwriting? // 212
HTTP.methods(accessPoints); // 213
// 214
}; // 215
// 216
/** // 217
* @method FS.HTTP.unmount // 218
* @public // 219
* @param {string | array of string} [mountPoints] Optional, if not specified all mountpoints are unmounted // 220
* // 221
*/ // 222
FS.HTTP.unmount = function(mountPoints) { // 223
// The mountPoints is optional, can be string or array if undefined then // 224
// _existingMountPoints will be used // 225
var unmountList; // 226
// Container for the mount points to unmount // 227
var unmountPoints = {}; // 228
// 229
if (typeof mountPoints === 'undefined') { // 230
// Use existing mount points - unmount all // 231
unmountList = _existingMountPoints; // 232
} else if (mountPoints === ''+mountPoints) { // 233
// Got a string // 234
unmountList = [mountPoints]; // 235
} else if (mountPoints.length) { // 236
// Got an array // 237
unmountList = mountPoints; // 238
} // 239
// 240
// If we have a list to unmount // 241
if (unmountList) { // 242
// Iterate over each item // 243
FS.Utility.each(unmountList, function(mountPoint) { // 244
// Check _existingMountPoints to make sure the mount point exists in our // 245
// context / was created by the FS.HTTP.mount // 246
if (_existingMountPoints[mountPoint]) { // 247
// Mark as unmount // 248
unmountPoints[mountPoint] = false; // 249
// Release // 250
delete _existingMountPoints[mountPoint]; // 251
} // 252
}); // 253
FS.debug && console.log('FS.HTTP.unmount:'); // 254
FS.debug && console.log(unmountPoints); // 255
// Complete unmount // 256
HTTP.methods(unmountPoints); // 257
} // 258
}; // 259
// 260
// ### FS.Collection maps on HTTP pr. default on the following restpoints: // 261
// * // 262
// baseUrl + '/files/:collectionName/:id/:filename', // 263
// baseUrl + '/files/:collectionName/:id', // 264
// baseUrl + '/files/:collectionName' // 265
// // 266
// Change/ replace the existing mount point by: // 267
// ```js // 268
// // unmount all existing // 269
// FS.HTTP.unmount(); // 270
// // Create new mount point // 271
// FS.HTTP.mount([ // 272
// '/cfs/files/:collectionName/:id/:filename', // 273
// '/cfs/files/:collectionName/:id', // 274
// '/cfs/files/:collectionName' // 275
// ]); // 276
// ``` // 277
// // 278
mountUrls = function mountUrls() { // 279
// We unmount first in case we are calling this a second time // 280
FS.HTTP.unmount(); // 281
// 282
FS.HTTP.mount([ // 283
baseUrl + '/files/:collectionName/:id/:filename', // 284
baseUrl + '/files/:collectionName/:id', // 285
baseUrl + '/files/:collectionName' // 286
]); // 287
}; // 288
// 289
// Returns the userId from URL token // 290
var expirationAuth = function expirationAuth() { // 291
var self = this; // 292
// 293
// Read the token from '/hello?token=base64' // 294
var encodedToken = self.query.token; // 295
// 296
FS.debug && console.log("token: "+encodedToken); // 297
// 298
if (!encodedToken || !Meteor.users) return false; // 299
// 300
// Check the userToken before adding it to the db query // 301
// Set the this.userId // 302
var tokenString = FS.Utility.atob(encodedToken); // 303
// 304
var tokenObject; // 305
try { // 306
tokenObject = JSON.parse(tokenString); // 307
} catch(err) { // 308
throw new Meteor.Error(400, 'Bad Request'); // 309
} // 310
// 311
// XXX: Do some check here of the object // 312
var userToken = tokenObject.authToken; // 313
if (userToken !== ''+userToken) { // 314
throw new Meteor.Error(400, 'Bad Request'); // 315
} // 316
// 317
// If we have an expiration token we should check that it's still valid // 318
if (tokenObject.expiration != null) { // 319
// check if its too old // 320
var now = Date.now(); // 321
if (tokenObject.expiration < now) { // 322
FS.debug && console.log('Expired token: ' + tokenObject.expiration + ' is less than ' + now); // 323
throw new Meteor.Error(500, 'Expired token'); // 324
} // 325
} // 326
// 327
// We are not on a secure line - so we have to look up the user... // 328
var user = Meteor.users.findOne({ // 329
$or: [ // 330
{'services.resume.loginTokens.hashedToken': Accounts._hashLoginToken(userToken)}, // 331
{'services.resume.loginTokens.token': userToken} // 332
] // 333
}); // 334
// 335
// Set the userId in the scope // 336
return user && user._id; // 337
}; // 338
// 339
HTTP.methods( // 340
{'/cfs/servertime': { // 341
get: function(data) { // 342
return Date.now().toString(); // 343
} // 344
} // 345
}); // 346
// 347
// Unify client / server api // 348
FS.HTTP.now = function() { // 349
return Date.now(); // 350
}; // 351
// 352
// Start up the basic mount points // 353
Meteor.startup(function () { // 354
mountUrls(); // 355
}); // 356
// 357
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
///////////////////////////////////////////////////////////////////////
}).call(this);
/* Exports */
if (typeof Package === 'undefined') Package = {};
Package['cfs:access-point'] = {};
})();
-238
View File
@@ -1,238 +0,0 @@
/* global JsonRoutes */
if (Meteor.isServer) {
// todo XXX once we have a real API in place, move that route there
// todo XXX also share the route definition between the client and the server
// so that we could use something like
// `ApiRoutes.path('boards/export', boardId)``
// on the client instead of copy/pasting the route path manually between the
// client and the server.
/**
* @operation export
* @tag Boards
*
* @summary This route is used to export the board.
*
* @description If user is already logged-in, pass loginToken as param
* "authToken": '/api/boards/:boardId/export?authToken=:token'
*
* See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/
* for detailed explanations
*
* @param {string} boardId the ID of the board we are exporting
* @param {string} authToken the loginToken
*/
JsonRoutes.add('get', '/api/boards/:boardId/export', function(req, res) {
const boardId = req.params.boardId;
let user = null;
const loginToken = req.query.authToken;
if (loginToken) {
const hashToken = Accounts._hashLoginToken(loginToken);
user = Meteor.users.findOne({
'services.resume.loginTokens.hashedToken': hashToken,
});
} else if (!Meteor.settings.public.sandstorm) {
Authentication.checkUserId(req.userId);
user = Users.findOne({ _id: req.userId, isAdmin: true });
}
const exporter = new Exporter(boardId);
if (exporter.canExport(user)) {
JsonRoutes.sendResult(res, {
code: 200,
data: exporter.build(),
});
} else {
// we could send an explicit error message, but on the other hand the only
// way to get there is by hacking the UI so let's keep it raw.
JsonRoutes.sendResult(res, 403);
}
});
}
// exporter maybe is broken since Gridfs introduced, add fs and path
export class Exporter {
constructor(boardId) {
this._boardId = boardId;
}
build() {
const fs = Npm.require('fs');
const os = Npm.require('os');
const path = Npm.require('path');
const byBoard = { boardId: this._boardId };
const byBoardNoLinked = {
boardId: this._boardId,
linkedId: { $in: ['', null] },
};
// we do not want to retrieve boardId in related elements
const noBoardId = {
fields: {
boardId: 0,
},
};
const result = {
_format: 'wekan-board-1.0.0',
};
_.extend(
result,
Boards.findOne(this._boardId, {
fields: {
stars: 0,
},
}),
);
result.lists = Lists.find(byBoard, noBoardId).fetch();
result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch();
result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch();
result.customFields = CustomFields.find(
{ boardIds: { $in: [this.boardId] } },
{ fields: { boardId: 0 } },
).fetch();
result.comments = CardComments.find(byBoard, noBoardId).fetch();
result.activities = Activities.find(byBoard, noBoardId).fetch();
result.rules = Rules.find(byBoard, noBoardId).fetch();
result.checklists = [];
result.checklistItems = [];
result.subtaskItems = [];
result.triggers = [];
result.actions = [];
result.cards.forEach(card => {
result.checklists.push(
...Checklists.find({
cardId: card._id,
}).fetch(),
);
result.checklistItems.push(
...ChecklistItems.find({
cardId: card._id,
}).fetch(),
);
result.subtaskItems.push(
...Cards.find({
parentId: card._id,
}).fetch(),
);
});
result.rules.forEach(rule => {
result.triggers.push(
...Triggers.find(
{
_id: rule.triggerId,
},
noBoardId,
).fetch(),
);
result.actions.push(
...Actions.find(
{
_id: rule.actionId,
},
noBoardId,
).fetch(),
);
});
// [Old] for attachments we only export IDs and absolute url to original doc
// [New] Encode attachment to base64
const getBase64Data = function(doc, callback) {
let buffer = new Buffer(0);
// callback has the form function (err, res) {}
const tmpFile = path.join(
os.tmpdir(),
`tmpexport${process.pid}${Math.random()}`,
);
const tmpWriteable = fs.createWriteStream(tmpFile);
const readStream = doc.createReadStream();
readStream.on('data', function(chunk) {
buffer = Buffer.concat([buffer, chunk]);
});
readStream.on('error', function(err) {
callback(err, null);
});
readStream.on('end', function() {
// done
fs.unlink(tmpFile, () => {
//ignored
});
callback(null, buffer.toString('base64'));
});
readStream.pipe(tmpWriteable);
};
const getBase64DataSync = Meteor.wrapAsync(getBase64Data);
result.attachments = Attachments.find(byBoard)
.fetch()
.map(attachment => {
return {
_id: attachment._id,
cardId: attachment.cardId,
// url: FlowRouter.url(attachment.url()),
file: getBase64DataSync(attachment),
name: attachment.original.name,
type: attachment.original.type,
};
});
// we also have to export some user data - as the other elements only
// include id but we have to be careful:
// 1- only exports users that are linked somehow to that board
// 2- do not export any sensitive information
const users = {};
result.members.forEach(member => {
users[member.userId] = true;
});
result.lists.forEach(list => {
users[list.userId] = true;
});
result.cards.forEach(card => {
users[card.userId] = true;
if (card.members) {
card.members.forEach(memberId => {
users[memberId] = true;
});
}
});
result.comments.forEach(comment => {
users[comment.userId] = true;
});
result.activities.forEach(activity => {
users[activity.userId] = true;
});
result.checklists.forEach(checklist => {
users[checklist.userId] = true;
});
const byUserIds = {
_id: {
$in: Object.getOwnPropertyNames(users),
},
};
// we use whitelist to be sure we do not expose inadvertently
// some secret fields that gets added to User later.
const userFields = {
fields: {
_id: 1,
username: 1,
'profile.fullname': 1,
'profile.initials': 1,
'profile.avatarUrl': 1,
},
};
result.users = Users.find(byUserIds, userFields)
.fetch()
.map(user => {
// user avatar is stored as a relative url, we export absolute
if ((user.profile || {}).avatarUrl) {
user.profile.avatarUrl = FlowRouter.url(user.profile.avatarUrl);
}
return user;
});
return result;
}
canExport(user) {
const board = Boards.findOne(this._boardId);
return board && board.isVisibleBy(user);
}
}
-584
View File
@@ -1,584 +0,0 @@
import ldapjs from 'ldapjs';
import util from 'util';
import Bunyan from 'bunyan';
import {log_debug, log_info, log_warn, log_error} from './logger';
export default class LDAP {
constructor() {
this.ldapjs = ldapjs;
this.connected = false;
this.options = {
host : this.constructor.settings_get('LDAP_HOST'),
port : this.constructor.settings_get('LDAP_PORT'),
Reconnect : this.constructor.settings_get('LDAP_RECONNECT'),
timeout : this.constructor.settings_get('LDAP_TIMEOUT'),
connect_timeout : this.constructor.settings_get('LDAP_CONNECT_TIMEOUT'),
idle_timeout : this.constructor.settings_get('LDAP_IDLE_TIMEOUT'),
encryption : this.constructor.settings_get('LDAP_ENCRYPTION'),
ca_cert : this.constructor.settings_get('LDAP_CA_CERT'),
reject_unauthorized : this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || false,
Authentication : this.constructor.settings_get('LDAP_AUTHENTIFICATION'),
Authentication_UserDN : this.constructor.settings_get('LDAP_AUTHENTIFICATION_USERDN'),
Authentication_Password : this.constructor.settings_get('LDAP_AUTHENTIFICATION_PASSWORD'),
Authentication_Fallback : this.constructor.settings_get('LDAP_LOGIN_FALLBACK'),
BaseDN : this.constructor.settings_get('LDAP_BASEDN'),
Internal_Log_Level : this.constructor.settings_get('INTERNAL_LOG_LEVEL'),
User_Authentication : this.constructor.settings_get('LDAP_USER_AUTHENTICATION'),
User_Authentication_Field : this.constructor.settings_get('LDAP_USER_AUTHENTICATION_FIELD'),
User_Attributes : this.constructor.settings_get('LDAP_USER_ATTRIBUTES'),
User_Search_Filter : this.constructor.settings_get('LDAP_USER_SEARCH_FILTER'),
User_Search_Scope : this.constructor.settings_get('LDAP_USER_SEARCH_SCOPE'),
User_Search_Field : this.constructor.settings_get('LDAP_USER_SEARCH_FIELD'),
Search_Page_Size : this.constructor.settings_get('LDAP_SEARCH_PAGE_SIZE'),
Search_Size_Limit : this.constructor.settings_get('LDAP_SEARCH_SIZE_LIMIT'),
group_filter_enabled : this.constructor.settings_get('LDAP_GROUP_FILTER_ENABLE'),
group_filter_object_class : this.constructor.settings_get('LDAP_GROUP_FILTER_OBJECTCLASS'),
group_filter_group_id_attribute : this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE'),
group_filter_group_member_attribute: this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE'),
group_filter_group_member_format : this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT'),
group_filter_group_name : this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_NAME'),
};
}
static settings_get(name, ...args) {
let value = process.env[name];
if (value !== undefined) {
if (value === 'true' || value === 'false') {
value = JSON.parse(value);
} else if (value !== '' && !isNaN(value)) {
value = Number(value);
}
return value;
} else {
log_warn(`Lookup for unset variable: ${name}`);
}
}
connectSync(...args) {
if (!this._connectSync) {
this._connectSync = Meteor.wrapAsync(this.connectAsync, this);
}
return this._connectSync(...args);
}
searchAllSync(...args) {
if (!this._searchAllSync) {
this._searchAllSync = Meteor.wrapAsync(this.searchAllAsync, this);
}
return this._searchAllSync(...args);
}
connectAsync(callback) {
log_info('Init setup');
let replied = false;
const connectionOptions = {
url : `${this.options.host}:${this.options.port}`,
timeout : this.options.timeout,
connectTimeout: this.options.connect_timeout,
idleTimeout : this.options.idle_timeout,
reconnect : this.options.Reconnect,
};
if (this.options.Internal_Log_Level !== 'disabled') {
connectionOptions.log = new Bunyan({
name : 'ldapjs',
component: 'client',
stream : process.stderr,
level : this.options.Internal_Log_Level,
});
}
const tlsOptions = {
rejectUnauthorized: this.options.reject_unauthorized,
};
if (this.options.ca_cert && this.options.ca_cert !== '') {
// Split CA cert into array of strings
const chainLines = this.constructor.settings_get('LDAP_CA_CERT').split('\n');
let cert = [];
const ca = [];
chainLines.forEach((line) => {
cert.push(line);
if (line.match(/-END CERTIFICATE-/)) {
ca.push(cert.join('\n'));
cert = [];
}
});
tlsOptions.ca = ca;
}
if (this.options.encryption === 'ssl') {
connectionOptions.url = `ldaps://${connectionOptions.url}`;
connectionOptions.tlsOptions = tlsOptions;
} else {
connectionOptions.url = `ldap://${connectionOptions.url}`;
}
log_info('Connecting', connectionOptions.url);
log_debug(`connectionOptions${util.inspect(connectionOptions)}`);
this.client = ldapjs.createClient(connectionOptions);
this.bindSync = Meteor.wrapAsync(this.client.bind, this.client);
this.client.on('error', (error) => {
log_error('connection', error);
if (replied === false) {
replied = true;
callback(error, null);
}
});
this.client.on('idle', () => {
log_info('Idle');
this.disconnect();
});
this.client.on('close', () => {
log_info('Closed');
});
if (this.options.encryption === 'tls') {
// Set host parameter for tls.connect which is used by ldapjs starttls. This shouldn't be needed in newer nodejs versions (e.g v5.6.0).
// https://github.com/RocketChat/Rocket.Chat/issues/2035
// https://github.com/mcavage/node-ldapjs/issues/349
tlsOptions.host = this.options.host;
log_info('Starting TLS');
log_debug('tlsOptions', tlsOptions);
this.client.starttls(tlsOptions, null, (error, response) => {
if (error) {
log_error('TLS connection', error);
if (replied === false) {
replied = true;
callback(error, null);
}
return;
}
log_info('TLS connected');
this.connected = true;
if (replied === false) {
replied = true;
callback(null, response);
}
});
} else {
this.client.on('connect', (response) => {
log_info('LDAP connected');
this.connected = true;
if (replied === false) {
replied = true;
callback(null, response);
}
});
}
setTimeout(() => {
if (replied === false) {
log_error('connection time out', connectionOptions.connectTimeout);
replied = true;
callback(new Error('Timeout'));
}
}, connectionOptions.connectTimeout);
}
getUserFilter(username) {
const filter = [];
if (this.options.User_Search_Filter !== '') {
if (this.options.User_Search_Filter[0] === '(') {
filter.push(`${this.options.User_Search_Filter}`);
} else {
filter.push(`(${this.options.User_Search_Filter})`);
}
}
const usernameFilter = this.options.User_Search_Field.split(',').map((item) => `(${item}=${username})`);
if (usernameFilter.length === 0) {
log_error('LDAP_LDAP_User_Search_Field not defined');
} else if (usernameFilter.length === 1) {
filter.push(`${usernameFilter[0]}`);
} else {
filter.push(`(|${usernameFilter.join('')})`);
}
return `(&${filter.join('')})`;
}
bindUserIfNecessary(username, password) {
if (this.domainBinded === true) {
return;
}
if (!this.options.User_Authentication) {
return;
}
if (!this.options.BaseDN) throw new Error('BaseDN is not provided');
const userDn = `${this.options.User_Authentication_Field}=${username},${this.options.BaseDN}`;
this.bindSync(userDn, password);
this.domainBinded = true;
}
bindIfNecessary() {
if (this.domainBinded === true) {
return;
}
if (this.options.Authentication !== true) {
return;
}
log_info('Binding UserDN', this.options.Authentication_UserDN);
this.bindSync(this.options.Authentication_UserDN, this.options.Authentication_Password);
this.domainBinded = true;
}
searchUsersSync(username, page) {
this.bindIfNecessary();
const searchOptions = {
filter : this.getUserFilter(username),
scope : this.options.User_Search_Scope || 'sub',
sizeLimit: this.options.Search_Size_Limit,
};
if (!!this.options.User_Attributes) searchOptions.attributes = this.options.User_Attributes.split(',');
if (this.options.Search_Page_Size > 0) {
searchOptions.paged = {
pageSize : this.options.Search_Page_Size,
pagePause: !!page,
};
}
log_info('Searching user', username);
log_debug('searchOptions', searchOptions);
log_debug('BaseDN', this.options.BaseDN);
if (page) {
return this.searchAllPaged(this.options.BaseDN, searchOptions, page);
}
return this.searchAllSync(this.options.BaseDN, searchOptions);
}
getUserByIdSync(id, attribute) {
this.bindIfNecessary();
const Unique_Identifier_Field = this.constructor.settings_get('LDAP_UNIQUE_IDENTIFIER_FIELD').split(',');
let filter;
if (attribute) {
filter = new this.ldapjs.filters.EqualityFilter({
attribute,
value: new Buffer(id, 'hex'),
});
} else {
const filters = [];
Unique_Identifier_Field.forEach((item) => {
filters.push(new this.ldapjs.filters.EqualityFilter({
attribute: item,
value : new Buffer(id, 'hex'),
}));
});
filter = new this.ldapjs.filters.OrFilter({ filters });
}
const searchOptions = {
filter,
scope: 'sub',
};
log_info('Searching by id', id);
log_debug('search filter', searchOptions.filter.toString());
log_debug('BaseDN', this.options.BaseDN);
const result = this.searchAllSync(this.options.BaseDN, searchOptions);
if (!Array.isArray(result) || result.length === 0) {
return;
}
if (result.length > 1) {
log_error('Search by id', id, 'returned', result.length, 'records');
}
return result[0];
}
getUserByUsernameSync(username) {
this.bindIfNecessary();
const searchOptions = {
filter: this.getUserFilter(username),
scope : this.options.User_Search_Scope || 'sub',
};
log_info('Searching user', username);
log_debug('searchOptions', searchOptions);
log_debug('BaseDN', this.options.BaseDN);
const result = this.searchAllSync(this.options.BaseDN, searchOptions);
if (!Array.isArray(result) || result.length === 0) {
return;
}
if (result.length > 1) {
log_error('Search by username', username, 'returned', result.length, 'records');
}
return result[0];
}
getUserGroups(username, ldapUser) {
if (!this.options.group_filter_enabled) {
return true;
}
const filter = ['(&'];
if (this.options.group_filter_object_class !== '') {
filter.push(`(objectclass=${this.options.group_filter_object_class})`);
}
if (this.options.group_filter_group_member_attribute !== '') {
const format_value = ldapUser[this.options.group_filter_group_member_format];
if (format_value) {
filter.push(`(${this.options.group_filter_group_member_attribute}=${format_value})`);
}
}
filter.push(')');
const searchOptions = {
filter: filter.join('').replace(/#{username}/g, username),
scope : 'sub',
};
log_debug('Group list filter LDAP:', searchOptions.filter);
const result = this.searchAllSync(this.options.BaseDN, searchOptions);
if (!Array.isArray(result) || result.length === 0) {
return [];
}
const grp_identifier = this.options.group_filter_group_id_attribute || 'cn';
const groups = [];
result.map((item) => {
groups.push(item[grp_identifier]);
});
log_debug(`Groups: ${groups.join(', ')}`);
return groups;
}
isUserInGroup(username, ldapUser) {
if (!this.options.group_filter_enabled) {
return true;
}
const grps = this.getUserGroups(username, ldapUser);
const filter = ['(&'];
if (this.options.group_filter_object_class !== '') {
filter.push(`(objectclass=${this.options.group_filter_object_class})`);
}
if (this.options.group_filter_group_member_attribute !== '') {
const format_value = ldapUser[this.options.group_filter_group_member_format];
if (format_value) {
filter.push(`(${this.options.group_filter_group_member_attribute}=${format_value})`);
}
}
if (this.options.group_filter_group_id_attribute !== '') {
filter.push(`(${this.options.group_filter_group_id_attribute}=${this.options.group_filter_group_name})`);
}
filter.push(')');
const searchOptions = {
filter: filter.join('').replace(/#{username}/g, username),
scope : 'sub',
};
log_debug('Group filter LDAP:', searchOptions.filter);
const result = this.searchAllSync(this.options.BaseDN, searchOptions);
if (!Array.isArray(result) || result.length === 0) {
return false;
}
return true;
}
extractLdapEntryData(entry) {
const values = {
_raw: entry.raw,
};
Object.keys(values._raw).forEach((key) => {
const value = values._raw[key];
if (!['thumbnailPhoto', 'jpegPhoto'].includes(key)) {
if (value instanceof Buffer) {
values[key] = value.toString();
} else {
values[key] = value;
}
}
});
return values;
}
searchAllPaged(BaseDN, options, page) {
this.bindIfNecessary();
const processPage = ({ entries, title, end, next }) => {
log_info(title);
// Force LDAP idle to wait the record processing
this.client._updateIdle(true);
page(null, entries, {
end, next: () => {
// Reset idle timer
this.client._updateIdle();
next && next();
}
});
};
this.client.search(BaseDN, options, (error, res) => {
if (error) {
log_error(error);
page(error);
return;
}
res.on('error', (error) => {
log_error(error);
page(error);
return;
});
let entries = [];
const internalPageSize = options.paged && options.paged.pageSize > 0 ? options.paged.pageSize * 2 : 500;
res.on('searchEntry', (entry) => {
entries.push(this.extractLdapEntryData(entry));
if (entries.length >= internalPageSize) {
processPage({
entries,
title: 'Internal Page',
end : false,
});
entries = [];
}
});
res.on('page', (result, next) => {
if (!next) {
this.client._updateIdle(true);
processPage({
entries,
title: 'Final Page',
end : true,
});
} else if (entries.length) {
log_info('Page');
processPage({
entries,
title: 'Page',
end : false,
next,
});
entries = [];
}
});
res.on('end', () => {
if (entries.length) {
processPage({
entries,
title: 'Final Page',
end : true,
});
entries = [];
}
});
});
}
searchAllAsync(BaseDN, options, callback) {
this.bindIfNecessary();
this.client.search(BaseDN, options, (error, res) => {
if (error) {
log_error(error);
callback(error);
return;
}
res.on('error', (error) => {
log_error(error);
callback(error);
return;
});
const entries = [];
res.on('searchEntry', (entry) => {
entries.push(this.extractLdapEntryData(entry));
});
res.on('end', () => {
log_info('Search result count', entries.length);
callback(null, entries);
});
});
}
authSync(dn, password) {
log_info('Authenticating', dn);
try {
if (password === '') {
throw new Error('Password is not provided');
}
this.bindSync(dn, password);
log_info('Authenticated', dn);
return true;
} catch (error) {
log_info('Not authenticated', dn);
log_debug('error', error);
return false;
}
}
disconnect() {
this.connected = false;
this.domainBinded = false;
log_info('Disconecting');
this.client.unbind();
}
}
-149
View File
@@ -1,149 +0,0 @@
Oidc = {};
OAuth.registerService('oidc', 2, null, function (query) {
var debug = process.env.DEBUG || false;
var token = getToken(query);
if (debug) console.log('XXX: register token:', token);
var accessToken = token.access_token || token.id_token;
var expiresAt = (+new Date) + (1000 * parseInt(token.expires_in, 10));
var userinfo = getUserInfo(accessToken);
if (debug) console.log('XXX: userinfo:', userinfo);
var serviceData = {};
serviceData.id = userinfo[process.env.OAUTH2_ID_MAP]; // || userinfo["id"];
serviceData.username = userinfo[process.env.OAUTH2_USERNAME_MAP]; // || userinfo["uid"];
serviceData.fullname = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
serviceData.accessToken = accessToken;
serviceData.expiresAt = expiresAt;
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
if (accessToken) {
var tokenContent = getTokenContent(accessToken);
var fields = _.pick(tokenContent, getConfiguration().idTokenWhitelistFields);
_.extend(serviceData, fields);
}
if (token.refresh_token)
serviceData.refreshToken = token.refresh_token;
if (debug) console.log('XXX: serviceData:', serviceData);
var profile = {};
profile.name = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
profile.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
if (debug) console.log('XXX: profile:', profile);
return {
serviceData: serviceData,
options: { profile: profile }
};
});
var userAgent = "Meteor";
if (Meteor.release) {
userAgent += "/" + Meteor.release;
}
var getToken = function (query) {
var debug = process.env.DEBUG || false;
var config = getConfiguration();
if(config.tokenEndpoint.includes('https://')){
var serverTokenEndpoint = config.tokenEndpoint;
}else{
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
}
var requestPermissions = config.requestPermissions;
var response;
try {
response = HTTP.post(
serverTokenEndpoint,
{
headers: {
Accept: 'application/json',
"User-Agent": userAgent
},
params: {
code: query.code,
client_id: config.clientId,
client_secret: OAuth.openSecret(config.secret),
redirect_uri: OAuth._redirectUri('oidc', config),
grant_type: 'authorization_code',
scope: requestPermissions,
state: query.state
}
}
);
} catch (err) {
throw _.extend(new Error("Failed to get token from OIDC " + serverTokenEndpoint + ": " + err.message),
{ response: err.response });
}
if (response.data.error) {
// if the http response was a json object with an error attribute
throw new Error("Failed to complete handshake with OIDC " + serverTokenEndpoint + ": " + response.data.error);
} else {
if (debug) console.log('XXX: getToken response: ', response.data);
return response.data;
}
};
var getUserInfo = function (accessToken) {
var debug = process.env.DEBUG || false;
var config = getConfiguration();
// Some userinfo endpoints use a different base URL than the authorization or token endpoints.
// This logic allows the end user to override the setting by providing the full URL to userinfo in their config.
if (config.userinfoEndpoint.includes("https://")) {
var serverUserinfoEndpoint = config.userinfoEndpoint;
} else {
var serverUserinfoEndpoint = config.serverUrl + config.userinfoEndpoint;
}
var response;
try {
response = HTTP.get(
serverUserinfoEndpoint,
{
headers: {
"User-Agent": userAgent,
"Authorization": "Bearer " + accessToken
}
}
);
} catch (err) {
throw _.extend(new Error("Failed to fetch userinfo from OIDC " + serverUserinfoEndpoint + ": " + err.message),
{response: err.response});
}
if (debug) console.log('XXX: getUserInfo response: ', response.data);
return response.data;
};
var getConfiguration = function () {
var config = ServiceConfiguration.configurations.findOne({ service: 'oidc' });
if (!config) {
throw new ServiceConfiguration.ConfigError('Service oidc not configured.');
}
return config;
};
var getTokenContent = function (token) {
var content = null;
if (token) {
try {
var parts = token.split('.');
var header = JSON.parse(new Buffer(parts[0], 'base64').toString());
content = JSON.parse(new Buffer(parts[1], 'base64').toString());
var signature = new Buffer(parts[2], 'base64');
var signed = parts[0] + '.' + parts[1];
} catch (err) {
this.content = {
exp: 0
};
}
}
return content;
}
Oidc.retrieveCredential = function (credentialToken, credentialSecret) {
return OAuth.retrieveCredential(credentialToken, credentialSecret);
};
-5184
View File
File diff suppressed because it is too large. Load diff
-73
View File
@@ -1,73 +0,0 @@
{
"name": "wekan",
"version": "v3.74.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
"lint": "eslint --cache --ext .js --ignore-path .eslintignore .",
"lint:eslint:fix": "eslint --ext .js --ignore-path .eslintignore --fix .",
"lint:staged": "lint-staged",
"prettify": "prettier --write '**/*.js' '**/*.jsx'",
"test": "npm run lint"
},
"lint-staged": {
"*.js": [
"meteor npm run prettify",
"meteor npm run lint:eslint:fix",
"git add --force"
],
"*.jsx": [
"meteor npm run prettify",
"meteor npm run lint:eslint:fix",
"git add --force"
],
"*.json": [
"prettier --write",
"git add --force"
]
},
"pre-commit": "lint:staged",
"eslintConfig": {
"extends": "@meteorjs/eslint-config-meteor"
},
"repository": {
"type": "git",
"url": "git+https://github.com/wekan/wekan.git"
},
"license": "MIT",
"bugs": {
"url": "https://github.com/wekan/wekan/issues"
},
"homepage": "https://wekan.github.io",
"devDependencies": {
"eslint": "^5.16.0",
"eslint-config-meteor": "0.0.9",
"eslint-config-prettier": "^3.6.0",
"eslint-import-resolver-meteor": "^0.4.0",
"eslint-plugin-import": "^2.18.0",
"eslint-plugin-meteor": "^5.1.0",
"eslint-plugin-prettier": "^3.1.0",
"lint-staged": "^7.3.0",
"pre-commit": "^1.2.2",
"prettier": "^1.18.2",
"prettier-eslint": "^8.8.2"
},
"dependencies": {
"@babel/runtime": "^7.6.2",
"ajv": "^5.0.0",
"babel-runtime": "^6.26.0",
"bcrypt": "^3.0.2",
"bson": "^4.0.0",
"bunyan": "^1.8.12",
"es6-promise": "^4.2.4",
"gridfs-stream": "^0.5.3",
"ldapjs": "^1.0.2",
"meteor-node-stubs": "^0.4.1",
"mongodb": "^3.3.3",
"os": "^0.1.1",
"page": "^1.8.6",
"qs": "^6.8.0",
"source-map-support": "^0.5.12",
"xss": "^1.0.6"
}
}
-853
View File
@@ -1,853 +0,0 @@
const DateString = Match.Where(function(dateAsString) {
check(dateAsString, String);
return moment(dateAsString, moment.ISO_8601).isValid();
});
export class WekanCreator {
constructor(data) {
// we log current date, to use the same timestamp for all our actions.
// this helps to retrieve all elements performed by the same import.
this._nowDate = new Date();
// The object creation dates, indexed by Wekan id
// (so we only parse actions once!)
this.createdAt = {
board: null,
cards: {},
lists: {},
swimlanes: {},
};
// The object creator Wekan Id, indexed by the object Wekan id
// (so we only parse actions once!)
this.createdBy = {
cards: {}, // only cards have a field for that
};
// Map of labels Wekan ID => Wekan ID
this.labels = {};
// Map of swimlanes Wekan ID => Wekan ID
this.swimlanes = {};
// Map of lists Wekan ID => Wekan ID
this.lists = {};
// Map of cards Wekan ID => Wekan ID
this.cards = {};
// Map of comments Wekan ID => Wekan ID
this.commentIds = {};
// Map of attachments Wekan ID => Wekan ID
this.attachmentIds = {};
// Map of checklists Wekan ID => Wekan ID
this.checklists = {};
// Map of checklistItems Wekan ID => Wekan ID
this.checklistItems = {};
// The comments, indexed by Wekan card id (to map when importing cards)
this.comments = {};
// Map of rules Wekan ID => Wekan ID
this.rules = {};
// the members, indexed by Wekan member id => Wekan user ID
this.members = data.membersMapping ? data.membersMapping : {};
// Map of triggers Wekan ID => Wekan ID
this.triggers = {};
// Map of actions Wekan ID => Wekan ID
this.actions = {};
// maps a wekanCardId to an array of wekanAttachments
this.attachments = {};
}
/**
* If dateString is provided,
* return the Date it represents.
* If not, will return the date when it was first called.
* This is useful for us, as we want all import operations to
* have the exact same date for easier later retrieval.
*
* @param {String} dateString a properly formatted Date
*/
_now(dateString) {
if (dateString) {
return new Date(dateString);
}
if (!this._nowDate) {
this._nowDate = new Date();
}
return this._nowDate;
}
/**
* if wekanUserId is provided and we have a mapping,
* return it.
* Otherwise return current logged user.
* @param wekanUserId
* @private
*/
_user(wekanUserId) {
if (wekanUserId && this.members[wekanUserId]) {
return this.members[wekanUserId];
}
return Meteor.userId();
}
checkActivities(wekanActivities) {
check(wekanActivities, [
Match.ObjectIncluding({
activityType: String,
createdAt: DateString,
}),
]);
// XXX we could perform more thorough checks based on action type
}
checkBoard(wekanBoard) {
check(
wekanBoard,
Match.ObjectIncluding({
archived: Boolean,
title: String,
// XXX refine control by validating 'color' against a list of
// allowed values (is it worth the maintenance?)
color: String,
permission: Match.Where(value => {
return ['private', 'public'].indexOf(value) >= 0;
}),
}),
);
}
checkCards(wekanCards) {
check(wekanCards, [
Match.ObjectIncluding({
archived: Boolean,
dateLastActivity: DateString,
labelIds: [String],
title: String,
sort: Number,
}),
]);
}
checkLabels(wekanLabels) {
check(wekanLabels, [
Match.ObjectIncluding({
// XXX refine control by validating 'color' against a list of allowed
// values (is it worth the maintenance?)
color: String,
}),
]);
}
checkLists(wekanLists) {
check(wekanLists, [
Match.ObjectIncluding({
archived: Boolean,
title: String,
}),
]);
}
checkSwimlanes(wekanSwimlanes) {
check(wekanSwimlanes, [
Match.ObjectIncluding({
archived: Boolean,
title: String,
}),
]);
}
checkChecklists(wekanChecklists) {
check(wekanChecklists, [
Match.ObjectIncluding({
cardId: String,
title: String,
}),
]);
}
checkChecklistItems(wekanChecklistItems) {
check(wekanChecklistItems, [
Match.ObjectIncluding({
cardId: String,
title: String,
}),
]);
}
checkRules(wekanRules) {
check(wekanRules, [
Match.ObjectIncluding({
triggerId: String,
actionId: String,
title: String,
}),
]);
}
checkTriggers(wekanTriggers) {
// XXX More check based on trigger type
check(wekanTriggers, [
Match.ObjectIncluding({
activityType: String,
desc: String,
}),
]);
}
getMembersToMap(data) {
// we will work on the list itself (an ordered array of objects) when a
// mapping is done, we add a 'wekan' field to the object representing the
// imported member
const membersToMap = data.members;
const users = data.users;
// auto-map based on username
membersToMap.forEach(importedMember => {
importedMember.id = importedMember.userId;
delete importedMember.userId;
const user = users.filter(user => {
return user._id === importedMember.id;
})[0];
if (user.profile && user.profile.fullname) {
importedMember.fullName = user.profile.fullname;
}
importedMember.username = user.username;
const wekanUser = Users.findOne({ username: importedMember.username });
if (wekanUser) {
importedMember.wekanId = wekanUser._id;
}
});
return membersToMap;
}
checkActions(wekanActions) {
// XXX More check based on action type
check(wekanActions, [
Match.ObjectIncluding({
actionType: String,
desc: String,
}),
]);
}
// You must call parseActions before calling this one.
createBoardAndLabels(boardToImport) {
const boardToCreate = {
archived: boardToImport.archived,
color: boardToImport.color,
// very old boards won't have a creation activity so no creation date
createdAt: this._now(boardToImport.createdAt),
labels: [],
members: [
{
userId: Meteor.userId(),
wekanId: Meteor.userId(),
isActive: true,
isAdmin: true,
isNoComments: false,
isCommentOnly: false,
swimlaneId: false,
},
],
// Standalone Export has modifiedAt missing, adding modifiedAt to fix it
modifiedAt: this._now(boardToImport.modifiedAt),
permission: boardToImport.permission,
slug: getSlug(boardToImport.title) || 'board',
stars: 0,
title: boardToImport.title,
};
// now add other members
if (boardToImport.members) {
boardToImport.members.forEach(wekanMember => {
// do we already have it in our list?
if (
!boardToCreate.members.some(
member => member.wekanId === wekanMember.wekanId,
)
)
boardToCreate.members.push({
...wekanMember,
userId: wekanMember.wekanId,
});
});
}
boardToImport.labels.forEach(label => {
const labelToCreate = {
_id: Random.id(6),
color: label.color,
name: label.name,
};
// We need to remember them by Wekan ID, as this is the only ref we have
// when importing cards.
this.labels[label._id] = labelToCreate._id;
boardToCreate.labels.push(labelToCreate);
});
const boardId = Boards.direct.insert(boardToCreate);
Boards.direct.update(boardId, {
$set: {
modifiedAt: this._now(),
},
});
// log activity
Activities.direct.insert({
activityType: 'importBoard',
boardId,
createdAt: this._now(),
source: {
id: boardToImport.id,
system: 'Wekan',
},
// We attribute the import to current user,
// not the author from the original object.
userId: this._user(),
});
return boardId;
}
/**
* Create the Wekan cards corresponding to the supplied Wekan cards,
* as well as all linked data: activities, comments, and attachments
* @param wekanCards
* @param boardId
* @returns {Array}
*/
createCards(wekanCards, boardId) {
const result = [];
wekanCards.forEach(card => {
const cardToCreate = {
archived: card.archived,
boardId,
// very old boards won't have a creation activity so no creation date
createdAt: this._now(this.createdAt.cards[card._id]),
dateLastActivity: this._now(),
description: card.description,
listId: this.lists[card.listId],
swimlaneId: this.swimlanes[card.swimlaneId],
sort: card.sort,
title: card.title,
// we attribute the card to its creator if available
userId: this._user(this.createdBy.cards[card._id]),
isOvertime: card.isOvertime || false,
startAt: card.startAt ? this._now(card.startAt) : null,
dueAt: card.dueAt ? this._now(card.dueAt) : null,
spentTime: card.spentTime || null,
};
// add labels
if (card.labelIds) {
cardToCreate.labelIds = card.labelIds.map(wekanId => {
return this.labels[wekanId];
});
}
// add members {
if (card.members) {
const wekanMembers = [];
// we can't just map, as some members may not have been mapped
card.members.forEach(sourceMemberId => {
if (this.members[sourceMemberId]) {
const wekanId = this.members[sourceMemberId];
// we may map multiple Wekan members to the same wekan user
// in which case we risk adding the same user multiple times
if (!wekanMembers.find(wId => wId === wekanId)) {
wekanMembers.push(wekanId);
}
}
return true;
});
if (wekanMembers.length > 0) {
cardToCreate.members = wekanMembers;
}
}
// set color
if (card.color) {
cardToCreate.color = card.color;
}
// insert card
const cardId = Cards.direct.insert(cardToCreate);
// keep track of Wekan id => Wekan id
this.cards[card._id] = cardId;
// // log activity
// Activities.direct.insert({
// activityType: 'importCard',
// boardId,
// cardId,
// createdAt: this._now(),
// listId: cardToCreate.listId,
// source: {
// id: card._id,
// system: 'Wekan',
// },
// // we attribute the import to current user,
// // not the author of the original card
// userId: this._user(),
// });
// add comments
const comments = this.comments[card._id];
if (comments) {
comments.forEach(comment => {
const commentToCreate = {
boardId,
cardId,
createdAt: this._now(comment.createdAt),
text: comment.text,
// we attribute the comment to the original author, default to current user
userId: this._user(comment.userId),
};
// dateLastActivity will be set from activity insert, no need to
// update it ourselves
const commentId = CardComments.direct.insert(commentToCreate);
this.commentIds[comment._id] = commentId;
// Activities.direct.insert({
// activityType: 'addComment',
// boardId: commentToCreate.boardId,
// cardId: commentToCreate.cardId,
// commentId,
// createdAt: this._now(commentToCreate.createdAt),
// // we attribute the addComment (not the import)
// // to the original author - it is needed by some UI elements.
// userId: commentToCreate.userId,
// });
});
}
const attachments = this.attachments[card._id];
const wekanCoverId = card.coverId;
if (attachments) {
attachments.forEach(att => {
const file = new FS.File();
// Simulating file.attachData on the client generates multiple errors
// - HEAD returns null, which causes exception down the line
// - the template then tries to display the url to the attachment which causes other errors
// so we make it server only, and let UI catch up once it is done, forget about latency comp.
const self = this;
if (Meteor.isServer) {
if (att.url) {
file.attachData(att.url, function(error) {
file.boardId = boardId;
file.cardId = cardId;
file.userId = self._user(att.userId);
// The field source will only be used to prevent adding
// attachments' related activities automatically
file.source = 'import';
if (error) {
throw error;
} else {
const wekanAtt = Attachments.insert(file, () => {
// we do nothing
});
self.attachmentIds[att._id] = wekanAtt._id;
//
if (wekanCoverId === att._id) {
Cards.direct.update(cardId, {
$set: {
coverId: wekanAtt._id,
},
});
}
}
});
} else if (att.file) {
file.attachData(
new Buffer(att.file, 'base64'),
{
type: att.type,
},
error => {
file.name(att.name);
file.boardId = boardId;
file.cardId = cardId;
file.userId = self._user(att.userId);
// The field source will only be used to prevent adding
// attachments' related activities automatically
file.source = 'import';
if (error) {
throw error;
} else {
const wekanAtt = Attachments.insert(file, () => {
// we do nothing
});
this.attachmentIds[att._id] = wekanAtt._id;
//
if (wekanCoverId === att._id) {
Cards.direct.update(cardId, {
$set: {
coverId: wekanAtt._id,
},
});
}
}
},
);
}
}
// todo XXX set cover - if need be
});
}
result.push(cardId);
});
return result;
}
// Create labels if they do not exist and load this.labels.
createLabels(wekanLabels, board) {
wekanLabels.forEach(label => {
const color = label.color;
const name = label.name;
const existingLabel = board.getLabel(name, color);
if (existingLabel) {
this.labels[label.id] = existingLabel._id;
} else {
const idLabelCreated = board.pushLabel(name, color);
this.labels[label.id] = idLabelCreated;
}
});
}
createLists(wekanLists, boardId) {
wekanLists.forEach((list, listIndex) => {
const listToCreate = {
archived: list.archived,
boardId,
// We are being defensing here by providing a default date (now) if the
// creation date wasn't found on the action log. This happen on old
// Wekan boards (eg from 2013) that didn't log the 'createList' action
// we require.
createdAt: this._now(this.createdAt.lists[list.id]),
title: list.title,
sort: list.sort ? list.sort : listIndex,
};
const listId = Lists.direct.insert(listToCreate);
Lists.direct.update(listId, {
$set: {
updatedAt: this._now(),
},
});
this.lists[list._id] = listId;
// // log activity
// Activities.direct.insert({
// activityType: 'importList',
// boardId,
// createdAt: this._now(),
// listId,
// source: {
// id: list._id,
// system: 'Wekan',
// },
// // We attribute the import to current user,
// // not the creator of the original object
// userId: this._user(),
// });
});
}
createSwimlanes(wekanSwimlanes, boardId) {
wekanSwimlanes.forEach((swimlane, swimlaneIndex) => {
const swimlaneToCreate = {
archived: swimlane.archived,
boardId,
// We are being defensing here by providing a default date (now) if the
// creation date wasn't found on the action log. This happen on old
// Wekan boards (eg from 2013) that didn't log the 'createList' action
// we require.
createdAt: this._now(this.createdAt.swimlanes[swimlane._id]),
title: swimlane.title,
sort: swimlane.sort ? swimlane.sort : swimlaneIndex,
};
// set color
if (swimlane.color) {
swimlaneToCreate.color = swimlane.color;
}
const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate);
Swimlanes.direct.update(swimlaneId, {
$set: {
updatedAt: this._now(),
},
});
this.swimlanes[swimlane._id] = swimlaneId;
});
}
createChecklists(wekanChecklists) {
const result = [];
wekanChecklists.forEach((checklist, checklistIndex) => {
// Create the checklist
const checklistToCreate = {
cardId: this.cards[checklist.cardId],
title: checklist.title,
createdAt: checklist.createdAt,
sort: checklist.sort ? checklist.sort : checklistIndex,
};
const checklistId = Checklists.direct.insert(checklistToCreate);
this.checklists[checklist._id] = checklistId;
result.push(checklistId);
});
return result;
}
createTriggers(wekanTriggers, boardId) {
wekanTriggers.forEach(trigger => {
if (trigger.hasOwnProperty('labelId')) {
trigger.labelId = this.labels[trigger.labelId];
}
if (trigger.hasOwnProperty('memberId')) {
trigger.memberId = this.members[trigger.memberId];
}
trigger.boardId = boardId;
const oldId = trigger._id;
delete trigger._id;
this.triggers[oldId] = Triggers.direct.insert(trigger);
});
}
createActions(wekanActions, boardId) {
wekanActions.forEach(action => {
if (action.hasOwnProperty('labelId')) {
action.labelId = this.labels[action.labelId];
}
if (action.hasOwnProperty('memberId')) {
action.memberId = this.members[action.memberId];
}
action.boardId = boardId;
const oldId = action._id;
delete action._id;
this.actions[oldId] = Actions.direct.insert(action);
});
}
createRules(wekanRules, boardId) {
wekanRules.forEach(rule => {
// Create the rule
rule.boardId = boardId;
rule.triggerId = this.triggers[rule.triggerId];
rule.actionId = this.actions[rule.actionId];
delete rule._id;
Rules.direct.insert(rule);
});
}
createChecklistItems(wekanChecklistItems) {
wekanChecklistItems.forEach((checklistitem, checklistitemIndex) => {
// Create the checklistItem
const checklistItemTocreate = {
title: checklistitem.title,
checklistId: this.checklists[checklistitem.checklistId],
cardId: this.cards[checklistitem.cardId],
sort: checklistitem.sort ? checklistitem.sort : checklistitemIndex,
isFinished: checklistitem.isFinished,
};
const checklistItemId = ChecklistItems.direct.insert(
checklistItemTocreate,
);
this.checklistItems[checklistitem._id] = checklistItemId;
});
}
parseActivities(wekanBoard) {
wekanBoard.activities.forEach(activity => {
switch (activity.activityType) {
case 'addAttachment': {
// We have to be cautious, because the attachment could have been removed later.
// In that case Wekan still reports its addition, but removes its 'url' field.
// So we test for that
const wekanAttachment = wekanBoard.attachments.filter(attachment => {
return attachment._id === activity.attachmentId;
})[0];
if (typeof wekanAttachment !== 'undefined' && wekanAttachment) {
if (wekanAttachment.url || wekanAttachment.file) {
// we cannot actually create the Wekan attachment, because we don't yet
// have the cards to attach it to, so we store it in the instance variable.
const wekanCardId = activity.cardId;
if (!this.attachments[wekanCardId]) {
this.attachments[wekanCardId] = [];
}
this.attachments[wekanCardId].push(wekanAttachment);
}
}
break;
}
case 'addComment': {
const wekanComment = wekanBoard.comments.filter(comment => {
return comment._id === activity.commentId;
})[0];
const id = activity.cardId;
if (!this.comments[id]) {
this.comments[id] = [];
}
this.comments[id].push(wekanComment);
break;
}
case 'createBoard': {
this.createdAt.board = activity.createdAt;
break;
}
case 'createCard': {
const cardId = activity.cardId;
this.createdAt.cards[cardId] = activity.createdAt;
this.createdBy.cards[cardId] = activity.userId;
break;
}
case 'createList': {
const listId = activity.listId;
this.createdAt.lists[listId] = activity.createdAt;
break;
}
case 'createSwimlane': {
const swimlaneId = activity.swimlaneId;
this.createdAt.swimlanes[swimlaneId] = activity.createdAt;
break;
}
}
});
}
importActivities(activities, boardId) {
activities.forEach(activity => {
switch (activity.activityType) {
// Board related activities
// TODO: addBoardMember, removeBoardMember
case 'createBoard': {
Activities.direct.insert({
userId: this._user(activity.userId),
type: 'board',
activityTypeId: boardId,
activityType: activity.activityType,
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
// List related activities
// TODO: removeList, archivedList
case 'createList': {
Activities.direct.insert({
userId: this._user(activity.userId),
type: 'list',
activityType: activity.activityType,
listId: this.lists[activity.listId],
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
// Card related activities
// TODO: archivedCard, restoredCard, joinMember, unjoinMember
case 'createCard': {
Activities.direct.insert({
userId: this._user(activity.userId),
activityType: activity.activityType,
listId: this.lists[activity.listId],
cardId: this.cards[activity.cardId],
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
case 'moveCard': {
Activities.direct.insert({
userId: this._user(activity.userId),
oldListId: this.lists[activity.oldListId],
activityType: activity.activityType,
listId: this.lists[activity.listId],
cardId: this.cards[activity.cardId],
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
// Comment related activities
case 'addComment': {
Activities.direct.insert({
userId: this._user(activity.userId),
activityType: activity.activityType,
cardId: this.cards[activity.cardId],
commentId: this.commentIds[activity.commentId],
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
// Attachment related activities
case 'addAttachment': {
Activities.direct.insert({
userId: this._user(activity.userId),
type: 'card',
activityType: activity.activityType,
attachmentId: this.attachmentIds[activity.attachmentId],
cardId: this.cards[activity.cardId],
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
// Checklist related activities
case 'addChecklist': {
Activities.direct.insert({
userId: this._user(activity.userId),
activityType: activity.activityType,
cardId: this.cards[activity.cardId],
checklistId: this.checklists[activity.checklistId],
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
case 'addChecklistItem': {
Activities.direct.insert({
userId: this._user(activity.userId),
activityType: activity.activityType,
cardId: this.cards[activity.cardId],
checklistId: this.checklists[activity.checklistId],
checklistItemId: activity.checklistItemId.replace(
activity.checklistId,
this.checklists[activity.checklistId],
),
boardId,
createdAt: this._now(activity.createdAt),
});
break;
}
}
});
}
//check(board) {
check() {
//try {
// check(data, {
// membersMapping: Match.Optional(Object),
// });
// this.checkActivities(board.activities);
// this.checkBoard(board);
// this.checkLabels(board.labels);
// this.checkLists(board.lists);
// this.checkSwimlanes(board.swimlanes);
// this.checkCards(board.cards);
//this.checkChecklists(board.checklists);
// this.checkRules(board.rules);
// this.checkActions(board.actions);
//this.checkTriggers(board.triggers);
//this.checkChecklistItems(board.checklistItems);
//} catch (e) {
// throw new Meteor.Error('error-json-schema');
// }
}
create(board, currentBoardId) {
// TODO : Make isSandstorm variable global
const isSandstorm =
Meteor.settings &&
Meteor.settings.public &&
Meteor.settings.public.sandstorm;
if (isSandstorm && currentBoardId) {
const currentBoard = Boards.findOne(currentBoardId);
currentBoard.archive();
}
this.parseActivities(board);
const boardId = this.createBoardAndLabels(board);
this.createLists(board.lists, boardId);
this.createSwimlanes(board.swimlanes, boardId);
this.createCards(board.cards, boardId);
this.createChecklists(board.checklists);
this.createChecklistItems(board.checklistItems);
this.importActivities(board.activities, boardId);
this.createTriggers(board.triggers, boardId);
this.createActions(board.actions, boardId);
this.createRules(board.rules, boardId);
// XXX add members
return boardId;
}
}
+2 -2
View File
@@ -1,9 +1,9 @@
dist: disco
dist: focal
sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.14.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 = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, 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
+3607 -4
View File
File diff suppressed because it is too large. Load diff
+42 -8
View File
@@ -1,13 +1,19 @@
FROM ubuntu:rolling
FROM quay.io/wekan/ubuntu:hirsute-20210825
LABEL maintainer="wekan"
# 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)
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
# ENV BUILD_DEPS="paxctl"
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.14.1 \
METEOR_RELEASE=1.9.0 \
NODE_VERSION=v12.22.6 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
@@ -15,6 +21,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
RESULTS_PER_PAGE="" \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
@@ -26,6 +33,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
ATTACHMENTS_STORE_PATH="" \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
BIGEVENTS_PATTERN=NONE \
NOTIFY_DUE_DAYS_BEFORE_AND_AFTER="" \
NOTIFY_DUE_AT_HOUR_OF_DAY="" \
@@ -38,6 +46,8 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
OAUTH2_CLIENT_ID="" \
OAUTH2_SECRET="" \
@@ -54,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 \
@@ -71,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="" \
@@ -110,7 +121,25 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
CORS="" \
CORS_ALLOW_HEADERS="" \
CORS_EXPOSE_HEADERS="" \
DEFAULT_AUTHENTICATION_METHOD=""
DEFAULT_AUTHENTICATION_METHOD="" \
PASSWORD_LOGIN_ENABLED=true \
CAS_ENABLED=false \
CAS_BASE_URL="" \
CAS_LOGIN_URL="" \
CAS_VALIDATE_URL="" \
SAML_ENABLED=false \
SAML_PROVIDER="" \
SAML_ENTRYPOINT="" \
SAML_ISSUER="" \
SAML_CERT="" \
SAML_IDPSLO_REDIRECTURL="" \
SAML_PRIVATE_KEYFILE="" \
SAML_PUBLIC_CERTFILE="" \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
ORACLE_OIM_ENABLED=false \
WAIT_SPINNER=""
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
@@ -248,11 +277,12 @@ RUN \
mkdir -p /home/wekan/.npm && \
chown wekan --recursive /home/wekan/.npm /home/wekan/.config /home/wekan/.meteor && \
#gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs && \
chown wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#chown wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
@@ -265,8 +295,11 @@ RUN \
#find . -name "*phantomjs*" | xargs rm -rf && \
#
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
#gosu wekan:wekan npm install bcrypt && \
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
mv /home/wekan/app_build/bundle /build && \
\
# Put back the original tar
@@ -276,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 && \
+77
View File
@@ -0,0 +1,77 @@
FROM amd64/alpine:3.7 AS builder
# Set the environment variables for builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.6 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64
# Install dependencies
RUN apk update && apk add ca-certificates outils-sha1 && \
\
# Download qemu static for our architecture
wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCHITECTURE}-static.tar.gz -O - | tar -xz && \
\
# Download wekan and shasum
wget https://releases.wekan.team/raspi3/wekan-${WEKAN_VERSION}-${WEKAN_ARCHITECTURE}.zip && \
wget https://releases.wekan.team/raspi3/SHA256SUMS.txt && \
# Verify wekan
grep wekan-${WEKAN_VERSION}-${WEKAN_ARCHITECTURE}.zip SHA256SUMS.txt | sha256sum -c - && \
\
# Unzip wekan
unzip wekan-${WEKAN_VERSION}-${WEKAN_ARCHITECTURE}.zip && \
\
# Download node and shasums
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_ARCHITECTURE}.tar.gz && \
wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
\
# Verify nodejs authenticity
grep node-${NODE_VERSION}-${NODE_ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | sha256sum -c - && \
\
# Extract node and remove tar.gz
tar xvzf node-${NODE_VERSION}-${NODE_ARCHITECTURE}.tar.gz
# Build wekan dockerfile
FROM arm64v8/ubuntu:19.10
LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.6 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
PORT=8080 \
ROOT_URL=http://localhost \
MONGO_URL=mongodb://127.0.0.1:27017/wekan
# Copy qemu-static to image
COPY --from=builder qemu-${QEMU_ARCHITECTURE}-static /usr/bin
# Copy the app to the image
COPY --from=builder bundle /home/wekan/bundle
# Copy
COPY --from=builder node-${NODE_VERSION}-${NODE_ARCHITECTURE} /opt/nodejs
RUN \
set -o xtrace && \
# Add non-root user wekan
useradd --user-group --system --home-dir /home/wekan wekan && \
\
# Install Node
ln -s /opt/nodejs/bin/node /usr/bin/node && \
ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/8.16.1 /home/wekan/.config && \
chown wekan --recursive /home/wekan/.config && \
\
# Install Node dependencies
npm install -g npm@${NPM_VERSION}
EXPOSE $PORT
USER wekan
CMD ["node", "/home/wekan/bundle/main.js"]
+18 -13
View File
@@ -1,3 +1,5 @@
[![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
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
@@ -10,6 +12,7 @@
[![Project Dependencies](https://david-dm.org/wekan/wekan.svg "Project Dependencies")](https://david-dm.org/wekan/wekan)
[![Code analysis at Open Hub](https://img.shields.io/badge/code%20analysis-at%20Open%20Hub-brightgreen.svg "Code analysis at Open Hub")](https://www.openhub.net/p/wekan)
[![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)
@@ -18,21 +21,25 @@ New English strings of new features can be added as PRs to edge branch file weka
## [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
[![Wekan Chat][vanila_badge]][wekan_chat] - Most Wekan community and developers are here. Works on webbrowser
and PWA app that can be added as icon on Android and bookmark on iOS, used like native app.
[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**:
**NOTE**:
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
- Please don't feed the trolls and spammers that are mentioned in the FAQ :)
- 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
@@ -50,7 +57,7 @@ that by providing one-click installation on various platforms.
- 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 50 languages.
- 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.
@@ -61,14 +68,14 @@ that by providing one-click installation on various platforms.
[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.
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/devel/docker-compose.yml): 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
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.
- [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).
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.
@@ -80,7 +87,7 @@ that by providing one-click installation on various platforms.
[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).
[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/).
@@ -112,8 +119,6 @@ with [Meteor](https://www.meteor.com).
[translate_wekan]: https://www.transifex.com/wekan/wekan/
[open_source]: https://en.wikipedia.org/wiki/Open-source_software
[free_software]: https://en.wikipedia.org/wiki/Free_software
[vanila_badge]: https://vanila.io/img/join-chat-button2.png
[wekan_chat]: https://community.vanila.io/wekan
[discussions]: https://github.com/wekan/wekan/discussions
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_large)
+7 -7
View File
@@ -1,10 +1,10 @@
Security is very important to us. If you discover any issue regarding security, please disclose
the information responsibly by sending an email to security (at) wekan.team and not by
the information responsibly by sending an email to support (at) wekan.team using
[this PGP public key](support-at-wekan.team_pgp-publickey.asc) and not by
creating a GitHub issue. We will respond swiftly to fix verifiable security issues.
We thank you with a place at our hall of fame page, that is
at https://wekan.github.io/hall-of-fame . Others have just posted public GitHub issue,
so they are not at that hall-of-fame page.
at https://wekan.github.io/hall-of-fame
## How should reports be formatted?
@@ -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: "v3.74.0"
appVersion: "v5.63.0"
files:
userUploads:
- README.md
Executable
+291
View File
@@ -0,0 +1,291 @@
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# vi:ts=4:et
# Wekan API Python CLI, originally from here, where is more details:
# https://github.com/wekan/wekan/wiki/New-card-with-Python3-and-REST-API
try:
# python 3
from urllib.parse import urlencode
except ImportError:
# python 2
from urllib import urlencode
import json
import requests
import sys
arguments = len(sys.argv) - 1
if arguments == 0:
print("=== Wekan API Python CLI: Shows IDs for addcard ===")
print("AUTHORID is USERID that writes card.")
print("If *nix: chmod +x api.py => ./api.py users")
print("Syntax:")
print(" python3 api.py users # All users")
print(" python3 api.py boards USERID # Boards of USERID")
print(" python3 api.py board BOARDID # Info of BOARDID")
print(" python3 api.py swimlanes BOARDID # Swimlanes of BOARDID")
print(" python3 api.py lists BOARDID # Lists of BOARDID")
print(" python3 api.py list BOARDID LISTID # Info of LISTID")
print(" python3 api.py createlist BOARDID LISTTITLE # Create list")
print(" python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION")
print(" python3 api.py editcard BOARDID LISTID CARDID NEWCARDTITLE NEWCARDDESCRIPTION")
print(" python3 api.py listattachments BOARDID # List attachments")
# TODO:
# print(" python3 api.py attachmentjson BOARDID ATTACHMENTID # One attachment as JSON base64")
# print(" python3 api.py attachmentbinary BOARDID ATTACHMENTID # One attachment as binary file")
# print(" python3 api.py attachmentdownload BOARDID ATTACHMENTID # One attachment as file")
# print(" python3 api.py attachmentsdownload BOARDID # All attachments as files")
exit
# ------- SETTINGS START -------------
# Username is your Wekan username or email address.
# OIDC/OAuth2 etc uses email address as username.
username = 'testtest'
password = 'testtest'
wekanurl = 'http://localhost:4000/'
# ------- SETTINGS END -------------
"""
EXAMPLE:
python3 api.py
OR:
chmod +x api.py
./api.py
=== Wekan API Python CLI: Shows IDs for addcard ===
AUTHORID is USERID that writes card.
Syntax:
python3 api.py users # All users
python3 api.py boards USERID # Boards of USERID
python3 api.py board BOARDID # Info of BOARDID
python3 api.py swimlanes BOARDID # Swimlanes of BOARDID
python3 api.py lists BOARDID # Lists of BOARDID
python3 api.py list BOARDID LISTID # Info of LISTID
python3 api.py createlist BOARDID LISTTITLE # Create list
python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
python3 api.py editcard BOARDID LISTID CARDID NEWCARDTITLE NEWCARDDESCRIPTION
python3 api.py listattachments BOARDID # List attachments
python3 api.py attachmentjson BOARDID ATTACHMENTID # One attachment as JSON base64
python3 api.py attachmentbinary BOARDID ATTACHMENTID # One attachment as binary file
=== USERS ===
python3 api.py users
=> abcd1234
=== BOARDS ===
python3 api.py boards abcd1234
=== SWIMLANES ===
python3 api.py swimlanes dYZ
[{"_id":"Jiv","title":"Default"}
]
=== LISTS ===
python3 api.py lists dYZ
[]
There is no lists, so create a list:
=== CREATE LIST ===
python3 api.py createlist dYZ 'Test'
{"_id":"7Kp"}
# python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
python3 api.py addcard ppg dYZ Jiv 7Kp 'Test card' 'Test description'
=== LIST ATTACHMENTS WITH DOWNLOAD URLs ====
python3 api.py listattachments BOARDID
"""
# ------- API URL GENERATION START -----------
loginurl = 'users/login'
wekanloginurl = wekanurl + loginurl
apiboards = 'api/boards/'
apiattachments = 'api/attachments/'
apiusers = 'api/users'
e = 'export'
s = '/'
l = 'lists'
sw = 'swimlane'
sws = 'swimlanes'
cs = 'cards'
bs = 'boards'
atl = 'attachmentslist'
at = 'attachment'
ats = 'attachments'
users = wekanurl + apiusers
# ------- API URL GENERATION END -----------
# ------- LOGIN TOKEN START -----------
data = {"username": username, "password": password}
body = requests.post(wekanloginurl, data=data)
d = body.json()
apikey = d['token']
# ------- LOGIN TOKEN END -----------
if arguments == 7:
if sys.argv[1] == 'addcard':
# ------- WRITE TO CARD START -----------
authorid = sys.argv[2]
boardid = sys.argv[3]
swimlaneid = sys.argv[4]
listid = sys.argv[5]
cardtitle = sys.argv[6]
carddescription = sys.argv[7]
cardtolist = wekanurl + apiboards + boardid + s + l + s + listid + s + cs
# Write to card
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'authorId': '{}'.format(authorid), 'title': '{}'.format(cardtitle), 'description': '{}'.format(carddescription), 'swimlaneId': '{}'.format(swimlaneid)}
body = requests.post(cardtolist, data=post_data, headers=headers)
print(body.text)
# ------- WRITE TO CARD END -----------
if arguments == 6:
if sys.argv[1] == 'editcard':
# ------- LIST OF BOARD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
newcardtitle = sys.argv[5]
newcarddescription = sys.argv[6]
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
print(edcard)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
put_data = {'title': '{}'.format(newcardtitle), 'description': '{}'.format(newcarddescription)}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== EDIT CARD ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF BOARD END -----------
if arguments == 3:
if sys.argv[1] == 'createlist':
# ------- CREATE LIST START -----------
boardid = sys.argv[2]
listtitle = sys.argv[3]
list = wekanurl + apiboards + boardid + s + l
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'title': '{}'.format(listtitle)}
body = requests.post(list, data=post_data, headers=headers)
print("=== CREATE LIST ===\n")
print(body.text)
# ------- CREATE LIST END -----------
if sys.argv[1] == 'list':
# ------- LIST OF BOARD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
listone = wekanurl + apiboards + boardid + s + l + s + listid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== INFO OF ONE LIST ===\n")
body = requests.get(listone, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF BOARD END -----------
if arguments == 2:
# ------- BOARDS LIST START -----------
userid = sys.argv[2]
boards = users + s + userid + s + bs
if sys.argv[1] == 'boards':
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
#post_data = {'userId': '{}'.format(userid)}
body = requests.get(boards, headers=headers)
print("=== BOARDS ===\n")
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- BOARDS LIST END -----------
if sys.argv[1] == 'board':
# ------- BOARD INFO START -----------
boardid = sys.argv[2]
board = wekanurl + apiboards + boardid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
body = requests.get(board, headers=headers)
print("=== BOARD ===\n")
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- BOARD INFO END -----------
if sys.argv[1] == 'swimlanes':
boardid = sys.argv[2]
swimlanes = wekanurl + apiboards + boardid + s + sws
# ------- SWIMLANES OF BOARD START -----------
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== SWIMLANES ===\n")
body = requests.get(swimlanes, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- SWIMLANES OF BOARD END -----------
if sys.argv[1] == 'lists':
# ------- LISTS OF BOARD START -----------
boardid = sys.argv[2]
lists = wekanurl + apiboards + boardid + s + l
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== LISTS ===\n")
body = requests.get(lists, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF BOARD END -----------
if sys.argv[1] == 'listattachments':
# ------- LISTS OF ATTACHMENTS START -----------
boardid = sys.argv[2]
listattachments = wekanurl + apiboards + boardid + s + ats
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== LIST OF ATTACHMENTS ===\n")
body = requests.get(listattachments, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF ATTACHMENTS END -----------
if arguments == 1:
if sys.argv[1] == 'users':
# ------- LIST OF USERS START -----------
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print(users)
print("=== USERS ===\n")
body = requests.get(users, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LIST OF USERS END -----------
+6
View File
@@ -0,0 +1,6 @@
// PWA
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/pwa-service-worker.js');
});
}
+223 -206
View File
@@ -8,234 +8,251 @@ template(name="activities")
+cardActivities
template(name="boardActivities")
each currentBoard.activities
.activity
+userAvatar(userId=user._id)
p.activity-desc
+memberName(user=user)
if($eq activityType 'deleteAttachment')
| {{{_ 'activity-delete-attach' cardLink}}}.
if($eq activityType 'addAttachment')
| {{{_ 'activity-attached' attachmentLink cardLink}}}.
if($eq activityType 'addBoardMember')
| {{{_ 'activity-added' memberLink boardLabel}}}.
if($eq activityType 'addComment')
| {{{_ 'activity-on' cardLink}}}
a.activity-comment(href="{{ card.absoluteUrl }}")
+viewer
= comment.text
if($eq activityType 'addChecklist')
| {{{_ 'activity-checklist-added' cardLink}}}.
.activity-checklist(href="{{ card.absoluteUrl }}")
+viewer
= checklist.title
if($eq activityType 'removeChecklist')
| {{{_ 'activity-checklist-removed' cardLink}}}.
if($eq activityType 'checkedItem')
| {{{_ 'activity-checked-item' checkItem checklist.title cardLink}}}.
if($eq activityType 'uncheckedItem')
| {{{_ 'activity-unchecked-item' checkItem checklist.title cardLink}}}.
if($eq activityType 'checklistCompleted')
| {{{_ 'activity-checklist-completed' checklist.title cardLink}}}.
if($eq activityType 'checklistUncompleted')
| {{{_ 'activity-checklist-uncompleted' checklist.title cardLink}}}.
if($eq activityType 'addChecklistItem')
| {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}.
.activity-checklist(href="{{ card.absoluteUrl }}")
+viewer
= checklistItem.title
if($eq activityType 'removedChecklistItem')
| {{{_ 'activity-checklist-item-removed' checklist.title cardLink}}}.
if($eq activityType 'archivedCard')
| {{{_ 'activity-archived' cardLink}}}.
if($eq activityType 'archivedList')
| {{_ 'activity-archived' list.title}}.
if($eq activityType 'archivedSwimlane')
| {{_ 'activity-archived' swimlane.title}}.
if($eq activityType 'createBoard')
| {{_ 'activity-created' boardLabel}}.
if($eq activityType 'createCard')
| {{{_ 'activity-added' cardLink boardLabel}}}.
if($eq activityType 'createCustomField')
| {{_ 'activity-customfield-created' customField}}.
if($eq activityType 'createList')
| {{_ 'activity-added' list.title boardLabel}}.
if($eq activityType 'createSwimlane')
| {{_ 'activity-added' swimlane.title boardLabel}}.
if($eq activityType 'removeList')
| {{_ 'activity-removed' title boardLabel}}.
if($eq activityType 'importBoard')
| {{{_ 'activity-imported-board' boardLabel sourceLink}}}.
if($eq activityType 'importCard')
| {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}.
if($eq activityType 'importList')
| {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}.
if($eq activityType 'joinMember')
if($eq user._id member._id)
| {{{_ 'activity-joined' cardLink}}}.
else
| {{{_ 'activity-added' memberLink cardLink}}}.
if($eq activityType 'moveCardBoard')
| {{{_ 'activity-moved' cardLink oldBoardName boardName}}}.
if($eq activityType 'moveCard')
| {{{_ 'activity-moved' cardLink oldList.title list.title}}}.
if($eq activityType 'removeBoardMember')
| {{{_ 'activity-excluded' memberLink boardLabel}}}.
if($eq activityType 'restoredCard')
| {{{_ 'activity-sent' cardLink boardLabel}}}.
if($eq activityType 'addedLabel')
| {{{_ 'activity-added-label' lastLabel cardLink}}}.
if($eq activityType 'removedLabel')
| {{{_ 'activity-removed-label' lastLabel cardLink}}}.
if($eq activityType 'setCustomField')
| {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}.
if($eq activityType 'unsetCustomField')
| {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}.
if($eq activityType 'unjoinMember')
if($eq user._id member._id)
| {{{_ 'activity-unjoined' cardLink}}}.
else
| {{{_ 'activity-removed' memberLink cardLink}}}.
span(title=createdAt).activity-meta {{ moment createdAt }}
each activityData in currentBoard.activities
+activity(activity=activityData card=card mode=mode)
template(name="cardActivities")
each currentCard.activities
.activity
+userAvatar(userId=user._id)
p.activity-desc
+memberName(user=user)
if($eq activityType 'createCard')
| {{_ 'activity-added' cardLabel listName}}.
if($eq activityType 'importCard')
| {{{_ 'activity-imported' cardLabel list.title sourceLink}}}.
if($eq activityType 'joinMember')
if($eq user._id member._id)
| {{_ 'activity-joined' cardLabel}}.
else
| {{{_ 'activity-added' memberLink cardLabel}}}.
if($eq activityType 'unjoinMember')
if($eq user._id member._id)
| {{_ 'activity-unjoined' cardLabel}}.
else
| {{{_ 'activity-removed' cardLabel memberLink}}}.
if($eq activityType 'archivedCard')
| {{_ 'activity-archived' cardLabel}}.
each activityData in currentCard.activities
+activity(activity=activityData card=card mode=mode)
if($eq activityType 'addedLabel')
| {{{_ 'activity-added-label-card' lastLabel }}}.
template(name="editOrDeleteComment")
= ' - '
a.js-open-inlined-form {{_ "edit"}}
= ' - '
a.js-delete-comment {{_ "delete"}}
if($eq activityType 'removedLabel')
| {{{_ 'activity-removed-label-card' lastLabel }}}.
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
if($eq activityType 'removeChecklist')
| {{{_ 'activity-checklist-removed' cardLabel}}}.
template(name="addReactionPopup")
.reactions-popup
each codepoint in codepoints
span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint}
if($eq activityType 'checkedItem')
| {{{_ 'activity-checked-item-card' checkItem checklist.title }}}.
template(name="activity")
.activity
+userAvatar(userId=activity.user._id)
p.activity-desc
span.activity-member
+memberName(user=activity.user)
if($eq activityType 'uncheckedItem')
| {{{_ 'activity-unchecked-item-card' checkItem checklist.title }}}.
//- attachment activity -------------------------------------------------
if($eq activity.activityType 'deleteAttachment')
| {{{_ 'activity-delete-attach' cardLink}}}.
if($eq activityType 'checklistCompleted')
| {{{_ 'activity-checklist-completed-card' checklist.title }}}.
if($eq activity.activityType 'addAttachment')
| {{{_ 'activity-attached' attachmentLink cardLink}}}.
if($neq mode 'board')
if activity.attachment.isImage
img.attachment-image-preview(src=activity.attachment.url)
if($eq activityType 'checklistUncompleted')
| {{{_ 'activity-checklist-uncompleted-card' checklist.title }}}.
//- board activity ------------------------------------------------------
if($eq mode 'board')
if($eq activity.activityType 'createBoard')
| {{{_ 'activity-created' boardLabelLink}}}.
if($eq activityType 'restoredCard')
| {{_ 'activity-sent' cardLabel boardLabel}}.
if($eq activityType 'moveCard')
| {{_ 'activity-moved' cardLabel oldList.title list.title}}.
if($eq activity.activityType 'importBoard')
| {{{_ 'activity-imported-board' boardLabelLink sourceLink}}}.
if($eq activityType 'moveCardBoard')
| {{{_ 'activity-moved' cardLink oldBoardName boardName}}}.
if($eq activity.activityType 'addBoardMember')
| {{{_ 'activity-added' memberLink boardLabelLink}}}.
if($eq activityType 'addAttachment')
| {{{_ 'activity-attached' attachmentLink cardLabel}}}.
if attachment.isImage
img.attachment-image-preview(src=attachment.url)
if($eq activityType 'deleteAttachment')
| {{{_ 'activity-delete-attach' cardLabel}}}.
if($eq activityType 'removedChecklist')
| {{{_ 'activity-checklist-removed' cardLabel}}}.
if($eq activityType 'addChecklist')
| {{{_ 'activity-checklist-added' cardLabel}}}.
if($eq activity.activityType 'removeBoardMember')
| {{{_ 'activity-excluded' memberLink boardLabelLink}}}.
//- card activity -------------------------------------------------------
if($eq activity.activityType 'createCard')
if($eq mode 'card')
| {{{_ 'activity-added' cardLabelLink (sanitize activity.listName)}}}.
else
| {{{_ 'activity-added' cardLabelLink boardLabelLink}}}.
if($eq activity.activityType 'importCard')
| {{{_ 'activity-imported' cardLink boardLabelLink sourceLink}}}.
if($eq activity.activityType 'moveCard')
| {{{_ 'activity-moved' cardLabelLink (sanitize activity.oldList.title) (sanitize activity.list.title)}}}.
if($eq activity.activityType 'moveCardBoard')
| {{{_ 'activity-moved' cardLink (sanitize activity.oldBoardName) (sanitize activity.boardName)}}}.
if($eq activity.activityType 'archivedCard')
| {{{_ 'activity-archived' cardLink}}}.
if($eq activity.activityType 'restoredCard')
| {{{_ 'activity-sent' cardLink boardLabelLink}}}.
//- checklist activity --------------------------------------------------
if($eq activity.activityType 'addChecklist')
| {{{_ 'activity-checklist-added' cardLink}}}.
if($eq mode 'card')
.activity-checklist
+viewer
= checklist.title
if($eq activityType 'addChecklistItem')
| {{{_ 'activity-checklist-item-added' checklist.title cardLink}}}.
.activity-checklist(href="{{ card.absoluteUrl }}")
= activity.checklist.title
else
a.activity-checklist(href="{{ activity.card.originRelativeUrl }}")
+viewer
= checklistItem.title
if(currentData.timeKey)
| {{{_ activityType }}}
= ' '
i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }}
if (currentData.timeOldValue)
= ' '
| {{{_ "previous_as" }}}
= ' '
i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }}
= ' @'
else if(currentData.timeValue)
| {{{_ activityType currentData.timeValue}}}
= activity.checklist.title
if($eq activityType 'deleteComment')
| {{{_ 'activity-deleteComment' currentData.commentId}}}.
if($eq activityType 'editComment')
| {{{_ 'activity-editComment' currentData.commentId}}}.
if($eq activityType 'addComment')
if($eq activity.activityType 'removedChecklist')
| {{{_ 'activity-checklist-removed' cardLink}}}.
if($eq activity.activityType 'completeChecklist')
| {{{_ 'activity-checklist-completed' (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'uncompleteChecklist')
| {{{_ 'activity-checklist-uncompleted' (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'checkedItem')
| {{{_ 'activity-checked-item' (sanitize checkItem) (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'uncheckedItem')
| {{{_ 'activity-unchecked-item' (sanitize checkItem) (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'addChecklistItem')
| {{{_ 'activity-checklist-item-added' (sanitize activity.checklist.title) cardLink}}}.
.activity-checklist(href="{{ activity.card.originRelativeUrl }}")
+viewer
= activity.checklistItem.title
if($eq activity.activityType 'removedChecklistItem')
| {{{_ 'activity-checklist-item-removed' (sanitize activity.checklist.title) cardLink}}}.
//- comment activity ----------------------------------------------------
if($eq mode 'card')
//- if we are in card mode we display the comment in a way that it
//- can be edited by the owner
if($eq activity.activityType 'addComment')
+inlinedForm(classNames='js-edit-comment')
+editor(autofocus=true)
= comment.text
= activity.comment.text
.edit-controls
button.primary(type="submit") {{_ 'edit'}}
else
.activity-comment
+viewer
= comment.text
span(title=createdAt).activity-meta {{ moment createdAt }}
if ($eq currentUser._id comment.userId)
= ' - '
a.js-open-inlined-form {{_ "edit"}}
= ' - '
a.js-delete-comment {{_ "delete"}}
= 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
else if currentUser.isBoardAdmin
+editOrDeleteComment
if($eq activity.activityType 'deleteComment')
| {{{_ 'activity-deleteComment' currentData.commentId}}}.
if($eq activity.activityType 'editComment')
| {{{_ 'activity-editComment' currentData.commentId}}}.
else
//- if we are not in card mode we only display a summary of the comment
if($eq activity.activityType 'addComment')
| {{{_ 'activity-on' cardLink}}}
a.activity-comment(href="{{ activity.card.originRelativeUrl }}")
+viewer
= activity.comment.text
//- date activity ------------------------------------------------
if($eq mode 'card')
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}}}.
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}}}.
if($eq activity.activityType 'a-endAt')
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
//- customField activity ------------------------------------------------
if($eq mode 'board')
if($eq activity.activityType 'createCustomField')
| {{_ 'activity-customfield-created' customField}}.
if($eq activity.activityType 'setCustomField')
| {{{_ 'activity-set-customfield' (sanitize lastCustomField) (sanitize lastCustomFieldValue) cardLink}}}.
if($eq activity.activityType 'unsetCustomField')
| {{{_ 'activity-unset-customfield' (sanitize lastCustomField) cardLink}}}.
//- label activity ------------------------------------------------------
if($eq activity.activityType 'addedLabel')
| {{{_ 'activity-added-label' (sanitize lastLabel) cardLink}}}.
if($eq activity.activityType 'removedLabel')
| {{{_ 'activity-removed-label' (sanitize lastLabel) cardLink}}}.
//- list activity -------------------------------------------------------
if($neq mode 'card')
if($eq activity.activityType 'createList')
| {{{_ 'activity-added' (sanitize listLabel) boardLabelLink}}}.
if($eq activity.activityType 'importList')
| {{{_ 'activity-imported' (sanitize listLabel) boardLabelLink sourceLink}}}.
if($eq activity.activityType 'removeList')
| {{{_ 'activity-removed' (sanitize activity.title) boardLabelLink}}}.
if($eq activity.activityType 'archivedList')
| {{_ 'activity-archived' (sanitize listLabel)}}.
//- member activity ----------------------------------------------------
if($eq activity.activityType 'joinMember')
if($eq user._id activity.member._id)
| {{{_ 'activity-joined' cardLink}}}.
else
span(title=createdAt).activity-meta {{ moment createdAt }}
| {{{_ 'activity-added' memberLink cardLink}}}.
if($eq activity.activityType 'unjoinMember')
if($eq user._id activity.member._id)
| {{{_ 'activity-unjoined' cardLink}}}.
else
| {{{_ 'activity-removed' memberLink cardLink}}}.
//- swimlane activity --------------------------------------------------
if($neq mode 'card')
if($eq activity.activityType 'createSwimlane')
| {{_ 'activity-added' (sanitize activity.swimlane.title) boardLabelLink}}.
if($eq activity.activityType 'archivedSwimlane')
| {{_ 'activity-archived' (sanitize activity.swimlane.title)}}.
//- I don't understand this part ----------------------------------------
if(currentData.timeKey)
| {{_ activity.activityType }}
= ' '
i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }}
if (currentData.timeOldValue)
= ' '
| {{{_ "previous_as" }}}
= ' '
i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }}
= ' @'
else if(currentData.timeValue)
| {{_ activity.activityType currentData.timeValue}}
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
+178 -50
View File
@@ -1,12 +1,15 @@
const activitiesPerPage = 20;
import DOMPurify from 'dompurify';
const activitiesPerPage = 500;
BlazeComponent.extendComponent({
onCreated() {
// XXX Should we use ReactiveNumber?
this.page = new ReactiveVar(1);
this.loadNextPageLocked = false;
const sidebar = this.parentComponent(); // XXX for some reason not working
sidebar.callFirstWith(null, 'resetNextPeak');
// TODO is sidebar always available? E.g. on small screens/mobile devices
const sidebar = Sidebar;
sidebar && sidebar.callFirstWith(null, 'resetNextPeak');
this.autorun(() => {
let mode = this.data().mode;
const capitalizedMode = Utils.capitalize(mode);
@@ -27,6 +30,8 @@ BlazeComponent.extendComponent({
this.subscribe('activities', mode, searchId, limit, hideSystem, () => {
this.loadNextPageLocked = false;
// TODO the guard can be removed as soon as the TODO above is resolved
if (!sidebar) return;
// If the sibear peak hasn't increased, that mean that there are no more
// activities, and we can stop calling new subscriptions.
// XXX This is hacky! We need to know excatly and reactively how many
@@ -41,60 +46,83 @@ BlazeComponent.extendComponent({
});
});
},
loadNextPage() {
if (this.loadNextPageLocked === false) {
this.page.set(this.page.get() + 1);
this.loadNextPageLocked = true;
}
},
}).register('activities');
BlazeComponent.extendComponent({
checkItem() {
const checkItemId = this.currentData().checklistItemId;
const checkItemId = this.currentData().activity.checklistItemId;
const checkItem = ChecklistItems.findOne({ _id: checkItemId });
return checkItem.title;
return checkItem && checkItem.title;
},
boardLabel() {
boardLabelLink() {
const data = this.currentData();
if (data.mode !== 'board') {
return createBoardLink(data.activity.board(), data.activity.listName);
}
return TAPi18n.__('this-board');
},
cardLabel() {
cardLabelLink() {
const data = this.currentData();
if (data.mode !== 'card') {
return createCardLink(data.activity.card());
}
return TAPi18n.__('this-card');
},
cardLink() {
const card = this.currentData().card();
return (
card &&
Blaze.toHTML(
HTML.A(
{
href: card.absoluteUrl(),
class: 'action-card',
},
card.title,
),
)
);
return createCardLink(this.currentData().activity.card());
},
receivedDate() {
const receivedDate = this.currentData().activity.card();
if (!receivedDate) return null;
return receivedDate.receivedAt;
},
startDate() {
const startDate = this.currentData().activity.card();
if (!startDate) return null;
return startDate.startAt;
},
dueDate() {
const dueDate = this.currentData().activity.card();
if (!dueDate) return null;
return dueDate.dueAt;
},
endDate() {
const endDate = this.currentData().activity.card();
if (!endDate) return null;
return endDate.endAt;
},
lastLabel() {
const lastLabelId = this.currentData().labelId;
const lastLabelId = this.currentData().activity.labelId;
if (!lastLabelId) return null;
const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(
lastLabelId,
);
const lastLabel = Boards.findOne(
this.currentData().activity.boardId,
).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;
}
},
lastCustomField() {
const lastCustomField = CustomFields.findOne(
this.currentData().customFieldId,
this.currentData().activity.customFieldId,
);
if (!lastCustomField) return null;
return lastCustomField.name;
@@ -102,10 +130,10 @@ BlazeComponent.extendComponent({
lastCustomFieldValue() {
const lastCustomField = CustomFields.findOne(
this.currentData().customFieldId,
this.currentData().activity.customFieldId,
);
if (!lastCustomField) return null;
const value = this.currentData().value;
const value = this.currentData().activity.value;
if (
lastCustomField.settings.dropdownItems &&
lastCustomField.settings.dropdownItems.length > 0
@@ -122,11 +150,13 @@ BlazeComponent.extendComponent({
},
listLabel() {
return this.currentData().list().title;
const activity = this.currentData().activity;
const list = activity.list();
return (list && list.title) || activity.title;
},
sourceLink() {
const source = this.currentData().source;
const source = this.currentData().activity.source;
if (source) {
if (source.url) {
return Blaze.toHTML(
@@ -134,11 +164,15 @@ BlazeComponent.extendComponent({
{
href: source.url,
},
source.system,
DOMPurify.sanitize(source.system, {
ALLOW_UNKNOWN_PROTOCOLS: true,
}),
),
);
} else {
return source.system;
return DOMPurify.sanitize(source.system, {
ALLOW_UNKNOWN_PROTOCOLS: true,
});
}
}
return null;
@@ -146,30 +180,31 @@ BlazeComponent.extendComponent({
memberLink() {
return Blaze.toHTMLWithData(Template.memberName, {
user: this.currentData().member(),
user: this.currentData().activity.member(),
});
},
attachmentLink() {
const attachment = this.currentData().attachment();
const attachment = this.currentData().activity.attachment();
// trying to display url before file is stored generates js errors
return (
attachment &&
attachment.url({ download: true }) &&
Blaze.toHTML(
HTML.A(
{
href: attachment.url({ download: true }),
target: '_blank',
},
attachment.name(),
),
)
(attachment &&
attachment.url({ download: true }) &&
Blaze.toHTML(
HTML.A(
{
href: attachment.url({ download: true }),
target: '_blank',
},
DOMPurify.sanitize(attachment.name()),
),
)) ||
DOMPurify.sanitize(this.currentData().activity.attachmentName)
);
},
customField() {
const customField = this.currentData().customField();
const customField = this.currentData().activity.customField();
if (!customField) return null;
return customField.name;
},
@@ -179,7 +214,7 @@ BlazeComponent.extendComponent({
{
// XXX We should use Popup.afterConfirmation here
'click .js-delete-comment'() {
const commentId = this.currentData().commentId;
const commentId = this.currentData().activity.commentId;
CardComments.remove(commentId);
},
'submit .js-edit-comment'(evt) {
@@ -187,7 +222,7 @@ BlazeComponent.extendComponent({
const commentText = this.currentComponent()
.getValue()
.trim();
const commentId = Template.parentData().commentId;
const commentId = Template.parentData().activity.commentId;
if (commentText) {
CardComments.update(commentId, {
$set: {
@@ -199,4 +234,97 @@ BlazeComponent.extendComponent({
},
];
},
}).register('activities');
}).register('activity');
Template.activity.helpers({
sanitize(value) {
return DOMPurify.sanitize(value, { ALLOW_UNKNOWN_PROTOCOLS: true });
},
});
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 (
card &&
Blaze.toHTML(
HTML.A(
{
href: card.originRelativeUrl(),
class: 'action-card',
},
DOMPurify.sanitize(card.title, { ALLOW_UNKNOWN_PROTOCOLS: true }),
),
)
);
}
function createBoardLink(board, list) {
let text = board.title;
if (list) text += `: ${list}`;
return (
board &&
Blaze.toHTML(
HTML.A(
{
href: board.originRelativeUrl(),
class: 'action-board',
},
DOMPurify.sanitize(text, { ALLOW_UNKNOWN_PROTOCOLS: true }),
),
)
);
}
+59 -2
View File
@@ -5,17 +5,35 @@
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
.activity
margin: 10px 0
margin: 0.5px 0
padding: 6px 0;
display: flex
.member
width: 24px
width: 32px
height: @width
.activity-member
font-weight: 700
.activity-desc
word-wrap: break-word
overflow: hidden
@@ -35,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
+1 -1
View File
@@ -1,7 +1,7 @@
template(name="commentForm")
.new-comment.js-new-comment(
class="{{#if commentFormIsOpen}}is-open{{/if}}")
+userAvatar(userId=currentUser._id)
+userAvatar(userId=currentUser._id noRemove=true)
form.js-new-comment-form
+editor(class="js-new-comment-input")
| {{getUnsavedValue 'cardComment' currentCard._id}}
+1
View File
@@ -3,6 +3,7 @@ const commentFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
onDestroyed() {
commentFormIsOpen.set(false);
$('.note-popover').hide();
},
commentFormIsOpen() {
@@ -46,3 +46,23 @@
&:is-open
cursor: auto
.comment-item
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
color: #8c8c8c
height: 36px
margin: 4px 4px 6px 0
width: 92%
&:hover
background: darken(white, 12%)
&.add-comment
display: flex
margin: 5px
a
display: block
margin: auto
+5 -1
View File
@@ -3,11 +3,15 @@ BlazeComponent.extendComponent({
this.subscribe('archivedBoards');
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
archivedBoards() {
return Boards.find(
{ archived: true },
{
sort: ['title'],
sort: { archivedAt: -1, modifiedAt: -1 },
},
);
},
+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.js-perfect-scrollbar(
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
+31 -20
View File
@@ -1,7 +1,5 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const subManager = new SubsManager();
const { calculateIndex, enableClickOnTouch } = Utils;
const { calculateIndex } = Utils;
const swimlaneWhileSortingHeight = 150;
BlazeComponent.extendComponent({
@@ -35,6 +33,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('tableVisibilityModeSettings');
this.showOverlay = new ReactiveVar(false);
this.draggingActive = new ReactiveVar(false);
this._isDragging = false;
@@ -191,35 +190,34 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-swimlane:not(.placeholder)');
this.autorun(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
}
if (
Utils.isMiniScreen() ||
(!Utils.isMiniScreen() && showDesktopDragHandles)
) {
if (Utils.isMiniScreen() || showDesktopDragHandles) {
$swimlanesDom.sortable({
handle: '.js-swimlane-header-handle',
});
} else {
} else if (!Utils.isMiniScreen() && !showDesktopDragHandles) {
$swimlanesDom.sortable({
handle: '.swimlane-header',
});
}
// Disable drag-dropping if the current user is not a board member or is comment only
$swimlanesDom.sortable('option', 'disabled', !userIsMember());
// Disable drag-dropping if the current user is not a board member
//$swimlanesDom.sortable('option', 'disabled', !userIsMember());
$swimlanesDom.sortable(
'option',
'disabled',
!Meteor.user().isBoardAdmin(),
);
});
function userIsMember() {
@@ -238,12 +236,24 @@ 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) {
return (currentUser.profile || {}).boardView === 'board-view-swimlanes';
} else {
return cookies.get('boardView') === 'board-view-swimlanes';
return (
window.localStorage.getItem('boardView') === 'board-view-swimlanes'
);
}
},
@@ -252,7 +262,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-lists';
} else {
return cookies.get('boardView') === 'board-view-lists';
return window.localStorage.getItem('boardView') === 'board-view-lists';
}
},
@@ -261,7 +271,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-cal';
} else {
return cookies.get('boardView') === 'board-view-cal';
return window.localStorage.getItem('boardView') === 'board-view-cal';
}
},
@@ -326,10 +336,11 @@ BlazeComponent.extendComponent({
defaultView: 'agendaDay',
editable: true,
timezone: 'local',
weekNumbers: true,
header: {
left: 'title today prev,next',
center:
'agendaDay,listDay,timelineDay agendaWeek,listWeek,timelineWeek month,timelineMonth timelineYear',
'agendaDay,listDay,timelineDay agendaWeek,listWeek,timelineWeek month,listMonth',
right: '',
},
// height: 'parent', nope, doesn't work as the parent might be small
@@ -361,7 +372,7 @@ BlazeComponent.extendComponent({
end: end || card.endAt,
allDay:
Math.abs(end.getTime() - start.getTime()) / 1000 === 24 * 3600,
url: FlowRouter.url('card', {
url: FlowRouter.path('card', {
boardId: currentBoard._id,
slug: currentBoard.slug,
cardId: card._id,
@@ -423,7 +434,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-cal';
} else {
return cookies.get('boardView') === 'board-view-cal';
return window.localStorage.getItem('boardView') === 'board-view-cal';
}
},
}).register('calendarView');
+769 -1
View File
@@ -15,7 +15,8 @@ setBoardColor(color)
.is-selected .minicard
border-left: 3px solid color
button[type=submit].primary, input[type=submit].primary
button[type=submit].primary, input[type=submit].primary,
.sidebar .sidebar-content .sidebar-btn
background-color: darken(color, 20%)
&.pop-over .pop-over-list li a:not(.disabled):hover,
@@ -293,3 +294,770 @@ setBoardColor(color)
//.header-quick-access
// backgroud-color: #568ba2
/*
Alternate "Clear" Styling
*/
setBoardClear(color1,color2)
//color1: The quick access color
//color2: The main bar color
&.sk-spinner div,
.board-backgrounds-list &.background-box,
.board-list & a
background: linear-gradient(180deg, color1 0%, color2 100%)
//background: linear-gradient(180deg, rgb(73, 155, 234) 0%, rgb(0, 174, 204) 100%)
.is-selected .minicard
border-left: 3px solid color1
&.pop-over .pop-over-list li a:not(.disabled):hover,
.sidebar .sidebar-content .sidebar-btn:hover,
.sidebar-list li a:hover
background-color: lighten(color1, 10%)
&#header ul li.current, &#header-quick-access ul li.current
border-bottom: 4px solid lighten(color2, 10%)
&#header-quick-access
background: darken(color1, 10%)
//background: rgba(66,137,204,1)
color: #FFF
&#header-quick-access #header-new-board-icon,
&#header-quick-access #header-user-bar,
&#header-quick-access ul li
color: rgba(255,255,255,0.5)
// The background-color value here is not seen,
// its covered by the background of #header-main-bar
// it's just to aid transitions between boards
&#header
background-color: color2
border-bottom: 1px solid darken(color2, 20%)
border-top: 1px solid darken(color2, 40%)
// Since the theme uses a gradient for the header
// and gradients break transitions, it has to be set here
&#header #header-main-bar
background: linear-gradient(180deg, color1 0%, color2 100%)
&#header #header-main-bar p
margin-bottom: 6px
&#header #header-main-bar .board-header-btn.emphasis
background: lighten(color2, 10%)
&:hover,
.board-header-btn-close
background: rgba(0,0,0,0.2)
&:hover .board-header-btn-close
background: rgba(0,0,0,0.2)
.materialCheckBox.is-checked
border-bottom: 2px solid color1
border-right: 2px solid color1
.is-multiselection-active .multi-selection-checkbox
&.is-checked + .minicard
background: lighten(color2, 90%)
&:not(.is-checked) + .minicard:hover:not(.minicard-composer)
background: lighten(color2, 97%)
.toggle-switch:checked ~ .toggle-label
background-color: lighten(color1, 20%)
&:after
background-color: darken(color1, 20%)
.board-canvas
background: linear-gradient(135deg, color1 0%, color2 100%)
.swimlane
background: none
.list:first-child
margin-left: 15px
.list
background: rgba(255,255,255,0.35)
margin: 10px
border: 0
border-radius: 14px
.list.list-composer
background: rgba(255,255,255,0.1)
height: min-content
flex: unset
width: 270px
padding-bottom: 16px
.list.list-composer .open-list-composer
border-radius: 7px
color: rgba(0,0,0,0.3)
padding: 7px 10px
display: block
.list.list-composer .open-list-composer:hover
box-shadow: 0 1px 2px rgba(0,0,0,.2)
background: rgba(255,255,255,0.7)
color: rgba(0,0,0,0.6)
.list-header
background-color: rgba(255,255,255,0.25)
border-radius: 14px 14px 0 0
.list-header:not([class*="list-header-"])
border-bottom: 6px solid rgba(255,255,255,0)
.list-header .list-header-name
color: rgba(0,0,0,0.6)
.list-body
padding: 11px
.minicard
border-radius: 7px
padding: 10px 10px 4px 10px
box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.15)
color: #222
.card-details
border-radius: 0 0 14px 14px
box-shadow: 0 0 7px 0 rgba(0,0,0,0.5)
margin-left: -10px
.list-body .open-minicard-composer
border-radius: 7px
color: rgba(0,0,0,.3)
margin-bottom: 11px
.list-body .open-minicard-composer:hover
background: rgba(255,255,255,0.7)
color: rgba(0,0,0,0.6)
button[type=submit].primary, input[type=submit].primary
box-shadow: none
background-color: rgba(255,255,255,0.5)
color: rgba(0,0,0,0.55)
border-radius: 7px
border: 0
button[type="submit"].primary:hover, input[type="submit"].primary:hover
background-color: rgba(255,255,255,0.7)
color: rgba(0,0,0,0.8)
box-shadow: 0 1px 2px rgba(0,0,0,.2)
.quiet, .quiet a
color: rgba(0,0,0,0.4)
.list-header .list-header-watch-icon
color: rgba(0,0,0,0.5)
position: absolute
margin-top: -34px
margin-let: -11px
a.fa, a i.fa
color: rgba(0,0,0,0.3)
a:not(.disabled).is-active.fa, a:not(.disabled).is-active i.fa, a:not(.disabled):hover.fa, a:not(.disabled):hover i.fa
color: rgba(0,0,0,0.6)
input[type="email"], input[type="password"], input[type="text"]
border: 0
border-radius: 7px
.sidebar-shadow
box-shadow: none
border-left: 9px solid color2
.is-open .sidebar-shadow
box-shadow: -10px 0 8px rgba(0,0,0,0.3)
.list.ui-sortable-helper
transform:rotate(0deg)
.minicard-wrapper.placeholder
background: rgba(0,0,0,0.1)
.minicard-wrapper.ui-sortable-helper
transform:rotate(0deg)
opacity: 0.8
.list-body .open-minicard-composer
color: rgba(0,0,0,.3)
.swinlane.ui-sortable-helper
transform:rotate(0deg)
.swimlane .swimlane-header-wrap
background: linear-gradient(0deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0.25) 100%)
.swimlane-header-wrap .inlined-form
width: 100%
.swimlane-header-wrap .list-composer
text-align: center
margin: 5px
.swimlane-header-wrap .list-name-input.full-line
margin: 0
display: inline-block
width: 270px
.swimlane-header-wrap .edit-controls
display: inline-block
vertical-align: middle
.swimlane-header-wrap .primary.confirm
margin-right: 0
.swimlane-header-wrap .fa.fa-times-thin
margin-top: 2px
// This is a general fix so that the little grabby hand appears when dragging the list via the title
.list.ui-sortable-helper,
.list.ui-sortable-helper .list-header.ui-sortable-handle,
.list.ui-sortable-helper .viewer
cursor:-webkit-grabbing;
cursor:grabbing
.board-color-clearblue
setBoardClear(rgb(73, 155, 234),rgb(0, 174, 204))
/*
Alternate "Natural" Styling
*/
.board-color-natural
setBoardColor(#596557)
&#header-quick-access
background-color: #2d392b
.ui-sortable
background-color:#dedede
.list-header
background-color: #c9cfc3
border-bottom: 6px solid #c9cfc3
.swimlane .swimlane-header-wrap
background-color: #c2c0ab
/*
Alternate "Modern" Styling
*/
.board-color-modern
setBoardColor(#2A80B8)
/* General */
body
background: #f5f5f5
&#header-quick-access
padding: 10px
font-size: 14px
background: #333 !important
&#header-quick-access ul
overflow: visible
&#header-quick-access ul li.current
border: 0 !important
font-weight: bold
&#header-quick-access ul li.separator
display: none
&#header-quick-access ul li:nth-child(3)
margin-right: 10px
&#header-quick-access ul li a
padding: 5px 10px
border-radius: 2px
&#header-quick-access ul li.current a
border-radius: 2px
background: rgba(255,255,255,.2)
&#header #header-main-bar h1
font-family: Poppins
font-weight: bold
&#header-quick-access #header-user-bar
position relative
&#header-quick-access #header-user-bar .header-user-bar-name
margin: 5px 3px 0 0
section#notifications-drawer
top: 46px
box-shadow: 0 4px 20px rgba(0,0,0,.1)
max-width: 100%
section#notifications-drawer .header
top: 46px
border-radius: 0 3px
height: 21px
background: #f7f7f7
.board-canvas
background: #f5f5f5
/* Swimlane */
.swimlane
background: none
.swimlane .swimlane-header-wrap .swimlane-header
font-family: Poppins
/* All board views */
.board-list .board-list-item
padding: 20px
.board-list-item-name
font-family: Poppins
/* Board */
.list
background: transparent
border-left: 0
margin: 10px 0
padding: 0px
border-radius: 5px
min-width: 300px
.list-body .open-minicard-composer:hover /*me*/
background: none
box-shadow: none
.list:first-child
margin-left: 5px
.list.list-composer.js-list-composer
transition: all .3s ease
min-width: 80px
.open-list-composer.js-open-inlined-form:hover
color: #222
.list-header
background: none
border-bottom-width: 0px
.list-header .list-header-name
font-family: Poppins
color: #000
font-weight: 500
/* Card changes */
.minicard
padding: 15px 15px 10px
box-shadow: 0 3px 8px rgba(0,0,0,.05)
.minicard-plum:hover:not(.minicard-composer), .is-selected .minicard-plum, .draggable-hover-card .minicard-plum
background: none
.minicard-title
line-height: 1.5em
.minicard .minicard-cover
background-size: cover
margin: -15px -15px 10px
height: 100px
.card-label-orange
color: #fff
.card-date
font-size: 12px
padding: 3px 5px
/* Pop over */
.header-title
font-family: Poppins
font-size: 16px
color: #333
.pop-over
box-shadow: 0 4px 20px rgba(0,0,0,.2)
border: 0
border-radius: 5px
.pop-over .header
padding: 10px
border-bottom: 0
border-radius: 5px 5px 0 0
background:#eee
.pop-over .header .header-title
font-family: Poppins
font-size:16px
color:#333
.pop-over .header .close-btn
font-size:20px
top:6px
right:8px
.pop-over .content-container .content
padding: 5px 20px 20px
width: 260px
.pop-over-list li > a
border-radius: 5px
.pop-over-list li > a > i
margin-right: 5px
.pop-over-list li>a .sub-name
margin-bottom: 8px
/* Sidebar */
.sidebar .sidebar-shadow
box-shadow: 0 0 60px rgba(0,0,0,.2)
.sidebar .sidebar-content
padding: 30px
/* Notifications */
.board-color-modern section#notifications-drawer
border-radius:5px
.board-color-modern section#notifications-drawer .header
padding: 18px 16px
border-bottom: 0
border-radius: 5px 5px 0 0
background: #eee
.board-color-modern section#notifications-drawer .header h5
font-family: Poppins
font-weight: bold
.board-color-modern section#notifications-drawer .header .close
font-size: 20px
top: 14px
section#notifications-drawer .header .toggle-read
top: 18px
/*
Alternate "Modern Dark" Styling
*/
.board-color-moderndark
setBoardColor(#2a2a2a)
/* General */
body
background: #2a2a2a
.board-wrapper .board-canvas .board-overlay
opacity: .6
/* Forms */
button[type=submit].primary, .board-color-modern input[type=submit].primary
background-color: #819C5D
.toggle-switch:checked~.toggle-label
background-color: #D2E9B4
.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
&#header-quick-access
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
padding-top: 3px
padding-bottom: 3px
&#header-quick-access ul
overflow: visible
&#header-quick-access ul li.current
border: 0 !important
font-weight: bold
&#header-quick-access ul li.separator
display: none
&#header-quick-access ul li:nth-child(3)
margin-right: 10px
&#header-quick-access ul li a
padding: 5px 10px
border-radius: 2px
&#header-quick-access ul li.current a
border-radius: 2px
background: rgba(255,255,255,.2)
&#header #header-main-bar h1
font-family: Poppins
font-weight: bold
line-height: 0.8em
padding-top: 10px
/* Content */
.board-canvas
background: #2a2a2a
/* Swimlanes */
.swimlane .swimlane-header-wrap
background-color: #494949
color: #cccccc
padding: 4px 0
.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
max-height: 100%
/* Lists */
.swimlane .list
background: #666666
border-radius: 0
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: 10px
border-bottom: 0
.list-header .viewer
padding-left: 10px
.list-header .list-header-name
line-height: 14px
color: #eeeeee
.list-header .list-header-menu
padding: 10px
top: 0
.list-header .list-header-plus-icon
color: #a6a6a6
.list-body
scrollbar-width: thin
scrollbar-color: #343434 #999999
.list-body::-webkit-scrollbar
width: 10px
.list-body::-webkit-scrollbar-track
background: #343434
border-radius: 3px
margin: 4px 0
.list-body::-webkit-scrollbar-thumb
background-color: #999999
border-radius: 6px
border: 3px solid #343434
.list-body .open-minicard-composer:hover
background: none
box-shadow: none
border-bottom: 0
.list-body a.open-minicard-composer, .list-body a.open-minicard-composer i, .list .list-composer .open-list-composer i
color: #bbbbbb
.list-body a.open-minicard-composer:hover, .list-body a.open-minicard-composer:hover i, .list .list-composer .open-list-composer:hover i
color: #ffffff
/* Mini Card */
.minicard-wrapper
margin-bottom: 12px
.minicard
background-color: #444444
color: #cccccc
border-radius: 2px
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: #494949 !important
.minicard .minicard-labels
margin-bottom: 4px
.minicard .card-label
font-size: 11px
font-weight: 400
padding: 1px 6px 0
border-radius: 2px
.minicard .badges
color: #bbbbbb
.minicard .date
margin-top: 10px
font-size: 11px
.card-date
color: #444444
border-radius: 2px
.card-date.almost-due
color: #444444
.minicard.minicard-composer textarea.minicard-composer-textarea:focus
background-color: #eeeeee
color: #333333
padding: 6px
.is-selected .minicard
background-color: #666666
/* Card Details */
.card-details
position: absolute
top: 30px
left: calc(50% - 384px)
width: 768px
max-height: calc(100% - 60px)
background-color: #454545
color: #cccccc
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)
border: 1px solid #111111
z-index: 100 !important
.card-details
scrollbar-width: thin
scrollbar-color: #343434 #999999
.card-details::-webkit-scrollbar
width: 16px
.card-details::-webkit-scrollbar-track
background: #343434
.card-details::-webkit-scrollbar-thumb
background-color: #999999
border-radius: 6px
border: 4px solid #343434
.card-details .card-details-header
background: #333333
color: #cccccc
border-bottom: 2px solid #2d2d2d
.card-details hr
background: #2d2d2d
.card-details .card-details-item-title
color: #ffffff
.card-details .new-description textarea, .card-details .new-comment textarea
background-color: #dddddd
color: #111111
.card-details .checklist
background-color: transparent
margin-bottom: 10px
.card-details .checklist-item
background-color: rgba(255,255,255,0.1)
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
.card-details .check-box.materialCheckBox.is-checked
border-bottom: 2px solid #819C5D
border-right: 2px solid #819C5D
border-top: 0
border-left: 0
.card-details .js-add-checklist-item
margin-top: 4px
.checklist-items .add-checklist-item
margin-top: .7em
.card-details .activities .activity .activity-desc .activity-comment
background-color: #cccccc
color: #222222
/* Sidebar */
.sidebar .sidebar-shadow
background-color: #222222
box-shadow: -10px 0 5px -10px #444444
border-left: 1px solid #333333
color: #cccccc
.activities .activity .activity-desc .activity-comment
background-color: #cccccc
color: #222222
/* Pop-Ups for "Modern Dark" */
.pop-over.board-color-moderndark
background-color: #454545
color: #cccccc
border: 1px solid #111111
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)
.pop-over.board-color-moderndark .header
background-color: #333333
.pop-over.board-color-moderndark .header-title
font-family: Poppins
font-size: 16px
color: #cccccc
.pop-over.board-color-moderndark .pop-over-list li:hover > a
background-color: #819C5D !important
+56 -34
View File
@@ -1,7 +1,9 @@
template(name="boardHeaderBar")
h1.header-board-menu
with currentBoard
a(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}")
if $eq title 'Templates'
| {{_ 'templates'}}
else
+viewer
= title
@@ -9,6 +11,10 @@ template(name="boardHeaderBar")
unless isMiniScreen
if currentBoard
if currentUser
with currentBoard
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
@@ -31,6 +37,12 @@ template(name="boardHeaderBar")
if $eq watchLevel "muted"
i.fa.fa-bell-slash
span {{_ watchLevel}}
a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
i.fa.fa-sort
span {{#if isSortActive }}{{_ 'Sort is on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
if isSortActive
a.board-header-btn-close.js-sort-reset(title="Remove Sort")
i.fa.fa-times-thin
else
a.board-header-btn.js-log-in(
@@ -42,6 +54,10 @@ template(name="boardHeaderBar")
if currentBoard
if isMiniScreen
if currentUser
with currentBoard
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
@@ -99,13 +115,13 @@ template(name="boardHeaderBar")
a.board-header-btn.js-toggle-board-view(
title="{{_ 'board-view'}}")
i.fa.fa-caret-down
if $eq boardView 'board-view-lists'
i.fa.fa-trello
if $eq boardView 'board-view-swimlanes'
i.fa.fa-th-large
if $eq boardView 'board-view-lists'
i.fa.fa-trello
if $eq boardView 'board-view-cal'
i.fa.fa-calendar
span {{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}}
span {{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-swimlanes'}}{{/if}}
if canModifyBoard
a.board-header-btn.js-multiselection-activate(
@@ -118,7 +134,7 @@ template(name="boardHeaderBar")
i.fa.fa-times-thin
.separator
a.board-header-btn.js-toggle-sidebar
a.board-header-btn.js-toggle-sidebar(title="{{_ 'sidebar-open'}} {{_ 'or'}} {{_ 'sidebar-close'}}")
i.fa.fa-navicon
template(name="boardVisibilityList")
@@ -131,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
@@ -172,13 +189,6 @@ template(name="boardChangeWatchPopup")
template(name="boardChangeViewPopup")
ul.pop-over-list
li
with "board-view-lists"
a.js-open-lists-view
i.fa.fa-trello.colorful
| {{_ 'board-view-lists'}}
if $eq Utils.boardView "board-view-lists"
i.fa.fa-check
li
with "board-view-swimlanes"
a.js-open-swimlanes-view
@@ -186,6 +196,13 @@ template(name="boardChangeViewPopup")
| {{_ 'board-view-swimlanes'}}
if $eq Utils.boardView "board-view-swimlanes"
i.fa.fa-check
li
with "board-view-lists"
a.js-open-lists-view
i.fa.fa-trello.colorful
| {{_ 'board-view-lists'}}
if $eq Utils.boardView "board-view-lists"
i.fa.fa-check
li
with "board-view-cal"
a.js-open-cal-view
@@ -193,20 +210,6 @@ template(name="boardChangeViewPopup")
| {{_ 'board-view-cal'}}
if $eq Utils.boardView "board-view-cal"
i.fa.fa-check
if currentUser.isAdmin
hr
li
with "board-view-rules"
a.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
| {{_ 'rules'}}
else if currentUser.isBoardAdmin
hr
li
with "board-view-rules"
a.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
| {{_ 'rules'}}
template(name="createBoard")
form
@@ -226,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'}}
@@ -261,3 +267,19 @@ template(name="boardChangeTitlePopup")
template(name="boardCreateRulePopup")
p {{_ 'close-board-pop'}}
button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
template(name="cardsSortPopup")
ul.pop-over-list
li
a.js-sort-due {{_ 'due-date'}}
hr
li
a.js-sort-title {{_ 'title-alphabetically'}}
hr
li
a.js-sort-created-desc {{_ 'created-at-newest-first'}}
hr
li
a.js-sort-created-asc {{_ 'created-at-oldest-first'}}
+125 -32
View File
@@ -2,6 +2,7 @@
const DOWNCLS = 'fa-sort-down';
const UPCLS = 'fa-sort-up';
*/
const sortCardsBy = new ReactiveVar('');
Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-custom-fields'() {
@@ -33,22 +34,6 @@ Template.boardMenuPopup.events({
'click .js-card-settings': Popup.open('boardCardSettings'),
});
Template.boardMenuPopup.helpers({
exportUrl() {
const params = {
boardId: Session.get('currentBoard'),
};
const queryParams = {
authToken: Accounts._storedLoginToken(),
};
return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
},
exportFilename() {
const boardId = Session.get('currentBoard');
return `wekan-export-board-${boardId}.json`;
},
});
Template.boardChangeTitlePopup.events({
submit(event, templateInstance) {
const newTitle = templateInstance
@@ -126,6 +111,7 @@ BlazeComponent.extendComponent({
'click .js-open-filter-view'() {
Sidebar.setView('filter');
},
'click .js-sort-cards': Popup.open('cardsSort'),
/*
'click .js-open-sort-view'(evt) {
const target = evt.target;
@@ -143,6 +129,9 @@ BlazeComponent.extendComponent({
Sidebar.setView();
Filter.reset();
},
'click .js-sort-reset'() {
Session.set('sortBy', '');
},
'click .js-open-search-view'() {
Sidebar.setView('search');
},
@@ -176,6 +165,9 @@ Template.boardHeaderBar.helpers({
boardView() {
return Utils.boardView();
},
isSortActive() {
return Session.get('sortBy') ? true : false;
},
});
Template.boardChangeViewPopup.events({
@@ -191,10 +183,6 @@ Template.boardChangeViewPopup.events({
Utils.setBoardView('board-view-cal');
Popup.close();
},
'click .js-open-rules-view'() {
Modal.openWide('rulesMain');
Popup.close();
},
});
const CreateBoard = BlazeComponent.extendComponent({
@@ -206,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() {
@@ -221,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() {
@@ -252,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,
},
];
},
@@ -266,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;
@@ -388,3 +440,44 @@ BlazeComponent.extendComponent({
},
}).register('listsortPopup');
*/
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-sort-due'() {
const sortBy = {
dueAt: 1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('due-date'));
Popup.close();
},
'click .js-sort-title'() {
const sortBy = {
title: 1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('title'));
Popup.close();
},
'click .js-sort-created-asc'() {
const sortBy = {
createdAt: 1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('date-created-newest-first'));
Popup.close();
},
'click .js-sort-created-desc'() {
const sortBy = {
createdAt: -1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('date-created-oldest-first'));
Popup.close();
},
},
];
},
}).register('cardsSortPopup');
+117 -48
View File
@@ -1,10 +1,32 @@
template(name="boardList")
.wrapper
ul.board-list.clearfix
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 {{_ 'add-board'}}
a.board-list-item.label(title="{{_ 'add-board'}}")
| {{_ 'add-board'}}
each boards
li(class="{{#if isStarred}}starred{{/if}}" class=colorClass)
li(class="{{_id}}" class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
if isInvited
.board-list-item
span.details
@@ -16,50 +38,97 @@ 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
+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}}")
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 currentUser.isBoardAdmin
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 {{_ 'my-boards'}}
.board-header-btns.right
a.board-header-btn.js-open-archived-board
i.fa.fa-archive
span {{_ 'archives'}}
a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
i.fa.fa-clone
span {{_ 'templates'}}
h1 {{_ title }}
//.board-header-btns.right
// a.board-header-btn.js-open-archived-board
// i.fa.fa-archive
// span {{_ 'archives'}}
// a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
// i.fa.fa-clone
// span {{_ 'templates'}}
+243 -10
View File
@@ -1,4 +1,5 @@
const subManager = new SubsManager();
const { calculateIndex, enableClickOnTouch } = Utils;
Template.boardListHeaderBar.events({
'click .js-open-archived-board'() {
@@ -7,6 +8,9 @@ Template.boardListHeaderBar.events({
});
Template.boardListHeaderBar.helpers({
title() {
return FlowRouter.getRouteName() === 'home' ? 'my-boards' : 'public';
},
templatesBoardId() {
return Meteor.user() && Meteor.user().getTemplatesBoardId();
},
@@ -18,22 +22,179 @@ Template.boardListHeaderBar.helpers({
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('setting');
Meteor.subscribe('tableVisibilityModeSettings');
let currUser = Meteor.user();
let userLanguage;
if(currUser && currUser.profile){
userLanguage = currUser.profile.language
}
if (userLanguage) {
TAPi18n.setLanguage(userLanguage);
T9n.setLanguage(userLanguage);
}
},
boards() {
return Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
type: 'board',
onRendered() {
const itemsSelector = '.js-board:not(.placeholder)';
const $boards = this.$('.js-boards');
$boards.sortable({
connectWith: '.js-boards',
tolerance: 'pointer',
appendTo: '.board-list',
helper: 'clone',
distance: 7,
items: itemsSelector,
placeholder: 'board-wrapper placeholder',
start(evt, ui) {
ui.helper.css('z-index', 1000);
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
},
{ sort: ['title'] },
);
stop(evt, ui) {
// To attribute the new index number, we need to get the DOM element
// of the previous and the following card -- if any.
const prevBoardDom = ui.item.prev('.js-board').get(0);
const nextBoardBom = ui.item.next('.js-board').get(0);
const sortIndex = calculateIndex(prevBoardDom, nextBoardBom, 1);
const boardDomElement = ui.item.get(0);
const board = Blaze.getData(boardDomElement);
// Normally the jquery-ui sortable library moves the dragged DOM element
// to its new position, which disrupts Blaze reactive updates mechanism
// (especially when we move the last card of a list, or when multiple
// users move some cards at the same time). To prevent these UX glitches
// we ask sortable to gracefully cancel the move, and to put back the
// DOM in its initial state. The card move is then handled reactively by
// Blaze with the below query.
$boards.sortable('cancel');
board.move(sortIndex.base);
},
});
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreen()) {
$boards.sortable({
handle: '.board-handle',
});
}
});
},
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() {
let query = {
//archived: false,
////type: { $in: ['board','template-container'] },
//type: 'board',
$and: [
{ archived: false },
{ type: 'board' },
{ $or:[] }
]
};
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 */ },
});
},
isStarred() {
const user = Meteor.user();
return user && user.hasStarred(this.currentData()._id);
},
isAdministrable() {
const user = Meteor.user();
return user && user.isBoardAdmin(this.currentData()._id);
},
hasOvertimeCards() {
subManager.subscribe('board', this.currentData()._id, false);
@@ -61,9 +222,13 @@ BlazeComponent.extendComponent({
},
'click .js-clone-board'(evt) {
Meteor.call(
'cloneBoard',
'copyBoard',
this.currentData()._id,
Session.get('fromBoard'),
{
sort: Boards.find({ archived: false }).count(),
type: 'board',
title: Boards.findOne(this.currentData()._id).title,
},
(err, res) => {
if (err) {
this.setError(err.error);
@@ -93,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";
}
}
}
},
},
];
},
+59 -5
View File
@@ -7,10 +7,23 @@ $spaceBetweenTiles = 16px
li
float: left
width: 25%
width: 20%
box-sizing: border-box
position: relative
&.placeholder:after
content: '';
display: block;
background: darken(white, 20%)
border-radius: 3px;
height: 106px;
margin: 8px;
&.ui-sortable-helper
cursor: grabbing
transform: rotate(4deg)
display: block !important
&.starred
.fa-star,
.fa-star-o
@@ -20,17 +33,20 @@ $spaceBetweenTiles = 16px
overflow: hidden;
background-color: #999
color: #f6f6f6
height: 90px
min-height: 100px
font-size: 16px
line-height: 22px
border-radius: 3px
display: block
font-weight: 700
min-height: 18px
padding: 8px
margin: ($spaceBetweenTiles/2)
position: relative
text-decoration: none
word-wrap: break-word
&.template-container
border: 4px solid #fff
&.tile
background-size: auto
@@ -55,7 +71,7 @@ $spaceBetweenTiles = 16px
.label
font-weight: normal
line-height:90px
line-height: 56px
:hover
background-color:#939393
@@ -183,7 +199,7 @@ $spaceBetweenTiles = 16px
overflow: scroll
li
width: 50%
width: 50%
.board-list-item
overflow: hidden
@@ -194,6 +210,44 @@ $spaceBetweenTiles = 16px
top: -100px
left: -100px
.board-handle
position: absolute
padding: 7px
top: 50%
transform: translateY(-50%)
right: 10px
font-size: 24px
@media screen and (max-width: 360px)
li
width: 100%
.board-handle
position: absolute
padding: 7px
top: 50%
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;
+19 -5
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
@@ -46,12 +58,14 @@ template(name="attachmentsGalery")
| {{_ 'remove-cover'}}
else
| {{_ 'add-cover'}}
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
if currentUser.isBoardAdmin
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
if currentUser.isBoardMember
unless currentUser.isCommentOnly
unless currentUser.isWorker
li.attachment-item.add-attachment
a.js-add-attachment {{_ 'add-attachment' }}
//li.attachment-item.add-attachment
a.js-add-attachment(title="{{_ 'add-attachment' }}")
i.fa.fa-plus
+6
View File
@@ -45,6 +45,12 @@ Template.attachmentsGalery.events({
},
});
Template.attachmentsGalery.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
Template.previewAttachedImagePopup.events({
'click .js-large-image-clicked'() {
Popup.close();
+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
+62 -13
View File
@@ -4,8 +4,7 @@ template(name="cardCustomFieldsPopup")
li.item(class="")
a.name.js-select-field(href="#")
span.full-name
+viewer
= name
= name
if hasCustomField
i.fa.fa-check
hr
@@ -53,20 +52,49 @@ template(name="cardCustomField-number")
if value
= value
template(name="cardCustomField-date")
template(name="cardCustomField-checkbox")
.js-checklist-item.checklist-item(class="{{#if data.value }}is-checked{{/if}}")
if canModifyCard
a.js-edit-date(title="{{showTitle}}" class="{{classes}}")
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
else
| {{_ 'edit'}}
.check-box-container
.check-box.materialCheckBox(class="{{#if data.value }}is-checked{{/if}}")
else
.materialCheckBox(class="{{#if data.value }}is-checked{{/if}}")
template(name="cardCustomField-currency")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-currency")
input(type="text" value=data.value)
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if value
= formattedValue
else
| {{_ 'edit'}}
else
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
= formattedValue
template(name="cardCustomField-date")
if canModifyCard
a.js-edit-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
if value
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
@@ -95,3 +123,24 @@ template(name="cardCustomField-dropdown")
if value
+viewer
= selectedItem
template(name="cardCustomField-stringtemplate")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-stringtemplate")
each item in stringtemplateItems.get
input.js-card-customfield-stringtemplate-item(type="text" value=item placeholder="")
input.js-card-customfield-stringtemplate-item.last(type="text" value="" placeholder="{{_ 'custom-field-stringtemplate-item-placeholder'}}" autofocus)
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if value
+viewer
= formattedValue
else
| {{_ 'edit'}}
else
if value
+viewer
= formattedValue
+144
View File
@@ -1,3 +1,6 @@
import { DatePicker } from '/client/lib/datepicker';
import Cards from '/models/cards';
Template.cardCustomFieldsPopup.helpers({
hasCustomField() {
const card = Cards.findOne(Session.get('currentCard'));
@@ -80,6 +83,56 @@ CardCustomField.register('cardCustomField');
}
}.register('cardCustomField-number'));
// cardCustomField-checkbox
(class extends CardCustomField {
onCreated() {
super.onCreated();
}
toggleItem() {
this.card.setCustomField(this.customFieldId, !this.data().value);
}
events() {
return [
{
'click .js-checklist-item .check-box-container': this.toggleItem,
},
];
}
}.register('cardCustomField-checkbox'));
// cardCustomField-currency
(class extends CardCustomField {
onCreated() {
super.onCreated();
this.currencyCode = this.data().definition.settings.currencyCode;
}
formattedValue() {
const locale = TAPi18n.getLanguage();
return new Intl.NumberFormat(locale, {
style: 'currency',
currency: this.currencyCode,
}).format(this.data().value);
}
events() {
return [
{
'submit .js-card-customfield-currency'(event) {
event.preventDefault();
// To allow input separated by comma, the comma is replaced by a period.
const value = Number(this.find('input').value.replace(/,/i, '.'), 10);
this.card.setCustomField(this.customFieldId, value);
},
},
];
}
}.register('cardCustomField-currency'));
// cardCustomField-date
(class extends CardCustomField {
onCreated() {
@@ -96,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
@@ -184,3 +241,90 @@ CardCustomField.register('cardCustomField');
];
}
}.register('cardCustomField-dropdown'));
// cardCustomField-stringtemplate
(class extends CardCustomField {
onCreated() {
super.onCreated();
this.stringtemplateFormat = this.data().definition.settings.stringtemplateFormat;
this.stringtemplateSeparator = this.data().definition.settings.stringtemplateSeparator;
this.stringtemplateItems = new ReactiveVar(this.data().value ?? []);
}
formattedValue() {
return (this.data().value ?? [])
.filter(value => !!value.trim())
.map(value => this.stringtemplateFormat.replace(/%\{value\}/gi, value))
.join(this.stringtemplateSeparator ?? '');
}
getItems() {
return Array.from(this.findAll('input'))
.map(input => input.value)
.filter(value => !!value.trim());
}
events() {
return [
{
'submit .js-card-customfield-stringtemplate'(event) {
event.preventDefault();
const items = this.getItems();
this.card.setCustomField(this.customFieldId, items);
},
'keydown .js-card-customfield-stringtemplate-item'(event) {
if (event.keyCode === 13) {
event.preventDefault();
if (event.metaKey || event.ctrlKey) {
this.find('button[type=submit]').click();
} else if (event.target.value.trim()) {
const inputLast = this.find('input.last');
let items = this.getItems();
if (event.target === inputLast) {
inputLast.value = '';
} else if (event.target.nextSibling === inputLast) {
inputLast.focus();
} else {
event.target.blur();
const idx = Array.from(this.findAll('input')).indexOf(
event.target,
);
items.splice(idx + 1, 0, '');
Tracker.afterFlush(() => {
const element = this.findAll('input')[idx + 1];
element.focus();
element.value = '';
});
}
this.stringtemplateItems.set(items);
}
}
},
'blur .js-card-customfield-stringtemplate-item'(event) {
if (
!event.target.value.trim() ||
event.target === this.find('input.last')
) {
const items = this.getItems();
this.stringtemplateItems.set(items);
this.find('input.last').value = '';
}
},
'click .js-close-inlined-form'(event) {
this.stringtemplateItems.set(this.data().value ?? []);
},
},
];
}
}.register('cardCustomField-stringtemplate'));
+12 -2
View File
@@ -1,10 +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}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
+106 -94
View File
@@ -1,96 +1,4 @@
// Edit received, start, due & end dates
BlazeComponent.extendComponent({
template() {
return 'editCardDate';
},
onCreated() {
this.error = new ReactiveVar('');
this.card = this.data();
this.date = new ReactiveVar(moment.invalid());
},
onRendered() {
const $picker = this.$('.js-datepicker')
.datepicker({
todayHighlight: true,
todayBtn: 'linked',
language: TAPi18n.getLanguage(),
})
.on(
'changeDate',
function(evt) {
this.find('#date').value = moment(evt.date).format('L');
this.error.set('');
this.find('#time').focus();
}.bind(this),
);
if (this.date.get().isValid()) {
$picker.datepicker('update', this.date.get().toDate());
}
},
showDate() {
if (this.date.get().isValid()) return this.date.get().format('L');
return '';
},
showTime() {
if (this.date.get().isValid()) return this.date.get().format('LT');
return '';
},
dateFormat() {
return moment.localeData().longDateFormat('L');
},
timeFormat() {
return moment.localeData().longDateFormat('LT');
},
events() {
return [
{
'keyup .js-date-field'() {
// parse for localized date format in strict mode
const dateMoment = moment(this.find('#date').value, 'L', true);
if (dateMoment.isValid()) {
this.error.set('');
this.$('.js-datepicker').datepicker('update', dateMoment.toDate());
}
},
'keyup .js-time-field'() {
// parse for localized time format in strict mode
const dateMoment = moment(this.find('#time').value, 'LT', true);
if (dateMoment.isValid()) {
this.error.set('');
}
},
'submit .edit-date'(evt) {
evt.preventDefault();
// if no time was given, init with 12:00
const time =
evt.target.time.value ||
moment(new Date().setHours(12, 0, 0)).format('LT');
const dateString = `${evt.target.date.value} ${time}`;
const newDate = moment(dateString, 'L LT', true);
if (newDate.isValid()) {
this._storeDate(newDate.toDate());
Popup.close();
} else {
this.error.set('invalid-date');
evt.target.date.focus();
}
},
'click .js-delete-date'(evt) {
evt.preventDefault();
this._deleteDate();
Popup.close();
},
},
];
},
});
import { DatePicker } from '/client/lib/datepicker';
Template.dateBadge.helpers({
canModifyCard() {
@@ -207,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
@@ -279,7 +191,7 @@ class CardStartDate extends CardDate {
// if dueAt or endAt exist & are > startAt, startAt doesn't need to be flagged
if ((endAt && theDate.isAfter(endAt)) || (dueAt && theDate.isAfter(dueAt)))
classes += 'long-overdue';
else if (theDate.isBefore(now, 'minute')) classes += 'almost-due';
else if (theDate.isAfter(now)) classes += '';
else classes += 'current';
return classes;
}
@@ -363,6 +275,46 @@ class CardEndDate extends CardDate {
}
CardEndDate.register('cardEndDate');
class CardCustomFieldDate extends CardDate {
template() {
return 'dateCustomField';
}
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().value));
});
}
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 `${this.date.get().format('LLLL')}`;
}
classes() {
return 'customfield-date';
}
events() {
return [];
}
}
CardCustomFieldDate.register('cardCustomFieldDate');
(class extends CardReceivedDate {
showDate() {
return this.date.get().format('l');
@@ -386,3 +338,63 @@ CardEndDate.register('cardEndDate');
return this.date.get().format('l');
}
}.register('minicardEndDate'));
(class extends CardCustomFieldDate {
showDate() {
return this.date.get().format('l');
}
}.register('minicardCustomFieldDate'));
class VoteEndDate extends CardDate {
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().getVoteEnd()));
});
}
classes() {
const classes = 'end-date' + ' ';
return classes;
}
showDate() {
return this.date.get().format('l LT');
}
showTitle() {
return `${TAPi18n.__('card-end-on')} ${this.date.get().format('LLLL')}`;
}
events() {
return super.events().concat({
'click .js-edit-date': Popup.open('editVoteEndDate'),
});
}
}
VoteEndDate.register('voteEndDate');
class PokerEndDate extends CardDate {
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().getPokerEnd()));
});
}
classes() {
const classes = 'end-date' + ' ';
return classes;
}
showDate() {
return this.date.get().format('l LT');
}
showTitle() {
return `${TAPi18n.__('card-end-on')} ${this.date.get().format('LLLL')}`;
}
events() {
return super.events().concat({
'click .js-edit-date': Popup.open('editPokerEndDate'),
});
}
}
PokerEndDate.register('pokerEndDate');
+9 -5
View File
@@ -2,11 +2,11 @@
display: block
border-radius: 4px
padding: 1px 3px
background-color: #dbdbdb
&:hover, &.is-active
background-color: #b3b3b3
&.current, &.almost-due, &.due, &.long-overdue
color: #fff
@@ -14,17 +14,17 @@
background-color: #5ba639
&:hover, &.is-active
background-color: darken(#5ba639, 10)
&.almost-due
background-color: #edc909
&:hover, &.is-active
background-color: darken(#edc909, 10)
&.due
background-color: #fa3f00
&:hover, &.is-active
background-color: darken(#fa3f00, 10)
&.long-overdue
background-color: #fd5d47
&:hover, &.is-active
@@ -57,3 +57,7 @@
-webkit-font-smoothing: antialiased
margin-right: 0.3em
.customfield-date
display: block
border-radius: 4px
padding: 1px 3px
@@ -0,0 +1,7 @@
template(name="descriptionForm")
.new-description.js-new-description(
class="{{#if descriptionFormIsOpen}}is-open{{/if}}")
form.js-new-description-form
+editor(class="js-new-description-input" autofocus="autofocus")
| {{getUnsavedValue 'cardDescription' _id getDescription}}
@@ -0,0 +1,34 @@
const descriptionFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
onDestroyed() {
descriptionFormIsOpen.set(false);
$('.note-popover').hide();
},
descriptionFormIsOpen() {
return descriptionFormIsOpen.get();
},
getInput() {
return this.$('.js-new-description-input');
},
events() {
return [
{
'submit .js-card-description'(event) {
event.preventDefault();
const description = this.currentComponent().getValue();
this.data().setDescription(description);
},
// Pressing Ctrl+Enter should submit the form
'keydown form textarea'(evt) {
if (evt.keyCode === 13 && (evt.metaKey || evt.ctrlKey)) {
this.find('button[type=submit]').click();
}
},
},
];
},
}).register('descriptionForm');
@@ -0,0 +1,59 @@
@import 'nib'
.new-description
position: relative
margin: 0 0 20px 0
&.is-open
.helper
display: inline-block
textarea
min-height: 100px
color: #4d4d4d
cursor: auto
overflow: hidden
word-wrap: break-word
.too-long
margin-top: 8px
textarea
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
height: 36px
margin: 4px 4px 6px 0
padding: 9px 11px
width: 100%
&:hover,
&:is-open
background-color: #fff
box-shadow: 0 1px 3px rgba(0, 0, 0, .33)
border: 0
cursor: pointer
&:is-open
cursor: auto
.description-item
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
color: #8c8c8c
height: 36px
margin: 4px 4px 6px 0
width: 92%
&:hover
background: darken(white, 12%)
&.add-description
display: flex
margin: 5px
a
display: block
margin: auto
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+233 -19
View File
@@ -4,6 +4,15 @@
avatar-radius = 50%
#cardURL_copy
// Have clipboard text not visible by moving it to far left
position: absolute
left: -2000px
top: 0px
#clipboard
white-space: normal
.assignee
border-radius: 3px
display: block
@@ -31,6 +40,8 @@ avatar-radius = 50%
position: absolute
&.avatar-image
object-fit: cover;
object-position: center;
height: 100%
width: @height
@@ -78,7 +89,7 @@ avatar-radius = 50%
.card-details
padding: 0
flex-shrink: 0
flex-basis: 510px
flex-basis: 600px
will-change: flex-basis
overflow-y: scroll
overflow-x: hidden
@@ -88,25 +99,30 @@ avatar-radius = 50%
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
.mCustomScrollBox
padding-left: 0
.ps-scrollbar-y-rail
pointer-event: all
position: absolute;
.card-details-canvas
width: 470px
padding-left: 20px;
width: auto
padding: 0 20px
.card-details-header
margin: 0 -20px 5px
padding 7px 16px
padding: 7px 20px
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,
.card-details-menu,
.card-copy-button,
.card-copy-mobile-button,
@@ -114,9 +130,11 @@ avatar-radius = 50%
.card-details-menu-mobile-web
float: right
.close-card-details
.close-card-details,
.maximize-card-details,
.minimize-card-details
font-size: 24px
padding: 5px
padding: 5px 10px 5px 10px
margin-right: -8px
.close-card-details-mobile-web
@@ -190,23 +208,33 @@ avatar-radius = 50%
margin-right: 0.5em
&:last-child
margin-right: 0
&.card-details-item-labels,
&.card-details-item-labels
display: block
word-wrap: break-word
max-width: 95%
flex-grow: 1
&.card-details-item-members,
&.card-details-item-assignees,
&.card-details-item-received,
&.card-details-item-start,
&.card-details-item-due,
&.card-details-item-end,
&.card-details-item-customfield,
&.card-details-item-name
display: block
word-wrap: break-word
max-width: 48%
max-width: 36%
flex-grow: 1
&.card-details-item-creator,
&.card-details-item-received,
&.card-details-item-start,
&.card-details-item-due,
&.card-details-item-end
display: block
word-wrap: break-word
max-width: 28%
flex-grow: 1
.card-details-item-title
font-size: 16px
color: #000
font-weight: bold
color: #4d4d4d
.card-label
padding-top: 5px
@@ -215,6 +243,43 @@ avatar-radius = 50%
.activities
padding-top: 10px
@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
.card-details-left
float: left
top: 60px
left: 20px
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
margin: 0 0 8px
@@ -235,14 +300,20 @@ input[type="submit"].attachment-add-link-submit
.card-details-canvas
width: 100%
padding-left: 0px;
padding-left: 0px
.card-details-header
.close-card-details
margin-right: 0px
.card-details-menu
margin-right: 10px
margin-right: 40px
.maximize-card-details
margin-right: 40px
.minimize-card-details
margin-right: 40px
card-details-color(background, color...)
background: background !important
@@ -324,3 +395,146 @@ card-details-color(background, color...)
.card-details-indigo
card-details-color(#4b0082, #ffffff) //White text for better visibility
.voted
opacity: .7
.vote-title
display: flex
justify-content: space-between
.js-edit-date
align-self: baseline
margin-left: 5px
.vote-result
display: flex
.js-show-positive-votes
cursor: pointer
.poker-voted
opacity: .7
.poker-title
display: flex
justify-content: space-between
.js-edit-date
align-self: baseline
margin-left: 5px
.poker-result
display: flex
flex-flow: row wrap
.js-show-positive-poker-votes
cursor: pointer
.poker-deck
display: grid
flex-direction: column
text-align: center
.poker-card-result
width: 32px
font-size: 1em
font-weight: bold
padding: 4px 2px 4px 2px
cursor: default
.winner
font-weight: bold
outline: #2d2d2d solid 2px
.loser
opacity: .5
.responsive-table
overflow-x: auto
.poker-table
display: table
width: 100%
padding-top: 10px
.poker-table-row
display: table-row
.poker-table-heading
background-color: #EEE
display: table-header-group
.poker-table-cell
display: table-cell
padding: 0 0 5px 2px
border-bottom: 1px solid #d2d0d0
text-align: center
min-width: 45px
.poker-table-cell-who
width: 150px
vertical-align: middle
.poker-table-heading-left,
.poker-table-heading-right
display: table-header-group
font-weight: bold
border-top: 1px solid #808080
@media (max-width: 400px)
.poker-table-heading-right
display: none
.poker-table-body
display: table-row-group
.poker-table-side-left,
.poker-table-side-right
display: inline-block
.poker-table-side-right
padding-left: 10px
@media (max-width: 400px)
.poker-table-side-right
padding-left: 0px
.estimation-add
display: block
overflow: auto
margin-top: 15px
margin-bottom: 5px
input
display: inline-block
float: right
margin: auto
margin-right: 10px
width: 100px
button
display: inline-block
float: right
margin: auto
.poker-card
width:48px
height:72px
float:left
background:#fff
border-radius:5px
display:table
box-sizing:border-box
padding:5px
margin:3px
font-size:20px
font-weight: bold
text-shadow: #2d2d2d 1px 1px 0
box-shadow:0 0 5px #aaaaaa
text-align:center
position:relative
cursor: pointer
.inner
display:table-cell
vertical-align:middle
border-radius:5px
overflow:hidden
background-color: #cecece
+54 -9
View File
@@ -1,7 +1,17 @@
template(name="checklists")
h3
i.fa.fa-check
| {{_ 'checklists'}}
.checklists-title
h3.card-details-item-title
i.fa.fa-check
| {{_ 'checklists'}}
if currentUser.isBoardMember
.material-toggle-switch(title="{{_ 'hide-checked-items'}}")
//span.toggle-switch-title
if hideCheckedItems
input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton" checked="checked")
else
input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton")
label.toggle-label(for="toggleHideCheckedItemsButton")
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+checklistDeleteDialog(checklist = checklistToDelete)
@@ -15,9 +25,8 @@ template(name="checklists")
+inlinedForm(autoclose=false classNames="js-add-checklist" cardId = cardId)
+addChecklistItemForm
else
a.js-open-inlined-form
a.js-open-inlined-form(title="{{_ 'add-checklist'}}")
i.fa.fa-plus
| {{_ 'add-checklist'}}...
template(name="checklistDetail")
.js-checklist.checklist
@@ -31,6 +40,8 @@ template(name="checklistDetail")
if canModifyCard
h2.title.js-open-inlined-form.is-editable
if isMiniScreenOrShowDesktopDragHandles
span.fa.checklist-handle(class="fa-arrows" title="{{_ 'dragChecklist'}}")
+viewer
= checklist.title
else
@@ -69,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
@@ -81,14 +95,16 @@ template(name="checklistItems")
+inlinedForm(autoclose=false classNames="js-add-checklist-item" checklist = checklist)
+addChecklistItemForm
else
a.add-checklist-item.js-open-inlined-form
a.add-checklist-item.js-open-inlined-form(title="{{_ 'add-checklist-item'}}")
i.fa.fa-plus
| {{_ 'add-checklist-item'}}...
template(name='checklistItemDetail')
.js-checklist-item.checklist-item
.js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}")
if canModifyCard
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
.check-box-container
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
span.fa.checklistitem-handle(class="fa-arrows" title="{{_ 'dragChecklistItem'}}")
.item-title.js-open-inlined-form.is-editable(class="{{#if item.isFinished }}is-checked{{/if}}")
+viewer
= item.title
@@ -97,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'}}
+92 -9
View File
@@ -1,4 +1,8 @@
const { calculateIndexData, enableClickOnTouch } = Utils;
import Cards from '/models/cards';
import Boards from '/models/boards';
const subManager = new SubsManager();
const { calculateIndexData, capitalize } = Utils;
function initSorting(items) {
items.sortable({
@@ -6,7 +10,7 @@ function initSorting(items) {
helper: 'clone',
items: '.js-checklist-item:not(.placeholder)',
connectWith: '.js-checklist-items',
appendTo: '.board-canvas',
appendTo: 'parent',
distance: 7,
placeholder: 'checklist-item placeholder',
scroll: false,
@@ -36,9 +40,6 @@ function initSorting(items) {
checklistItem.move(checklistId, sortIndex.base);
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-checklist-item:not(.placeholder)');
}
BlazeComponent.extendComponent({
@@ -54,11 +55,16 @@ BlazeComponent.extendComponent({
return Meteor.user() && Meteor.user().isBoardMember();
}
// Disable sorting if the current user is not a board member
// Disable sorting if the current user is not a board member or is a miniscreen
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('sortable')) {
if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$(self.itemsDom).sortable({
handle: 'span.fa.checklistitem-handle',
});
}
}
});
},
@@ -109,7 +115,7 @@ BlazeComponent.extendComponent({
title,
checklistId: checklist._id,
cardId: checklist.cardId,
sort: checklist.itemCount(),
sort: Utils.calculateIndexData(checklist.lastItem()).base,
});
}
// We keep the form opened, empty it.
@@ -174,6 +180,16 @@ BlazeComponent.extendComponent({
}
},
focusChecklistItem(event) {
// If a new checklist is created, pre-fill the title and select it.
const checklist = this.currentData().checklist;
if (!checklist) {
const textarea = event.target;
textarea.value = capitalize(TAPi18n.__('r-checklist'));
textarea.select();
}
},
events() {
const events = {
'click .toggle-delete-checklist-dialog'(event) {
@@ -182,6 +198,9 @@ BlazeComponent.extendComponent({
}
this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get());
},
'click #toggleHideCheckedItemsButton'() {
Meteor.call('toggleHideCheckedItems');
},
};
return [
@@ -191,14 +210,73 @@ 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,
keydown: this.pressKey,
},
];
},
}).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();
if (currentUser) return currentUser.hasHideCheckedItems();
return false;
},
});
Template.addChecklistItemForm.onRendered(() => {
autosize($('textarea.js-add-checklist-item'));
});
Template.editChecklistItemForm.onRendered(() => {
autosize($('textarea.js-edit-checklist-item'));
});
Template.checklistDeleteDialog.onCreated(() => {
const $cardDetails = this.$('.card-details');
this.scrollState = {
@@ -234,6 +312,11 @@ Template.checklistItemDetail.helpers({
!Meteor.user().isWorker()
);
},
hideCheckedItems() {
const user = Meteor.user();
if (user) return user.hasHideCheckedItems();
return false;
},
});
BlazeComponent.extendComponent({
@@ -247,7 +330,7 @@ BlazeComponent.extendComponent({
events() {
return [
{
'click .js-checklist-item .check-box': this.toggleItem,
'click .js-checklist-item .check-box-container': this.toggleItem,
},
];
},
+30 -2
View File
@@ -16,6 +16,10 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
&:hover
color: inherit
.checklists-title
display: flex
justify-content: space-between
.checklist-title
.checkbox
float: left
@@ -38,6 +42,11 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.js-delete-checklist
@extends .delete-text
span.fa.checklist-handle
padding-right: 20px
padding-top: 3px
float: left
.js-confirm-checklist-delete
background-color: darken(white, 3%)
@@ -99,6 +108,17 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
margin-top: 3px
display: flex
background: darken(white, 3%)
opacity: 1
transition: height 0ms 400ms, opacity 400ms 0ms
height: auto
overflow: hidden
&.is-checked.invisible
opacity: 0
height: 0
transition: height 0ms 0ms, opacity 600ms 0ms
margin-top: 0
margin-bottom: 0
&.placeholder
background: darken(white, 20%)
@@ -113,6 +133,9 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
&:hover
background-color: darken(white, 8%)
.check-box-container
padding-right: 10px;
.check-box
margin: 0.1em 0 0 0;
&.is-checked
@@ -121,10 +144,10 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.item-title
flex: 1
padding-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
text-decoration: line-through
& .viewer
p
margin-bottom: 2px
@@ -132,7 +155,12 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
word-wrap: break-word
max-width: 420px
.js-delete-checklist-item
span.fa.checklistitem-handle
padding-top: 2px
padding-right: 10px;
.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
+13
View File
@@ -44,9 +44,20 @@
align-items: center
justify-content: center
.card-label-white
background-color: #ffffff
color: #000000 //Black text for better visibility
border: 1px solid #c0c0c0
.card-label-white:hover
color: #aaaaaa //grey text for better visibility
.card-label-green
background-color: #3cb500
.card-label-green:hover
color: #000000 //Black hover text for better visibility
.card-label-yellow
background-color: #fad900
color: #000000 //Black text for better visibility
@@ -158,6 +169,8 @@
.edit-labels-pop-over
margin-bottom: 8px
.card-label .viewer p
margin: 0
.edit-labels-pop-over .shortcut
display: inline-block
+41 -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
@@ -74,20 +77,35 @@ template(name="minicard")
+viewer
= definition.name
.minicard-custom-field-item
+viewer
= trueValue
if $eq definition.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(definition)
else if $eq definition.type "date"
.date
+minicardCustomFieldDate
else if $eq definition.type "checkbox"
.materialCheckBox(class="{{#if value }}is-checked{{/if}}")
else if $eq definition.type "stringtemplate"
+viewer
= formattedStringtemplateCustomFieldValue(definition)
else
+viewer
= trueValue
if getAssignees
.minicard-assignees.js-minicard-assignees
each getAssignees
+userAvatar(userId=this)
hr
if getMembers
.minicard-members.js-minicard-members
each getMembers
+userAvatar(userId=this)
if showCreator
.minicard-creator
+userAvatar(userId=this.userId noRemove=true)
.badges
unless currentUser.isNoComments
if comments.count
@@ -100,6 +118,17 @@ template(name="minicard")
if getDescription
.badge.badge-state-image-only(title=getDescription)
span.badge-icon.fa.fa-align-left
if getVoteQuestion
.badge.badge-state-image-only(title=getVoteQuestion)
span.badge-icon.fa.fa-thumbs-up(class="{{#if voteState}}text-green{{/if}}")
span.badge-text {{ voteCountPositive }}
span.badge-icon.fa.fa-thumbs-down(class="{{#if $eq voteState false}}text-red{{/if}}")
span.badge-text {{ voteCountNegative }}
if getPokerQuestion
.badge.badge-state-image-only(title=getPokerQuestion)
span.badge-icon.fa.fa-check(class="{{#if pokerState}}text-green{{/if}}")
if expiredPoker
span.badge-text {{ getPokerEstimation }}
if attachments.count
.badge
span.badge-icon.fa.fa-paperclip
@@ -108,3 +137,12 @@ template(name="minicard")
.badge(class="{{#if checklistFinished}}is-finished{{/if}}")
span.badge-icon.fa.fa-check-square-o
span.badge-text.check-list-text {{checklistFinishedCount}}/{{checklistItemCount}}
if allSubtasks.count
.badge
span.badge-icon.fa.fa-sitemap
span.badge-text.check-list-text {{subtasksFinishedCount}}/{{allSubtasksCount}}
//{{subtasksFinishedCount}}/{{subtasksCount}} does not work because when a subtaks is archived, the count goes down
if currentBoard.allowsCardSortingByNumber
.badge
span.badge-icon.fa.fa-sort
span.badge-text {{ sort }}
+47 -7
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
// Template.cards.events({
// 'click .member': Popup.open('cardMember')
// });
@@ -9,6 +7,48 @@ BlazeComponent.extendComponent({
return 'minicard';
},
formattedCurrencyCustomFieldValue(definition) {
const customField = this.data()
.customFieldsWD()
.find(f => f._id === definition._id);
const customFieldTrueValue =
customField && customField.trueValue ? customField.trueValue : '';
const locale = TAPi18n.getLanguage();
return new Intl.NumberFormat(locale, {
style: 'currency',
currency: definition.settings.currencyCode,
}).format(customFieldTrueValue);
},
formattedStringtemplateCustomFieldValue(definition) {
const customField = this.data()
.customFieldsWD()
.find(f => f._id === definition._id);
const customFieldTrueValue =
customField && customField.trueValue ? customField.trueValue : [];
return customFieldTrueValue
.filter(value => !!value.trim())
.map(value =>
definition.settings.stringtemplateFormat.replace(/%\{value\}/gi, value),
)
.join(definition.settings.stringtemplateSeparator ?? '');
},
showCreator() {
if (this.data().board()) {
return (
this.data().board.allowsCreator === null ||
this.data().board().allowsCreator === undefined ||
this.data().board().allowsCreator
);
// return this.data().board().allowsCreator;
}
return false;
},
events() {
return [
{
@@ -20,10 +60,10 @@ BlazeComponent.extendComponent({
},
{
'click .js-toggle-minicard-label-text'() {
if (cookies.has('hiddenMinicardLabelText')) {
cookies.remove('hiddenMinicardLabelText'); //true
if (window.localStorage.getItem('hiddenMinicardLabelText')) {
window.localStorage.removeItem('hiddenMinicardLabelText'); //true
} else {
cookies.set('hiddenMinicardLabelText', 'true'); //true
window.localStorage.setItem('hiddenMinicardLabelText', 'true'); //true
}
},
},
@@ -36,7 +76,7 @@ Template.minicard.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
@@ -46,7 +86,7 @@ Template.minicard.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).hiddenMinicardLabelText;
} else if (cookies.has('hiddenMinicardLabelText')) {
} else if (window.localStorage.getItem('hiddenMinicardLabelText')) {
return true;
} else {
return false;
+25 -5
View File
@@ -79,7 +79,7 @@
border-radius: top 2px
.minicard-labels
float: right
float: none
display: flex
flex-wrap: wrap
@@ -87,7 +87,9 @@
width: 11px
height: @width
border-radius: 2px
margin-left: 3px
margin-right: 3px
margin-bottom: 3px
.minicard-custom-fields
display:block;
.minicard-custom-field
@@ -112,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
@@ -161,15 +167,18 @@
line-height: 12px
.minicard-members,
.minicard-assignees
.minicard-assignees,
.minicard-creator
float: right
margin: 2px -8px 12px 0
margin-left: 5px
margin-bottom: 4px
.member
float: right
border-radius: 50%
height: 28px
width: @height
margin-bottom: 4px
.assignee
float: right
@@ -178,7 +187,13 @@
width: @height
+ .badges
margin-top: 10px
margin-top: 5px
.minicard-assignees
border-bottom: 1px solid red
.minicard-creator
border-bottom: 1px solid green
.minicard-members:empty,
.minicard-assignees:empty
@@ -299,3 +314,8 @@ minicard-color(background, color...)
.minicard-indigo
minicard-color(#4b0082, #ffffff) //White text for better visibility
.text-red
color:red
.text-green
color:green
+44
View File
@@ -0,0 +1,44 @@
template(name="resultCard")
.result-card-wrapper
a.minicard-wrapper.card-title(href=originRelativeUrl)
+minicard(this)
//= card.title
ul.result-card-context-list
li.result-card-context(title="{{_ 'board'}}")
.result-card-block-wrapper
if boardId
+viewer
= getBoard.title
else
.broken-cards-null
| NULL
if getBoard.archived
i.fa.fa-archive
li.result-card-context.result-card-context-separator
= ' '
| {{_ 'context-separator'}}
= ' '
li.result-card-context(title="{{_ 'swimlane'}}")
.result-card-block-wrapper
if swimlaneId
+viewer
= getSwimlane.title
else
.broken-cards-null
| NULL
if getSwimlane.archived
i.fa.fa-archive
li.result-card-context.result-card-context-separator
= ' '
| {{_ 'context-separator'}}
= ' '
li.result-card-context(title="{{_ 'list'}}")
.result-card-block-wrapper
if listId
+viewer
= getList.title
else
.broken-cards-null
| NULL
if getList.archived
i.fa.fa-archive
+11
View File
@@ -0,0 +1,11 @@
Template.resultCard.helpers({
userId() {
return Meteor.userId();
},
});
BlazeComponent.extendComponent({
events() {
return [{}];
},
}).register('resultCard');
+24
View File
@@ -0,0 +1,24 @@
.result-card-list-wrapper
margin: 1rem
border-radius: 5px
padding: 1.5rem
padding-top: 0.75rem
display: inline-block
min-width: 250px
max-width: 350px
.result-card-wrapper
margin-top: 0
margin-bottom: 10px
.result-card-context
display: inline-block
.result-card-context-separator
font-weight: bold
.result-card-context-list
margin-bottom: 0.7rem
.result-card-block-wrapper
display: inline-block
+10 -9
View File
@@ -1,11 +1,11 @@
template(name="subtasks")
h3
h3.card-details-item-title
i.fa.fa-sitemap
| {{_ 'subtasks'}}
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+subtaskDeleteDialog(subtask = subtaskToDelete)
if currentUser.isBoardAdmin
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+subtaskDeleteDialog(subtask = subtaskToDelete)
.card-subtasks-items
each subtask in currentCard.subtasks
@@ -15,9 +15,8 @@ template(name="subtasks")
+inlinedForm(autoclose=false classNames="js-add-subtask" cardId = cardId)
+addSubtaskItemForm
else
a.js-open-inlined-form
a.js-open-inlined-form(title="{{_ 'add-subtask'}}")
i.fa.fa-plus
| {{_ 'add-subtask'}}...
template(name="subtaskDetail")
.js-subtasks.subtask
@@ -28,7 +27,8 @@ template(name="subtaskDetail")
span
a.js-view-subtask(title="{{ subtask.title }}") {{_ "view-it"}}
if canModifyCard
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
if currentUser.isBoardAdmin
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
if canModifyCard
h2.title.js-open-inlined-form.is-editable
@@ -68,7 +68,8 @@ template(name="editSubtaskItemForm")
a.fa.fa-times-thin.js-close-inlined-form
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-subtask-item {{_ "delete"}}...
if currentUser.isBoardAdmin
a.js-delete-subtask-item {{_ "delete"}}...
template(name="subtasksItems")
.subtasks-items.js-subtasks-items
+19 -1
View File
@@ -20,7 +20,24 @@ BlazeComponent.extendComponent({
const crtBoard = Boards.findOne(card.boardId);
const targetBoard = crtBoard.getDefaultSubtasksBoard();
const listId = targetBoard.getDefaultSubtasksListId();
const swimlaneId = targetBoard.getDefaultSwimline()._id;
//Get the full swimlane data for the parent task.
const parentSwimlane = Swimlanes.findOne({
boardId: crtBoard._id,
_id: card.swimlaneId,
});
//find the swimlane of the same name in the target board.
const targetSwimlane = Swimlanes.findOne({
boardId: targetBoard._id,
title: parentSwimlane.title,
});
//If no swimlane with a matching title exists in the target board, fall back to the default swimlane.
const swimlaneId =
targetSwimlane === undefined
? targetBoard.getDefaultSwimline()._id
: targetSwimlane._id;
const nextCardNumber = targetBoard.getNextCardNumber();
if (title) {
const _id = Cards.insert({
@@ -34,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
+6 -6
View File
@@ -86,7 +86,7 @@ select
margin-bottom: 8px
&.inline
width: 100%
width: 100%
option[disabled]
color: #8c8c8c
@@ -242,11 +242,11 @@ textarea
margin: 3px 4px
// Material Design checkboxes
[type="checkbox"]:not(:checked),
[type="checkbox"]:checked
position: absolute
left: -9999px
visibility: hidden
[type="checkbox"]:not(:checked),
[type="checkbox"]:checked
position: absolute
left: -9999px
visibility: hidden
.materialCheckBox
position: relative
@@ -0,0 +1,37 @@
export function csvGetMembersToMap(data) {
// we will work on the list itself (an ordered array of objects) when a
// mapping is done, we add a 'wekan' field to the object representing the
// imported member
const membersToMap = [];
const importedMembers = [];
let membersIndex;
for (let i = 0; i < data[0].length; i++) {
if (data[0][i].toLowerCase() === 'members') {
membersIndex = i;
}
}
for (let i = 1; i < data.length; i++) {
if (data[i][membersIndex]) {
for (const importedMember of data[i][membersIndex].split(' ')) {
if (importedMember && importedMembers.indexOf(importedMember) === -1) {
importedMembers.push(importedMember);
}
}
}
}
for (let importedMember of importedMembers) {
importedMember = {
username: importedMember,
id: importedMember,
};
const wekanUser = Users.findOne({ username: importedMember.username });
if (wekanUser) importedMember.wekanId = wekanUser._id;
membersToMap.push(importedMember);
}
return membersToMap;
}
+32 -30
View File
@@ -13,41 +13,43 @@ template(name="import")
template(name="importTextarea")
form
p: label(for='import-textarea') {{_ instruction}} {{_ 'import-board-instruction-about-errors'}}
textarea.js-import-json(placeholder="{{_ 'import-json-placeholder'}}" autofocus)
textarea.js-import-json(id='import-textarea' placeholder="{{_ importPlaceHolder}}" autofocus)
| {{jsonText}}
if isSandstorm
h1.warning {{_ 'import-sandstorm-backup-warning'}}
p.warning {{_ 'import-sandstorm-warning'}}
input.primary.wide(type="submit" value="{{_ 'import'}}")
template(name="importMapMembers")
h2 {{_ 'import-map-members'}}
.map-members
p {{_ 'import-members-map'}}
.mapping-list
each members
a.mapping-item.js-select-member(class="{{#if wekanId}}filled{{/if}}")
.profile-source
.full-name= fullName
.username
| ({{username}})
.wekan
if wekanId
+userAvatar(userId=wekanId)
else
a.member.add-member
i.fa.fa-plus
//-
Due to the way the flewbox layout is working, we need to set some
invisible items so that the last row items have a consistent width.
See http://jsfiddle.net/Ln4h3c4n/ for an minimal example of the issue.
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
form
input.primary.wide(type="submit" value="{{_ 'done'}}")
if usersLoaded.get
.map-members
p {{_ 'import-members-map'}}
p.import-members-map-note
| {{_ 'import-members-map-note' }}
.mapping-list
each members
a.mapping-item.js-select-member(class="{{#if wekanId}}filled{{/if}}")
.profile-source
.full-name= fullName
.username
| ({{username}})
.wekan
if wekanId
+userAvatar(userId=wekanId)
else
a.member.add-member
i.fa.fa-plus
//-
Due to the way the flewbox layout is working, we need to set some
invisible items so that the last row items have a consistent width.
See http://jsfiddle.net/Ln4h3c4n/ for an minimal example of the issue.
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
form
input.primary.wide(type="submit" value="{{_ 'done'}}")
else
+spinner
template(name="importMapMembersAddPopup")
.select-member
+77 -21
View File
@@ -1,5 +1,8 @@
import trelloMembersMapper from './trelloMembersMapper';
import wekanMembersMapper from './wekanMembersMapper';
import { trelloGetMembersToMap } from './trelloMembersMapper';
import { wekanGetMembersToMap } from './wekanMembersMapper';
import { csvGetMembersToMap } from './csvMembersMapper';
const Papa = require('papaparse');
BlazeComponent.extendComponent({
title() {
@@ -30,20 +33,30 @@ BlazeComponent.extendComponent({
}
},
importData(evt) {
importData(evt, dataSource) {
evt.preventDefault();
const dataJson = this.find('.js-import-json').value;
try {
const dataObject = JSON.parse(dataJson);
this.setError('');
this.importedData.set(dataObject);
const membersToMap = this._prepareAdditionalData(dataObject);
// store members data and mapping in Session
// (we go deep and 2-way, so storing in data context is not a viable option)
const input = this.find('.js-import-json').value;
if (dataSource === 'csv') {
const csv = input.indexOf('\t') > 0 ? input.replace(/(\t)/g, ',') : input;
const ret = Papa.parse(csv);
if (ret && ret.data && ret.data.length) this.importedData.set(ret.data);
else throw new Meteor.Error('error-csv-schema');
const membersToMap = this._prepareAdditionalData(ret.data);
this.membersToMap.set(membersToMap);
this.nextStep();
} catch (e) {
this.setError('error-json-malformed');
} else {
try {
const dataObject = JSON.parse(input);
this.setError('');
this.importedData.set(dataObject);
const membersToMap = this._prepareAdditionalData(dataObject);
// store members data and mapping in Session
// (we go deep and 2-way, so storing in data context is not a viable option)
this.membersToMap.set(membersToMap);
this.nextStep();
} catch (e) {
this.setError('error-json-malformed');
}
}
},
@@ -86,10 +99,13 @@ BlazeComponent.extendComponent({
let membersToMap;
switch (importSource) {
case 'trello':
membersToMap = trelloMembersMapper.getMembersToMap(dataObject);
membersToMap = trelloGetMembersToMap(dataObject);
break;
case 'wekan':
membersToMap = wekanMembersMapper.getMembersToMap(dataObject);
membersToMap = wekanGetMembersToMap(dataObject);
break;
case 'csv':
membersToMap = csvGetMembersToMap(dataObject);
break;
}
return membersToMap;
@@ -109,11 +125,23 @@ BlazeComponent.extendComponent({
return `import-board-instruction-${Session.get('importSource')}`;
},
importPlaceHolder() {
const importSource = Session.get('importSource');
if (importSource === 'csv') {
return 'import-csv-placeholder';
} else {
return 'import-json-placeholder';
}
},
events() {
return [
{
submit(evt) {
return this.parentComponent().importData(evt);
return this.parentComponent().importData(
evt,
Session.get('importSource'),
);
},
},
];
@@ -122,14 +150,42 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {
this.usersLoaded = new ReactiveVar(false);
this.autorun(() => {
this.parentComponent()
.membersToMap.get()
.forEach(({ wekanId }) => {
if (wekanId) {
this.subscribe('user-miniprofile', wekanId);
const handle = this.subscribe(
'user-miniprofile',
this.members().map(member => {
return member.username;
}),
);
Tracker.nonreactive(() => {
Tracker.autorun(() => {
if (
handle.ready() &&
!this.usersLoaded.get() &&
this.members().length
) {
this._refreshMembers(
this.members().map(member => {
if (!member.wekanId) {
let user = Users.findOne({ username: member.username });
if (!user) {
user = Users.findOne({ importUsernames: member.username });
}
if (user) {
// eslint-disable-next-line no-console
// console.log('found username:', user.username);
member.wekanId = user._id;
}
}
return member;
}),
);
}
this.usersLoaded.set(handle.ready());
});
});
});
},
+4
View File
@@ -47,3 +47,7 @@
a.show-mapping
text-decoration underline
.import-members-map-note
font-size: 90%
font-weight: bold
@@ -1,4 +1,4 @@
export function getMembersToMap(data) {
export function trelloGetMembersToMap(data) {
// we will work on the list itself (an ordered array of objects) when a
// mapping is done, we add a 'wekan' field to the object representing the
// imported member
@@ -1,4 +1,4 @@
export function getMembersToMap(data) {
export function wekanGetMembersToMap(data) {
// we will work on the list itself (an ordered array of objects) when a
// mapping is done, we add a 'wekan' field to the object representing the
// imported member
+29 -22
View File
@@ -1,6 +1,4 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const { calculateIndex, enableClickOnTouch } = Utils;
const { calculateIndex } = Utils;
BlazeComponent.extendComponent({
// Proxy
@@ -74,18 +72,16 @@ BlazeComponent.extendComponent({
const sortIndex = calculateIndex(prevCardDom, nextCardDom, nCards);
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
const currentBoard = Boards.findOne(Session.get('currentBoard'));
let swimlaneId = '';
const defaultSwimlaneId = currentBoard.getDefaultSwimline()._id;
let targetSwimlaneId = null;
// only set a new swimelane ID if the swimlanes view is active
if (
Utils.boardView() === 'board-view-swimlanes' ||
currentBoard.isTemplatesBoard()
)
swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
else if (
Utils.boardView() === 'board-view-lists' ||
Utils.boardView() === 'board-view-cal' ||
!Utils.boardView
)
swimlaneId = currentBoard.getDefaultSwimline()._id;
targetSwimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))
._id;
// Normally the jquery-ui sortable library moves the dragged DOM element
// to its new position, which disrupts Blaze reactive updates mechanism
@@ -98,9 +94,12 @@ BlazeComponent.extendComponent({
if (MultiSelection.isActive()) {
Cards.find(MultiSelection.getMongoSelector()).forEach((card, i) => {
const newSwimlaneId = targetSwimlaneId
? targetSwimlaneId
: card.swimlaneId || defaultSwimlaneId;
card.move(
currentBoard._id,
swimlaneId,
newSwimlaneId,
listId,
sortIndex.base + i * sortIndex.increment,
);
@@ -108,39 +107,47 @@ BlazeComponent.extendComponent({
} else {
const cardDomElement = ui.item.get(0);
const card = Blaze.getData(cardDomElement);
card.move(currentBoard._id, swimlaneId, listId, sortIndex.base);
const newSwimlaneId = targetSwimlaneId
? targetSwimlaneId
: card.swimlaneId || defaultSwimlaneId;
card.move(currentBoard._id, newSwimlaneId, listId, sortIndex.base);
}
boardComponent.setIsDragging(false);
},
});
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
this.autorun(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
}
if (!Utils.isMiniScreen() && showDesktopDragHandles) {
if (Utils.isMiniScreen() || showDesktopDragHandles) {
$cards.sortable({
handle: '.handle',
});
} else {
} else if (!Utils.isMiniScreen() && !showDesktopDragHandles) {
$cards.sortable({
handle: '.minicard',
});
}
// Disable drag-dropping if the current user is not a board member or is comment only
$cards.sortable('option', 'disabled', !userIsMember());
if ($cards.data('uiSortable') || $cards.data('sortable')) {
$cards.sortable(
'option',
'disabled',
// Disable drag-dropping when user is not member
!userIsMember(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
}
});
// We want to re-run this function any time a card is added.
@@ -176,7 +183,7 @@ Template.list.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
+5 -7
View File
@@ -43,9 +43,6 @@
background: white
margin: -3px 0 8px
.list-header-card-count
height: 35px
.list-header-add
flex: 0 0 auto
padding: 20px 12px 4px
@@ -60,6 +57,9 @@
background-color: #e4e4e4;
border-bottom: 6px solid #e4e4e4;
&.list-header-card-count
min-height: 35px
height: auto
&.ui-sortable-handle
cursor: grab
@@ -120,9 +120,6 @@
form
margin-bottom: 9px
.ps-scrollbar-y-rail
transform: translateX(2px)
.open-minicard-composer
border-radius: 2px
color: #8c8c8c
@@ -183,7 +180,8 @@
border-bottom: 1px solid darken(white, 20%)
.list
display: block
display: contents
flex-basis: auto
width: 100%
border-left: 0px
&:first-child
+20 -12
View File
@@ -1,11 +1,22 @@
template(name="listBody")
.list-body.js-perfect-scrollbar
.list-body
.minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}")
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=absoluteUrl
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
if MultiSelection.isActive
@@ -19,19 +30,14 @@ template(name="listBody")
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
else
a.open-minicard-composer.js-card-composer.js-open-inlined-form
a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}")
i.fa.fa-plus
| {{_ 'add-card'}}
template(name="spinnerList")
.sk-spinner.sk-spinner-wave.sk-spinner-list(
class=currentBoard.colorClass
.sk-spinner.sk-spinner-list(
class="{{currentBoard.colorClass}} {{getSkSpinnerName}}"
id="showMoreResults")
.sk-rect1
.sk-rect2
.sk-rect3
.sk-rect4
.sk-rect5
+spinnerRaw
template(name="addCardForm")
.minicard.minicard-composer.js-composer
@@ -105,8 +111,10 @@ template(name="searchElementPopup")
each boards
option(value="{{_id}}") {{title}}
form.js-search-term-form
label
| {{_ 'template'}}
input(type="text" name="searchTerm" placeholder="{{_ 'search-example'}}" autofocus dir="auto")
.list-body.js-perfect-scrollbar.search-card-results
.list-body.search-card-results
.minicards.clearfix.js-minicards
if isBoardTemplateSearch
each results
+81 -38
View File
@@ -1,3 +1,5 @@
import { Spinner } from '/client/lib/spinner';
const subManager = new SubsManager();
const InfiniteScrollIter = 10;
@@ -8,7 +10,14 @@ BlazeComponent.extendComponent({
},
mixins() {
return [Mixins.PerfectScrollbar];
return [];
},
customFieldsSum() {
return CustomFields.find({
boardIds: { $in: [Session.get('currentBoard')] },
showSumAtTopOfList: true,
});
},
openForm(options) {
@@ -77,9 +86,11 @@ BlazeComponent.extendComponent({
else if (
Utils.boardView() === 'board-view-lists' ||
Utils.boardView() === 'board-view-cal' ||
!Utils.boardView
!Utils.boardView()
)
swimlaneId = board.getDefaultSwimline()._id;
swimlaneId = board.getDefaultSwimline()._id;
const nextCardNumber = board.getNextCardNumber();
const _id = Cards.insert({
title,
@@ -91,6 +102,7 @@ BlazeComponent.extendComponent({
sort: sortIndex,
swimlaneId,
type: cardType,
cardNumber: nextCardNumber,
linkedId,
});
@@ -116,8 +128,6 @@ BlazeComponent.extendComponent({
if (position === 'bottom') {
this.scrollToBottom();
}
formComponent.reset();
}
},
@@ -168,13 +178,16 @@ BlazeComponent.extendComponent({
cardsWithLimit(swimlaneId) {
const limit = this.cardlimit.get();
const defaultSort = { sort: 1 };
const sortBy = Session.get('sortBy') ? Session.get('sortBy') : defaultSort;
const selector = {
listId: this.currentData()._id,
archived: false,
};
if (swimlaneId) selector.swimlaneId = swimlaneId;
return Cards.find(Filter.mongoSelector(selector), {
sort: ['sort'],
// sort: ['sort'],
sort: sortBy,
limit,
});
},
@@ -238,8 +251,8 @@ BlazeComponent.extendComponent({
Boards.findOne(currentBoardId)
.customFields()
.fetch(),
function(field) {
if (field.automaticallyOnCard)
function (field) {
if (field.automaticallyOnCard || field.alwaysOnCard)
arr.push({ _id: field._id, value: null });
},
);
@@ -411,7 +424,7 @@ BlazeComponent.extendComponent({
type: 'board',
},
{
sort: ['title'],
sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
@@ -523,7 +536,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
mixins() {
return [Mixins.PerfectScrollbar];
return [];
},
onCreated() {
@@ -549,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: {
@@ -597,7 +610,7 @@ BlazeComponent.extendComponent({
type: 'board',
},
{
sort: ['title'],
sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
@@ -658,10 +671,7 @@ BlazeComponent.extendComponent({
_id = element.copy(this.boardId, this.swimlaneId, this.listId);
// 1.B Linked card
} else {
delete element._id;
element.type = 'cardType-linkedCard';
element.linkedId = element.linkedId || element._id;
_id = Cards.insert(element);
_id = element.link(this.boardId, this.swimlaneId, this.listId);
}
Filter.addException(_id);
// List insertion
@@ -675,15 +685,21 @@ BlazeComponent.extendComponent({
element.sort = Boards.findOne(this.boardId)
.swimlanes()
.count();
element.type = 'swimlalne';
element.type = 'swimlane';
_id = element.copy(this.boardId);
} else if (this.isBoardTemplateSearch) {
board = Boards.findOne(element.linkedId);
board.sort = Boards.find({ archived: false }).count();
board.type = 'board';
board.title = element.title;
delete board.slug;
_id = board.copy();
Meteor.call(
'copyBoard',
element.linkedId,
{
sort: Boards.find({ archived: false }).count(),
type: 'board',
title: element.title,
},
(err, data) => {
_id = data;
},
);
}
Popup.close();
},
@@ -692,7 +708,7 @@ BlazeComponent.extendComponent({
},
}).register('searchElementPopup');
BlazeComponent.extendComponent({
(class extends Spinner {
onCreated() {
this.cardlimit = this.parentComponent().cardlimit;
@@ -720,11 +736,11 @@ BlazeComponent.extendComponent({
.parentComponent()
.data()._id;
}
},
}
onRendered() {
this.spinner = this.find('.sk-spinner-list');
this.container = this.$(this.spinner).parents('.js-perfect-scrollbar')[0];
this.container = this.$(this.spinner).parents('.list-body')[0];
$(this.container).on(
`scroll.spinner_${this.swimlaneId}_${this.listId}`,
@@ -735,31 +751,58 @@ BlazeComponent.extendComponent({
);
this.updateList();
},
}
onDestroyed() {
$(this.container).off(`scroll.spinner_${this.swimlaneId}_${this.listId}`);
$(window).off(`resize.spinner_${this.swimlaneId}_${this.listId}`);
},
}
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);
};
}
updateList() {
// Use fallback when requestIdleCallback is not available on iOS and Safari
// https://www.afasterweb.com/2017/11/20/utilizing-idle-moments/
if (this.spinnerInView()) {
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
window.requestIdleCallback(() => this.updateList());
this.checkIdleTime(() => this.updateList());
}
},
}
spinnerInView() {
const parentViewHeight = this.container.clientHeight;
const bottomViewPosition = this.container.scrollTop + parentViewHeight;
const threshold = this.spinner.offsetTop;
// spinner deleted
if (!this.spinner.offsetTop) {
return false;
}
return bottomViewPosition > threshold;
},
}).register('spinnerList');
const parentViewHeight = this.container.clientHeight;
const bottomViewPosition = this.container.scrollTop + parentViewHeight;
let spinnerOffsetTop = this.spinner.offsetTop;
const addCard = $(this.container).find("a.open-minicard-composer").first()[0];
if (addCard !== undefined) {
spinnerOffsetTop -= addCard.clientHeight;
}
return bottomViewPosition > spinnerOffsetTop;
}
getSkSpinnerName() {
return "sk-spinner-" + super.getSpinnerName().toLowerCase();
}
}.register('spinnerList'));
+14 -13
View File
@@ -1,7 +1,7 @@
template(name="listHeader")
.list-header.js-list-header(
class="{{#if limitToShowCardsCount}}list-header-card-count{{/if}}"
class="{{#if colorClass}}list-header-{{colorClass}}{{/if}}")
class=colorClass)
+inlinedForm
+editListTitleForm
else
@@ -15,12 +15,12 @@ template(name="listHeader")
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if reachedWipLimit}}highlight{{/if}}") {{cards.count}}
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.count}}
|/#{wipLimit.value})
if showCardsCountForList cards.count
|&nbsp;
span(class="cardCount") {{cardsCount}} {{_ 'cards-count'}}
span(class="cardCount") {{cardsCount}} {{cardsCountForListIsOne cards.count}}
if isMiniScreen
if currentList
if isWatching
@@ -28,9 +28,8 @@ template(name="listHeader")
div.list-header-menu
unless currentUser.isCommentOnly
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
a.js-add-card.fa.fa-plus.list-header-plus-icon(title="{{_ 'add-card-to-top-of-list'}}")
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
else
a.list-header-menu-icon.fa.fa-angle-right.js-select-list
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
@@ -42,10 +41,11 @@ template(name="listHeader")
//if isBoardAdmin
// a.fa.js-list-star.list-header-plus-icon(class="fa-star{{#unless starred}}-o{{/unless}}")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
if showDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
a.js-add-card.fa.fa-plus.list-header-plus-icon(title="{{_ 'add-card-to-top-of-list'}}")
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
if currentUser.isBoardAdmin
if showDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
.list-composer
@@ -116,8 +116,9 @@ template(name="listMorePopup")
input.inline-input(type="text" readonly value="{{ rootUrl }}")
| {{_ 'added'}}
span.date(title=list.createdAt) {{ moment createdAt 'LLL' }}
unless currentUser.isWorker
a.js-delete {{_ 'delete'}}
//unless currentUser.isWorker
// if currentUser.isBoardAdmin
// a.js-delete {{_ 'delete'}}
template(name="listDeletePopup")
p {{_ "list-delete-pop"}}
@@ -152,7 +153,7 @@ template(name="setListColorPopup")
form.edit-label
.palette-colors: each colors
// note: we use the swimlane palette to have more than just the border
span.card-label.palette-color.js-palette-color(class="swimlane-{{color}}")
span.card-label.palette-color.js-palette-color(class="card-details-{{color}}")
if(isSelected color)
i.fa.fa-check
button.primary.confirm.js-submit {{_ 'save'}}
+66 -7
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
let listsColors;
Meteor.startup(() => {
listsColors = Lists.simpleSchema()._schema.color.allowedValues;
@@ -74,9 +72,25 @@ BlazeComponent.extendComponent({
);
},
exceededWipLimit() {
const list = Template.currentData();
return (
list.getWipLimit('enabled') &&
list.getWipLimit('value') < list.cards().count()
);
},
showCardsCountForList(count) {
const limit = this.limitToShowCardsCount();
return limit > 0 && count > limit;
return limit >= 0 && count >= limit;
},
cardsCountForListIsOne(count) {
if (count === 1) {
return TAPi18n.__('cards-count-one');
} else {
return TAPi18n.__('cards-count');
}
},
events() {
@@ -106,11 +120,15 @@ BlazeComponent.extendComponent({
}).register('listHeader');
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
@@ -119,6 +137,10 @@ Template.listHeader.helpers({
});
Template.listActionPopup.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
isWipLimitEnabled() {
return Template.currentData().getWipLimit('enabled');
},
@@ -223,12 +245,45 @@ BlazeComponent.extendComponent({
Template.listMorePopup.events({
'click .js-delete': Popup.afterConfirm('listDelete', function() {
Popup.close();
this.allCards().map(card => Cards.remove(card._id));
Lists.remove(this._id);
// TODO how can we avoid the fetch call?
const allCards = this.allCards().fetch();
const allCardIds = _.pluck(allCards, '_id');
// it's okay if the linked cards are on the same list
if (
Cards.find({
$and: [
{ listId: { $ne: this._id } },
{ linkedId: { $in: allCardIds } },
],
}).count() === 0
) {
allCardIds.map(_id => Cards.remove(_id));
Lists.remove(this._id);
} else {
// TODO: Figure out more informative message.
// Popup with a hint that the list cannot be deleted as there are
// linked cards. We can adapt the query above so we can list the linked
// cards.
// Related:
// client/components/cards/cardDetails.js about line 969
// https://github.com/wekan/wekan/issues/2785
const message = `${TAPi18n.__(
'delete-linked-cards-before-this-list',
)} linkedId: ${
this._id
} at client/components/lists/listHeader.js and https://github.com/wekan/wekan/issues/2785`;
alert(message);
}
Utils.goBoardId(this.boardId);
}),
});
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
BlazeComponent.extendComponent({
onCreated() {
this.currentList = this.currentData();
@@ -240,7 +295,11 @@ BlazeComponent.extendComponent({
},
isSelected(color) {
return this.currentColor.get() === color;
if (this.currentColor.get() === null) {
return color === 'white';
} else {
return this.currentColor.get() === color;
}
},
events() {
+17
View File
@@ -0,0 +1,17 @@
template(name="brokenCardsHeaderBar")
h1
| {{_ 'broken-cards'}}
template(name="brokenCards")
if currentUser
if searching.get
+spinner
else if hasResults.get
.global-search-results-list-wrapper
if hasQueryErrors.get
div
each msg in errorMessages
span.global-search-error-messages
= msg
else
+resultsPaged(this)
+18
View File
@@ -0,0 +1,18 @@
import { CardSearchPagedComponent } from '../../lib/cardSearch';
BlazeComponent.extendComponent({}).register('brokenCardsHeaderBar');
Template.brokenCards.helpers({
userId() {
return Meteor.userId();
},
});
class BrokenCardsComponent extends CardSearchPagedComponent {
onCreated() {
super.onCreated();
Meteor.subscribe('brokenCards', this.sessionId);
}
}
BrokenCardsComponent.register('brokenCards');
+31
View File
@@ -0,0 +1,31 @@
.broken-cards-card-wrapper
margin-top: 0
margin-bottom: 10px
border-width: 3px !important
border-color: grey !important
border-style: solid
border-radius: 5px
padding: 1.5rem
background-color: white
.broken-cards-wrapper
max-width: 500px
margin-right: auto
margin-left: auto
.broken-cards-card-title
font-weight: bold
//padding: 10px
.broken-cards-context
display: inline-block
.broken-cards-context-separator
font-weight: bold
.broken-cards-context-list
//margin-bottom: 0.7rem
.broken-cards-null
color: darkred
font-style: italic
+57
View File
@@ -0,0 +1,57 @@
template(name="dueCardsHeaderBar")
if currentUser
h1
i.fa.fa-calendar
| {{_ 'dueCards-title'}}
.board-header-btns.left
a.board-header-btn.js-due-cards-view-change(title="{{_ 'dueCardsViewChange-title'}}")
i.fa.fa-caret-down
if $eq dueCardsView 'me'
i.fa.fa-user
| {{_ 'dueCardsViewChange-choice-me'}}
if $eq dueCardsView 'all'
i.fa.fa-users
| {{_ 'dueCardsViewChange-choice-all'}}
template(name="dueCardsModalTitle")
if currentUser
h2
i.fa.fa-keyboard-o
| {{_ 'dueCards-title'}}
template(name="dueCards")
if currentUser
if searching.get
+spinner
else if hasResults.get
.global-search-results-list-wrapper
if hasQueryErrors.get
div
each msg in errorMessages
span.global-search-error-messages
= msg
else
+resultsPaged(this)
template(name="dueCardsViewChangePopup")
if currentUser
ul.pop-over-list
li
with "dueCardsViewChange-choice-me"
a.js-due-cards-view-me
i.fa.fa-user.colorful
| {{_ 'dueCardsViewChange-choice-me'}}
if $eq Utils.dueCardsView "me"
i.fa.fa-check
hr
li
with "dueCardsViewChange-choice-all"
a.js-due-cards-view-all
i.fa.fa-users.colorful
| {{_ 'dueCardsViewChange-choice-all'}}
span.sub-name
+viewer
| {{_ 'dueCardsViewChange-choice-all-description' }}
if $eq Utils.dueCardsView "all"
i.fa.fa-check
Loaded 100 of 886 files, more files were not shown because too many files have changed in this diff. Show more