Compare commits

...
1559 Commits
Author SHA1 Message Date
Lauri Ojansivu 8ea9780140 v7.09 2023-08-21 00:44:23 +03:00
Lauri Ojansivu 925099a1ee Merge pull request #5095 from mfilser/attachments-display_images_full_width
Attachments, big images are now fully displayed
2023-08-21 00:34:57 +03:00
Martin Filser 16a2cc6ba9 Attachments, big images are now fully displayed 2023-08-20 23:30:28 +02:00
Lauri Ojansivu 94bc6d8e45 Updated ChangeLog. 2023-08-20 23:58:47 +03:00
Lauri Ojansivu da28af516d Merge pull request #5094 from mfilser/reactiveCache-full_implementation_collection_translation
ReactiveCache, full implementation of the collection "Translation"
2023-08-20 23:01:09 +03:00
Martin Filser 73b5bbfc9e ReactiveCache, full implementation of the collection "Translation" 2023-08-20 21:37:25 +02:00
Lauri Ojansivu e2dde19db2 Merge pull request #5093 from mfilser/translation_client_side
Translations are working on the client side again
2023-08-20 22:20:48 +03:00
Martin Filser f421d135a6 Translations are working on the client side again 2023-08-20 19:31:48 +02:00
Lauri Ojansivu ae4232465b Updated ChangeLog. 2023-08-20 19:28:37 +03:00
Lauri Ojansivu 112b628a99 Merge pull request #5092 from mfilser/reactiveCache-use_ejson
ReactiveCache, serialize and parse json with EJSON
2023-08-20 19:24:39 +03:00
Martin Filser bf313ca842 ReactiveCache, serialize and parse json with EJSON
- date object wasn't serialized and parsed right
- fixes #5086
2023-08-20 18:21:18 +02:00
Lauri Ojansivu a0da05c660 Merge pull request #5091 from mfilser/reactiveCache-use_default_parameters
ReactiveCache, use default parameters
2023-08-20 18:48:46 +03:00
Martin Filser 394149b2e0 ReactiveCache, use default parameters
- it's not related to any known bug (as far as I know)
- it's only a good coding style to have default parameters
2023-08-20 16:21:04 +02:00
Lauri Ojansivu 9ce51d8db2 Updated translations. 2023-08-18 17:35:14 +03:00
Lauri Ojansivu 76591632c5 Updated ChangeLog. 2023-08-18 17:19:06 +03:00
Lauri Ojansivu b03ea37944 Merge pull request #5090 from DimDz/master
Move card to other boards API
2023-08-18 17:16:18 +03:00
Lauri Ojansivu 6e490b0f8d Updated translations. 2023-08-18 16:45:20 +03:00
DimDz 32e50b869d Added moveCard to editCard API 2023-08-18 15:48:49 +03:00
Lauri Ojansivu 6a38b9fb0f Updated translations. 2023-08-18 03:25:29 +03:00
Lauri Ojansivu 1f059898ca Updated translations. 2023-08-18 02:16:11 +03:00
Lauri Ojansivu cb4ce5cddf Updated ChangeLog. 2023-08-18 02:04:56 +03:00
Lauri Ojansivu 7dfb1eb6ce Fixed building s390x release. Part 2.
Thanks to xet7 !
2023-08-18 02:03:22 +03:00
Lauri Ojansivu 9857d4a5bf Updated ChangeLog. 2023-08-18 02:01:36 +03:00
Lauri Ojansivu 73f943f89a Fixed building s390x release.
Thanks to xet7 !
2023-08-18 02:00:12 +03:00
Lauri Ojansivu d5308d2d04 Updated translations. 2023-08-18 01:39:52 +03:00
Lauri Ojansivu b62221504d Updated ChangeLog. 2023-08-18 01:38:25 +03:00
Lauri Ojansivu 9d5af24e7b Upgraded Snap Candidate MongoDB to 6.0.9
Thanks to MongoDB developers !
2023-08-18 01:36:07 +03:00
Lauri Ojansivu fe20a5b54e Merge newest changes. 2023-08-18 01:08:36 +03:00
Lauri Ojansivu b068d07ce5 Updated release and startup scripts.
Thanks to xet7 !
2023-08-18 01:05:18 +03:00
Lauri Ojansivu a494c768f2 Merge newest changes. 2023-08-17 23:15:58 +03:00
Lauri Ojansivu 7b94188f64 Update release scripts. Part 5. 2023-08-17 23:14:23 +03:00
Lauri Ojansivu 249d3b0739 Merge branch 'master' of github.com:wekan/wekan 2023-08-17 23:09:27 +03:00
Lauri Ojansivu e181f3a385 v7.08 2023-08-17 23:08:48 +03:00
Lauri Ojansivu 90797066e7 Merge newest changes. 2023-08-17 23:07:33 +03:00
Lauri Ojansivu 13711f02b6 Updated translations. 2023-08-17 23:02:15 +03:00
Lauri Ojansivu f8adc3605a Updated ChangeLog. 2023-08-17 22:32:08 +03:00
Lauri Ojansivu f75fd82339 Merge pull request #5088 from VidVidex/master
Fix broken attachment preview in safari
2023-08-17 22:29:16 +03:00
Lauri Ojansivu 45edeccef9 Updated ChangeLog. 2023-08-17 22:24:19 +03:00
Vid Smole 6ffde36d84 Fix navigation between attachments 2023-08-17 21:21:56 +02:00
Vid Smole 17aa702860 Fix attachment viewer in safari 2023-08-17 21:21:31 +02:00
Lauri Ojansivu 4c7f1090fd v7.08 2023-08-17 21:48:00 +03:00
Lauri Ojansivu baf1ddc8e5 Merge pull request #5087 from ipyramiddev/master
Corrected source code so that it works correctly with reactiveCache
2023-08-17 21:24:32 +03:00
Yevhenii Pertiaka 38b1301258 Corrected source code so that it works correctly with reactiveCache #5000 2023-08-18 03:20:45 +09:00
Lauri Ojansivu f295f42363 Updated translations. 2023-08-17 21:02:50 +03:00
Lauri Ojansivu 0716eba84e Updated ChangeLog. 2023-08-17 20:25:12 +03:00
Lauri Ojansivu c47d5ca64e Update release scripts. Part 4. 2023-08-17 20:20:54 +03:00
Lauri Ojansivu 7d48fe4c23 Updated translations. 2023-08-17 20:15:59 +03:00
Lauri Ojansivu f4a6ce9f31 Updated ChangeLog. 2023-08-17 19:53:42 +03:00
Lauri Ojansivu c769bed7dd Added remaining translations to feature custom transaltion strings on Admin Panel.
Thanks to xet7 !
2023-08-17 19:49:29 +03:00
Yevhenii Pertiaka b1525d4221 Added new function to add cumstom translation strings on Admin panel 2023-08-17 21:54:14 +09:00
Lauri Ojansivu 4153fe7d0d Updated ChangeLog. 2023-08-17 00:23:16 +03:00
Lauri Ojansivu c570e426a1 Updated release scripts. Part 3. 2023-08-17 00:22:17 +03:00
Lauri Ojansivu 271877565b Updated ChangeLog. 2023-08-17 00:03:25 +03:00
Lauri Ojansivu d6b960f79a Updated release scripts. Part 2.
Thanks to xet7 !
2023-08-17 00:01:53 +03:00
Lauri Ojansivu be938ebd4b Updated ChangeLog. 2023-08-16 23:52:51 +03:00
Lauri Ojansivu 558d406148 Updated release scripts.
Thanks to xet7 !
2023-08-16 23:51:50 +03:00
Lauri Ojansivu f61b9239de v7.07 2023-08-16 22:51:44 +03:00
Lauri Ojansivu 409bd50d67 Updated ChangeLog. 2023-08-16 22:33:26 +03:00
Lauri Ojansivu 48dcd11af0 Add some filename, if there is no filename after sanitize.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/5083
2023-08-16 22:32:40 +03:00
Lauri Ojansivu 08afc05c38 Updated ChangeLog. 2023-08-16 21:28:33 +03:00
Lauri Ojansivu 28e97808f5 Add warning to beginning of sanitized filename.
Thanks to xet7!

Related https://github.com/wekan/wekan/pull/5083
2023-08-16 21:28:03 +03:00
Lauri Ojansivu 8a1c2e8860 Merge pull request #5083 from VidVidex/master
Fix downloading attachments with unusual filenames [WIP]
2023-08-16 20:30:43 +03:00
Lauri Ojansivu 4b22174183 Updated ChangeLog. 2023-08-16 20:14:07 +03:00
Lauri Ojansivu 9bf3b960a1 s390x disabled, because there is problem adding fibers.
Thanks to xet7 !
2023-08-16 20:12:22 +03:00
Vid Smole fa58d0ec3b Rename files with possible XSS
Previously upload of such files would fail silently.
Now they are renamed to a sanitized version and a warning is printed in the console.
2023-08-16 18:51:40 +02:00
Lauri Ojansivu 03f7fd6340 Updated ChangeLog. 2023-08-16 19:44:06 +03:00
Lauri Ojansivu d48068f63c Update Windows bundle build script.
Thanks to xet7 !
2023-08-16 19:42:06 +03:00
Lauri Ojansivu 998f3fe8a7 v7.06 2023-08-15 14:46:59 +03:00
Lauri Ojansivu 81ece7cec2 Merge pull request #5080 from VidVidex/5074-swiping
Add attachment swiping
2023-08-14 16:46:42 +03:00
Vid Smole 30073ce1d6 Add attachment swiping 2023-08-14 15:38:13 +02:00
Lauri Ojansivu fc9fb9132c Updated translations. 2023-08-13 02:48:42 +03:00
Lauri Ojansivu 2f8c01eccf Updated ChangeLog. 2023-08-13 02:45:54 +03:00
Lauri Ojansivu 6d1705af34 Update building Windows bundle.
Thanks to xet7 !
2023-08-13 02:44:17 +03:00
Lauri Ojansivu fa6db6118d Updated translations. 2023-08-12 16:27:48 +03:00
Lauri Ojansivu f555acee6f Updated ChangeLog. 2023-08-09 22:24:08 +03:00
Lauri Ojansivu 4bc5799b4f Merge pull request #5075 from mfilser/label_drag_drop_and_reorder
label drag/drop (reorder labels) works now again
2023-08-09 21:26:49 +03:00
Martin Filser b2b8a99899 label drag/drop (reorder labels) works now again 2023-08-09 20:11:16 +02:00
Lauri Ojansivu 9641ac7ee8 Updated ChangeLog. 2023-08-09 16:56:35 +03:00
Lauri Ojansivu f9823f67bd Updated exceljs and jszip.
Thanks to developers of dependencies !
2023-08-09 16:54:27 +03:00
Lauri Ojansivu af14ff6e89 Updated translations. 2023-08-09 16:54:10 +03:00
Lauri Ojansivu 323f1b1d87 Updated ChangeLog. 2023-08-09 02:49:27 +03:00
Lauri Ojansivu 3e23a5ddce Merge pull request #5071 from chrisi51/alphabetic-order
Alphabetic ordered member lists on assigne and member lists
2023-08-09 02:40:45 +03:00
Christian 037bba83d6 Alphabetic ordered member lists on assigne and member lists 2023-08-08 23:24:35 +00:00
Lauri Ojansivu a60acac51a Updated ChangeLog. 2023-08-08 15:45:32 +03:00
Lauri Ojansivu eea0b1afc4 v7.05 2023-08-08 12:08:01 +03:00
Lauri Ojansivu 9a6d0c4aad Updated ChangeLog. 2023-08-08 11:58:39 +03:00
Lauri Ojansivu 1c530632ac Merge branch 'master' of https://github.com/chrisi51/wekan 2023-08-08 11:49:55 +03:00
Christian 18c49695b1 Optimize member list popups 2023-08-08 08:31:23 +00:00
Christian c8a743bb8e Fixing positioning of opened cards 2023-08-08 00:05:19 +00:00
Lauri Ojansivu 7e92068955 Updated dependencies. 2023-08-07 22:42:13 +03:00
Lauri Ojansivu 8c84254392 Updated ChangeLog. 2023-08-07 17:43:01 +03:00
Lauri Ojansivu 6b1403984f Fixed Normal (non-admin) board users cannot adjust swimlane height.
Thanks to mgdbbrt and xet7 !

Fixes #5063
2023-08-07 17:41:33 +03:00
Lauri Ojansivu c965cc9b76 Updated ChangeLog. 2023-08-07 17:15:28 +03:00
Lauri Ojansivu ab40737211 Show option b) -1 for disabling swimlane height at swimlane height popup.
Thanks to xet7 !
2023-08-07 17:12:49 +03:00
Lauri Ojansivu 950b477d9d Updated ChangeLog. 2023-08-07 17:02:13 +03:00
Lauri Ojansivu 529a43fa0e Updated dependencies. 2023-08-07 16:59:17 +03:00
Lauri Ojansivu eb16cd19bb Merge branch 'swimlane-default' of https://github.com/mark-i-m/wekan 2023-08-07 16:30:59 +03:00
Lauri Ojansivu fbd64a6a9e Updated translations. 2023-08-07 16:23:02 +03:00
mark 7536c7b532 allow -1 as 'auto' 2023-08-03 22:03:30 -05:00
mark 406766a82b make default swimlane auto-height 2023-08-03 22:03:30 -05:00
Lauri Ojansivu 5bb794e3bb v7.04 2023-08-03 22:21:18 +03:00
Lauri Ojansivu ee73e04004 Updated ChangeLog. 2023-08-03 22:18:37 +03:00
Lauri Ojansivu 672be413f7 Updated translations. 2023-08-03 22:17:03 +03:00
Lauri Ojansivu b0ba57a165 Updated ChangeLog. 2023-08-03 22:15:50 +03:00
Lauri Ojansivu 79c2301ad5 Updated dependencies. 2023-08-03 22:15:25 +03:00
Lauri Ojansivu b2c7be244e Updated translations. 2023-08-03 21:37:09 +03:00
Lauri Ojansivu 8f8c045930 Merge pull request #5058 from VidVidex/master
Do not open preview for attachments that cannot be previewed
2023-08-03 20:12:05 +03:00
Vid Smole 21ffff3977 Do not open preview for attachments that cannot be previewed 2023-08-03 18:57:12 +02:00
Lauri Ojansivu 7d1bca3702 Merge pull request #5056 from cloudron-io/login-layout-fixes-2
Login layout fixes 2
2023-08-03 18:38:29 +03:00
Johannes Zellner d93a58d892 Do not show OAuth2 in auth method dropdown as it has its own button 2023-08-03 17:17:08 +02:00
Johannes Zellner 99d9291a28 Never show the login form OR separator
So many states for with password enabled/disabled treated async
separately. Might be easier to bring back once password login is treated
like saml/ldap/... while still using the very same form elements
regardless
2023-08-03 17:00:34 +02:00
Johannes Zellner bda166ba50 Ensure we subscribe to currentSettings in login view 2023-08-03 16:53:23 +02:00
Johannes Zellner f190a102f9 formAuthenticationMethods is an array
part of #5051
2023-08-03 16:41:27 +02:00
Lauri Ojansivu d0ba89d913 Updated translations. 2023-08-03 12:53:38 +02:00
Lauri Ojansivu cb4f3c8895 Updated ChangeLog. 2023-08-03 12:50:44 +02:00
Lauri Ojansivu fd003f4402 Merge pull request #5055 from Pandetthe/master
Fix edit_swimlane
2023-08-03 13:46:27 +03:00
Jakub Jurczyk 3a22d4efdc Fix edit_swimlane 2023-08-03 12:44:22 +02:00
Lauri Ojansivu 48c763dbe3 v7.03 2023-08-02 20:27:39 +03:00
Lauri Ojansivu 10a9aef974 Updated translations. 2023-08-02 20:24:03 +03:00
Lauri Ojansivu eecb143977 Updated ChangeLog. 2023-08-02 20:22:33 +03:00
Lauri Ojansivu 767bbc5195 Merge pull request #5049 from cloudron-io/displayAuthenticationMethod-only-refers-to-select
Move authentication UI handling in correct place
2023-08-02 20:13:39 +03:00
Johannes Zellner b107fb0017 Move authentication UI handling in correct place
The connectionMethod component only deals with the authentication method
select input.

Fixes #5048
2023-08-02 18:36:15 +02:00
Lauri Ojansivu a94cc5351f Merge pull request #5047 from Pandetthe/master
Fix return value of edit_custom_field_dropdown_item
2023-08-02 15:26:45 +03:00
Jakub Jurczyk 7865368153 Fix return value of edit_custom_field_dropdown_item 2023-08-02 14:11:47 +02:00
Lauri Ojansivu 1be3a5c918 v7.02 2023-08-02 07:35:51 +03:00
Lauri Ojansivu 10d90046b9 Updated dependencies. 2023-08-02 07:16:41 +03:00
Lauri Ojansivu 16eb499806 Updated translations. 2023-08-02 07:07:50 +03:00
Lauri Ojansivu ef39dfc051 Updated ChangeLog. 2023-08-02 07:04:25 +03:00
Lauri Ojansivu 9f6e6bdc81 Upgrade to Node.js 14.21.4 at build scripts and remaining Docker containers.
Thanks to Meteor and xet7 !
2023-08-02 06:58:45 +03:00
Lauri Ojansivu a60102f6c6 Updated ChangeLog. 2023-08-02 06:10:43 +03:00
Lauri Ojansivu f0620ce880 Upgrade WeKan StackSmith to Node.js 14.21.4 .
Thanks to Meteor and xet7 !
2023-08-02 06:09:24 +03:00
Lauri Ojansivu c40b27d9ad Updated ChangeLog. 2023-08-02 06:02:25 +03:00
Lauri Ojansivu 0161f19ba7 Upgrade WeKan Snap Candidate to Node.js 14.21.4 .
Thanks to Meteor and xet7 !
2023-08-02 06:01:00 +03:00
Lauri Ojansivu 4885934477 Updated translations. 2023-08-02 04:05:39 +03:00
Lauri Ojansivu f7b34bc85b Updated ChangeLog. 2023-08-02 04:04:01 +03:00
Lauri Ojansivu f9ed7e1baf Merge pull request #5043 from Pandetthe/master
Fix assignees description
2023-08-01 18:45:03 +03:00
Jakub Jurczyk aca6ba5270 Fix assignees description 2023-08-01 17:30:14 +02:00
Lauri Ojansivu 31636eb0c0 Updated ChangeLog. 2023-08-01 16:49:08 +03:00
Lauri Ojansivu a773abaf2f Upgrade to MongoDB 6.0.8 in Snap Candidate.
Thanks to MongoDB developers!
2023-08-01 16:47:17 +03:00
Lauri Ojansivu 7001f8edaf Updated ChangeLog. 2023-08-01 16:45:10 +03:00
Lauri Ojansivu 7b607b2aaf Fixed v7.01.0 fresh install in listview first column small.
Thanks to intellekta and xet7 !

Fixes #5034
2023-08-01 16:42:58 +03:00
Lauri Ojansivu f3845549fe Updated translations. 2023-08-01 16:38:16 +03:00
Lauri Ojansivu d3a87beef1 Updated ChangeLog. 2023-08-01 16:27:21 +03:00
Lauri Ojansivu 62c2d59f46 Drag board made translateable.
Thanks to xet7 !
2023-08-01 16:25:41 +03:00
Lauri Ojansivu b73e65d63e Updated translations. 2023-08-01 15:30:53 +03:00
Lauri Ojansivu 0b1f906576 Updated ChangeLog. 2023-08-01 15:28:15 +03:00
Lauri Ojansivu e5423989a1 Merge pull request #5041 from cloudron-io/login-layout-code-cleanup
Login layout code cleanup
2023-08-01 15:27:03 +03:00
Lauri Ojansivu a8197a990e Updated ChangeLog. 2023-08-01 15:25:53 +03:00
Lauri Ojansivu e4ae57bf7f Merge pull request #5040 from Pandetthe/master
Fix get_board_cards_count
2023-08-01 15:23:55 +03:00
Lauri Ojansivu 6ad5ede317 Updated ChangeLog. 2023-08-01 15:22:56 +03:00
Johannes Zellner 1271409989 Avoid further UI flickering on load and show/hide OR in login screen if more than one is active
Fixes #5028
2023-08-01 12:58:38 +02:00
Johannes Zellner d17d12e719 The oidc button text is actually set in the DOM tree change later in the file 2023-08-01 12:58:38 +02:00
Johannes Zellner a5f918c670 Remove unneccary and dead code to handle case where custom logo is not set 2023-08-01 12:58:38 +02:00
Jakub Jurczyk 5d6367f404 Fix get_board_cards_count 2023-08-01 12:32:04 +02:00
Lauri Ojansivu 8dc7aa490a Update WeKan Docker to Node.js 14.21.4. Thanks to Meteor and xet7! 2023-08-01 10:36:05 +03:00
Lauri Ojansivu bf0187f2c4 Updated translations. 2023-08-01 07:00:41 +03:00
Lauri Ojansivu 6c34b75061 Updated ChangeLog. 2023-07-31 23:52:08 +03:00
Lauri Ojansivu c4fdc5987b Merge pull request #5037 from mfilser/first_registration_must_be_an_admin_user
first registration after installation must be an admin account
2023-07-31 23:44:40 +03:00
Martin Filser 70c2f0f89f first registration after installation must be an admin account 2023-07-31 21:41:00 +02:00
Lauri Ojansivu bcdad79621 Updated translations. 2023-07-31 17:27:23 +03:00
Lauri Ojansivu d9a4d7a521 Updated ChangeLog. 2023-07-31 17:21:57 +03:00
Lauri Ojansivu a50cc9fb8c Merge pull request #5032 from cloudron-io/stable-login-form
Only selectively show login elements once settings is loaded
2023-07-31 17:16:48 +03:00
Johannes Zellner ab19bbce8e Only selectively show login elements once settings is loaded
Fixes #5029
2023-07-30 13:43:03 +02:00
Lauri Ojansivu 25c8f07c62 Updated ChangeLog. 2023-07-30 02:15:19 +03:00
Lauri Ojansivu db40c94f02 Updated ChangeLog. 2023-07-30 02:10:12 +03:00
Lauri Ojansivu 871f68058e Updated dependencies. 2023-07-30 02:08:05 +03:00
Lauri Ojansivu 3f91dd23bc Updated translations. 2023-07-30 02:07:46 +03:00
Lauri Ojansivu 7baf7d2256 Don't translate width and height minimum value.
Thanks to xet7 !
2023-07-30 01:55:40 +03:00
Lauri Ojansivu 76b9ce4fe3 Merge branch 'mark-i-m-master' 2023-07-30 01:42:52 +03:00
Lauri Ojansivu a2f479f4bd Merge branch 'master' of https://github.com/mark-i-m/wekan into mark-i-m-master 2023-07-30 01:41:45 +03:00
Lauri Ojansivu fafd8a077f Updated ChangeLog. 2023-07-30 01:38:57 +03:00
Lauri Ojansivu caa8d08738 Upgrade to Meteor 2.13 and Node.js 14.21.4 .
Thanks to Meteor developers !
2023-07-30 01:36:01 +03:00
Lauri Ojansivu 13979389ca v7.01 2023-07-21 02:00:24 +03:00
Lauri Ojansivu 350a52935a Updated translations. 2023-07-21 01:56:26 +03:00
Lauri Ojansivu 945e57bb43 Updated ChangeLog. 2023-07-21 01:06:11 +03:00
Lauri Ojansivu 3c374a2891 Merge pull request #5023 from mfilser/attachment_rename_and_delete_for_non_board_admins
Attachment rename and delete works now again for non board admins
2023-07-21 01:05:17 +03:00
Lauri Ojansivu c9074bd8d9 Updated ChangeLog. 2023-07-21 01:03:56 +03:00
Martin Filser bc685c59e0 Attachment rename and delete works now again for non board admins 2023-07-20 23:44:22 +02:00
Lauri Ojansivu aa53ad38fc Merge pull request #5022 from mfilser/removing_utils_getCurrentSetting
removing Utils.getCurrentSetting() and use ReactiveCache directly
2023-07-21 00:41:37 +03:00
Martin Filser 875442f1ce removing Utils.getCurrentSetting() and use ReactiveCache directly 2023-07-20 21:11:29 +02:00
Lauri Ojansivu a8c071f04c Updated translations. 2023-07-20 21:35:44 +03:00
Lauri Ojansivu ef6c9c66af Updated ChangeLog. 2023-07-20 20:00:07 +03:00
Lauri Ojansivu 3df38447e9 Updated ChangeLog. 2023-07-20 19:55:35 +03:00
Lauri Ojansivu 338aabc02f Merge pull request #5021 from mfilser/minicard_show_assignee
Minicard didn't show the assignee
2023-07-20 19:53:59 +03:00
Martin Filser 912717ebf9 Minicard didn't show the assignee 2023-07-20 17:16:47 +02:00
Lauri Ojansivu 9f1a2ec625 Updated dependencies. 2023-07-20 14:44:52 +03:00
Lauri Ojansivu 93f0a69c53 Updated ChangeLog. 2023-07-20 14:44:26 +03:00
Lauri Ojansivu 2846522450 Merge pull request #5019 from DimDz/master
Fix for Calendar View Create Card
2023-07-20 14:34:44 +03:00
DimDz be8374d100 Update boardBody.js 2023-07-20 14:30:42 +03:00
DimDz 399f63cef6 Update boardBody.css 2023-07-20 14:28:31 +03:00
Lauri Ojansivu adf8f7b69a 7.00 2023-07-19 22:24:37 +03:00
Lauri Ojansivu 8e9206bdee Updated dependencies. 2023-07-19 22:07:09 +03:00
Lauri Ojansivu 1946ba150d v7.01 2023-07-19 22:03:24 +03:00
Lauri Ojansivu 60cb5fb017 Added missing @babel/runtime.
Thanks to xet7 !
2023-07-19 21:53:15 +03:00
Lauri Ojansivu 1892a17855 v7.00 2023-07-19 21:26:24 +03:00
Lauri Ojansivu 588e051f0f Updated translations. 2023-07-19 21:18:26 +03:00
Lauri Ojansivu 1c5857f064 Forked meteor-globals and meteor-reactive-cache to @wekanteam/meteor-globals and @wekanteam/meteor-reactive-cache to update to newest non-vulnerable dependencies.
Thanks to xet7 !
2023-07-19 21:08:21 +03:00
Martin Filser 1067542b94 Move every Attachments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:29 +02:00
Martin Filser 538e197147 Move every Avatars.find(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:29 +02:00
Martin Filser 36db6c6e2d Move every CardCommentReactions.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser e53b63541e Move every Attachments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser d6ca13a61d Move every CardComments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 7caf817c81 Move every Activities.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 286617e7be Move every Integrations.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser a423f7883e Move every Triggers.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 6d949ccdb4 Move every Actions.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 0e0ac36788 Move every Rules.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 99ab6d13d4 Move every Team.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser dcf7232958 Move every Org.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser a4408b55ed Move every Checklists.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 06f0ceebd1 Move every ChecklistItems.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 5fe78a477c removing Meteor.publish('customFields', ...) because it's not used (dead code) 2023-07-18 21:25:29 +02:00
Martin Filser 7ef8de50bd Move every CustomFields.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 6646b8638e Move every Users.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 46840c9373 Move every Swimlanes.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 76bd3bfe1d Move every Lists.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 2a2ed1eb2c Move every Cards.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser a533605608 Move every Boards.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 7749c0bd9a server/publications files, adding return parameter for easier time measure (e.g. console.time()) 2023-07-18 21:25:29 +02:00
Martin Filser a37caf459e back to ReactiveCache.getCards and still fixing the flip "Card Drag/Drop" issue 2023-07-18 21:25:29 +02:00
Martin Filser 1c0a1e021a ReactiveCache, adding parameter "getCursor" 2023-07-18 21:25:29 +02:00
Martin Filser f483b162ce Speed up board loading, skip loading the full sidebar
- only load the sidebar when viewing
2023-07-18 21:25:29 +02:00
Martin Filser 42fad8fb98 ReactiveMiniMongoIndex, added getCardCommentsWithCardId 2023-07-18 21:25:29 +02:00
Martin Filser 316acd0366 ReactiveMiniMongoIndex, added getChecklistItemsWithChecklistId 2023-07-18 21:25:29 +02:00
Martin Filser f80ecded0a ReactiveMiniMongoIndex, added getChecklistsWithCardId 2023-07-18 21:25:29 +02:00
Martin Filser 40a5422e75 ReactiveMiniMongoIndex created, Javascript Index of MiniMongo Client Database
- I didn't find a solution to have indexes in MiniMongo on client. As i see /
  believe there isn't this feature yet in Meteor (v2.10).
- I got this and many more results while looking for an solution:

  https://forums.meteor.com/t/adding-indexing-to-minimongo/9130/12
  https://github.com/meteor/meteor-feature-requests/issues/66

So to speed up the MiniMongo i decided to create a own class for this,
currently per query. Of course, this isn't the best solution, but works for now
good.
2023-07-18 21:25:29 +02:00
Martin Filser 726fd5d60d Card Drag/Drop doesn't flip anymore
- .fetch() is causing a short flip after card dragging
2023-07-18 21:25:29 +02:00
Martin Filser 211656e9da removing unused method "activeMembers2()" 2023-07-18 21:25:29 +02:00
Martin Filser 5eb4eb04c4 Move every Attachments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser fb3b47e2bb Move every Attachments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:29 +02:00
Martin Filser 14ac099e87 Move every Attachments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:29 +02:00
Martin Filser f83ee124d0 Move every Boards.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:29 +02:00
Martin Filser 59ee616304 Move every CardComments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser 25989b9736 Move every CardComments.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:29 +02:00
Martin Filser fef6433b75 Move every Activities.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:29 +02:00
Martin Filser ea72ce1fa2 Move every Integrations.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:29 +02:00
Martin Filser 26e326a204 Move every Integrations.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:29 +02:00
Martin Filser ebb356cf2d Move every Triggers.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:29 +02:00
Martin Filser d6142e4b75 Move every Triggers.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:29 +02:00
Martin Filser c7b554afd9 Move every Actions.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 30c1b5cca8 Move every Rules.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 0c58bcf99c Move every Rules.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser f3d58339ae Move every Team.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 67c6dd7bee Move every Team.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser f2d52b55c8 Move every Org.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 8c72531e6d Move every Org.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser b2f19ed714 Move every Checklists.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:28 +02:00
Martin Filser e5359dc838 Move every Checklists.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 6fd3c0fa6b Move every ChecklistItems.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 981a641bce Move every CustomFields.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 47c70f03a2 Move every CustomFields.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser 030359aa0e Move every Users.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 81c9bb6899 Move every Users.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser 4d192a0165 Move every Swimlanes.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:28 +02:00
Martin Filser 33a8de7bb5 Move every Swimlanes.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 9125ab440d Move every Swimlanes.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser 1c966ed7b4 Move every Lists.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:28 +02:00
Martin Filser 6a4b03324c Move every Lists.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 4a8dcde8ee Move every Lists.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser c2139662cd Move every Cards.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory server/) 2023-07-18 21:25:28 +02:00
Martin Filser c0ecfb87b0 Move every Cards.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory models/) 2023-07-18 21:25:28 +02:00
Martin Filser 7673c77c57 Move every Cards.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser 66c2140911 replace Array#forEach() ... Array#push with Array#map 2023-07-18 21:25:28 +02:00
Martin Filser ea3144492e board page didn't always show the list counters 2023-07-18 21:25:28 +02:00
Martin Filser 10a9306abd Move every Boards.find(idOrFirstObjectSelector, options) to the ReactiveCache (directory client/) 2023-07-18 21:25:28 +02:00
Martin Filser 76aae41637 Move every InvitationCodes.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 49071ca5fd Move every SessionData.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 08e3ca3435 Move every Activities.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 6b7b464acc Move every Integrations.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 767d8e66e7 Move every ImpersonatedUsers.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser e30edce73e Move every CardCommentReactions.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser f5796faa84 Move every Triggers.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser b48297df22 Move every Actions.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser c262620993 Move every Rules.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 41685536d7 removing comment code 2023-07-18 21:25:28 +02:00
Martin Filser 92052458f5 Move every Meteor.users.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 6c3170360b Move every Team.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser cd3a27941c Move every Org.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 8a98f03f1a Move every ChecklistItems.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 5552c17eba Move every Checklists.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 92733b24d1 Move every CardComments.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 806ad78637 Move every CustomFields.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 9e557f6887 Move every Lists.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser ad9daba60d Move every Users.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 2c92524cf4 Move every Boards.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 06e374f0ff Move every Cards.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 48ba81eb3d Move every Swimlanes.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 0767f50af8 Move every Users.findOne(idOrFirstObjectSelector, options) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 68610e5066 fix if userId in _meteorSession is undefined 2023-07-18 21:25:28 +02:00
Martin Filser ba9e2debe2 ReactiveCache, adding options to every method 2023-07-18 21:25:28 +02:00
Martin Filser 6c8a5cc580 ReactiveCache, adding methods for Mongo.Collection#find 2023-07-18 21:25:28 +02:00
Martin Filser 3a7eece244 ReactiveCache, id Methods can contain now selector to get the first object (findOne()) 2023-07-18 21:25:28 +02:00
Martin Filser bf27ffb92e Move every Checklists.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 3fc9c6efe7 Move every Attachments.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser fe2015735a Move every Team.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 2ab34d3b87 Move every Org.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 79ea4d6d1e Move every Activities.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 54f7361767 Move every CustomFields.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 0a7ffe4cb0 Move every CardComments.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 0e714a90e0 Move every ChecklistItems.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 5e3a9dc059 Move every Meteor.user() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 6e1ef3d94a Move every Users.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser bf48d4371c Move every Swimlanes.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 2f2aa7b08a insert linked card at search dialog set's now the next card number too 2023-07-18 21:25:28 +02:00
Martin Filser 20b0422024 insert linked board set's now the next card number too 2023-07-18 21:25:28 +02:00
Martin Filser dcb9fb7465 insert linked card set's now the next card number too 2023-07-18 21:25:28 +02:00
Martin Filser 3a287a494b insert linked card at search dialog also add the card at top/bottom 2023-07-18 21:25:28 +02:00
Martin Filser 0926943670 Move every Lists.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 06e26d8d89 insert linked card dialog, sort swimlanes, lists and cards by field "sort" 2023-07-18 21:25:28 +02:00
Martin Filser 94953a1c97 use card.getRealId() 2023-07-18 21:25:28 +02:00
Martin Filser 02e9795816 insert linked board at top/bottom 2023-07-18 21:25:28 +02:00
Martin Filser c29cff3822 insert linked card, move sortIndex to function 2023-07-18 21:25:28 +02:00
Martin Filser 29216599e4 insert linked card at top/bottom of list 2023-07-18 21:25:28 +02:00
Martin Filser 3b65113d05 Move every Cards.findOne() to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser a182482cfb Move every Boards.findOne(boardId) to the ReactiveCache (Part 2) 2023-07-18 21:25:28 +02:00
Martin Filser 9022e9949f Move every Boards.findOne(Session.get('currentBoard')) to the ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser cecf69af02 fix wrong function / variable name (currentSetting -> currentAnnouncements) 2023-07-18 21:25:28 +02:00
Martin Filser b7dbeba7de add currentSetting to ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser c6ee58ef88 add "currentList" to ReactiveCache 2023-07-18 21:25:28 +02:00
Martin Filser 1b3135a79f models/cards.js, use getRealId() for setter too 2023-07-18 21:25:28 +02:00
Martin Filser 131959e050 minicard.js, reduce this.data().board() call 2023-07-18 21:25:28 +02:00
Martin Filser 3f3b4746a9 adding ReactiveCache to other source code 2023-07-18 21:25:28 +02:00
Martin Filser 30d154724a currentBoard is very often called in jade files, so use there the cache too 2023-07-18 21:25:27 +02:00
Martin Filser 16130b3f73 Move ReactiveCache to imports
- so it's available for the Server too
2023-07-18 21:25:27 +02:00
Martin Filser 47427f89b0 Adding new ReactiveCache 2023-07-18 21:25:27 +02:00
Martin Filser 384d80a647 card.js, clean up redudant code 2023-07-18 21:25:27 +02:00
Martin Filser 43d11af631 Performance, improving page load about 40% faster 2023-07-18 21:25:27 +02:00
Martin Filser 9bda4372a5 insert meteor-reactive-cache npm module
$ meteor npm install --save meteor-reactive-cache
2023-07-18 21:25:27 +02:00
Lauri Ojansivu 61223503e3 v6.99.9 2023-07-18 01:18:33 +03:00
Lauri Ojansivu 4d2ad079dc Updated dependencies. 2023-07-17 01:20:48 +03:00
Lauri Ojansivu 50c071682b Updated translations. 2023-07-17 01:20:33 +03:00
Lauri Ojansivu 015ccb7a28 Updated ChangeLog. 2023-07-17 00:52:08 +03:00
Lauri Ojansivu b9aed314f3 Merge pull request #5011 from NotTheEvilOne/pr/fix-oidc-without-groups
Fix "PROPAGATE_OIDC_DATA" mechanism if "info.groups" is undefined
2023-07-17 00:50:07 +03:00
Tobias Wolf 452e2e2408 Fix "PROPAGATE_OIDC_DATA" mechanism if "info.groups" is undefined
This may happen if no group information is shared via OAuth2/OIDC but synchronization of user data is intended by WeKan administration. Without the patch the following exception is raised:
Error in OAuth Server: groups is not iterable
2023-07-16 23:13:46 +02:00
Lauri Ojansivu 9370c1d472 v6.99.8 2023-07-13 12:11:36 +03:00
Lauri Ojansivu 8143dc9196 Updated ChangeLog. 2023-07-13 10:48:20 +03:00
Lauri Ojansivu 98ba18b052 Merge pull request #5009 from helioguardabaxo/fix-csv-import
Fix card creation. Now date fields are checked if they are empty.
2023-07-13 10:06:32 +03:00
helioguardabaxo 9860f20be3 Fix card creation. Now date fields are checked if they are empty. 2023-07-12 11:14:41 -03:00
Lauri Ojansivu cfbb06ed1f Updated translations. 2023-07-12 00:57:38 +03:00
Lauri Ojansivu e39760eb19 v6.99.7 2023-07-11 18:20:22 +03:00
Lauri Ojansivu b3da55f85c Merge pull request #5008 from wekan/dependabot/npm_and_yarn/semver-6.3.1
Bump semver from 6.3.0 to 6.3.1
2023-07-11 18:15:03 +03:00
dependabot[bot] bc4b637f06 Bump semver from 6.3.0 to 6.3.1
Bumps [semver](https://github.com/npm/node-semver) from 6.3.0 to 6.3.1.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v6.3.1/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v6.3.1)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-11 15:13:49 +00:00
Lauri Ojansivu c993c8f47e v6.99.6 2023-07-11 18:13:18 +03:00
Lauri Ojansivu 40470bedb3 Updated ChangeLog. 2023-07-11 18:08:23 +03:00
Lauri Ojansivu 912479baa4 Added back datepicker.
Thanks to xet7 !

Fixes #5007
2023-07-11 18:06:19 +03:00
Lauri Ojansivu cfbf3e320c Updated ChangeLog. 2023-07-10 15:12:13 +03:00
Lauri Ojansivu 4431ec5a27 Added missing character.
Thanks to xet7 !
2023-07-10 15:04:46 +03:00
Lauri Ojansivu d7784a8d38 Merge pull request #5004 from VidVidex/master
Fix setting background image
2023-07-10 14:53:07 +03:00
Vid Smole 2c4ed5f298 Fix setting background image 2023-07-10 13:19:19 +02:00
Lauri Ojansivu 6a97aeb60c v6.99.5 2023-07-10 06:30:41 +03:00
Lauri Ojansivu c7dc912dd4 Reverted bold of minicard title.
Thanks to xet7 !
2023-07-10 06:25:37 +03:00
Lauri Ojansivu 0ee886692e v6.99.4 2023-07-10 05:07:02 +03:00
Lauri Ojansivu 34fef627a1 Disable migration attachment-cardCopy-fix-boardId-etc. Part 3.
Thanks to xet7 !
2023-07-10 05:02:04 +03:00
Lauri Ojansivu 52d36d3780 v6.99.3 2023-07-10 03:10:24 +03:00
Lauri Ojansivu 8555c24eb2 Fix migration attachment-cardCopy-fix-boardId-etc. Part 2.
Thanks to xet7 !
2023-07-10 03:05:55 +03:00
Lauri Ojansivu c41c26e5a1 v6.99.2 2023-07-10 01:34:37 +03:00
Lauri Ojansivu 35cc9b3fcc Merge pull request #5001 from wekan/dependabot/npm_and_yarn/semver-and-mapbox/node-pre-gyp-7.5.4
Bump semver and @mapbox/node-pre-gyp
2023-07-10 01:29:14 +03:00
dependabot[bot] dbfd219491 Bump semver and @mapbox/node-pre-gyp
Bumps [semver](https://github.com/npm/node-semver) to 7.5.4 and updates ancestor dependency [@mapbox/node-pre-gyp](https://github.com/mapbox/node-pre-gyp). These dependencies need to be updated together.


Updates `semver` from 6.3.0 to 7.5.4
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v7.5.4)

Updates `@mapbox/node-pre-gyp` from 1.0.10 to 1.0.10
- [Changelog](https://github.com/mapbox/node-pre-gyp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mapbox/node-pre-gyp/compare/v1.0.10...v1.0.10)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
- dependency-name: "@mapbox/node-pre-gyp"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-09 22:19:13 +00:00
Lauri Ojansivu 0da5f26668 Updated ChangeLog. 2023-07-10 01:18:14 +03:00
Lauri Ojansivu 8bf40e219a Added back npm packages: fibers and @mapbox/node-pre-gyp.
Thanks to xet7 !
2023-07-10 01:11:37 +03:00
Lauri Ojansivu 8f1f8c0fb9 v6.99.1 2023-07-10 00:39:29 +03:00
Lauri Ojansivu 386a65d6c6 Updated ChangeLog. 2023-07-10 00:34:22 +03:00
Lauri Ojansivu a73ce72e46 Merge pull request #4999 from mfilser/fix_migration_attachment-cardCopy-fix-boardId-etc
fix for migration "attachment-cardCopy-fix-boardId-etc"
2023-07-10 00:30:39 +03:00
Lauri Ojansivu d0616d8d67 Updated ChangeLog. 2023-07-10 00:21:57 +03:00
Martin Filser 6ad007a5f1 fix for migration "attachment-cardCopy-fix-boardId-etc"
- every card must have a boardId, listId and swimlaneId, if not, the database
  data is corrupt, but the migration should also not break wekan from startup
2023-07-09 23:20:37 +02:00
Lauri Ojansivu 95d3e5cdc6 Updated dependencies.
Thanks to developers of dependencies !
2023-07-10 00:19:18 +03:00
Lauri Ojansivu 08a3506f12 v6.99 2023-07-09 23:11:22 +03:00
Lauri Ojansivu 520f295733 Updated translations. 2023-07-09 23:01:44 +03:00
Lauri Ojansivu 7da5121ddd Updated translations. 2023-07-09 22:57:43 +03:00
Lauri Ojansivu 3222625286 Updated ChangeLog. 2023-07-08 21:05:32 +03:00
Lauri Ojansivu 05d952b864 Merge pull request #4997 from VidVidex/master
Fix attachment viewer not being hidden
2023-07-08 21:03:07 +03:00
Vid Smole a3837ccbc7 Fix attachment viewer not being hidden 2023-07-08 19:22:40 +02:00
Lauri Ojansivu ac8199177f Updated ChangeLog. 2023-07-08 04:00:27 +03:00
Lauri Ojansivu 140a134a11 Fixed maximum call stack exceeded by removing bootstrap 3, datepicker and summernote. Updated jquery. Disabled attachments viewer that opens empty when opening card. Fixes all npm audit errors.
Fixes #4994,
fixes #3614

Thanks to xet7 !
2023-07-08 03:52:42 +03:00
Lauri Ojansivu c1b3e5367c Updated ChangeLog. 2023-07-08 01:35:22 +03:00
Lauri Ojansivu b637a8e8ea Revert first list width change.
Related https://github.com/wekan/wekan/pull/4993

Thanks to xet7 !
2023-07-08 01:30:55 +03:00
Lauri Ojansivu 999323526c Merge pull request #4993 from VidVidex/master
Small UI improvements
2023-07-08 01:30:14 +03:00
Lauri Ojansivu 2e0168283e Updated translations. 2023-07-08 01:25:11 +03:00
Lauri Ojansivu 13039c895a Updated ChangeLog. 2023-07-08 01:23:39 +03:00
Lauri Ojansivu 4148238af3 Removed horka:swipebox.
Thanks to VidVidex and xet7 !
2023-07-08 01:20:35 +03:00
Vid Smole 7a98445370 Better attachment viewer 2023-07-06 20:35:49 +02:00
Vid Smole 7ef3bba9f7 Better attachment gallery 2023-07-06 20:29:36 +02:00
Vid Smole 492306453c Fix first list being narrower than others 2023-07-06 13:22:38 +02:00
Vid Smole e12353bd7e Merge branch 'wekan:master' into master 2023-07-06 12:57:29 +02:00
Vid Smole a3622ddc1d Display card title in bold 2023-07-06 12:57:06 +02:00
Lauri Ojansivu ac95be9e41 Updated ChangeLog. 2023-07-05 14:14:27 +03:00
Lauri Ojansivu 4a3fc42d1f Merge pull request #4992 from VidVidex/master
Fix attachment urls in PR #4991
2023-07-05 07:13:19 -04:00
Vid Smole 557f9709ac Fix attachment urls 2023-07-05 12:52:18 +02:00
Lauri Ojansivu 4468c71d98 Updated ChangeLog. 2023-07-05 12:14:49 +03:00
Lauri Ojansivu c8491749e0 Merge pull request #4991 from VidVidex/master
Fix /api/boards/{boardId}/attachments endpoint
2023-07-05 05:13:14 -04:00
Vid Smole e5123f2d81 Merge branch 'wekan:master' into master 2023-07-05 11:06:11 +02:00
Vid Smole 41664f16a3 Fix /api/board/{boardId}/attachments 2023-07-05 11:05:37 +02:00
Lauri Ojansivu 8c9c0e9316 Updated translations. 2023-07-04 22:09:29 +03:00
Lauri Ojansivu f21bd16cec Updated translations. 2023-07-03 10:27:21 +03:00
Lauri Ojansivu edc5a5b6a2 Updated translations. 2023-07-01 21:12:02 +03:00
Lauri Ojansivu 7d4de21be0 Updated ChangeLog. 2023-07-01 00:56:08 +03:00
Lauri Ojansivu 5babe0358d MongoDB 6.0.7 at Snap.
Thanks to MongoDB developers !
2023-07-01 00:54:05 +03:00
Lauri Ojansivu 62ef1fe7cc Updated ChangeLog. 2023-07-01 00:36:03 +03:00
Lauri Ojansivu 4be5727a18 Fix PDF preview to have full width, close at top, and improve viewing at mobile.
Thanks to xet7 !
2023-07-01 00:30:05 +03:00
Lauri Ojansivu e128a5775d Updated ChangeLog. 2023-06-30 18:08:26 +03:00
Lauri Ojansivu ba9f9705d4 Show Meteor dependency chain with rebuild-wekan.sh .
Thanks to xet7 !
2023-06-30 18:06:44 +03:00
Lauri Ojansivu 3aae07695c Updated translations. 2023-06-30 17:43:10 +03:00
Lauri Ojansivu 4393deb130 Updated ChangeLog. 2023-06-30 17:41:24 +03:00
Lauri Ojansivu 83ae1d4a19 Added translation to support viewing PDFs.
Thanks to xet7 !

Fixes https://github.com/wekan/wekan/pull/4989#pullrequestreview-1507053336
2023-06-30 17:31:17 +03:00
Lauri Ojansivu 94992fca44 Merge pull request #4989 from VidVidex/master
Add support for viewing pdfs
2023-06-30 10:03:20 -04:00
Vid Smole a8af5343a7 Fix typo 2023-06-30 12:48:23 +02:00
Vid Smole 070e8831b4 Add support for viewing pdfs 2023-06-30 12:48:18 +02:00
Lauri Ojansivu f177e416ee Updated ChangeLog. 2023-06-29 12:07:51 +03:00
Lauri Ojansivu ffea7aff99 If there is no Custom Field label at minicard, show value full width.
Thanks to koluka and xet7 !

Fixes #4988
2023-06-29 12:05:25 +03:00
Lauri Ojansivu 01b16566c8 Updated ChangeLog. 2023-06-29 00:32:27 +03:00
Lauri Ojansivu 549b15000b Set background color only if it exists. Part 3.
Thanks to xet7 !
2023-06-29 00:31:44 +03:00
Lauri Ojansivu d05b84dff9 Updated ChangeLog. 2023-06-29 00:23:28 +03:00
Lauri Ojansivu c6cad13f1e Set background color only if it exists. Part 2.
Thanks to xet7 !
2023-06-29 00:22:25 +03:00
Lauri Ojansivu a8d1210655 Updated ChangeLog. 2023-06-29 00:04:12 +03:00
Lauri Ojansivu 45d33fa2e4 Set background color only if it exists.
Thanks to xet7 !
2023-06-29 00:03:00 +03:00
Lauri Ojansivu 81ceb1ca0f Updated ChangeLog. 2023-06-28 23:34:37 +03:00
Lauri Ojansivu 923d26ad81 Merge pull request #4987 from mfilser/move_canModifyCard_and_canModifyBoard_to_utils_class
Utils of canModifyCard and canModifyBoard + move this general functions to Utils class
2023-06-28 16:32:02 -04:00
Martin Filser 583f114c68 Utils of canModifyCard and canModifyBoard + move this general functions to Utils class 2023-06-28 22:21:36 +02:00
Lauri Ojansivu b29ec93c34 Updated ChangeLog. 2023-06-28 23:14:09 +03:00
Lauri Ojansivu c7ee585a62 Merge pull request #4986 from mfilser/global_search_found_cards_count_is_now_substituted_by_the_translation_function_itself
Global search, found cards count is now substituted by the translation function itself
2023-06-28 16:13:17 -04:00
Martin Filser a7721b9048 Global search, found cards count is now substituted by the translation function itself 2023-06-28 22:08:58 +02:00
Lauri Ojansivu 184fd3abdd Updated ChangeLog. 2023-06-28 23:08:27 +03:00
Lauri Ojansivu 5fd2f1ee8a Merge pull request #4985 from mfilser/admin_report_fixing_filesize_if_not_a_number
Admin Report, fixing filesize if not a number
2023-06-28 16:07:26 -04:00
Martin Filser 23218d3808 Admin Report, fixing filesize if not a number 2023-06-28 22:02:28 +02:00
Lauri Ojansivu 9b8de53bfe Updated ChangeLog. 2023-06-28 23:02:04 +03:00
Lauri Ojansivu 9130410f09 Merge pull request #4984 from mfilser/global_search_limit_0_is_no_limit
Global Search, limit 0 is no limit
2023-06-28 15:54:34 -04:00
Martin Filser 1f57a3f62e Global Search, limit 0 is no limit 2023-06-28 21:49:44 +02:00
Lauri Ojansivu 6938cec583 Updated ChangeLog. 2023-06-28 22:45:33 +03:00
Lauri Ojansivu 3c2cc351f4 Added Snap MONGO_URL to rebuild-wekan.sh dev options. Part 2.
Thanks to xet7 !
2023-06-28 22:44:26 +03:00
Lauri Ojansivu ebeadeef60 Updated ChangeLog. 2023-06-28 22:42:47 +03:00
Lauri Ojansivu 7d59ae93f9 Added Snap MONGO_URL to rebuild-wekan.sh dev options.
Thanks to xet7 !
2023-06-28 22:41:11 +03:00
Lauri Ojansivu 59e15d262f Updated ChangeLog. 2023-06-28 22:37:14 +03:00
Lauri Ojansivu 712417b379 Merge pull request #4983 from mfilser/admin_attachment_view_was_missing_the_column_header_S3FileId
Admin attachment view was missing the column header "S3FileId"
2023-06-28 15:35:57 -04:00
Martin Filser cad55d57d7 Admin attachment view was missing the column header "S3FileId" 2023-06-28 21:30:01 +02:00
Lauri Ojansivu cca7e59eb2 Updated ChangeLog. 2023-06-28 22:27:49 +03:00
Lauri Ojansivu 59a358903a Merge pull request #4982 from mfilser/attachment_copy_changes_now_boardId_listId_and_swimlaneId
attachment copy changes now the boardId, listId and swimlaneId in the collection data
2023-06-28 15:25:52 -04:00
Martin Filser 2eadd3eb8b attachment copy changes now the boardId, listId and swimlaneId in the collection data
- fixing admin attachment view, copied card attachments were wrong if copied to another board / list / swimlane
2023-06-28 21:21:09 +02:00
Lauri Ojansivu 0261bb592e Updated ChangeLog. 2023-06-28 22:12:43 +03:00
Lauri Ojansivu 7862e280ec Merge pull request #4981 from mfilser/copy_checklist_only_copied_the_checklist_items_the_first_time
Copy Checklist only copied the checklist items at the first time, now always
2023-06-28 15:11:40 -04:00
Martin Filser 13fecfae27 Copy Checklist only copied the checklist items at the first time, now always 2023-06-28 21:05:25 +02:00
Lauri Ojansivu b7819cad69 Updated ChangeLog. 2023-06-28 21:39:24 +03:00
Lauri Ojansivu 028fba9996 Merge pull request #4980 from mfilser/copy_checklist_dialog_set_last_selected_board
Copy Checklist dialog now set's the last selected board
2023-06-28 14:36:00 -04:00
Martin Filser ce94433c46 Copy Checklist dialog now set's the last selected board 2023-06-26 18:28:07 +02:00
Lauri Ojansivu 442eefbe6b Updated ChangeLog. 2023-06-26 16:44:44 +03:00
Lauri Ojansivu 84c3b38052 Updated ChangeLog. 2023-06-26 16:42:08 +03:00
Martin Filser 8557d91468 new popup scrolls to top and restore it's previous position after closing again works now at attachments too 2023-06-25 10:44:20 +02:00
Martin Filser 949a3a1337 new popup scrolls to top and restore it's previous position after closing again 2023-06-25 10:44:20 +02:00
Lauri Ojansivu 24288919e2 Merge pull request #4977 from wekan/dependabot/npm_and_yarn/fast-xml-parser-4.2.5
Bump fast-xml-parser from 4.2.4 to 4.2.5
2023-06-22 16:57:53 -04:00
dependabot[bot] 92c57fc91e Bump fast-xml-parser from 4.2.4 to 4.2.5
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.2.4 to 4.2.5.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.2.4...v4.2.5)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-22 19:32:48 +00:00
Lauri Ojansivu 9d1e7abd07 v6.98 2023-06-22 22:32:19 +03:00
Lauri Ojansivu 8dfdbe7a16 Updated ChangeLog. 2023-06-22 22:24:09 +03:00
Lauri Ojansivu 15fbe7ca50 Merge pull request #4976 from mfilser/drag_drop_reduce_list_scroll_speed
reduce list scroll speed while drag/drop the minicard
2023-06-22 12:30:04 -04:00
Martin Filser 9aa8bc8921 reduce list scroll speed while drag/drop the minicard 2023-06-22 17:17:40 +02:00
Lauri Ojansivu e90791fdbc Merge pull request #4975 from mfilser/rounding_sort_number_to_next_integer
Rounding sort number to next integer
2023-06-21 17:35:58 -04:00
Martin Filser b869e3efb6 after moving, e.g. minicards, to the list start / end the index is rounded to the next index 2023-06-21 23:16:55 +02:00
Martin Filser 7e8073d621 after moving, e.g. the minicard, round the index to the next integer
- before: at index -1           and -9 the new index was -5
- now   : at index -1 (or -1.1) and -9 the new index is  -2
2023-06-21 23:16:55 +02:00
Martin Filser c10f7b6134 Utils#calculateIndex re-uses the logic of Utils#calculateIndexData
- nearly the same implementation, so use common code base
2023-06-21 23:16:55 +02:00
Lauri Ojansivu 1a71abbc1d Updated ChangeLog. 2023-06-22 00:16:12 +03:00
Lauri Ojansivu 0a46d06c1f Merge pull request #4974 from mfilser/add_checklistitem_at_top
Add checklist-item at top
2023-06-21 17:13:17 -04:00
Martin Filser 23595674cf Add checklist-item at top 2023-06-21 23:09:29 +02:00
Lauri Ojansivu 6fead14c11 Updated ChangeLog. 2023-06-22 00:03:38 +03:00
Martin Filser 52d54f35a3 Add checklist at top 2023-06-21 21:59:48 +02:00
Lauri Ojansivu 3c1eff6241 Updated translations. 2023-06-20 00:26:44 +03:00
Lauri Ojansivu fb2972396a Updated ChangeLog. 2023-06-20 00:24:30 +03:00
Lauri Ojansivu 4d9f76cc68 Merge pull request #4969 from nebulade/favicon-fix
Always fetch favicons from / path
2023-06-19 17:16:51 -04:00
Lauri Ojansivu 924c579680 Merge pull request #4971 from wekan/dependabot/github_actions/docker/build-push-action-4.1.1
Bump docker/build-push-action from 4.1.0 to 4.1.1
2023-06-19 17:15:58 -04:00
Lauri Ojansivu ca2ea2c13e Merge pull request #4970 from wekan/dependabot/github_actions/docker/metadata-action-4.6.0
Bump docker/metadata-action from 4.5.0 to 4.6.0
2023-06-19 17:15:34 -04:00
dependabot[bot] b579dc598b Bump docker/build-push-action from 4.1.0 to 4.1.1
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/44ea916f6c540f9302d50c2b1e5a8dc071f15cdf...2eb1c1961a95fc15694676618e422e8ba1d63825)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-19 20:58:45 +00:00
dependabot[bot] 04c5f60287 Bump docker/metadata-action from 4.5.0 to 4.6.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/2c0bd771b40637d97bf205cbccdd294a32112176...818d4b7b91585d195f67373fd9cb0332e31a7175)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-19 20:58:41 +00:00
Johannes Zellner 123789aff0 Always fetch favicons from / path 2023-06-19 14:33:36 +02:00
Lauri Ojansivu 74b66fdcaf Updated translations. 2023-06-18 03:31:48 +03:00
Lauri Ojansivu 3f09b54e04 Merge pull request #4968 from simon816/fix-language-not-persisting
Wait until user has logged in before fetching language preference
2023-06-17 20:26:54 -04:00
simon816 c39403c307 Wait until user has logged in before fetching language preference. Fixes #4967 2023-06-18 00:58:16 +01:00
Lauri Ojansivu 13ea7bf3d7 Updated ChangeLog. 2023-06-17 21:01:11 +03:00
Lauri Ojansivu dc2835d341 Added translations: Cantonese (China) (yue_CN) and Chinese Traditional (zh-Hant).
Thanks to translators !
2023-06-17 20:58:21 +03:00
Lauri Ojansivu 94ff2d6a9e Updated ChangeLog. 2023-06-16 12:24:37 +03:00
Lauri Ojansivu 6479c6a5c5 Update rebuild-wekan.sh to use local network IP address.
Thanks to xet7 !
2023-06-16 12:22:18 +03:00
mark 4b04af9a9c popup titles 2023-06-14 14:06:53 -05:00
mark 26d2efdedb make swimlane height adjustable 2023-06-13 13:43:09 -05:00
mark 0ec9c4c37b min working example with listWidth 2023-06-13 12:54:18 -05:00
mark f2e4a280d7 add listWidths to user profile 2023-06-12 22:14:06 -05:00
Lauri Ojansivu a1ddf8e6d2 Merge pull request #4961 from wekan/dependabot/github_actions/docker/login-action-2.2.0
Bump docker/login-action from 2.1.0 to 2.2.0
2023-06-13 00:24:50 +03:00
Lauri Ojansivu 102b39cd29 Merge pull request #4963 from wekan/dependabot/github_actions/docker/build-push-action-4.1.0
Bump docker/build-push-action from 4.0.0 to 4.1.0
2023-06-13 00:24:32 +03:00
Lauri Ojansivu b7373a27b8 Merge pull request #4962 from wekan/dependabot/github_actions/docker/metadata-action-4.5.0
Bump docker/metadata-action from 4.4.0 to 4.5.0
2023-06-13 00:24:16 +03:00
dependabot[bot] fb0b762293 Bump docker/build-push-action from 4.0.0 to 4.1.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/3b5e8027fcad23fda98b2e3ac259d8d67585f671...44ea916f6c540f9302d50c2b1e5a8dc071f15cdf)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-12 20:58:03 +00:00
dependabot[bot] 5b799b4536 Bump docker/metadata-action from 4.4.0 to 4.5.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/c4ee3adeed93b1fa6a762f209fb01608c1a22f1e...2c0bd771b40637d97bf205cbccdd294a32112176)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-12 20:58:00 +00:00
dependabot[bot] 8050d7353d Bump docker/login-action from 2.1.0 to 2.2.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/f4ef78c080cd8ba55a85445d5b36e214a81df20a...465a07811f14bebb1938fbed4728c6a1ff8901fc)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-12 20:57:57 +00:00
Lauri Ojansivu 66b1736bb3 Updated translations. 2023-06-12 14:23:04 -04:00
Lauri Ojansivu f33ea5baf0 v6.97 2023-06-10 11:50:16 +03:00
Lauri Ojansivu 5959fd1fd0 Updated ChangeLog. 2023-06-10 11:47:02 +03:00
Lauri Ojansivu c8ec8d456b Reverted Feature: Docker Health Check.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4954
2023-06-10 11:43:59 +03:00
Lauri Ojansivu 87b394949e Updated ChangeLog. 2023-06-10 10:59:48 +03:00
Lauri Ojansivu d93481d840 Updated dependencies.
Thanks to developers of dependencies!
2023-06-10 10:57:57 +03:00
Lauri Ojansivu 20fa441cfe v6.96 2023-06-10 09:43:23 +03:00
Lauri Ojansivu 46281542c5 Updated translations. 2023-06-10 09:37:47 +03:00
Lauri Ojansivu 5de6d5954a Updated ChangeLog. 2023-06-10 09:35:45 +03:00
Lauri Ojansivu 7a3c340d65 Try to fix SVG image failed to render.
Thanks to xet7 !

Fixes #4830
2023-06-10 09:33:43 +03:00
Lauri Ojansivu 5e8669be4e Updated ChangeLog. 2023-06-10 05:13:47 +03:00
Lauri Ojansivu df40384200 Found and fixed more InvisibleBleed of WeKan. Part 2.
Thanks to xet7 !
2023-06-10 05:12:17 +03:00
Lauri Ojansivu 515556a784 Updated ChangeLog. 2023-06-10 03:04:30 +03:00
Lauri Ojansivu af63259f09 Fixed drag-drop at Ubuntu Touch Morph Browser and WeKan OpenStore app by changing jquery-ui-touch-punch to newer updated @rwap/jquery-ui-touch-punch.
Thanks to xet7 !
2023-06-10 02:59:35 +03:00
Lauri Ojansivu bb807d53ba Merge branch 'master' of github.com:wekan/wekan 2023-06-10 00:56:50 +03:00
Lauri Ojansivu 38279e2a32 Updated ChangeLog. 2023-06-10 00:56:21 +03:00
Lauri Ojansivu 3e6b396d09 Clarified required settings for start-wekan.bat and start-wekan.sh .
Thanks to xet7 !
2023-06-10 00:55:00 +03:00
Lauri Ojansivu 42fc182832 Merge pull request #4956 from mfilser/fix_docker_build_of_pr_4954_part_2
fix docker build of PR 4954 (part 2)
2023-06-09 21:26:35 +03:00
Lauri Ojansivu 3f1bba4f1a Updated ChangeLog. 2023-06-09 21:24:31 +03:00
Lauri Ojansivu b008986122 Try to fix Docker build by removing empty continuation lines.
Thanks to xet7 !
2023-06-09 21:23:17 +03:00
Martin Filser 26b30c817c fix docker build of PR 4954 (part 2) 2023-06-09 20:23:04 +02:00
Lauri Ojansivu b1083607d4 Updated ChangeLog. 2023-06-09 21:08:25 +03:00
Lauri Ojansivu 78f9a3303e Merge pull request #4955 from mfilser/fix_docker_build_of_pr_4954
docker build was broken because of wrong curl install
2023-06-09 21:06:57 +03:00
Martin Filser a5519983fe docker build was broken because of wrong curl install
- curl is already installed at the top of Dockerfile
2023-06-09 20:01:33 +02:00
Lauri Ojansivu bc0a879ca1 Updated ChangeLog. 2023-06-09 20:11:46 +03:00
Lauri Ojansivu 4c016169c5 Found and fixed more InvisibleBleed of WeKan.
Thanks to xet7 !
2023-06-09 20:08:25 +03:00
Lauri Ojansivu 46c29a0b97 Updated ChangeLog. 2023-06-09 18:24:26 +03:00
Lauri Ojansivu 9ab0efe87a Fixed Bug Board icons random dance. Hide disabled buggy features of All Boards settings: Cards Count and Board Members.
Thanks to xet7 !

Fixes #4214
2023-06-09 18:22:07 +03:00
Lauri Ojansivu 6638d8215f Updated ChangeLog. 2023-06-09 18:07:12 +03:00
Lauri Ojansivu e1a00090ba Fixed Rare bug: All Boards page icons random dance. Reverted changing migrations. Fixed reordering cards. Part 2.
Fixes #4214

Thanks to xet7 !
2023-06-09 18:03:28 +03:00
Lauri Ojansivu 44bfe89ea8 Updated ChangeLog. 2023-06-09 16:33:28 +03:00
Lauri Ojansivu b75e16f104 Fixed Rare bug: All Boards page icons random dance. Commented out All Boards show members, cards counts, and some migrations.
Fixes #4214

Thanks to xet7 !
2023-06-09 16:27:04 +03:00
Lauri Ojansivu 695cdfcc4e Updated translations. 2023-06-09 12:15:14 +03:00
Lauri Ojansivu 285ef2e36d Updated ChangeLog. 2023-06-09 12:12:52 +03:00
Lauri Ojansivu fb3aa6ef4f Merge pull request #4954 from luketainton/feature/docker-healthcheck
Feature: Docker Health Check
2023-06-09 12:05:00 +03:00
Luke Tainton 0eb5cd05f5 Merge branch 'master' into feature/docker-healthcheck 2023-06-09 09:56:02 +01:00
Lauri Ojansivu 3d1c70b96b Merge pull request #4953 from helioguardabaxo/due-date-card-filter
Fix due date filter for next and this week.
2023-06-08 19:37:53 +03:00
helioguardabaxo 946c288925 Fix due date filter for next and this week. 2023-06-08 12:43:26 -03:00
Lauri Ojansivu 04464dcdb3 Updated translations. 2023-06-08 14:06:58 +03:00
Luke Tainton 8a4f25527e Add health checks to Wekan container 2023-06-08 09:22:59 +01:00
Lauri Ojansivu 581fd9c9fb v6.95 2023-06-07 22:46:24 +03:00
Lauri Ojansivu fbce80a4c8 Updated ChangeLog. 2023-06-07 12:51:18 -04:00
Lauri Ojansivu 1ee3215cf3 Merge branch 'master' of github.com:wekan/wekan 2023-06-07 12:48:39 -04:00
Lauri Ojansivu 95efcbe717 Revert smaller swimlane height.
Thanks to kovacs-andras and xet7 !

Related #4904,
related https://github.com/wekan/wekan/commit/04aaa6f30cfe59769c9b1c75cf8921fcc99b1977
2023-06-07 12:46:40 -04:00
Lauri Ojansivu 594d8a8ba1 v6.94 2023-06-07 16:43:36 +03:00
Lauri Ojansivu 9933f3a583 Updated ChangeLog. 2023-06-07 09:12:18 -04:00
Lauri Ojansivu 23bcf88aa2 Merge pull request #4949 from wekan/dependabot/npm_and_yarn/fast-xml-parser-4.2.4
Bump fast-xml-parser from 4.2.2 to 4.2.4
2023-06-07 16:10:28 +03:00
Lauri Ojansivu 21009f5ffe Updated ChangeLog. 2023-06-07 09:09:21 -04:00
Lauri Ojansivu 2810520612 Merge pull request #4950 from DimDz/master
Edit the title of a swimlane using API
2023-06-07 16:06:27 +03:00
DimDz 3e088b4eb1 add edit swimlane 2023-06-07 16:02:07 +03:00
dependabot[bot] 8e98eebe03 Bump fast-xml-parser from 4.2.2 to 4.2.4
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.2.2 to 4.2.4.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/commits)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-06 20:54:01 +00:00
Lauri Ojansivu 1f11f8add5 Updated translations. 2023-06-06 14:31:04 -04:00
Lauri Ojansivu 7192bc944b Updated ChangeLog. 2023-06-03 20:40:43 -04:00
Lauri Ojansivu 04aaa6f30c Fix 6.93 with brackground image breaks scrolling on lists within swimlanes.
Thanks to xet7 !

Fixes #4936
2023-06-03 20:38:03 -04:00
Lauri Ojansivu 4405693b1f Updated ChangeLog. 2023-06-03 17:55:09 -04:00
Lauri Ojansivu 47380244b8 Set card attachment as background image. Part 4.
Thanks to xet7 !

Related #486
2023-06-03 17:53:56 -04:00
Lauri Ojansivu 4640effb16 Updated ChangeLog. 2023-06-03 17:28:08 -04:00
Lauri Ojansivu 01a1eb177e Set card attachment as background image. Part 3.
Thanks to xet7 !

Related #486
2023-06-03 17:27:00 -04:00
Lauri Ojansivu 0afac8bbff Updated translations. 2023-06-03 12:45:49 -04:00
Lauri Ojansivu 0a59e9732e Updated ChangeLog. 2023-06-03 12:44:23 -04:00
Lauri Ojansivu ed92db87bc Set card attachment as background image. Part 2.
Thanks to xet7 !

Related #486
2023-06-03 12:43:10 -04:00
Lauri Ojansivu e892a6104a Updated translations. 2023-06-03 09:52:57 -04:00
Lauri Ojansivu d489b4bf23 Updated ChangeLog. 2023-06-03 09:45:40 -04:00
Lauri Ojansivu 8c6df7f20c Set card attachment as background image. In Progress.
Thanks to xet7 !

Related #486
2023-06-03 09:43:27 -04:00
Lauri Ojansivu 49d0fb2eae Updated ChangeLog. 2023-06-03 09:23:47 -04:00
Lauri Ojansivu edf08c8cd4 Updated dependencies.
Thanks to developers of dependencies !
2023-06-03 09:22:23 -04:00
Lauri Ojansivu ebe6946233 Updated translations. 2023-06-03 09:21:14 -04:00
Lauri Ojansivu 54aad2d067 Updated translations. 2023-06-02 10:11:52 -04:00
Lauri Ojansivu d06d22fd65 Updated ChangeLog. 2023-06-02 10:06:35 -04:00
Lauri Ojansivu 940fbda494 Updated translations. 2023-06-02 10:03:51 -04:00
Lauri Ojansivu 58cd17468c Merge pull request #4945 from DimDz/master
Added translations to Sort
2023-06-02 14:01:19 +00:00
DimDz 977c63eb2f Update boardHeader.jade 2023-06-02 12:01:32 +03:00
DimDz b9cbab2577 Update en.i18n.json 2023-06-02 11:59:47 +03:00
Lauri Ojansivu 2dafd52610 Updated translations. 2023-06-01 22:48:35 -04:00
Lauri Ojansivu 3b95728567 Updated ChangeLog. 2023-06-01 20:25:06 -04:00
Lauri Ojansivu 825742359e Renamed Badge to Count of attachments on minicard. Changed icons to Cover image on minicard.
Thanks to xet7 !

Related #4944,
related https://github.com/wekan/wekan/pull/4940
2023-06-01 20:14:58 -04:00
Lauri Ojansivu 56e29dae33 Updated translations. 2023-06-01 19:18:02 -04:00
Lauri Ojansivu 4b005b4b39 Updated ChangeLog. 2023-06-01 12:19:55 -04:00
Lauri Ojansivu 8fb1a45cee Merge pull request #4943 from helioguardabaxo/swimlane-action-icons
Added icons to swimlane action popup
2023-06-01 16:14:16 +00:00
helioguardabaxo 41c1dde504 Added icons to swimlane action popup 2023-06-01 10:12:04 -03:00
Lauri Ojansivu 985ee3df91 Updated ChangeLog. 2023-06-01 08:51:29 -04:00
Lauri Ojansivu 467835192f Changed Add List to be at left. Before it was at right.
Thanks to xet7 !
2023-06-01 08:49:20 -04:00
Lauri Ojansivu 7a929024f2 Updated ChangeLog. 2023-06-01 08:10:56 -04:00
Lauri Ojansivu 6698c34dbb Updated translations. 2023-06-01 08:05:57 -04:00
Lauri Ojansivu 3fbf9ab98f Merge pull request #4941 from helioguardabaxo/add-list-with-position
Added conditional to show after list field only if board has at least…
2023-06-01 11:53:09 +00:00
helioguardabaxo bd747cea24 Added conditional to show after list field only if board has at least one list. Now after list shows the last list by default. 2023-06-01 08:50:04 -03:00
Lauri Ojansivu be61e7c10c Updated translations. 2023-05-31 15:47:30 -04:00
Lauri Ojansivu 515275583e Updated ChangeLog. 2023-05-31 15:18:49 -04:00
Lauri Ojansivu e386c16a7f Merge pull request #4940 from helioguardabaxo/badges-show-minicard
Badges show minicard
2023-05-31 19:16:59 +00:00
Lauri Ojansivu 3bba30cc1e Updated ChangeLog. 2023-05-31 15:13:38 -04:00
Lauri Ojansivu 85f02a1b7c Merge pull request #4939 from helioguardabaxo/attachment-cover-show-minicard
Added option to show/hide cover attachment on minicard
2023-05-31 19:09:59 +00:00
Lauri Ojansivu 528c5f2627 Updated ChangeLog. 2023-05-31 15:08:28 -04:00
Lauri Ojansivu 780e453cf5 Merge pull request #4938 from helioguardabaxo/add-list-with-position
Added list position when create a new list on board
2023-05-31 18:58:02 +00:00
helioguardabaxo f3ebc4a28e Added option to show/hide some badges on minicard 2023-05-31 14:49:02 -03:00
helioguardabaxo 7df32ff4ac Merge branch 'attachment-cover-show-minicard' 2023-05-31 13:47:32 -03:00
helioguardabaxo 985882a4ad Added option to show/hide cover attachment on minicard 2023-05-31 11:52:20 -03:00
helioguardabaxo 986bc27001 Added list position when create a new list on board 2023-05-31 09:12:35 -03:00
Lauri Ojansivu 053f944691 Updated translations. 2023-05-30 12:08:04 -04:00
Lauri Ojansivu 85080519a1 Updated translations. 2023-05-29 21:07:46 -04:00
Lauri Ojansivu 7569cc54ab v6.93 2023-05-29 20:31:25 +03:00
Lauri Ojansivu 923f5d6bb1 Updated ChangeLog. 2023-05-29 20:28:39 +03:00
Lauri Ojansivu c8b82576a3 Merge pull request #4935 from jghaanstra/master
Layout fixes for modern-dark after shuffling labels and date field on minicard
2023-05-29 17:22:50 +00:00
Jelger Haanstra aa8926e61c Layout fixes for modern-dark after shuffling labels and date field on minicard 2023-05-29 19:16:45 +02:00
Lauri Ojansivu 6d6b9c831a v6.92 2023-05-29 19:31:34 +03:00
Lauri Ojansivu 650ed70f92 Updated ChangeLog. 2023-05-29 19:26:38 +03:00
Lauri Ojansivu a3d37e621c Changed Due Date etc dates to be at top of Minicard.
Thanks to xet7 !
2023-05-29 19:22:56 +03:00
Lauri Ojansivu 06799b19b0 Updated ChangeLog. 2023-05-29 17:18:46 +03:00
Lauri Ojansivu e6a13d7220 Merge pull request #4934 from DimDz/master
Fixes for Create Card at Calendar
2023-05-29 14:16:17 +00:00
Lauri Ojansivu 45e2827516 Updated translations. 2023-05-29 17:14:40 +03:00
Lauri Ojansivu 0b395d03f6 Updated ChangeLog. 2023-05-29 17:13:24 +03:00
Lauri Ojansivu 2d8ac3bf80 Fix Docker latest tags at Docker Hub, Quay and GitHub.
Fixes #4933

Thanks to rikhuijzer and xet7 !
2023-05-29 17:09:48 +03:00
DimDz 301580d61a css fixes for modal 2023-05-29 16:38:50 +03:00
DimDz b0a2c590fe Made X close button 2023-05-29 16:38:08 +03:00
Lauri Ojansivu 9bb56d3fc0 Updated translations. 2023-05-28 01:05:47 +03:00
Lauri Ojansivu 8162654d6f Updated ChangeLog. 2023-05-27 22:41:44 +03:00
Lauri Ojansivu b33a3ef254 Moved minicard labels from above minicard title to below minicard title.
Thanks to xet7 !
2023-05-27 22:38:46 +03:00
Lauri Ojansivu a89c52cfdb v6.91 2023-05-27 19:13:39 +03:00
Lauri Ojansivu 06aaf7cb8d Updated translations. 2023-05-27 19:10:06 +03:00
Lauri Ojansivu f929cdae9c Updated translations. 2023-05-27 03:29:48 -04:00
Lauri Ojansivu 20eb6338de Updated translations. 2023-05-27 03:26:44 -04:00
Lauri Ojansivu 6c76c277c7 Updated ChangeLog. 2023-05-27 03:15:54 -04:00
Lauri Ojansivu 49ef80ab6c BoardAdmin and Admin can now set board background image URL.
Thanks to xet7 !

Related #486
2023-05-27 03:10:41 -04:00
Lauri Ojansivu 8b4193149b Updated ChangeLog. 2023-05-27 00:44:06 -04:00
Lauri Ojansivu 2b4dd3b5ce v6.90 2023-05-24 12:28:45 +03:00
Lauri Ojansivu 006560b96d Updated ChangeLog. 2023-05-24 12:21:13 +03:00
Lauri Ojansivu 32ec95ffa8 Sync Docker Registries.
Thanks to xet7 !
2023-05-24 12:19:38 +03:00
Lauri Ojansivu 10c2512d74 Updated ChangeLog. 2023-05-24 11:41:21 +03:00
Lauri Ojansivu 28e5b0bd5b Use GitHub Docker Registry. Updated release scripts.
Thanks to xet7 !
2023-05-24 11:39:26 +03:00
Lauri Ojansivu 87fc4f936a Upgrade Snap Candidate to MongoDB 6.0.6.
Thanks to MongoDB developers !
2023-05-24 11:36:38 +03:00
Lauri Ojansivu 71d3135bd2 Updated ChangeLog. 2023-05-24 10:30:53 +03:00
Lauri Ojansivu 6052b0d042 Updated ChangeLog. 2023-05-21 10:59:54 -04:00
Lauri Ojansivu e83b0ac651 Update docker-compose.yml for better description of Docker images.
Thanks to xet7 !
2023-05-21 10:57:06 -04:00
Lauri Ojansivu 30ada60862 Update docker-compose.yml info about Docker images used.
Thanks to xet7 !
2023-05-21 10:53:10 -04:00
Lauri Ojansivu d136a5206c Updated ChangeLog. 2023-05-18 09:31:10 -04:00
Lauri Ojansivu ea908adbf9 Added Edit Custom Field Value to api.py .
Thanks to RazvanTinca and xet7 !

Fixes #4927
2023-05-18 09:27:59 -04:00
Lauri Ojansivu 97d0eada57 Updated translations. 2023-05-17 15:49:18 +03:00
Lauri Ojansivu 352546f554 Updated translations. 2023-05-16 02:10:05 +03:00
Lauri Ojansivu b583e67ae8 Updated ChangeLog. 2023-05-15 23:48:31 +03:00
Lauri Ojansivu 9de7040401 Moved new_checklist_item API to correct file where is other checklist item API.
Thanks to xet7 !
2023-05-15 23:43:42 +03:00
Lauri Ojansivu 8951d0aa57 v6.89 2023-05-12 20:24:33 +03:00
Lauri Ojansivu 582bc3a4c4 Updated ChangeLog. 2023-05-12 19:59:25 +03:00
Lauri Ojansivu 5f21823c43 Merge pull request #4926 from Aman-Maheshwari/fix-broken-migration-attachements-collectionFs-to-ostrioFiles
Fixed broken migration migrate-attachments-collectionFS-to-ostrioFiles
2023-05-12 19:13:02 +03:00
Aman-Maheshwari 11162585ca fixed broken migration 2023-05-12 21:40:12 +05:30
Lauri Ojansivu dad5d2a905 Fix typo.
Thanks to xet7 !

Related #2687,
related https://github.com/wekan/wekan/pull/4923
2023-05-12 17:07:45 +03:00
Lauri Ojansivu 2d683ea198 Merge pull request #4923 from DimDz/master
Fix for the Create Card at Calendar
2023-05-12 17:05:44 +03:00
DimDz c082a48e67 bugfix for calendar month view 2023-05-12 09:40:05 +03:00
DimDz ba387bcc84 createCardWithDueDate 2023-05-12 09:39:23 +03:00
Lauri Ojansivu c8d1a576b0 v6.88 2023-05-11 23:50:36 +03:00
Lauri Ojansivu 3e691f8b25 Updated ChangeLog. 2023-05-11 23:16:38 +03:00
Lauri Ojansivu f700970cd4 Updated ChangeLog. 2023-05-11 20:04:30 +03:00
Lauri Ojansivu 2828027cc8 Merge pull request #4922 from DimDz/master
Create Card on Calendar View
2023-05-11 19:52:09 +03:00
DimDz 4a5d05a19f Fix typo 2023-05-11 13:15:38 +03:00
DimDz 0867f728d1 Calendar Modal 2023-05-11 12:48:50 +03:00
DimDz 0bd8b298d7 Create Card from Calendar View 2023-05-11 12:48:11 +03:00
Lauri Ojansivu 6d8cf57868 Updated OpenAPI docs.
Thanks to bentiss !

Fixes #4917
2023-05-09 17:29:33 +03:00
Lauri Ojansivu 4790d31ff7 Merge pull request #4918 from bentiss/fix-docs
openapi: also ignores ThrowStatement
2023-05-09 17:27:23 +03:00
Benjamin Tissoires d7243bba77 openapi: also ignores ThrowStatement
This gives an error in the resulting file, which makes it not OpenAPI
compatible (not yaml actually).

Fixes #4917

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2023-05-09 10:13:23 +02:00
Lauri Ojansivu 0225eefa66 Updated ChangeLog. 2023-05-08 23:23:52 +03:00
Lauri Ojansivu 18240c9d07 v6.87 2023-05-08 23:05:56 +03:00
Lauri Ojansivu 4b4fcda66d Updated ChangeLog. 2023-05-08 22:49:34 +03:00
Lauri Ojansivu 97c6b65315 Tried to fix building WeKan OpenAPI docs using Ubuntu 23.04 amd64 with XFCE desktop, but it did not work, still getting error: Failed to parse the source OpenAPI document.
Thanks to xet7 !
2023-05-08 22:46:53 +03:00
Lauri Ojansivu 8f176421da Updated ChangeLog. 2023-05-08 21:54:04 +03:00
Lauri Ojansivu 0bd9f309a1 Added trace warnings options.
Thanks to xet7 !
2023-05-08 21:52:42 +03:00
Lauri Ojansivu 6fb9529518 Updated ChangeLog. 2023-05-08 21:45:37 +03:00
Lauri Ojansivu e6c59fc9b0 Comment out tracing warnings, only to use them when fixing them.
Thanks to xet7 !
2023-05-08 21:42:54 +03:00
Lauri Ojansivu a12d465881 Updated ChangeLog. 2023-05-08 21:36:40 +03:00
Lauri Ojansivu a921bde6ac Merge pull request #4911 from DimDz/master
Add @operation new_checklist_item
2023-05-08 21:30:48 +03:00
Lauri Ojansivu 8fbfd5ad0a Updated ChangeLog. 2023-05-08 21:29:44 +03:00
Lauri Ojansivu acaefab0f4 Merge pull request #4910 from deniszulic/master
Added X for closing
2023-05-08 21:27:18 +03:00
Lauri Ojansivu 952affc6df Updated ChangeLog. 2023-05-08 21:26:37 +03:00
Lauri Ojansivu 521e840b54 Combine commands to one line so that all options work correctly.
Thanks to xet7 !
2023-05-08 21:24:01 +03:00
Lauri Ojansivu 752a558b30 Updated ChangeLog. 2023-05-08 21:21:19 +03:00
Lauri Ojansivu 40c077101a Updated translations. xet7 fixed all translations of advanced filter description. 2023-05-08 21:17:54 +03:00
Lauri Ojansivu f7075f4ccb Updated ChangeLog. 2023-05-08 21:16:43 +03:00
Lauri Ojansivu 9fc5283856 Added to meteor development options for logging also to ../wekan-log.txt, and showing deprecated API that is Meteor v2.12 new feature.
Thanks to Meteor developers and xet7 !
2023-05-08 21:12:36 +03:00
Lauri Ojansivu e0d63db1ab Updated ChangeLog. 2023-05-08 20:59:12 +03:00
Lauri Ojansivu d519429ea1 Upgraded to Meteor 2.12 .
Thanks to Meteor developers !
2023-05-08 20:57:45 +03:00
Lauri Ojansivu e4d3ae4c3f Updated translations. 2023-05-04 02:36:54 +03:00
Lauri Ojansivu f7e45273a1 Try to fix translations. 2023-05-04 00:45:37 +03:00
Lauri Ojansivu f57fc3cd6e Updated translations. 2023-05-03 23:05:54 +03:00
Lauri Ojansivu 033b8c5d48 Updated translations. 2023-05-02 17:24:13 -04:00
DimDz ad26e57e78 @operation edit_card_custom_field 2023-05-02 16:39:49 +03:00
DimDz e9e3e14695 Update checklists.js
https://github.com/wekan/wekan/issues/4562
2023-05-02 15:08:14 +03:00
deniszulic e127c33bae junk removed 2023-05-01 01:18:19 +02:00
deniszulic 5192f4a326 xmark added 2023-05-01 01:08:45 +02:00
Lauri Ojansivu 2260f214ed Updated ChangeLog. 2023-04-29 11:44:38 +03:00
Lauri Ojansivu 2b91557ad2 Updated dependencies.
Thanks to developers of dependencies !
2023-04-29 11:43:09 +03:00
Lauri Ojansivu c1f0017867 Updated translations. 2023-04-29 11:30:42 +03:00
Lauri Ojansivu 20ea0dba95 v6.86 2023-04-26 23:33:37 +03:00
Lauri Ojansivu 712dbb8e73 Add back node-gyp related dependencies. 2023-04-26 23:29:32 +03:00
Lauri Ojansivu f9b760bfc4 v6.86 2023-04-25 03:44:46 +03:00
Lauri Ojansivu 14d2209587 Updated ChangeLog. 2023-04-25 03:38:28 +03:00
Lauri Ojansivu bcd43629cc Update Docker Ubuntu base image and Meteor version.
Thanks to xet7 !
2023-04-25 03:37:06 +03:00
Lauri Ojansivu 8985799c20 Updated ChangeLog. 2023-04-25 03:33:43 +03:00
Lauri Ojansivu 3300bbe9e7 Revert some migration filename changes.
Thanks to xet7 !
2023-04-25 03:32:31 +03:00
Lauri Ojansivu 14bd59a101 Updated ChangeLog. 2023-04-25 03:09:48 +03:00
Lauri Ojansivu c0bdde26cf Remove extra debug message and disable some rarely used feature that produces errors.
Thanas to xet7 !
2023-04-25 03:07:11 +03:00
Lauri Ojansivu 01edbb2351 Updated ChangeLog. 2023-04-25 01:57:16 +03:00
Lauri Ojansivu cbad4cf594 Security Fix: Fix AdminBleed in WeKan, so that non-admin can not change to Admin.
Thanks to Christian Pöschl of usd AG Responsible Disclosure Team for reporting and xet7 for fixing !
2023-04-25 01:54:53 +03:00
Lauri Ojansivu 11b61b8fe2 Merge pull request #4903 from wekan/dependabot/github_actions/docker/metadata-action-4.4.0
Bump docker/metadata-action from 4.3.0 to 4.4.0
2023-04-25 00:06:18 +03:00
dependabot[bot] 1d0da28d9e Bump docker/metadata-action from 4.3.0 to 4.4.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4.3.0 to 4.4.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/507c2f2dc502c992ad446e3d7a5dfbe311567a96...c4ee3adeed93b1fa6a762f209fb01608c1a22f1e)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-24 20:59:06 +00:00
Lauri Ojansivu 23f6c107c6 Updated ChangeLog. 2023-04-24 23:43:54 +03:00
Lauri Ojansivu 95f8a05cbd Updated ChangeLog. 2023-04-24 21:34:02 +03:00
Lauri Ojansivu 167863d957 Escape HTML comment tags so that HTML comments are visible.
Thanks to xet7 !
2023-04-24 21:29:49 +03:00
Lauri Ojansivu 22fc643f25 Updated ChangeLog. 2023-04-24 19:55:20 +03:00
Lauri Ojansivu 4d9d4a9dfd Upgrade to Meteor 2.12-beta.2 .
Thanks to Meteor developers!
2023-04-24 19:52:53 +03:00
Lauri Ojansivu 93766fe6ed Updated ChangeLog. 2023-04-21 22:05:38 +03:00
Lauri Ojansivu aef6967d4c Fix Exception in callback of async function: TypeError: this._now is not a function. Part 2.
Thanks to xet7 !
2023-04-21 22:03:47 +03:00
Lauri Ojansivu 0d4ec25593 Updated ChangeLog. 2023-04-21 21:39:50 +03:00
Lauri Ojansivu 2b13158fcd Feature: Show plus sign in front of attachments.
Thanks to Meeques and xet7 !

Fixes #4900
2023-04-21 21:23:38 +03:00
Lauri Ojansivu a1ff7b9673 Updated ChangeLog. 2023-04-21 21:17:42 +03:00
Lauri Ojansivu aeb0f1e6d8 Fix Exception in callback of async function: TypeError: this._now is not a function.
Thanks to xet7 !
2023-04-21 21:15:00 +03:00
Lauri Ojansivu 5034c957ba Updated translations. 2023-04-19 15:12:58 +03:00
Lauri Ojansivu 620f932dcd Updated ChangeLog. 2023-04-18 03:07:44 +03:00
Lauri Ojansivu 5f5c75bb0f Updated ChangeLog. 2023-04-18 03:01:47 +03:00
Lauri Ojansivu 7184f4c66e v6.85 2023-04-18 01:52:40 +03:00
Lauri Ojansivu 1d5c2c63b9 Updated ChangeLog. 2023-04-18 01:40:21 +03:00
Lauri Ojansivu f660aa13d1 Updated ChangeLog. 2023-04-18 01:36:19 +03:00
Lauri Ojansivu 47ac33d6c2 Security fix to ReactionBleed in WeKan. It is XSS in feature "Reaction to comment".
Thanks to Alexander Starikov at Jet Infosystems (https://jetinfosystems.com/).
2023-04-18 01:30:54 +03:00
Lauri Ojansivu ce35799506 Updated ChangeLog. 2023-04-18 00:41:55 +03:00
Lauri Ojansivu 418fe725e5 Fix Card opens full width by opening at left.
Thanks to xet7 !

Fixes #4886
2023-04-18 00:38:09 +03:00
Lauri Ojansivu ba7818c51e Updated ChangeLog. 2023-04-18 00:25:00 +03:00
Lauri Ojansivu 9af03b0416 Fixed count of found cards in Global Search.
Thanks to xet7 !
2023-04-18 00:21:34 +03:00
Lauri Ojansivu 0defe76fe3 Updated ChangeLog. 2023-04-17 23:43:57 +03:00
Lauri Ojansivu 76ac070f9b Save files serverside with filename ObjectID, without filename.
Thanks to g-roliveira, iamabrantes, Floaz, koelle25, scott-dunt, mfilser and xet7 !

Fixes #4416
2023-04-17 23:42:56 +03:00
Lauri Ojansivu f0a6fa68ea Updated ChangeLog. 2023-04-17 22:40:25 +03:00
Lauri Ojansivu 2da7b1d542 Fix LDAP Group Filtering does not work.
Thanks to emilburggraf, psteinforth, craig-silva, Daniel-H76, benh57, falkheiland and xet7 !

Fixes wekan/ldap#64
2023-04-17 22:33:34 +03:00
Lauri Ojansivu 053e817393 Updated ChangeLog. 2023-04-14 15:18:28 +03:00
Lauri Ojansivu f11650ece1 Added more descriptive times of attachment migrations and uploads.
Thanks to xet7 !

Related https://github.com/wekan/wekan/issues/4891
2023-04-14 15:16:50 +03:00
Lauri Ojansivu aff94a6770 Updated ChangeLog. 2023-04-14 15:05:31 +03:00
Lauri Ojansivu 0090734cd8 Added uploadedAt and copies to be migrated when migrating CollectionFS to ostrio-files.
Thanks to xet7 !

Related https://github.com/wekan/wekan/issues/4891
2023-04-14 15:02:57 +03:00
Lauri Ojansivu af816fe50f Updated ChangeLog. 2023-04-14 14:24:27 +03:00
Lauri Ojansivu e7122a9b36 Disable file validation temporarily, because it causes data loss of some attachments when upgrading.
Thanks to xet7 !

Related https://github.com/wekan/wekan/issues/4891
2023-04-14 14:20:39 +03:00
Lauri Ojansivu 1db4161538 Updated translations. 2023-04-13 22:24:31 +03:00
Lauri Ojansivu 2295b218e3 Updated translations. 2023-04-12 08:25:50 +03:00
Lauri Ojansivu 0053ce2708 Updated ChangeLog. 2023-04-12 08:24:44 +03:00
Lauri Ojansivu fb37f48a86 Updated dependencies. 2023-04-12 08:23:22 +03:00
Lauri Ojansivu 974ad26f06 v6.84 2023-04-11 15:43:26 +03:00
Lauri Ojansivu 5539653492 Updated translations. 2023-04-11 15:33:10 +03:00
Lauri Ojansivu 11e8cbf66f Update transifex URLs. 2023-04-11 11:37:46 +03:00
Lauri Ojansivu a45feacd3f Updated ChangeLog. 2023-04-11 11:25:59 +03:00
Lauri Ojansivu 9aeb5b4f05 Merge pull request #4884 from helioguardabaxo/master
Added 'next week' due date filter
2023-04-11 11:22:16 +03:00
Lauri Ojansivu ed0fa5df5c Merge pull request #4883 from mfilser/drag_drop_card_empty_swimlanes
get card drag/drop working for empty swimlanes
2023-04-11 11:15:28 +03:00
helioguardabaxo 70de2d48be Added 'next week' due date filter 2023-04-10 20:54:22 -03:00
Martin Filser c0acc336cc get card drag/drop working for empty swimlanes
fixes this issues:
- #4033
- #4032
- #3415
- #1887

related to this discussion:
- #4868
2023-04-08 10:21:36 +02:00
Lauri Ojansivu c068dfe87b v6.83 2023-04-08 02:25:07 +03:00
Lauri Ojansivu 21f37db562 Updated ChangeLog. 2023-04-08 02:20:51 +03:00
Lauri Ojansivu 030faf918e Fix open card position by opening card to fullscreen.
Thanks to SmartPhoneLover, BabyFnord and xet7 !

Fixes #4882
2023-04-08 02:10:31 +03:00
Lauri Ojansivu 8df318bced v6.82 2023-04-07 00:24:34 +03:00
Lauri Ojansivu bbf1f3a43f Updated ChangeLog. 2023-04-07 00:17:14 +03:00
Lauri Ojansivu f258d8d517 Try to fix card open position.
Thanks to xet7 !

Fixes #4572
2023-04-07 00:15:49 +03:00
Lauri Ojansivu 0985438df5 Updated ChangeLog. 2023-04-06 16:59:27 +03:00
Lauri Ojansivu 9d0956511d Merge pull request #4880 from gustavengstrom/master
Fixes broken add_board_member API and return value for remove_board_member
2023-04-06 16:57:58 +03:00
Lauri Ojansivu d6b8c76cc7 Updated translations. 2023-04-06 16:52:51 +03:00
Gustav Engström 7d69bd5c46 Fixes broken add_board_member API call and fixes return value for remove_board_member. 2023-04-05 22:10:11 +02:00
Lauri Ojansivu cfd283e7e3 Merge pull request #4876 from mfilser/fix_avatar_user_undefined
fix avatar if Meteor.user() is undefined
2023-04-04 11:09:34 +03:00
Martin Filser 999c20f3fa fix avatar if Meteor.user() is undefined 2023-04-01 10:45:06 +02:00
Lauri Ojansivu 85f9996b41 Updated readme. 2023-03-29 20:48:15 +03:00
Lauri Ojansivu c4e07d6a53 Updated translations. 2023-03-27 23:28:01 +03:00
Lauri Ojansivu 2aba1e3bf9 Added missing docs of Snap avatars max size etc.
Thanks to xet7 !
2023-03-27 22:05:08 +03:00
Lauri Ojansivu 5e5847c5e4 Updated translations. 2023-03-27 03:04:15 +03:00
Lauri Ojansivu 224c257c4f v6.81 2023-03-26 20:36:49 +03:00
Lauri Ojansivu 28a0a97ca4 Updated translations. 2023-03-26 20:24:28 +03:00
Lauri Ojansivu 662a4a5f00 Updated ChangeLog. 2023-03-26 14:05:18 +03:00
Lauri Ojansivu df152e292d Disable MongoDB telemetry and free monitoring in WeKan Snap.
Thanks to webenefits and xet7 !

Related #4855
2023-03-26 14:03:17 +03:00
Lauri Ojansivu d92a97ff1e Updated translations. 2023-03-26 13:51:02 +03:00
Lauri Ojansivu 115cb016a0 Updated translations. 2023-03-26 13:31:12 +03:00
Lauri Ojansivu 7cda243b42 Updated translations. 2023-03-26 12:48:06 +03:00
Lauri Ojansivu 46b573462f Updated ChangeLog. 2023-03-26 12:44:52 +03:00
Lauri Ojansivu 5b3bd8ff2a Add some info about allowed filesizes and filetypes for attachments and avatars.
Thanks to Meeques and xet7 !

Fixes #4863
2023-03-26 12:41:44 +03:00
Lauri Ojansivu 6faae766a8 Updated ChangeLog. 2023-03-26 11:22:38 +03:00
Lauri Ojansivu bf636725e8 Fix Bug: Cardoptions disappear behind scrollbar in german.
Thanks to Meeques and xet7 !

Fixes #4865
2023-03-26 11:20:15 +03:00
Lauri Ojansivu bafba7aa6a Updated jquery. 2023-03-25 02:29:40 +00:00
Lauri Ojansivu e1984831bd Updated ChangeLog. 2023-03-24 21:34:38 +02:00
Lauri Ojansivu c826438328 v6.80 2023-03-23 22:18:18 +02:00
Lauri Ojansivu e39390ab92 Updated ChangeLog. 2023-03-23 22:14:16 +02:00
Lauri Ojansivu 120f57894f Merge pull request #4864 from mfilser/custom_fields_hide_grid_button_if_1_field
Custom Fields, display Grid Button only if more than 1 custom field
2023-03-22 20:10:41 +00:00
Martin Filser b89a01fddf Custom Fields, display Grid Button only if more than 1 custom field 2023-03-22 07:49:55 +01:00
Lauri Ojansivu 21e4a64dc7 v6.79 2023-03-22 00:07:24 +02:00
Lauri Ojansivu 4aeab872de Use MongoDB 6.
Thanks to xet7 !
2023-03-21 23:59:17 +02:00
Lauri Ojansivu a0a2c9375e Updated translations. 2023-03-21 07:50:10 +02:00
Lauri Ojansivu d1dd9ba955 Updated ChangeLog. 2023-03-21 07:49:45 +02:00
Lauri Ojansivu e48db7d7ea Upgraded to Meteor 2.11.0 .
Thanks to Meteor developers !
2023-03-21 07:48:22 +02:00
Lauri Ojansivu 239dea793a Updated ChangeLog. 2023-03-21 07:32:26 +02:00
Lauri Ojansivu b0ce378629 Merge pull request #4857 from mfilser/avatar_broken_if_no_size_is_configured
Avatar upload was broken if no size is configured
2023-03-16 16:22:59 +01:00
Martin Filser 7de50c0f4b Bugfix, Avatar upload message "avatar-too-big" shows now the configured max filesize 2023-03-15 19:43:02 +01:00
Martin Filser 07926386ea Bugfix, Avatar Upload didn't work if AVATARS_UPLOAD_MAX_SIZE wasn't defined or lower or equal to 0 2023-03-15 19:43:02 +01:00
Lauri Ojansivu f1c962fbbc v6.78 2023-02-28 14:21:46 +02:00
Lauri Ojansivu 5d79c231ed Try to fix some security issue.
Thanks to Responsible Security Disclousure contributors and xet7 !
2023-02-28 14:16:08 +02:00
Lauri Ojansivu 972f0481e5 v6.77 2023-02-27 17:29:57 +02:00
Lauri Ojansivu 49781aae17 Updated ChangeLog. 2023-02-27 17:26:08 +02:00
Lauri Ojansivu 51f22f48dc Use MongoDB 5 at docker-compose.yml .
Thanks to xet7 !
2023-02-27 17:24:54 +02:00
Lauri Ojansivu a64381153f MongoDB to 5 for beta Snap. MongoDB 5 does not seem to show some errors that only MongoDB 6 has. 2023-02-27 17:03:47 +02:00
Lauri Ojansivu 10280966ac Updated ChangeLog. 2023-02-27 17:01:23 +02:00
Lauri Ojansivu 16ad6bf9fc Try to fix attachment migrations to ostrioFiles, allow existing files to be migrated. Part 2.
Thanks to xet7 !

Related #4780,
related https://github.com/wekan/wekan/pull/4648
2023-02-27 16:58:12 +02:00
Lauri Ojansivu 1aa5c23bba Updated ChangeLog. 2023-02-27 16:44:00 +02:00
Lauri Ojansivu 9216a69c05 Temporarily disable file validation, because it prevents migrating some attachments at wekan/server/migrations.js to ostrio Meteor-Files.
Thanks to xet7 !

Related #4780,
related https://github.com/wekan/wekan/pull/4648
2023-02-27 16:38:16 +02:00
Lauri Ojansivu 7b2cff4c5e Fix attachment migration error about avatarUrl startsWith undefined.
Thanks to xet7 !

Related #4780
2023-02-27 16:31:43 +02:00
Lauri Ojansivu bf42958059 Updated ChangeLog. 2023-02-26 01:38:01 +02:00
Lauri Ojansivu 1deccf2f4b Added "Move card to archive" to minicard ☰ menu.
Thanks to mohammadZahedian and xet7 !

Fixes #4303
2023-02-26 01:35:42 +02:00
Lauri Ojansivu 57755ef413 Updated ChangeLog. 2023-02-26 00:50:46 +02:00
Lauri Ojansivu c2cf850179 Made ☰ menu buttons bigger at minicard and list.
Thanks to mohammadZahedian and xet7 !

Fixes #4303
2023-02-26 00:47:59 +02:00
Lauri Ojansivu 67838ae29e Updated translations. 2023-02-26 00:47:02 +02:00
Lauri Ojansivu 4d22477477 Updated ChangeLog. 2023-02-26 00:26:45 +02:00
Lauri Ojansivu 96b5ed1df6 Merge pull request #4846 from Entepotenz/master
fix indentation for image  size and compression
2023-02-26 00:24:07 +02:00
Florian Kretschmer b9ec43c0f7 fix indentation for image size and compression 2023-02-25 23:00:13 +01:00
Lauri Ojansivu 8a0899a819 Updated ChangeLog. 2023-02-23 17:00:16 +02:00
Lauri Ojansivu e390852a67 Updated release scripts. 2023-02-23 16:56:55 +02:00
Lauri Ojansivu c4083c23d6 Back to Snap Candidate MongoDB 6.x 2023-02-22 02:47:42 +02:00
Lauri Ojansivu bdc751ac24 MongoDB 5.x to WeKan Snap Beta channel only. 2023-02-22 02:31:01 +02:00
Lauri Ojansivu 0e23975964 Updated ChangeLog. 2023-02-22 01:56:41 +02:00
Lauri Ojansivu ad53414c4d Updated release scripts.
Thanks to xet7 !
2023-02-22 01:52:57 +02:00
Lauri Ojansivu 23e01130e9 Updated release scripts.
Thanks to xet7 !
2023-02-22 01:20:42 +02:00
Lauri Ojansivu f779c35d0e Updated ChangeLog. 2023-02-22 00:44:07 +02:00
Lauri Ojansivu 6e5d260fd2 v6.76 2023-02-22 00:38:20 +02:00
Lauri Ojansivu 691efb7843 Updated ChangeLog. 2023-02-22 00:09:37 +02:00
Lauri Ojansivu 67500abcd4 Removed Mermaid, because newest Mermaid does not work anymore.
Thanks to xet7 !
2023-02-22 00:07:59 +02:00
Lauri Ojansivu 092b121c38 Updated ChangeLog. 2023-02-21 23:52:06 +02:00
Lauri Ojansivu c27a2b22c6 Part 2. Fix at bottom of list Add button to be higher, so that text Add is not over button borders.
Thanks to WeKan commercial support customer and xet7.
2023-02-21 23:50:22 +02:00
Lauri Ojansivu 9213451dca Updated ChangeLog. 2023-02-21 21:55:42 +02:00
Lauri Ojansivu 139a1c0f78 Fix at bottom of list Add button to be higher, so that text Add is not over button borders.
Thanks to WeKan commercial support customer and xet7.
2023-02-21 21:49:20 +02:00
Lauri Ojansivu 41d5ecd605 Updated ChangeLog. 2023-02-21 21:30:23 +02:00
Lauri Ojansivu fd9478dc57 Try to fix build errors on some platforms.
Thanks to xet7 !

Related #4842
2023-02-21 21:27:34 +02:00
Lauri Ojansivu f1092c6f40 Back to Snap Candidate MongoDB 6.x 2023-02-21 04:47:50 +02:00
Lauri Ojansivu 51b31df2c8 Snap Beta channel MongoDB 5.x 2023-02-21 04:11:22 +02:00
Lauri Ojansivu 2f46f2a888 Updated ChangeLog. 2023-02-21 02:54:26 +02:00
Lauri Ojansivu cae0b29500 Updated release scripts.
Thanks to xet7 !
2023-02-21 02:52:40 +02:00
Lauri Ojansivu aa0e1955b0 v6.75 2023-02-21 02:43:03 +02:00
Lauri Ojansivu 78bac6ca99 Updated ChangeLog. 2023-02-20 16:49:08 -05:00
Lauri Ojansivu 382168a5b4 Try to fix some security issues. Part 2.
Thanks to responsible security disclosure contributors and xet7 !
2023-02-20 16:48:02 -05:00
Lauri Ojansivu e34cfad06b Merge pull request #4840 from robert-scheck/typo
Fix typo
2023-02-20 15:25:18 +02:00
Lauri Ojansivu 71f6697f55 Updated ChangeLog. 2023-02-20 01:26:08 +02:00
Lauri Ojansivu ff993e7c91 Try to fix some security issues.
Thanks to responsible security disclosure contributors and xet7 !
2023-02-20 01:21:33 +02:00
Lauri Ojansivu b349ecbdf7 Updated ChangeLog. 2023-02-20 01:03:59 +02:00
Lauri Ojansivu c3577aa434 Swipebox slide background gradient of black to blue, so that back SVG images are visible.
Thanks to xet7 !
2023-02-20 01:02:02 +02:00
Lauri Ojansivu ed5ab735b4 Updated ChangeLog. 2023-02-20 00:34:43 +02:00
Lauri Ojansivu ed058914b5 Updated webmanifest to have PWA as fullscreen.
Thanks to xet7 !
2023-02-20 00:13:48 +02:00
Robert Scheck c730dd1523 Fix typo 2023-02-19 03:34:51 +01:00
Lauri Ojansivu ba418cb0e7 Updated ChangeLog. 2023-02-18 01:22:41 +02:00
Lauri Ojansivu dd6e7372b7 Updated to Node.js v14.21.3. Thanks to Node.js developers. 2023-02-18 01:21:28 +02:00
Lauri Ojansivu 32bce898f4 Updated contributing 2023-02-16 00:22:52 +02:00
Lauri Ojansivu aca50e7dda Updated contributing 2023-02-16 00:19:39 +02:00
Lauri Ojansivu 42550c2637 Updated contributing. 2023-02-16 00:16:00 +02:00
Lauri Ojansivu 7cd4271881 Updated ChangeLog. 2023-02-15 12:51:55 +02:00
Lauri Ojansivu b04f504adc Merge pull request #4835 from garciadavy/garciadavy-fix-top10-metric
Fix "Top 10 boards" metric order
2023-02-15 12:49:42 +02:00
garciadavy f8bc186252 Fix "Top 10 boards" metric order 2023-02-15 11:27:59 +01:00
Lauri Ojansivu 3083302e14 Updated ChangeLog. 2023-02-14 01:14:51 +02:00
Lauri Ojansivu 6f3e187dfb Updated ChangeLog. 2023-02-14 01:12:48 +02:00
Lauri Ojansivu bc61e6c4f0 And back. 2023-02-14 01:09:25 +02:00
Lauri Ojansivu 3bdbc80c30 MongoDB 5 to Snap Beta Channel for Meridiana.
Thanks to Meridiana and xet7 !
2023-02-13 22:16:44 +02:00
Lauri Ojansivu d7554fc585 v6.74 2023-02-10 14:56:07 +02:00
Lauri Ojansivu a909ddfca8 Updated ChangeLog. 2023-02-10 14:52:41 +02:00
Lauri Ojansivu 7ca4894789 Fix typos in Snap config.
Thanks to urmel1960 and xet7 !

Fixes #4824
2023-02-10 14:50:43 +02:00
Lauri Ojansivu e2b94c9bcb v6.73 2023-02-10 13:00:15 +02:00
Lauri Ojansivu c16f7eaf22 Updated ChangeLog. 2023-02-10 12:56:16 +02:00
Lauri Ojansivu d9a7e135d3 Try to fix building WeKan. 2023-02-10 12:49:12 +02:00
Lauri Ojansivu 4bb63a147e Updated ChangeLog. 2023-02-10 12:34:00 +02:00
Lauri Ojansivu 10c1df7af4 Updated dependencies.
Thanks to developers of dependencies !
2023-02-10 12:32:09 +02:00
Lauri Ojansivu fbd2b7e46b Updated translations. 2023-02-10 12:31:25 +02:00
Lauri Ojansivu 11151b2359 Updated ChangeLog. 2023-02-10 12:30:47 +02:00
Lauri Ojansivu b5d35d4645 Back to MongoDB 6.x
Thanks to urmel1960 and xet7 !

Fixes #4824
2023-02-10 12:29:09 +02:00
Lauri Ojansivu 953a355e63 Merge pull request #4831 from garciadavy/garciadavy-fix-metrics-label
Fix double quotes around metric label
2023-02-10 12:07:09 +02:00
garciadavy 962fb70b16 Fix double quotes around metric label 2023-02-09 17:20:17 +01:00
Lauri Ojansivu 27971e6a66 Updated ChangeLog. 2023-02-07 04:58:17 -05:00
Lauri Ojansivu 3c5ab1ad72 Merge pull request #4829 from q16marvin/master
Update docker-compose.yml
2023-02-07 09:10:28 +02:00
q16marvin b7b8b05661 Update docker-compose.yml 2023-02-07 07:52:59 +01:00
Lauri Ojansivu d8bbcd8e03 Try to fix Snap. 2023-02-02 16:08:32 +02:00
Lauri Ojansivu 9946cb60fa Try to fix Snap. 2023-02-02 16:03:42 +02:00
Lauri Ojansivu a22319f3ab v6.72 2023-02-02 15:05:40 +02:00
Lauri Ojansivu 7a00f3628a Try to fix Snap plugins. 2023-02-02 14:51:29 +02:00
Lauri Ojansivu de49900961 Fix snapcraft plugins. 2023-02-02 14:50:29 +02:00
Lauri Ojansivu 1733203f8e Try MongoDB 5, shell and tool.
Thanks to xet7 !
2023-02-02 14:48:04 +02:00
Lauri Ojansivu e3f4049943 Updated translations. 2023-02-02 14:25:49 +02:00
Lauri Ojansivu 2ae344e685 Updated translations. 2023-02-02 14:18:22 +02:00
Lauri Ojansivu f049a44280 Updated dependencies.
Thanks to developers of dependencies !
2023-02-01 21:05:14 +02:00
Lauri Ojansivu d8593c68e9 Updated translations. 2023-02-01 20:54:36 +02:00
Lauri Ojansivu c1261baaee Updated translations. 2023-02-01 15:54:44 +02:00
Lauri Ojansivu c78ed0828f Updated translations. 2023-02-01 15:50:36 +02:00
Lauri Ojansivu 9b31604c0c Updated ChangeLog. 2023-02-01 15:39:19 +02:00
Lauri Ojansivu a9c66d1883 Updated ChangeLog. 2023-02-01 15:37:23 +02:00
Lauri Ojansivu 362fb66b84 Updated dependencies.
Thanks to developers of dependencies !
2023-02-01 15:36:19 +02:00
Lauri Ojansivu a3e3e70a3a Merge pull request #4818 from wekan/dependabot/github_actions/docker/build-push-action-4.0.0
Bump docker/build-push-action from 3.3.0 to 4.0.0
2023-01-30 22:31:37 +02:00
dependabot[bot] b4963d872b Bump docker/build-push-action from 3.3.0 to 4.0.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.3.0 to 4.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/37abcedcc1da61a57767b7588cb9d03eb57e28b3...3b5e8027fcad23fda98b2e3ac259d8d67585f671)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-30 20:10:05 +00:00
Lauri Ojansivu e108dbd02c Updated translations. 2023-01-30 15:11:33 +02:00
Lauri Ojansivu 2442e2a372 Updated translations. 2023-01-30 15:11:05 +02:00
Lauri Ojansivu cfbbab6b86 Updated ChangeLog. 2023-01-30 15:08:24 +02:00
Lauri Ojansivu d32d46d22d Updated ChangeLog. 2023-01-30 14:53:26 +02:00
Lauri Ojansivu 0043fe010f Upgrade Snap Candidate to MongoDB 6.0.4.
Thanks to MongoDB developers.
2023-01-30 14:51:54 +02:00
Lauri Ojansivu b13ebcea12 Updated ChangeLog. 2023-01-30 14:25:28 +02:00
Lauri Ojansivu 38af077a94 Upgraded to Meteor 2.11.0-beta.0 for MongoDB 6.x support https://github.com/meteor/meteor/pull/12470.
Thanks to Meteor developers!
2023-01-30 14:17:15 +02:00
Lauri Ojansivu bed2669ff8 Updated translations. 2023-01-30 14:15:22 +02:00
Lauri Ojansivu 7d7c45c33f Updated translations. 2023-01-30 14:10:07 +02:00
Lauri Ojansivu c7330a47a0 Updated translations. 2023-01-30 14:08:05 +02:00
Lauri Ojansivu 2d7639262f Updated translations. 2023-01-23 03:57:08 +02:00
Lauri Ojansivu f93219c293 Merge pull request #4813 from jghaanstra/master
Small improvements modern-dark theme
2023-01-22 17:36:23 +02:00
Jelger Haanstra 1124117f0c Small improvements modern-dark theme 2023-01-21 09:53:26 +01:00
Jelger Haanstra 133a81b08c Small improvements modern-dark theme 2023-01-21 09:46:03 +01:00
Lauri Ojansivu 0609629d75 v6.71 2023-01-17 23:29:40 +02:00
Lauri Ojansivu 1362f0f58d Updated ChangeLog. 2023-01-17 23:12:41 +02:00
Lauri Ojansivu beaa50551d Fix Customfields are not added to new cards created with the API.
Thanks to HEMGDevelopment and xet7 !

Fixes #4810
2023-01-17 23:09:51 +02:00
Lauri Ojansivu de67f4fdc7 Updated ChangeLog. 2023-01-17 21:34:14 +02:00
Lauri Ojansivu eda2b3b406 Fix API Edit card function does nothing.
Thanks to gu1ll0me, HEMGDevelopment and xet7 !

Fixes #4701
2023-01-17 21:31:16 +02:00
Lauri Ojansivu c38cbf920c Updated ChangeLog. 2023-01-17 20:18:36 +02:00
Lauri Ojansivu 434ce9f7c4 Upgraded to Meteor 2.10.0.
Thanks to Meteor developers!
2023-01-17 20:17:13 +02:00
Lauri Ojansivu bd0b539183 Merge pull request #4809 from wekan/dependabot/github_actions/docker/metadata-action-4.3.0
Bump docker/metadata-action from 4.1.1 to 4.3.0
2023-01-16 22:07:29 +02:00
Lauri Ojansivu 1e73f9b909 Merge pull request #4808 from wekan/dependabot/github_actions/docker/build-push-action-3.3.0
Bump docker/build-push-action from 3.2.0 to 3.3.0
2023-01-16 22:07:07 +02:00
dependabot[bot] e0aad13fef Bump docker/metadata-action from 4.1.1 to 4.3.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4.1.1 to 4.3.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/57396166ad8aefe6098280995947635806a0e6ea...507c2f2dc502c992ad446e3d7a5dfbe311567a96)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-16 20:05:52 +00:00
dependabot[bot] 05139ed553 Bump docker/build-push-action from 3.2.0 to 3.3.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/c56af957549030174b10d6867f20e78cfd7debc5...37abcedcc1da61a57767b7588cb9d03eb57e28b3)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-16 20:05:48 +00:00
Lauri Ojansivu 93845a00eb Updated ChangeLog. 2023-01-16 15:15:21 +02:00
Lauri Ojansivu cd1750f368 Forked minio npm package to @wekanteam/minio to update package dependencies. S3/MinIO support In Progress.
Thanks to xet7 !

Related #142
2023-01-16 15:11:31 +02:00
Lauri Ojansivu 617d4f9fbf v6.70 2023-01-13 22:23:40 +02:00
Lauri Ojansivu cc90291192 Try to fix User API. Part 2.
Thanks to xet7 !

Fixes #4039
2023-01-13 22:14:39 +02:00
Lauri Ojansivu 8092f8be28 Try to fix User API.
Thanks to xet7 !

Fixes #4039
2023-01-13 21:50:39 +02:00
Lauri Ojansivu c817deef9e Merge pull request #4805 from wekan/dependabot/github_actions/helm/chart-releaser-action-1.5.0
Bump helm/chart-releaser-action from 1.4.1 to 1.5.0
2023-01-09 22:24:52 +02:00
dependabot[bot] 5379541733 Bump helm/chart-releaser-action from 1.4.1 to 1.5.0
Bumps [helm/chart-releaser-action](https://github.com/helm/chart-releaser-action) from 1.4.1 to 1.5.0.
- [Release notes](https://github.com/helm/chart-releaser-action/releases)
- [Commits](https://github.com/helm/chart-releaser-action/compare/v1.4.1...v1.5.0)

---
updated-dependencies:
- dependency-name: helm/chart-releaser-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-09 20:07:28 +00:00
Lauri Ojansivu 83fb18b868 v6.69 2023-01-09 17:16:55 +02:00
Lauri Ojansivu a7fb36bebb Updated ChangeLog. 2023-01-09 17:10:15 +02:00
Lauri Ojansivu 17a06ad1b1 Updated dependencies.
Thanks to developers of dependencies !
2023-01-09 17:08:28 +02:00
Lauri Ojansivu 733c0e1710 Updated translations. 2023-01-09 14:58:22 +02:00
Lauri Ojansivu 1511009c6f 6.68 2023-01-07 02:18:41 +02:00
Lauri Ojansivu 2baaf6bea5 v6.68 2023-01-07 02:15:23 +02:00
Lauri Ojansivu e7d5879ef4 Updated ChangeLog. 2023-01-07 01:46:45 +02:00
Lauri Ojansivu a0318e59c1 Upgraded to Meteor 2.9.1. Thanks to Meteor developers. 2023-01-07 01:45:28 +02:00
Lauri Ojansivu e5ad06d7f1 Updated translations. 2023-01-07 01:35:53 +02:00
Lauri Ojansivu 608059b1ce Updated ChangeLog. 2023-01-07 01:35:34 +02:00
Lauri Ojansivu bc67b5c3bc Fix OIDC login loop for integer user ID.
Thanks to danielkaiser !

Fixes #4795,
related https://github.com/wekan/wekan/commit/f2a92be01a753c5752284d221706c6efb0dd60a7
2023-01-07 01:33:28 +02:00
Lauri Ojansivu 38e8aad9cf Updated ChangeLog. 2023-01-07 01:23:52 +02:00
Lauri Ojansivu 4a5cd5b001 Merge pull request #4801 from markormesher/patch-1
add "use-credentials" directive to site.webmanifest request
2023-01-07 01:22:15 +02:00
Mark Ormesher e2cbe751ec add "use-credentials" directive to site.webmanifest request 2023-01-04 13:52:49 +00:00
Lauri Ojansivu f7e2267498 v6.67 2023-01-03 17:31:49 +02:00
Lauri Ojansivu 4c814ce3fe Updated dependencies.
Thanks to developers of dependencies !
2023-01-03 17:25:19 +02:00
Lauri Ojansivu ec51e4cf39 Updated translations. 2023-01-03 17:21:45 +02:00
Lauri Ojansivu dda37688ad Updated ChangeLog. 2023-01-03 16:53:38 +02:00
Lauri Ojansivu f2a92be01a Fix OIDC login loop for integer user ID.
Thanks to danielkaiser and xet7 !

Fixes #4795
2023-01-03 16:51:35 +02:00
Lauri Ojansivu 5591319259 Updated ChangeLog. 2022-12-28 10:32:41 +02:00
Lauri Ojansivu f20656909b Updated dependencies.
Thanks to developers of dependencies !
2022-12-28 10:30:27 +02:00
Lauri Ojansivu d184779cc3 v6.65 2022-12-27 22:23:12 +02:00
Lauri Ojansivu 0ae8e4912b Updated dependencies.
Thanks to developers of dependencies !
2022-12-27 22:18:39 +02:00
Lauri Ojansivu 67742c8070 Updated ChangeLog. 2022-12-27 21:49:18 +02:00
Lauri Ojansivu 391607ec79 Store files to S3. Part 4. In Progress.
Thanks to xet7 !
2022-12-27 21:42:06 +02:00
Lauri Ojansivu fc68b68069 Updated ChangeLog. 2022-12-26 20:17:30 +02:00
Lauri Ojansivu f1ff6d1e1f Fixed Windows bundle build script and updated newest Windows WeKan release.
Thanks to xet7 !

Fixes #4707
2022-12-26 20:14:49 +02:00
Lauri Ojansivu 8aaabb5a3a Updated translations. 2022-12-26 15:21:07 +02:00
Lauri Ojansivu a8498e3990 Updated translations. 2022-12-26 06:23:52 +02:00
Lauri Ojansivu 52355b4cfe Updated ChangeLog. 2022-12-26 06:09:48 +02:00
Lauri Ojansivu fb6f618917 More S3 code.
Thanks to xet7 !

Related #142
2022-12-26 05:45:32 +02:00
Lauri Ojansivu 028633b00a Fix some S3 typos. 2022-12-26 05:01:15 +02:00
Lauri Ojansivu 3d6e77dba9 Merge branch 'master' into feature-s3 2022-12-26 04:21:05 +02:00
Lauri Ojansivu 246163a5d3 Updated ChangeLog. 2022-12-25 03:42:03 +02:00
Lauri Ojansivu 015b1428b0 Updated ChangeLog. 2022-12-25 02:52:37 +02:00
Lauri Ojansivu 62dc63c033 Moved helm charts to https://github.com/wekan/charts
Thanks to xet7 !
2022-12-25 02:50:56 +02:00
Lauri Ojansivu c1a9d62cf9 Updated ChangeLog. 2022-12-24 23:21:12 +02:00
Lauri Ojansivu 182e1d4bf4 Updated readme. 2022-12-24 23:19:50 +02:00
Lauri Ojansivu d65f8cda1b Update readme. 2022-12-24 23:18:56 +02:00
Lauri Ojansivu 3846b130d8 Updated ChangeLog. 2022-12-24 23:15:35 +02:00
Lauri Ojansivu 9a838e7990 Reorganize readme links. 2022-12-24 23:13:41 +02:00
Lauri Ojansivu b31eba7481 Updated ChangeLog. 2022-12-24 23:09:36 +02:00
Lauri Ojansivu 2b2bb5d6e2 Update badges to be only links, and not load remote images.
Thanks to xet7 !
2022-12-24 23:07:20 +02:00
Lauri Ojansivu 161b20834f Merge branch 'master' into feature-s3 2022-12-24 11:52:03 +02:00
Lauri Ojansivu d6322100c9 v6.64 2022-12-24 11:07:01 +02:00
Lauri Ojansivu f22fe5497b Upgrade to MongoDB 6.0.3. Part 2.
Thanks to MongoDB developers!
2022-12-24 11:00:02 +02:00
Lauri Ojansivu 62242b4a96 Upgrade to MongoDB 6.0.3.
Thanks to MongoDB developers!
2022-12-24 10:58:28 +02:00
Lauri Ojansivu 3c6d66f86b Updated ChangeLog. 2022-12-24 09:50:23 +02:00
Lauri Ojansivu a4f99a3a55 Merge pull request #4788 from Viehlieb/4786_fix_group_routine
4786 fix group routine
2022-12-24 09:42:32 +02:00
viehlieb 1914422181 remove Meteor call for starting group routine onLogin - since hook is not called 2022-12-23 11:48:30 +01:00
viehlieb d90e78e417 move logic for group routine to wekan-oidc package 2022-12-23 11:47:33 +01:00
Lauri Ojansivu 02fe918388 Updated translations. 2022-12-23 00:35:12 +02:00
Lauri Ojansivu e0b1c0018c Updated ChangeLog. 2022-12-22 23:31:47 +02:00
Lauri Ojansivu 6e99a0cb25 Merge branch 'master' of github.com:wekan/wekan 2022-12-22 23:29:35 +02:00
Lauri Ojansivu ec0967b859 Updated ChangeLog. 2022-12-22 23:28:35 +02:00
Lauri Ojansivu 558093ff0c Update webmanifest for WeKan Android Play Store app. 2022-12-22 23:23:48 +02:00
Lauri Ojansivu 6d77172d54 Merge pull request #4787 from helioguardabaxo/master
Fix: changing list color reloads webpage
2022-12-22 22:58:43 +02:00
helioguardabaxo 209d946f94 Fix: changing list color reloads webpage 2022-12-22 17:42:07 -03:00
Lauri Ojansivu 160add6d73 Updated ChangeLog. 2022-12-22 01:05:33 +02:00
Lauri Ojansivu 71d35b0525 Updated release scripts.
Thanks to xet7 !
2022-12-22 01:03:52 +02:00
Lauri Ojansivu b4cc3a8756 v6.63 2022-12-22 00:56:17 +02:00
Lauri Ojansivu 21e2eabd60 Store files to S3. In Progress.
Thanks to xet7 !

Related #142
2022-12-21 23:48:47 +02:00
Lauri Ojansivu 0ad73ee0c0 Updated translations. 2022-12-21 22:11:48 +02:00
Lauri Ojansivu f69834034f Updated ChangeLog. 2022-12-21 18:27:06 +02:00
Lauri Ojansivu 36716283f4 Merge pull request #4783 from jos-webservices/master
Add link card feature to rules
2022-12-21 18:24:43 +02:00
Jochen Sukrow 6e3f25c771 Add link card feature to rules 2022-12-21 16:21:17 +01:00
Lauri Ojansivu 25f85db453 Updated ChangeLog. 2022-12-20 04:18:50 +02:00
Lauri Ojansivu 67c41afe9a Updated release scripts.
Thanks to xet7 !
2022-12-20 04:17:20 +02:00
Lauri Ojansivu b8dba93b52 v6.62 2022-12-20 04:04:13 +02:00
Lauri Ojansivu abc5601942 Updated dependencies like mermaid and dompurify.
Thanks to developers of dependencies!
2022-12-20 04:01:55 +02:00
Lauri Ojansivu ccbc7f6122 Fixed installing api2html when generating OpenAPI docs.
Thanks to xet7 !
2022-12-20 03:21:12 +02:00
Lauri Ojansivu 5104e74303 Updated ChangeLog. 2022-12-20 02:34:52 +02:00
Lauri Ojansivu 6b59c31e4f Merge pull request #4781 from mfilser/remove_duplicate_id_issue
Remove duplicate IDs issue
2022-12-20 02:30:58 +02:00
Martin Filser f6d7377977 Remove duplicate IDs issue 2022-12-19 21:14:08 +01:00
Lauri Ojansivu cae4cc33f8 Merge pull request #4778 from wekan/dependabot/npm_and_yarn/d3-color-and-mermaid-3.1.0
Bump d3-color and mermaid
2022-12-19 18:56:44 +02:00
Lauri Ojansivu f9318f494a Updated ChangeLog. 2022-12-15 16:04:09 +02:00
Lauri Ojansivu 5f946707e5 Added backup sync script. 2022-12-15 16:02:52 +02:00
Lauri Ojansivu 25c9f7ee21 Updated ChangeLog. 2022-12-15 14:59:59 +02:00
Lauri Ojansivu 88604b634b Updated release scripts.
Thanks to xet7 !
2022-12-15 14:58:10 +02:00
dependabot[bot] abb4388e29 Bump d3-color and mermaid
Bumps [d3-color](https://github.com/d3/d3-color) and [mermaid](https://github.com/mermaid-js/mermaid). These dependencies needed to be updated together.

Updates `d3-color` from 1.4.1 to 3.1.0
- [Release notes](https://github.com/d3/d3-color/releases)
- [Commits](https://github.com/d3/d3-color/compare/v1.4.1...v3.1.0)

Updates `mermaid` from 9.2.2 to 9.3.0
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Changelog](https://github.com/mermaid-js/mermaid/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/mermaid-js/mermaid/compare/v9.2.2...v9.3.0)

---
updated-dependencies:
- dependency-name: d3-color
  dependency-type: indirect
- dependency-name: mermaid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-15 12:01:56 +00:00
Lauri Ojansivu 78e5778527 v6.61 2022-12-15 14:00:56 +02:00
Lauri Ojansivu 12810673a8 Updated ChangeLog. 2022-12-15 13:51:48 +02:00
Lauri Ojansivu d1f519917b Update release scripts. 2022-12-15 13:50:41 +02:00
Lauri Ojansivu ac1568770f Updated ChangeLog. 2022-12-15 13:50:24 +02:00
Lauri Ojansivu ed3a512518 Updated to Node.js v14.21.2. Thanks to Node.js developers. 2022-12-15 13:49:05 +02:00
Lauri Ojansivu ceea4a9b9f Updated ChangeLog. 2022-12-15 06:10:18 +02:00
Lauri Ojansivu a561d1b633 For export/print print board/card, added some CSS better. Use browser print preview %20 etc setting to fit to page. Next: Card CSS.
Thanks to xet7 !

Related #4197,
related #1173
2022-12-15 06:06:27 +02:00
Lauri Ojansivu b17b9ea7c5 Updated ChangeLog. 2022-12-15 04:24:08 +02:00
Lauri Ojansivu c4d1ffc2e5 Updated dependencies. 2022-12-15 04:23:18 +02:00
Lauri Ojansivu 0dde88adb7 Updated ChangeLog. 2022-12-14 19:50:46 +02:00
Lauri Ojansivu fe1e1983ad Updated dependecies like markdown-it-mermaid.
Thanks to developers of dependencies.
2022-12-14 19:49:20 +02:00
Lauri Ojansivu f044a8ba48 Updated ChangeLog. 2022-12-14 19:14:21 +02:00
Lauri Ojansivu 689e37e434 Updated to Node.js v14.21.2. Thanks to Node.js developers. 2022-12-14 19:13:10 +02:00
Lauri Ojansivu b3cf2ee419 Updated ChangeLog. 2022-12-14 19:12:39 +02:00
Lauri Ojansivu 49546b7e3b Upgraded to Meteor 2.9.0 . MongoDB performance upgrades etc:
https://blog.meteor.com/new-meteorjs-2-9-and-the-new-scaffold-api-5fcc0f3b1ce5

Thanks to Meteor developers !
2022-12-14 19:09:26 +02:00
Lauri Ojansivu baa9651da3 Updated ChangeLog. 2022-12-14 16:10:21 +02:00
Lauri Ojansivu 2be0385c25 Move Desktop Drag Handle setting more right.
Thanks to Emile840 and xet7 !

Related #4734,
related #4715
2022-12-14 16:06:34 +02:00
Lauri Ojansivu cb336b4ec2 Updated ChangeLog. 2022-12-14 09:56:04 +02:00
Lauri Ojansivu f485ccea2f Added newuser to api.py .
Thanks to WassimDhib and xet7 !

Fixes #4774,
fixes #4771
2022-12-14 09:51:31 +02:00
Lauri Ojansivu 1165b21b1b Updated ChangeLog. 2022-12-06 19:59:53 +02:00
Lauri Ojansivu b9ae5a19c7 Fixed text not visible at white swimlane at themes dark and exodark.
Commented out not in use font Poppins.
Custom fonts were previously removed because they did not work,
there were errors at browser inspect console.

Thanks to  Meeques and xet7 !

Fixes #4451
2022-12-06 19:57:39 +02:00
Lauri Ojansivu 1777f52bc1 Updated translations. 2022-12-05 02:30:22 +02:00
Lauri Ojansivu d189212e9c Updated dependencies. 2022-12-02 13:10:39 +02:00
Lauri Ojansivu 92d87e76bc Updated translations. 2022-12-02 12:34:53 +02:00
Lauri Ojansivu 9caf63840b Updated translations. 2022-12-02 09:16:23 +02:00
Lauri Ojansivu 66fc0679ff Updated dependencies. 2022-12-02 09:16:10 +02:00
Lauri Ojansivu 26b52a1da8 v6.60 2022-12-01 08:02:17 +02:00
Lauri Ojansivu 1e84109ea6 Reverted adding react, react-dom, excalidraw.
Thanks to xet7.
2022-12-01 07:53:47 +02:00
Lauri Ojansivu 1ee7a85e0f Updated translations. 2022-12-01 07:50:15 +02:00
Lauri Ojansivu 253d1aee46 Updated ChangeLog. 2022-12-01 07:39:02 +02:00
Lauri Ojansivu 49404203ab Upgraded to Meteor 2.8.2. This could fix memory leaks. See https://forums.meteor.com/t/meteor-v2-8-memory-leak-in-mongo-driver/59101/23 .
Added Mongo sessions count to Admin Panel / Version at bottom of page, see that it is not growing all the time.

Thanks to Meteor developers and xet7 !
2022-12-01 07:32:44 +02:00
Lauri Ojansivu bd03669d73 v6.59 2022-11-28 23:13:25 +02:00
Lauri Ojansivu 351fbdffd7 Updated translations. 2022-11-28 22:48:44 +02:00
Lauri Ojansivu fa6ef6e21c Updated ChangeLog. 2022-11-28 22:29:37 +02:00
Lauri Ojansivu e8d483098e Reved FOSSA GitHub badge integration, because FOSSA Open Source plan does not show enough details about licenses, and does not allow to fix incorrectly detected licenses.
Thanks to xet7 !
2022-11-28 22:23:57 +02:00
Lauri Ojansivu 7936961264 Merge pull request #4761 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-2.1.0
Bump VeryGoodOpenSource/very_good_coverage from 2.0.0 to 2.1.0
2022-11-28 22:14:57 +02:00
Lauri Ojansivu 80505c4078 Merge pull request #4760 from nebulade/patch-1
Provide a copy of escapedToHex() from ldapjs
2022-11-28 22:14:29 +02:00
dependabot[bot] 5507db8950 Bump VeryGoodOpenSource/very_good_coverage from 2.0.0 to 2.1.0
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/VeryGoodOpenSource/very_good_coverage) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/VeryGoodOpenSource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/VeryGoodOpenSource/very_good_coverage/compare/v2.0.0...v2.1.0)

---
updated-dependencies:
- dependency-name: VeryGoodOpenSource/very_good_coverage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-28 20:04:34 +00:00
Johannes Zellner 2ad56af57b Provide a copy of escapedToHex() from ldapjs
Since this is not exported by the upstream module, a copy was made.
2022-11-28 18:37:44 +01:00
Lauri Ojansivu d268713fd7 v6.58 2022-11-25 08:33:18 +02:00
Lauri Ojansivu 252b2f6f87 Try to fix #4754 LDAP CN escape. Please test.
Thanks to xet7 !
2022-11-24 19:27:22 +02:00
Lauri Ojansivu 530d64898b v6.57 2022-11-24 15:38:10 +02:00
Lauri Ojansivu a3e70fbfdc Updated ChangeLog. 2022-11-24 14:30:05 +02:00
Lauri Ojansivu 743d9d2be8 Try to fix Unescaped char in CN at LDAP, by updating to ldapjs to 2.3.3 and adding escape.
Thanks to xUndero, mfilser, gramakri and xet7 !

Fixes #4754
2022-11-24 14:24:16 +02:00
Lauri Ojansivu 84057381f4 Updated ChangeLog. 2022-11-23 03:25:03 +02:00
Lauri Ojansivu 38f7384fd7 Updated release scripts.
Thanks to xet7 !
2022-11-23 03:23:25 +02:00
Lauri Ojansivu 5c0a389fb9 v6.56 2022-11-22 23:34:30 +02:00
Lauri Ojansivu e7d1e2fc9c Updated ChangeLog. 2022-11-22 23:13:17 +02:00
Lauri Ojansivu e62b19affe Updated Meteor version at Dockerfile.
Thanks to xet7 !
2022-11-22 23:12:12 +02:00
Lauri Ojansivu 3735d21be2 Updated ChangeLog. 2022-11-22 00:50:12 +02:00
Lauri Ojansivu 57c09e15ac Revert max_old_space_size and stack-size. Update markdown-it-mermaid and cli-table3.
Thanks to xet7 !
2022-11-22 00:48:45 +02:00
Lauri Ojansivu 90ea11859d Updated ChangeLog. 2022-11-21 23:36:43 +02:00
Lauri Ojansivu 6a4e17e039 Revert set miniscreen to 250px.
Thanks to zlobcek, mfilser and xet7 !

Related https://github.com/wekan/wekan/discussions/4753,
related https://github.com/wekan/wekan/pull/4649
2022-11-21 23:29:44 +02:00
Lauri Ojansivu 0849df2e88 Updated ChangeLog. 2022-11-19 03:53:34 +02:00
Lauri Ojansivu 3b59620ee3 Upgraded to Meteor 2.8.1.
Thanks to Meteor developers !
2022-11-19 03:51:58 +02:00
Lauri Ojansivu 73648ec1e4 Updated translations. 2022-11-17 22:38:57 +02:00
Lauri Ojansivu c490d5b35a Updated ChangeLog. 2022-11-17 21:14:56 +02:00
Lauri Ojansivu 0ddabbaf75 Merge pull request #4752 from zzci/add-delete-token-api
Add delete token api
2022-11-17 21:11:21 +02:00
Roy 85a51de703 The payload token is hashedToken. 2022-11-17 00:31:30 +03:00
Roy f304c3ad52 Add delete token api
If someone lost token, then admin user should be can delete a user token.
2022-11-16 23:58:04 +03:00
Lauri Ojansivu 60bc603399 Merge pull request #4751 from wekan/dependabot/github_actions/actions/dependency-review-action-3
Bump actions/dependency-review-action from 2 to 3
2022-11-14 23:37:40 +02:00
dependabot[bot] c9466c688b Bump actions/dependency-review-action from 2 to 3
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 2 to 3.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-14 20:04:55 +00:00
Lauri Ojansivu 047bd3e065 Updated ChangeLog. 2022-11-05 21:40:06 +02:00
Lauri Ojansivu fbae3b0e55 Try to fix Snap Candidate. 2022-11-05 21:38:24 +02:00
Lauri Ojansivu 087ad7d4e5 v6.55 2022-11-05 19:46:22 +02:00
Lauri Ojansivu a3ecda64cf Updated dependencies. 2022-11-05 18:10:45 +02:00
Lauri Ojansivu f841296714 Updated ChangeLog. 2022-11-05 02:48:11 +02:00
Lauri Ojansivu 20e3282edd Updated to Node.js v14.21.1. Thanks to Node.js developers. 2022-11-05 02:46:25 +02:00
Lauri Ojansivu 686275d656 Updated ChangeLog. 2022-11-05 02:43:40 +02:00
Lauri Ojansivu 2ef75a810d Updated ostrio:files.
Thanks to developers of dependencies !
2022-11-05 02:41:57 +02:00
Lauri Ojansivu 474cb73329 Updated translations. 2022-11-02 16:58:20 +02:00
Lauri Ojansivu b3039c74a5 Updated ChangeLog. 2022-11-02 16:53:45 +02:00
Lauri Ojansivu d710168cfa Updated to Node.js v14.21.0. Thanks to Node.js developers. 2022-11-02 16:52:25 +02:00
Lauri Ojansivu e50ead1ea3 Updated ChangeLog. 2022-11-02 16:51:22 +02:00
Lauri Ojansivu 55bd94bbf4 LDAP Python script. Part 2. 2022-11-02 16:49:21 +02:00
Lauri Ojansivu 5a022e25ac Updated ChangeLog. 2022-10-29 14:19:20 +03:00
Lauri Ojansivu ca9d47c2aa Added LDAP sync script, that also correctly removes users.
Thanks to hpvb !

Related #4740,
related #4739,
related #4738,
related #4737,
related #4736
2022-10-29 14:13:50 +03:00
Lauri Ojansivu 9b82ce149f Updated API docs. 2022-10-25 15:24:15 +03:00
Lauri Ojansivu ba3fc4a9b5 Updated ChangeLog. 2022-10-25 15:16:51 +03:00
Lauri Ojansivu 6b993fafd3 Merge pull request #4732 from bentiss/fix-esprima
Fix Python-Esprima upstream failing
2022-10-25 15:11:25 +03:00
Benjamin Tissoires 7adba9fea3 Fix Python-Esprima upstream failing
Sigh, python-esprima is really not well maintained:
- the maintainer merged https://github.com/Kronuz/esprima-python/pull/19
- this breaks entirely his project
- the submitter of PR 19 submitted a fix one week later
- 10 months later, the fix is still not merged :(

Pull it locally so we get our docs building again.

Fixes: #4731
2022-10-25 10:37:21 +02:00
Lauri Ojansivu 65618ea8dc Updated ChangeLog. 2022-10-25 00:47:47 +03:00
Lauri Ojansivu a52213b93a Use Ubuntu 22.10 base on Docker.
Thanks to Ubuntu developers!
2022-10-25 00:46:37 +03:00
Lauri Ojansivu f6ebcf6084 Updated ChangeLog. 2022-10-24 23:28:29 +03:00
Lauri Ojansivu f67ffc910c Commented out ppc64el from release scripts.
Thanks to xet7 !
2022-10-24 23:26:33 +03:00
Lauri Ojansivu 5d9b9fada4 v6.54 2022-10-24 23:16:19 +03:00
Lauri Ojansivu 631629b2a3 Updated ChangeLog. 2022-10-23 15:50:32 +03:00
Lauri Ojansivu a9dfcf8520 Fix metrics to check that socket is defined, because got error about userId.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4728,
related https://github.com/wekan/wekan/pull/4700
2022-10-23 15:48:46 +03:00
Lauri Ojansivu 5887b1c109 Updated ChangeLog. 2022-10-23 15:32:03 +03:00
Lauri Ojansivu 7e5e29cacb Drag handle part 2. 2022-10-23 15:30:54 +03:00
Lauri Ojansivu 4390ece55c Updated ChangeLog. 2022-10-23 15:28:32 +03:00
Lauri Ojansivu e214bc55dc Drag handle toggle at top left: Each touch/non-touch screen can
use different setting, because it's saved to browser localstorage,
not database. For example, when using Firefox Multi-Account Containers AddOn,
different browsers etc, when logged in as same user.

Thanks to hatl and xet7 !

Fixes #4715
2022-10-23 15:17:41 +03:00
Lauri Ojansivu 2d16e35ac4 Updated ChangeLog. 2022-10-23 14:17:37 +03:00
Lauri Ojansivu 93fa56d039 OpenPower MiniCloud is discontinued, no ppc64le build server. Looking for other ways to build.
Thanks to MiniCloud.
2022-10-23 14:15:31 +03:00
Lauri Ojansivu 916cc11bda Updated ChangeLog. 2022-10-23 13:26:39 +03:00
Lauri Ojansivu d474ce64b8 Fix to use metrics related code only when enabled, because got error about userId.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4728,
related https://github.com/wekan/wekan/pull/4700
2022-10-23 13:23:24 +03:00
Lauri Ojansivu 9810986978 Updated ChangeLog. 2022-10-23 09:22:10 +03:00
Lauri Ojansivu 15bf69c319 Added URL path / for site.webmanifest and pwa-service-worker because of errors in Chrome inspect console.
Thanks to xet7 !
2022-10-23 09:20:43 +03:00
Lauri Ojansivu 8152597a03 Updated ChangeLog. 2022-10-23 09:18:52 +03:00
Lauri Ojansivu 2573d325e6 Try to fix Mermaid Diagram error in Chrome: Maximum call stack size exceeded.
Thanks to xet7 !
2022-10-23 09:17:31 +03:00
Lauri Ojansivu 5b4ea83044 Updated ChangeLog. 2022-10-23 08:59:23 +03:00
Lauri Ojansivu 005c91af51 Commented out fonts because of errors in browser inspect console: downloadable font: rejected by sanitizer font-family Roboto Poppins.
Thanks to xet7 !
2022-10-23 08:57:25 +03:00
Lauri Ojansivu ab49545876 Upgraded to Meteor 2.8.0.
Thanks to Meteor developers !
2022-10-23 08:55:47 +03:00
Lauri Ojansivu 87828583e7 Updated ChangeLog. 2022-10-22 03:55:19 +03:00
Lauri Ojansivu a42aff837c Merge pull request #4728 from Emile840/master
feat(wekan metrics): rename metrics key and add a new one
2022-10-22 03:32:21 +03:00
Emile Ndagijimana eb15751dae feat(wekan metrics): rename metrics key and add a new one 2022-10-21 18:13:53 +02:00
Lauri Ojansivu d736b920d5 Updated ChangeLog. 2022-10-20 15:54:27 +03:00
Lauri Ojansivu 7810e90524 Added development option for using bundle visualizer.
Thanks to xet7 !
2022-10-20 15:51:54 +03:00
Lauri Ojansivu aa9a3886de Updated translations. 2022-10-18 12:03:02 +03:00
Lauri Ojansivu 9b7bcee16f Updated ChangeLog. 2022-10-18 07:43:02 +03:00
Lauri Ojansivu e06390362b Merge pull request #4720 from wekan/dependabot/github_actions/docker/build-push-action-3.2.0
Bump docker/build-push-action from 3.1.1 to 3.2.0
2022-10-17 23:37:43 +03:00
Lauri Ojansivu 88cb35e75c Merge pull request #4719 from wekan/dependabot/github_actions/docker/metadata-action-4.1.1
Bump docker/metadata-action from 4.0.1 to 4.1.1
2022-10-17 23:36:51 +03:00
Lauri Ojansivu 836bc6d125 Merge pull request #4718 from wekan/dependabot/github_actions/docker/login-action-2.1.0
Bump docker/login-action from 2.0.0 to 2.1.0
2022-10-17 23:35:47 +03:00
dependabot[bot] 4543fd73df Bump docker/build-push-action from 3.1.1 to 3.2.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/c84f38281176d4c9cdb1626ffafcd6b3911b5d94...c56af957549030174b10d6867f20e78cfd7debc5)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-17 20:21:41 +00:00
dependabot[bot] 4d47f6b80b Bump docker/metadata-action from 4.0.1 to 4.1.1
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4.0.1 to 4.1.1.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/69f6fc9d46f2f8bf0d5491e4aabe0bb8c6a4678a...57396166ad8aefe6098280995947635806a0e6ea)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-17 20:21:35 +00:00
dependabot[bot] 5f8f5f2892 Bump docker/login-action from 2.0.0 to 2.1.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/49ed152c8eca782a232dede0303416e8f356c37b...f4ef78c080cd8ba55a85445d5b36e214a81df20a)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-17 20:21:32 +00:00
Lauri Ojansivu 21ddac67bb Merge pull request #4716 from luisfcorreia/patch-1
Update docker-compose.yml
2022-10-12 16:06:05 +03:00
Lauri Ojansivu 0096c69595 Merge pull request #4713 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-2.0.0
Bump VeryGoodOpenSource/very_good_coverage from 1.2.1 to 2.0.0
2022-10-12 16:05:22 +03:00
Luis Correia aa26069e9f Update docker-compose.yml
Add note for an option that apparently does nothing the way it is described.

For setting up LDAP only, one must disable Password login option in the admin panel
2022-10-11 14:12:19 +01:00
dependabot[bot] d1dfffb4b2 Bump VeryGoodOpenSource/very_good_coverage from 1.2.1 to 2.0.0
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/VeryGoodOpenSource/very_good_coverage) from 1.2.1 to 2.0.0.
- [Release notes](https://github.com/VeryGoodOpenSource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/VeryGoodOpenSource/very_good_coverage/compare/v1.2.1...v2.0.0)

---
updated-dependencies:
- dependency-name: VeryGoodOpenSource/very_good_coverage
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-10 20:32:20 +00:00
Lauri Ojansivu 9f1c60dfc7 v6.53 2022-10-06 14:56:14 +03:00
Lauri Ojansivu e5e2ba7340 Updated translations. 2022-10-06 14:44:30 +03:00
Lauri Ojansivu 12ebac7307 Updated ChangeLog. 2022-10-06 14:34:36 +03:00
Lauri Ojansivu 625a9f16f5 Refine subpath deployment support. Part 2.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4712
2022-10-06 14:31:54 +03:00
Lauri Ojansivu 38e8c3b0c6 Merge pull request #4712 from schnell18/feat/subpath
Refine subpath deployment support
2022-10-06 14:08:55 +03:00
Justin Zhang 53e67ff57a Supress displaying subtask boards to avoid clutter 2022-10-06 15:12:27 +08:00
Justin Zhang ef64b0a654 Fix avatar upload error
- Set server-side avatar size limit to 72000
2022-10-06 15:12:12 +08:00
Justin Zhang bfb0c05e83 Support subpath deployment
- Make css font reference relative
- Fix cover image loading error
2022-10-06 15:04:34 +08:00
Lauri Ojansivu b20408cde0 Merge branch 'master' of github.com:wekan/wekan 2022-10-04 13:01:15 +03:00
Lauri Ojansivu 68422b5a15 Updated ChangeLog. 2022-10-04 13:00:01 +03:00
Lauri Ojansivu aeac6e605b Try to fix Mermaid Diagram error: Maximum call stack size exceeded.
Thanks to xet7 !
2022-10-04 12:58:22 +03:00
Lauri Ojansivu ce5b21c156 Merge pull request #4711 from wekan/dependabot/github_actions/helm/chart-releaser-action-1.4.1
Bump helm/chart-releaser-action from 1.4.0 to 1.4.1
2022-10-04 07:36:30 +03:00
dependabot[bot] 1155cb8d68 Bump helm/chart-releaser-action from 1.4.0 to 1.4.1
Bumps [helm/chart-releaser-action](https://github.com/helm/chart-releaser-action) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/helm/chart-releaser-action/releases)
- [Commits](https://github.com/helm/chart-releaser-action/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: helm/chart-releaser-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 20:28:35 +00:00
Lauri Ojansivu 2d15489618 Updated ChangeLog. 2022-10-03 03:09:16 +03:00
Lauri Ojansivu fc28b6cbe2 Updated README.md about Docker: You can use latest tag to get newest release tag.
Thanks to gohrner and xet7 !

Fixes #3874
2022-10-03 03:05:57 +03:00
Lauri Ojansivu 7c0251cef5 Updated ChangeLog. 2022-10-02 21:50:37 +03:00
Lauri Ojansivu f6dfd2ab67 Updated release scripts. 2022-10-02 21:44:46 +03:00
Lauri Ojansivu 923e48d64c Updated release scripts. 2022-10-02 21:07:38 +03:00
Lauri Ojansivu b98888e128 Updated s390x release script. 2022-10-02 20:29:12 +03:00
Lauri Ojansivu 62e16d33fb v6.52 2022-10-02 19:39:06 +03:00
Lauri Ojansivu ffdb82d3c8 Updated translations. 2022-10-02 18:54:41 +03:00
Lauri Ojansivu 8edda06dca Updated ChangeLog. 2022-10-02 18:48:52 +03:00
Lauri Ojansivu b70a6cb348 Added faster way to do actions on minicard menu.
Thanks to mohammadZahedian, HT-Marley and xet7 !

Fixes #4303
2022-10-02 18:45:55 +03:00
Lauri Ojansivu 37cecfe27d Updated ChangeLog. 2022-10-01 01:00:06 +03:00
Lauri Ojansivu 7af0d85687 Node to 14.20.1 on Snap. 2022-10-01 00:57:46 +03:00
Lauri Ojansivu f8c3f66ee5 Updated ChangeLog. 2022-10-01 00:45:43 +03:00
Lauri Ojansivu 7c6b557186 Snap Candidate MongoDb upgrade. 2022-10-01 00:42:50 +03:00
Lauri Ojansivu a0d9103d3c 6.51 2022-09-29 00:22:51 +03:00
Lauri Ojansivu 41b97102ad v6.51 2022-09-29 00:19:09 +03:00
Lauri Ojansivu 96d0c9d5eb Updated ChangeLog. 2022-09-26 21:56:27 +03:00
Lauri Ojansivu ccf4f59430 Updated to Node.js v14.20.1. Thanks to Node.js developers. 2022-09-26 21:52:14 +03:00
Lauri Ojansivu d191e0b6d3 Fix typo. 2022-09-23 12:00:31 +03:00
Lauri Ojansivu 2ca76fbf0d v6.50 2022-09-23 11:30:37 +03:00
Lauri Ojansivu 6fc55433ef Updated ChangeLog. 2022-09-22 21:56:32 +03:00
Lauri Ojansivu 21e6e4cb1a Fix bootstrap and datepicker3 css map missing.
Thanks to xet7 !
2022-09-22 21:54:34 +03:00
Lauri Ojansivu 3be639dac2 Updated ChangeLog. 2022-09-22 21:36:12 +03:00
Lauri Ojansivu a30276e3d8 Show translations debug messages only when DEBUG=true.
Thanks to xet7 !
2022-09-22 21:34:54 +03:00
Lauri Ojansivu e5f5e156a2 Updated ChangeLog. 2022-09-22 21:26:03 +03:00
Lauri Ojansivu 0e5f98fd96 Try to fix again Mermaid Diagram error: Maximum call stack size exceeded.
Thanks to xet7 !

Fixes #4251
2022-09-22 21:24:07 +03:00
Lauri Ojansivu 19d980f9fc Updated ChangeLog. 2022-09-22 17:30:39 +03:00
Lauri Ojansivu 5ce0834529 Updated markdown-it-mermaid and cli-table3.
Thanks to xet7 !
2022-09-22 17:29:07 +03:00
Lauri Ojansivu 97c5e0d6fe Updated ChangeLog. 2022-09-22 15:43:22 +03:00
Lauri Ojansivu 7661f45cfd Updated ChangeLog. 2022-09-22 15:41:59 +03:00
Lauri Ojansivu 34862810df Added METRICS_ALLOWED_IP_ADDRESSES settings to Docker/Snap/Source https://github.com/wekan/wekan/wiki/Metrics .
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4700
2022-09-22 15:39:15 +03:00
Lauri Ojansivu 7f6e12c0a0 Updated ChangeLog. 2022-09-22 14:49:34 +03:00
Lauri Ojansivu 551f57b03b Fix typos and translate comments to English.
Thanks to xet7 !
2022-09-22 14:45:41 +03:00
Lauri Ojansivu e2c241f4a8 Merge branch 'master' of https://github.com/Emile840/wekan 2022-09-22 14:17:15 +03:00
Lauri Ojansivu 6e4f95df57 Updated ChangeLog. 2022-09-22 14:13:58 +03:00
Lauri Ojansivu ad38a41628 Merge branch 'master' of github.com:wekan/wekan 2022-09-22 14:02:03 +03:00
Lauri Ojansivu 84562aa47c Updated ChangeLog. 2022-09-22 14:01:56 +03:00
Lauri Ojansivu e2d5a83d7c Added Romanian translation. Updated translations.
Thanks to translators !
2022-09-22 13:59:43 +03:00
Emile Ndagijimana d2436ba001 Refactoring(metrics KPI): Added some metrics KPI Datas 2022-09-21 15:34:22 +02:00
Emile Ndagijimana d323c1e51e feat(metrics KPI): Added some metrics KPI Datas 2022-09-21 14:33:33 +02:00
Lauri Ojansivu 344fa07316 Merge pull request #4699 from sashashura/patch-32
GitHub Workflows security hardening
2022-09-19 18:06:12 +03:00
Alex 81e847a153 build: harden GitHub Workflow permissions
Signed-off-by: Alex Low <aleksandrosansan@gmail.com>
2022-09-19 17:02:31 +02:00
Alex 834408c740 a new commit message 2022-09-19 17:00:13 +02:00
Lauri Ojansivu 389b07138c Update CONTRIBUTING.md 2022-09-19 11:50:10 +03:00
Lauri Ojansivu 5215ef919b v6.49 2022-09-18 17:26:41 +03:00
Lauri Ojansivu 48020d6ff8 Updated translations. 2022-09-18 17:25:26 +03:00
Lauri Ojansivu d65492b05c Updated ChangeLog. 2022-09-18 17:19:29 +03:00
Lauri Ojansivu d1ad8c23ec Merge pull request #4694 from mfilser/checklist_copy_move_dialog_sometimes_empty
Checklist copy/move dialog was sometimes empty
2022-09-17 20:14:25 +03:00
Martin Filser 610bd66122 Checklist copy/move dialog was sometimes empty
- a Exception was thrown the return value was an object because #each only accepts arrays and cursors

See also:
https://github.com/wekan/wekan/issues/4655#issuecomment-1250106151
2022-09-17 19:11:34 +02:00
Lauri Ojansivu 39975395e1 v6.48 2022-09-17 13:25:22 +03:00
Lauri Ojansivu eb52599e20 Updated translations. 2022-09-17 13:19:56 +03:00
Lauri Ojansivu 682639137e Updated ChangeLog. 2022-09-17 13:16:25 +03:00
Lauri Ojansivu 48b7ce8273 Merge pull request #4692 from mfilser/custom_field_string_templates_regexp_possible
RegExp possible at "Custom Field String Templates"
2022-09-16 22:29:06 +03:00
Martin Filser 18d88035fb CustomFieldStringTemplate regular expressions, .{1,10} also possible 2022-09-16 19:56:27 +02:00
Martin Filser 53bfa967c6 CustomFieldStringTemplate regular expressions now on minicard too 2022-09-16 19:56:27 +02:00
Martin Filser d7f451a7d9 CustomFieldStringTemplate regular expressions of format field now possible
the new syntax is e.g.:

${regex:".(.*).", replace:"$1", flags:"i"}

removes the first and last character and uses case-insensitive search.

See also:
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/RegExp
2022-09-16 19:56:27 +02:00
Lauri Ojansivu 2e996712f8 v6.47 2022-09-16 19:55:21 +03:00
Lauri Ojansivu 13992072f3 Updated translations. 2022-09-16 19:33:33 +03:00
Lauri Ojansivu 659263f97e Updated ChangeLog. 2022-09-16 18:52:39 +03:00
Lauri Ojansivu c5f57e1522 Merge pull request #4691 from helioguardabaxo/master
Added hide/show to show counters and members on All Boards (Admin Panel)
2022-09-16 18:48:17 +03:00
helioguardabaxo 9dff09fbcf Added hide/show to show counters and members on All Boards (Admin Panel) 2022-09-16 11:02:25 -03:00
Lauri Ojansivu c307aa6354 Updated ChangeLog. 2022-09-15 19:46:38 +03:00
Lauri Ojansivu 627d183015 Removed Azeri/Azerbaijani from RTL list.
Thanks to yarons.

Related https://github.com/wekan/php/pull/2
2022-09-15 19:43:48 +03:00
Lauri Ojansivu 5ae1c3de1e Updated translations. 2022-09-15 19:40:03 +03:00
Lauri Ojansivu 3e25c307ce v6.46 2022-09-14 22:44:21 +03:00
Lauri Ojansivu 3bb8b0d601 Updated ChangeLog. 2022-09-14 22:40:17 +03:00
Lauri Ojansivu 080cec07c0 Updated Snap Candidate MongoDB to 5.0.12.
Thanks to MongoDB developers!
2022-09-14 22:38:54 +03:00
Lauri Ojansivu 9c8a631662 Updated translations. 2022-09-14 22:36:39 +03:00
Lauri Ojansivu f875139d7c Updated ChangeLog. 2022-09-14 22:36:18 +03:00
Lauri Ojansivu 94b0d7783c Merge pull request #4686 from helioguardabaxo/master
Added titles to add and edit checklist items
2022-09-14 22:17:04 +03:00
Hélio Guardabaxo 26a52c424c Merge pull request #4 from helioguardabaxo/checklist-accessibility
Added titles to add and edit checklist items
2022-09-14 13:58:04 -03:00
helioguardabaxo 207276e7ec Added titles to add and edit checklist items 2022-09-14 13:54:44 -03:00
Lauri Ojansivu f1fa1580b1 Merge pull request #4685 from helioguardabaxo/minicard-description
Added limit description on minicard to three lines
2022-09-14 18:58:21 +03:00
Hélio Guardabaxo 2754c29772 Merge branch 'wekan:master' into minicard-description 2022-09-14 12:27:02 -03:00
Lauri Ojansivu 5a3fab4f65 v6.45 2022-09-14 16:25:07 +03:00
Lauri Ojansivu 0a3d2c2868 Updated translations. 2022-09-14 16:18:10 +03:00
Lauri Ojansivu 57166b891a Updated ChangeLog. 2022-09-14 16:11:17 +03:00
Lauri Ojansivu a805eb09df Merge pull request #4681 from helioguardabaxo/master
Added help button with custom URL.
2022-09-14 16:08:34 +03:00
Lauri Ojansivu 6cb84673d4 Updated ChangeLog. 2022-09-14 16:06:53 +03:00
Lauri Ojansivu aa2c3774a2 Fixed WeKan api.py . WeKan API now works in newest WeKan and n8n.
Thanks to DimDz and Joffcom.

Fixes #4595
2022-09-14 16:02:50 +03:00
Lauri Ojansivu b485c7304f Updated translations. 2022-09-14 16:01:11 +03:00
helioguardabaxo ab56f51dc0 Added limit description on minicard to three lines. 2022-09-13 11:45:55 -03:00
Hélio Guardabaxo bbc6d0955c Merge branch 'wekan:master' into master 2022-09-13 11:25:26 -03:00
helioguardabaxo d610d03423 Added help button with custom URL. 2022-09-12 21:36:31 -03:00
Lauri Ojansivu 58e1084ba5 Updated ChangeLog. 2022-09-12 19:47:42 +03:00
Lauri Ojansivu cf7c051242 Add info about RTL languages to Meteor WeKan. Not used in Meteor WeKan yet.
Thanks to xet7 !

Related #3376
2022-09-12 19:45:18 +03:00
Lauri Ojansivu a92eafce80 Updated translations. 2022-09-12 18:24:50 +03:00
Lauri Ojansivu b62bce388c Updated translations. 2022-09-12 18:22:47 +03:00
Lauri Ojansivu e309b53ded Updated translations. 2022-09-12 04:46:37 +03:00
Lauri Ojansivu 1813400ecf Updated translations. 2022-09-12 04:27:55 +03:00
Lauri Ojansivu 5d09fca481 Updated translations. 2022-09-12 04:21:12 +03:00
Lauri Ojansivu c99a86cdb0 Added translation Password (again).
Thanks to xet7 !
2022-09-12 03:58:03 +03:00
Lauri Ojansivu 072d239a85 Updated ChangeLog. 2022-09-12 03:03:38 +03:00
Lauri Ojansivu 9e44ccaf5d Merge pull request #4680 from helioguardabaxo/master
Heading hierarchy fixed on checklist title to simplify screen reader.
2022-09-12 02:58:00 +03:00
helioguardabaxo 86d86b30e9 Heading hierarchy fixed to simplify screen reader. 2022-09-11 20:53:30 -03:00
Lauri Ojansivu b2edacbd12 Merge pull request #4677 from helioguardabaxo/master
Add ARIA in checklist items
2022-09-08 22:27:03 +03:00
helioguardabaxo a6ec394730 Add ARIA in checklist items 2022-09-08 16:17:07 -03:00
Lauri Ojansivu 4ae0d49431 Merge pull request #4675 from bronger/master
Avoid non-terminating containers
2022-09-06 13:37:19 +03:00
Torsten Bronger eaea1936a0 Avoid non-terminating containers
The process 1 in the container does not shut down gracefully after having
received a TERM signal.  Therefore, we send a SIGKILL immediately.  This is a
kludge as long as node/meteor has no proper SIGTERM handler enabled.  See
<https://github.com/wekan/wekan/issues/4668>.
2022-09-06 12:30:32 +02:00
Lauri Ojansivu 315597dcff Updated ChangeLog. 2022-09-05 15:10:49 +03:00
Lauri Ojansivu 51ed0acc4f Add starting wekan test to arm64/s390x/ppc64el release scripts.
Thanks to xet7 !
2022-09-05 15:08:03 +03:00
Lauri Ojansivu a06e971a53 v6.44 2022-09-05 14:54:10 +03:00
Lauri Ojansivu 33f39d047f Updated translations. 2022-09-05 14:43:41 +03:00
Lauri Ojansivu 98de6ae0db Updated ChangeLog. 2022-09-05 13:36:53 +03:00
Lauri Ojansivu 6b4613d3ed Fix 2) Due date is not created nor changed, when cards are moved in the calendar view.
Thanks to DimDz !

Related #2917
2022-09-05 13:35:14 +03:00
Lauri Ojansivu eace04db8e Updated ChangeLog. 2022-09-04 11:38:41 +03:00
Lauri Ojansivu 3772ce3aca Fix building Dockerfile on Mac M1 etc.
Thanks to willman42 and xet7 !

Fixes #4666
2022-09-04 11:33:57 +03:00
Lauri Ojansivu 663e2823fa Updated ChangeLog. 2022-09-04 10:27:44 +03:00
Lauri Ojansivu 77927a1ca4 Removed old stuff from Dockerfile.
Thanks to xet7 !
2022-09-04 10:26:23 +03:00
Lauri Ojansivu 6bf1fcbbc7 Updated ChangeLog. 2022-09-04 09:13:48 +03:00
Lauri Ojansivu 0f6d84d69f Updated matb33:collection-hooks.
Thanks to developers of dependencies !
2022-09-04 09:12:14 +03:00
Lauri Ojansivu 9d6cb7fbdb Updated translations. 2022-09-04 09:04:56 +03:00
Lauri Ojansivu 29572de2e7 Updated ChangeLog. 2022-09-04 08:40:08 +03:00
Lauri Ojansivu 3a0269640b Added missing currentUser.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4672
2022-09-04 08:32:05 +03:00
Lauri Ojansivu 9a15750e7c Merge pull request #4672 from helioguardabaxo/master
Added tab view to board members (people, orgs and teams)
2022-09-04 08:02:40 +03:00
helioguardabaxo ebfabba284 Added tab view to board members (people, orgs and teams) 2022-09-03 19:36:53 -03:00
Lauri Ojansivu 05c34cefde v6.43 2022-09-01 12:24:17 +03:00
Lauri Ojansivu 4097301e60 Updated translations. 2022-09-01 12:17:45 +03:00
Lauri Ojansivu 04827fd8f0 Updated ChangeLog. 2022-09-01 12:14:15 +03:00
Lauri Ojansivu 1e4fba3ec8 Added back autologin, because reverting it broke Google OIDC login.
Thanks to xet7 !
2022-09-01 12:12:30 +03:00
Lauri Ojansivu ba1d04b99f Updated ChangeLog. 2022-09-01 12:05:19 +03:00
Lauri Ojansivu ed72ef0e5e Merge pull request #4667 from willman42/willman42-revert-pr-4663
Willman42 revert pr 4663
2022-09-01 12:01:34 +03:00
William Trelawny 2287758fdc Update docker-compose.yml
revert change made in ca35970f3f
2022-08-31 20:59:25 -04:00
William Trelawny c6fa37640a Update Dockerfile
revert changes made in f26f86dd3f
2022-08-31 20:55:20 -04:00
Lauri Ojansivu 4907bf5030 6.42 2022-08-31 22:22:54 +03:00
Lauri Ojansivu 85edae924e v6.42 2022-08-31 22:15:51 +03:00
Lauri Ojansivu e6561462e9 Updated ChangeLog. 2022-08-31 22:02:35 +03:00
Lauri Ojansivu 0d3b7ca041 Try to fix EasySearch. Part 3.
Thanks to danielkaiser and xet7 !
2022-08-31 22:00:09 +03:00
Lauri Ojansivu 8fc23429a0 Updated ChangeLog. 2022-08-31 04:13:27 +03:00
Lauri Ojansivu bfffe58672 Merge pull request #4663 from willman42/master
Remove hard-coded port 8080 binding in Dockerfile
2022-08-31 04:09:37 +03:00
William Trelawny ca35970f3f Update docker-compose.yml
Added default `PORT=8080` environment variable setting as well as user guidance
2022-08-30 20:24:36 -04:00
William Trelawny f26f86dd3f Update Dockerfile
Removed hardcoding port 8080 in image, allowing more flexibility for complex docker deployments.
2022-08-30 20:03:28 -04:00
Lauri Ojansivu 63d000fbbb Updated ChangeLog. 2022-08-31 00:09:41 +03:00
Lauri Ojansivu 17f97f6acc Added translations: English (Malaysia) (en_MY), Japanese (Hiragana) (ja-Hira), Malay (ms).
Thanks to dimanLubis !
2022-08-31 00:07:07 +03:00
Lauri Ojansivu 33657a9ed1 Updated ChangeLog. 2022-08-30 23:15:23 +03:00
Lauri Ojansivu 43a7096753 Revert autologin, because it broke OIDC login with Keycloak.
Thanks to wb9688 and xet7 !

Fixes #4660,
related https://github.com/wekan/wekan/pull/4588
2022-08-30 23:12:23 +03:00
Lauri Ojansivu fbe1f5f948 Updated ChangeLog. 2022-08-30 22:44:29 +03:00
Lauri Ojansivu a21883e3a1 Try 2 to fix EasySearch.
Thanks to xet7 !
2022-08-30 22:43:09 +03:00
Lauri Ojansivu af2da93423 Updated ChangeLog. 2022-08-30 22:40:08 +03:00
Lauri Ojansivu 14f832f955 Merge pull request #4662 from mfilser/master
00checkStartup, userInfo was missing
2022-08-30 22:29:49 +03:00
Lauri Ojansivu 6ec81ccbc1 Updated ChangeLog. 2022-08-30 22:26:29 +03:00
Lauri Ojansivu d470a74a9f Comment out CentOS 7 specific settings.
Thanks to williamtrelawny and xet7 !

Related https://github.com/wekan/wekan/commit/054d420dc97cadee6ed7896c608d95a6fe09dc9d
2022-08-30 22:24:09 +03:00
Martin Filser cee1dd94ee 00checkStartup, userInfo was missing
fixes: https://github.com/wekan/wekan/issues/4566#issuecomment-1231906040
2022-08-30 19:18:30 +02:00
Lauri Ojansivu c587d34158 Updated ChangeLog. 2022-08-28 20:36:25 +03:00
Lauri Ojansivu 68e4e6f049 Fix check for current user at card details.
Thanks to xet7 !
2022-08-28 20:34:45 +03:00
Lauri Ojansivu 5c81cfbd7b v6.41 2022-08-28 19:35:22 +03:00
Lauri Ojansivu edc610d019 Updated ChangeLog. 2022-08-28 12:28:10 -04:00
Lauri Ojansivu 5ca84d2930 Try to fix EasySearch syntax.
Thanks to xet7 !
2022-08-28 12:26:22 -04:00
Lauri Ojansivu 6f864c5022 v6.40 2022-08-25 21:42:15 +03:00
Lauri Ojansivu 3c3adef26a Updated translations. 2022-08-25 21:36:01 +03:00
Lauri Ojansivu f533aa8d8e Updated ChangeLog. 2022-08-25 21:34:48 +03:00
Lauri Ojansivu c1d449d3bd Merge pull request #4657 from mfilser/move_copy_card_didnt_set_the_last_selected_board_right
Move/Copy Card dialog didn't set the last selected board right
2022-08-25 21:12:29 +03:00
Martin Filser 2c2f906c8b Move/Copy Card dialog didn't set the last selected board right
- fixes: #4655
2022-08-24 22:46:50 +02:00
Lauri Ojansivu 9e0d7ee00f Updated translations. 2022-08-22 20:23:21 +03:00
Lauri Ojansivu 11e467618d v6.39 2022-08-21 20:16:03 +03:00
Lauri Ojansivu f315721fef Updated ChangeLog. 2022-08-21 19:33:25 +03:00
Lauri Ojansivu 8eb4ffea89 Merge pull request #4650 from mfilser/attachment_using_new_feature_of_meteor-files-2.3.0
Attachment using new feature of Meteor Files 2.3.0
2022-08-21 19:09:52 +03:00
Lauri Ojansivu f20ca31a3f Merge pull request #4649 from repmovs/master
set miniscreen to 250px
2022-08-21 19:09:28 +03:00
Martin Filser f4e11ff7c5 Avatars, use same namingFunction as Attachments 2022-08-21 11:10:27 +02:00
Martin Filser f6fbd0a5c2 Attachment, rename not needed anymore since Meteor-Files 2.3.0
Thanks to @dr-dimitru
https://github.com/wekan/wekan/pull/4638#issuecomment-1217883870

https://github.com/veliovgroup/Meteor-Files/commit/00ab6f723b84eb596b366c5d26e6981a00377809
2022-08-21 11:10:27 +02:00
Martin Filser 25443926d3 Attachment, path was wrong if the file hasn't a extension 2022-08-21 11:10:27 +02:00
Repmovs 03a75c9c05 set miniscreen to 250px 2022-08-20 17:08:50 +00:00
Lauri Ojansivu 6a20f6dc70 Updated translations. 2022-08-20 16:50:55 +03:00
Lauri Ojansivu 3d2fbf1397 Updated ChangeLog. 2022-08-20 16:50:25 +03:00
Lauri Ojansivu d0f1382055 Upgraded Snap candidate MongoDB versions.
Thanks to MongoDB developers !
2022-08-20 16:48:43 +03:00
Lauri Ojansivu 0de353508a Updated ChangeLog. 2022-08-20 16:45:49 +03:00
Lauri Ojansivu c291b9ebb8 Merge pull request #4648 from NotTheEvilOne/pr/support-upload-avatar-validation
Add support to validate avatar uploads by type, size and external program
2022-08-20 16:43:46 +03:00
Tobias Wolf 24566ce853 Reset avatar if removed 2022-08-20 09:01:18 +02:00
Tobias Wolf c64a221453 Add support to validate uploaded avatars 2022-08-20 08:46:41 +02:00
Tobias Wolf 469d81f8a5 Separate uploaded file validation logic from the model "Attachments" 2022-08-19 14:30:22 +02:00
Lauri Ojansivu 503f6128bd v6.38 2022-08-18 20:25:58 +03:00
Lauri Ojansivu e1398d04da Updated ChangeLog. 2022-08-18 20:14:31 +03:00
Lauri Ojansivu 79add98aa7 Updated parse-ms.
Thanks to developers of dependencies !
2022-08-18 20:13:01 +03:00
Lauri Ojansivu 7a6098774d Updated ChangeLog. 2022-08-18 19:45:00 +03:00
Lauri Ojansivu ce1f8b674d Updated to ostrio:files 2.3.0 and standard-minifier-js 2.8.1.
Thanks to developers of dependencies !
2022-08-18 19:42:50 +03:00
Lauri Ojansivu 11e666f229 Updated ChangeLog. 2022-08-18 19:37:53 +03:00
Lauri Ojansivu c131b983b3 Updated translations. 2022-08-18 19:30:30 +03:00
Lauri Ojansivu a9334b3bf4 Merge pull request #4647 from mfilser/copy_and_move_card_checklists_same_code
Copy / move card and checklists using same code
2022-08-18 18:52:00 +03:00
Martin Filser c437c0d3f1 get all cards sometimes failed because the list was undefined 2022-08-18 17:45:56 +02:00
Martin Filser 97109df673 copy/move checklist uses now the same code as copy/move card 2022-08-18 17:45:56 +02:00
Martin Filser d4338dd5cc Moving DialogWithBoardSwimlaneList class to it's own file 2022-08-18 17:45:56 +02:00
Martin Filser 15ce816ec6 Convert checklist-item to card uses now the same code as copy card / move card 2022-08-18 17:45:55 +02:00
Lauri Ojansivu 3e921da314 Merge pull request #4646 from mfilser/copy_card-attachments
"Copy card" copies now attachments too
2022-08-18 18:44:40 +03:00
Martin Filser dc210dc53b Copy checklists to many cards copies the whole card now (+attachments)
- renamed copyChecklistToManyCards changed to copyManyCards because the whole card is copied
2022-08-18 17:31:41 +02:00
Martin Filser 43135ffc8d Copy many cards now also copies attachments 2022-08-18 17:31:41 +02:00
Martin Filser 1516615934 Copy attachment copies now all versions
- for now only the version "original" exists, but as other method already
  consider that other version's can exist
2022-08-18 17:31:41 +02:00
Martin Filser e37bf2b51d Copy card at card details copies now attachments 2022-08-18 17:31:41 +02:00
Lauri Ojansivu 0553e36bfb Merge pull request #4643 from mfilser/move_copy_card_dialog_remember_last_selected_board
Move and copy card dialog remember last selected board
2022-08-18 14:50:20 +03:00
Martin Filser 03deeb6729 Copy many card dialog remembers now the last selected board 2022-08-16 23:26:37 +02:00
Martin Filser a06d1806df Copy card dialog remembers now the last selected board 2022-08-16 23:26:32 +02:00
Martin Filser 0a4e472601 Move card dialog remembers now the last selected board 2022-08-16 23:24:10 +02:00
Lauri Ojansivu f320069ec8 Merge pull request #4641 from mfilser/attachment_upload_progress_bar
Attachment upload progress bar + multiple files upload
2022-08-17 00:01:16 +03:00
Martin Filser 20c2679dc8 Attachment size, changed calculation to npm filesize (Version Info) 2022-08-16 22:35:19 +02:00
Martin Filser 464bc2f87b Attachment size, changed calculation to npm filesize (Attachment Move) 2022-08-16 22:35:18 +02:00
Martin Filser 3aba91885f Attachment size, changed calculation to npm filesize (Admin Reports) 2022-08-16 22:35:18 +02:00
Martin Filser 110a83a736 Attachment size, changed calculation to npm filesize (Card Details) 2022-08-16 22:35:18 +02:00
Martin Filser af120f2e0b Attachment uploads show's all uploading files 2022-08-16 22:35:18 +02:00
Martin Filser ea937810f2 Attachment, simple upload progress bar 2022-08-16 22:35:18 +02:00
Martin Filser a6b4a698af Attachment, upload all selected files
- until now only the first attachment was uploaded
2022-08-16 22:35:18 +02:00
Lauri Ojansivu 778084e934 Updated ChangeLog. 2022-08-16 22:29:22 +03:00
Lauri Ojansivu c23f5dc858 Fix Validate attachment error at PR Meteor files 2.2.1 fixes + attachment view.
Thanks to xet7 !

Fixes #4640
2022-08-16 22:27:22 +03:00
Lauri Ojansivu 2cd8cfc9b9 Updated ChangeLog. 2022-08-16 22:05:22 +03:00
Lauri Ojansivu 2bb1feee51 Updated dependencies. 2022-08-16 22:02:56 +03:00
Lauri Ojansivu 0e6a1a171e Merge pull request #4638 from mfilser/meteor_files_2.2.1
Meteor files 2.2.1 fixes + attachment view
2022-08-16 21:33:55 +03:00
Martin Filser f833d1288f fixed wrong @import reset.css 2022-08-16 19:42:12 +02:00
Martin Filser cfccee897e Fix "Attachments view (gallery) was missing" 2022-08-16 19:38:07 +02:00
Martin Filser ea5025595a Server side code don't need a Meteor.call 2022-08-16 18:34:27 +02:00
Martin Filser 344aeb4051 Meteor-Files 2.2.1 changed the function "namingFunction"
See also:
https://github.com/veliovgroup/Meteor-Files/commit/f872569be282e3abfd1d812ab72cdd1b446273fa
2022-08-16 18:34:26 +02:00
Martin Filser db8e707049 Attachment filename was truncated to 28 characters since Meteor-Files 2.1.0. Fixed this
See also:
https://github.com/veliovgroup/Meteor-Files/commit/e3a347c432b1296c2f6ee9ce48d356b631d2ce14#diff-4d4d0cea7e443590b59dddca4fc34faa6f37fbfd94a251d8d0047b8aa8ca19eeR4-R6
2022-08-16 18:34:26 +02:00
Lauri Ojansivu f6f5c7ccf0 Updated ChangeLog. 2022-08-16 14:41:05 +03:00
Lauri Ojansivu 43f380c17a Merge pull request #4637 from NotTheEvilOne/pr/support-upload-anti-virus-verification
Add support to validate attachment uploads by an external program
2022-08-16 14:35:28 +03:00
Tobias Wolf e6b705be26 Remove leftover unused arguments parsing for external execution 2022-08-16 12:01:25 +02:00
Tobias Wolf b5d311c00c Add support to validate attachment uploads by an external program 2022-08-15 21:09:46 +02:00
Lauri Ojansivu 91b1713bf7 v6.37 2022-08-15 15:41:33 +03:00
Lauri Ojansivu 9274501939 Updated ChangeLog. 2022-08-15 15:26:41 +03:00
Lauri Ojansivu 7c619859fc Updated dependencies like ostrio:files etc.
Thanks to developers of dependencies and xet7 !

Related https://github.com/veliovgroup/Meteor-Files/issues/847
2022-08-15 15:24:16 +03:00
Lauri Ojansivu c091fa5993 Updated ChangeLog. 2022-08-15 14:29:14 +03:00
Lauri Ojansivu f9934eeec9 Merge pull request #4635 from repmovs/miniscreen-issues
fixing issue #4634
2022-08-15 14:25:08 +03:00
Repmovs 98b7953d7f fixing issue #4634 2022-08-15 11:20:09 +00:00
Lauri Ojansivu feb6fb72f4 6.36 2022-08-14 15:31:46 +03:00
Lauri Ojansivu c63c84e2ea v6.36 2022-08-14 15:29:21 +03:00
Lauri Ojansivu b334a4ee00 Updated ChangeLog. 2022-08-14 14:43:57 +03:00
Lauri Ojansivu 8566f32bbd Revert Fix URLs to favicons etc for sub-urls, because it broke favicons on subdomain URLs.
Thanks to dsvk and xet7 !

Related #2094
2022-08-14 14:29:40 +03:00
Lauri Ojansivu af4bcb47e7 Updated ChangeLog. 2022-08-14 14:14:33 +03:00
Lauri Ojansivu 8560b36a5a Revert Fix Open card links in current tab. So now links open in new tab.
Thanks to dvsk, mfilser and xet7 !

Fixes https://github.com/wekan/wekan/discussions/3534
2022-08-14 14:10:44 +03:00
Lauri Ojansivu 6fbd817e83 v6.35 2022-08-13 14:18:05 +03:00
Lauri Ojansivu a86ea22303 Updated ChangeLog. 2022-08-13 13:59:07 +03:00
Lauri Ojansivu 54e6e32ab2 Fix Users can delete Boards from global archive (w/o permission).
Thanks to Meeques and xet7 !

Fixes #4631
2022-08-13 13:55:40 +03:00
Lauri Ojansivu dbcc8539bc Updated translations. 2022-08-13 13:38:20 +03:00
Lauri Ojansivu 65dee38150 Updated ChangeLog. 2022-08-13 12:59:13 +03:00
Lauri Ojansivu ee3c5cbb6a Fix Open card links in current tab. Not in new tab anymore.
Thanks to bronger, ManZosh and xet7 !

Fixes https://github.com/wekan/wekan/discussions/3534
2022-08-13 12:54:37 +03:00
Lauri Ojansivu f480f945c5 Updated ChangeLog. 2022-08-13 12:43:23 +03:00
Lauri Ojansivu 9824b90e69 Merge pull request #4630 from wekan/dependabot/github_actions/docker/build-push-action-3.1.1
Bump docker/build-push-action from 3.1.0 to 3.1.1
2022-08-13 12:12:59 +03:00
Lauri Ojansivu e6c3995713 Updated ChangeLog. 2022-08-12 22:20:27 +03:00
Repmovs d7bb0b4cc0 Set drag handle on touch screen not miniscreen 2022-08-12 17:21:45 +00:00
dependabot[bot] 3762768ed3 Bump docker/build-push-action from 3.1.0 to 3.1.1
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/1cb9d22b932e4832bb29793b7777ec860fc1cde0...c84f38281176d4c9cdb1626ffafcd6b3911b5d94)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-08 20:25:06 +00:00
Lauri Ojansivu 61d2fd0308 Updated ChangeLog. 2022-08-05 15:29:15 -04:00
Lauri Ojansivu 458b372b1b Merge pull request #4625 from mfilser/master
_getTopStack(), comment type error
2022-08-05 22:13:40 +03:00
Martin Filser 6eb1495c3b _getTopStack(), comment type error 2022-08-05 20:53:12 +02:00
Lauri Ojansivu e9a251d6a8 Merge pull request #4624 from mfilser/master
Fix Typo in CHANGELOG
2022-08-05 21:49:49 +03:00
Martin Filser b712380661 Fix Typo in CHANGELOG 2022-08-05 20:41:41 +02:00
Lauri Ojansivu abf76b92d4 v6.34 2022-08-05 17:47:21 +03:00
Lauri Ojansivu 43360c103b Updated dependencies.
Thanks to developers of dependencies !
2022-08-05 17:41:44 +03:00
Lauri Ojansivu ec4564d994 Updated ChangeLog. 2022-08-05 17:32:39 +03:00
Lauri Ojansivu 49a023733a Merge pull request #4623 from danielkaiser/master
Fix and update easysearch
2022-08-05 17:25:05 +03:00
Daniel Kaiser 339e044a30 Fix and update easysearch 2022-08-05 13:06:02 +02:00
Lauri Ojansivu 01c938d6b2 v6.33 2022-08-05 02:10:50 +03:00
Lauri Ojansivu cb42fa37b1 Updated ChangeLog. 2022-08-05 01:58:55 +03:00
Lauri Ojansivu 37f9de8b9b Try 2 to fix missing variable in WeKan fails to get MongoDB server version.
Thanks to simon816 and xet7 !

Fixes #4596
2022-08-05 01:54:08 +03:00
Lauri Ojansivu 08e18200c6 v6.32 2022-08-05 00:49:50 +03:00
Lauri Ojansivu 3ddb97c8c9 Updated ChangeLog. 2022-08-04 02:40:16 +03:00
Lauri Ojansivu 4941fd183c Try to fix missing variable in WeKan fails to get MongoDB server version.
Thanks to simon816 and xet7 !

Fixes #4596
2022-08-04 02:37:34 +03:00
Lauri Ojansivu 2be017cf4a Updated ChangeLog. 2022-08-04 02:19:47 +03:00
Lauri Ojansivu 1b30485e68 Added dependencies for attachments file size and type.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4618
2022-08-04 02:17:45 +03:00
Lauri Ojansivu 0c224a0a7f Added attachments file type and size snap settings and help text.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4618
2022-08-04 02:12:49 +03:00
Lauri Ojansivu d7292690bd Merge branch 'pr/support-upload-validation' of https://github.com/NotTheEvilOne/wekan 2022-08-04 00:33:15 +03:00
Lauri Ojansivu 1467f3de31 Updated ChangeLog. 2022-08-04 00:31:00 +03:00
Lauri Ojansivu 063ad08e9e Fix In Lists view, Card Details pop-up does not appear in 6.31 release.
Thanks to Sdub76, niels, m4teh, r4nc0r, mfilser, medjedovicm and xet7 !

Fixes #4616
2022-08-04 00:26:42 +03:00
Tobias Wolf ed3223fedc Add support to validate attachment uploads by type and size 2022-08-03 13:06:23 +02:00
Lauri Ojansivu a551f2bcc7 Updated translations. 2022-08-02 00:18:26 +03:00
Lauri Ojansivu 0efc9aca15 Updated ChangeLog. 2022-08-02 00:06:33 +03:00
Lauri Ojansivu 73ea39466b Updated build scripts.
Thanks to xet7 !
2022-08-02 00:05:36 +03:00
Lauri Ojansivu ec2b008552 Updated ChangeLog. 2022-08-01 23:45:00 +03:00
Lauri Ojansivu 86d6d2d19a Update release scripts.
Thanks to xet7 !
2022-08-01 23:43:14 +03:00
Lauri Ojansivu 26f8df2995 Updated translations. 2022-07-31 23:04:52 +03:00
Lauri Ojansivu b0758449bc Updated ChangeLog. 2022-07-31 04:38:25 +03:00
Lauri Ojansivu b433fbdda8 Try to fix Snap. 2022-07-31 04:37:07 +03:00
Lauri Ojansivu 2e1ca73379 Updated ChangeLog. 2022-07-31 04:30:28 +03:00
Lauri Ojansivu 14e5d08a19 Updated release build scripts to reinstall bcrypt, upload Windows version etc.
Thanks to xet7 !
2022-07-31 04:27:53 +03:00
Lauri Ojansivu aeb29a4f95 v6.31 2022-07-31 02:19:02 +03:00
Lauri Ojansivu 27198c4064 Snap Candidate to MongoDB 5.0.10 etc.
Thanks to xet7 !
2022-07-31 02:12:23 +03:00
Lauri Ojansivu bba1f9e133 Merge pull request #4611 from wekan/dependabot/npm_and_yarn/moment-2.29.4
Bump moment from 2.29.3 to 2.29.4
2022-07-30 17:34:27 +03:00
dependabot[bot] fd6f2132af Bump moment from 2.29.3 to 2.29.4
Bumps [moment](https://github.com/moment/moment) from 2.29.3 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.3...2.29.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-30 14:33:28 +00:00
Lauri Ojansivu a24c47901f Updated ChangeLog. 2022-07-30 10:32:52 -04:00
Lauri Ojansivu d37adbb046 Fix Login Page Error, Lists can't move anymore, reverted incomplete Change Lists Width.
Thanks to johnnytolengo, gda140 and xet7 !

Fixes #4592,
related #4558
2022-07-30 10:29:19 -04:00
Lauri Ojansivu 0f0fab28b0 Updated ChangeLog. 2022-07-29 13:19:22 -04:00
Lauri Ojansivu 69c3bdf553 Updated ChangeLog. 2022-07-29 13:17:29 -04:00
Lauri Ojansivu 6594795f39 Reverted incomplete fix about bug where opening card scrolls to wrong place.
Thanks to danceb, DimDz, mfilser, Emile840, derbolle, xplodwild and xet7 !

Fixes #4572
2022-07-29 13:10:51 -04:00
Lauri Ojansivu 36ae118afc Updated translations. 2022-07-29 13:07:27 -04:00
Lauri Ojansivu b062eb8af4 Merge pull request #4610 from Emile840/master
Fix the bug that displayed a card popup to all swimlanes for public board (when a user is not logged)
2022-07-29 19:41:52 +03:00
Emile840 404fbacc41 Fix the bug that displayed a card popup to all swimlanes for public board (when a user is not logged) 2022-07-28 19:15:15 +02:00
Lauri Ojansivu 986b8e0463 Updated translations. 2022-07-28 17:37:35 +03:00
Lauri Ojansivu 6289dcf4c2 Updated ChangeLog. 2022-07-28 17:32:54 +03:00
Lauri Ojansivu 5b883f4ea6 Merge pull request #4598 from Viehlieb/feature/save_description_on_card_exit
Feature/save description on card exit
2022-07-28 17:11:35 +03:00
Lauri Ojansivu 58da4e4004 Merge pull request #4604 from wekan/dependabot/github_actions/docker/build-push-action-3.1.0
Bump docker/build-push-action from 3.0.0 to 3.1.0
2022-07-28 17:09:08 +03:00
Lauri Ojansivu c2dc80c452 Merge pull request #4599 from wekan/dependabot/npm_and_yarn/jquery-ui-1.13.2
Bump jquery-ui from 1.13.1 to 1.13.2
2022-07-28 17:08:57 +03:00
Lauri Ojansivu 1b95f9f167 Fix URLs to favicons etc.
Thanks to letmp, Meeques and xet7 !

Fixes #2094
2022-07-28 05:34:00 -04:00
dependabot[bot] 72c44e703f Bump docker/build-push-action from 3.0.0 to 3.1.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/e551b19e49efd4e98792db7592c17c09b89db8d8...1cb9d22b932e4832bb29793b7777ec860fc1cde0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 20:54:30 +00:00
Lauri Ojansivu 8e17177331 Updated translations. 2022-07-24 15:04:37 -04:00
dependabot[bot] e825480b57 Bump jquery-ui from 1.13.1 to 1.13.2
Bumps [jquery-ui](https://github.com/jquery/jquery-ui) from 1.13.1 to 1.13.2.
- [Release notes](https://github.com/jquery/jquery-ui/releases)
- [Commits](https://github.com/jquery/jquery-ui/compare/1.13.1...1.13.2)

---
updated-dependencies:
- dependency-name: jquery-ui
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-18 17:22:11 +00:00
viehlieb b2a555f996 revert changeson rebuild-wekan.sh 2022-07-18 15:56:04 +02:00
viehlieb b2fd576f36 added space before text 2022-07-18 15:54:49 +02:00
viehlieb 1c4b54d1ad revert tiny change on input event keydown <-> keyup 2022-07-18 15:11:19 +02:00
viehlieb b36920e657 merge with master 2022-07-18 15:09:18 +02:00
viehlieb b3056626f3 add option to get asked whether unsaved card descriptions should be saved to db on e.g. unintentional click out of card details pane 2022-07-18 15:05:22 +02:00
Lauri Ojansivu 760dde2c10 Updated translations. 2022-07-16 08:26:37 +03:00
Lauri Ojansivu e7a2e8302c Updated ChangeLog. 2022-07-13 23:14:10 +03:00
Lauri Ojansivu e81900178e Added LaTex support to all input fields with markdown-it-mathjax3.
Examples: https://github.com/wekan/wekan/wiki/LaTeX

Thanks to DoktorScience !

Fixes #4589
2022-07-13 23:12:16 +03:00
Lauri Ojansivu 648adb414e Updated ChangeLog. 2022-07-11 20:30:49 +03:00
Lauri Ojansivu e3149289db v6.30 2022-07-11 20:07:17 +03:00
Lauri Ojansivu b680cf4938 Updated ChangeLog. 2022-07-11 19:59:29 +03:00
Lauri Ojansivu 69d454dd03 Fix uploading attachments.
Thanks to BabyFnord and xet7 !

Related #4585
2022-07-11 19:54:28 +03:00
Lauri Ojansivu 703c849482 Updated ChangeLog. 2022-07-11 17:47:05 +03:00
Lauri Ojansivu 284f440136 OIDC/OAuth2 autologin settings for Docker/Snap/Source/Bundle platforms.
Thanks to xet7 !
2022-07-11 17:44:58 +03:00
viehlieb b00169d24f wipon card description - prevention of unintentional exit deletesunsaved description 2022-07-11 16:15:40 +02:00
Lauri Ojansivu 267becdb9a Updated ChangeLog. 2022-07-11 17:06:34 +03:00
Lauri Ojansivu 054d420dc9 On CentOS 7 Docker there is seccomp issue with glibc 6, so setting it to unconfined to get WeKan working.
Thanks to m-brangeon !

Related #4585,
related #4587
2022-07-11 17:02:05 +03:00
Lauri Ojansivu 0fbc6efbcf Updated ChangeLog. 2022-07-11 16:47:04 +03:00
Lauri Ojansivu 63f5c88a15 Updated ChangeLog. 2022-07-11 16:20:03 +03:00
Lauri Ojansivu 24598eaf00 Merge pull request #4588 from Viehlieb/feature/direct_login_from_oidc
Feature/direct login from OIDC
2022-07-11 16:10:29 +03:00
viehlieb aa067b777a merge with master 2022-07-11 14:58:27 +02:00
viehlieb 2e9fca93ec remove unneccessary line in layout.js 2022-07-11 14:48:05 +02:00
Lauri Ojansivu c2f5355f9a Updated ChangeLog. 2022-07-11 00:23:58 -04:00
Lauri Ojansivu 9fdf739695 Updated ChangeLog. 2022-07-11 02:21:44 +03:00
Lauri Ojansivu 17f8f8f14f Try to fix Snap.
Thanks to xet7 !
2022-07-11 02:18:48 +03:00
Lauri Ojansivu 9a68c96585 v6.29 2022-07-11 01:20:31 +03:00
Lauri Ojansivu ed2a725a2c Updated dependencies. 2022-07-11 00:52:32 +03:00
Lauri Ojansivu 8914d4404e Updated dependencies. 2022-07-08 23:33:08 +03:00
viehlieb c5dd0b729d get ServiceConfiguration from server 2022-07-08 16:48:06 +02:00
Lauri Ojansivu f4f9c501d1 Updated ChangeLog. 2022-07-08 10:13:24 -04:00
Lauri Ojansivu 239dd1a341 Updated to Node.js v14.20.0. Thanks to Node.js developers. 2022-07-08 10:10:34 -04:00
viehlieb ee254cb9c8 wait for service config load to redirect to oidc provider 2022-07-08 15:09:39 +02:00
viehlieb 05a98fa88b Merge branch 'master' of https://github.com/wekan/wekan into feature/direct_login_from_oidc 2022-07-08 12:01:57 +02:00
viehlieb 5df5c7f5d7 merge master changes 2022-07-08 11:55:32 +02:00
Lauri Ojansivu ccea223ef7 Updated ChangeLog. 2022-07-06 00:34:27 +03:00
Lauri Ojansivu 25f9963645 Merge pull request #4582 from mfilser/move_copy_card_closes_popup_if_done
Move/Copy card closes now the popup if done
2022-07-06 00:33:31 +03:00
Lauri Ojansivu b1c41518df Updated ChangeLog. 2022-07-06 00:32:37 +03:00
Lauri Ojansivu ae09f0f008 Updated dependencies. 2022-07-06 00:31:13 +03:00
Martin Filser 490ad65b6e Move/Copy card closes now the popup if done
- Resolves discussion: #4337
2022-07-05 23:15:52 +02:00
Lauri Ojansivu cb78501b04 Updated ChangeLog. 2022-07-05 23:40:28 +03:00
Lauri Ojansivu 65a031f29d Merge pull request #4581 from mfilser/checkStartup-details_of_wekan_user
00checkStartup, on error give more details on current user which run's wekan
2022-07-05 23:21:22 +03:00
Martin Filser 6c94b57cfc 00checkStartup, on error give more details on current user which run's Wekan 2022-07-05 21:35:59 +02:00
Lauri Ojansivu 7ae15cae27 Updated translations. 2022-07-04 17:54:59 +03:00
Lauri Ojansivu 0596595284 Updated ChangeLog. 2022-07-04 17:47:54 +03:00
Lauri Ojansivu 724d1386f6 Comment out unused CSS.
Thanks to xet7 !
2022-07-04 17:46:36 +03:00
Lauri Ojansivu 920b32735f Updated ChangeLog. 2022-07-04 17:46:20 +03:00
Lauri Ojansivu 86aa7ff353 Merge pull request #4577 from JonasPfeiferb1/master
fixed one Typo in CSS Style Sheet
2022-07-04 17:04:13 +03:00
Jonas Pfeifer 20d87f2299 fixed Typo 2022-07-04 15:24:21 +02:00
Lauri Ojansivu 88f05e8c4e Updated ChangeLog. 2022-06-30 18:45:11 +03:00
Lauri Ojansivu c3bfcb78e9 Updated ostrio:files .
Thanks to developers of dependencies !
2022-06-30 18:43:37 +03:00
Lauri Ojansivu 83a78c792a Updated ChangeLog. 2022-06-30 18:40:04 +03:00
Lauri Ojansivu 99b2fdbf99 Added translations: Arabic (Algeria) (ar_DZ), Azerbaijani (az), Azerbaijani (Azerbaijan) (az_AZ), Azerbaijani (Latin) (az@latin).
Thanks to translators !
2022-06-30 18:35:37 +03:00
Lauri Ojansivu 7ca9e8f4d3 Updated ChangeLog. 2022-06-25 21:58:00 +03:00
Lauri Ojansivu dac85c0a03 Merge pull request #4574 from helioguardabaxo/master
Fix div max-width on My Cards table view
2022-06-25 21:54:47 +03:00
helioguardabaxo 04e04ead92 Add display timestamp on 'Boards in Archive' 2022-06-24 22:19:40 -03:00
helioguardabaxo 008fc806e8 Fix div max-width on My Cards table view 2022-06-24 21:50:07 -03:00
Lauri Ojansivu af7874b700 Merge pull request #4565 from wekan/dependabot/github_actions/actions/dependency-review-action-2
Bump actions/dependency-review-action from 1 to 2
2022-06-24 23:59:03 +03:00
Lauri Ojansivu 94e1fa79b3 Merge pull request #4573 from helioguardabaxo/master
Do not show archived lists on All Boards
2022-06-24 23:58:29 +03:00
helioguardabaxo 6694088ac7 Do not show archived lists on All Boards 2022-06-24 16:40:03 -03:00
dependabot[bot] b4c74b8d4c Bump actions/dependency-review-action from 1 to 2
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 1 to 2.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-20 20:34:39 +00:00
Lauri Ojansivu 28612612bd Update README.md
Fix typos
2022-06-20 08:21:21 +03:00
Lauri Ojansivu f2f834e810 Update README.md
Fix typos
2022-06-20 08:18:23 +03:00
Lauri Ojansivu 3e5f8f458c Update README.md
Fix typos
2022-06-20 08:14:05 +03:00
Lauri Ojansivu cffb5baa68 Updated ChangeLog. 2022-06-19 09:30:47 +03:00
Lauri Ojansivu 01d0dd3b1d Resizeable size of list width and height. Size is not saved yet. In Progress.
Thanks to NLBlackEagle and xet7 !

Related #4558
2022-06-19 09:28:50 +03:00
Lauri Ojansivu c8bb3c7353 Try migrate mongo 3 to mongo 5. 2022-06-16 03:11:56 +03:00
Lauri Ojansivu 709b17805b Try to fix Snap. 2022-06-16 02:00:54 +03:00
Lauri Ojansivu e9982e34ed Try to fix Snap. 2022-06-16 01:57:51 +03:00
Lauri Ojansivu 1c2c3d9dea Try to fix Snap: Add wget 2022-06-16 01:04:17 +03:00
Lauri Ojansivu bd26ed7f7a Try to fix Snap. 2022-06-16 00:56:54 +03:00
Lauri Ojansivu c48299c0dd Try to fix nap 2022-06-14 09:11:27 +03:00
Lauri Ojansivu 753c54a741 Try to fix Snap. 2022-06-14 08:49:00 +03:00
Lauri Ojansivu 48a9fe3440 Try to fix Snap. 2022-06-14 08:22:25 +03:00
Lauri Ojansivu be1893e66a Updated ChangeLog. 2022-06-13 13:59:07 +03:00
Lauri Ojansivu 0d67a86f2c Updated ostrio:files.
Thanks to developers of dependencies !
2022-06-13 13:57:47 +03:00
Lauri Ojansivu 6e979beb01 Updated ChangeLog. 2022-06-13 13:56:47 +03:00
Lauri Ojansivu 12615fef5d Added translation Asturia (Spain).
Thanks to translators !
2022-06-13 13:54:54 +03:00
Lauri Ojansivu 403e2f4cbd Updated ChangeLog. 2022-06-13 13:41:57 +03:00
Lauri Ojansivu 6b4ffa69c6 Docker base image to Ubuntu 22.04 .
Thanks to Ubuntu developers !
2022-06-13 13:39:35 +03:00
viehlieb 0f65e06338 wip card description save 2022-06-10 17:57:15 +02:00
viehlieb 84d51393e4 enable redirect to oidc provider to empower sso solutions even further 2022-06-10 17:52:52 +02:00
Lauri Ojansivu 51fb490c22 v6.28 2022-06-08 09:42:53 +03:00
Lauri Ojansivu f9e25e028e Updated ChangeLog. 2022-06-08 09:36:24 +03:00
Lauri Ojansivu 937797356c Updated dependencies. Try to fix Binary release on releases.wekan.team lacks the CSS.
Thanks to znerol, mrcancer91, BabyFnord and xet7 !

Fixes #4545
2022-06-08 09:32:34 +03:00
Lauri Ojansivu 21ae1b59d6 Updated ChangeLog. 2022-06-08 07:54:26 +03:00
Lauri Ojansivu e25050316f Try to detect Japanese (Japan) better.
Thanks to takenoko14 at Transifex and xet7 !
2022-06-08 07:52:20 +03:00
Lauri Ojansivu 2e06d466b9 Updated ChangeLog. 2022-06-08 07:44:55 +03:00
Lauri Ojansivu 5739b5d93c Merge pull request #4557 from mfilser/move_and_copy_card_set_sorting
Move and copy card set sorting
2022-06-08 07:43:21 +03:00
Martin Filser 6b6bdddce6 Move card to top/bottom using now the same internal code logic 2022-06-07 06:32:52 +02:00
Martin Filser dcff70c983 Copy card is now at the top too (same as move card) 2022-06-07 06:32:52 +02:00
Martin Filser ad5167de55 Card Details, move card between lists moves now the card to the top by default
- mostly the card is sorted anywhere and you have to scroll the list,
  now, the card is always at the top
2022-06-07 06:32:52 +02:00
Lauri Ojansivu 947692693c Merge pull request #4552 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-1.2.1
Bump VeryGoodOpenSource/very_good_coverage from 1.1.1 to 1.2.1
2022-06-07 00:37:24 +03:00
Lauri Ojansivu 0c8e812991 Merge pull request #4555 from wekan/dependabot/github_actions/helm/chart-releaser-action-1.4.0
Bump helm/chart-releaser-action from 1.1.0 to 1.4.0
2022-06-07 00:35:01 +03:00
Lauri Ojansivu fb1742b149 Merge pull request #4554 from wekan/dependabot/github_actions/docker/build-push-action-3
Bump docker/build-push-action from 2.5.0 to 3
2022-06-07 00:34:37 +03:00
Lauri Ojansivu 054915031e Merge pull request #4553 from wekan/dependabot/github_actions/actions/download-artifact-3
Bump actions/download-artifact from 2 to 3
2022-06-07 00:34:19 +03:00
Lauri Ojansivu ada6b8ee9c Merge pull request #4556 from wekan/dependabot/github_actions/actions/upload-artifact-3
Bump actions/upload-artifact from 2 to 3
2022-06-07 00:34:01 +03:00
dependabot[bot] 63e0597c68 Bump actions/upload-artifact from 2 to 3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:26 +00:00
dependabot[bot] c71cedf9f4 Bump helm/chart-releaser-action from 1.1.0 to 1.4.0
Bumps [helm/chart-releaser-action](https://github.com/helm/chart-releaser-action) from 1.1.0 to 1.4.0.
- [Release notes](https://github.com/helm/chart-releaser-action/releases)
- [Commits](https://github.com/helm/chart-releaser-action/compare/v1.1.0...v1.4.0)

---
updated-dependencies:
- dependency-name: helm/chart-releaser-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:23 +00:00
dependabot[bot] f6ee321d0f Bump docker/build-push-action from 2.5.0 to 3
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.5.0 to 3.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/ad44023a93711e3deb337508980b4b5e9bcdc5dc...e551b19e49efd4e98792db7592c17c09b89db8d8)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:19 +00:00
dependabot[bot] 2a24720fad Bump actions/download-artifact from 2 to 3
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:14 +00:00
dependabot[bot] a7fd512124 Bump VeryGoodOpenSource/very_good_coverage from 1.1.1 to 1.2.1
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/VeryGoodOpenSource/very_good_coverage) from 1.1.1 to 1.2.1.
- [Release notes](https://github.com/VeryGoodOpenSource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/VeryGoodOpenSource/very_good_coverage/compare/v1.1.1...v1.2.1)

---
updated-dependencies:
- dependency-name: VeryGoodOpenSource/very_good_coverage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:09 +00:00
Lauri Ojansivu b7f62cf5f2 Updated ChangeLog. 2022-06-06 15:00:22 +03:00
Lauri Ojansivu dfea3d0e73 Removed lightbox that caused bugs like Maximum stack size exceeded. TODO later: Add a new way to open attachment image bigger.
Thanks to xet7 !

Related #4545
2022-06-06 14:58:45 +03:00
Lauri Ojansivu e4e1a8f4e6 Updated ChangeLog. 2022-06-06 10:45:56 +03:00
Lauri Ojansivu 43b2d71404 Upgraded to Meteor 2.7.3 .
Thanks to Meteor developers !
2022-06-06 10:41:49 +03:00
Lauri Ojansivu c9f8e111c5 Updated ChangeLog. 2022-06-06 10:34:48 +03:00
Lauri Ojansivu 67596602d7 Merge branch 'master' of github.com:wekan/wekan 2022-06-06 10:33:13 +03:00
Lauri Ojansivu 5af4f54f4c Added translations: Moroccan Arabic (ary) and Standard Moroccan Tamazight (zgh).
Thanks to translators!
2022-06-06 10:32:36 +03:00
Lauri Ojansivu 0d7d38b358 Merge pull request #4543 from turrisxyz/Dependency-GitHub 2022-06-02 05:51:49 +03:00
naveen 680770a7df chore(deps): Included dependency review
> Dependency Review GitHub Action in your repository to enforce dependency
> reviews on your pull requests.
> The action scans for vulnerable versions of dependencies introduced by package version
> changes in pull requests,
> and warns you about the associated security vulnerabilities.
> This gives you better visibility of what's changing in a pull request,
> and helps prevent vulnerabilities being added to your repository.

https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
Signed-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com>
2022-06-01 23:35:00 +00:00
Lauri Ojansivu 14c3432896 Merge pull request #4539 from wekan/dependabot/github_actions/github/codeql-action-2
Bump github/codeql-action from 1 to 2
2022-05-31 05:17:43 +03:00
Lauri Ojansivu 34fc724d95 Merge pull request #4537 from wekan/dependabot/github_actions/docker/login-action-2
Bump docker/login-action from 1.9.0 to 2
2022-05-31 05:17:11 +03:00
dependabot[bot] 1ed2c3b45a Bump docker/login-action from 1.9.0 to 2
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.9.0 to 2.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/28218f9b04b4f3f62068d7b6ce6ca5b26e35336c...49ed152c8eca782a232dede0303416e8f356c37b)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:16:56 +00:00
Lauri Ojansivu 81f74f4db6 Merge pull request #4536 from wekan/dependabot/github_actions/docker/metadata-action-4.0.1
Bump docker/metadata-action from 3.3.0 to 4.0.1
2022-05-31 05:16:33 +03:00
Lauri Ojansivu b5bc07d2e7 Merge pull request #4535 from wekan/dependabot/github_actions/actions/checkout-3
Bump actions/checkout from 2 to 3
2022-05-31 05:15:57 +03:00
Lauri Ojansivu 85fcaff678 Merge pull request #4538 from wekan/dependabot/github_actions/actions/cache-3
Bump actions/cache from 2 to 3
2022-05-31 05:15:11 +03:00
dependabot[bot] d5247daf8a Bump github/codeql-action from 1 to 2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:27 +00:00
dependabot[bot] 9ff87d189f Bump actions/cache from 2 to 3
Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:24 +00:00
dependabot[bot] 2d36116823 Bump docker/metadata-action from 3.3.0 to 4.0.1
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 3.3.0 to 4.0.1.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](https://github.com/docker/metadata-action/compare/98669ae865ea3cffbcbaa878cf57c20bbf1c6c38...69f6fc9d46f2f8bf0d5491e4aabe0bb8c6a4678a)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:17 +00:00
dependabot[bot] 9f0b9b29a5 Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:13 +00:00
Lauri Ojansivu 1d7e08390c Merge pull request #4534 from turrisxyz/Dependabot-GitHub-Actions
chore: Included githubactions in the dependabot config
2022-05-31 05:11:48 +03:00
naveen bbffa2eb6b chore: Included githubactions in the dependabot config
This should help with keeping the GitHub actions updated on new releases. This will also help with keeping it secure.

Dependabot helps in keeping the supply chain secure https://docs.github.com/en/code-security/dependabot

GitHub actions up to date https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot

https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool
Signed-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com>
2022-05-31 01:40:38 +00:00
Lauri Ojansivu 52ea940265 Merge pull request #4533 from turrisxyz/Pinned-Dependencies-GitHub
chore: Set permissions for GitHub actions
2022-05-30 04:15:47 +03:00
neilnaveen 355b358fe2 chore: Set permissions for GitHub actions
Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won’t be able to do much.

- Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions

https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs

[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)

Signed-off-by: neilnaveen <42328488+neilnaveen@users.noreply.github.com>
2022-05-30 01:09:08 +00:00
Lauri Ojansivu d74662bfd7 Updated ChangeLog. 2022-05-29 00:26:23 +03:00
Lauri Ojansivu e151da7163 Updated ChangeLog. 2022-05-29 00:24:42 +03:00
Lauri Ojansivu 1c71baec81 Update package-lock.json 2022-05-28 23:17:03 +03:00
Lauri Ojansivu 9382c2cd04 v6.27 2022-05-28 23:10:25 +03:00
Lauri Ojansivu 25e50e3908 Upgraded to Meteor 2.7.3-beta.0 .
Thanks to Meteor developers !
2022-05-28 22:58:04 +03:00
Lauri Ojansivu c6331830d4 Updated translations. 2022-05-28 22:38:17 +03:00
Lauri Ojansivu 4226a0bc37 Updated ChangeLog. 2022-05-24 00:47:35 +03:00
Lauri Ojansivu 693a49f852 Try to fix Snap. Part 8.
Thanks to xet7 !
2022-05-24 00:46:41 +03:00
Lauri Ojansivu 0b797ceb7e Updated ChangeLog. 2022-05-24 00:33:06 +03:00
Lauri Ojansivu 2587e2f00a Try to fix Snap. Part 7.
Thanks to xet7 !
2022-05-24 00:32:20 +03:00
Lauri Ojansivu 6ad83bcaeb Updated ChangeLog. 2022-05-24 00:15:29 +03:00
Lauri Ojansivu f2815a9039 Try to fix Snap. Part 6.
Thanks to xet7 !
2022-05-24 00:14:12 +03:00
Lauri Ojansivu 6d7e69cc9f Updated ChangeLog. 2022-05-24 00:02:19 +03:00
Lauri Ojansivu fac1ba5952 Try to fix Snap. Part 5.
Thanks to xet7 !
2022-05-24 00:01:13 +03:00
Lauri Ojansivu 3db14ad03a Updated ChangeLog. 2022-05-23 23:45:16 +03:00
Lauri Ojansivu 9ca26d22d0 Try to fix Snap. Part 4.
Thanks to xet7 !
2022-05-23 23:44:16 +03:00
Lauri Ojansivu 7640c7c04d Updated ChangeLog. 2022-05-23 23:23:34 +03:00
Lauri Ojansivu ea66eca60d Try to fix Snap. Part 3: Added --unsafe-perm to npm install.
Thanks to xet7 !

Related https://github.com/wekan/wekan/issues/4505#issuecomment-1135101672
2022-05-23 23:22:00 +03:00
Lauri Ojansivu 0ae8de4c04 Updated ChangeLog. 2022-05-23 22:58:45 +03:00
Lauri Ojansivu e50d69cfb7 Try to fix Snap. Part 2.
Thanks to xet7 !
2022-05-23 22:57:36 +03:00
Lauri Ojansivu d95436df51 Updated ChangeLog. 2022-05-23 22:34:39 +03:00
Lauri Ojansivu 3b419848d1 Try to fix Snap.
Thanks to xet7 !

Related #4524,
related #4423
2022-05-23 22:32:45 +03:00
Lauri Ojansivu 8efc8605a1 Updated ChangeLog. 2022-05-23 14:09:07 +03:00
Lauri Ojansivu 4f44c5bf87 Removed wekan-accounts-sandstorm .test-app directory, that could not be git cloned on Windows.
Thanks to xet7 !
2022-05-23 13:39:55 +03:00
Lauri Ojansivu 4b12245537 Updated ChangeLog. 2022-05-23 00:53:17 +03:00
Lauri Ojansivu adcc33ed7f Fix opening card scrolls to wrong position when many swimlanes and card at bottom of board.
Thanks to xet7 !
2022-05-23 00:50:21 +03:00
Lauri Ojansivu f1482cfa94 Updated translations. 2022-05-22 23:38:13 +03:00
viehlieb 2e354f9b1e wip redirect on landing page and logout to oidc provider 2022-05-11 09:05:43 +02:00
viehlieb b97c51abde Revert "Updated ChangeLog."
This reverts commit 75525c2215.
2022-04-29 10:13:59 +02:00
viehlieb 8c8560cfc2 add i18n to gitignote rm i18n from git tracking for faster development 2022-04-29 09:41:14 +02:00
541 changed files with 173869 additions and 137611 deletions

No files matched your search

+19 -7
View File
@@ -10,8 +10,8 @@ ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v14.19.3 \
METEOR_RELEASE=1.10.2 \
NODE_VERSION=v14.21.4 \
METEOR_RELEASE=METEOR@2.13 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
@@ -30,6 +30,12 @@ ENV \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
ATTACHMENTS_UPLOAD_MIME_TYPES="" \
ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
AVATARS_UPLOAD_MIME_TYPES="" \
AVATARS_UPLOAD_MAX_SIZE=0 \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
@@ -137,7 +143,9 @@ ENV \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
DEFAULT_WAIT_SPINNER="" \
NODE_OPTIONS="--max_old_space_size=4096"
S3=""
# \
# NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
@@ -154,14 +162,18 @@ RUN set -o xtrace \
&& 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}
# OLD:
# && 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" \
# Install NodeJS
RUN set -o xtrace \
&& cd /tmp \
&& 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 - \
&& curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.xz" \
&& curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt" \
&& grep " node-$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt | 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 \
&& rm "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt \
&& 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} \
+1 -1
View File
@@ -3,7 +3,7 @@ version: '3.7'
services:
wekandb-dev:
image: mongo:5.0
image: mongo:6
container_name: wekan-dev-db
restart: unless-stopped
command: mongod --oplogSize 128
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 14.19.3
node-engine: 14.21.3
node-packages:
- node-gyp
- node-pre-gyp
+6
View File
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
+11 -4
View File
@@ -9,8 +9,15 @@ on:
schedule:
- cron: '0 16 * * 3'
permissions:
contents: read
jobs:
analyze:
permissions:
actions: read # for github/codeql-action/init to get workflow details
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/autobuild to send a status report
name: Analyze
runs-on: ubuntu-latest
@@ -25,7 +32,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@@ -38,14 +45,14 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
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
uses: github/codeql-action/autobuild@v2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -59,4 +66,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2
+14
View File
@@ -0,0 +1,14 @@
name: 'Dependency Review'
on: [pull_request]
permissions:
contents: read
jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v3
- name: 'Dependency Review'
uses: actions/dependency-review-action@v3
+4 -4
View File
@@ -32,13 +32,13 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
# 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
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -48,14 +48,14 @@ jobs:
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175
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
uses: docker/build-push-action@2eb1c1961a95fc15694676618e422e8ba1d63825
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
+4 -1
View File
@@ -5,6 +5,9 @@ on:
branches:
- master
permissions:
contents: read
jobs:
build:
@@ -12,6 +15,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v3
- name: Build the Docker image
run: docker build . --file Dockerfile --tag wekan:$(date +%s)
+7 -2
View File
@@ -5,12 +5,17 @@ on:
branches:
- master
permissions:
contents: read
jobs:
release:
permissions:
contents: write # for helm/chart-releaser-action to push chart release and create a release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
fetch-depth: 0
@@ -20,6 +25,6 @@ jobs:
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.1.0
uses: helm/chart-releaser-action@v1.5.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+14 -11
View File
@@ -6,6 +6,9 @@ on:
- master
pull_request:
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
# the following are optional jobs and need to be configured according
# to this project's settings:
@@ -15,7 +18,7 @@ jobs:
# runs-on: ubuntu-latest
# steps:
# - name: checkout
# uses: actions/checkout@v2
# uses: actions/checkout@v3
#
# - name: setup node
# uses: actions/setup-node@v1
@@ -39,7 +42,7 @@ jobs:
# needs: [lintcode]
# steps:
# - name: checkout
# uses: actions/checkout@v2
# uses: actions/checkout@v3
#
# - name: setup node
# uses: actions/setup-node@v1
@@ -62,7 +65,7 @@ jobs:
# needs: [lintcode,lintstyle]
# steps:
# - name: checkout
# uses: actions/checkout@v2
# uses: actions/checkout@v3
#
# - name: setup node
# uses: actions/setup-node@v1
@@ -87,12 +90,12 @@ jobs:
# CHECKOUTS
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
# CACHING
- name: Install Meteor
id: cache-meteor-install
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ~/.meteor
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
@@ -101,7 +104,7 @@ jobs:
- name: Cache NPM dependencies
id: cache-meteor-npm
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ~/.npm
key: v1-npm-${{ hashFiles('package-lock.json') }}
@@ -110,7 +113,7 @@ jobs:
- name: Cache Meteor build
id: cache-meteor-build
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
.meteor/local/resolver-result-cache.json
@@ -133,7 +136,7 @@ jobs:
run: sh ./test-wekan.sh -cv
- name: Upload coverage
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: coverage-folder
path: .coverage/
@@ -144,17 +147,17 @@ jobs:
needs: [tests]
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Download coverage
uses: actions/download-artifact@v2
uses: actions/download-artifact@v3
with:
name: coverage-folder
path: .coverage/
- name: Coverage Report
uses: VeryGoodOpenSource/very_good_coverage@v1.1.1
uses: VeryGoodOpenSource/very_good_coverage@v2.1.0
with:
path: ".coverage/lcov.info"
min_coverage: 1 # TODO add tests and increase to 95!
+114 -86
View File
@@ -6,9 +6,8 @@
meteor-base@1.5.1
# Build system
ecmascript@0.16.2
standard-minifier-css@1.8.1
standard-minifier-js@2.8.0
ecmascript@0.16.7
standard-minifier-js@2.8.1
mquandalle:jade
coffeescript@2.4.1!
@@ -21,48 +20,133 @@ cfs:standard-packages
cottz:publish-relations
dburles:collection-helpers
idmontie:migrations
matteodem:easy-search
mongo@1.15.0
easy:search
mongo@1.16.7
mquandalle:collection-mutations
# Account system
#wekan-ldap
#wekan-accounts-cas
#wekan-accounts-oidc
accounts-password@2.3.4
useraccounts:core
useraccounts:flow-routing
useraccounts:unstyled
simple:rest-accounts-password
wekan-ldap
wekan-accounts-cas
wekan-accounts-sandstorm
wekan-accounts-lockout
wekan-oidc
wekan-accounts-oidc
# Utilities
check@1.3.1
jquery@1.11.10
random@1.2.0
reactive-dict@1.3.0
session@1.2.0
tracker@1.2.0
underscore@1.0.10
check@1.3.2
jquery@3.0.0!
random@1.2.1
reactive-dict@1.3.1
session@1.2.1
tracker@1.3.2
underscore@1.0.13
arillo:flow-router-helpers
audit-argument-checks@1.0.7
kadira:blaze-layout
kadira:dochead
mquandalle:autofocus
ongoworks:speakingurl
raix:handlebar-helpers
http@2.0.0! # force new http package
# Datepicker
rajit:bootstrap3-datepicker
rajit:bootstrap3-datepicker-de
rajit:bootstrap3-datepicker-tr
rajit:bootstrap3-datepicker-ja
rajit:bootstrap3-datepicker-fr
rajit:bootstrap3-datepicker-it
rajit:bootstrap3-datepicker-th
rajit:bootstrap3-datepicker-nl
rajit:bootstrap3-datepicker-es
rajit:bootstrap3-datepicker-lv
rajit:bootstrap3-datepicker-sv
rajit:bootstrap3-datepicker-gl
rajit:bootstrap3-datepicker-eu
rajit:bootstrap3-datepicker-vi
rajit:bootstrap3-datepicker-no
rajit:bootstrap3-datepicker-en-gb
rajit:bootstrap3-datepicker-ro
rajit:bootstrap3-datepicker-rs
rajit:bootstrap3-datepicker-ru
rajit:bootstrap3-datepicker-bs
rajit:bootstrap3-datepicker-mn
rajit:bootstrap3-datepicker-id
rajit:bootstrap3-datepicker-fa
rajit:bootstrap3-datepicker-ko
rajit:bootstrap3-datepicker-pt
rajit:bootstrap3-datepicker-sl
rajit:bootstrap3-datepicker-sq
rajit:bootstrap3-datepicker-cy
rajit:bootstrap3-datepicker-ka
rajit:bootstrap3-datepicker-sr
rajit:bootstrap3-datepicker-az
rajit:bootstrap3-datepicker-cs
rajit:bootstrap3-datepicker-me
rajit:bootstrap3-datepicker-ta
rajit:bootstrap3-datepicker-eo
rajit:bootstrap3-datepicker-oc
rajit:bootstrap3-datepicker-he
rajit:bootstrap3-datepicker-sw
rajit:bootstrap3-datepicker-rs-latin
rajit:bootstrap3-datepicker-da
rajit:bootstrap3-datepicker-pt-br
rajit:bootstrap3-datepicker-br
rajit:bootstrap3-datepicker-it-ch
rajit:bootstrap3-datepicker-en-za
rajit:bootstrap3-datepicker-en-ie
rajit:bootstrap3-datepicker-en-ca
rajit:bootstrap3-datepicker-uz-latn
rajit:bootstrap3-datepicker-ms
rajit:bootstrap3-datepicker-uk
rajit:bootstrap3-datepicker-hu
rajit:bootstrap3-datepicker-fo
rajit:bootstrap3-datepicker-kr
rajit:bootstrap3-datepicker-hi
rajit:bootstrap3-datepicker-km
rajit:bootstrap3-datepicker-fi
rajit:bootstrap3-datepicker-is
rajit:bootstrap3-datepicker-kh
rajit:bootstrap3-datepicker-bg
rajit:bootstrap3-datepicker-bn
rajit:bootstrap3-datepicker-pl
rajit:bootstrap3-datepicker-et
rajit:bootstrap3-datepicker-ar
rajit:bootstrap3-datepicker-ca
rajit:bootstrap3-datepicker-kk
rajit:bootstrap3-datepicker-sk
rajit:bootstrap3-datepicker-el
rajit:bootstrap3-datepicker-hy
rajit:bootstrap3-datepicker-hr
rajit:bootstrap3-datepicker-tg
rajit:bootstrap3-datepicker-nb
rajit:bootstrap3-datepicker-mk
rajit:bootstrap3-datepicker-nl-be
rajit:bootstrap3-datepicker-zh-cn
rajit:bootstrap3-datepicker-ar-tn
rajit:bootstrap3-datepicker-en-au
rajit:bootstrap3-datepicker-fr-ch
rajit:bootstrap3-datepicker-zh-tw
rajit:bootstrap3-datepicker-uz-cyrl
rajit:bootstrap3-datepicker-sr-latin
rajit:bootstrap3-datepicker-en-nz
# UI components
blaze
ostrio:i18n
reactive-var@1.0.11
reactive-var@1.0.12
fortawesome:fontawesome
mousetrap:mousetrap
mquandalle:jquery-textcomplete
mquandalle:mousetrap-bindglobal
peerlibrary:blaze-components
templates:tabs
meteor-autosize
rajit:bootstrap3-datepicker
shell-server@0.5.0
email@2.2.1
dynamic-import@0.7.2
email@2.2.5
dynamic-import@0.7.3
cfs:gridfs
rzymek:fullcalendar
msavin:usercache
@@ -74,75 +158,19 @@ konecty:mongo-counter
percolate:synced-cron
cfs:filesystem
ostrio:cookies
ostrio:files@2.0.1
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
easylogic:summernote
ostrio:files@2.3.0
pascoual:pdfkit
lmieulet:meteor-coverage
meteortesting:mocha@2.0.3
aldeed:simple-schema
accounts-password@2.3.1
matb33:collection-hooks
simple:json-routes
kadira:flow-router
spacebars
useraccounts:core
useraccounts:flow-routing
useraccounts:unstyled
service-configuration@1.3.0
service-configuration@1.3.1
communitypackages:picker
simple:rest-accounts-password
wekan-accounts-sandstorm
wekan-accounts-lockout
wekan-oidc
wekan-accounts-oidc
wekan-ldap
wekan-accounts-cas
czbaker:lightbox2
minifier-css@1.6.4
blaze
kadira:blaze-layout
peerlibrary:blaze-components
ejson
+1 -1
View File
@@ -1 +1 @@
METEOR@2.7.2
METEOR@2.13
+94 -68
View File
@@ -1,6 +1,6 @@
accounts-base@2.2.3
accounts-oauth@1.4.1
accounts-password@2.3.1
accounts-base@2.2.8
accounts-oauth@1.4.2
accounts-password@2.3.4
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
@@ -10,16 +10,16 @@ allow-deny@1.1.1
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.8.0
babel-compiler@7.9.0
babel-runtime@1.5.0
babel-compiler@7.10.4
babel-runtime@1.5.1
base64@1.0.12
binary-heap@1.0.11
blaze@2.6.0
blaze@2.7.1
blaze-tools@1.1.3
boilerplate-generator@1.7.1
caching-compiler@1.2.2
caching-html-compiler@1.2.1
callback-hook@1.4.0
callback-hook@1.5.1
cfs:access-point@0.1.49
cfs:base-package@0.0.30
cfs:collection@0.5.5
@@ -38,33 +38,33 @@ 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
coffeescript@2.4.1
check@1.3.2
coffeescript@2.7.0
coffeescript-compiler@2.4.1
communitypackages:picker@1.1.0
communitypackages:picker@1.1.1
cottz:publish-relations@2.0.8
czbaker:lightbox2@2.7.1_1
dburles:collection-helpers@1.1.0
ddp@1.4.0
ddp-client@2.5.0
ddp@1.4.1
ddp-client@2.6.1
ddp-common@1.4.0
ddp-rate-limiter@1.1.0
ddp-server@2.5.0
ddp-rate-limiter@1.2.0
ddp-server@2.6.2
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.7.2
easylogic:summernote@0.8.8
ecmascript@0.16.2
ecmascript-runtime@0.8.0
diff-sequence@1.1.2
dynamic-import@0.7.3
easy:search@2.2.1
easysearch:components@2.2.2
easysearch:core@2.2.2
ecmascript@0.16.7
ecmascript-runtime@0.8.1
ecmascript-runtime-client@0.12.1
ecmascript-runtime-server@0.11.0
ejson@1.1.2
email@2.2.1
ejson@1.1.3
email@2.2.5
es5-shim@4.8.0
fastclick@1.0.13
fetch@0.1.1
fetch@0.1.3
fortawesome:fontawesome@4.7.0
geojson-utils@1.0.10
geojson-utils@1.0.11
hot-code-push@1.0.4
html-tools@1.1.3
htmljs@1.1.1
@@ -72,40 +72,36 @@ http@2.0.0
id-map@1.1.1
idmontie:migrations@1.0.3
inter-process-messaging@0.1.1
jquery@1.11.11
jquery@3.0.0
kadira:blaze-layout@2.3.0
kadira:dochead@1.5.0
kadira:flow-router@2.12.1
konecty:mongo-counter@0.0.5_3
launch-screen@1.3.0
livedata@1.0.18
lmieulet:meteor-coverage@1.1.4
localstorage@1.2.0
logging@1.3.1
matb33:collection-hooks@1.1.2
matteodem:easy-search@1.6.4
logging@1.3.2
matb33:collection-hooks@1.2.2
mdg:validation-error@0.5.1
meteor@1.10.0
meteor@1.11.3
meteor-autosize@5.0.1
meteor-base@1.5.1
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
meteortesting:browser-tests@1.3.5
meteortesting:mocha@2.0.3
meteortesting:browser-tests@1.4.2
meteortesting:mocha@2.1.0
meteortesting:mocha-core@8.0.1
minifier-css@1.6.0
minifier-js@2.7.4
minifier-css@1.6.4
minifier-js@2.7.5
minifiers@1.1.8-faster-rebuild.0
minimongo@1.8.0
mobile-status-bar@1.1.0
modern-browsers@0.1.8
modules@0.18.0
modules-runtime@0.13.0
minimongo@1.9.3
modern-browsers@0.1.9
modules@0.19.0
modules-runtime@0.13.1
momentjs:moment@2.29.3
mongo@1.15.0
mongo@1.16.7
mongo-decimal@0.1.3
mongo-dev-server@1.1.0
mongo-id@1.0.8
@@ -118,16 +114,16 @@ mquandalle:jade-compiler@0.4.5
mquandalle:jquery-textcomplete@0.8.0_1
mquandalle:mousetrap-bindglobal@0.0.1
msavin:usercache@1.8.0
npm-mongo@4.3.1
oauth@2.1.2
oauth2@1.3.1
observe-sequence@1.0.20
npm-mongo@4.16.0
oauth@2.2.0
oauth2@1.3.2
observe-sequence@1.0.21
ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
ostrio:cookies@2.7.0
ostrio:cstorage@2.2.2
ostrio:files@2.0.1
ostrio:i18n@3.1.0
ostrio:cookies@2.7.2
ostrio:cstorage@4.0.1
ostrio:files@2.3.3
ostrio:i18n@3.2.1
pascoual:pdfkit@1.0.7
peerlibrary:assert@0.3.0
peerlibrary:base-component@0.17.1
@@ -136,96 +132,125 @@ peerlibrary:computed-field@0.10.0
peerlibrary:data-lookup@0.3.0
peerlibrary:reactive-field@0.6.0
percolate:synced-cron@1.3.2
promise@0.12.0
promise@0.12.2
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
rajit:bootstrap3-datepicker@1.7.1_1
rajit:bootstrap3-datepicker-ar@1.7.1
rajit:bootstrap3-datepicker-ar-tn@1.7.1
rajit:bootstrap3-datepicker-az@1.7.1
rajit:bootstrap3-datepicker-bg@1.7.1
rajit:bootstrap3-datepicker-bn@1.7.1
rajit:bootstrap3-datepicker-br@1.7.1
rajit:bootstrap3-datepicker-bs@1.7.1
rajit:bootstrap3-datepicker-ca@1.7.1
rajit:bootstrap3-datepicker-cs@1.7.1
rajit:bootstrap3-datepicker-cy@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-au@1.7.1
rajit:bootstrap3-datepicker-en-ca@1.7.1
rajit:bootstrap3-datepicker-en-gb@1.7.1
rajit:bootstrap3-datepicker-en-ie@1.7.1
rajit:bootstrap3-datepicker-en-nz@1.7.1
rajit:bootstrap3-datepicker-en-za@1.7.1
rajit:bootstrap3-datepicker-eo@1.7.1
rajit:bootstrap3-datepicker-es@1.7.1
rajit:bootstrap3-datepicker-et@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-fo@1.7.1
rajit:bootstrap3-datepicker-fr@1.7.1
rajit:bootstrap3-datepicker-fr-ch@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-hr@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-is@1.7.1
rajit:bootstrap3-datepicker-it@1.7.1
rajit:bootstrap3-datepicker-it-ch@1.7.1
rajit:bootstrap3-datepicker-ja@1.7.1
rajit:bootstrap3-datepicker-ka@1.7.1
rajit:bootstrap3-datepicker-kh@1.7.1
rajit:bootstrap3-datepicker-kk@1.7.1
rajit:bootstrap3-datepicker-km@1.7.1
rajit:bootstrap3-datepicker-ko@1.7.1
rajit:bootstrap3-datepicker-kr@1.7.1
rajit:bootstrap3-datepicker-lv@1.7.1
rajit:bootstrap3-datepicker-me@1.7.1
rajit:bootstrap3-datepicker-mk@1.7.1
rajit:bootstrap3-datepicker-mn@1.7.1
rajit:bootstrap3-datepicker-ms@1.7.1
rajit:bootstrap3-datepicker-nb@1.7.1
rajit:bootstrap3-datepicker-nl@1.7.1
rajit:bootstrap3-datepicker-nl-be@1.7.1
rajit:bootstrap3-datepicker-no@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-rs@1.7.1
rajit:bootstrap3-datepicker-rs-latin@1.7.1
rajit:bootstrap3-datepicker-ru@1.7.1
rajit:bootstrap3-datepicker-sk@1.7.1
rajit:bootstrap3-datepicker-sl@1.7.1
rajit:bootstrap3-datepicker-sq@1.7.1
rajit:bootstrap3-datepicker-sr@1.7.1
rajit:bootstrap3-datepicker-sr-latin@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-tg@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-uz-cyrl@1.7.1
rajit:bootstrap3-datepicker-uz-latn@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.2.3
reactive-dict@1.3.0
reactive-var@1.0.11
random@1.2.1
rate-limit@1.1.1
react-fast-refresh@0.2.7
reactive-dict@1.3.1
reactive-var@1.0.12
reload@1.3.1
retry@1.1.0
routepolicy@1.1.1
rzymek:fullcalendar@3.8.0
service-configuration@1.3.0
session@1.2.0
service-configuration@1.3.1
session@1.2.1
sha@1.0.9
shell-server@0.5.0
simple:authenticate-user-by-token@1.2.1
simple:json-routes@2.3.1
simple:rest-accounts-password@1.2.1
simple:rest-accounts-password@1.2.2
simple:rest-bearer-token-parser@1.1.1
simple:rest-json-error-handler@1.1.1
socket-stream-client@0.5.0
spacebars@1.3.0
socket-stream-client@0.5.1
spacebars@1.4.1
spacebars-compiler@1.3.1
standard-minifier-css@1.8.1
standard-minifier-js@2.8.0
standard-minifier-js@2.8.1
templates:tabs@2.3.0
templating@1.4.1
templating-compiler@1.4.1
templating-runtime@1.5.0
templating-tools@1.2.2
tracker@1.2.0
twbs:bootstrap@3.3.6
tracker@1.3.2
ui@1.0.13
underscore@1.0.10
underscore@1.0.13
url@1.3.2
useraccounts:core@1.16.2
useraccounts:flow-routing@1.15.0
useraccounts:unstyled@1.14.2
webapp@1.13.1
webapp-hashing@1.1.0
webapp@1.13.5
webapp-hashing@1.1.1
wekan-accounts-cas@0.1.0
wekan-accounts-lockout@1.0.0
wekan-accounts-oidc@1.0.10
@@ -235,3 +260,4 @@ wekan-markdown@1.0.9
wekan-oidc@1.0.12
yasaricli:slugify@0.0.7
zimme:active-route@2.3.2
zodern:types@1.0.9
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 14.19.3
TRAVIS_NODE_VERSION: 14.21.3
TRAVIS_NPM_VERSION: latest
before_install:
+5 -51
View File
@@ -1,55 +1,9 @@
# This is the configuration of the Transifex tool that we use to manage the
# translations on Wekan. Documentation at: http://docs.transifex.com/client.
#
# Push
# ====
#
# It is recommended that contributors use the Transifex web UI to create and
# edit translated strings. However in case a contributor has directly jumped
# into the code and made its translations in the corresponding i18n.json file
# we can push it using
#
# > tx push -t -l ar
#
# Where `ar` is the language identifier. In addition, the project maintainer
# should push the English source file to Transifex at least before each release
# candidate using:
#
# > tx push -s
#
# Pull
# ====
#
# The set of accepted language is directly managed in Transifex, the only
# restriction we define to bundle a new language in the application, is that its
# completion is at least at 75%.
#
# We use:
#
# > tx pull
#
# to download new versions of existing translations, and
#
# > tx pull -a --minimum-perc=75
#
# to download new sufficiently advanced translations.
[main]
host = https://www.transifex.com
# tap:i18n requires us to use `-` separator in the language identifiers whereas
# Transifex uses a `_` separator, without an option to customize it on one side
# or the other, so we need to do a Manual mapping.
lang_map = ar_EG:ar-EG, bg_BG:bg, cs_CZ:cs-CZ, cy_GB:cy-GB, de_AT:de-AT, de_CH:de-CH, en_BR:en-BR, en_DE:en-DE, en_IT:en-IT, en_GB:en-GB, et_EE:et-EE, es_AR:es-AR, en@ysv:en-YS, 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-GR, fa_IR:fa-IR, fi_FI:fi, fr_FR:fr-FR, fr_CH:fr-CH, fy_NL:fy-NL, gl_ES:gl-ES, gu_IN:gu-IN, he_IL:he-IL, hi_IN:hi-IN, hu_HU:hu, id_ID:id, mn_MN:mn, ms_MY:ms-MY, nl_NL:nl-NL, ko_KR:ko-KR, lv_LV:lv, pl_PL:pl-PL, pt_BR:pt-BR, ro_RO:ro, ru_UA:ru-UA, sl_SI:sl, uk_UA:uk-UA, uz@Arab:uz-AR, uz@Latn:uz-LA, uz_UZ:uz-UZ, vec:ve-CC, vep:ve-PP, vls:vl-SS, war:wa-RR, vi_VN:vi-VN, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK, zu_ZA:zu-ZA
host = https://www.transifex.com
lang_map = es_AR: es-AR, es_419: es-LA, es_TX: es-TX, he_IL: he-IL, zh_CN: zh-CN, ar_EG: ar-EG, cs_CZ: cs-CZ, fa_IR: fa-IR, ms_MY: ms-MY, nl_NL: nl-NL, de_CH: de-CH, en_IT: en-IT, uz_UZ: uz-UZ, fr_CH: fr-CH, hi_IN: hi-IN, et_EE: et-EE, es_PE: es-PE, es_MX: es-MX, gl_ES: gl-ES, mn_MN: mn, sl_SI: sl, zh_TW: zh-TW, ast_ES: ast-ES, es_CL: es-CL, ja_JP: ja, lv_LV: lv, ro_RO: ro-RO, az_AZ: az-AZ, cy_GB: cy-GB, gu_IN: gu-IN, pl_PL: pl-PL, vep: ve-PP, en_BR: en-BR, en@ysv: en-YS, hu_HU: hu, ko_KR: ko-KR, pt_BR: pt-BR, zh_HK: zh-HK, zu_ZA: zu-ZA, en_MY: en-MY, ja-Hira: ja-HI, fi_FI: fi, vec: ve-CC, vi_VN: vi-VN, fr_FR: fr-FR, id_ID: id, zh_Hans: zh-Hans, en_DE: en-DE, en_GB: en-GB, el_GR: el-GR, uk_UA: uk-UA, az@latin: az-LA, de_AT: de-AT, uz@Latn: uz-LA, vls: vl-SS, ar_DZ: ar-DZ, bg_BG: bg, es_PY: es-PY, fy_NL: fy-NL, uz@Arab: uz-AR, ru_UA: ru-UA, war: wa-RR, zh_CN.GB2312: zh-GB
[wekan.application]
[o:wekan:p:wekan:r:application]
file_filter = imports/i18n/data/<lang>.i18n.json
source_file = imports/i18n/data/en.i18n.json
source_lang = en
type = KEYVALUEJSON
# We might have a dedicated second resource later to translate the “Welcome
# Board” data.
#
# [wekan.welcomeBoard]
# file_filter = private/welcomeBoard/<lang>.json
# source_lang = en
# type = KEYVALUEJSON
type = KEYVALUEJSON
+1853 -6
View File
File diff suppressed because it is too large. Load diff
+71 -2
View File
@@ -1,4 +1,73 @@
To get started, [please sign the Contributor License Agreement](https://www.clahub.com/agreements/wekan/wekan).
## Contributing Security related
[Then, please read documentation at wiki](https://github.com/wekan/wekan/wiki).
For responsible security disclosure, please follow this process:
https://github.com/wekan/wekan/blob/master/SECURITY.md
CVE Hall of Fame is at https://wekan.github.io/hall-of-fame/
## Contributing to Documentation Wiki
Please clone wiki:
```
git clone https://github.com/wekan/wekan.wiki
```
Edit .md files, and add changed files in .zip attachment
directly to comment of new issue at
https://github.com/wekan/wekan/issues
## Contributing code
[Building WeKan and sending PR](https://github.com/wekan/wekan/wiki/Emoji).
WeKan code contributors Hall of Fame is at ChangeLog, where
GitHub usernames are mentioned with changes added:
https://github.com/wekan/wekan/blob/master/CHANGELOG.md
Changes can be like typo fixes, bugfixes, features, or anything else
like for example at open GitHub issues https://github.com/wekan/wekan/issues .
Closed issues are already fixed or implemented.
Also see other docs at wiki, for example:
https://github.com/wekan/wekan/wiki/Developer-Documentation
Do not use code formatting or linting like eslist or prettier.
Only send minimal changed code lines, that are related to feature or fix.
WeKan code has MIT license.
About 300 persons have contributed to WeKan, stats at:
https://www.openhub.net/p/wekan
WeKan maintainer xet7 checks PR for typos etc before accepting to WeKan,
so that WeKan code will still work OK.
## Contributing translations
Non-English translations are contributed only at
https://transifex.com/wekan/wekan
When adding new features, in your PR to
https://github.com/wekan/wekan/pulls
only add new English source language strings
to https://github.com/wekan/wekan/blob/master/imports/i18n/data/en.i18n.json
Maintainer of WeKan xet7 downloads all newest
translations from Transifex and adds
them to WeKan repo before making
new release.
## About WeKan Organization https://github.com/wekan
xet7 rarely adds any new members to GitHub Organization,
because xet7 prefers to check PRs.
For some repos (other than https://github.com/wekan/wekan ),
some contributors have direct commit access.
Some contributors are mentioned at this outdated page:
https://github.com/wekan/wekan/wiki/Team
+36 -109
View File
@@ -1,6 +1,11 @@
FROM ubuntu:21.10
FROM --platform=linux/amd64 ubuntu:23.04 as wekan
LABEL maintainer="wekan"
# 2022-09-04:
# - above "--platform=linux/amd64 ubuntu:22.04 as wekan" is needed to build Dockerfile
# correctly on Mac M1 etc, to not get this error:
# https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc
# 2022-04-25:
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
# so changing to 21.10. https://github.com/wekan/wekan/issues/4488
@@ -16,8 +21,8 @@ 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=v14.19.3 \
METEOR_RELEASE=1.10.2 \
NODE_VERSION=v14.21.4 \
METEOR_RELEASE=METEOR@2.13 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
@@ -33,6 +38,12 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
ATTACHMENTS_UPLOAD_MIME_TYPES="" \
ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
AVATARS_UPLOAD_MIME_TYPES="" \
AVATARS_UPLOAD_MAX_SIZE=72000 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
MAX_IMAGE_PIXEL="" \
@@ -46,10 +57,12 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
MATOMO_SITE_ID="" \
MATOMO_DO_NOT_TRACK=true \
MATOMO_WITH_USERNAME=false \
METRICS_ALLOWED_IP_ADDRESSES="" \
BROWSER_POLICY_ENABLED=true \
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OIDC_REDIRECTION_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
@@ -144,15 +157,15 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
SAML_ATTRIBUTES="" \
ORACLE_OIM_ENABLED=false \
WAIT_SPINNER="" \
NODE_OPTIONS="--max_old_space_size=4096" \
WRITABLE_PATH=/data
WRITABLE_PATH=/data \
S3=""
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
# NODE_OPTIONS="--max_old_space_size=4096" \
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------------------------------
# Copy the app to the image
@@ -165,7 +178,6 @@ RUN \
\
# OS dependencies
apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
#pip3 install -U pip setuptools wheel && \
\
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
@@ -173,47 +185,17 @@ RUN \
ln -sf $(which bsdtar) $(which tar) && \
\
# Download nodejs
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt && \
#wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
#wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
#---------------------------------------------------------------------------------------------
# Node Fibers 100% CPU usage issue:
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
# https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
# https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
# Also see beginning of wekan/server/authentication.js
# import Fiber from "fibers";
# Fiber.poolSize = 1e9;
# OLD: Download node version 8.12.0 prerelease that has fix included, => Official 8.12.0 has been released
# Description at https://releases.wekan.team/node.txt
#wget https://releases.wekan.team/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
#echo "1ed54adb8497ad8967075a0b5d03dd5d0a502be43d4a4d84e5af489c613d7795 node-v8.12.0-linux-x64.tar.gz" >> SHASUMS256.txt.asc && \
\
# Verify nodejs authenticity
grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
#export GNUPGHOME="$(mktemp -d)" && \
#\
# Try other key servers if ha.pool.sks-keyservers.net is unreachable
# Code from https://github.com/chorrell/docker-node/commit/2b673e17547c34f17f24553db02beefbac98d23c
# gpg keys listed at https://github.com/nodejs/node#release-team
# and keys listed here from previous version of this Dockerfile
#for key in \
#9554F04D7259F04124DE6B476D5A82AC7E37093B \
#94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
#FD3A5288F042B6850C66B31F09FE44734EB7990E \
#71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
#DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
#C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
#B9AE9905FFD7803F25714661B63B535A4C206CA9 \
#; do \
#gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \
#gpg --keyserver pgp.mit.edu --recv-keys "$key" || \
#gpg --keyserver keyserver.pgp.com --recv-keys "$key" ; \
#done && \
#gpg --verify SHASUMS256.txt.asc && \
# Ignore socket files then delete files then delete directories
#find "$GNUPGHOME" -type f | xargs rm -f && \
#find "$GNUPGHOME" -type d | xargs rm -fR && \
rm -f SHASUMS256.txt.asc && \
grep node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt | shasum -a 256 -c - && \
rm -f SHASUMS256.txt && \
#grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
#rm -f SHASUMS256.txt.asc && \
\
# Install Node
tar xvzf node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
@@ -229,90 +211,32 @@ RUN \
\
# Install Node dependencies. Python path for node-gyp.
npm install -g npm@${NPM_VERSION} && \
#npm config set python python2.7 && \
#npm install -g node-gyp && \
#npm install -g fibers@${FIBERS_VERSION} && \
\
# Change user to wekan and install meteor
cd /home/wekan/ && \
chown wekan --recursive /home/wekan && \
#curl "https://install.meteor.com" -o /home/wekan/install_meteor.sh && \
#curl "https://install.meteor.com/?release=${METEOR_RELEASE}" -o /home/wekan/install_meteor.sh && \
# OLD: sed -i "s|RELEASE=.*|RELEASE=${METEOR_RELEASE}\"\"|g" ./install_meteor.sh && \
# Install Meteor forcing its progress
#sed -i 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' ./install_meteor.sh && \
echo "Starting meteor ${METEOR_RELEASE} installation... \n" && \
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh && \
mv /root/.meteor /home/wekan/ && \
chown wekan --recursive /home/wekan/.meteor && \
\
# Check if opting for a release candidate instead of major release
#if [ "$USE_EDGE" = false ]; then \
#gosu wekan:wekan sh /home/wekan/install_meteor.sh; \
# gosu wekan:wekan curl https://install.meteor.com/ | sh; \
#else \
# gosu wekan:wekan git clone --recursive --depth 1 -b release/METEOR@${METEOR_EDGE} https://github.com/meteor/meteor.git /home/wekan/.meteor; \
#fi; \
#\
# Get additional packages
#mkdir -p /home/wekan/app/packages && \
#chown wekan:wekan --recursive /home/wekan && \
# REPOS BELOW ARE INCLUDED TO WEKAN REPO
#cd /home/wekan/app/packages && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git && \
#gosu wekan:wekan git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git && \
#gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan-accounts-oidc && \
#gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_oidc wekan-oidc && \
#gosu wekan:wekan rm -rf meteor-accounts-oidc && \
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
gosu wekan:wekan /home/wekan/.meteor/meteor -- help; \
\
# extract the OpenAPI specification
#npm install -g api2html@0.3.3 && \
#mkdir -p /home/wekan/python && \
#chown wekan --recursive /home/wekan/python && \
#cd /home/wekan/python && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/Kronuz/esprima-python && \
#cd /home/wekan/python/esprima-python && \
#python3 setup.py install --record files.txt && \
#cd /home/wekan/app && \
#mkdir -p /home/wekan/app/public/api && \
#chown wekan --recursive /home/wekan/app && \
#gosu wekan:wekan python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml && \
#gosu wekan:wekan /opt/nodejs/bin/api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
# Build app
cd /home/wekan/app && \
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 && \
#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 && \
#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 /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
#gosu wekan:wekan rm -rf node_modules/bcrypt && \
#gosu wekan:wekan npm install bcrypt && \
#
# Delete phantomjs
#cd /home/wekan/app_build/bundle && \
#find . -name "*phantomjs*" | xargs rm -rf && \
#
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
cd node_modules/fibers && \
node build.js && \
cd ../.. && \
#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 && \
@@ -339,6 +263,8 @@ ENV PORT=8080
EXPOSE $PORT
USER wekan
STOPSIGNAL SIGKILL
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
@@ -349,4 +275,5 @@ USER wekan
#
# CMD ["node", "/build/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node /build/main.js"]
+15 -6
View File
@@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v14.19.3 \
NODE_VERSION=v14.21.4 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64 \
NODE_OPTIONS="--max_old_space_size=4096"
@@ -33,8 +33,10 @@ RUN apk update && apk add ca-certificates outils-sha1 && \
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 && \
#wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_ARCHITECTURE}.tar.gz && \
#wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
#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 - && \
@@ -49,7 +51,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v14.19.3 \
NODE_VERSION=v14.21.3 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
@@ -78,7 +80,13 @@ RUN \
chown wekan --recursive /home/wekan/.config && \
\
# Install Node dependencies
npm install -g npm@${NPM_VERSION}
npm install -g npm@${NPM_VERSION} && \
\
# Install Health Check dependencies
apk add curl
HEALTHCHECK --start-period=30s --interval=30s --timeout=10s --retries=3 \
CMD curl --fail "http://localhost:$PORT" || exit 1
EXPOSE $PORT
USER wekan
@@ -93,5 +101,6 @@ USER wekan
#
#CMD ["node", "/home/wekan/bundle/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /home/wekan/bundle/main.js"]
#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /home/wekan/bundle/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node /home/wekan/bundle/main.js"]
+25 -27
View File
@@ -1,25 +1,27 @@
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
[Gitpod Ready-to-Code](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)
[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan)
[![Docker Hub container status](https://img.shields.io/docker/build/wekanteam/wekan.svg "Docker Hub container status")](https://hub.docker.com/r/wekanteam/wekan)
[![Docker Hub pulls](https://img.shields.io/docker/pulls/wekanteam/wekan.svg "Docker Hub Pulls")](https://hub.docker.com/r/wekanteam/wekan)
[![Wekan Build Status][travis_badge]][travis_status]
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/02137ecec4e34c5aa303f57637196a93 "Codacy Badge")](https://www.codacy.com/app/xet7/wekan?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=wekan/wekan&amp;utm_campaign=Badge_Grade)
[![Code Climate](https://codeclimate.com/github/wekan/wekan/badges/gpa.svg "Code Climate")](https://codeclimate.com/github/wekan/wekan)
[![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)
## Docker Containers
## [Translate WeKan ® at Transifex](https://transifex.com/wekan/wekan)
- [Quay](https://quay.io/repository/wekan/wekan)
- [Docker Hub](https://hub.docker.com/r/wekanteam/wekan)
Translations to non-English languages are accepted only at [Transifex](https://transifex.com/wekan/wekan) using webbrowser.
New English strings of new features can be added as PRs to edge branch file wekan/i18n/en.i18n.json .
Other platforms and compatible software versions at https://wekan.github.io Download section.
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
## Code stats
- [Code Climate](https://codeclimate.com/github/wekan/wekan)
- [Open Hub](https://www.openhub.net/p/wekan)
- [OSS Insight](https://ossinsight.io/analyze/wekan/wekan)
- [CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619)
## [Translate WeKan ® at Transifex](https://app.transifex.com/wekan/)
Translations to non-English languages are accepted only at [Transifex](https://app.transifex.com/wekan/) using webbrowser.
New English strings of new features can be added as PRs to master branch file wekan/imports/i18n/data/en.i18n.json .
## [WeKan ® feature requests and bugs](https://github.com/wekan/wekan/issues)
Please add most of your questions as GitHub issue: [WeKan ® Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
It's better than at chat where details get lost when chat scrolls up.
@@ -28,12 +30,12 @@ It's better than at chat where details get lost when chat scrolls up.
[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)
[WeKan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
## Docker: Please only use Docker release tags
## Docker: Latest tag has newest release
Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874
You can use latest tag to get newest release tag.
See bottom of https://github.com/wekan/wekan/issues/3874
## FAQ
@@ -56,8 +58,8 @@ install Wekan on your own computer or server. In fact we encourage you to do
that by providing one-click installation on various platforms.
- WeKan ® is used in [most countries of the world](https://snapcraft.io/wekan).
- Wekan largest user has 22k users using Wekan in their company.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 105 languages.
- WeKan ® largest user has 30k users using WeKan ® in their company.
- WeKan ® has been [translated](https://app.transifex.com/wekan/) to about 105 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.
@@ -113,12 +115,8 @@ with [Meteor](https://www.meteor.com).
[wekan_issues]: https://github.com/wekan/wekan/issues
[wekan_issues]: https://github.com/wekan/wekan/issues
[docker_image]: https://hub.docker.com/r/wekanteam/wekan/
[travis_badge]: https://travis-ci.org/wekan/wekan.svg?branch=devel
[travis_status]: https://travis-ci.org/wekan/wekan
[wekan_wiki]: https://github.com/wekan/wekan/wiki
[translate_wekan]: https://www.transifex.com/wekan/wekan/
[translate_wekan]: https://app.transifex.com/wekan/
[open_source]: https://en.wikipedia.org/wiki/Open-source_software
[free_software]: https://en.wikipedia.org/wiki/Free_software
[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)
+1 -1
View File
@@ -105,7 +105,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 password guessing. Currently there is
[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.
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v6.26.0"
appVersion: "v7.09.0"
files:
userUploads:
- README.md
+78 -47
View File
@@ -21,31 +21,40 @@ import sys
arguments = len(sys.argv) - 1
syntax = """=== Wekan API Python CLI: Shows IDs for addcard ===
# AUTHORID is USERID that writes card or custom field.
If *nix: chmod +x api.py => ./api.py users
Syntax:
User API:
python3 api.py user # Current user and list of current user boards
python3 api.py boards USERID # Boards of USERID
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 customfields BOARDID # Custom Fields of BOARDID
python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID
python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board
python3 api.py editcustomfield BOARDID LISTID CARDID CUSTOMFIELDID NEWCUSTOMFIELDVALUE
python3 api.py listattachments BOARDID # List attachments
Admin API:
python3 api.py users # All users
python3 api.py boards # All Public Boards
python3 api.py newuser USERNAME EMAIL PASSWORD
"""
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 # All Public Boards")
print(" python3 api.py boards USERID # Boards of USERID")
print(" python3 api.py board BOARDID # Info of BOARDID")
print(" python3 api.py customfields BOARDID # Custom Fields of BOARDID")
print(" python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID")
print(" python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board")
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")
print(syntax)
exit
# 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 -------------
@@ -61,33 +70,6 @@ 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 customfields BOARDID # Custom Fields of BOARDID
python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID
python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board
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
=== ADD CUSTOM FIELD TO BOARD ===
Type: text, number, date, dropdown, checkbox, currency, stringtemplate.
@@ -144,6 +126,8 @@ wekanloginurl = wekanurl + loginurl
apiboards = 'api/boards/'
apiattachments = 'api/attachments/'
apiusers = 'api/users'
apiuser = 'api/user'
apiallusers = 'api/allusers'
e = 'export'
s = '/'
l = 'lists'
@@ -152,17 +136,20 @@ sws = 'swimlanes'
cs = 'cards'
cf = 'custom-fields'
bs = 'boards'
apbs = 'allpublicboards'
atl = 'attachmentslist'
at = 'attachment'
ats = 'attachments'
users = wekanurl + apiusers
user = wekanurl + apiuser
allusers = wekanurl + apiallusers
# ------- API URL GENERATION END -----------
# ------- LOGIN TOKEN START -----------
data = {"username": username, "password": password}
body = requests.post(wekanloginurl, data=data)
body = requests.post(wekanloginurl, json=data)
d = body.json()
apikey = d['token']
@@ -231,6 +218,40 @@ if arguments == 6:
print(data2)
# ------- EDIT CARD END -----------
if sys.argv[1] == 'editcustomfield':
# ------- EDIT CUSTOMFIELD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
customfieldid = sys.argv[5]
newcustomfieldvalue = sys.argv[6]
edfield = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid + s + 'customFields' + s + customfieldid
#print(edfield)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'_id': '{}'.format(customfieldid), 'value': '{}'.format(newcustomfieldvalue)}
#print(post_data)
body = requests.post(edfield, data=post_data, headers=headers)
print("=== EDIT CUSTOMFIELD ===\n")
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- EDIT CUSTOMFIELD END -----------
if arguments == 4:
if sys.argv[1] == 'newuser':
# ------- CREATE NEW USER START -----------
username = sys.argv[2]
email = sys.argv[3]
password = sys.argv[4]
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'username': '{}'.format(username),'email': '{}'.format(email),'password': '{}'.format(password)}
body = requests.post(users, data=post_data, headers=headers)
print("=== CREATE NEW USER ===\n")
print(body.text)
# ------- CREATE NEW USER END -----------
if arguments == 3:
if sys.argv[1] == 'createlist':
@@ -356,6 +377,16 @@ if arguments == 1:
print(data2)
# ------- LIST OF USERS END -----------
if sys.argv[1] == 'user':
# ------- LIST OF ALL USERS START -----------
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print(user)
print("=== USER ===\n")
body = requests.get(user, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LIST OF ALL USERS END -----------
if sys.argv[1] == 'boards':
# ------- LIST OF PUBLIC BOARDS START -----------
+15 -13
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import DOMPurify from 'dompurify';
import { TAPi18n } from '/imports/i18n';
@@ -24,7 +25,7 @@ BlazeComponent.extendComponent({
searchId = Session.get(`current${capitalizedMode}`);
}
const limit = this.page.get() * activitiesPerPage;
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
const hideSystem = user ? user.hasHiddenSystemMessages() : false;
if (searchId === null) return;
@@ -65,7 +66,7 @@ Template.activities.helpers({
BlazeComponent.extendComponent({
checkItem() {
const checkItemId = this.currentData().activity.checklistItemId;
const checkItem = ChecklistItems.findOne({ _id: checkItemId });
const checkItem = ReactiveCache.getChecklistItem(checkItemId);
return checkItem && checkItem.title;
},
@@ -145,7 +146,7 @@ BlazeComponent.extendComponent({
lastLabel() {
const lastLabelId = this.currentData().activity.labelId;
if (!lastLabelId) return null;
const lastLabel = Boards.findOne(
const lastLabel = ReactiveCache.getBoard(
this.currentData().activity.boardId,
).getLabelById(lastLabelId);
if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) {
@@ -158,7 +159,7 @@ BlazeComponent.extendComponent({
},
lastCustomField() {
const lastCustomField = CustomFields.findOne(
const lastCustomField = ReactiveCache.getCustomField(
this.currentData().activity.customFieldId,
);
if (!lastCustomField) return null;
@@ -166,7 +167,7 @@ BlazeComponent.extendComponent({
},
lastCustomFieldValue() {
const lastCustomField = CustomFields.findOne(
const lastCustomField = ReactiveCache.getCustomField(
this.currentData().activity.customFieldId,
);
if (!lastCustomField) return null;
@@ -282,10 +283,10 @@ Template.activity.helpers({
Template.commentReactions.events({
'click .reaction'(event) {
if (Meteor.user().isBoardMember()) {
if (ReactiveCache.getCurrentUser().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
const cardComment = ReactiveCache.getCardComment(commentId);
cardComment.toggleReaction(codepoint);
}
},
@@ -294,10 +295,10 @@ Template.commentReactions.events({
Template.addReactionPopup.events({
'click .add-comment-reaction'(event) {
if (Meteor.user().isBoardMember()) {
if (ReactiveCache.getCurrentUser().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
const cardComment = ReactiveCache.getCardComment(commentId);
cardComment.toggleReaction(codepoint);
}
Popup.back();
@@ -325,12 +326,13 @@ Template.addReactionPopup.helpers({
Template.commentReactions.helpers({
isSelected(userIds) {
return userIds.includes(Meteor.user()._id);
return Meteor.userId() && userIds.includes(Meteor.userId());
},
userNames(userIds) {
return Users.find({_id: {$in: userIds}})
.map(user => user.profile.fullname)
.join(', ');
const ret = ReactiveCache.getUsers({_id: {$in: userIds}})
.map(user => user.profile.fullname)
.join(', ');
return ret;
}
})
+3 -1
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
const commentFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
@@ -24,7 +26,7 @@ BlazeComponent.extendComponent({
let boardId = card.boardId;
let cardId = card._id;
if (card.isLinkedCard()) {
boardId = Cards.findOne(card.linkedId).boardId;
boardId = ReactiveCache.getCard(card.linkedId).boardId;
cardId = card.linkedId;
} else if (card.isLinkedBoard()) {
boardId = card.linkedId;
@@ -14,6 +14,7 @@ template(name="archivedBoards")
i.fa.fa-undo
| {{_ 'restore-board'}}
= title
span {{ moment archivedAt 'LLL' }}
else
li.no-items-message {{_ 'no-archived-boards'}}
+9 -6
View File
@@ -1,19 +1,22 @@
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
onCreated() {
this.subscribe('archivedBoards');
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
return ReactiveCache.getCurrentUser().isBoardAdmin();
},
archivedBoards() {
return Boards.find(
const ret = ReactiveCache.getBoards(
{ archived: true },
{
sort: { archivedAt: -1, modifiedAt: -1 },
},
);
return ret;
},
events() {
@@ -25,8 +28,8 @@ BlazeComponent.extendComponent({
Meteor.settings &&
Meteor.settings.public &&
Meteor.settings.public.sandstorm;
if (isSandstorm && Session.get('currentBoard')) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
if (isSandstorm && Utils.getCurrentBoardId()) {
const currentBoard = Utils.getCurrentBoard();
currentBoard.archive();
}
const board = this.currentData();
@@ -39,8 +42,8 @@ BlazeComponent.extendComponent({
Meteor.settings &&
Meteor.settings.public &&
Meteor.settings.public.sandstorm;
if (isSandstorm && Session.get('currentBoard')) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
if (isSandstorm && Utils.getCurrentBoardId()) {
const currentBoard = Utils.getCurrentBoard();
Boards.remove(currentBoard._id);
}
Boards.remove(this._id);
+56
View File
@@ -19,6 +19,7 @@
.board-wrapper .board-canvas.is-sibling-sidebar-open {
margin-right: 248px;
}
.board-wrapper .board-canvas.overlayed {overflow:hidden}
.board-wrapper .board-canvas .board-overlay {
position: fixed;
left: 0;
@@ -167,3 +168,58 @@
border-color: #2b004d;
color: #fff !important;
}
/* Modal Styles */
.modal {
display: none;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 9999;
background-color: rgba(0, 0, 0, 0.5);
width: 100%;
height: 100%;
}
.modal-dialog {
display: flex;
justify-content: center;
align-items: center;
height: 25%; /* Adjust the height to make it smaller */
position: relative;
margin: 10% auto; /* This margin will help center the modal vertically */
max-width: 400px; /* Adjust the max-width to make it smaller */
background-color: #fff;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
.modal-header {
display: flex;
justify-content: center;
align-items: center;
padding-bottom: 1px;
border-bottom: 1px solid #ccc;
}
.modal-title {
display: flex;
justify-content: center;
align-items: center;
margin: 0;
font-size: 18px;
}
.modal-footer {
display: flex;
justify-content: center;
align-items: center;
padding-top: 4px;
border-top: 1px solid #ccc;
}
.close {
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: 5px;
right: 5px;
font-size: 25px;
cursor: pointer;
}
+2 -1
View File
@@ -21,7 +21,8 @@ template(name="boardBody")
.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}}")
class="{{#if draggingActive.get}}is-dragging-active{{/if}}"
class="{{#if showOverlay.get}}overlayed{{/if}}")
if showOverlay.get
.board-overlay
if currentBoard.isTemplatesBoard
+82 -33
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
const subManager = new SubsManager();
@@ -43,9 +44,9 @@ BlazeComponent.extendComponent({
this.mouseHasEnterCardDetails = false;
// fix swimlanes sort field if there are null values
const currentBoardData = Boards.findOne(Session.get('currentBoard'));
const currentBoardData = Utils.getCurrentBoard();
const nullSortSwimlanes = currentBoardData.nullSortSwimlanes();
if (nullSortSwimlanes.count() > 0) {
if (nullSortSwimlanes.length > 0) {
const swimlanes = currentBoardData.swimlanes();
let count = 0;
swimlanes.forEach(s => {
@@ -60,7 +61,7 @@ BlazeComponent.extendComponent({
// fix lists sort field if there are null values
const nullSortLists = currentBoardData.nullSortLists();
if (nullSortLists.count() > 0) {
if (nullSortLists.length > 0) {
const lists = currentBoardData.lists();
let count = 0;
lists.forEach(l => {
@@ -193,7 +194,7 @@ BlazeComponent.extendComponent({
});
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$swimlanesDom.sortable({
handle: '.js-swimlane-header-handle',
});
@@ -204,34 +205,27 @@ BlazeComponent.extendComponent({
}
// Disable drag-dropping if the current user is not a board member
//$swimlanesDom.sortable('option', 'disabled', !userIsMember());
$swimlanesDom.sortable(
'option',
'disabled',
!Meteor.user() || !Meteor.user().isBoardAdmin(),
!ReactiveCache.getCurrentUser()?.isBoardAdmin(),
);
});
function userIsMember() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly()
);
}
// If there is no data in the board (ie, no lists) we autofocus the list
// creation form by clicking on the corresponding element.
const currentBoard = Boards.findOne(Session.get('currentBoard'));
if (userIsMember() && currentBoard.lists().count() === 0) {
const currentBoard = Utils.getCurrentBoard();
if (Utils.canModifyBoard() && currentBoard.lists().length === 0) {
boardComponent.openNewListForm();
}
Utils.setBackgroundImage();
},
notDisplayThisBoard(){
notDisplayThisBoard() {
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
let currentBoard = Boards.findOne(Session.get('currentBoard'));
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue && currentBoard.permission == 'public'){
let currentBoard = Utils.getCurrentBoard();
if (allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue && currentBoard.permission == 'public') {
return true;
}
@@ -239,7 +233,7 @@ BlazeComponent.extendComponent({
},
isViewSwimlanes() {
currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-swimlanes';
} else {
@@ -250,7 +244,7 @@ BlazeComponent.extendComponent({
},
isViewLists() {
currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-lists';
} else {
@@ -259,7 +253,7 @@ BlazeComponent.extendComponent({
},
isViewCalendar() {
currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-cal';
} else {
@@ -319,7 +313,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onRendered() {
this.autorun(function() {
this.autorun(function () {
$('#calendar-view').fullCalendar('refetchEvents');
});
},
@@ -328,6 +322,7 @@ BlazeComponent.extendComponent({
id: 'calendar-view',
defaultView: 'agendaDay',
editable: true,
selectable: true,
timezone: 'local',
weekNumbers: true,
header: {
@@ -349,9 +344,9 @@ BlazeComponent.extendComponent({
},
locale: TAPi18n.getLanguage(),
events(start, end, timezone, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
const events = [];
const pushEvent = function(card, title, start, end, extraCls) {
const pushEvent = function (card, title, start, end, extraCls) {
start = start || card.startAt;
end = end || card.endAt;
title = title || card.title;
@@ -375,12 +370,12 @@ BlazeComponent.extendComponent({
};
currentBoard
.cardsInInterval(start.toDate(), end.toDate())
.forEach(function(card) {
.forEach(function (card) {
pushEvent(card);
});
currentBoard
.cardsDueInBetween(start.toDate(), end.toDate())
.forEach(function(card) {
.forEach(function (card) {
pushEvent(
card,
`${card.title} ${TAPi18n.__('card-due')}`,
@@ -388,14 +383,14 @@ BlazeComponent.extendComponent({
new Date(card.dueAt.getTime() + 36e5),
);
});
events.sort(function(first, second) {
events.sort(function (first, second) {
return first.id > second.id ? 1 : -1;
});
callback(events);
},
eventResize(event, delta, revertFunc) {
let isOk = false;
const card = Cards.findOne(event.id);
const card = ReactiveCache.getCard(event.id);
if (card) {
card.setEnd(event.end.toDate());
@@ -407,12 +402,14 @@ BlazeComponent.extendComponent({
},
eventDrop(event, delta, revertFunc) {
let isOk = false;
const card = Cards.findOne(event.id);
const card = ReactiveCache.getCard(event.id);
if (card) {
// TODO: add a flag for allDay events
if (!event.allDay) {
card.setStart(event.start.toDate());
card.setEnd(event.end.toDate());
// https://github.com/wekan/wekan/issues/2917#issuecomment-1236753962
//card.setStart(event.start.toDate());
//card.setEnd(event.end.toDate());
card.setDue(event.start.toDate());
isOk = true;
}
}
@@ -420,10 +417,62 @@ BlazeComponent.extendComponent({
revertFunc();
}
},
select: function (startDate) {
const currentBoard = Utils.getCurrentBoard();
const currentUser = ReactiveCache.getCurrentUser();
const modalElement = document.createElement('div');
modalElement.classList.add('modal', 'fade');
modalElement.setAttribute('tabindex', '-1');
modalElement.setAttribute('role', 'dialog');
modalElement.innerHTML = `
<div class="modal-dialog justify-content-center align-items-center" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">${TAPi18n.__('r-create-card')}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body text-center">
<input type="text" class="form-control" id="card-title-input" placeholder="">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="create-card-button">${TAPi18n.__('add-card')}</button>
</div>
</div>
</div>
`;
const createCardButton = modalElement.querySelector('#create-card-button');
createCardButton.addEventListener('click', function () {
const myTitle = modalElement.querySelector('#card-title-input').value;
if (myTitle) {
const firstList = currentBoard.draggableLists()[0];
const firstSwimlane = currentBoard.swimlanes()[0];
Meteor.call('createCardWithDueDate', currentBoard._id, firstList._id, myTitle, startDate.toDate(), firstSwimlane._id, function(error, result) {
if (error) {
console.log(error);
} else {
console.log("Card Created", result);
}
});
closeModal();
}
});
document.body.appendChild(modalElement);
const openModal = function() {
modalElement.style.display = 'flex';
};
const closeModal = function() {
modalElement.style.display = 'none';
};
const closeButton = modalElement.querySelector('[data-dismiss="modal"]');
closeButton.addEventListener('click', closeModal);
openModal();
}
};
},
isViewCalendar() {
currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-cal';
} else {
+58 -24
View File
@@ -782,9 +782,11 @@
background-color: rgba(255,255,255,0.3) !important;
}
.board-color-dark .list >.list-header,
/* Comment out, fixed white swimlane text not visible https://github.com/wekan/wekan/issues/4451
.board-color-dark .swimlane-header {
color: rgba(255,255,255,0.7);
}
*/
.board-color-dark .minicard-wrapper.is-selected .minicard,
.board-color-dark .minicard:hover,
.board-color-dark .minicard-composer.js-composer,
@@ -1141,7 +1143,7 @@
color: rgba(0,0,0,0.5);
position: absolute;
margin-top: -34px;
margin-let: -11px;
margin-left: -11px;
}
.board-color-clearblue a.fa,
.board-color-clearblue a i.fa {
@@ -1403,7 +1405,7 @@
background: rgba(255,255,255,0.2);
}
.board-color-modern#header #header-main-bar h1 {
font-family: Poppins;
/* font-family: Poppins; */
font-weight: bold;
}
.board-color-modern#header-quick-access #header-user-bar {
@@ -1430,13 +1432,13 @@
background: none;
}
.board-color-modern .swimlane .swimlane-header-wrap .swimlane-header {
font-family: Poppins;
/* font-family: Poppins; */
}
.board-color-modern .board-list .board-list-item {
padding: 20px;
}
.board-color-modern .board-list-item-name {
font-family: Poppins;
/* font-family: Poppins; */
}
.board-color-modern .list {
background: transparent;
@@ -1464,7 +1466,7 @@
background: none;
}
.board-color-modern .list-header .list-header-name {
font-family: Poppins;
/* font-family: Poppins; */
color: #000;
font-weight: 500;
}
@@ -1493,7 +1495,7 @@
padding: 3px 5px;
}
.board-color-modern .header-title {
font-family: Poppins;
/* font-family: Poppins; */
font-size: 16px;
color: #333;
}
@@ -1509,7 +1511,7 @@
background: #eee;
}
.board-color-modern .pop-over .header .header-title {
font-family: Poppins;
/* font-family: Poppins; */
font-size: 16px;
color: #333;
}
@@ -1547,7 +1549,7 @@
background: #eee;
}
.board-color-modern .board-color-modern section#notifications-drawer .header h5 {
font-family: Poppins;
/* font-family: Poppins; */
font-weight: bold;
}
.board-color-modern .board-color-modern section#notifications-drawer .header .close {
@@ -1593,6 +1595,11 @@
background: #262626;
color: #fff;
}
@media screen and (min-width: 801px) {
.board-color-moderndark .js-toggle-desktop-drag-handles {
padding-top: 6px
}
}
.board-color-moderndark#header #header-main-bar .board-header-btn.emphasis {
background: #2a2a2a;
}
@@ -1627,6 +1634,9 @@
background: #2a2a2a;
color: #fff;
}
#header.board-color-moderndark #header-main-bar .board-header-btn i.fa {
margin: 0 8px;
}
}
.board-color-moderndark#header ul li.current,
.board-color-moderndark#header-quick-access ul li.current {
@@ -1702,7 +1712,6 @@
background: rgba(255,255,255,0.2);
}
.board-color-moderndark#header #header-main-bar h1 {
font-family: Poppins;
font-weight: bold;
line-height: 0.8em;
padding-top: 10px;
@@ -1715,9 +1724,6 @@
color: #ccc;
padding: 4px 0;
}
.board-color-moderndark .swimlane .swimlane-header-wrap .swimlane-header {
font-family: Poppins;
}
.board-color-moderndark .swimlane .swimlane-header-wrap .swimlane-header-menu {
padding: 6px;
font-size: 16px;
@@ -1758,6 +1764,19 @@
line-height: 14px;
color: #eee;
}
@media screen and (max-width: 800px) {
.board-color-moderndark .list-header .list-header-name {
line-height: 40px;
}
}
@media screen and (min-width: 801px) {
.board-color-moderndark .list-header .list-header-name {
float: left;
}
.board-color-moderndark .list-header .list-header-menu {
padding: 0 10px 10px;
}
}
.board-color-moderndark .list-header .list-header-menu {
padding: 10px;
top: 0;
@@ -1815,19 +1834,20 @@
background-color: #4d4d4d !important;
}
.board-color-moderndark .minicard .minicard-labels {
margin-bottom: 4px;
margin: 8px 0 4px;
}
.board-color-moderndark .minicard .card-label {
font-size: 11px;
font-weight: 400;
padding: 1px 6px 0;
border-radius: 2px;
line-height: 18px;
}
.board-color-moderndark .minicard .badges {
color: #bbb;
}
.board-color-moderndark .minicard .date {
margin-top: 10px;
margin-bottom: 10px;
font-size: 11px;
}
.board-color-moderndark .card-date {
@@ -1856,6 +1876,15 @@
.board-color-moderndark .card-details {
width: 98%;
}
.card-details-popup {
padding: 0px;
}
.card-details-left, .card-details-right {
padding: 0px 10px;
}
.card-details .card-details-header .card-details-menu-mobile-web {
margin-right: 0;
}
}
@media screen and (min-width: 801px) {
.board-color-moderndark .card-details {
@@ -1947,7 +1976,7 @@
background-color: #ccc;
color: #222;
}
.board-color-moderndark .attachments-galery .attachment-item {
.board-color-moderndark .attachments-gallery .attachment-item {
color: #222;
}
.board-color-moderndark .minicard-description {
@@ -1963,7 +1992,7 @@
background-color: #333;
}
.pop-over.board-color-moderndark .header-title {
font-family: Poppins;
/* font-family: Poppins; */
font-size: 16px;
color: #ccc;
}
@@ -2045,12 +2074,14 @@
.board-color-exodark body {
background: #222;
}
/* Uncomment to fix change color selected checkmark not visible
.board-color-exodark i {
color: #00897b !important;
color: #fff !important;
}
*/
.board-color-exodark .board-canvas {
background: #222;
font-family: Poppins;
/* font-family: Poppins; */
}
.board-color-exodark .swimlane {
background: #222;
@@ -2117,10 +2148,10 @@
.board-color-exodark .sidebar-content {
box-shadow: 0 0 7px 0 #00897b;
}
.board-color-exodark .attachments-galery .attachment-item {
.board-color-exodark .attachments-gallery .attachment-item {
background: #2b2b2b;
}
.board-color-exodark .attachments-galery .attachment-item:hover {
.board-color-exodark .attachments-gallery .attachment-item:hover {
border: 1px solid #00897b;
background: #2b2b2b;
}
@@ -2147,9 +2178,12 @@
.board-color-exodark h4,
.board-color-exodark h5,
.board-color-exodark h6,
.board-color-exodark p,
.board-color-exodark a,
.board-color-exodark span {
/* Below added .card-details > to p/a/span to fix white swimlane text not visible
https://github.com/wekan/wekan/issues/4451
*/
.board-color-exodark .card-details > p,
.board-color-exodark .card-details > a,
.board-color-exodark .card-details > span {
color: #fff !important;
}
.board-color-exodark .activity-desc {
@@ -2164,7 +2198,7 @@
border: 1px solid #00897b;
}
.board-color-exodark .toggle-switch:checked ~ .toggle-label {
background-color: #00897b !important;
background-color: #fff !important;
}
.pop-over.board-color-exodark {
background: #2b2b2b;
+4 -4
View File
@@ -39,9 +39,9 @@ template(name="boardHeaderBar")
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}}
span {{#if isSortActive }}{{_ 'sort-is-on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
if isSortActive
a.board-header-btn-close.js-sort-reset(title="Remove Sort")
a.board-header-btn-close.js-sort-reset(title="{{_ 'remove-sort'}}")
i.fa.fa-times-thin
else
@@ -82,9 +82,9 @@ template(name="boardHeaderBar")
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}}
span {{#if isSortActive }}{{_ 'sort-is-on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
if isSortActive
a.board-header-btn-close.js-sort-reset(title="Remove Sort")
a.board-header-btn-close.js-sort-reset(title="{{_ 'remove-sort'}}")
i.fa.fa-times-thin
else
+18 -24
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
/*
@@ -18,14 +19,14 @@ Template.boardMenuPopup.events({
'click .js-change-board-color': Popup.open('boardChangeColor'),
'click .js-change-language': Popup.open('changeLanguage'),
'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
currentBoard.archive();
// XXX We should have some kind of notification on top of the page to
// confirm that the board was successfully archived.
FlowRouter.go('home');
}),
'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
Popup.back();
Boards.remove(currentBoard._id);
FlowRouter.go('home');
@@ -58,24 +59,24 @@ Template.boardChangeTitlePopup.events({
BlazeComponent.extendComponent({
watchLevel() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
return currentBoard && currentBoard.getWatchLevel(Meteor.userId());
},
isStarred() {
const boardId = Session.get('currentBoard');
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
return user && user.hasStarred(boardId);
},
// Only show the star counter if the number of star is greater than 2
showStarCounter() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
return currentBoard && currentBoard.stars >= 2;
},
/*
showSort() {
return Meteor.user().hasSortBy();
return ReactiveCache.getCurrentUser().hasSortBy();
},
directionClass() {
return this.currentDirection() === -1 ? DOWNCLS : UPCLS;
@@ -85,10 +86,10 @@ BlazeComponent.extendComponent({
Meteor.call('setListSortBy', direction + this.currentListSortBy());
},
currentDirection() {
return Meteor.user().getListSortByDirection();
return ReactiveCache.getCurrentUser().getListSortByDirection();
},
currentListSortBy() {
return Meteor.user().getListSortBy();
return ReactiveCache.getCurrentUser().getListSortBy();
},
listSortShortDesc() {
return `list-label-short-${this.currentListSortBy()}`;
@@ -99,7 +100,7 @@ BlazeComponent.extendComponent({
{
'click .js-edit-board-title': Popup.open('boardChangeTitle'),
'click .js-star-board'() {
Meteor.user().toggleBoardStar(Session.get('currentBoard'));
ReactiveCache.getCurrentUser().toggleBoardStar(Session.get('currentBoard'));
},
'click .js-open-board-menu': Popup.open('boardMenu'),
'click .js-change-visibility': Popup.open('boardChangeVisibility'),
@@ -158,13 +159,6 @@ BlazeComponent.extendComponent({
}).register('boardHeaderBar');
Template.boardHeaderBar.helpers({
canModifyBoard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly()
);
},
boardView() {
return Utils.boardView();
},
@@ -313,7 +307,7 @@ const CreateBoard = BlazeComponent.extendComponent({
onSubmit(event) {
super.onSubmit(event);
// Immediately star boards crated with the headerbar popup.
Meteor.user().toggleBoardStar(this.boardId.get());
ReactiveCache.getCurrentUser().toggleBoardStar(this.boardId.get());
}
}.register('headerBarCreateBoardPopup'));
@@ -322,12 +316,12 @@ BlazeComponent.extendComponent({
return !TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
},
visibilityCheck() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
return this.currentData() === currentBoard.permission;
},
selectBoardVisibility() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
const visibility = this.currentData();
currentBoard.setVisibility(visibility);
Popup.back();
@@ -344,7 +338,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
watchLevel() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
return currentBoard.getWatchLevel(Meteor.userId());
},
@@ -384,7 +378,7 @@ BlazeComponent.extendComponent({
allowedSortValues() {
const types = [];
const pushed = {};
Meteor.user()
ReactiveCache.getCurrentUser()
.getListSortTypes()
.forEach(type => {
const key = type.replace(/^-/, '');
@@ -400,16 +394,16 @@ BlazeComponent.extendComponent({
return types;
},
Direction() {
return Meteor.user().getListSortByDirection() === -1
return ReactiveCache.getCurrentUser().getListSortByDirection() === -1
? this.downClass
: this.upClass;
},
sortby() {
return Meteor.user().getListSortBy();
return ReactiveCache.getCurrentUser().getListSortBy();
},
setSortBy(type = null) {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
if (type === null) {
type = user._getListSortBy();
} else {
+1 -1
View File
@@ -1,4 +1,4 @@
@import url("css/reset.css") print, screen;
@import url("../../../css/reset.css") print, screen;
.board-list {
margin: 0 8px;
+16 -14
View File
@@ -62,10 +62,10 @@ template(name="boardList")
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 isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
title="{{_ 'drag-board'}}")
else
if isSandstorm
i.fa.js-clone-board(
@@ -94,16 +94,18 @@ template(name="boardList")
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
+viewer
= title
if allowsBoardMemberList
.minicard-members
each member in boardMembers _id
a.name
+userAvatar(userId=member noRemove=true)
if allowsCardCounterList
.minicard-lists.flex.flex-wrap
each list in boardLists _id
.item
| {{ list }}
unless currentSetting.hideBoardMemberList
if allowsBoardMemberList
.minicard-members
each member in boardMembers _id
a.name
+userAvatar(userId=member noRemove=true)
unless currentSetting.hideCardCounterList
if allowsCardCounterList
.minicard-lists.flex.flex-wrap
each list in boardLists _id
.item
| {{ list }}
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
@@ -114,10 +116,10 @@ template(name="boardList")
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 isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
title="{{_ 'drag-board'}}")
else
if isSandstorm
i.fa.js-clone-board(
+83 -92
View File
@@ -1,7 +1,21 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
const subManager = new SubsManager();
Template.boardList.helpers({
hideCardCounterList() {
/* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214
return Utils.isMiniScreen() && Session.get('currentBoard'); */
return true;
},
hideBoardMemberList() {
/* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214
return Utils.isMiniScreen() && Session.get('currentBoard'); */
return true;
},
})
Template.boardListHeaderBar.events({
'click .js-open-archived-board'() {
Modal.open('archivedBoards');
@@ -17,10 +31,10 @@ Template.boardListHeaderBar.helpers({
//}
},
templatesBoardId() {
return Meteor.user() && Meteor.user().getTemplatesBoardId();
return ReactiveCache.getCurrentUser()?.getTemplatesBoardId();
},
templatesBoardSlug() {
return Meteor.user() && Meteor.user().getTemplatesBoardSlug();
return ReactiveCache.getCurrentUser()?.getTemplatesBoardSlug();
},
});
@@ -28,9 +42,9 @@ BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('setting');
Meteor.subscribe('tableVisibilityModeSettings');
let currUser = Meteor.user();
let currUser = ReactiveCache.getCurrentUser();
let userLanguage;
if(currUser && currUser.profile){
if (currUser && currUser.profile) {
userLanguage = currUser.profile.language
}
if (userLanguage) {
@@ -72,66 +86,48 @@ BlazeComponent.extendComponent({
// 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);
},
});
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$boards.sortable({
handle: '.board-handle',
});
}
});
},
userHasTeams(){
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
userHasTeams() {
if (ReactiveCache.getCurrentUser()?.teams?.length > 0)
return true;
else
return false;
},
teamsDatas() {
if(Meteor.user().teams)
return Meteor.user().teams.sort((a, b) => a.teamDisplayName.localeCompare(b.teamDisplayName));
const teams = ReactiveCache.getCurrentUser()?.teams
if (teams)
return teams.sort((a, b) => a.teamDisplayName.localeCompare(b.teamDisplayName));
else
return [];
},
userHasOrgs(){
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
userHasOrgs() {
if (ReactiveCache.getCurrentUser()?.orgs?.length > 0)
return true;
else
return false;
},
/*
userHasTemplates(){
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
return true;
else
return false;
},
*/
orgsDatas() {
if(Meteor.user().orgs)
return Meteor.user().orgs.sort((a, b) => a.orgDisplayName.localeCompare(b.orgDisplayName));
const orgs = ReactiveCache.getCurrentUser()?.orgs;
if (orgs)
return orgs.sort((a, b) => a.orgDisplayName.localeCompare(b.orgDisplayName));
else
return [];
},
userHasOrgsOrTeams(){
let boolUserHasOrgs;
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
boolUserHasOrgs = true;
else
boolUserHasOrgs = false;
let boolUserHasTeams;
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
boolUserHasTeams = true;
else
boolUserHasTeams = false;
return (boolUserHasOrgs || boolUserHasTeams);
userHasOrgsOrTeams() {
const ret = this.userHasOrgs() || this.userHasTeams();
return ret;
},
boards() {
let query = {
@@ -139,50 +135,44 @@ BlazeComponent.extendComponent({
// { type: { $in: ['board','template-container'] } },
$and: [
{ archived: false },
{ type: { $in: ['board','template-container'] } },
{ $or:[] }
{ type: { $in: ['board', 'template-container'] } },
{ $or: [] },
{ title: { $not: { $regex: /^\^.*\^$/ } } }
]
};
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
if (FlowRouter.getRouteName() === 'home'){
query.$and[2].$or.push({'members.userId': Meteor.userId()});
if (FlowRouter.getRouteName() === 'home') {
query.$and[2].$or.push({ 'members.userId': Meteor.userId() });
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue){
query.$and.push({'permission': 'private'});
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,
// },
// });
const currUser = ReactiveCache.getCurrentUser();
let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
if(orgIdsUserBelongs && 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}});
query.$and[2].$or.push({ 'orgs.orgId': { $in: orgsIds } });
}
let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
if(teamIdsUserBelongs && 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}});
query.$and[2].$or.push({ 'teams.teamId': { $in: teamsIds } });
}
}
else if(allowPrivateVisibilityOnly !== undefined && !allowPrivateVisibilityOnly.booleanValue){
else if (allowPrivateVisibilityOnly !== undefined && !allowPrivateVisibilityOnly.booleanValue) {
query = {
archived: false,
//type: { $in: ['board','template-container'] },
@@ -191,51 +181,54 @@ BlazeComponent.extendComponent({
};
}
return Boards.find(query, {
const ret = ReactiveCache.getBoards(query, {
sort: { sort: 1 /* boards default sorting */ },
});
return ret;
},
boardLists(boardId) {
let boardLists = [];
const lists = Lists.find({'boardId' : boardId})
lists.forEach(list => {
let cardCount = Cards.find({'boardId':boardId, 'listId':list._id}).count()
boardLists.push(`${list.title}: ${cardCount}`);
/* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214
const lists = ReactiveCache.getLists({ 'boardId': boardId, 'archived': false },{sort: ['sort','asc']});
const ret = lists.map(list => {
let cardCount = ReactiveCache.getCards({ 'boardId': boardId, 'listId': list._id }).length;
return `${list.title}: ${cardCount}`;
});
return boardLists
return ret;
*/
return [];
},
boardMembers(boardId) {
let boardMembers = [];
const lists = Boards.findOne({'_id' : boardId})
/* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214
const lists = ReactiveCache.getBoard(boardId)
let members = lists.members
members.forEach(member => {
boardMembers.push(member.userId);
});
return boardMembers
*/
return boardMembers;
},
isStarred() {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
return user && user.hasStarred(this.currentData()._id);
},
isAdministrable() {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
return user && user.isBoardAdmin(this.currentData()._id);
},
hasOvertimeCards() {
subManager.subscribe('board', this.currentData()._id, false);
return this.currentData().hasOvertimeCards();
},
hasSpentTimeCards() {
subManager.subscribe('board', this.currentData()._id, false);
return this.currentData().hasSpentTimeCards();
},
isInvited() {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
return user && user.isInvitedTo(this.currentData()._id);
},
@@ -245,18 +238,18 @@ BlazeComponent.extendComponent({
'click .js-add-board': Popup.open('createBoard'),
'click .js-star-board'(evt) {
const boardId = this.currentData()._id;
Meteor.user().toggleBoardStar(boardId);
ReactiveCache.getCurrentUser().toggleBoardStar(boardId);
evt.preventDefault();
},
'click .js-clone-board'(evt) {
let title = getSlug(Boards.findOne(this.currentData()._id).title) || 'cloned-board';
let title = getSlug(ReactiveCache.getBoard(this.currentData()._id).title) || 'cloned-board';
Meteor.call(
'copyBoard',
this.currentData()._id,
{
sort: Boards.find({ archived: false }).count(),
sort: ReactiveCache.getBoards({ archived: false }).length,
type: 'board',
title: Boards.findOne(this.currentData()._id).title,
title: ReactiveCache.getBoard(this.currentData()._id).title,
},
(err, res) => {
if (err) {
@@ -291,10 +284,10 @@ BlazeComponent.extendComponent({
}
});
},
'click #resetBtn'(event){
'click #resetBtn'(event) {
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
for(let i=0; i < allBoards.length; i++){
for (let i = 0; i < allBoards.length; i++) {
currBoard = allBoards[i];
currBoard.style.display = "block";
}
@@ -302,57 +295,55 @@ BlazeComponent.extendComponent({
'click #filterBtn'(event) {
event.preventDefault();
let selectedTeams = document.querySelectorAll('#jsAllBoardTeams option:checked');
let selectedTeamsValues = Array.from(selectedTeams).map(function(elt){return elt.value});
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});
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){
if (selectedTeamsValues.length > 0 || selectedOrgsValues.length > 0) {
const query = {
$and: [
{ archived: false },
{ type: 'board' },
{ $or:[] }
{ $or: [] }
]
};
if(selectedTeamsValues.length > 0)
{
query.$and[2].$or.push({'teams.teamId': {$in : selectedTeamsValues}});
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}});
if (selectedOrgsValues.length > 0) {
query.$and[2].$or.push({ 'orgs.orgId': { $in: selectedOrgsValues } });
}
let filteredBoards = Boards.find(query, {}).fetch();
let filteredBoards = ReactiveCache.getBoards(query, {});
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
if(filteredBoards.length > 0){
if (filteredBoards.length > 0) {
let currBoardId;
let found;
for(let i=0; i < allBoards.length; i++){
for (let i = 0; i < allBoards.length; i++) {
currBoard = allBoards[i];
currBoardId = currBoard.classList[0];
found = filteredBoards.find(function(board){
found = filteredBoards.find(function (board) {
return board._id == currBoardId;
});
if(found !== undefined)
if (found !== undefined)
currBoard.style.display = "block";
else
currBoard.style.display = "none";
}
}
else{
for(let i=0; i < allBoards.length; i++){
else {
for (let i = 0; i < allBoards.length; i++) {
currBoard = allBoards[i];
currBoard.style.display = "none";
}
+165 -55
View File
@@ -1,81 +1,191 @@
.attachments-galery {
display: flex;
flex-wrap: wrap;
.hidden {
display: none;
}
.attachments-galery .attachment-item {
width: 31.33%;
margin: 10px 1% 0;
.attachment-upload {
text-align: center;
border-radius: 3px;
overflow: auto;
background: #ededed;
min-height: 120px;
font-weight: bold;
}
.attachments-galery .attachment-item:hover {
.attachment-gallery {
display: flex;
flex-direction: column;
}
.attachment-item {
display: flex;
flex-direction: row;
align-items: center;
margin-top: 16px;
}
.attachment-item:hover {
background: #e0e0e0;
}
.attachments-galery .attachment-item.add-attachment {
display: flex;
align-items: center;
}
.attachments-galery .attachment-item.add-attachment a {
.attachment-thumbnail-container {
display: block;
margin: auto;
width: 150px;
min-width: 150px;
max-height: 150px;
padding-right: 16px;
}
.attachments-galery .attachment-item .attachment-thumbnail {
height: 80px;
.attachment-thumbnail {
max-width: 150px;
max-height: 150px;
min-height: 2em;
cursor: pointer;
}
.attachment-thumbnail-text {
min-height: 2em;
display: flex;
align-items: center;
justify-content: center;
position: relative;
font-size: 2em;
cursor: pointer;
border: 1px solid #ccc;
border-radius: 5px;
}
.attachments-galery .attachment-item .attachment-thumbnail .attachment-thumbnail-img {
.attachment-details-container {
display: block;
flex-grow: 1;
}
.attachment-details {
display: flex;
justify-content: space-between;
margin-right: 25px; /* Make sure the icons are not to far to the right */
}
.attachment-actions {
display: flex;
flex-direction: row;
align-items: center;
}
.add-attachment {
display: flex;
align-items: center;
justify-content: center;
border: 1px dashed #555;
border-radius: 5px;
padding: 10px;
cursor: pointer;
margin-top: 16px;
}
.icon {
font-size: 1.5em;
cursor: pointer;
margin-left: 10px;
}
.icon:hover {
color: #666;
}
#viewer-overlay {
width: 100%;
height: 100vh;
position: fixed;
top: 48px; /* height of the navbar */
left: 0;
z-index: 9999 !important;
background: rgba(13,13,13,0.95);
}
#viewer-container {
display: flex;
flex-direction: row;
justify-content: space-between;
height: 100%;
}
#viewer-top-bar {
display: flex;
flex-direction: row;
justify-content: space-between;
width: 100%;
padding: 16px;
}
#attachment-name {
color: white;
font-size: 1.5em;
max-width: calc(100% - 50px); /* Make sure the name does not overlap the close button */
}
#viewer-close {
color:white;
cursor: pointer;
font-size: 4em;
top: 0;
right: 8px;
position: absolute;
}
.attachment-arrow {
font-size: 4em;
color:white;
cursor: pointer;
align-self: center;
margin: 0 20px;
}
#image-viewer {
background:
repeating-conic-gradient(#808080 0% 25%, transparent 0% 50%)
50% / 20px 20px; /* Checkerboard background for transparent images */
max-width: 100%;
max-height: 100%;
max-width: 100%;
}
.attachments-galery .attachment-item .attachment-thumbnail .attachment-thumbnail-ext {
text-transform: uppercase;
font-size: 1.6em;
#pdf-viewer {
width: 40vw;
height: 100vh;
}
.attachments-galery .attachment-item .attachment-details {
font-size: 0.75em;
margin: 3px;
#txt-viewer{
background-color: white;
width: 40vw;
height: 100vh;
}
.attachments-galery .attachment-item .attachment-details .attachment-details-actions a {
.pdf-preview-error {
margin-top: 20vh;
display: block;
font-size: 2em;
color: white;
}
.attachments-galery .attachment-item .attachment-details .attachment-details-actions a.attachment-details-menu {
padding-top: 10px;
}
.attachment-image-preview {
max-width: 100px;
display: block;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
.preview-clipboard-image {
width: 280px;
max-width: 100%;
height: 200px;
display: block;
border: 1px solid #000;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
@media screen and (max-width: 1600px) {
#pdf-viewer {
width: 60vw;
}
}
@media screen and (max-width: 800px) {
.attachments-galery .attachment-item {
width: 48%;
#viewer-container {
display: block;
}
.attachments-galery .attachment-item .attachment-thumbnail {
height: 130px;
.attachment-arrow{
position: absolute;
bottom: 2.2em;
font-size: 1.6em;
padding: 16px;
}
.attachments-galery .attachment-item .attachment-details {
font-size: 1.1em;
#prev-attachment{
left: 0;
}
}
@media screen and (max-width: 360px) {
.attachments-galery .attachment-item {
#next-attachment{
right: 0;
}
#pdf-viewer {
width: 100%;
height: calc(100vh - 155px); /* Full height - height of top and bottom bars */
}
#txt-viewer {
width: 100%;
height: calc(100vh - 155px); /* Full height - height of top and bottom bars */
}
#audio-viewer {
margin-top: 20%;
width: 100%;
}
.attachments-galery .attachment-item .attachment-thumbnail {
height: 200px;
.attachment-thumbnail-container {
width: 100px;
min-width: 100px;
}
.attachment-thumbnail {
max-width: 100px;
}
.attachment-details {
flex-direction: column;
margin-right: 0px;
}
.attachment-actions {
flex-direction: row;
margin-top: 10px;
}
}
+101 -54
View File
@@ -1,10 +1,25 @@
template(name="cardAttachmentsPopup")
ul.pop-over-list
li
input.js-attach-file.hide(type="file" name="file" multiple)
a.js-computer-upload {{_ 'computer'}}
li
a.js-upload-clipboard-image {{_ 'clipboard'}}
if $gt uploads.length 0
.attachment-upload {{_ 'uploading'}}
table
tr
th.upload-file-name-descr {{_ 'name'}}
th.upload-progress-descr {{_ 'progress'}}
th.upload-remaining-descr {{_ 'remaining_time'}}
th.upload-speed-descr {{_ 'speed'}}
each upload in uploads
tr
td.upload-file-name-value {{upload.file.name}}
td.upload-progress-value {{upload.progress.get}}%
td.upload-remaining-value {{getEstimateTime upload}}
td.upload-speed-value {{getEstimateSpeed upload}}
else
ul.pop-over-list
li
input.js-attach-file.hide(type="file" name="file" multiple)
a.js-computer-upload {{_ 'computer'}}
li
a.js-upload-clipboard-image {{_ 'clipboard'}}
template(name="previewClipboardImagePopup")
p <kbd>Ctrl</kbd>+<kbd>V</kbd> {{_ "paste-or-dragdrop"}}
@@ -15,66 +30,92 @@ template(name="attachmentDeletePopup")
p {{_ "attachment-delete-pop"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
template(name="attachmentsGalery")
.attachments-galery
each attachments
.attachment-item
a.attachment-thumbnail(href="{{link}}" title="{{name}}" data-lightbox="{{name}}")
if link
if isImage
img.attachment-thumbnail-img(src="{{link}}")
else if($eq extension 'mp3')
video(width="100%" height="100%" controls="true")
source(src="{{link}}" type="audio/mpeg")
else if($eq extension 'ogg')
video(width="100%" height="100%" controls="true")
source(src="{{link}}" type="video/ogg")
else if($eq extension 'webm')
video(width="100%" height="100%" controls="true")
source(src="{{link}}" type="video/webm")
else if($eq extension 'mp4')
video(width="100%" height="100%" controls="true")
source(src="{{link}}" type="video/mp4")
else
span.attachment-thumbnail-ext= extension
else
+spinner
p.attachment-details
= name
span.file-size ({{fileSize size}} KB)
span.attachment-details-actions
a.js-download(href="{{link}}?download=true", download="{{name}}")
i.fa.fa-download
| {{_ 'download'}}
if currentUser.isBoardMember
unless currentUser.isCommentOnly
unless currentUser.isWorker
a.fa.fa-navicon.attachment-details-menu.js-open-attachment-menu(title="{{_ 'attachmentActionsPopup-title'}}")
template(name="attachmentViewer")
#viewer-overlay.hidden
#viewer-top-bar
span#attachment-name
a#viewer-close.fa.fa-times-thin
#viewer-container
i.fa.fa-chevron-left.attachment-arrow#prev-attachment
#viewer-content
img#image-viewer.hidden
video#video-viewer.hidden(controls="true")
audio#audio-viewer.hidden(controls="true")
object#pdf-viewer.hidden(type="application/pdf")
span.pdf-preview-error {{_ 'preview-pdf-not-supported' }}
object#txt-viewer.hidden(type="text/plain")
i.fa.fa-chevron-right.attachment-arrow#next-attachment
template(name="attachmentGallery")
.attachment-gallery
a.attachment-item.add-attachment.js-add-attachment
i.fa.fa-plus.icon
each attachments
.attachment-item
.attachment-thumbnail-container.open-preview(data-attachment-id="{{_id}}" data-card-id="{{ meta.cardId }}")
if link
if(isImage)
img.attachment-thumbnail(src="{{link}}" title="{{sanitize name}}")
else if($eq extension 'svg')
img.attachment-thumbnail(src="{{link}}" title="{{sanitize name}}" type="image/svg+xml")
else if($eq extension 'mp3')
video.attachment-thumbnail(title="{{sanitize name}}")
source(src="{{link}}" type="audio/mpeg")
else if($eq extension 'ogg')
video.attachment-thumbnail(title="{{sanitize name}}")
source(src="{{link}}" type="video/ogg")
else if($eq extension 'webm')
video.attachment-thumbnail(title="{{sanitize name}}")
source(src="{{link}}" type="video/webm")
else if($eq extension 'mp4')
video.attachment-thumbnail(title="{{sanitize name}}")
source(src="{{link}}" type="video/mp4")
else
span.attachment-thumbnail-text= extension
.attachment-details-container
.attachment-details
div
b
= name
span.file-size ({{fileSize size}})
.attachment-actions
a.js-download(href="{{link}}?download=true", download="{{name}}")
i.fa.fa-download.icon(title="{{_ 'download'}}")
if currentUser.isBoardMember
unless currentUser.isCommentOnly
unless currentUser.isWorker
a.js-rename
i.fa.fa-pencil-square-o.icon(title="{{_ 'rename'}}")
a.js-confirm-delete
i.fa.fa-trash.icon(title="{{_ 'delete'}}")
a.fa.fa-navicon.icon.js-open-attachment-menu(data-attachment-link="{{link}}" title="{{_ 'attachmentActionsPopup-title'}}")
if currentUser.isBoardMember
unless currentUser.isCommentOnly
unless currentUser.isWorker
//li.attachment-item.add-attachment
a.js-add-attachment(title="{{_ 'add-attachment' }}")
i.fa.fa-plus
template(name="attachmentActionsPopup")
ul.pop-over-list
li
if isImage
a(class="{{#if isCover}}js-remove-cover{{else}}js-add-cover{{/if}}")
i.fa.fa-thumb-tack
i.fa.fa-book
i.fa.fa-picture-o
if isCover
| {{_ 'remove-cover'}}
else
| {{_ 'add-cover'}}
if currentUser.isBoardAdmin
a.js-rename
i.fa.fa-pencil-square-o
| {{_ 'rename'}}
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
if isImage
a(class="{{#if isBackgroundImage}}js-remove-background-image{{else}}js-add-background-image{{/if}}")
i.fa.fa-picture-o
if isBackgroundImage
| {{_ 'remove-background-image'}}
else
| {{_ 'add-background-image'}}
p.attachment-storage
| {{versions.original.storage}}
@@ -89,6 +130,12 @@ template(name="attachmentActionsPopup")
i.fa.fa-arrow-right
| {{_ 'attachment-move-storage-gridfs'}}
if $neq versions.original.storage "s3"
if versions.original.storage
a.js-move-storage-s3
i.fa.fa-arrow-right
| {{_ 'attachment-move-storage-s3'}}
template(name="attachmentRenamePopup")
input.js-edit-attachment-name(type='text' autofocus value="{{getNameWithoutExtension}}" dir="auto")
.edit-controls.clearfix
+357 -37
View File
@@ -1,4 +1,31 @@
Template.attachmentsGalery.events({
import { ReactiveCache } from '/imports/reactiveCache';
import { ObjectID } from 'bson';
import DOMPurify from 'dompurify';
const filesize = require('filesize');
const prettyMilliseconds = require('pretty-ms');
// We store current card ID and the ID of currently opened attachment in a
// global var. This is used so that we know what's the next attachment to open
// when the user clicks on the prev/next button in the attachment viewer.
let cardId = null;
let openAttachmentId = null;
// Used to store the start and end coordinates of a touch event for attachment swiping
let touchStartCoords = null;
let touchEndCoords = null;
// Stores link to the attachment for which attachment actions popup was opened
attachmentActionsLink = null;
Template.attachmentGallery.events({
'click .open-preview'(event) {
openAttachmentId = $(event.currentTarget).attr("data-attachment-id");
cardId = $(event.currentTarget).attr("data-card-id");
openAttachmentViewer(openAttachmentId);
},
'click .js-add-attachment': Popup.open('cardAttachments'),
// If we let this event bubble, FlowRouter will handle it and empty the page
// content, see #101.
@@ -6,44 +33,316 @@ Template.attachmentsGalery.events({
event.stopPropagation();
},
'click .js-open-attachment-menu': Popup.open('attachmentActions'),
'mouseover .js-open-attachment-menu'(event) { // For some reason I cannot combine handlers for "click .js-open-attachment-menu" and "mouseover .js-open-attachment-menu" events so this is a quick workaround.
attachmentActionsLink = event.currentTarget.getAttribute("data-attachment-link");
},
'click .js-rename': Popup.open('attachmentRename'),
'click .js-confirm-delete': Popup.afterConfirm('attachmentDelete', function() {
Attachments.remove(this._id);
Popup.back(2);
}),
});
Template.attachmentsGalery.helpers({
function getNextAttachmentId(currentAttachmentId, offset = 0) {
const attachments = ReactiveCache.getAttachments({'meta.cardId': cardId});
let i = 0;
for (; i < attachments.length; i++) {
if (attachments[i]._id === currentAttachmentId) {
break;
}
}
return attachments[(i + offset + 1 + attachments.length) % attachments.length]._id;
}
function getPrevAttachmentId(currentAttachmentId, offset = 0) {
const attachments = ReactiveCache.getAttachments({'meta.cardId': cardId});
let i = 0;
for (; i < attachments.length; i++) {
if (attachments[i]._id === currentAttachmentId) {
break;
}
}
return attachments[(i + offset - 1 + attachments.length) % attachments.length]._id;
}
function attachmentCanBeOpened(attachment) {
return (
attachment.isImage ||
attachment.isPDF ||
attachment.isText ||
attachment.isJSON ||
attachment.isVideo ||
attachment.isAudio
);
}
function openAttachmentViewer(attachmentId) {
const attachment = ReactiveCache.getAttachment(attachmentId);
// Check if we can open the attachment (if we have a viewer for it) and exit if not
if (!attachmentCanBeOpened(attachment)) {
return;
}
/*
Instructions for adding a new viewer:
- add a new case to the switch statement below
- implement cleanup in the closeAttachmentViewer() function, if necessary
- mark attachment type as openable by adding a new condition to the attachmentCanBeOpened function
*/
switch(true){
case (attachment.isImage):
$("#image-viewer").attr("src", attachment.link());
$("#image-viewer").removeClass("hidden");
break;
case (attachment.isPDF):
$("#pdf-viewer").attr("data", attachment.link());
$("#pdf-viewer").removeClass("hidden");
break;
case (attachment.isVideo):
// We have to create a new <source> DOM element and append it to the video
// element, otherwise the video won't load
let videoSource = document.createElement('source');
videoSource.setAttribute('src', attachment.link());
$("#video-viewer").append(videoSource);
$("#video-viewer").removeClass("hidden");
break;
case (attachment.isAudio):
// We have to create a new <source> DOM element and append it to the audio
// element, otherwise the audio won't load
let audioSource = document.createElement('source');
audioSource.setAttribute('src', attachment.link());
$("#audio-viewer").append(audioSource);
$("#audio-viewer").removeClass("hidden");
break;
case (attachment.isText):
case (attachment.isJSON):
$("#txt-viewer").attr("data", attachment.link());
$("#txt-viewer").removeClass("hidden");
break;
}
$('#attachment-name').text(attachment.name);
$('#viewer-overlay').removeClass('hidden');
}
function closeAttachmentViewer() {
$("#viewer-overlay").addClass("hidden");
// We need to reset the viewers to avoid showing previous attachments
$("#image-viewer").attr("src", "");
$("#image-viewer").addClass("hidden");
$("#pdf-viewer").attr("data", "");
$("#pdf-viewer").addClass("hidden");
$("#txt-viewer").attr("data", "");
$("#txt-viewer").addClass("hidden");
$("#video-viewer").get(0).pause(); // Stop playback
$("#video-viewer").get(0).currentTime = 0;
$("#video-viewer").empty();
$("#video-viewer").addClass("hidden");
$("#audio-viewer").get(0).pause(); // Stop playback
$("#audio-viewer").get(0).currentTime = 0;
$("#audio-viewer").empty();
$("#audio-viewer").addClass("hidden");
}
function openNextAttachment() {
closeAttachmentViewer();
let i = 0;
// Find an attachment that can be opened
while (true) {
const id = getNextAttachmentId(openAttachmentId, i);
const attachment = ReactiveCache.getAttachment(id);
if (attachmentCanBeOpened(attachment)) {
openAttachmentId = id;
openAttachmentViewer(id);
break;
}
i++;
}
}
function openPrevAttachment() {
closeAttachmentViewer();
let i = 0;
// Find an attachment that can be opened
while (true) {
const id = getPrevAttachmentId(openAttachmentId, i);
const attachment = ReactiveCache.getAttachment(id);
if (attachmentCanBeOpened(attachment)) {
openAttachmentId = id;
openAttachmentViewer(id);
break;
}
i--;
}
}
function processTouch(){
xDist = touchEndCoords.x - touchStartCoords.x;
yDist = touchEndCoords.y - touchStartCoords.y;
console.log("xDist: " + xDist);
// Left swipe
if (Math.abs(xDist) > Math.abs(yDist) && xDist < 0) {
openNextAttachment();
}
// Right swipe
if (Math.abs(xDist) > Math.abs(yDist) && xDist > 0) {
openPrevAttachment();
}
// Up swipe
if (Math.abs(yDist) > Math.abs(xDist) && yDist < 0) {
closeAttachmentViewer();
}
}
Template.attachmentViewer.events({
'touchstart #viewer-container'(event) {
console.log("touchstart")
touchStartCoords = {
x: event.changedTouches[0].screenX,
y: event.changedTouches[0].screenY
}
},
'touchend #viewer-container'(event) {
console.log("touchend")
touchEndCoords = {
x: event.changedTouches[0].screenX,
y: event.changedTouches[0].screenY
}
processTouch();
},
'click #viewer-container'(event) {
// Make sure the click was on #viewer-container and not on any of its children
if(event.target !== event.currentTarget) {
event.stopPropagation();
return;
}
closeAttachmentViewer();
},
'click #viewer-content'(event) {
// Make sure the click was on #viewer-content and not on any of its children
if(event.target !== event.currentTarget) {
event.stopPropagation();
return;
}
closeAttachmentViewer();
},
'click #viewer-close'() {
closeAttachmentViewer();
},
'click #next-attachment'() {
openNextAttachment();
},
'click #prev-attachment'() {
openPrevAttachment();
},
});
Template.attachmentGallery.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
return ReactiveCache.getCurrentUser().isBoardAdmin();
},
fileSize(size) {
return Math.round(size / 1024);
const ret = filesize(size);
return ret;
},
sanitize(value) {
return DOMPurify.sanitize(value);
},
});
Template.cardAttachmentsPopup.onCreated(function() {
this.uploads = new ReactiveVar([]);
});
Template.cardAttachmentsPopup.helpers({
getEstimateTime(upload) {
const ret = prettyMilliseconds(upload.estimateTime.get());
return ret;
},
getEstimateSpeed(upload) {
const ret = filesize(upload.estimateSpeed.get(), {round: 0}) + "/s";
return ret;
},
uploads() {
return Template.instance().uploads.get();
}
});
Template.cardAttachmentsPopup.events({
'change .js-attach-file'(event) {
'change .js-attach-file'(event, templateInstance) {
const card = this;
if (event.currentTarget.files && event.currentTarget.files[0]) {
const fileId = Random.id();
const config = {
file: event.currentTarget.files[0],
fileId: fileId,
meta: Utils.getCommonAttachmentMetaFrom(card),
chunkSize: 'dynamic',
};
config.meta.fileId = fileId;
const uploader = Attachments.insert(
config,
false,
);
uploader.on('uploaded', (error, fileRef) => {
if (!error) {
if (fileRef.isImage) {
card.setCover(fileRef._id);
const files = event.currentTarget.files;
if (files) {
let uploads = [];
for (const file of files) {
const fileId = new ObjectID().toString();
let fileName = DOMPurify.sanitize(file.name);
// If sanitized filename is not same as original filename,
// it could be XSS that is already fixed with sanitize,
// or just normal mistake, so it is not a problem.
// That is why here is no warning.
if (fileName !== file.name) {
// If filename is empty, only in that case add some filename
if (fileName.length === 0) {
fileName = 'Empty-filename-after-sanitize.txt';
}
}
});
uploader.on('end', (error, fileRef) => {
Popup.back();
});
uploader.start();
const config = {
file: file,
fileId: fileId,
fileName: fileName,
meta: Utils.getCommonAttachmentMetaFrom(card),
chunkSize: 'dynamic',
};
config.meta.fileId = fileId;
const uploader = Attachments.insert(
config,
false,
);
uploader.on('start', function() {
uploads.push(this);
templateInstance.uploads.set(uploads);
});
uploader.on('uploaded', (error, fileRef) => {
if (!error) {
if (fileRef.isImage) {
card.setCover(fileRef._id);
}
}
});
uploader.on('end', (error, fileRef) => {
uploads = uploads.filter(_upload => _upload.config.fileId != fileRef._id);
templateInstance.uploads.set(uploads);
if (uploads.length == 0 ) {
Popup.back();
}
});
uploader.start();
}
}
},
'click .js-computer-upload'(event, templateInstance) {
@@ -96,7 +395,7 @@ Template.previewClipboardImagePopup.events({
if (pastedResults && pastedResults.file) {
const file = pastedResults.file;
window.oPasted = pastedResults;
const fileId = Random.id();
const fileId = new ObjectID().toString();
const config = {
file,
fileId: fileId,
@@ -128,25 +427,40 @@ Template.previewClipboardImagePopup.events({
BlazeComponent.extendComponent({
isCover() {
const ret = Cards.findOne(this.data().meta.cardId).coverId == this.data()._id;
const ret = ReactiveCache.getCard(this.data().meta.cardId).coverId == this.data()._id;
return ret;
},
isBackgroundImage() {
//const currentBoard = Utils.getCurrentBoard();
//return currentBoard.backgroundImageURL === $(".attachment-thumbnail-img").attr("src");
return false;
},
events() {
return [
{
'click .js-rename': Popup.open('attachmentRename'),
'click .js-confirm-delete': Popup.afterConfirm('attachmentDelete', function() {
Attachments.remove(this._id);
Popup.back(2);
}),
'click .js-add-cover'() {
Cards.findOne(this.data().meta.cardId).setCover(this.data()._id);
ReactiveCache.getCard(this.data().meta.cardId).setCover(this.data()._id);
Popup.back();
},
'click .js-remove-cover'() {
Cards.findOne(this.data().meta.cardId).unsetCover();
ReactiveCache.getCard(this.data().meta.cardId).unsetCover();
Popup.back();
},
'click .js-add-background-image'() {
const currentBoard = Utils.getCurrentBoard();
currentBoard.setBackgroundImageURL(attachmentActionsLink);
Utils.setBackgroundImage(attachmentActionsLink);
Popup.back();
event.preventDefault();
},
'click .js-remove-background-image'() {
const currentBoard = Utils.getCurrentBoard();
currentBoard.setBackgroundImageURL("");
Utils.setBackgroundImage("");
Popup.back();
Utils.reload();
event.preventDefault();
},
'click .js-move-storage-fs'() {
Meteor.call('moveAttachmentToStorage', this.data()._id, "fs");
Popup.back();
@@ -155,6 +469,10 @@ BlazeComponent.extendComponent({
Meteor.call('moveAttachmentToStorage', this.data()._id, "gridfs");
Popup.back();
},
'click .js-move-storage-s3'() {
Meteor.call('moveAttachmentToStorage', this.data()._id, "s3");
Popup.back();
},
}
]
}
@@ -180,7 +498,9 @@ BlazeComponent.extendComponent({
const name = this.$('.js-edit-attachment-name')[0]
.value
.trim() + this.data().extensionWithDot;
Meteor.call('renameAttachment', this.data()._id, name);
if (name === DOMPurify.sanitize(name)) {
Meteor.call('renameAttachment', this.data()._id, name);
}
Popup.back(2);
},
}
+7 -16
View File
@@ -2,6 +2,7 @@ import moment from 'moment/min/moment-with-locales';
import { TAPi18n } from '/imports/i18n';
import { DatePicker } from '/client/lib/datepicker';
import Cards from '/models/cards';
import { CustomFieldStringTemplate } from '/client/lib/customFields'
Template.cardCustomFieldsPopup.helpers({
hasCustomField() {
@@ -36,14 +37,6 @@ const CardCustomField = BlazeComponent.extendComponent({
self.card = Utils.getCurrentCard();
self.customFieldId = this.data()._id;
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly()
);
},
});
CardCustomField.register('cardCustomField');
@@ -245,21 +238,18 @@ CardCustomField.register('cardCustomField');
}.register('cardCustomField-dropdown'));
// cardCustomField-stringtemplate
(class extends CardCustomField {
class CardCustomFieldStringTemplate extends CardCustomField {
onCreated() {
super.onCreated();
this.stringtemplateFormat = this.data().definition.settings.stringtemplateFormat;
this.stringtemplateSeparator = this.data().definition.settings.stringtemplateSeparator;
this.customField = new CustomFieldStringTemplate(this.data().definition);
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 ?? '');
const ret = this.customField.getFormattedValue(this.data().value);
return ret;
}
getItems() {
@@ -330,4 +320,5 @@ CardCustomField.register('cardCustomField');
},
];
}
}.register('cardCustomField-stringtemplate'));
}
CardCustomFieldStringTemplate.register('cardCustomField-stringtemplate');
-11
View File
@@ -2,17 +2,6 @@ import moment from 'moment/min/moment-with-locales';
import { TAPi18n } from '/imports/i18n';
import { DatePicker } from '/client/lib/datepicker';
Template.dateBadge.helpers({
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
});
// editCardReceivedDatePopup
(class extends DatePicker {
onCreated() {
+10 -7
View File
@@ -84,7 +84,7 @@
overflow-x: hidden;
background: #f7f7f7;
border-radius: bottom 3px;
z-index: 20;
z-index: 30;
animation: flexGrowIn 0.1s;
box-shadow: 0 0 7px 0 #b3b3b3;
transition: flex-basis 0.1s;
@@ -245,6 +245,14 @@
padding-top: 10px;
}
@media screen and (min-width: 801px) {
.card-details-maximized {
top: 97px;
left: 0;
right:0;
bottom: 0;
position: fixed;
resize: both;
}
.card-details-maximized {
padding: 0;
flex-shrink: 0;
@@ -259,11 +267,6 @@
box-shadow: 0 0 7px 0 #b3b3b3;
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-maximized .card-details-left {
@@ -337,7 +340,7 @@ input[type="submit"].attachment-add-link-submit {
}
}
.card-details-white {
background: unset !important;
background: #fff !important;
color: #000 !important;
border: 1px solid #eee;
}
+41 -27
View File
@@ -2,6 +2,9 @@ template(name="cardDetailsPopup")
+cardDetails(popupCard)
template(name="cardDetails")
+attachmentViewer
section.card-details.js-card-details(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}'): .card-details-canvas
.card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}')
+inlinedForm(classNames="js-card-details-title")
@@ -266,12 +269,14 @@ template(name="cardDetails")
i.fa.fa-list-alt
= definition.name
+cardCustomField
.material-toggle-switch(title="{{_ 'change'}} {{_ 'custom-fields'}} {{_ 'layout'}}")
if customFieldsGrid
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton" checked="checked")
else
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton")
label.toggle-label(for="toggleCustomFieldsGridButton")
if $gt customFieldsWD.length 1
.material-toggle-switch(title="{{_ 'change'}} {{_ 'custom-fields'}} {{_ 'layout'}}")
if customFieldsGrid
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton" checked="checked")
else
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton")
label.toggle-label(for="toggleCustomFieldsGridButton")
a.fa.fa-plus.js-custom-fields.card-details-item.custom-fields(title="{{_ 'custom-fields'}}")
if getVoteQuestion
@@ -539,8 +544,8 @@ template(name="cardDetails")
+viewer
= getDescription
.card-checklist-attachmentGalerys
.card-checklist-attachmentGalery.card-checklists
.card-checklist-attachmentGalleries
.card-checklist-attachmentGallery.card-checklists
if currentBoard.allowsChecklists
hr
+checklists(cardId = _id)
@@ -552,8 +557,15 @@ template(name="cardDetails")
h3.card-details-item-title
i.fa.fa-paperclip
| {{_ 'attachments'}}
.card-checklist-attachmentGalery.card-attachmentGalery
+attachmentsGalery
if Meteor.settings.public.attachmentsUploadMaxSize
| {{_ 'max-upload-filesize'}} {{Meteor.settings.public.attachmentsUploadMaxSize}}
br
if Meteor.settings.public.attachmentsUploadMimeTypes
| {{_ 'allowed-upload-filetypes'}} {{Meteor.settings.public.attachmentsUploadMimeTypes}}
br
| {{_ 'invalid-file'}}
.card-checklist-attachmentGallery.card-attachmentGallery
+attachmentGallery
hr
.card-details-right
@@ -682,13 +694,12 @@ template(name="cardDetailsActionsPopup")
i.fa.fa-copy
| {{_ 'copyCardPopup-title'}}
unless currentUser.isWorker
hr
ul.pop-over-list
li
a.js-copy-checklist-cards
i.fa.fa-list
i.fa.fa-copy
| {{_ 'copyChecklistToManyCardsPopup-title'}}
i.fa.fa-copy
| {{_ 'copyManyCardsPopup-title'}}
unless archived
hr
ul.pop-over-list
@@ -712,39 +723,42 @@ template(name="exportCardPopup")
| {{_ 'export-card-pdf'}}
template(name="moveCardPopup")
+boardsAndLists
+copyAndMoveCard
template(name="copyCardPopup")
label(for='copy-card-title') {{_ 'title'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
= getTitle
+boardsAndLists
+copyAndMoveCard
template(name="copyChecklistToManyCardsPopup")
label(for='copy-checklist-cards-title') {{_ 'copyChecklistToManyCardsPopup-instructions'}}:
template(name="copyManyCardsPopup")
label(for='copy-checklist-cards-title') {{_ 'copyManyCardsPopup-instructions'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
| {{_ 'copyChecklistToManyCardsPopup-format'}}
+boardsAndLists
| {{_ 'copyManyCardsPopup-format'}}
+copyAndMoveCard
template(name="boardsAndLists")
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
+copyAndMoveCard
template(name="copyAndMoveCard")
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}}" selected="{{#if isMoveAndCopyDialogOptionBoardId _id}}selected{{/if}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionBoardId _id}}selected{{/if}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}" selected="{{#if isMoveAndCopyDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each aBoardLists
option(value="{{_id}}" selected="{{#if isMoveAndCopyDialogOptionListId _id}}selected{{/if}}") {{title}}
each lists
option(value="{{_id}}" selected="{{#if isDialogOptionListId _id}}selected{{/if}}") {{title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+156 -326
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import moment from 'moment/min/moment-with-locales';
import { TAPi18n } from '/imports/i18n';
import { DatePicker } from '/client/lib/datepicker';
@@ -10,6 +11,7 @@ import Lists from '/models/lists';
import CardComments from '/models/cardComments';
import { ALLOWED_COLORS } from '/config/const';
import { UserAvatar } from '../users/userAvatar';
import { DialogWithBoardSwimlaneList } from '/client/lib/dialogWithBoardSwimlaneList';
const subManager = new SubsManager();
const { calculateIndexData } = Utils;
@@ -62,41 +64,48 @@ BlazeComponent.extendComponent({
},
hiddenSystemMessages() {
return Meteor.user().hasHiddenSystemMessages();
return ReactiveCache.getCurrentUser().hasHiddenSystemMessages();
},
customFieldsGrid() {
return Meteor.user().hasCustomFieldsGrid();
return ReactiveCache.getCurrentUser().hasCustomFieldsGrid();
},
cardMaximized() {
return !Utils.getPopupCardId() && Meteor.user().hasCardMaximized();
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
return !Utils.getPopupCardId() && ReactiveCache.getCurrentUser().hasCardMaximized();
},
scrollParentContainer() {
const cardPanelWidth = 600;
const parentComponent = this.parentComponent();
// TODO sometimes parentComponent is not available, maybe because it's not
// yet created?!
if (!parentComponent) return;
const bodyBoardComponent = parentComponent.parentComponent();
/*
// Incomplete fix about bug where opening card scrolls to wrong place
// https://github.com/wekan/wekan/issues/4572#issuecomment-1184149395
// TODO sometimes parentComponent is not available, maybe because it's not
// yet created?!
//
// uncommented again by chrisi51
// only with that, the autoscroll feature is working properly
// after my fixes, all scrollings where correct
*/
if (!parentComponent) return;
const bodyBoardComponent = parentComponent.parentComponent();
//On Mobile View Parent is Board, Not Board Body. I cant see how this funciton should work then.
if (bodyBoardComponent === null) return;
const $cardView = this.$(this.firstNode());
const $cardContainer = bodyBoardComponent.$('.js-swimlanes');
// TODO sometimes cardContainer is not available, maybe because it's not yet
// created?!
if (!$cardContainer) return;
/*
// Incomplete fix about bug where opening card scrolls to wrong place
// https://github.com/wekan/wekan/issues/4572#issuecomment-1184149395
// TODO sometimes cardContainer is not available, maybe because it's not yet
// created?!
if (!$cardContainer) return;
*/
const cardContainerScroll = $cardContainer.scrollLeft();
const cardContainerWidth = $cardContainer.width();
@@ -139,7 +148,7 @@ BlazeComponent.extendComponent({
const card = this.currentData();
let result = '#';
if (card) {
const board = Boards.findOne(card.boardId);
const board = ReactiveCache.getBoard(card.boardId);
if (board) {
result = FlowRouter.path('card', {
boardId: card.boardId,
@@ -188,15 +197,15 @@ BlazeComponent.extendComponent({
cardId: card._id,
boardId: card.boardId,
listId: card.listId,
user: Meteor.user().username,
user: ReactiveCache.getCurrentUser().username,
url: '',
};
const integrations = Integrations.find({
const integrations = ReactiveCache.getIntegrations({
boardId: { $in: [card.boardId, Integrations.Const.GLOBAL_WEBHOOK_ID] },
enabled: true,
activities: { $in: ['CardDetailsRendered', 'all'] },
}).fetch();
});
if (integrations.length > 0) {
integrations.forEach((integration) => {
@@ -217,6 +226,7 @@ BlazeComponent.extendComponent({
this.scrollParentContainer();
}, 500);
}
const $checklistsDom = this.$('.card-checklist-items');
$checklistsDom.sortable({
@@ -288,7 +298,7 @@ BlazeComponent.extendComponent({
});
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember();
return ReactiveCache.getCurrentUser()?.isBoardMember();
}
// Disable sorting if the current user is not a board member
@@ -299,7 +309,7 @@ BlazeComponent.extendComponent({
$checklistsDom.data('sortable')
) {
$checklistsDom.sortable('option', 'disabled', disabled);
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$checklistsDom.sortable({ handle: '.checklist-handle' });
}
}
@@ -393,7 +403,9 @@ BlazeComponent.extendComponent({
let card = this.data();
const listSelect = this.$('.js-select-card-details-lists')[0];
const listId = listSelect.options[listSelect.selectedIndex].value;
card.move(card.boardId, card.swimlaneId, listId, card.sort);
const minOrder = card.getMinSort(listId, card.swimlaneId);
card.move(card.boardId, card.swimlaneId, listId, minOrder - 1);
},
'click .js-go-to-linked-card'() {
Utils.goCardId(this.data().linkedId);
@@ -440,10 +452,20 @@ BlazeComponent.extendComponent({
'click .js-maximize-card-details'() {
Meteor.call('toggleCardMaximized');
autosize($('.card-details'));
// if (!Utils.isMiniScreen()) {
// Meteor.setTimeout(() => {
// this.scrollParentContainer();
// }, 500);
// }
},
'click .js-minimize-card-details'() {
Meteor.call('toggleCardMaximized');
autosize($('.card-details'));
if (!Utils.isMiniScreen()) {
Meteor.setTimeout(() => {
this.scrollParentContainer();
}, 500);
}
},
'click .js-vote'(e) {
const forIt = $(e.target).hasClass('js-vote-positive');
@@ -640,15 +662,7 @@ Template.cardDetailsActionsPopup.helpers({
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly()
);
return ReactiveCache.getCurrentUser().isBoardAdmin();
},
});
@@ -668,25 +682,17 @@ Template.cardDetailsActionsPopup.events({
'click .js-move-card': Popup.open('moveCard'),
'click .js-copy-card': Popup.open('copyCard'),
'click .js-convert-checklist-item-to-card': Popup.open('convertChecklistItemToCard'),
'click .js-copy-checklist-cards': Popup.open('copyChecklistToManyCards'),
'click .js-copy-checklist-cards': Popup.open('copyManyCards'),
'click .js-set-card-color': Popup.open('setCardColor'),
'click .js-move-card-to-top'(event) {
event.preventDefault();
const minOrder = _.min(
this.list()
.cardsUnfiltered(this.swimlaneId)
.map((c) => c.sort),
);
const minOrder = this.getMinSort();
this.move(this.boardId, this.swimlaneId, this.listId, minOrder - 1);
Popup.back();
},
'click .js-move-card-to-bottom'(event) {
event.preventDefault();
const maxOrder = _.max(
this.list()
.cardsUnfiltered(this.swimlaneId)
.map((c) => c.sort),
);
const maxOrder = this.getMaxSort();
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
Popup.back();
},
@@ -732,19 +738,8 @@ BlazeComponent.extendComponent({
}).register('editCardTitleForm');
Template.cardMembersPopup.onCreated(function () {
let currBoard = Boards.findOne(Session.get('currentBoard'));
let currBoard = Utils.getCurrentBoard();
let members = currBoard.activeMembers();
// let query = {
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
// };
// let boardTeamUsers = Users.find(query, {
// sort: { sort: 1 },
// });
// members = currBoard.activeMembers2(members, boardTeamUsers);
this.members = new ReactiveVar(members);
});
@@ -757,33 +752,23 @@ Template.cardMembersPopup.events({
Template.cardMembersPopup.helpers({
members() {
return Template.instance().members.get();
return _.sortBy(Template.instance().members.get(),'fullname');
},
});
const filterMembers = (filterTerm) => {
let currBoard = Boards.findOne(Session.get('currentBoard'));
let currBoard = Utils.getCurrentBoard();
let members = currBoard.activeMembers();
// let query = {
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
// };
// let boardTeamUsers = Users.find(query, {
// sort: { sort: 1 },
// });
// members = currBoard.activeMembers2(members, boardTeamUsers);
if (filterTerm) {
members = members
.map(member => ({
member,
user: Users.findOne(member.userId)
user: ReactiveCache.getUser(member.userId)
}))
.filter(({ user }) =>
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
.map(({ member }) => member);
}
return members;
@@ -815,178 +800,58 @@ Template.editCardAssignerForm.events({
},
});
Template.moveCardPopup.events({
'click .js-done'() {
const card = Cards.findOne(this._id);
const bSelect = $('.js-select-boards')[0];
let boardId;
// if we are a worker, we won't have a board select so we just use the
// current boardId of the card.
if (bSelect) {
boardId = bSelect.options[bSelect.selectedIndex].value;
} else {
boardId = card.boardId;
}
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
card.move(boardId, swimlaneId, listId, 0);
// set new id's to card object in case the card is moved to top by the comment "moveCard" after this command (.js-move-card)
this.boardId = boardId;
this.swimlaneId = swimlaneId;
this.listId = listId;
Popup.back();
},
});
BlazeComponent.extendComponent({
onCreated() {
this.currentBoardId = Utils.getCurrentBoardId();
this.selectedBoardId = new ReactiveVar(this.currentBoardId);
this.setMoveAndCopyDialogOption(this.currentBoardId);
},
/** set the last confirmed dialog field values
* @param boardId the current board id
*/
setMoveAndCopyDialogOption(boardId) {
this.moveAndCopyDialogOption = {
'boardId' : "",
'swimlaneId' : "",
'listId' : "",
}
let currentOptions = Meteor.user().getMoveAndCopyDialogOptions();
if (currentOptions && boardId && currentOptions[boardId]) {
this.moveAndCopyDialogOption = currentOptions[boardId];
if (this.moveAndCopyDialogOption.boardId) {
this.selectedBoardId.set(this.moveAndCopyDialogOption.boardId)
}
}
subManager.subscribe('board', this.selectedBoardId.get(), false);
},
/** returns if the board id was the last confirmed one
* @param boardId check this board id
* @return if the board id was the last confirmed one
*/
isMoveAndCopyDialogOptionBoardId(boardId) {
let ret = this.moveAndCopyDialogOption.boardId == boardId;
/** Move Card Dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = ReactiveCache.getCurrentUser().getMoveAndCopyDialogOptions();
return ret;
},
}
setDone(boardId, swimlaneId, listId, options) {
ReactiveCache.getCurrentUser().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
const minOrder = card.getMinSort(listId, swimlaneId);
card.move(boardId, swimlaneId, listId, minOrder - 1);
}
}).register('moveCardPopup');
/** returns if the swimlane id was the last confirmed one
* @param swimlaneId check this swimlane id
* @return if the swimlane id was the last confirmed one
*/
isMoveAndCopyDialogOptionSwimlaneId(swimlaneId) {
let ret = this.moveAndCopyDialogOption.swimlaneId == swimlaneId;
/** Copy Card Dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = ReactiveCache.getCurrentUser().getMoveAndCopyDialogOptions();
return ret;
},
}
setDone(boardId, swimlaneId, listId, options) {
ReactiveCache.getCurrentUser().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
/** returns if the list id was the last confirmed one
* @param listId check this list id
* @return if the list id was the last confirmed one
*/
isMoveAndCopyDialogOptionListId(listId) {
let ret = this.moveAndCopyDialogOption.listId == listId;
return ret;
},
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 [
{
'click .js-done'() {
const boardSelect = this.$('.js-select-boards')[0];
const boardId = boardSelect.options[boardSelect.selectedIndex].value;
const listSelect = this.$('.js-select-lists')[0];
const listId = listSelect.options[listSelect.selectedIndex].value;
const swimlaneSelect = this.$('.js-select-swimlanes')[0];
const swimlaneId = swimlaneSelect.options[swimlaneSelect.selectedIndex].value;
const options = {
'boardId' : boardId,
'swimlaneId' : swimlaneId,
'listId' : listId,
}
Meteor.user().setMoveAndCopyDialogOption(this.currentBoardId, options);
},
'change .js-select-boards'(event) {
const boardId = $(event.currentTarget).val();
this.selectedBoardId.set(boardId);
subManager.subscribe('board', boardId, false);
},
},
];
},
}).register('boardsAndLists');
Template.copyCardPopup.events({
'click .js-done'() {
const card = Utils.getCurrentCard();
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
const boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
// const textarea = $('#copy-card-title');
const textarea = this.$('#copy-card-title');
const title = textarea.val().trim();
// insert new card to the bottom of new list
card.sort = Lists.findOne(card.listId).cards().count();
if (title) {
card.title = title;
card.coverId = '';
const _id = card.copy(boardId, swimlaneId, listId);
// insert new card to the top of new list
const newCardId = Meteor.call('copyCard', card._id, boardId, swimlaneId, listId, true, {title: title});
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
// card will disappear instantly.
// See https://github.com/wekan/wekan/issues/80
Filter.addException(_id);
Popup.back();
Filter.addException(newCardId);
}
},
});
}
}).register('copyCardPopup');
Template.convertChecklistItemToCardPopup.events({
'click .js-done'() {
const card = Utils.getCurrentCard();
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
const boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
/** Convert Checklist-Item to card dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = ReactiveCache.getCurrentUser().getMoveAndCopyDialogOptions();
return ret;
}
setDone(boardId, swimlaneId, listId, options) {
ReactiveCache.getCurrentUser().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
const textarea = this.$('#copy-card-title');
const title = textarea.val().trim();
if (title) {
@@ -997,68 +862,42 @@ Template.convertChecklistItemToCardPopup.events({
swimlaneId: swimlaneId,
sort: 0,
});
const card = ReactiveCache.getCard(_id);
const minOrder = card.getMinSort();
card.move(card.boardId, card.swimlaneId, card.listId, minOrder - 1);
Filter.addException(_id);
Popup.back();
}
},
});
}
}).register('convertChecklistItemToCardPopup');
Template.copyChecklistToManyCardsPopup.events({
'click .js-done'() {
const card = Utils.getCurrentCard();
const oldId = card._id;
card._id = null;
const lSelect = $('.js-select-lists')[0];
card.listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
card.swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
card.boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
const titleEntry = textarea.val().trim();
// insert new card to the bottom of new list
card.sort = Lists.findOne(card.listId).cards().count();
/** Copy many cards dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = ReactiveCache.getCurrentUser().getMoveAndCopyDialogOptions();
return ret;
}
setDone(boardId, swimlaneId, listId, options) {
ReactiveCache.getCurrentUser().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
const textarea = this.$('#copy-card-title');
const title = textarea.val().trim();
if (title) {
const titleList = JSON.parse(title);
for (const obj of titleList) {
const newCardId = Meteor.call('copyCard', card._id, boardId, swimlaneId, listId, false, {title: obj.title, description: obj.description});
if (titleEntry) {
const titleList = JSON.parse(titleEntry);
for (let i = 0; i < titleList.length; i++) {
const obj = titleList[i];
card.title = obj.title;
card.description = obj.description;
card.coverId = '';
const _id = Cards.insert(card);
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
// card will disappear instantly.
// See https://github.com/wekan/wekan/issues/80
Filter.addException(_id);
// copy checklists
Checklists.find({ cardId: oldId }).forEach((ch) => {
ch.copy(_id);
});
// copy subtasks
const cursor = Cards.find({ parentId: oldId });
cursor.forEach(function () {
'use strict';
const subtask = arguments[0];
subtask.parentId = _id;
subtask._id = null;
/* const newSubtaskId = */ Cards.insert(subtask);
});
// copy card comments
CardComments.find({ cardId: oldId }).forEach((cmt) => {
cmt.copy(_id);
});
Filter.addException(newCardId);
}
Popup.back();
}
},
});
}
}).register('copyManyCardsPopup');
BlazeComponent.extendComponent({
onCreated() {
@@ -1111,27 +950,27 @@ BlazeComponent.extendComponent({
},
boards() {
return Boards.find(
const ret = ReactiveCache.getBoards(
{
archived: false,
'members.userId': Meteor.userId(),
_id: {
$ne: Meteor.user().getTemplatesBoardId(),
},
_id: { $ne: ReactiveCache.getCurrentUser().getTemplatesBoardId() },
},
{
sort: { sort: 1 /* boards default sorting */ },
},
);
return ret;
},
cards() {
const currentId = Utils.getCurrentCardId();
if (this.parentBoard.get()) {
return Cards.find({
const ret = ReactiveCache.getCards({
boardId: this.parentBoard.get(),
_id: { $ne: currentId },
});
return ret;
} else {
return [];
}
@@ -1155,7 +994,7 @@ BlazeComponent.extendComponent({
setParentCardId(cardId) {
if (cardId) {
this.parentCard = Cards.findOne(cardId);
this.parentCard = ReactiveCache.getCard(cardId);
} else {
this.parentCard = null;
}
@@ -1174,7 +1013,7 @@ BlazeComponent.extendComponent({
'click .js-delete': Popup.afterConfirm('cardDelete', function () {
Popup.close();
// verify that there are no linked cards
if (Cards.find({ linkedId: this._id }).count() === 0) {
if (ReactiveCache.getCards({ linkedId: this._id }).length === 0) {
Cards.remove(this._id);
} else {
// TODO: Maybe later we can list where the linked cards are.
@@ -1711,10 +1550,29 @@ BlazeComponent.extendComponent({
EscapeActions.register(
'detailsPane',
() => {
// if card description diverges from database due to editing
// ask user whether changes should be applied
if (ReactiveCache.getCurrentUser()) {
if (ReactiveCache.getCurrentUser().profile.rescueCardDescription == true) {
currentDescription = document.getElementsByClassName("editor js-new-description-input").item(0)
if (currentDescription?.value && !(currentDescription.value === Utils.getCurrentCard().getDescription())) {
if (confirm(TAPi18n.__('rescue-card-description-dialogue'))) {
Utils.getCurrentCard().setDescription(document.getElementsByClassName("editor js-new-description-input").item(0).value);
// Save it!
console.log(document.getElementsByClassName("editor js-new-description-input").item(0).value);
console.log("current description", Utils.getCurrentCard().getDescription());
} else {
// Do nothing!
console.log('Description changes were not saved to the database.');
}
}
}
}
if (Session.get('cardDetailsIsDragging')) {
// Reset dragging status as the mouse landed outside the cardDetails template area and this will prevent a mousedown event from firing
Session.set('cardDetailsIsDragging', false);
Session.set('cardDetailsIsMouseDown', false);
} else {
// Prevent close card when the user is selecting text and moves the mouse cursor outside the card detail area
Utils.goBoardId(Session.get('currentBoard'));
@@ -1729,19 +1587,8 @@ EscapeActions.register(
);
Template.cardAssigneesPopup.onCreated(function () {
let currBoard = Boards.findOne(Session.get('currentBoard'));
let currBoard = Utils.getCurrentBoard();
let members = currBoard.activeMembers();
// let query = {
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
// };
// let boardTeamUsers = Users.find(query, {
// sort: { sort: 1 },
// });
// members = currBoard.activeMembers2(members, boardTeamUsers);
this.members = new ReactiveVar(members);
});
@@ -1767,23 +1614,17 @@ Template.cardAssigneesPopup.helpers({
},
members() {
return Template.instance().members.get();
return _.sortBy(Template.instance().members.get(),'fullname');
},
user() {
return Users.findOne(this.userId);
return ReactiveCache.getUser(this.userId);
},
});
Template.cardAssigneePopup.helpers({
userData() {
// We need to handle a special case for the search results provided by the
// `matteodem:easy-search` package. Since these results gets published in a
// separate collection, and not in the standard Meteor.Users collection as
// expected, we use a component parameter ("property") to distinguish the
// two cases.
const userCollection = this.esSearch ? ESSearchResults : Users;
return userCollection.findOne(this.userId, {
return ReactiveCache.getUser(this.userId, {
fields: {
profile: 1,
username: 1,
@@ -1792,21 +1633,10 @@ Template.cardAssigneePopup.helpers({
},
memberType() {
const user = Users.findOne(this.userId);
const user = ReactiveCache.getUser(this.userId);
return user && user.isBoardAdmin() ? 'admin' : 'normal';
},
/*
presenceStatusClassName() {
const user = Users.findOne(this.userId);
const userPresence = presences.findOne({ userId: this.userId });
if (user && user.isInvitedTo(Session.get('currentBoard'))) return 'pending';
else if (!userPresence) return 'disconnected';
else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
return 'active';
else return 'idle';
},
*/
isCardAssignee() {
const card = Template.parentData();
const cardAssignees = card.getAssignees();
@@ -1815,13 +1645,13 @@ Template.cardAssigneePopup.helpers({
},
user() {
return Users.findOne(this.userId);
return ReactiveCache.getUser(this.userId);
},
});
Template.cardAssigneePopup.events({
'click .js-remove-assignee'() {
Cards.findOne(this.cardId).unassignAssignee(this.userId);
ReactiveCache.getCard(this.cardId).unassignAssignee(this.userId);
Popup.back();
},
'click .js-edit-profile': Popup.open('editProfile'),
-10
View File
@@ -83,13 +83,3 @@ BlazeComponent.extendComponent({
];
},
}).register('cardSpentTime');
Template.timeBadge.helpers({
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly()
);
},
});
+15
View File
@@ -164,6 +164,21 @@ textarea.js-edit-checklist-item {
color: #222;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
.add-checklist-top {
/* more space to checklists title */
padding-left: 20px;
/* + is easier clickable */
padding-right: 20px;
}
.add-checklist-top.js-open-inlined-form:hover {
background: #dbdbdb;
color: #222;
box-shadow: 0 1px 2px rgba(0,0,0,.2);
}
.card-details-item-title {
/* max width for adding checklist at top */
width: 100%;
}
.checklist-details-menu {
float: right;
padding: 6px 10px 6px 10px;
+25 -43
View File
@@ -3,6 +3,12 @@ template(name="checklists")
h3.card-details-item-title
i.fa.fa-check
| {{_ 'checklists'}}
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-checklist" cardId = cardId position="top")
+addChecklistItemForm
else
a.add-checklist-top.js-open-inlined-form(title="{{_ 'add-checklist'}}")
i.fa.fa-plus
if currentUser.isBoardMember
.material-toggle-switch(title="{{_ 'hide-checked-items'}}")
//span.toggle-switch-title
@@ -34,13 +40,13 @@ template(name="checklistDetail")
a.fa.fa-navicon.checklist-details-menu.js-open-checklist-details-menu(title="{{_ 'checklistActionsPopup-title'}}")
if canModifyCard
h2.title.js-open-inlined-form.is-editable
if isMiniScreenOrShowDesktopDragHandles
h4.title.js-open-inlined-form.is-editable
if isTouchScreenOrShowDesktopDragHandles
span.fa.checklist-handle(class="fa-arrows" title="{{_ 'dragChecklist'}}")
+viewer
= checklist.title
else
h2.title
h4.title
+viewer
= checklist.title
@@ -61,7 +67,7 @@ template(name="addChecklistItemForm")
textarea.js-add-checklist-item(rows='1' autofocus)
.edit-controls.clearfix
button.primary.confirm.js-submit-add-checklist-item-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
a.fa.fa-times-thin.js-close-inlined-form(title="{{_ 'close-add-checklist-item'}}")
if showNewlineBecomesNewChecklistItem
.material-toggle-switch(title="{{_ 'newlineBecomesNewChecklistItem'}}")
input.toggle-switch(type="checkbox" id="toggleNewlineBecomesNewChecklistItem")
@@ -77,7 +83,7 @@ template(name="editChecklistItemForm")
= checklist.title
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-checklist-item-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
a.fa.fa-times-thin.js-close-inlined-form(title="{{_ 'close-edit-checklist-item'}}")
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-checklist-item {{_ "delete"}}...
@@ -86,6 +92,13 @@ template(name="editChecklistItemForm")
| {{_ 'convertChecklistItemToCardPopup-title'}}
template(name="checklistItems")
if checklist.items.length
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-checklist-item" checklist = checklist position="top")
+addChecklistItemForm(checklist=checklist showNewlineBecomesNewChecklistItem=true)
else
a.add-checklist-item.js-open-inlined-form(title="{{_ 'add-checklist-item'}}")
i.fa.fa-plus
.checklist-items.js-checklist-items
each item in checklist.items
+inlinedForm(classNames="js-edit-checklist-item" item = item checklist = checklist)
@@ -100,11 +113,12 @@ template(name="checklistItems")
i.fa.fa-plus
template(name='checklistItemDetail')
.js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}")
.js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}"
role="checkbox" aria-checked="{{#if item.isFinished }}true{{else}}false{{/if}}" tabindex="0")
if canModifyCard
.check-box-container
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
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
@@ -115,35 +129,6 @@ template(name='checklistItemDetail')
+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'}}
template(name="checklistActionsPopup")
ul.pop-over-list
li
@@ -168,25 +153,22 @@ template(name="copyAndMoveChecklist")
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}" selected="{{#if isChecklistDialogOptionBoardId _id}}selected{{/if}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionBoardId _id}}selected{{/if}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}" selected="{{#if isChecklistDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each lists
option(value="{{_id}}" selected="{{#if isChecklistDialogOptionListId _id}}selected{{/if}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionListId _id}}selected{{/if}}") {{title}}
label {{_ 'cards'}}:
select.js-select-cards
each cards
option(value="{{_id}}" selected="{{#if isChecklistDialogOptionCardId _id}}selected{{/if}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionCardId _id}}selected{{/if}}") {{title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+50 -272
View File
@@ -1,6 +1,8 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
import Cards from '/models/cards';
import Boards from '/models/boards';
import { DialogWithBoardSwimlaneListCard } from '/client/lib/dialogWithBoardSwimlaneListCard';
const subManager = new SubsManager();
const { calculateIndexData, capitalize } = Utils;
@@ -48,12 +50,12 @@ BlazeComponent.extendComponent({
const self = this;
self.itemsDom = this.$('.js-checklist-items');
initSorting(self.itemsDom);
self.itemsDom.mousedown(function(evt) {
self.itemsDom.mousedown(function (evt) {
evt.stopPropagation();
});
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember();
return ReactiveCache.getCurrentUser()?.isBoardMember();
}
// Disable sorting if the current user is not a board member
@@ -61,7 +63,7 @@ BlazeComponent.extendComponent({
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$(self.itemsDom).sortable({
handle: 'span.fa.checklistitem-handle',
});
@@ -70,15 +72,6 @@ BlazeComponent.extendComponent({
});
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
/** returns the finished percent of the checklist */
finishedPercent() {
const ret = this.data().checklist.finishedPercent();
@@ -92,20 +85,32 @@ BlazeComponent.extendComponent({
const textarea = this.find('textarea.js-add-checklist-item');
const title = textarea.value.trim();
let cardId = this.currentData().cardId;
const card = Cards.findOne(cardId);
const card = ReactiveCache.getCard(cardId);
//if (card.isLinked()) cardId = card.linkedId;
if (card.isLinkedCard()) cardId = card.linkedId;
if (card.isLinkedCard()) {
cardId = card.linkedId;
}
let sortIndex;
let checklistItemIndex;
if (this.currentData().position === 'top') {
sortIndex = Utils.calculateIndexData(null, card.firstChecklist()).base;
checklistItemIndex = 0;
} else {
sortIndex = Utils.calculateIndexData(card.lastChecklist(), null).base;
checklistItemIndex = -1;
}
if (title) {
Checklists.insert({
cardId,
title,
sort: card.checklists().count(),
sort: sortIndex,
});
this.closeAllInlinedForms();
setTimeout(() => {
this.$('.add-checklist-item')
.last()
.eq(checklistItemIndex)
.click();
}, 100);
}
@@ -121,13 +126,22 @@ BlazeComponent.extendComponent({
let checklistItems = [title];
if (newlineBecomesNewChecklistItem.checked) {
checklistItems = title.split('\n').map(_value => _value.trim());
if (this.currentData().position === 'top') {
checklistItems = checklistItems.reverse();
}
}
for (let checklistItem of checklistItems) {
let sortIndex;
if (this.currentData().position === 'top') {
sortIndex = Utils.calculateIndexData(null, checklist.firstItem()).base;
} else {
sortIndex = Utils.calculateIndexData(checklist.lastItem(), null).base;
}
ChecklistItems.insert({
title: checklistItem,
checklistId: checklist._id,
cardId: checklist.cardId,
sort: Utils.calculateIndexData(checklist.lastItem()).base,
sort: sortIndex,
});
}
}
@@ -136,15 +150,6 @@ BlazeComponent.extendComponent({
textarea.focus();
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
deleteItem() {
const checklist = this.currentData().checklist;
const item = this.currentData().item;
@@ -228,25 +233,26 @@ BlazeComponent.extendComponent({
},
boards() {
return Boards.find(
const ret = ReactiveCache.getBoards(
{
archived: false,
'members.userId': Meteor.userId(),
_id: { $ne: Meteor.user().getTemplatesBoardId() },
_id: { $ne: ReactiveCache.getCurrentUser().getTemplatesBoardId() },
},
{
sort: { sort: 1 /* boards default sorting */ },
},
);
return ret;
},
swimlanes() {
const board = Boards.findOne(this.selectedBoardId.get());
const board = ReactiveCache.getBoard(this.selectedBoardId.get());
return board.swimlanes();
},
aBoardLists() {
const board = Boards.findOne(this.selectedBoardId.get());
const board = ReactiveCache.getBoard(this.selectedBoardId.get());
return board.lists();
},
@@ -264,12 +270,12 @@ BlazeComponent.extendComponent({
Template.checklists.helpers({
checklists() {
const card = Cards.findOne(this.cardId);
const card = ReactiveCache.getCard(this.cardId);
const ret = card.checklists();
return ret;
},
hideCheckedItems() {
const currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) return currentUser.hasHideCheckedItems();
return false;
},
@@ -279,14 +285,6 @@ BlazeComponent.extendComponent({
onRendered() {
autosize(this.$('textarea.js-add-checklist-item'));
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
events() {
return [
{
@@ -306,15 +304,15 @@ BlazeComponent.extendComponent({
events() {
return [
{
'click .js-delete-checklist' : Popup.afterConfirm('checklistDelete', function () {
'click .js-delete-checklist': Popup.afterConfirm('checklistDelete', function () {
Popup.back(2);
const checklist = this.checklist;
if (checklist && checklist._id) {
Checklists.remove(checklist._id);
}
}),
'click .js-move-checklist' : Popup.open('moveChecklist'),
'click .js-copy-checklist' : Popup.open('copyChecklist'),
'click .js-move-checklist': Popup.open('moveChecklist'),
'click .js-copy-checklist': Popup.open('copyChecklist'),
}
]
}
@@ -324,14 +322,6 @@ BlazeComponent.extendComponent({
onRendered() {
autosize(this.$('textarea.js-edit-checklist-item'));
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
events() {
return [
{
@@ -348,16 +338,8 @@ BlazeComponent.extendComponent({
}).register('editChecklistItemForm');
Template.checklistItemDetail.helpers({
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
hideCheckedItems() {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
if (user) return user.hasHideCheckedItems();
return false;
},
@@ -380,230 +362,26 @@ BlazeComponent.extendComponent({
},
}).register('checklistItemDetail');
class DialogWithBoardSwimlaneListAndCard extends BlazeComponent {
/** returns the checklist dialog options
* @return Object with properties { boardId, swimlaneId, listId, cardId }
*/
getChecklistDialogOptions() {
}
/** checklist is done
* @param cardId the selected card id
* @param options the selected options (Object with properties { boardId, swimlaneId, listId, cardId })
*/
setDone(cardId, options) {
}
onCreated() {
this.currentBoardId = Utils.getCurrentBoardId();
this.selectedBoardId = new ReactiveVar(this.currentBoardId);
this.selectedSwimlaneId = new ReactiveVar('');
this.selectedListId = new ReactiveVar('');
this.setChecklistDialogOption(this.currentBoardId);
}
/** set the last confirmed dialog field values
* @param boardId the current board id
*/
setChecklistDialogOption(boardId) {
this.checklistDialogOption = {
'boardId' : "",
'swimlaneId' : "",
'listId' : "",
'cardId': "",
}
let currentOptions = this.getChecklistDialogOptions();
if (currentOptions && boardId && currentOptions[boardId]) {
this.checklistDialogOption = currentOptions[boardId];
if (this.checklistDialogOption.boardId &&
this.checklistDialogOption.swimlaneId &&
this.checklistDialogOption.listId
)
{
this.selectedBoardId.set(this.checklistDialogOption.boardId)
this.selectedSwimlaneId.set(this.checklistDialogOption.swimlaneId);
this.selectedListId.set(this.checklistDialogOption.listId);
}
}
this.getBoardData(this.selectedBoardId.get());
if (!this.selectedSwimlaneId.get() || !Swimlanes.findOne({_id: this.selectedSwimlaneId.get(), boardId: this.selectedBoardId.get()})) {
this.setFirstSwimlaneId();
}
if (!this.selectedListId.get() || !Lists.findOne({_id: this.selectedListId.get(), boardId: this.selectedBoardId.get()})) {
this.setFirstListId();
}
}
/** sets the first swimlane id */
setFirstSwimlaneId() {
try {
const board = Boards.findOne(this.selectedBoardId.get());
const swimlaneId = board.swimlanes().fetch()[0]._id;
this.selectedSwimlaneId.set(swimlaneId);
} catch (e) {}
}
/** sets the first list id */
setFirstListId() {
try {
const board = Boards.findOne(this.selectedBoardId.get());
const listId = board.lists().fetch()[0]._id;
this.selectedListId.set(listId);
} catch (e) {}
}
/** returns if the board id was the last confirmed one
* @param boardId check this board id
* @return if the board id was the last confirmed one
*/
isChecklistDialogOptionBoardId(boardId) {
let ret = this.checklistDialogOption.boardId == boardId;
return ret;
}
/** returns if the swimlane id was the last confirmed one
* @param swimlaneId check this swimlane id
* @return if the swimlane id was the last confirmed one
*/
isChecklistDialogOptionSwimlaneId(swimlaneId) {
let ret = this.checklistDialogOption.swimlaneId == swimlaneId;
return ret;
}
/** returns if the list id was the last confirmed one
* @param listId check this list id
* @return if the list id was the last confirmed one
*/
isChecklistDialogOptionListId(listId) {
let ret = this.checklistDialogOption.listId == listId;
return ret;
}
/** returns if the card id was the last confirmed one
* @param cardId check this card id
* @return if the card id was the last confirmed one
*/
isChecklistDialogOptionCardId(cardId) {
let ret = this.checklistDialogOption.cardId == cardId;
return ret;
}
/** returns all available board */
boards() {
const ret = Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
_id: { $ne: Meteor.user().getTemplatesBoardId() },
},
{
sort: { sort: 1 },
},
);
return ret;
}
/** returns all available swimlanes of the current board */
swimlanes() {
const board = Boards.findOne(this.selectedBoardId.get());
const ret = board.swimlanes();
return ret;
}
/** returns all available lists of the current board */
lists() {
const board = Boards.findOne(this.selectedBoardId.get());
const ret = board.lists();
return ret;
}
/** returns all available cards of the current list */
cards() {
const list = Lists.findOne(this.selectedListId.get());
const ret = list.cards(this.selectedSwimlaneId.get());
return ret;
}
/** get the board data from the server
* @param boardId get the board data of this board id
*/
getBoardData(boardId) {
const self = this;
Meteor.subscribe('board', boardId, false, {
onReady() {
const sameBoardId = self.selectedBoardId.get() == boardId;
self.selectedBoardId.set(boardId);
if (!sameBoardId) {
// reset swimlane id (for selection in cards())
self.setFirstSwimlaneId();
// reset list id (for selection in cards())
self.setFirstListId();
}
},
});
}
events() {
return [
{
'click .js-done'() {
const boardSelect = this.$('.js-select-boards')[0];
const boardId = boardSelect.options[boardSelect.selectedIndex].value;
const listSelect = this.$('.js-select-lists')[0];
const listId = listSelect.options[listSelect.selectedIndex].value;
const swimlaneSelect = this.$('.js-select-swimlanes')[0];
const swimlaneId = swimlaneSelect.options[swimlaneSelect.selectedIndex].value;
const cardSelect = this.$('.js-select-cards')[0];
const cardId = cardSelect.options[cardSelect.selectedIndex].value;
const options = {
'boardId' : boardId,
'swimlaneId' : swimlaneId,
'listId' : listId,
'cardId': cardId,
}
this.setDone(cardId, options);
Popup.back(2);
},
'change .js-select-boards'(event) {
const boardId = $(event.currentTarget).val();
this.getBoardData(boardId);
},
'change .js-select-swimlanes'(event) {
this.selectedSwimlaneId.set($(event.currentTarget).val());
},
'change .js-select-lists'(event) {
this.selectedListId.set($(event.currentTarget).val());
},
},
];
}
}
/** Move Checklist Dialog */
(class extends DialogWithBoardSwimlaneListAndCard {
getChecklistDialogOptions() {
const ret = Meteor.user().getMoveChecklistDialogOptions();
(class extends DialogWithBoardSwimlaneListCard {
getDialogOptions() {
const ret = ReactiveCache.getCurrentUser().getMoveChecklistDialogOptions();
return ret;
}
setDone(cardId, options) {
Meteor.user().setMoveChecklistDialogOption(this.currentBoardId, options);
ReactiveCache.getCurrentUser().setMoveChecklistDialogOption(this.currentBoardId, options);
this.data().checklist.move(cardId);
}
}).register('moveChecklistPopup');
/** Copy Checklist Dialog */
(class extends DialogWithBoardSwimlaneListAndCard {
getChecklistDialogOptions() {
const ret = Meteor.user().getCopyChecklistDialogOptions();
(class extends DialogWithBoardSwimlaneListCard {
getDialogOptions() {
const ret = ReactiveCache.getCurrentUser().getCopyChecklistDialogOptions();
return ret;
}
setDone(cardId, options) {
Meteor.user().setCopyChecklistDialogOption(this.currentBoardId, options);
ReactiveCache.getCurrentUser().setCopyChecklistDialogOption(this.currentBoardId, options);
this.data().checklist.copy(cardId);
}
}).register('copyChecklistPopup');
+1 -1
View File
@@ -29,7 +29,7 @@ template(name="cardLabelsPopup")
each board.labels
li.js-card-label-item
a.card-label-edit-button.fa.fa-pencil.js-edit-label
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
span.fa.label-handle(class="fa-arrows" title="{{_ 'dragLabel'}}")
span.card-label.card-label-selectable.js-select-label.card-label-wrapper(class="card-label-{{color}}"
class="{{# if isLabelSelected ../_id }}active{{/if}}")
+10 -8
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
let labelColors;
Meteor.startup(() => {
labelColors = Boards.simpleSchema()._schema['labels.$.color'].allowedValues;
@@ -32,7 +34,7 @@ Template.createLabelPopup.helpers({
// is not already used in the board (although it's not a problem if two
// labels have the same color).
defaultColor() {
const labels = Boards.findOne(Session.get('currentBoard')).labels;
const labels = Utils.getCurrentBoard().labels;
const usedColors = _.pluck(labels, 'color');
const availableColors = _.difference(labelColors, usedColors);
return availableColors.length > 1 ? availableColors[0] : labelColors[0];
@@ -50,7 +52,7 @@ BlazeComponent.extendComponent({
appendTo: '.edit-labels-pop-over',
helper(element, currentItem) {
let ret = currentItem.clone();
if (currentItem.closest('.popup-container-depth-0').size() == 0)
if (currentItem.closest('.popup-container-depth-0').length == 0)
{ // only set css transform at every sub-popup, not at the main popup
const content = currentItem.closest('.content')[0]
const offsetLeft = content.offsetLeft;
@@ -76,7 +78,7 @@ BlazeComponent.extendComponent({
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$labels.sortable({
handle: '.label-handle',
});
@@ -118,7 +120,7 @@ Template.createLabelPopup.events({
// Create the new label
'submit .create-label'(event, templateInstance) {
event.preventDefault();
const board = Boards.findOne(Session.get('currentBoard'));
const board = Utils.getCurrentBoard();
const name = templateInstance
.$('#labelName')
.val()
@@ -130,14 +132,14 @@ Template.createLabelPopup.events({
});
Template.editLabelPopup.events({
'click .js-delete-label': Popup.afterConfirm('deleteLabel', function() {
const board = Boards.findOne(Session.get('currentBoard'));
'click .js-delete-label': Popup.afterConfirm('deleteLabel', function () {
const board = Utils.getCurrentBoard();
board.removeLabel(this._id);
Popup.back(2);
}),
'submit .edit-label'(event, templateInstance) {
event.preventDefault();
const board = Boards.findOne(Session.get('currentBoard'));
const board = Utils.getCurrentBoard();
const name = templateInstance
.$('#labelName')
.val()
@@ -150,6 +152,6 @@ Template.editLabelPopup.events({
Template.cardLabelsPopup.helpers({
isLabelSelected(cardId) {
return _.contains(Cards.findOne(cardId).labelIds, this._id);
return _.contains(ReactiveCache.getCard(cardId).labelIds, this._id);
},
});
+51 -21
View File
@@ -28,18 +28,35 @@
.minicard-wrapper .multi-selection-checkbox + .minicard {
margin-left: 8px;
}
.minicard {
padding: 6px 8px 2px;
position: relative;
flex: 1;
flex-wrap: wrap;
background-color: #fff;
min-height: 20px;
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
border-radius: 2px;
color: #4d4d4d;
overflow: hidden;
transition: transform 0.2s, border-radius 0.2s;
@media only screen {
.minicard {
padding: 6px 8px 2px;
position: relative;
flex: 1;
flex-wrap: wrap;
background-color: #fff;
min-height: 20px;
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
border-radius: 2px;
color: #4d4d4d;
overflow: hidden;
transition: transform 0.2s, border-radius 0.2s;
}
}
.minicard-details-menu-with-handle {
float: right;
font-size: 18px;
padding-right: 30px;
}
.minicard-details-menu {
float: right;
font-size: 18px;
}
@media print {
.minicard-details-menu,
.minicard-details-menu-with-handle {
display: none;
}
}
.minicard.linked-board .linked-icon,
.minicard.linked-card .linked-icon {
@@ -103,6 +120,13 @@
max-width: 100px;
margin-right: 4px;
}
.minicard .minicard-custom-field-item-fullwidth {
flex-grow: 1;
display: block;
word-wrap: break-word;
max-width: 100%;
margin-right: 4px;
}
.minicard .handle {
width: 20px;
height: 20px;
@@ -125,13 +149,15 @@
display: inline-block;
margin-right: 5px;
}
.minicard .minicard-title p:last-child {
margin-bottom: 0;
}
.minicard .minicard-title .viewer {
display: block;
word-wrap: break-word;
max-width: 230px;
@media only screen {
.minicard .minicard-title p:last-child {
margin-bottom: 0;
}
.minicard .minicard-title .viewer {
display: block;
word-wrap: break-word;
max-width: 230px;
}
}
.minicard .dates {
display: flex;
@@ -221,13 +247,17 @@
display: none;
}
.minicard .minicard-description {
padding: 6px 0 6px 8px;
padding: 6px 0 0 8px;
background-color: #eee;
width: 100%;
margin-bottom: 2px;
margin-left: -4px;
border-radius: 3px;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
.minicard.minicard-composer {
margin-bottom: 10px;
+125 -55
View File
@@ -3,20 +3,33 @@ template(name="minicard")
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
a.fa.fa-navicon.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
.handle
.fa.fa-arrows
else
a.fa.fa-navicon.minicard-details-menu.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
.dates
if getReceived
unless getStart
unless getDue
unless getEnd
.date
+minicardReceivedDate
if getStart
.date
+minicardStartDate
if getDue
.date
+minicardDueDate
if getEnd
+minicardEndDate
if getSpentTime
.date
+cardSpentTime
if cover
.minicard-cover(style="background-image: url('{{cover.link 'original' '/'}}?dummyReloadAfterSessionEstablished={{sess}}');")
if labels
.minicard-labels(class="{{#if hiddenMinicardLabelText}}minicard-labels-no-text{{/if}}")
each labels
unless hiddenMinicardLabelText
span.js-card-label.card-label(class="card-label-{{color}}" title=name)
+viewer
= name
if hiddenMinicardLabelText
.minicard-label(class="card-label-{{color}}" title="{{name}}")
if currentBoard.allowsCoverAttachmentOnMinicard
.minicard-cover(style="background-image: url('{{cover.link 'original'}}?dummyReloadAfterSessionEstablished={{sess}}');")
.minicard-title
if $eq 'prefix-with-full-path' currentBoard.presentParentTask
.parent-prefix
@@ -43,50 +56,60 @@ template(name="minicard")
if $eq 'subtext-with-parent' currentBoard.presentParentTask
.parent-subtext
| {{ parentCardName }}
.dates
if getReceived
unless getStart
unless getDue
unless getEnd
.date
+minicardReceivedDate
if getStart
.date
+minicardStartDate
if getDue
.date
+minicardDueDate
if getEnd
+minicardEndDate
if getSpentTime
.date
+cardSpentTime
if labels
.minicard-labels(class="{{#if hiddenMinicardLabelText}}minicard-labels-no-text{{/if}}")
each labels
unless hiddenMinicardLabelText
span.js-card-label.card-label(class="card-label-{{color}}" title=name)
+viewer
= name
if hiddenMinicardLabelText
.minicard-label(class="card-label-{{color}}" title="{{name}}")
.minicard-custom-fields
each customFieldsWD
if definition.showOnCard
if trueValue
.minicard-custom-field
// If there is custom field label, show label at left,
// and value at right
if definition.showLabelOnMiniCard
.minicard-custom-field-item
+viewer
= definition.name
.minicard-custom-field-item
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
.minicard-custom-field-item
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
else
// If there is no custom field label,
// show value full width
.minicard-custom-field-item-fullwidth
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 showAssignee
if getAssignees
@@ -106,11 +129,11 @@ template(name="minicard")
.badges
unless currentUser.isNoComments
if comments.count
.badge(title="{{_ 'card-comments-title' comments.count }}")
if comments.length
.badge(title="{{_ 'card-comments-title' comments.length }}")
span.badge-icon.fa.fa-comment-o.badge-comment
= ' '
= comments.count
= comments.length
//span.badge-comment.badge-text
//| {{_ 'comment'}}
if getDescription
@@ -129,10 +152,11 @@ template(name="minicard")
if expiredPoker
span.badge-text {{ getPokerEstimation }}
if attachments.length
.badge
span.badge-icon.fa.fa-paperclip
span.badge-text= attachments.length
if checklists.count
if currentBoard.allowsBadgeAttachmentOnMinicard
.badge
span.badge-icon.fa.fa-paperclip
span.badge-text= attachments.length
if checklists.length
.badge(class="{{#if checklistFinished}}is-finished{{/if}}")
span.badge-icon.fa.fa-check-square-o
span.badge-text.check-list-text {{checklistFinishedCount}}/{{checklistItemCount}}
@@ -142,9 +166,10 @@ template(name="minicard")
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.check-list-sort {{ sort }}
if currentBoard.allowsCardSortingByNumberOnMinicard
.badge
span.badge-icon.fa.fa-sort
span.badge-text.check-list-sort {{ sort }}
if currentBoard.allowsDescriptionTextOnMinicard
if getDescription
.minicard-description
@@ -155,3 +180,48 @@ template(name="editCardSortOrderPopup")
input.js-edit-card-sort-popup(type='text' autofocus value=sort dir="auto")
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-card-sort-popup(type="submit") {{_ 'save'}}
template(name="minicardDetailsActionsPopup")
ul.pop-over-list
if currentUser.isBoardAdmin
li
a.js-move-card
i.fa.fa-arrow-right
| {{_ 'moveCardPopup-title'}}
unless currentUser.isWorker
li
a.js-copy-card
i.fa.fa-copy
| {{_ 'copyCardPopup-title'}}
hr
li
a.js-archive
i.fa.fa-arrow-right
i.fa.fa-archive
| {{_ 'archive-card'}}
hr
li
a.js-move-card-to-top
i.fa.fa-arrow-up
| {{_ 'moveCardToTop-title'}}
li
a.js-move-card-to-bottom
i.fa.fa-arrow-down
| {{_ 'moveCardToBottom-title'}}
hr
li
a.js-add-labels
i.fa.fa-tags
| {{_ 'card-edit-labels'}}
li
a.js-due-date
i.fa.fa-sign-in
| {{_ 'editCardDueDatePopup-title'}}
li
a.js-set-card-color
i.fa.fa-paint-brush
| {{_ 'setCardColorPopup-title'}}
li
a.js-link
i.fa.fa-link
| {{_ 'link-card'}}
+62 -29
View File
@@ -1,4 +1,6 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
import { CustomFieldStringTemplate } from '/client/lib/customFields'
// Template.cards.events({
// 'click .member': Popup.open('cardMember')
@@ -31,46 +33,50 @@ BlazeComponent.extendComponent({
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 ?? '');
const ret = new CustomFieldStringTemplate(definition).getFormattedValue(customFieldTrueValue);
return ret;
},
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;
// cache "board" to reduce the mini-mongodb access
const board = this.data().board();
let ret = false;
if (board) {
ret =
board.allowsCreator === null ||
board.allowsCreator === undefined ||
board.allowsCreator
;
}
return false;
return ret;
},
showMembers() {
if (this.data().board()) {
return (
this.data().board.allowsMembers === null ||
this.data().board().allowsMembers === undefined ||
this.data().board().allowsMembers
);
// cache "board" to reduce the mini-mongodb access
const board = this.data().board();
let ret = false;
if (board) {
ret =
board.allowsMembers === null ||
board.allowsMembers === undefined ||
board.allowsMembers
;
}
return false;
return ret;
},
showAssignee() {
if (this.data().board()) {
return (
this.data().board.allowsAssignee === null ||
this.data().board().allowsAssignee === undefined ||
this.data().board().allowsAssignee
);
// cache "board" to reduce the mini-mongodb access
const board = this.data().board();
let ret = false;
if (board) {
ret =
board.allowsAssignee === null ||
board.allowsAssignee === undefined ||
board.allowsAssignee
;
}
return false;
return ret;
},
/** opens the card label popup only if clicked onto a label
@@ -100,6 +106,7 @@ BlazeComponent.extendComponent({
},
'click span.badge-icon.fa.fa-sort, click span.badge-text.check-list-sort' : Popup.open("editCardSortOrder"),
'click .minicard-labels' : this.cardLabelsPopup,
'click .js-open-minicard-details-menu': Popup.open('minicardDetailsActions'),
}
];
},
@@ -107,7 +114,7 @@ BlazeComponent.extendComponent({
Template.minicard.helpers({
hiddenMinicardLabelText() {
currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
return (currentUser.profile || {}).hiddenMinicardLabelText;
} else if (window.localStorage.getItem('hiddenMinicardLabelText')) {
@@ -150,3 +157,29 @@ BlazeComponent.extendComponent({
]
}
}).register('editCardSortOrderPopup');
Template.minicardDetailsActionsPopup.events({
'click .js-due-date': Popup.open('editCardDueDate'),
'click .js-move-card': Popup.open('moveCard'),
'click .js-copy-card': Popup.open('copyCard'),
'click .js-set-card-color': Popup.open('setCardColor'),
'click .js-add-labels': Popup.open('cardLabels'),
'click .js-link': Popup.open('linkCard'),
'click .js-move-card-to-top'(event) {
event.preventDefault();
const minOrder = this.getMinSort();
this.move(this.boardId, this.swimlaneId, this.listId, minOrder - 1);
Popup.back();
},
'click .js-move-card-to-bottom'(event) {
event.preventDefault();
const maxOrder = this.getMaxSort();
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
Popup.back();
},
'click .js-archive': Popup.afterConfirm('cardArchive', function () {
Popup.close();
this.archive();
Utils.goBoardId(this.boardId);
}),
});
+5 -34
View File
@@ -1,13 +1,4 @@
BlazeComponent.extendComponent({
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
}).register('subtaskDetail');
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
addSubtask(event) {
@@ -15,19 +6,19 @@ BlazeComponent.extendComponent({
const textarea = this.find('textarea.js-add-subtask-item');
const title = textarea.value.trim();
const cardId = this.currentData().cardId;
const card = Cards.findOne(cardId);
const card = ReactiveCache.getCard(cardId);
const sortIndex = -1;
const crtBoard = Boards.findOne(card.boardId);
const crtBoard = ReactiveCache.getBoard(card.boardId);
const targetBoard = crtBoard.getDefaultSubtasksBoard();
const listId = targetBoard.getDefaultSubtasksListId();
//Get the full swimlane data for the parent task.
const parentSwimlane = Swimlanes.findOne({
const parentSwimlane = ReactiveCache.getSwimlane({
boardId: crtBoard._id,
_id: card.swimlaneId,
});
//find the swimlane of the same name in the target board.
const targetSwimlane = Swimlanes.findOne({
const targetSwimlane = ReactiveCache.getSwimlane({
boardId: targetBoard._id,
title: parentSwimlane.title,
});
@@ -70,15 +61,6 @@ BlazeComponent.extendComponent({
textarea.focus();
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
deleteSubtask() {
const subtask = this.currentData().subtask;
if (subtask && subtask._id) {
@@ -117,17 +99,6 @@ BlazeComponent.extendComponent({
},
}).register('subtasks');
Template.subtaskItemDetail.helpers({
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
});
BlazeComponent.extendComponent({
// ...
}).register('subtaskItemDetail');
+5
View File
@@ -269,6 +269,11 @@ textarea::-moz-placeholder {
margin-top: 0px;
margin-bottom: 12px;
}
@media print {
.add-controls {
display: none;
}
}
.edit-controls button[type=submit],
.add-controls button[type=submit],
.edit-controls input[type=button],
+3 -1
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
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
@@ -28,7 +30,7 @@ export function csvGetMembersToMap(data) {
username: importedMember,
id: importedMember,
};
const wekanUser = Users.findOne({ username: importedMember.username });
const wekanUser = ReactiveCache.getUser({ username: importedMember.username });
if (wekanUser) importedMember.wekanId = wekanUser._id;
membersToMap.push(importedMember);
}
+6 -6
View File
@@ -56,17 +56,17 @@ template(name="importMapMembersAddPopup")
p
| {{_ 'import-user-select'}}
.js-map-member
+esInput(index="users")
+EasySearch.Input(index=searchIndex)
ul.pop-over-list
+esEach(index="users")
+EasySearch.Each(index=searchIndex)
li.item.js-member-item
a.name.js-select-import(title="{{profile.fullname}} ({{username}})" data-id="{{_id}}")
+userAvatar(userId=_id esSearch=true)
a.name.js-select-import(title="{{profile.fullname}} ({{username}})" data-id="{{__originalId}}")
+userAvatar(userId=__originalId)
span.full-name
= profile.fullname
| (<span class="username">{{username}}</span>)
+ifEsIsSearching(index='users')
+EasySearch.IfSearching(index=searchIndex)
+spinner
+ifEsHasNoResults(index="users")
+EasySearch.IfNoResults(index=searchIndex)
.manage-member-section
p.quiet {{_ 'no-results'}}
+8 -3
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { trelloGetMembersToMap } from './trelloMembersMapper';
import { wekanGetMembersToMap } from './wekanMembersMapper';
import { csvGetMembersToMap } from './csvMembersMapper';
@@ -174,9 +175,9 @@ BlazeComponent.extendComponent({
this._refreshMembers(
this.members().map(member => {
if (!member.wekanId) {
let user = Users.findOne({ username: member.username });
let user = ReactiveCache.getUser({ username: member.username });
if (!user) {
user = Users.findOne({ importUsernames: member.username });
user = ReactiveCache.getUser({ importUsernames: member.username });
}
if (user) {
// eslint-disable-next-line no-console
@@ -297,7 +298,7 @@ BlazeComponent.extendComponent({
},
onSelectUser() {
Popup.getOpenerComponent().mapSelectedMember(this.currentData()._id);
Popup.getOpenerComponent(5).mapSelectedMember(this.currentData().__originalId);
Popup.back();
},
@@ -309,3 +310,7 @@ BlazeComponent.extendComponent({
];
},
}).register('importMapMembersAddPopup');
Template.importMapMembersAddPopup.helpers({
searchIndex: () => UserSearchIndex,
})
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
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
@@ -5,7 +7,7 @@ export function trelloGetMembersToMap(data) {
const membersToMap = data.members;
// auto-map based on username
membersToMap.forEach(importedMember => {
const wekanUser = Users.findOne({ username: importedMember.username });
const wekanUser = ReactiveCache.getUser({ username: importedMember.username });
if (wekanUser) {
importedMember.wekanId = wekanUser._id;
}
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
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
@@ -15,7 +17,7 @@ export function wekanGetMembersToMap(data) {
importedMember.fullName = user.profile.fullname;
}
importedMember.username = user.username;
const wekanUser = Users.findOne({ username: importedMember.username });
const wekanUser = ReactiveCache.getUser({ username: importedMember.username });
if (wekanUser) {
importedMember.wekanId = wekanUser._id;
}
+30 -2
View File
@@ -7,10 +7,16 @@
border-left: 1px solid #ccc;
padding: 0;
float: left;
min-width: 270px;
max-width: 270px;
min-width: 100px; /* TODO(mark-i-m): hardcoded? */
/*max-width: 270px;*/
/* Reverted incomplete change list width: */
/* https://github.com/wekan/wekan/issues/4558 */
/* Orinal width: 270px. Changes not saved yet: */
/*resize: both; - List width and height resizeable */
/* overflow: auto; - List width and height resizeable */
}
.list:first-child {
min-width: 20px;
margin-left: 5px;
border-left: none;
}
@@ -83,6 +89,12 @@
.list-header .list-header-menu {
float: right;
}
@media print {
.list-header .list-header-menu,
.list-header .list-header-menu-icon {
display: none;
}
}
.list-header .list-header-plus-top {
color: #a6a6a6;
margin-right: 15px;
@@ -101,6 +113,9 @@
color: #4d4d4d;
padding-left: 4px;
}
.js-open-list-menu {
font-size: 18px;
}
.list-body {
flex: 1 1 auto;
flex-direction: column;
@@ -111,10 +126,15 @@
.list-body .minicards {
flex-grow: 1;
flex-shrink: 0;
/** get card drag/drop working for empty swimlanes */
min-height: 32px;
}
.list-body .minicards form {
margin-bottom: 9px;
}
.list-body .minicards .add-controls button {
min-height: 50px;
}
.list-body .open-minicard-composer {
border-radius: 2px;
color: #8c8c8c;
@@ -124,6 +144,11 @@
text-decoration: none;
animation: fadeIn 0.3s;
}
@media print {
.list-body .open-minicard-composer {
display: none;
}
}
.list-body .open-minicard-composer i.fa {
margin-right: 7px;
}
@@ -154,6 +179,9 @@
#js-wip-limit-edit div {
float: left;
}
#js-list-width-edit .list-width-error {
display: none;
}
@media screen and (max-width: 800px) {
.mini-list {
flex: 0 0 60px;
+2 -1
View File
@@ -1,5 +1,6 @@
template(name='list')
.list.js-list(id="js-list-{{_id}}")
.list.js-list(id="js-list-{{_id}}"
style="width:{{listWidth}}px;")
+listHeader
+listBody
+20 -25
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
require('/client/lib/jquery-ui.js')
@@ -23,14 +24,6 @@ BlazeComponent.extendComponent({
onRendered() {
const boardComponent = this.parentComponent().parentComponent();
function userIsMember() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly()
);
}
const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)';
const $cards = this.$('.js-minicards');
@@ -60,6 +53,7 @@ BlazeComponent.extendComponent({
distance: 7,
items: itemsSelector,
placeholder: 'minicard-wrapper placeholder',
scrollSpeed: 10,
start(evt, ui) {
ui.helper.css('z-index', 1000);
ui.placeholder.height(ui.helper.height());
@@ -74,7 +68,7 @@ BlazeComponent.extendComponent({
const nCards = MultiSelection.isActive() ? MultiSelection.count() : 1;
const sortIndex = calculateIndex(prevCardDom, nextCardDom, nCards);
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
const defaultSwimlaneId = currentBoard.getDefaultSwimline()._id;
let targetSwimlaneId = null;
@@ -96,7 +90,7 @@ BlazeComponent.extendComponent({
$cards.sortable('cancel');
if (MultiSelection.isActive()) {
Cards.find(MultiSelection.getMongoSelector(), {sort: ['sort']}).forEach((card, i) => {
ReactiveCache.getCards(MultiSelection.getMongoSelector(), { sort: ['sort'] }).forEach((card, i) => {
const newSwimlaneId = targetSwimlaneId
? targetSwimlaneId
: card.swimlaneId || defaultSwimlaneId;
@@ -119,35 +113,31 @@ BlazeComponent.extendComponent({
},
sort(event, ui) {
const $boardCanvas = $('.board-canvas');
const boardCanvas = $boardCanvas[0];
const boardCanvas = $boardCanvas[0];
if (event.pageX < 10)
{ // scroll to the left
if (event.pageX < 10) { // scroll to the left
boardCanvas.scrollLeft -= 15;
ui.helper[0].offsetLeft -= 15;
}
if (
event.pageX > boardCanvas.offsetWidth - 10 &&
boardCanvas.scrollLeft < $boardCanvas.data('scrollLeftMax') // don't scroll more than possible
)
{ // scroll to the right
) { // scroll to the right
boardCanvas.scrollLeft += 15;
}
if (
event.pageY > boardCanvas.offsetHeight - 10 &&
event.pageY + boardCanvas.scrollTop < $boardCanvas.data('scrollTopMax') // don't scroll more than possible
)
{ // scroll to the bottom
) { // scroll to the bottom
boardCanvas.scrollTop += 15;
}
if (event.pageY < 10)
{ // scroll to the top
if (event.pageY < 10) { // scroll to the top
boardCanvas.scrollTop -= 15;
}
},
activate(event, ui) {
const $boardCanvas = $('.board-canvas');
const boardCanvas = $boardCanvas[0];
const boardCanvas = $boardCanvas[0];
// scrollTopMax and scrollLeftMax only available at Firefox (https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTopMax)
// https://www.it-swarm.com.de/de/javascript/so-erhalten-sie-den-maximalen-dokument-scrolltop-wert/1069126844/
$boardCanvas.data('scrollTopMax', boardCanvas.scrollHeight - boardCanvas.clientTop);
@@ -157,7 +147,7 @@ BlazeComponent.extendComponent({
});
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$cards.sortable({
handle: '.handle',
});
@@ -172,9 +162,9 @@ BlazeComponent.extendComponent({
'option',
'disabled',
// Disable drag-dropping when user is not member
!userIsMember(),
!Utils.canModifyBoard(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
// MultiSelection.isActive() || !Utils.canModifyBoard(),
);
}
});
@@ -184,14 +174,13 @@ BlazeComponent.extendComponent({
const currentBoardId = Tracker.nonreactive(() => {
return Session.get('currentBoard');
});
Cards.find({ boardId: currentBoardId }).fetch();
Tracker.afterFlush(() => {
$cards.find(itemsSelector).droppable({
hoverClass: 'draggable-hover-card',
accept: '.js-member,.js-label',
drop(event, ui) {
const cardId = Blaze.getData(this)._id;
const card = Cards.findOne(cardId);
const card = ReactiveCache.getCard(cardId);
if (ui.draggable.hasClass('js-member')) {
const memberId = Blaze.getData(ui.draggable.get(0)).userId;
@@ -205,6 +194,12 @@ BlazeComponent.extendComponent({
});
});
},
listWidth() {
const user = Meteor.user();
const list = Template.currentData();
return user.getListWidth(list.boardId, list._id);
},
}).register('list');
Template.miniList.events({
+3 -2
View File
@@ -1,7 +1,7 @@
template(name="listBody")
.list-body
.minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}")
if cards.count
if cards.length
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
ul.sidebar-list
@@ -54,6 +54,7 @@ template(name="addCardForm")
.add-controls.clearfix
button.primary.confirm(type="submit") {{_ 'add'}}
a.fa.fa-times-thin.js-close-inlined-form
.add-controls.clearfix
unless currentBoard.isTemplatesBoard
unless currentBoard.isTemplateBoard
span.quiet
@@ -94,7 +95,7 @@ template(name="linkCardPopup")
label {{_ 'cards'}}:
select.js-select-cards
each cards
option(value="{{getId}}") {{getTitle}}
option(value="{{getRealId}}") {{getTitle}}
.edit-controls.clearfix
input.primary.confirm.js-done(type="button" value="{{_ 'link'}}")
+108 -77
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
import { Spinner } from '/client/lib/spinner';
@@ -15,10 +16,11 @@ BlazeComponent.extendComponent({
},
customFieldsSum() {
return CustomFields.find({
const ret = ReactiveCache.getCustomFields({
boardIds: { $in: [Session.get('currentBoard')] },
showSumAtTopOfList: true,
});
return ret;
},
openForm(options) {
@@ -64,7 +66,7 @@ BlazeComponent.extendComponent({
swimlaneId = this.parentComponent()
.parentComponent()
.data()._id; // Always swimlanes view
const swimlane = Swimlanes.findOne(swimlaneId);
const swimlane = ReactiveCache.getSwimlane(swimlaneId);
// If this is the card templates swimlane, insert a card template
if (swimlane.isCardTemplatesSwimlane()) cardType = 'template-card';
// If this is the board templates swimlane, insert a board template and a linked card
@@ -112,7 +114,7 @@ BlazeComponent.extendComponent({
// to appear
const cardCount = this.data()
.cards(this.idOrNull(swimlaneId))
.count();
.length;
if (this.cardlimit.get() < cardCount) {
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
}
@@ -200,25 +202,23 @@ BlazeComponent.extendComponent({
archived: false,
};
if (swimlaneId) selector.swimlaneId = swimlaneId;
return Cards.find(Filter.mongoSelector(selector), {
const ret = ReactiveCache.getCards(Filter.mongoSelector(selector), {
// sort: ['sort'],
sort: sortBy,
limit,
});
}, true);
return ret;
},
showSpinner(swimlaneId) {
const list = Template.currentData();
return list.cards(swimlaneId).count() > this.cardlimit.get();
return list.cards(swimlaneId).length > this.cardlimit.get();
},
canSeeAddCard() {
return (
!this.reachedWipLimit() &&
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
Utils.canModifyCard()
);
},
@@ -227,7 +227,7 @@ BlazeComponent.extendComponent({
return (
!list.getWipLimit('soft') &&
list.getWipLimit('enabled') &&
list.getWipLimit('value') <= list.cards().count()
list.getWipLimit('value') <= list.cards().length
);
},
@@ -269,9 +269,8 @@ BlazeComponent.extendComponent({
const currentBoardId = Session.get('currentBoard');
arr = [];
_.forEach(
Boards.findOne(currentBoardId)
.customFields()
.fetch(),
ReactiveCache.getBoard(currentBoardId)
.customFields(),
function (field) {
if (field.automaticallyOnCard || field.alwaysOnCard)
arr.push({ _id: field._id, value: null });
@@ -288,8 +287,8 @@ BlazeComponent.extendComponent({
getLabels() {
const currentBoardId = Session.get('currentBoard');
if (Boards.findOne(currentBoardId).labels) {
return Boards.findOne(currentBoardId).labels.filter(label => {
if (ReactiveCache.getBoard(currentBoardId).labels) {
return ReactiveCache.getBoard(currentBoardId).labels.filter(label => {
return this.labels.get().indexOf(label._id) > -1;
});
}
@@ -349,10 +348,10 @@ BlazeComponent.extendComponent({
{
match: /\B@([\w.-]*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
callback(
$.map(currentBoard.activeMembers(), member => {
const user = Users.findOne(member.userId);
const user = ReactiveCache.getUser(member.userId);
return user.username.indexOf(term) === 0 ? user : null;
}),
);
@@ -374,7 +373,7 @@ BlazeComponent.extendComponent({
{
match: /\B#(\w*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
callback(
$.map(currentBoard.labels, label => {
if (label.name == undefined) {
@@ -430,10 +429,10 @@ BlazeComponent.extendComponent({
this.boardId = Session.get('currentBoard');
// In order to get current board info
subManager.subscribe('board', this.boardId, false);
this.board = Boards.findOne(this.boardId);
this.board = ReactiveCache.getBoard(this.boardId);
// List where to insert card
const list = $(Popup._getTopStack().openerElement).closest('.js-list');
this.listId = Blaze.getData(list[0])._id;
this.list = $(Popup._getTopStack().openerElement).closest('.js-list');
this.listId = Blaze.getData(this.list[0])._id;
// Swimlane where to insert card
const swimlane = $(Popup._getTopStack().openerElement).closest(
'.js-swimlane',
@@ -442,11 +441,11 @@ BlazeComponent.extendComponent({
if (Utils.boardView() === 'board-view-swimlanes')
this.swimlaneId = Blaze.getData(swimlane[0])._id;
else if (Utils.boardView() === 'board-view-lists' || !Utils.boardView)
this.swimlaneId = Swimlanes.findOne({ boardId: this.boardId })._id;
this.swimlaneId = ReactiveCache.getSwimlane({ boardId: this.boardId })._id;
},
boards() {
const boards = Boards.find(
const ret = ReactiveCache.getBoards(
{
archived: false,
'members.userId': Meteor.userId(),
@@ -457,16 +456,22 @@ BlazeComponent.extendComponent({
sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
return ret;
},
swimlanes() {
if (!this.selectedBoardId.get()) {
return [];
}
const swimlanes = Swimlanes.find({ boardId: this.selectedBoardId.get() });
if (swimlanes.count())
this.selectedSwimlaneId.set(swimlanes.fetch()[0]._id);
const swimlanes = ReactiveCache.getSwimlanes(
{
boardId: this.selectedBoardId.get()
},
{
sort: { sort: 1 },
});
if (swimlanes.length)
this.selectedSwimlaneId.set(swimlanes[0]._id);
return swimlanes;
},
@@ -474,8 +479,14 @@ BlazeComponent.extendComponent({
if (!this.selectedBoardId.get()) {
return [];
}
const lists = Lists.find({ boardId: this.selectedBoardId.get() });
if (lists.count()) this.selectedListId.set(lists.fetch()[0]._id);
const lists = ReactiveCache.getLists(
{
boardId: this.selectedBoardId.get()
},
{
sort: { sort: 1 },
});
if (lists.length) this.selectedListId.set(lists[0]._id);
return lists;
},
@@ -483,10 +494,9 @@ BlazeComponent.extendComponent({
if (!this.board) {
return [];
}
const ownCardsIds = this.board.cards().map(card => {
return card.linkedId || card._id;
});
return Cards.find({
const ownCardsIds = this.board.cards().map(card => card.getRealId());
const ret = ReactiveCache.getCards(
{
boardId: this.selectedBoardId.get(),
swimlaneId: this.selectedSwimlaneId.get(),
listId: this.selectedListId.get(),
@@ -494,7 +504,24 @@ BlazeComponent.extendComponent({
linkedId: { $nin: ownCardsIds },
_id: { $nin: ownCardsIds },
type: { $nin: ['template-card'] },
},
{
sort: { sort: 1 },
});
return ret;
},
getSortIndex() {
const position = this.currentData().position;
let ret;
if (position === 'top') {
const firstCardDom = this.list.find('.js-minicard:first')[0];
ret = Utils.calculateIndex(null, firstCardDom).base;
} else if (position === 'bottom') {
const lastCardDom = this.list.find('.js-minicard:last')[0];
ret = Utils.calculateIndex(lastCardDom, null).base;
}
return ret;
},
events() {
@@ -519,16 +546,17 @@ BlazeComponent.extendComponent({
Popup.back();
return;
}
const nextCardNumber = this.board.getNextCardNumber();
const sortIndex = this.getSortIndex();
const _id = Cards.insert({
title: $('.js-select-cards option:selected').text(), //dummy
listId: this.listId,
swimlaneId: this.swimlaneId,
boardId: this.boardId,
sort: Lists.findOne(this.listId)
.cards()
.count(),
sort: sortIndex,
type: 'cardType-linkedCard',
linkedId,
cardNumber: nextCardNumber,
});
Filter.addException(_id);
Popup.back();
@@ -540,21 +568,22 @@ BlazeComponent.extendComponent({
const impBoardId = $('.js-select-boards option:selected').val();
if (
!impBoardId ||
Cards.findOne({ linkedId: impBoardId, archived: false })
ReactiveCache.getCard({ linkedId: impBoardId, archived: false })
) {
Popup.back();
return;
}
const nextCardNumber = this.board.getNextCardNumber();
const sortIndex = this.getSortIndex();
const _id = Cards.insert({
title: $('.js-select-boards option:selected').text(), //dummy
listId: this.listId,
swimlaneId: this.swimlaneId,
boardId: this.boardId,
sort: Lists.findOne(this.listId)
.cards()
.count(),
sort: sortIndex,
type: 'cardType-linkedBoard',
linkedId: impBoardId,
cardNumber: nextCardNumber,
});
Filter.addException(_id);
Popup.back();
@@ -587,36 +616,27 @@ BlazeComponent.extendComponent({
this.isListTemplateSearch ||
this.isSwimlaneTemplateSearch ||
this.isBoardTemplateSearch;
let board = {};
this.board = {};
if (this.isTemplateSearch) {
//board = Boards.findOne((Meteor.user().profile || {}).templatesBoardId);
board._id = (Meteor.user().profile || {}).templatesBoardId;
const boardId = (ReactiveCache.getCurrentUser().profile || {}).templatesBoardId;
if (boardId) {
this.board = ReactiveCache.getBoard(boardId);
}
} else {
// Prefetch first non-current board id
board = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
_id: {
$nin: [
Session.get('currentBoard'),
(Meteor.user().profile || {}).templatesBoardId,
],
},
});
this.board = Utils.getCurrentBoard();
}
if (!board) {
if (!this.board) {
Popup.back();
return;
}
const boardId = board._id;
this.boardId = this.board._id;
// Subscribe to this board
subManager.subscribe('board', boardId, false);
this.selectedBoardId = new ReactiveVar(boardId);
subManager.subscribe('board', this.boardId, false);
this.selectedBoardId = new ReactiveVar(this.boardId);
this.list = $(Popup._getTopStack().openerElement).closest('.js-list');
if (!this.isBoardTemplateSearch) {
this.boardId = Session.get('currentBoard');
// In order to get current board info
subManager.subscribe('board', this.boardId, false);
this.swimlaneId = '';
// Swimlane where to insert card
const swimlane = $(Popup._getTopStack().openerElement).parents(
@@ -624,16 +644,15 @@ BlazeComponent.extendComponent({
);
if (Utils.boardView() === 'board-view-swimlanes')
this.swimlaneId = Blaze.getData(swimlane[0])._id;
else this.swimlaneId = Swimlanes.findOne({ boardId: this.boardId })._id;
else this.swimlaneId = ReactiveCache.getSwimlane({ boardId: this.boardId })._id;
// List where to insert card
const list = $(Popup._getTopStack().openerElement).closest('.js-list');
this.listId = Blaze.getData(list[0])._id;
this.listId = Blaze.getData(this.list[0])._id;
}
this.term = new ReactiveVar('');
},
boards() {
const boards = Boards.find(
const ret = ReactiveCache.getBoards(
{
archived: false,
'members.userId': Meteor.userId(),
@@ -644,14 +663,14 @@ BlazeComponent.extendComponent({
sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
return ret;
},
results() {
if (!this.selectedBoardId) {
return [];
}
const board = Boards.findOne(this.selectedBoardId.get());
const board = ReactiveCache.getBoard(this.selectedBoardId.get());
if (!this.isTemplateSearch || this.isCardTemplateSearch) {
return board.searchCards(this.term.get(), false);
} else if (this.isListTemplateSearch) {
@@ -669,6 +688,19 @@ BlazeComponent.extendComponent({
}
},
getSortIndex() {
const position = this.data().position;
let ret;
if (position === 'top') {
const firstCardDom = this.list.find('.js-minicard:first')[0];
ret = Utils.calculateIndex(null, firstCardDom).base;
} else if (position === 'bottom') {
const lastCardDom = this.list.find('.js-minicard:last')[0];
ret = Utils.calculateIndex(lastCardDom, null).base;
}
return ret;
},
events() {
return [
{
@@ -692,9 +724,8 @@ BlazeComponent.extendComponent({
if (!this.isTemplateSearch || this.isCardTemplateSearch) {
// Card insertion
// 1. Common
element.sort = Lists.findOne(this.listId)
.cards()
.count();
element.cardNumber = this.board.getNextCardNumber();
element.sort = this.getSortIndex();
// 1.A From template
if (this.isTemplateSearch) {
element.type = 'cardType-card';
@@ -707,15 +738,15 @@ BlazeComponent.extendComponent({
Filter.addException(_id);
// List insertion
} else if (this.isListTemplateSearch) {
element.sort = Swimlanes.findOne(this.swimlaneId)
element.sort = ReactiveCache.getSwimlane(this.swimlaneId)
.lists()
.count();
.length;
element.type = 'list';
_id = element.copy(this.boardId, this.swimlaneId);
} else if (this.isSwimlaneTemplateSearch) {
element.sort = Boards.findOne(this.boardId)
element.sort = ReactiveCache.getBoard(this.boardId)
.swimlanes()
.count();
.length;
element.type = 'swimlane';
_id = element.copy(this.boardId);
} else if (this.isBoardTemplateSearch) {
@@ -723,7 +754,7 @@ BlazeComponent.extendComponent({
'copyBoard',
element.linkedId,
{
sort: Boards.find({ archived: false }).count(),
sort: ReactiveCache.getBoards({ archived: false }).length,
type: 'board',
title: element.title,
},
@@ -757,7 +788,7 @@ BlazeComponent.extendComponent({
Meteor.settings.public.sandstorm;
if (isSandstorm) {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
if (user) {
if (Utils.boardView() === 'board-view-swimlanes') {
this.swimlaneId = this.parentComponent()
+23 -5
View File
@@ -15,11 +15,11 @@ template(name="listHeader")
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.count}}
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
if showCardsCountForList cards.count
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.count}}
if showCardsCountForList cards.length
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}}
if isMiniScreen
if currentList
@@ -44,7 +44,7 @@ template(name="listHeader")
a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}")
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
if currentUser.isBoardAdmin
if isShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
@@ -62,6 +62,11 @@ template(name="listActionPopup")
i.fa.fa-arrow-down
| {{_ 'add-card-to-bottom-of-list'}}
hr
ul.pop-over-list
li
a.js-set-list-width
i.fa.fa-arrows-h
| {{_ 'set-list-width'}}
ul.pop-over-list
li
a.js-toggle-watch-list
@@ -79,7 +84,7 @@ template(name="listActionPopup")
i.fa.fa-paint-brush
| {{_ 'set-color-list'}}
ul.pop-over-list
if cards.count
if cards.length
li
a.js-select-cards
i.fa.fa-check-square
@@ -156,6 +161,19 @@ template(name="wipLimitErrorPopup")
p {{_ 'wipLimitErrorPopup-dialog-pt2'}}
button.full.js-back-view(type="submit") {{_ 'cancel'}}
template(name="setListWidthPopup")
#js-list-width-edit
label {{_ 'set-list-width-value'}}
p
input.list-width-value(type="number" value="{{ listWidthValue }}" min="100")
input.list-width-apply(type="submit" value="{{_ 'apply'}}")
input.list-width-error
template(name="listWidthErrorPopup")
.list-width-invalid
p {{_ 'list-width-error-message'}} '&gt;=100'
button.full.js-back-view(type="submit") {{_ 'cancel'}}
template(name="setListColorPopup")
form.edit-label
.palette-colors: each colors
+61 -21
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
let listsColors;
@@ -12,12 +13,12 @@ BlazeComponent.extendComponent({
(!list.getWipLimit('enabled') ||
list.getWipLimit('soft') ||
!this.reachedWipLimit()) &&
!Meteor.user().isWorker()
!ReactiveCache.getCurrentUser().isWorker()
);
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
return ReactiveCache.getCurrentUser().isBoardAdmin();
},
starred(check = undefined) {
const list = Template.currentData();
@@ -47,9 +48,9 @@ BlazeComponent.extendComponent({
},
limitToShowCardsCount() {
const currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
return Meteor.user().getLimitToShowCardsCount();
return currentUser.getLimitToShowCardsCount();
} else {
return false;
}
@@ -63,14 +64,15 @@ BlazeComponent.extendComponent({
.parentComponent()
.data()._id;
return list.cards(swimlaneId).count();
const ret = list.cards(swimlaneId).length;
return ret;
},
reachedWipLimit() {
const list = Template.currentData();
return (
list.getWipLimit('enabled') &&
list.getWipLimit('value') <= list.cards().count()
list.getWipLimit('value') <= list.cards().length
);
},
@@ -78,7 +80,7 @@ BlazeComponent.extendComponent({
const list = Template.currentData();
return (
list.getWipLimit('enabled') &&
list.getWipLimit('value') < list.cards().count()
list.getWipLimit('value') < list.cards().length
);
},
@@ -123,13 +125,13 @@ BlazeComponent.extendComponent({
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
return ReactiveCache.getCurrentUser().isBoardAdmin();
}
});
Template.listActionPopup.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
return ReactiveCache.getCurrentUser().isBoardAdmin();
},
isWipLimitEnabled() {
@@ -151,6 +153,7 @@ Template.listActionPopup.events({
});
Popup.back();
},
'click .js-set-list-width': Popup.open('setListWidth'),
'click .js-set-color-list': Popup.open('setListColor'),
'click .js-select-cards'() {
const cardIds = this.allCards().map(card => card._id);
@@ -183,7 +186,7 @@ BlazeComponent.extendComponent({
10,
);
if (limit < list.cards().count() && !list.getWipLimit('soft')) {
if (limit < list.cards().length && !list.getWipLimit('soft')) {
Template.instance()
.$('.wip-limit-error')
.click();
@@ -198,9 +201,9 @@ BlazeComponent.extendComponent({
if (
list.getWipLimit('soft') &&
list.getWipLimit('value') < list.cards().count()
list.getWipLimit('value') < list.cards().length
) {
list.setWipLimit(list.cards().count());
list.setWipLimit(list.cards().length);
}
Meteor.call('enableSoftLimit', Template.currentData()._id);
},
@@ -210,9 +213,9 @@ BlazeComponent.extendComponent({
// Prevent user from using previously stored wipLimit.value if it is less than the current number of cards in the list
if (
!list.getWipLimit('enabled') &&
list.getWipLimit('value') < list.cards().count()
list.getWipLimit('value') < list.cards().length
) {
list.setWipLimit(list.cards().count());
list.setWipLimit(list.cards().length);
}
Meteor.call('enableWipLimit', list._id);
},
@@ -244,17 +247,16 @@ BlazeComponent.extendComponent({
Template.listMorePopup.events({
'click .js-delete': Popup.afterConfirm('listDelete', function() {
Popup.back();
// TODO how can we avoid the fetch call?
const allCards = this.allCards().fetch();
const allCards = this.allCards();
const allCardIds = _.pluck(allCards, '_id');
// it's okay if the linked cards are on the same list
if (
Cards.find({
ReactiveCache.getCards({
$and: [
{ listId: { $ne: this._id } },
{ linkedId: { $in: allCardIds } },
],
}).count() === 0
}).length === 0
) {
allCardIds.map(_id => Cards.remove(_id));
Lists.remove(this._id);
@@ -279,7 +281,7 @@ Template.listMorePopup.events({
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
return ReactiveCache.getCurrentUser().isBoardAdmin();
},
});
@@ -309,13 +311,51 @@ BlazeComponent.extendComponent({
},
'click .js-submit'() {
this.currentList.setColor(this.currentColor.get());
Popup.back();
Popup.close();
},
'click .js-remove-color'() {
this.currentList.setColor(null);
Popup.back();
Popup.close();
},
},
];
},
}).register('setListColorPopup');
BlazeComponent.extendComponent({
applyListWidth() {
const list = Template.currentData();
const board = list.boardId;
const width = parseInt(
Template.instance()
.$('.list-width-value')
.val(),
10,
);
// FIXME(mark-i-m): where do we put constants?
if (width < 100 || !width) {
Template.instance()
.$('.list-width-error')
.click();
} else {
Meteor.call('applyListWidth', board, list._id, width);
Popup.back();
}
},
listWidthValue() {
const list = Template.currentData();
const board = list.boardId;
return Meteor.user().getListWidth(board, list._id);
},
events() {
return [
{
'click .list-width-apply': this.applyListWidth,
'click .list-width-error': Popup.open('listWidthError'),
},
];
},
}).register('setListWidthPopup');
+2 -1
View File
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { CardSearchPagedComponent } from '../../lib/cardSearch';
import {
OPERATOR_HAS,
@@ -66,7 +67,7 @@ class DueCardsComponent extends CardSearchPagedComponent {
});
if (Utils.dueCardsView() !== 'all') {
queryParams.addPredicate(OPERATOR_USER, Meteor.user().username);
queryParams.addPredicate(OPERATOR_USER, ReactiveCache.getCurrentUser().username);
}
this.runGlobalSearch(queryParams);
+9 -4
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
const specialHandles = [
{userId: 'board_members', username: 'board_members'},
{userId: 'card_members', username: 'card_members'}
@@ -13,13 +15,13 @@ BlazeComponent.extendComponent({
{
match: /\B@([\w.-]*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
callback(
_.union(
currentBoard
.activeMembers()
.map(member => {
const user = Users.findOne(member.userId);
const user = ReactiveCache.getUser(member.userId);
const username = user.username;
const fullName = user.profile && user.profile !== undefined && user.profile.fullname ? user.profile.fullname : "";
return username.includes(term) || fullName.includes(term) ? user : null;
@@ -328,13 +330,13 @@ Blaze.Template.registerHelper(
new Template('mentions', function() {
const view = this;
let content = Blaze.toHTML(view.templateContentBlock);
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const currentBoard = Utils.getCurrentBoard();
if (!currentBoard)
return HTML.Raw(
DOMPurify.sanitize(content, { ALLOW_UNKNOWN_PROTOCOLS: true }),
);
const knowedUsers = _.union(currentBoard.members.map(member => {
const u = Users.findOne(member.userId);
const u = ReactiveCache.getUser(member.userId);
if (u) {
member.username = u.username;
}
@@ -394,6 +396,9 @@ Template.viewer.events({
} else {
const href = event.currentTarget.href;
if (href) {
// Open links in current browser tab, changed from _blank to _self, and back to _blank:
// https://github.com/wekan/wekan/discussions/3534
//window.open(href, '_self');
window.open(href, '_blank');
}
}
+7 -5
View File
@@ -1,30 +1,32 @@
/*
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url("/fonts/roboto-regular.woff2") format('woff2'), url("/fonts/roboto-regular.woff") format('woff');
src: local('Roboto'), local('Roboto-Regular'), url("../../../roboto-regular.woff2") format('woff2'), url("../../../roboto-regular.woff") format('woff');
}
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
src: local('Roboto Bold'), local('Roboto-Bold'), url("/fonts/roboto-bold.woff2") format('woff2'), url("/fonts/roboto-bold.woff") format('woff');
src: local('Roboto Bold'), local('Roboto-Bold'), url("../../../roboto-bold.woff2") format('woff2'), url("../../../roboto-bold.woff") format('woff');
}
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
src: local('Poppins'), local('Poppins-Regular'), url("/fonts/poppins-regular.woff") format('woff');
src: local('Poppins'), local('Poppins-Regular'), url("../../../poppins-regular.woff") format('woff');
}
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 500;
src: local('Poppins Medium'), local('Poppins-Medium'), url("/fonts/poppins-medium.woff") format('woff');
src: local('Poppins Medium'), local('Poppins-Medium'), url("../../../poppins-medium.woff") format('woff');
}
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 700;
src: local('Poppins Bold'), local('Poppins-Bold'), url("/fonts/poppins-bold.woff") format('woff');
src: local('Poppins Bold'), local('Poppins-Bold'), url("../../../poppins-bold.woff") format('woff');
}
*/
+23 -2
View File
@@ -107,6 +107,12 @@
#header-quick-access a {
text-decoration: none;
}
#header-quick-access i.fa {
color: #fff;
}
#header-quick-access i.fa:hover {
color: #ccc;
}
#header-quick-access #header-user-bar,
#header-quick-access #header-new-board-icon,
#header-quick-access ul li {
@@ -178,13 +184,15 @@
top: -5px;
margin-right: 5px;
}
#header-quick-access #header-user-bar .header-user-bar-avatar .member {
#header-quick-access #header-user-bar .header-user-bar-avatar .member,
#header-quick-access #header-help {
width: 24px;
height: 24px;
margin: 0;
margin-top: 1px;
}
#header-quick-access #header-user-bar .header-user-bar-name {
#header-quick-access #header-user-bar .header-user-bar-name,
#header-quick-access #header-help {
margin: 4px 8px 0 0;
float: left;
}
@@ -244,6 +252,19 @@
margin: -8px 0 -10px -10px;
}
}
@media print {
#header-quick-access .allBoards,
#header-quick-access ul,
#header-quick-access .js-toggle-desktop-drag-handles,
#header-quick-access #notifications,
#header-quick-access #header-new-board-icon,
#header #header-main-bar .board-header-btns {
display: none;
}
#header #header-user-bar {
float: right;
}
}
.announcement .viewer {
display: inline-block;
}
+17 -2
View File
@@ -10,7 +10,6 @@ template(name="header")
span
a(href="{{pathFor 'home'}}")
span.fa.fa-home
ul.header-quick-access-list
if currentList
each currentBoard.lists
@@ -24,6 +23,12 @@ template(name="header")
a(href="{{pathFor 'board' id=_id slug=slug}}")
+viewer
= title
a.js-toggle-desktop-drag-handles(title="{{_ 'show-desktop-drag-handles'}}" alt="{{_ 'show-desktop-drag-handles'}}")
i.fa.fa-arrows
if isShowDesktopDragHandles
i.fa.fa-check-square-o
unless isShowDesktopDragHandles
i.fa.fa-ban
#header-new-board-icon
else
//-
@@ -56,7 +61,12 @@ template(name="header")
= title
else
li.current.empty {{_ 'quick-access-description'}}
a.js-toggle-desktop-drag-handles(title="{{_ 'show-desktop-drag-handles'}}" alt="{{_ 'show-desktop-drag-handles'}}")
i.fa.fa-arrows
if isShowDesktopDragHandles
i.fa.fa-check-square-o
unless isShowDesktopDragHandles
i.fa.fa-ban
// Next line is used only for spacing at header,
// there is no visible clickable icon.
#header-new-board-icon
@@ -67,6 +77,11 @@ template(name="header")
+notifications
if currentSetting.customHelpLinkUrl
#header-help
a(href="{{currentSetting.customHelpLinkUrl}}", title="{{_ 'help'}}", target="_blank", rel="noopener noreferrer")
span.fa.fa-question
+headerUserBar
#header(class=currentBoard.colorClass)
+16 -5
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
Meteor.subscribe('user-admin');
Meteor.subscribe('boards');
Meteor.subscribe('setting');
@@ -9,7 +11,7 @@ Template.header.onCreated(function(){
Meteor.subscribe('setting', {
onReady() {
templateInstance.currentSetting.set(Settings.findOne());
templateInstance.currentSetting.set(ReactiveCache.getCurrentSetting());
let currSetting = templateInstance.currentSetting.curValue;
if(currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined && document.getElementById("headerIsSettingDatabaseCallDone") != null)
document.getElementById("headerIsSettingDatabaseCallDone").style.display = 'none';
@@ -24,10 +26,6 @@ Template.header.helpers({
return !Session.get('currentBoard');
},
currentSetting() {
return Settings.findOne();
},
hideLogo() {
return Utils.isMiniScreen() && Session.get('currentBoard');
},
@@ -57,6 +55,19 @@ Template.header.events({
Session.set('currentList', this._id);
Session.set('currentCard', null);
},
'click .js-toggle-desktop-drag-handles'() {
//currentUser = Meteor.user();
//if (currentUser) {
// Meteor.call('toggleDesktopDragHandles');
//} else if (window.localStorage.getItem('showDesktopDragHandles')) {
if (window.localStorage.getItem('showDesktopDragHandles')) {
window.localStorage.removeItem('showDesktopDragHandles');
location.reload();
} else {
window.localStorage.setItem('showDesktopDragHandles', 'true');
location.reload();
}
},
});
Template.offlineWarning.events({
+7 -49
View File
@@ -1,6 +1,9 @@
* {
-webkit-box-sizing: unset;
box-sizing: unset;
}
/* Fixed missing 'import nib' stylesheet reset and extra li bullet points
* https://github.com/wekan/wekan/issues/4512#issuecomment-1129347536
* https://github.com/stylus/nib/blob/master/lib/nib/reset.styl
*/
a, abbr, acronym, address, applet, big, blockquote, body, caption, cite,
code, dd, del, dfn, div, dl, dt, em, fieldset, form, h1, h2, h3, h4, h5,
@@ -16,51 +19,6 @@ table, tbody, td, tfoot, th, thread, tr, tt, ul, var {
font-size: 100%;
vertical-align: baseline;
}
ol, ul {
list-style: none;
}
a img {
border: none;
}
/* reset body */
body {
line-height: 1;
color: black;
background: white;
}
/* reset table cell */
table {
border-collapse: separate;
border-spacing: 0;
vertical-align: middle;
}
caption, td, th {
text-align: left;
font-weight: normal;
vertical-align: middle;
}
/* reset html5 */
article, aside, canvas, details, figcaption,
figure, footer, header, hgroup, menu, nav,
section, summary, main {
display: block;
}
audio, canvas, video {
display: inline-block;
*display: inline;
*zoom: 1;
}
audio:not([controls]),[hidden] {
display: none;
}
/* End of reset css */
* {
-webkit-box-sizing: unset;
box-sizing: unset;
}
.note-popover .popover-content .note-color-palette div .note-color-btn,
.panel-heading.note-toolbar .note-color-palette div .note-color-btn {
background: none;
@@ -601,14 +559,14 @@ a:not(.disabled).is-active i.fa {
top: 45px;
left: 10px;
}
#isSettingDatabaseCallDone {
display: none;
}
.at-link {
color: #17683a;
text-decoration: underline;
text-decoration-color: #17683a;
}
.at-pwd-form, .at-sep, .at-oauth {
display: none;
}
@-moz-keyframes fadeIn {
from {
opacity: 0;
+5 -5
View File
@@ -10,12 +10,13 @@ head
link(rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png")
link(rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png")
link(rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png")
link(rel="manifest" href="/site.webmanifest")
link(rel="manifest" crossOrigin="use-credentials" href="/site.webmanifest")
link(rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5")
meta(name="apple-mobile-web-app-title" content="Wekan")
meta(name="application-name" content="Wekan")
meta(name="msapplication-TileColor" content="#00aba9")
meta(name="theme-color" content="#ffffff")
//link(rel="stylesheet" type="text/css" class="__meteor-css__" href="css/html5-default-theme.css")
template(name="userFormsLayout")
section.auth-layout
@@ -33,10 +34,9 @@ template(name="userFormsLayout")
unless currentSetting.customLoginLogoLinkUrl
img(src="{{currentSetting.customLoginLogoImageUrl}}" width="300" height="auto")
br
unless currentSetting.customLoginLogoImageUrl
div#isSettingDatabaseCallDone
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
br
else
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
br
if currentSetting.textBelowCustomLoginLogo
+viewer
| {{currentSetting.textBelowCustomLoginLogo}}
+84 -76
View File
@@ -1,10 +1,11 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
BlazeLayout.setRoot('body');
let alreadyCheck = 1;
let isCheckDone = false;
let counter = 0;
const validator = {
set(obj, prop, value) {
if (prop === 'state' && value !== 'signIn') {
@@ -19,84 +20,92 @@ const validator = {
},
};
// let isSettingDatabaseFctCallDone = false;
Template.userFormsLayout.onCreated(function() {
Template.userFormsLayout.onCreated(function () {
const templateInstance = this;
templateInstance.currentSetting = new ReactiveVar();
templateInstance.isLoading = new ReactiveVar(false);
Meteor.subscribe('setting', {
onReady() {
templateInstance.currentSetting.set(Settings.findOne());
let currSetting = templateInstance.currentSetting.curValue;
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
oidcBtnElt.html(htmlvalue);
if (!ReactiveCache.getCurrentUser()?.profile) {
Meteor.call('isOidcRedirectionEnabled', (_, result) => {
if (result) {
AccountsTemplates.options.socialLoginStyle = 'redirect';
options = {
loginStyle: AccountsTemplates.options.socialLoginStyle,
};
Meteor.loginWithOidc(options);
}
});
// isSettingDatabaseFctCallDone = true;
if(currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined)
document.getElementById("isSettingDatabaseCallDone").style.display = 'none';
else
document.getElementById("isSettingDatabaseCallDone").style.display = 'block';
return this.stop();
},
});
Meteor.call('isPasswordLoginDisabled', (_, result) => {
if (result) {
$('.at-pwd-form').hide();
}
});
Meteor.call('isDisableRegistration', (_, result) => {
if (result) {
$('.at-signup-link').hide();
}
});
Meteor.call('isDisableForgotPassword', (_, result) => {
if (result) {
$('.at-pwd-link').hide();
}
});
Meteor.subscribe('setting', {
onReady() {
templateInstance.currentSetting.set(ReactiveCache.getCurrentSetting());
return this.stop();
},
});
}
});
Template.userFormsLayout.onRendered(() => {
AccountsTemplates.state.form.keys = new Proxy(
AccountsTemplates.state.form.keys,
validator,
);
EscapeActions.executeAll();
Meteor.call('getAuthenticationsEnabled', (_, result) => {
let enabledAuthenticationMethods = [ 'password' ]; // we show/hide this based on isPasswordLoginEnabled
if (result) {
Object.keys(result).forEach((m) => {
if (result[m]) enabledAuthenticationMethods.push(m);
});
}
Meteor.call('isPasswordLoginEnabled', (_, result) => {
if (result) {
$('.at-pwd-form').show();
}
});
Meteor.call('isDisableRegistration', (_, result) => {
if (result) {
$('.at-signup-link').hide();
}
});
Meteor.call('isDisableForgotPassword', (_, result) => {
if (result) {
$('.at-pwd-link').hide();
}
});
if (enabledAuthenticationMethods.indexOf('oauth2') !== -1) {
// TODO find better way to run this code once the oauth2 UI is injected in the DOM
(function waitForElementAndShow() {
if (!$('.at-oauth')[0]) return setTimeout(waitForElementAndShow, 100);
$('.at-oauth').show();
})();
}
AccountsTemplates.state.form.keys = new Proxy(
AccountsTemplates.state.form.keys,
validator,
);
EscapeActions.executeAll();
});
});
Template.userFormsLayout.helpers({
currentSetting() {
return Template.instance().currentSetting.get();
},
// isSettingDatabaseCallDone(){
// return isSettingDatabaseFctCallDone;
// },
isLegalNoticeLinkExist(){
isLegalNoticeLinkExist() {
const currSet = Template.instance().currentSetting.get();
if(currSet && currSet !== undefined && currSet != null){
if (currSet && currSet !== undefined && currSet != null) {
return currSet.legalNotice !== undefined && currSet.legalNotice.trim() != "";
}
else
return false;
},
getLegalNoticeWithWritTraduction(){
getLegalNoticeWithWritTraduction() {
let spanLegalNoticeElt = $("#legalNoticeSpan");
if(spanLegalNoticeElt != null && spanLegalNoticeElt != undefined){
if (spanLegalNoticeElt != null && spanLegalNoticeElt != undefined) {
spanLegalNoticeElt.html(TAPi18n.__('acceptance_of_our_legalNotice', {}));
}
let atLinkLegalNoticeElt = $("#legalNoticeAtLink");
if(atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined){
if (atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined) {
atLinkLegalNoticeElt.html(TAPi18n.__('legalNotice', {}));
}
return true;
@@ -147,41 +156,41 @@ Template.userFormsLayout.events({
}
isCheckDone = false;
},
'click #at-signUp'(event, templateInstance){
'click #at-signUp'(event, templateInstance) {
isCheckDone = false;
},
'DOMSubtreeModified #at-oidc'(event){
if(alreadyCheck <= 2){
let currSetting = Settings.findOne();
'DOMSubtreeModified #at-oidc'(event) {
if (alreadyCheck <= 2) {
let currSetting = ReactiveCache.getCurrentSetting();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
if (alreadyCheck == 1) {
alreadyCheck++;
oidcBtnElt.html("");
}
else{
else {
alreadyCheck++;
oidcBtnElt.html(htmlvalue);
}
}
}
else{
else {
alreadyCheck = 1;
}
},
'DOMSubtreeModified .at-form'(event){
if(alreadyCheck <= 2 && !isCheckDone){
if(document.getElementById("at-oidc") != null){
let currSetting = Settings.findOne();
'DOMSubtreeModified .at-form'(event) {
if (alreadyCheck <= 2 && !isCheckDone) {
if (document.getElementById("at-oidc") != null) {
let currSetting = ReactiveCache.getCurrentSetting();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
if (alreadyCheck == 1) {
alreadyCheck++;
oidcBtnElt.html("");
}
else{
else {
alreadyCheck++;
isCheckDone = true;
oidcBtnElt.html(htmlvalue);
@@ -189,7 +198,7 @@ Template.userFormsLayout.events({
}
}
}
else{
else {
alreadyCheck = 1;
}
},
@@ -221,7 +230,7 @@ async function authentication(event, templateInstance) {
switch (result) {
case 'ldap':
return new Promise(resolve => {
Meteor.loginWithLDAP(match, password, function() {
Meteor.loginWithLDAP(match, password, function () {
resolve(FlowRouter.go('/'));
});
});
@@ -233,7 +242,7 @@ async function authentication(event, templateInstance) {
{
provider,
},
function() {
function () {
resolve(FlowRouter.go('/'));
},
);
@@ -241,7 +250,7 @@ async function authentication(event, templateInstance) {
case 'cas':
return new Promise(resolve => {
Meteor.loginWithCas(match, password, function() {
Meteor.loginWithCas(match, password, function () {
resolve(FlowRouter.go('/'));
});
});
@@ -267,7 +276,6 @@ function getUserAuthenticationMethod(defaultAuthenticationMethod, match) {
Meteor.subscribe('user-authenticationMethod', match, {
onReady() {
const user = Users.findOne();
const authenticationMethod = user
? user.authenticationMethod
: defaultAuthenticationMethod;
+1
View File
@@ -63,6 +63,7 @@
.my-cards-card-title-table {
font-weight: bold;
padding-left: 2px;
max-width: 243px;
}
.my-cards-board-badge {
width: 36px;
+9 -1
View File
@@ -88,7 +88,7 @@
height: 20px;
}
.pop-over .quiet {
padding: 6px 6px 4px;
/* padding: 6px 6px 4px;*/
}
.pop-over.search-over {
background: #f0f0f0;
@@ -152,6 +152,14 @@
text-decoration: none;
overflow: hidden;
line-height: 33px;
display:flex;
/* flex-wrap:wrap;*/
gap:5px;
align-items: center;
}
.pop-over-list li > a > .member{
align-self: flex-start;
flex:0 0 auto;
}
.pop-over-list li > a .item-name {
display: block;
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
Template.notification.events({
'click .read-status .materialCheckBox'() {
const update = {};
@@ -7,22 +9,22 @@ Template.notification.events({
Users.update(Meteor.userId(), { $set: update });
},
'click .remove a'() {
Meteor.user().removeNotification(this.activityData._id);
ReactiveCache.getCurrentUser().removeNotification(this.activityData._id);
},
});
Template.notification.helpers({
mode: 'board',
isOfActivityType(activityId, type) {
const activity = Activities.findOne(activityId);
const activity = ReactiveCache.getActivity(activityId);
return activity && activity.activityType === type;
},
activityType(activityId) {
const activity = Activities.findOne(activityId);
const activity = ReactiveCache.getActivity(activityId);
return activity ? activity.activityType : '';
},
activityUser(activityId) {
const activity = Activities.findOne(activityId);
const activity = ReactiveCache.getActivity(activityId);
return activity && activity.userId;
},
});
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
// this hides the notifications drawer if anyone clicks off of the panel
Template.body.events({
click(event) {
@@ -12,7 +14,7 @@ Template.body.events({
Template.notifications.helpers({
unreadNotifications() {
const notifications = Users.findOne(Meteor.userId()).notifications();
const notifications = ReactiveCache.getCurrentUser().notifications();
const unreadNotifications = _.filter(notifications, v => !v.read);
return unreadNotifications.length;
},
@@ -1,3 +1,4 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { toggleNotificationsDrawer } from './notifications.js';
Template.notificationsDrawer.onCreated(function() {
@@ -14,11 +15,11 @@ Template.notificationsDrawer.onCreated(function() {
Template.notificationsDrawer.helpers({
transformedProfile() {
return Users.findOne(Meteor.userId());
return ReactiveCache.getCurrentUser();
},
readNotifications() {
const readNotifications = _.filter(
Meteor.user().profile.notifications,
ReactiveCache.getCurrentUser().profile.notifications,
v => !!v.read,
);
return readNotifications.length;
@@ -27,7 +28,7 @@ Template.notificationsDrawer.helpers({
Template.notificationsDrawer.events({
'click .all-read'() {
const notifications = Meteor.user().profile.notifications;
const notifications = ReactiveCache.getCurrentUser().profile.notifications;
for (const index in notifications) {
if (notifications.hasOwnProperty(index) && !notifications[index].read) {
const update = {};
@@ -43,7 +44,7 @@ Template.notificationsDrawer.events({
Session.set('showReadNotifications', !Session.get('showReadNotifications'));
},
'click .remove-read'() {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
for (const notification of user.profile.notifications) {
if (notification.read) {
user.removeNotification(notification.activity);
@@ -77,6 +77,29 @@ template(name="boardActions")
div.trigger-button.js-create-card-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
| {{_'r-link-card'}}
div.trigger-text
| {{_'r-the-board'}}
div.trigger-dropdown
select(id="board-id-link")
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
div.trigger-text
| {{_'r-in-list'}}
div.trigger-dropdown
input(id="listName-link",type=text,placeholder="{{_'r-name'}}")
div.trigger-text
| {{_'r-in-swimlane'}}
div.trigger-dropdown
input(id="swimlaneName-link",type=text,placeholder="{{_'r-name'}}")
div.trigger-button.js-link-card-action.js-goto-rules
i.fa.fa-plus
@@ -1,20 +1,22 @@
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
onCreated() {},
boards() {
const boards = Boards.find(
const ret = ReactiveCache.getBoards(
{
archived: false,
'members.userId': Meteor.userId(),
_id: {
$ne: Meteor.user().getTemplatesBoardId(),
$ne: ReactiveCache.getCurrentUser().getTemplatesBoardId(),
},
},
{
sort: { sort: 1 /* boards default sorting */ },
},
);
return boards;
return ret;
},
events() {
@@ -178,6 +180,29 @@ BlazeComponent.extendComponent({
});
}
},
'click .js-link-card-action'(event) {
const ruleName = this.data().ruleName.get();
const trigger = this.data().triggerVar.get();
const swimlaneName = this.find('#swimlaneName-link').value || '*';
const listName = this.find('#listName-link').value || '*';
const boardId = Session.get('currentBoard');
const destBoardId = this.find('#board-id-link').value;
const desc = Utils.getTriggerActionDesc(event, this);
const triggerId = Triggers.insert(trigger);
const actionId = Actions.insert({
actionType: 'linkCard',
listName,
swimlaneName,
boardId: destBoardId,
desc,
});
Rules.insert({
title: ruleName,
triggerId,
actionId,
boardId,
});
},
},
];
},
@@ -18,7 +18,7 @@ BlazeComponent.extendComponent({
},
labels() {
const labels = Boards.findOne(Session.get('currentBoard')).labels;
const labels = Utils.getCurrentBoard().labels;
for (let i = 0; i < labels.length; i++) {
if (labels[i].name === '' || labels[i].name === undefined) {
labels[i].name = labels[i].color.toUpperCase();
+6 -12
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
onCreated() {
this.subscribe('allRules');
@@ -7,24 +9,16 @@ BlazeComponent.extendComponent({
trigger() {
const ruleId = this.data().ruleId;
const rule = Rules.findOne({
_id: ruleId.get(),
});
const trigger = Triggers.findOne({
_id: rule.triggerId,
});
const rule = ReactiveCache.getRule(ruleId.get());
const trigger = ReactiveCache.getTrigger(rule.triggerId);
const desc = trigger.description();
const upperdesc = desc.charAt(0).toUpperCase() + desc.substr(1);
return upperdesc;
},
action() {
const ruleId = this.data().ruleId;
const rule = Rules.findOne({
_id: ruleId.get(),
});
const action = Actions.findOne({
_id: rule.actionId,
});
const rule = ReactiveCache.getRule(ruleId.get());
const action = ReactiveCache.getAction(rule.actionId);
const desc = action.description();
const upperdesc = desc.charAt(0).toUpperCase() + desc.substr(1);
return upperdesc;
+4 -1
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
onCreated() {
this.currentActions = new ReactiveVar('board');
@@ -33,7 +35,8 @@ BlazeComponent.extendComponent({
},
rules() {
return Rules.find({});
const ret = ReactiveCache.getRules({});
return ret;
},
name() {
+4 -1
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
onCreated() {
this.subscribe('allRules');
@@ -5,9 +7,10 @@ BlazeComponent.extendComponent({
rules() {
const boardId = Session.get('currentBoard');
return Rules.find({
const ret = ReactiveCache.getRules({
boardId,
});
return ret;
},
events() {
return [{}];
+3 -1
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
onCreated() {
this.rulesCurrentTab = new ReactiveVar('rulesList');
@@ -55,7 +57,7 @@ BlazeComponent.extendComponent({
let trigger = this.triggerVar.get();
trigger.userId = '*';
if (username !== undefined) {
const userFound = Users.findOne({ username });
const userFound = ReactiveCache.getUser({ username });
if (userFound !== undefined) {
trigger.userId = userFound._id;
this.triggerVar.set(trigger);
+4 -1
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
BlazeComponent.extendComponent({
onCreated() {
this.showBoardTrigger = new ReactiveVar(true);
@@ -31,7 +33,8 @@ BlazeComponent.extendComponent({
},
rules() {
return Rules.find({});
const ret = ReactiveCache.getRules({});
return ret;
},
name() {
@@ -5,7 +5,7 @@ BlazeComponent.extendComponent({
this.subscribe('allRules');
},
labels() {
const labels = Boards.findOne(Session.get('currentBoard')).labels;
const labels = Utils.getCurrentBoard().labels;
for (let i = 0; i < labels.length; i++) {
if (labels[i].name === '' || labels[i].name === undefined) {
labels[i].name = labels[i].color;
+1 -1
View File
@@ -88,7 +88,7 @@ template(name="filesReport")
each att in results
tr
td {{ att.name }}
td.right {{fileSize att.size }}
td.right {{ fileSize att.size }}
td {{ att.type }}
td {{ att._id }}
td {{ att.meta.boardId }}
+23 -21
View File
@@ -1,9 +1,11 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
import { AttachmentStorage } from '/models/attachments';
import { CardSearchPagedComponent } from '/client/lib/cardSearch';
import SessionData from '/models/usersessiondata';
import { QueryParams } from '/config/query-classes';
import { OPERATOR_LIMIT } from '/config/search-const';
const filesize = require('filesize');
BlazeComponent.extendComponent({
subscription: null,
@@ -114,11 +116,15 @@ class AdminReport extends BlazeComponent {
}
fileSize(size) {
return Math.round(size / 1024);
let ret = "";
if (_.isNumber(size)) {
ret = filesize(size);
}
return ret;
}
abbreviate(text) {
if (text.length > 30) {
if (text?.length > 30) {
return `${text.substr(0, 29)}...`;
}
return text;
@@ -135,7 +141,7 @@ class AdminReport extends BlazeComponent {
results() {
const rules = [];
Rules.find().forEach(rule => {
ReactiveCache.getRules().forEach(rule => {
rules.push({
_id: rule._id,
title: rule.title,
@@ -156,17 +162,13 @@ class AdminReport extends BlazeComponent {
collection = Boards;
userNames(members) {
let text = '';
members.forEach(member => {
const user = Users.findOne(member.userId);
text += text ? ', ' : '';
if (user) {
text += user.username;
} else {
text += member.userId
}
});
return text;
const ret = (members || [])
.map(_member => {
const _ret = ReactiveCache.getUser(_member.userId)?.username || _member.userId;
return _ret;
})
.join(", ");
return ret;
}
}.register('boardsReport'));
@@ -174,13 +176,13 @@ class AdminReport extends BlazeComponent {
collection = Cards;
userNames(userIds) {
let text = '';
userIds.forEach(userId => {
const user = Users.findOne(userId);
text += text ? ', ' : '';
text += user.username;
});
return text;
const ret = (userIds || [])
.map(_userId => {
const _ret = ReactiveCache.getUser(_userId)?.username;
return _ret;
})
.join(", ");
return ret
}
}.register('cardsReport'));
+14 -2
View File
@@ -23,6 +23,8 @@ template(name="moveAttachments")
button.js-move-all-attachments-to-fs {{_ 'move-all-attachments-to-fs'}}
.js-move-attachment
button.js-move-all-attachments-to-gridfs {{_ 'move-all-attachments-to-gridfs'}}
.js-move-attachment
button.js-move-all-attachments-to-s3 {{_ 'move-all-attachments-to-s3'}}
each board in getBoardsWithAttachments
+moveBoardAttachments board
@@ -43,6 +45,8 @@ template(name="moveBoardAttachments")
button.js-move-all-attachments-of-board-to-fs {{_ 'move-all-attachments-of-board-to-fs'}}
.js-move-attachment
button.js-move-all-attachments-of-board-to-gridfs {{_ 'move-all-attachments-of-board-to-gridfs'}}
.js-move-attachment
button.js-move-all-attachments-of-board-to-s3 {{_ 'move-all-attachments-of-board-to-s3'}}
.board-attachments
table
@@ -52,8 +56,9 @@ template(name="moveBoardAttachments")
th {{_ 'name'}}
th {{_ 'path'}}
th {{_ 'version-name'}}
th {{_ 'size'}} (B)
th {{_ 'size'}}
th GridFsFileId
th S3FileId
th {{_ 'storage'}}
th {{_ 'action'}}
@@ -68,8 +73,9 @@ template(name="moveAttachment")
td {{ name }}
td {{ version.path }}
td {{ version.versionName }}
td {{ version.size }}
td {{ fileSize version.size }}
td {{ version.meta.gridFsFileId }}
td {{ version.meta.s3FileId }}
td {{ version.storageName }}
td
if $neq version.storageName "fs"
@@ -82,3 +88,9 @@ template(name="moveAttachment")
button.js-move-storage-gridfs
i.fa.fa-arrow-right
| {{_ 'attachment-move-storage-gridfs'}}
if $neq version.storageName "s3"
if version.storageName
button.js-move-storage-s3
i.fa.fa-arrow-right
| {{_ 'attachment-move-storage-s3'}}
+22 -3
View File
@@ -1,4 +1,6 @@
import { ReactiveCache } from '/imports/reactiveCache';
import Attachments, { fileStoreStrategyFactory } from '/models/attachments';
const filesize = require('filesize');
BlazeComponent.extendComponent({
subscription: null,
@@ -43,7 +45,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
getBoardsWithAttachments() {
this.attachments = Attachments.find().get();
this.attachments = ReactiveCache.getAttachments();
this.attachmentsByBoardId = _.chain(this.attachments)
.groupBy(fileObj => fileObj.meta.boardId)
.value();
@@ -60,14 +62,14 @@ BlazeComponent.extendComponent({
return _version;
});
});
const board = Boards.findOne(boardId);
const board = ReactiveCache.getBoard(boardId);
board.attachments = boardAttachments;
return board;
})
return ret;
},
getBoardData(boardid) {
const ret = Boards.findOne(boardId);
const ret = ReactiveCache.getBoard(boardId);
return ret;
},
events() {
@@ -83,6 +85,11 @@ BlazeComponent.extendComponent({
Meteor.call('moveAttachmentToStorage', _attachment._id, "gridfs");
});
},
'click button.js-move-all-attachments-to-s3'(event) {
this.attachments.forEach(_attachment => {
Meteor.call('moveAttachmentToStorage', _attachment._id, "s3");
});
},
}
]
}
@@ -102,12 +109,21 @@ BlazeComponent.extendComponent({
Meteor.call('moveAttachmentToStorage', _attachment._id, "gridfs");
});
},
'click button.js-move-all-attachments-of-board-to-s3'(event) {
this.data().attachments.forEach(_attachment => {
Meteor.call('moveAttachmentToStorage', _attachment._id, "s3");
});
},
}
]
},
}).register('moveBoardAttachments');
BlazeComponent.extendComponent({
fileSize(size) {
const ret = filesize(size);
return ret;
},
events() {
return [
{
@@ -117,6 +133,9 @@ BlazeComponent.extendComponent({
'click button.js-move-storage-gridfs'(event) {
Meteor.call('moveAttachmentToStorage', this.data()._id, "gridfs");
},
'click button.js-move-storage-s3'(event) {
Meteor.call('moveAttachmentToStorage', this.data()._id, "s3");
},
}
]
},
+8 -10
View File
@@ -3,23 +3,21 @@ Template.connectionMethod.onCreated(function() {
Meteor.call('getAuthenticationsEnabled', (_, result) => {
if (result) {
// Only enabled auth methods without OAuth2/OpenID which is a separate button
const tmp = Object.keys(result).filter((k) => result[k]).filter((k) => k !== 'oauth2');
// TODO : add a management of different languages
// (ex {value: ldap, text: TAPi18n.__('ldap', {}, T9n.getLanguage() || 'en')})
this.authenticationMethods.set([
{ value: 'password' },
// Gets only the authentication methods availables
...Object.entries(result)
.filter(e => e[1])
.map(e => ({ value: e[0] })),
]);
this.authenticationMethods.set([{ value: 'password' }].concat(tmp.map((k) => { return { value: k }; })));
}
// If only the default authentication available, hides the select boxe
const content = $('.at-form-authentication');
if (!(this.authenticationMethods.get().length > 1)) {
content.hide();
} else {
if (this.authenticationMethods.get().length > 1) {
content.show();
} else {
content.hide();
}
});
});
+17 -14
View File
@@ -58,38 +58,38 @@ template(name='statistics')
td {{numFormat statistics.os.loadavg.[0]}}, {{numFormat statistics.os.loadavg.[1]}}, {{numFormat statistics.os.loadavg.[2]}}
tr
th {{_ 'OS_Totalmem'}}
td {{bytesToSize statistics.os.totalmem}}
td {{fileSize statistics.os.totalmem}}
tr
th {{_ 'OS_Freemem'}}
td {{bytesToSize statistics.os.freemem}}
td {{fileSize statistics.os.freemem}}
tr
th {{_ 'OS_Cpus'}}
td {{statistics.os.cpus.length}}
unless isSandstorm
tr
th {{_ 'Node_heap_total_heap_size'}}
td {{bytesToSize statistics.nodeHeapStats.totalHeapSize}}
td {{fileSize statistics.nodeHeapStats.totalHeapSize}}
tr
th {{_ 'Node_heap_total_heap_size_executable'}}
td {{bytesToSize statistics.nodeHeapStats.totalHeapSizeExecutable}}
td {{fileSize statistics.nodeHeapStats.totalHeapSizeExecutable}}
tr
th {{_ 'Node_heap_total_physical_size'}}
td {{bytesToSize statistics.nodeHeapStats.totalPhysicalSize}}
td {{fileSize statistics.nodeHeapStats.totalPhysicalSize}}
tr
th {{_ 'Node_heap_total_available_size'}}
td {{bytesToSize statistics.nodeHeapStats.totalAvailableSize}}
td {{fileSize statistics.nodeHeapStats.totalAvailableSize}}
tr
th {{_ 'Node_heap_used_heap_size'}}
td {{bytesToSize statistics.nodeHeapStats.usedHeapSize}}
td {{fileSize statistics.nodeHeapStats.usedHeapSize}}
tr
th {{_ 'Node_heap_heap_size_limit'}}
td {{bytesToSize statistics.nodeHeapStats.heapSizeLimit}}
td {{fileSize statistics.nodeHeapStats.heapSizeLimit}}
tr
th {{_ 'Node_heap_malloced_memory'}}
td {{bytesToSize statistics.nodeHeapStats.mallocedMemory}}
td {{fileSize statistics.nodeHeapStats.mallocedMemory}}
tr
th {{_ 'Node_heap_peak_malloced_memory'}}
td {{bytesToSize statistics.nodeHeapStats.peakMallocedMemory}}
td {{fileSize statistics.nodeHeapStats.peakMallocedMemory}}
tr
th {{_ 'Node_heap_does_zap_garbage'}}
td {{statistics.nodeHeapStats.doesZapGarbage}}
@@ -101,13 +101,16 @@ template(name='statistics')
td {{statistics.nodeHeapStats.numberOfDetachedContexts}}
tr
th {{_ 'Node_memory_usage_rss'}}
td {{bytesToSize statistics.nodeMemoryUsage.rss}}
td {{fileSize statistics.nodeMemoryUsage.rss}}
tr
th {{_ 'Node_memory_usage_heap_total'}}
td {{bytesToSize statistics.nodeMemoryUsage.heapTotal}}
td {{fileSize statistics.nodeMemoryUsage.heapTotal}}
tr
th {{_ 'Node_memory_usage_heap_used'}}
td {{bytesToSize statistics.nodeMemoryUsage.heapUsed}}
td {{fileSize statistics.nodeMemoryUsage.heapUsed}}
tr
th {{_ 'Node_memory_usage_external'}}
td {{bytesToSize statistics.nodeMemoryUsage.external}}
td {{fileSize statistics.nodeMemoryUsage.external}}
tr
th {{_ 'Mongo_sessions_count'}}
td {{statistics.session.sessionsCount}}
@@ -1,4 +1,5 @@
import { TAPi18n } from '/imports/i18n';
const filesize = require('filesize');
BlazeComponent.extendComponent({
onCreated() {
@@ -39,12 +40,11 @@ BlazeComponent.extendComponent({
return parseFloat(number).toFixed(2);
},
bytesToSize(bytes) {
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
if (bytes === 0) {
return '0 Byte';
fileSize(size) {
let ret = "";
if (_.isNumber(size)) {
ret = filesize(size);
}
const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)), 10);
return `${Math.round(bytes / Math.pow(1024, i), 2)} ${sizes[i]}`;
return ret;
},
}).register('statistics');
+3 -1
View File
@@ -1,7 +1,9 @@
import { ReactiveCache } from '/imports/reactiveCache';
Template.invitationCode.onRendered(function() {
Meteor.subscribe('setting', {
onReady() {
const setting = Settings.findOne();
const setting = ReactiveCache.getCurrentSetting();
if (!setting || !setting.disableRegistration) {
$('#invitationcode').hide();
+44 -40
View File
@@ -1,3 +1,5 @@
import { ReactiveCache } from '/imports/reactiveCache';
const orgsPerPage = 25;
const teamsPerPage = 25;
const usersPerPage = 25;
@@ -143,27 +145,27 @@ BlazeComponent.extendComponent({
this.loading.set(w);
},
orgList() {
const orgs = Org.find(this.findOrgsOptions.get(), {
const orgs = ReactiveCache.getOrgs(this.findOrgsOptions.get(), {
sort: { orgDisplayName: 1 },
fields: { _id: true },
});
this.numberOrgs.set(orgs.count(false));
this.numberOrgs.set(orgs.length);
return orgs;
},
teamList() {
const teams = Team.find(this.findTeamsOptions.get(), {
const teams = ReactiveCache.getTeams(this.findTeamsOptions.get(), {
sort: { teamDisplayName: 1 },
fields: { _id: true },
});
this.numberTeams.set(teams.count(false));
this.numberTeams.set(teams.length);
return teams;
},
peopleList() {
const users = Users.find(this.findUsersOptions.get(), {
const users = ReactiveCache.getUsers(this.findUsersOptions.get(), {
sort: { username: 1 },
fields: { _id: true },
});
this.numberPeople.set(users.count(false));
this.numberPeople.set(users.length);
return users;
},
orgNumber() {
@@ -190,22 +192,19 @@ BlazeComponent.extendComponent({
Template.orgRow.helpers({
orgData() {
const orgCollection = this.esSearch ? ESSearchResults : Org;
return orgCollection.findOne(this.orgId);
return ReactiveCache.getOrg(this.orgId);
},
});
Template.teamRow.helpers({
teamData() {
const teamCollection = this.esSearch ? ESSearchResults : Team;
return teamCollection.findOne(this.teamId);
return ReactiveCache.getTeam(this.teamId);
},
});
Template.peopleRow.helpers({
userData() {
const userCollection = this.esSearch ? ESSearchResults : Users;
return userCollection.findOne(this.userId);
return ReactiveCache.getUser(this.userId);
},
});
@@ -230,7 +229,7 @@ Template.editUserPopup.onCreated(function () {
Template.editOrgPopup.helpers({
org() {
return Org.findOne(this.orgId);
return ReactiveCache.getOrg(this.orgId);
},
errorMessage() {
return Template.instance().errorMessage.get();
@@ -239,7 +238,7 @@ Template.editOrgPopup.helpers({
Template.editTeamPopup.helpers({
team() {
return Team.findOne(this.teamId);
return ReactiveCache.getTeam(this.teamId);
},
errorMessage() {
return Template.instance().errorMessage.get();
@@ -248,25 +247,27 @@ Template.editTeamPopup.helpers({
Template.editUserPopup.helpers({
user() {
return Users.findOne(this.userId);
return ReactiveCache.getUser(this.userId);
},
authentications() {
return Template.instance().authenticationMethods.get();
},
orgsDatas() {
return Org.find({}, {sort: { orgDisplayName: 1 }});
const ret = ReactiveCache.getOrgs({}, {sort: { orgDisplayName: 1 }});
return ret;
},
teamsDatas() {
return Team.find({}, {sort: { teamDisplayName: 1 }});
const ret = ReactiveCache.getTeams({}, {sort: { teamDisplayName: 1 }});
return ret;
},
isSelected(match) {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
const selected = ReactiveCache.getUser(userId).authenticationMethod;
return selected === match;
},
isLdap() {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
const selected = ReactiveCache.getUser(userId).authenticationMethod;
return selected === 'ldap';
},
errorMessage() {
@@ -303,7 +304,7 @@ Template.newUserPopup.onCreated(function () {
Template.newOrgPopup.helpers({
org() {
return Org.findOne(this.orgId);
return ReactiveCache.getOrg(this.orgId);
},
errorMessage() {
return Template.instance().errorMessage.get();
@@ -312,7 +313,7 @@ Template.newOrgPopup.helpers({
Template.newTeamPopup.helpers({
team() {
return Team.findOne(this.teamId);
return ReactiveCache.getTeam(this.teamId);
},
errorMessage() {
return Template.instance().errorMessage.get();
@@ -321,21 +322,23 @@ Template.newTeamPopup.helpers({
Template.newUserPopup.helpers({
user() {
return Users.findOne(this.userId);
return ReactiveCache.getUser(this.userId);
},
authentications() {
return Template.instance().authenticationMethods.get();
},
orgsDatas() {
return Org.find({}, {sort: { orgDisplayName: 1 }});
const ret = ReactiveCache.getOrgs({}, {sort: { orgDisplayName: 1 }});
return ret;
},
teamsDatas() {
return Team.find({}, {sort: { teamDisplayName: 1 }});
const ret = ReactiveCache.getTeams({}, {sort: { teamDisplayName: 1 }});
return ret;
},
isSelected(match) {
const userId = Template.instance().data.userId;
if(userId){
const selected = Users.findOne(userId).authenticationMethod;
const selected = ReactiveCache.getUser(userId).authenticationMethod;
return selected === match;
}
else{
@@ -344,7 +347,7 @@ Template.newUserPopup.helpers({
},
isLdap() {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
const selected = ReactiveCache.getUser(userId).authenticationMethod;
return selected === 'ldap';
},
errorMessage() {
@@ -355,7 +358,7 @@ Template.newUserPopup.helpers({
BlazeComponent.extendComponent({
onCreated() {},
org() {
return Org.findOne(this.orgId);
return ReactiveCache.getOrg(this.orgId);
},
events() {
return [
@@ -370,7 +373,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {},
team() {
return Team.findOne(this.teamId);
return ReactiveCache.getTeam(this.teamId);
},
events() {
return [
@@ -385,7 +388,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {},
user() {
return Users.findOne(this.userId);
return ReactiveCache.getUser(this.userId);
},
events() {
return [
@@ -420,7 +423,8 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {},
teamsDatas() {
return Team.find({}, {sort: { teamDisplayName: 1 }});
const ret = ReactiveCache.getTeams({}, {sort: { teamDisplayName: 1 }});
return ret;
},
events() {
return [
@@ -443,7 +447,7 @@ BlazeComponent.extendComponent({
if(document.getElementById('addAction').checked){
for(let i = 0; i < selectedUserChkBoxUserIds.length; i++){
currentUser = Users.findOne(selectedUserChkBoxUserIds[i]);
currentUser = ReactiveCache.getUser(selectedUserChkBoxUserIds[i]);
userTms = currentUser.teams;
if(userTms == undefined || userTms.length == 0){
userTms = [];
@@ -472,7 +476,7 @@ BlazeComponent.extendComponent({
}
else{
for(let i = 0; i < selectedUserChkBoxUserIds.length; i++){
currentUser = Users.findOne(selectedUserChkBoxUserIds[i]);
currentUser = ReactiveCache.getUser(selectedUserChkBoxUserIds[i]);
userTms = currentUser.teams;
if(userTms !== undefined || userTms.length > 0)
{
@@ -565,7 +569,7 @@ BlazeComponent.extendComponent({
Template.editOrgPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const org = Org.findOne(this.orgId);
const org = ReactiveCache.getOrg(this.orgId);
const orgDisplayName = templateInstance
.find('.js-orgDisplayName')
@@ -606,7 +610,7 @@ Template.editOrgPopup.events({
Template.editTeamPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const team = Team.findOne(this.teamId);
const team = ReactiveCache.getTeam(this.teamId);
const teamDisplayName = templateInstance
.find('.js-teamDisplayName')
@@ -650,7 +654,7 @@ Template.editTeamPopup.events({
Template.editUserPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const user = Users.findOne(this.userId);
const user = ReactiveCache.getUser(this.userId);
const username = templateInstance.find('.js-profile-username').value.trim();
const fullname = templateInstance.find('.js-profile-fullname').value.trim();
const initials = templateInstance.find('.js-profile-initials').value.trim();
@@ -1074,7 +1078,7 @@ Template.newUserPopup.events({
Template.settingsOrgPopup.events({
'click #deleteButton'(event) {
event.preventDefault();
if(Users.find({"orgs.orgId": this.orgId}).count() > 0)
if (ReactiveCache.getUsers({"orgs.orgId": this.orgId}).length > 0)
{
let orgClassList = document.getElementById("deleteOrgWarningMessage").classList;
if(orgClassList.contains('hide'))
@@ -1092,7 +1096,7 @@ Template.settingsOrgPopup.events({
Template.settingsTeamPopup.events({
'click #deleteButton'(event) {
event.preventDefault();
if(Users.find({"teams.teamId": this.teamId}).count() > 0)
if (ReactiveCache.getUsers({"teams.teamId": this.teamId}).length > 0)
{
let teamClassList = document.getElementById("deleteTeamWarningMessage").classList;
if(teamClassList.contains('hide'))
@@ -1142,19 +1146,19 @@ Template.settingsUserPopup.events({
Template.settingsUserPopup.helpers({
user() {
return Users.findOne(this.userId);
return ReactiveCache.getUser(this.userId);
},
authentications() {
return Template.instance().authenticationMethods.get();
},
isSelected(match) {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
const selected = ReactiveCache.getUser(userId).authenticationMethod;
return selected === match;
},
isLdap() {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
const selected = ReactiveCache.getUser(userId).authenticationMethod;
return selected === 'ldap';
},
errorMessage() {
+21 -3
View File
@@ -171,15 +171,15 @@ template(name='announcementSettings')
ul#announcement-setting.setting-detail
li
a.flex.js-toggle-activemessage
.materialCheckBox(class="{{#if currentSetting.enabled}}is-checked{{/if}}")
.materialCheckBox(class="{{#if currentAnnouncements.enabled}}is-checked{{/if}}")
span {{_ 'admin-announcement-active'}}
li
.admin-announcement(class="{{#if currentSetting.enabled}}{{else}}hide{{/if}}")
.admin-announcement(class="{{#if currentAnnouncements.enabled}}{{else}}hide{{/if}}")
ul
li
.title {{_ 'admin-announcement-title'}}
textarea#admin-announcement.wekan-form-control= currentSetting.body
textarea#admin-announcement.wekan-form-control= currentAnnouncements.body
li
button.js-announcement-save.primary {{_ 'save'}}
@@ -229,6 +229,10 @@ template(name='layoutSettings')
.title {{_ 'custom-login-logo-link-url'}}
.form-group
input.wekan-form-control#custom-login-logo-link-url(type="text", placeholder="" value="{{currentSetting.customLoginLogoLinkUrl}}")
li.layout-form
.title {{_ 'custom-help-link-url'}}
.form-group
input.wekan-form-control#custom-help-link-url(type="text", placeholder="" value="{{currentSetting.customHelpLinkUrl}}")
li.layout-form
.title {{_ 'text-below-custom-login-logo'}}
.form-group
@@ -249,6 +253,20 @@ template(name='layoutSettings')
.title {{_ 'automatic-linked-url-schemes'}}
.form-group
textarea#automatic-linked-url-schemes.wekan-form-control= currentSetting.automaticLinkedUrlSchemes
li.layout-form
.title {{_ 'hide-card-counter-list'}}
.form-group.flex
input.wekan-form-control#hide-card-counter-list(type="radio" name="hideCardCounterList" value="true" checked="{{#if currentSetting.hideCardCounterList}}checked{{/if}}")
span {{_ 'yes'}}
input.wekan-form-control#hide-card-counter-list(type="radio" name="hideCardCounterList" value="false" checked="{{#unless currentSetting.hideCardCounterList}}checked{{/unless}}")
span {{_ 'no'}}
li.layout-form
.title {{_ 'hide-board-member-list'}}
.form-group.flex
input.wekan-form-control#hide-board-member-list(type="radio" name="hideBoardMemberList" value="true" checked="{{#if currentSetting.hideBoardMemberList}}checked{{/if}}")
span {{_ 'yes'}}
input.wekan-form-control#hide-board-member-list(type="radio" name="hideBoardMemberList" value="false" checked="{{#unless currentSetting.hideBoardMemberList}}checked{{/unless}}")
span {{_ 'no'}}
li
button.js-save-layout.primary {{_ 'save'}}
Loaded 100 of 541 files, more files were not shown because too many files have changed in this diff. Show more