Compare commits

...
924 Commits
Author SHA1 Message Date
Lauri Ojansivu 4cadc5f4f3 v5.17 2021-04-01 01:51:20 +03:00
Lauri Ojansivu 8dfb6916c5 Added stable tag release script. 2021-04-01 01:49:41 +03:00
Lauri Ojansivu 6066be944a Updated translations. 2021-04-01 01:45:24 +03:00
Lauri Ojansivu e9f8279dbe Updated ChangeLog. 2021-04-01 01:38:05 +03:00
Lauri Ojansivu 454d3b5bbe Fix Link dialog closes card when clicking in dialog.
Thanks to ryanMushy !

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

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

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

Thanks to marcungeschikts and xet7 !

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

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

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

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

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

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

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

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

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

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

Thanks to jrsupplee and xet7 !

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

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

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

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

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

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

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

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

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

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

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

Thanks to xet7 !

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Thanks to olivierlambert and xet7 !

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Thanks to mfilser and xet7 !

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

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

Thanks to airtraxx and xet7.

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

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

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

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

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

Thanks to Samunosuke, pgh2357 and xet7 !

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

Thanks to Samunosuke, pgh2357 and xet7 !

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

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-11 19:53:26 +00:00
266 changed files with 73625 additions and 42723 deletions

No files matched your search

+2 -1
View File
@@ -10,7 +10,7 @@ ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v12.20.0 \
NODE_VERSION=v12.22.0 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -19,6 +19,7 @@ ENV \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
RESULTS_PER_PAGE="" \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.20.0
node-engine: 12.22.0
node-packages:
- node-gyp
- node-pre-gyp
+2 -2
View File
@@ -5,7 +5,7 @@ echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correct
echo " You can still use any other locale as your main locale."
#Below script installs newest node 8.x for Debian/Ubuntu/Mint.
#NODE_VERSION=12.18.2
#NODE_VERSION=12.21.0
#X64NODE="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz"
function pause(){
@@ -80,7 +80,7 @@ do
curl -0 -L https://npmjs.org/install.sh | sudo sh
sudo chown -R $(id -u):$(id -g) $HOME/.npm
sudo npm -g install n
sudo n 12.18.2
sudo n 12.21.0
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#sudo apt-get install -y nodejs
elif [[ "$OSTYPE" == "darwin"* ]]; then
+1 -1
View File
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.20.0
node-engine: 12.22.0
node-packages:
- node-gyp
- node-pre-gyp
+4 -2
View File
@@ -1,8 +1,10 @@
## Issue
Email settings:
- https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
Add these issues to elsewhere:
- Snap: https://github.com/wekan/wekan-snap/issues
- LDAP: https://github.com/wekan/wekan-ldap/issues
- SECURITY ISSUES: https://github.com/wekan/wekan/blob/master/SECURITY.md
- UCS: https://github.com/wekan/univention/issues
Other Wekan issues can be added here.
+12
View File
@@ -0,0 +1,12 @@
on: [push]
jobs:
zap_scan:
runs-on: ubuntu-latest
name: Scan the webapplication
steps:
- name: OWASP ZAP Scan
runs-on: ubuntu-latest
uses: zaproxy/action-baseline@v0.4.0
with:
target: 'https://boards.wekan.team/sign-in'
-1
View File
@@ -31,5 +31,4 @@ Thumbs.db
ehthumbs.db
.eslintcache
.meteor/local
.meteor-1.6-snap/.meteor/local
.devcontainer/docker-compose.extend.yml
+5 -5
View File
@@ -6,8 +6,8 @@
meteor-base@1.4.0
# Build system
ecmascript@0.14.4
standard-minifier-css@1.7.1
ecmascript@0.15.0
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
mquandalle:jade
coffeescript@2.4.1!
@@ -72,9 +72,9 @@ simple:rest-accounts-password
useraccounts:core
email@2.0.0
horka:swipebox
dynamic-import@0.5.4
dynamic-import@0.6.0
accounts-password@1.6.3
accounts-password@1.7.0
cfs:gridfs
rzymek:fullcalendar
momentjs:moment@2.22.2
@@ -91,7 +91,6 @@ meteorhacks:aggregate@1.3.0
wekan-markdown
konecty:mongo-counter
percolate:synced-cron
easylogic:summernote
cfs:filesystem
tmeasday:check-npm-versions
steffo:meteor-accounts-saml
@@ -145,3 +144,4 @@ rajit:bootstrap3-datepicker-zh-cn
rajit:bootstrap3-datepicker-zh-tw
staringatlights:fast-render
spacebars
easylogic:summernote
+1 -1
View File
@@ -1 +1 @@
METEOR@1.12
METEOR@2.1
+14 -13
View File
@@ -1,7 +1,7 @@
3stack:presence@1.1.2
accounts-base@1.7.1
accounts-base@1.8.0
accounts-oauth@1.2.0
accounts-password@1.6.3
accounts-password@1.7.0
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
@@ -10,8 +10,8 @@ aldeed:simple-schema@1.5.4
allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.6.0
babel-compiler@7.5.4
autoupdate@1.7.0
babel-compiler@7.6.0
babel-runtime@1.5.0
base64@1.0.12
binary-heap@1.0.11
@@ -49,15 +49,15 @@ coffeescript-compiler@2.4.1
cottz:publish-relations@2.0.8
dburles:collection-helpers@1.1.0
ddp@1.4.0
ddp-client@2.3.3
ddp-client@2.4.0
ddp-common@1.4.0
ddp-rate-limiter@1.0.9
ddp-server@2.3.2
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.5.4
dynamic-import@0.6.0
easylogic:summernote@0.8.8
ecmascript@0.14.4
ecmascript@0.15.0
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.11.0
ecmascript-runtime-server@0.10.0
@@ -72,7 +72,7 @@ horka:swipebox@1.0.2
hot-code-push@1.0.4
html-tools@1.0.11
htmljs@1.0.11
http@1.4.2
http@1.4.3
id-map@1.1.0
idmontie:migrations@1.0.3
inter-process-messaging@0.1.1
@@ -87,7 +87,7 @@ lamhieu:unblock@1.0.0
launch-screen@1.2.0
livedata@1.0.18
localstorage@1.2.0
logging@1.1.20
logging@1.2.0
lucasantoniassi:accounts-lockout@1.0.0
matb33:collection-hooks@0.9.1
matteodem:easy-search@1.6.4
@@ -106,7 +106,7 @@ minifiers@1.1.8-faster-rebuild.0
minimongo@1.6.1
mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.15.0
modules@0.16.0
modules-runtime@0.12.0
momentjs:moment@2.29.1
mongo@1.10.1
@@ -191,6 +191,7 @@ rajit:bootstrap3-datepicker-zh-cn@1.7.1
rajit:bootstrap3-datepicker-zh-tw@1.7.1
random@1.2.0
rate-limit@1.0.9
react-fast-refresh@0.1.0
reactive-dict@1.3.0
reactive-var@1.0.11
reload@1.3.1
@@ -212,7 +213,7 @@ softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
srp@1.1.0
standard-minifier-css@1.7.1
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
staringatlights:fast-render@3.3.0
staringatlights:inject-data@2.3.0
@@ -233,8 +234,8 @@ useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
webapp@1.9.1
webapp-hashing@1.0.9
webapp@1.10.0
webapp-hashing@1.1.0
wekan-accounts-cas@0.1.0
wekan-accounts-oidc@1.0.10
wekan-ldap@0.0.2
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.20.0
TRAVIS_NODE_VERSION: 12.22.0
TRAVIS_NPM_VERSION: latest
before_install:
+1 -1
View File
@@ -39,7 +39,7 @@ host = https://www.transifex.com
# tap:i18n requires us to use `-` separator in the language identifiers whereas
# Transifex uses a `_` separator, without an option to customize it on one side
# or the other, so we need to do a Manual mapping.
lang_map = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_PE:es-PE, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
lang_map = ar_EG:ar-EG, bg_BG:bg, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
[wekan.application]
file_filter = i18n/<lang>.i18n.json
+1096
View File
File diff suppressed because it is too large. Load diff
+8 -5
View File
@@ -1,4 +1,4 @@
FROM quay.io/wekan/ubuntu:groovy-20201125.2
FROM quay.io/wekan/ubuntu:groovy-20210115
LABEL maintainer="wekan"
# 2020-12-03:
@@ -12,7 +12,7 @@ ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
NODE_VERSION=v12.20.0 \
NODE_VERSION=v12.22.0 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -21,6 +21,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
RESULTS_PER_PAGE="" \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
@@ -274,11 +275,12 @@ RUN \
mkdir -p /home/wekan/.npm && \
chown wekan --recursive /home/wekan/.npm /home/wekan/.config /home/wekan/.meteor && \
#gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs && \
chown wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#chown wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
@@ -291,10 +293,11 @@ RUN \
#find . -name "*phantomjs*" | xargs rm -rf && \
#
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
#gosu wekan:wekan npm install bcrypt && \
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
mv /home/wekan/app_build/bundle /build && \
\
# Put back the original tar
+2 -2
View File
@@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.20.0 \
NODE_VERSION=v12.22.0 \
WEKAN_VERSION=3.96 \
WEKAN_ARCHITECTURE=arm64
@@ -40,7 +40,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.20.0 \
NODE_VERSION=v12.22.0 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
+10 -16
View File
@@ -1,21 +1,18 @@
[![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://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
# Wekan - Open Source kanban
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
[![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)
NOTE: Docker Hub builds are broken with error ENOMEM. Only Quay works, see docker-compose.yml .
<!--
[![Docker Hub container status](https://img.shields.io/docker/build/wekanteam/wekan.svg "Docker Hub container sta>
[![Docker Hub pulls](https://img.shields.io/docker/pulls/wekanteam/wekan.svg "Docker Hub Pulls")](https://hub.doc>
-->
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619/badge)](https://bestpractices.coreinfrastructure.org/projects/4619)
## [Translate Wekan at Transifex](https://transifex.com/wekan/wekan)
@@ -24,19 +21,18 @@ New English strings of new features can be added as PRs to edge branch file weka
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
Please add most of your questions as GitHub issue: [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues).
Please add most of your questions as GitHub issue: [Wekan Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
It's better than at chat where details get lost when chat scrolls up.
## Chat
[![Wekan Chat][vanila_badge]][wekan_chat] - Most Wekan community and developers are here. Works on webbrowser
and PWA app that can be added as icon on Android and bookmark on iOS, used like native app.
[Discussions][discussions] - Wekan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
## FAQ
**NOTE**:
**NOTE**:
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
- Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
@@ -56,7 +52,7 @@ that by providing one-click installation on various platforms.
- Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
- Wekan largest user has 13k users using Wekan in their company.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 50 languages.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 62 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.
@@ -68,7 +64,7 @@ that by providing one-click installation on various platforms.
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
- SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
@@ -118,8 +114,6 @@ with [Meteor](https://www.meteor.com).
[translate_wekan]: https://www.transifex.com/wekan/wekan/
[open_source]: https://en.wikipedia.org/wiki/Open-source_software
[free_software]: https://en.wikipedia.org/wiki/Free_software
[vanila_badge]: https://vanila.io/img/join-chat-button2.png
[wekan_chat]: https://community.vanila.io/wekan
[discussions]: https://github.com/wekan/wekan/discussions
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_large)
+3 -3
View File
@@ -1,10 +1,10 @@
Security is very important to us. If you discover any issue regarding security, please disclose
the information responsibly by sending an email to security (at) wekan.team and not by
the information responsibly by sending an email to support (at) wekan.team using
[this PGP public key](support-at-wekan.team_pgp-publickey.asc) and not by
creating a GitHub issue. We will respond swiftly to fix verifiable security issues.
We thank you with a place at our hall of fame page, that is
at https://wekan.github.io/hall-of-fame . Others have just posted public GitHub issue,
so they are not at that hall-of-fame page.
at https://wekan.github.io/hall-of-fame
## How should reports be formatted?
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v4.59.0"
appVersion: "v5.17.0"
files:
userUploads:
- README.md
+3 -3
View File
@@ -82,7 +82,7 @@ template(name="activity")
+viewer
= activity.checklist.title
else
a.activity-checklist(href="{{ activity.card.absoluteUrl }}")
a.activity-checklist(href="{{ activity.card.originRelativeUrl }}")
+viewer
= activity.checklist.title
@@ -103,7 +103,7 @@ template(name="activity")
if($eq activity.activityType 'addChecklistItem')
| {{{_ 'activity-checklist-item-added' (sanitize activity.checklist.title) cardLink}}}.
.activity-checklist(href="{{ activity.card.absoluteUrl }}")
.activity-checklist(href="{{ activity.card.originRelativeUrl }}")
+viewer
= activity.checklistItem.title
@@ -139,7 +139,7 @@ template(name="activity")
//- if we are not in card mode we only display a summary of the comment
if($eq activity.activityType 'addComment')
| {{{_ 'activity-on' cardLink}}}
a.activity-comment(href="{{ activity.card.absoluteUrl }}")
a.activity-comment(href="{{ activity.card.originRelativeUrl }}")
+viewer
= activity.comment.text
+3 -3
View File
@@ -1,6 +1,6 @@
import sanitizeXss from 'xss';
const activitiesPerPage = 20;
const activitiesPerPage = 500;
BlazeComponent.extendComponent({
onCreated() {
@@ -243,7 +243,7 @@ function createCardLink(card) {
Blaze.toHTML(
HTML.A(
{
href: card.absoluteUrl(),
href: card.originRelativeUrl(),
class: 'action-card',
},
sanitizeXss(card.title),
@@ -260,7 +260,7 @@ function createBoardLink(board, list) {
Blaze.toHTML(
HTML.A(
{
href: board.absoluteUrl(),
href: board.originRelativeUrl(),
class: 'action-board',
},
sanitizeXss(text),
+5 -1
View File
@@ -3,11 +3,15 @@ BlazeComponent.extendComponent({
this.subscribe('archivedBoards');
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
archivedBoards() {
return Boards.find(
{ archived: true },
{
sort: { sort: 1 /* boards default sorting */ },
sort: { archivedAt: -1, modifiedAt: -1 },
},
);
},
+7 -2
View File
@@ -211,7 +211,12 @@ BlazeComponent.extendComponent({
}
// Disable drag-dropping if the current user is not a board member
$swimlanesDom.sortable('option', 'disabled', !userIsMember());
//$swimlanesDom.sortable('option', 'disabled', !userIsMember());
$swimlanesDom.sortable(
'option',
'disabled',
!Meteor.user().isBoardAdmin(),
);
});
function userIsMember() {
@@ -355,7 +360,7 @@ BlazeComponent.extendComponent({
end: end || card.endAt,
allDay:
Math.abs(end.getTime() - start.getTime()) / 1000 === 24 * 3600,
url: FlowRouter.url('card', {
url: FlowRouter.path('card', {
boardId: currentBoard._id,
slug: currentBoard.slug,
cardId: card._id,
+2 -2
View File
@@ -15,7 +15,8 @@ setBoardColor(color)
.is-selected .minicard
border-left: 3px solid color
button[type=submit].primary, input[type=submit].primary
button[type=submit].primary, input[type=submit].primary,
.sidebar .sidebar-content .sidebar-btn
background-color: darken(color, 20%)
&.pop-over .pop-over-list li a:not(.disabled):hover,
@@ -653,7 +654,6 @@ setBoardClear(color1,color2)
/* Card changes */
.minicard
background: #FFF
padding: 15px 15px 10px
box-shadow: 0 3px 8px rgba(0,0,0,.05)
+32 -3
View File
@@ -1,14 +1,17 @@
template(name="boardHeaderBar")
h1.header-board-menu
with currentBoard
a(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}")
+viewer
= title
+viewer
= title
.board-header-btns.left
unless isMiniScreen
if currentBoard
if currentUser
with currentBoard
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
@@ -31,6 +34,12 @@ template(name="boardHeaderBar")
if $eq watchLevel "muted"
i.fa.fa-bell-slash
span {{_ watchLevel}}
a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
i.fa.fa-sort
span {{#if isSortActive }}{{_ 'Sort is on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
if isSortActive
a.board-header-btn-close.js-sort-reset(title="Remove Sort")
i.fa.fa-times-thin
else
a.board-header-btn.js-log-in(
@@ -42,6 +51,10 @@ template(name="boardHeaderBar")
if currentBoard
if isMiniScreen
if currentUser
with currentBoard
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
@@ -247,3 +260,19 @@ template(name="boardChangeTitlePopup")
template(name="boardCreateRulePopup")
p {{_ 'close-board-pop'}}
button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
template(name="cardsSortPopup")
ul.pop-over-list
li
a.js-sort-due {{_ 'due-date'}}
hr
li
a.js-sort-title {{_ 'title-alphabetically'}}
hr
li
a.js-sort-created-desc {{_ 'created-at-newest-first'}}
hr
li
a.js-sort-created-asc {{_ 'created-at-oldest-first'}}
+49
View File
@@ -2,6 +2,7 @@
const DOWNCLS = 'fa-sort-down';
const UPCLS = 'fa-sort-up';
*/
const sortCardsBy = new ReactiveVar('');
Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-custom-fields'() {
@@ -110,6 +111,7 @@ BlazeComponent.extendComponent({
'click .js-open-filter-view'() {
Sidebar.setView('filter');
},
'click .js-sort-cards': Popup.open('cardsSort'),
/*
'click .js-open-sort-view'(evt) {
const target = evt.target;
@@ -127,6 +129,9 @@ BlazeComponent.extendComponent({
Sidebar.setView();
Filter.reset();
},
'click .js-sort-reset'() {
Session.set('sortBy', '');
},
'click .js-open-search-view'() {
Sidebar.setView('search');
},
@@ -160,6 +165,9 @@ Template.boardHeaderBar.helpers({
boardView() {
return Utils.boardView();
},
isSortActive() {
return Session.get('sortBy') ? true : false;
},
});
Template.boardChangeViewPopup.events({
@@ -368,3 +376,44 @@ BlazeComponent.extendComponent({
},
}).register('listsortPopup');
*/
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-sort-due'() {
const sortBy = {
dueAt: 1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('due-date'));
Popup.close();
},
'click .js-sort-title'() {
const sortBy = {
title: 1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('title'));
Popup.close();
},
'click .js-sort-created-asc'() {
const sortBy = {
createdAt: 1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('date-created-newest-first'));
Popup.close();
},
'click .js-sort-created-desc'() {
const sortBy = {
createdAt: -1,
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('date-created-oldest-first'));
Popup.close();
},
},
];
},
}).register('cardsSortPopup');
+7 -7
View File
@@ -60,10 +60,10 @@ template(name="boardList")
template(name="boardListHeaderBar")
h1 {{_ title }}
.board-header-btns.right
a.board-header-btn.js-open-archived-board
i.fa.fa-archive
span {{_ 'archives'}}
a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
i.fa.fa-clone
span {{_ 'templates'}}
//.board-header-btns.right
// a.board-header-btn.js-open-archived-board
// i.fa.fa-archive
// span {{_ 'archives'}}
// a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
// i.fa.fa-clone
// span {{_ 'templates'}}
+6 -2
View File
@@ -124,9 +124,13 @@ BlazeComponent.extendComponent({
},
'click .js-clone-board'(evt) {
Meteor.call(
'cloneBoard',
'copyBoard',
this.currentData()._id,
Session.get('fromBoard'),
{
sort: Boards.find({ archived: false }).count(),
type: 'board',
title: Boards.findOne(this.currentData()._id).title,
},
(err, res) => {
if (err) {
this.setError(err.error);
+4 -3
View File
@@ -46,9 +46,10 @@ template(name="attachmentsGalery")
| {{_ 'remove-cover'}}
else
| {{_ 'add-cover'}}
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
if currentUser.isBoardAdmin
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
if currentUser.isBoardMember
unless currentUser.isCommentOnly
+6
View File
@@ -45,6 +45,12 @@ Template.attachmentsGalery.events({
},
});
Template.attachmentsGalery.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
Template.previewAttachedImagePopup.events({
'click .js-large-image-clicked'() {
Popup.close();
@@ -52,6 +52,14 @@ template(name="cardCustomField-number")
if value
= value
template(name="cardCustomField-checkbox")
.js-checklist-item.checklist-item(class="{{#if data.value }}is-checked{{/if}}")
if canModifyCard
.check-box-container
.check-box.materialCheckBox(class="{{#if data.value }}is-checked{{/if}}")
else
.materialCheckBox(class="{{#if data.value }}is-checked{{/if}}")
template(name="cardCustomField-currency")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-currency")
+21 -1
View File
@@ -80,6 +80,25 @@ CardCustomField.register('cardCustomField');
}
}.register('cardCustomField-number'));
// cardCustomField-checkbox
(class extends CardCustomField {
onCreated() {
super.onCreated();
}
toggleItem() {
this.card.setCustomField(this.customFieldId, !this.data().value);
}
events() {
return [
{
'click .js-checklist-item .check-box-container': this.toggleItem,
},
];
}
}.register('cardCustomField-checkbox'));
// cardCustomField-currency
(class extends CardCustomField {
onCreated() {
@@ -102,7 +121,8 @@ CardCustomField.register('cardCustomField');
{
'submit .js-card-customfield-currency'(event) {
event.preventDefault();
const value = Number(this.find('input').value, 10);
// To allow input separated by comma, the comma is replaced by a period.
const value = Number(this.find('input').value.replace(/,/i, '.'), 10);
this.card.setCustomField(this.customFieldId, value);
},
},
+4
View File
@@ -8,3 +8,7 @@ template(name="dateBadge")
time(datetime="{{showISODate}}")
| {{showDate}}
template(name="dateCustomField")
a(title="{{showTitle}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
+66 -7
View File
@@ -1,3 +1,11 @@
// Helper function to replace HH with H for 24 hours format, because H allows also single-digit hours
function adjustedTimeFormat() {
return moment
.localeData()
.longDateFormat('LT')
.replace(/HH/i, 'H');
}
// Edit received, start, due & end dates
BlazeComponent.extendComponent({
template() {
@@ -59,7 +67,11 @@ BlazeComponent.extendComponent({
},
'keyup .js-time-field'() {
// parse for localized time format in strict mode
const dateMoment = moment(this.find('#time').value, 'LT', true);
const dateMoment = moment(
this.find('#time').value,
adjustedTimeFormat(),
true,
);
if (dateMoment.isValid()) {
this.error.set('');
}
@@ -71,16 +83,30 @@ BlazeComponent.extendComponent({
const time =
evt.target.time.value ||
moment(new Date().setHours(12, 0, 0)).format('LT');
const newTime = moment(time, adjustedTimeFormat(), true);
const newDate = moment(evt.target.date.value, 'L', true);
const dateString = `${evt.target.date.value} ${time}`;
const newDate = moment(dateString, 'L LT', true);
if (newDate.isValid()) {
this._storeDate(newDate.toDate());
Popup.close();
} else {
const newCompleteDate = moment(
dateString,
'L ' + adjustedTimeFormat(),
true,
);
if (!newTime.isValid()) {
this.error.set('invalid-time');
evt.target.time.focus();
}
if (!newDate.isValid()) {
this.error.set('invalid-date');
evt.target.date.focus();
}
if (newCompleteDate.isValid()) {
this._storeDate(newCompleteDate.toDate());
Popup.close();
} else {
if (!this.error) {
this.error.set('invalid');
}
}
},
'click .js-delete-date'(evt) {
evt.preventDefault();
@@ -363,6 +389,33 @@ class CardEndDate extends CardDate {
}
CardEndDate.register('cardEndDate');
class CardCustomFieldDate extends CardDate {
template() {
return 'dateCustomField';
}
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().value));
});
}
classes() {
return 'customfield-date';
}
showTitle() {
return '';
}
events() {
return [];
}
}
CardCustomFieldDate.register('cardCustomFieldDate');
(class extends CardReceivedDate {
showDate() {
return this.date.get().format('l');
@@ -387,6 +440,12 @@ CardEndDate.register('cardEndDate');
}
}.register('minicardEndDate'));
(class extends CardCustomFieldDate {
showDate() {
return this.date.get().format('l');
}
}.register('minicardCustomFieldDate'));
class VoteEndDate extends CardDate {
onCreated() {
super.onCreated();
+9 -5
View File
@@ -2,11 +2,11 @@
display: block
border-radius: 4px
padding: 1px 3px
background-color: #dbdbdb
&:hover, &.is-active
background-color: #b3b3b3
&.current, &.almost-due, &.due, &.long-overdue
color: #fff
@@ -14,17 +14,17 @@
background-color: #5ba639
&:hover, &.is-active
background-color: darken(#5ba639, 10)
&.almost-due
background-color: #edc909
&:hover, &.is-active
background-color: darken(#edc909, 10)
&.due
background-color: #fa3f00
&:hover, &.is-active
background-color: darken(#fa3f00, 10)
&.long-overdue
background-color: #fd5d47
&:hover, &.is-active
@@ -57,3 +57,7 @@
-webkit-font-smoothing: antialiased
margin-right: 0.3em
.customfield-date
display: block
border-radius: 4px
padding: 1px 3px
+1 -1
View File
@@ -3,5 +3,5 @@ template(name="descriptionForm")
.new-description.js-new-description(
class="{{#if descriptionFormIsOpen}}is-open{{/if}}")
form.js-new-description-form
+editor(class="js-new-description-input" data-meteor-emoji-large="true" autofocus="autofocus")
+editor(class="js-new-description-input" autofocus="autofocus")
| {{getUnsavedValue 'cardDescription' _id getDescription}}
+16 -13
View File
@@ -8,11 +8,10 @@ template(name="cardDetails")
a.fa.fa-times-thin.close-card-details.js-close-card-details
if currentUser.isBoardMember
a.fa.fa-navicon.card-details-menu.js-open-card-details-menu
input.inline-input(type="text" id="cardURL_copy" value="{{ absoluteUrl }}")
input.inline-input(type="text" id="cardURL_copy" value="{{ originRelativeUrl }}")
a.fa.fa-link.card-copy-button.js-copy-link(
class="fa-link"
title="{{_ 'copy-card-link-to-clipboard'}}"
value="{{ absoluteUrl }}"
)
if isMiniScreen
a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details
@@ -354,10 +353,11 @@ template(name="cardDetailsActionsPopup")
a.js-start-voting
i.fa.fa-thumbs-up
| {{_ 'card-edit-voting'}}
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'card-edit-custom-fields'}}
if currentUser.isBoardAdmin
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'card-edit-custom-fields'}}
//li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
//li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
//li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
@@ -382,10 +382,11 @@ template(name="cardDetailsActionsPopup")
| {{_ 'moveCardToBottom-title'}}
hr
ul.pop-over-list
li
a.js-move-card
i.fa.fa-arrow-right
| {{_ 'moveCardPopup-title'}}
if currentUser.isBoardAdmin
li
a.js-move-card
i.fa.fa-arrow-right
| {{_ 'moveCardPopup-title'}}
unless currentUser.isWorker
li
a.js-copy-card
@@ -531,7 +532,7 @@ template(name="cardMorePopup")
span {{_ 'link-card'}}
= ' '
i.fa.colorful(class="{{#if board.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
input.inline-input(type="text" id="cardURL" readonly value="{{ absoluteUrl }}" autofocus="autofocus")
input.inline-input(type="text" id="cardURL" readonly value="{{ originRelativeUrl }}" autofocus="autofocus")
button.js-copy-card-link-to-clipboard(class="btn" id="clipboard") {{_ 'copy-card-link-to-clipboard'}}
span.clearfix
br
@@ -562,7 +563,8 @@ template(name="cardMorePopup")
br
| {{_ 'added'}}
span.date(title=card.createdAt) {{ moment createdAt 'LLL' }}
a.js-delete(title="{{_ 'card-delete-notice'}}") {{_ 'delete'}}
if currentUser.isBoardAdmin
a.js-delete(title="{{_ 'card-delete-notice'}}") {{_ 'delete'}}
template(name="setCardColorPopup")
form.edit-label
@@ -609,7 +611,8 @@ template(name="cardStartVotingPopup")
button.primary.js-submit {{_ 'save'}}
if getVoteQuestion
button.js-remove-vote.negate.wide.right {{_ 'delete'}}
if currentUser.isBoardAdmin
button.js-remove-vote.negate.wide.right {{_ 'delete'}}
template(name="positiveVoteMembersPopup")
ul.pop-over-list.js-card-member-list
+7 -1
View File
@@ -114,7 +114,7 @@ BlazeComponent.extendComponent({
if (card) {
const board = Boards.findOne(card.boardId);
if (board) {
result = FlowRouter.url('card', {
result = FlowRouter.path('card', {
boardId: card.boardId,
slug: board.slug,
cardId: card._id,
@@ -291,6 +291,8 @@ BlazeComponent.extendComponent({
},
'click .js-copy-link'() {
StringToCopyElement = document.getElementById('cardURL_copy');
StringToCopyElement.value =
window.location.origin + window.location.pathname;
StringToCopyElement.select();
if (document.execCommand('copy')) {
StringToCopyElement.blur();
@@ -567,6 +569,10 @@ Template.cardDetailsActionsPopup.helpers({
return this.findWatcher(Meteor.userId());
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
canModifyCard() {
return (
Meteor.user() &&
+2 -2
View File
@@ -102,9 +102,9 @@ template(name='checklistItemDetail')
if canModifyCard
.check-box-container
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
span.fa.checklistitem-handle(class="fa-arrows" title="{{_ 'dragChecklistItem'}}")
.item-title.js-open-inlined-form.is-editable(class="{{#if item.isFinished }}is-checked{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
span.fa.checklistitem-handle(class="fa-arrows" title="{{_ 'dragChecklistItem'}}")
+viewer
= item.title
else
+11 -8
View File
@@ -6,7 +6,7 @@ function initSorting(items) {
helper: 'clone',
items: '.js-checklist-item:not(.placeholder)',
connectWith: '.js-checklist-items',
appendTo: '.board-canvas',
appendTo: 'parent',
distance: 7,
placeholder: 'checklist-item placeholder',
scroll: false,
@@ -55,15 +55,10 @@ BlazeComponent.extendComponent({
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
$(self.itemsDom).sortable(
'option',
'disabled',
!userIsMember(),
);
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$(self.itemsDom).sortable({
handle: 'span.fa.checklistitem-handle',
appendTo: 'parent',
});
}
}
@@ -116,7 +111,7 @@ BlazeComponent.extendComponent({
title,
checklistId: checklist._id,
cardId: checklist.cardId,
sort: checklist.itemCount(),
sort: Utils.calculateIndexData(checklist.lastItem()).base,
});
}
// We keep the form opened, empty it.
@@ -228,6 +223,14 @@ Template.checklists.helpers({
},
});
Template.addChecklistItemForm.onRendered(() => {
autosize($('textarea.js-add-checklist-item'));
});
Template.editChecklistItemForm.onRendered(() => {
autosize($('textarea.js-edit-checklist-item'));
});
Template.checklistDeleteDialog.onCreated(() => {
const $cardDetails = this.$('.card-details');
this.scrollState = {
+5 -5
View File
@@ -44,8 +44,8 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
span.fa.checklist-handle
padding-right: 20px
padding-top: 6px
float: right
padding-top: 3px
float: left
.js-confirm-checklist-delete
@@ -134,7 +134,7 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
background-color: darken(white, 8%)
.check-box-container
padding-right: 1px;
padding-right: 10px;
.check-box
margin: 0.1em 0 0 0;
@@ -144,7 +144,6 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.item-title
flex: 1
margin-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
@@ -157,7 +156,8 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
max-width: 420px
span.fa.checklistitem-handle
float: right
padding-top: 2px
padding-right: 10px;
.js-delete-checklist-item
margin: 0 0 0.5em 1.33em
+5
View File
@@ -77,6 +77,11 @@ template(name="minicard")
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
+viewer
= trueValue
+7 -2
View File
@@ -165,13 +165,15 @@
.minicard-members,
.minicard-assignees
float: right
margin: 2px -8px 2px 0
margin-left: 5px
margin-bottom: 4px
.member
float: right
border-radius: 50%
height: 28px
width: @height
margin-bottom: 4px
.assignee
float: right
@@ -180,7 +182,10 @@
width: @height
+ .badges
margin-top: 10px
margin-top: 5px
.minicard-assignees
border-bottom: 1px solid red
.minicard-members:empty,
.minicard-assignees:empty
+44
View File
@@ -0,0 +1,44 @@
template(name="resultCard")
.result-card-wrapper
a.minicard-wrapper.card-title(href=originRelativeUrl)
+minicard(this)
//= card.title
ul.result-card-context-list
li.result-card-context(title="{{_ 'board'}}")
.result-card-block-wrapper
if boardId
+viewer
= getBoard.title
else
.broken-cards-null
| NULL
if getBoard.archived
i.fa.fa-archive
li.result-card-context.result-card-context-separator
= ' '
| {{_ 'context-separator'}}
= ' '
li.result-card-context(title="{{_ 'swimlane'}}")
.result-card-block-wrapper
if swimlaneId
+viewer
= getSwimlane.title
else
.broken-cards-null
| NULL
if getSwimlane.archived
i.fa.fa-archive
li.result-card-context.result-card-context-separator
= ' '
| {{_ 'context-separator'}}
= ' '
li.result-card-context(title="{{_ 'list'}}")
.result-card-block-wrapper
if listId
+viewer
= getList.title
else
.broken-cards-null
| NULL
if getList.archived
i.fa.fa-archive
+11
View File
@@ -0,0 +1,11 @@
Template.resultCard.helpers({
userId() {
return Meteor.userId();
},
});
BlazeComponent.extendComponent({
events() {
return [{}];
},
}).register('resultCard');
+24
View File
@@ -0,0 +1,24 @@
.result-card-list-wrapper
margin: 1rem
border-radius: 5px
padding: 1.5rem
padding-top: 0.75rem
display: inline-block
min-width: 250px
max-width: 350px
.result-card-wrapper
margin-top: 0
margin-bottom: 10px
.result-card-context
display: inline-block
.result-card-context-separator
font-weight: bold
.result-card-context-list
margin-bottom: 0.7rem
.result-card-block-wrapper
display: inline-block
+8 -6
View File
@@ -2,10 +2,10 @@ template(name="subtasks")
h3.card-details-item-title
i.fa.fa-sitemap
| {{_ 'subtasks'}}
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+subtaskDeleteDialog(subtask = subtaskToDelete)
if currentUser.isBoardAdmin
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+subtaskDeleteDialog(subtask = subtaskToDelete)
.card-subtasks-items
each subtask in currentCard.subtasks
@@ -28,7 +28,8 @@ template(name="subtaskDetail")
span
a.js-view-subtask(title="{{ subtask.title }}") {{_ "view-it"}}
if canModifyCard
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
if currentUser.isBoardAdmin
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
if canModifyCard
h2.title.js-open-inlined-form.is-editable
@@ -68,7 +69,8 @@ template(name="editSubtaskItemForm")
a.fa.fa-times-thin.js-close-inlined-form
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-subtask-item {{_ "delete"}}...
if currentUser.isBoardAdmin
a.js-delete-subtask-item {{_ "delete"}}...
template(name="subtasksItems")
.subtasks-items.js-subtasks-items
+5 -5
View File
@@ -242,11 +242,11 @@ textarea
margin: 3px 4px
// Material Design checkboxes
[type="checkbox"]:not(:checked),
[type="checkbox"]:checked
position: absolute
left: -9999px
visibility: hidden
[type="checkbox"]:not(:checked),
[type="checkbox"]:checked
position: absolute
left: -9999px
visibility: hidden
.materialCheckBox
position: relative
+32 -27
View File
@@ -13,38 +13,43 @@ template(name="import")
template(name="importTextarea")
form
p: label(for='import-textarea') {{_ instruction}} {{_ 'import-board-instruction-about-errors'}}
textarea.js-import-json(placeholder="{{_ importPlaceHolder}}" autofocus)
textarea.js-import-json(id='import-textarea' placeholder="{{_ importPlaceHolder}}" autofocus)
| {{jsonText}}
input.primary.wide(type="submit" value="{{_ 'import'}}")
template(name="importMapMembers")
h2 {{_ 'import-map-members'}}
.map-members
p {{_ 'import-members-map'}}
.mapping-list
each members
a.mapping-item.js-select-member(class="{{#if wekanId}}filled{{/if}}")
.profile-source
.full-name= fullName
.username
| ({{username}})
.wekan
if wekanId
+userAvatar(userId=wekanId)
else
a.member.add-member
i.fa.fa-plus
//-
Due to the way the flewbox layout is working, we need to set some
invisible items so that the last row items have a consistent width.
See http://jsfiddle.net/Ln4h3c4n/ for an minimal example of the issue.
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
form
input.primary.wide(type="submit" value="{{_ 'done'}}")
if usersLoaded.get
.map-members
p {{_ 'import-members-map'}}
p.import-members-map-note
| {{_ 'import-members-map-note' }}
.mapping-list
each members
a.mapping-item.js-select-member(class="{{#if wekanId}}filled{{/if}}")
.profile-source
.full-name= fullName
.username
| ({{username}})
.wekan
if wekanId
+userAvatar(userId=wekanId)
else
a.member.add-member
i.fa.fa-plus
//-
Due to the way the flewbox layout is working, we need to set some
invisible items so that the last row items have a consistent width.
See http://jsfiddle.net/Ln4h3c4n/ for an minimal example of the issue.
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
.mapping-item.ghost-item
form
input.primary.wide(type="submit" value="{{_ 'done'}}")
else
+spinner
template(name="importMapMembersAddPopup")
.select-member
+33 -5
View File
@@ -150,14 +150,42 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {
this.usersLoaded = new ReactiveVar(false);
this.autorun(() => {
this.parentComponent()
.membersToMap.get()
.forEach(({ wekanId }) => {
if (wekanId) {
this.subscribe('user-miniprofile', wekanId);
const handle = this.subscribe(
'user-miniprofile',
this.members().map(member => {
return member.username;
}),
);
Tracker.nonreactive(() => {
Tracker.autorun(() => {
if (
handle.ready() &&
!this.usersLoaded.get() &&
this.members().length
) {
this._refreshMembers(
this.members().map(member => {
if (!member.wekanId) {
let user = Users.findOne({ username: member.username });
if (!user) {
user = Users.findOne({ importUsernames: member.username });
}
if (user) {
// eslint-disable-next-line no-console
// console.log('found username:', user.username);
member.wekanId = user._id;
}
}
return member;
}),
);
}
this.usersLoaded.set(handle.ready());
});
});
});
},
+4
View File
@@ -47,3 +47,7 @@
a.show-mapping
text-decoration underline
.import-members-map-note
font-size: 90%
font-weight: bold
+2 -1
View File
@@ -180,7 +180,8 @@
border-bottom: 1px solid darken(white, 20%)
.list
display: block
display: contents
flex-basis: auto
width: 100%
border-left: 0px
&:first-child
+1 -1
View File
@@ -5,7 +5,7 @@ template(name="listBody")
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=absoluteUrl
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
if MultiSelection.isActive
+17 -8
View File
@@ -168,13 +168,16 @@ BlazeComponent.extendComponent({
cardsWithLimit(swimlaneId) {
const limit = this.cardlimit.get();
const defaultSort = { sort: 1 };
const sortBy = Session.get('sortBy') ? Session.get('sortBy') : defaultSort;
const selector = {
listId: this.currentData()._id,
archived: false,
};
if (swimlaneId) selector.swimlaneId = swimlaneId;
return Cards.find(Filter.mongoSelector(selector), {
sort: ['sort'],
// sort: ['sort'],
sort: sortBy,
limit,
});
},
@@ -239,7 +242,7 @@ BlazeComponent.extendComponent({
.customFields()
.fetch(),
function(field) {
if (field.automaticallyOnCard)
if (field.automaticallyOnCard || field.alwaysOnCard)
arr.push({ _id: field._id, value: null });
},
);
@@ -675,12 +678,18 @@ BlazeComponent.extendComponent({
element.type = 'swimlane';
_id = element.copy(this.boardId);
} else if (this.isBoardTemplateSearch) {
board = Boards.findOne(element.linkedId);
board.sort = Boards.find({ archived: false }).count();
board.type = 'board';
board.title = element.title;
delete board.slug;
_id = board.copy();
Meteor.call(
'copyBoard',
element.linkedId,
{
sort: Boards.find({ archived: false }).count(),
type: 'board',
title: element.title,
},
(err, data) => {
_id = data;
},
);
}
Popup.close();
},
+9 -7
View File
@@ -1,7 +1,7 @@
template(name="listHeader")
.list-header.js-list-header(
class="{{#if limitToShowCardsCount}}list-header-card-count{{/if}}"
class="{{#if colorClass}}list-header-{{colorClass}}{{/if}}")
class=colorClass)
+inlinedForm
+editListTitleForm
else
@@ -15,7 +15,7 @@ template(name="listHeader")
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if reachedWipLimit}}highlight{{/if}}") {{cards.count}}
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.count}}
|/#{wipLimit.value})
if showCardsCountForList cards.count
@@ -43,8 +43,9 @@ template(name="listHeader")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
if showDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
if currentUser.isBoardAdmin
if showDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
.list-composer
@@ -115,8 +116,9 @@ template(name="listMorePopup")
input.inline-input(type="text" readonly value="{{ rootUrl }}")
| {{_ 'added'}}
span.date(title=list.createdAt) {{ moment createdAt 'LLL' }}
unless currentUser.isWorker
a.js-delete {{_ 'delete'}}
//unless currentUser.isWorker
// if currentUser.isBoardAdmin
// a.js-delete {{_ 'delete'}}
template(name="listDeletePopup")
p {{_ "list-delete-pop"}}
@@ -151,7 +153,7 @@ template(name="setListColorPopup")
form.edit-label
.palette-colors: each colors
// note: we use the swimlane palette to have more than just the border
span.card-label.palette-color.js-palette-color(class="swimlane-{{color}}")
span.card-label.palette-color.js-palette-color(class="card-details-{{color}}")
if(isSelected color)
i.fa.fa-check
button.primary.confirm.js-submit {{_ 'save'}}
+28 -2
View File
@@ -72,9 +72,17 @@ BlazeComponent.extendComponent({
);
},
exceededWipLimit() {
const list = Template.currentData();
return (
list.getWipLimit('enabled') &&
list.getWipLimit('value') < list.cards().count()
);
},
showCardsCountForList(count) {
const limit = this.limitToShowCardsCount();
return limit > 0 && count > limit;
return limit >= 0 && count >= limit;
},
events() {
@@ -104,6 +112,10 @@ BlazeComponent.extendComponent({
}).register('listHeader');
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
@@ -117,6 +129,10 @@ Template.listHeader.helpers({
});
Template.listActionPopup.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
isWipLimitEnabled() {
return Template.currentData().getWipLimit('enabled');
},
@@ -254,6 +270,12 @@ Template.listMorePopup.events({
}),
});
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
BlazeComponent.extendComponent({
onCreated() {
this.currentList = this.currentData();
@@ -265,7 +287,11 @@ BlazeComponent.extendComponent({
},
isSelected(color) {
return this.currentColor.get() === color;
if (this.currentColor.get() === null) {
return color === 'white';
} else {
return this.currentColor.get() === color;
}
},
events() {
+17
View File
@@ -0,0 +1,17 @@
template(name="brokenCardsHeaderBar")
h1
| {{_ 'broken-cards'}}
template(name="brokenCards")
if currentUser
if searching.get
+spinner
else if hasResults.get
.global-search-results-list-wrapper
if hasQueryErrors.get
div
each msg in errorMessages
span.global-search-error-messages
= msg
else
+resultsPaged(this)
+18
View File
@@ -0,0 +1,18 @@
import { CardSearchPagedComponent } from '../../lib/cardSearch';
BlazeComponent.extendComponent({}).register('brokenCardsHeaderBar');
Template.brokenCards.helpers({
userId() {
return Meteor.userId();
},
});
class BrokenCardsComponent extends CardSearchPagedComponent {
onCreated() {
super.onCreated();
Meteor.subscribe('brokenCards', this.sessionId);
}
}
BrokenCardsComponent.register('brokenCards');
+31
View File
@@ -0,0 +1,31 @@
.broken-cards-card-wrapper
margin-top: 0
margin-bottom: 10px
border-width: 3px !important
border-color: grey !important
border-style: solid
border-radius: 5px
padding: 1.5rem
background-color: white
.broken-cards-wrapper
max-width: 500px
margin-right: auto
margin-left: auto
.broken-cards-card-title
font-weight: bold
//padding: 10px
.broken-cards-context
display: inline-block
.broken-cards-context-separator
font-weight: bold
.broken-cards-context-list
//margin-bottom: 0.7rem
.broken-cards-null
color: darkred
font-style: italic
+57
View File
@@ -0,0 +1,57 @@
template(name="dueCardsHeaderBar")
if currentUser
h1
i.fa.fa-calendar
| {{_ 'dueCards-title'}}
.board-header-btns.left
a.board-header-btn.js-due-cards-view-change(title="{{_ 'dueCardsViewChange-title'}}")
i.fa.fa-caret-down
if $eq dueCardsView 'me'
i.fa.fa-user
| {{_ 'dueCardsViewChange-choice-me'}}
if $eq dueCardsView 'all'
i.fa.fa-users
| {{_ 'dueCardsViewChange-choice-all'}}
template(name="dueCardsModalTitle")
if currentUser
h2
i.fa.fa-keyboard-o
| {{_ 'dueCards-title'}}
template(name="dueCards")
if currentUser
if searching.get
+spinner
else if hasResults.get
.global-search-results-list-wrapper
if hasQueryErrors.get
div
each msg in errorMessages
span.global-search-error-messages
= msg
else
+resultsPaged(this)
template(name="dueCardsViewChangePopup")
if currentUser
ul.pop-over-list
li
with "dueCardsViewChange-choice-me"
a.js-due-cards-view-me
i.fa.fa-user.colorful
| {{_ 'dueCardsViewChange-choice-me'}}
if $eq Utils.dueCardsView "me"
i.fa.fa-check
hr
li
with "dueCardsViewChange-choice-all"
a.js-due-cards-view-all
i.fa.fa-users.colorful
| {{_ 'dueCardsViewChange-choice-all'}}
span.sub-name
+viewer
| {{_ 'dueCardsViewChange-choice-all-description' }}
if $eq Utils.dueCardsView "all"
i.fa.fa-check
+111
View File
@@ -0,0 +1,111 @@
import { CardSearchPagedComponent } from '../../lib/cardSearch';
import {
OPERATOR_HAS,
OPERATOR_SORT,
OPERATOR_USER,
ORDER_DESCENDING,
PREDICATE_DUE_AT,
} from '../../../config/search-const';
import { QueryParams } from '../../../config/query-classes';
// const subManager = new SubsManager();
BlazeComponent.extendComponent({
dueCardsView() {
// eslint-disable-next-line no-console
// console.log('sort:', Utils.dueCardsView());
return Utils.dueCardsView();
},
events() {
return [
{
'click .js-due-cards-view-change': Popup.open('dueCardsViewChange'),
},
];
},
}).register('dueCardsHeaderBar');
Template.dueCards.helpers({
userId() {
return Meteor.userId();
},
});
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-due-cards-view-me'() {
Utils.setDueCardsView('me');
Popup.close();
},
'click .js-due-cards-view-all'() {
Utils.setDueCardsView('all');
Popup.close();
},
},
];
},
}).register('dueCardsViewChangePopup');
class DueCardsComponent extends CardSearchPagedComponent {
onCreated() {
super.onCreated();
const queryParams = new QueryParams();
queryParams.addPredicate(OPERATOR_HAS, {
field: PREDICATE_DUE_AT,
exists: true,
});
// queryParams[OPERATOR_LIMIT] = 5;
queryParams.addPredicate(OPERATOR_SORT, {
name: PREDICATE_DUE_AT,
order: ORDER_DESCENDING,
});
if (Utils.dueCardsView() !== 'all') {
queryParams.addPredicate(OPERATOR_USER, Meteor.user().username);
}
this.runGlobalSearch(queryParams.getQueryParams());
}
dueCardsView() {
// eslint-disable-next-line no-console
//console.log('sort:', Utils.dueCardsView());
return Utils.dueCardsView();
}
sortByBoard() {
return this.dueCardsView() === 'board';
}
dueCardsList() {
const results = this.getResults();
console.log('results:', results);
const cards = [];
if (results) {
results.forEach(card => {
cards.push(card);
});
}
cards.sort((a, b) => {
const x = a.dueAt === null ? new Date('2100-12-31') : a.dueAt;
const y = b.dueAt === null ? new Date('2100-12-31') : b.dueAt;
if (x > y) return 1;
else if (x < y) return -1;
return 0;
});
// eslint-disable-next-line no-console
console.log('cards:', cards);
return cards;
}
}
DueCardsComponent.register('dueCards');
+4
View File
@@ -0,0 +1,4 @@
.due-cards-dueat-list-wrapper
max-width: 500px
margin-right: auto
margin-left: auto
Executable → Regular
+6 -1
View File
@@ -275,7 +275,12 @@ function mySafeAttrValue(tag, name, value, cssFilter) {
if (
/^thunderlink:/gi.test(value) ||
/^cbthunderlink:/gi.test(value) ||
/^aodroplink:/gi.test(value)
/^aodroplink:/gi.test(value) ||
/^onenote:/gi.test(value) ||
/^file:/gi.test(value) ||
/^abasurl:/gi.test(value) ||
/^conisio:/gi.test(value) ||
/^mailspring:/gi.test(value)
) {
return value;
} else {
+86
View File
@@ -0,0 +1,86 @@
template(name="globalSearchHeaderBar")
if currentUser
h1
i.fa.fa-search
| {{_ 'globalSearch-title'}}
template(name="globalSearchModalTitle")
if currentUser
h2
i.fa.fa-keyboard-o
| {{_ 'globalSearch-title'}}
template(name="resultsPaged")
h1
= resultsHeading.get
a.fa.fa-link(title="{{_ 'link-to-search' }}" href="{{ getSearchHref }}")
each card in results.get
+resultCard(card)
table.global-search-footer
tr
td.global-search-previous-page
if hasPreviousPage.get
button.js-previous-page
| {{_ 'previous-page' }}
td.global-search-next-page(align="right")
if hasNextPage.get
button.js-next-page
| {{_ 'next-page' }}
template(name="globalSearch")
if currentUser
.wrapper
form.global-search-page.js-search-query-form
input.global-search-query-input(
style="{# if hasResults.get #}display: inline-block;{#/if#}"
id="global-search-input"
type="text"
name="searchQuery"
placeholder="{{_ 'search-example'}}"
value="{{ query.get }}"
autofocus dir="auto"
)
a.js-new-search.fa.fa-eraser
if searching.get
+spinner
else if hasResults.get
.global-search-results-list-wrapper
if hasQueryErrors.get
ul
each msg in errorMessages
li.global-search-error-messages
= msg
else
+resultsPaged(this)
else if serverError.get
.global-search-page
.global-search-help
h1 {{_ 'server-error' }}
+viewer
| {{_ 'server-error-troubleshooting' }}
else
.global-search-page
.global-search-help
h2 {{_ 'boards' }}
.lists-wrapper
each title in myBoardNames.get
span.card-label.list-title.js-board-title
= title
h2 {{_ 'lists' }}
.lists-wrapper
each title in myLists.get
span.card-label.list-title.js-list-title
= title
h2 {{_ 'label-colors' }}
.palette-colors: each label in labelColors
span.card-label.palette-color.js-label-color(class="card-label-{{label.color}}")
= label.name
if myLabelNames.get.length
h2 {{_ 'label-names' }}
.lists-wrapper
each name in myLabelNames.get
span.card-label.list-title.js-label-name
= name
.global-search-instructions
+viewer
= searchInstructions
+264
View File
@@ -0,0 +1,264 @@
import { CardSearchPagedComponent } from '../../lib/cardSearch';
import Boards from '../../../models/boards';
import { Query, QueryErrors } from '../../../config/query-classes';
// const subManager = new SubsManager();
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-due-cards-view-change': Popup.open('globalSearchViewChange'),
},
];
},
}).register('globalSearchHeaderBar');
Template.globalSearch.helpers({
userId() {
return Meteor.userId();
},
});
class GlobalSearchComponent extends CardSearchPagedComponent {
onCreated() {
super.onCreated();
this.myLists = new ReactiveVar([]);
this.myLabelNames = new ReactiveVar([]);
this.myBoardNames = new ReactiveVar([]);
this.parsingErrors = new QueryErrors();
this.queryParams = null;
Meteor.call('myLists', (err, data) => {
if (!err) {
this.myLists.set(data);
}
});
Meteor.call('myLabelNames', (err, data) => {
if (!err) {
this.myLabelNames.set(data);
}
});
Meteor.call('myBoardNames', (err, data) => {
if (!err) {
this.myBoardNames.set(data);
}
});
}
onRendered() {
Meteor.subscribe('setting');
// eslint-disable-next-line no-console
//console.log('lang:', TAPi18n.getLanguage());
if (Session.get('globalQuery')) {
this.searchAllBoards(Session.get('globalQuery'));
}
}
resetSearch() {
super.resetSearch();
this.parsingErrors = new QueryErrors();
}
errorMessages() {
if (this.parsingErrors.hasErrors()) {
return this.parsingErrors.errorMessages();
}
return this.queryErrorMessages();
}
parsingErrorMessages() {
this.parsingErrors.errorMessages();
}
searchAllBoards(queryText) {
queryText = queryText.trim();
// eslint-disable-next-line no-console
//console.log('queryText:', queryText);
this.query.set(queryText);
this.resetSearch();
if (!queryText) {
return;
}
this.searching.set(true);
const query = new Query();
query.buildParams(queryText);
// eslint-disable-next-line no-console
// console.log('params:', query.getParams());
this.queryParams = query.getQueryParams().getParams();
if (query.hasErrors()) {
this.searching.set(false);
this.queryErrors = query.errors();
this.hasResults.set(true);
this.hasQueryErrors.set(true);
return;
}
this.runGlobalSearch(query.getQueryParams());
}
searchInstructions() {
const tags = {
operator_board: TAPi18n.__('operator-board'),
operator_list: TAPi18n.__('operator-list'),
operator_swimlane: TAPi18n.__('operator-swimlane'),
operator_comment: TAPi18n.__('operator-comment'),
operator_label: TAPi18n.__('operator-label'),
operator_label_abbrev: TAPi18n.__('operator-label-abbrev'),
operator_user: TAPi18n.__('operator-user'),
operator_user_abbrev: TAPi18n.__('operator-user-abbrev'),
operator_member: TAPi18n.__('operator-member'),
operator_member_abbrev: TAPi18n.__('operator-member-abbrev'),
operator_assignee: TAPi18n.__('operator-assignee'),
operator_assignee_abbrev: TAPi18n.__('operator-assignee-abbrev'),
operator_due: TAPi18n.__('operator-due'),
operator_created: TAPi18n.__('operator-created'),
operator_modified: TAPi18n.__('operator-modified'),
operator_status: TAPi18n.__('operator-status'),
operator_has: TAPi18n.__('operator-has'),
operator_sort: TAPi18n.__('operator-sort'),
operator_limit: TAPi18n.__('operator-limit'),
predicate_overdue: TAPi18n.__('predicate-overdue'),
predicate_archived: TAPi18n.__('predicate-archived'),
predicate_all: TAPi18n.__('predicate-all'),
predicate_ended: TAPi18n.__('predicate-ended'),
predicate_week: TAPi18n.__('predicate-week'),
predicate_month: TAPi18n.__('predicate-month'),
predicate_quarter: TAPi18n.__('predicate-quarter'),
predicate_year: TAPi18n.__('predicate-year'),
predicate_attachment: TAPi18n.__('predicate-attachment'),
predicate_description: TAPi18n.__('predicate-description'),
predicate_checklist: TAPi18n.__('predicate-checklist'),
predicate_public: TAPi18n.__('predicate-public'),
predicate_private: TAPi18n.__('predicate-private'),
predicate_due: TAPi18n.__('predicate-due'),
predicate_created: TAPi18n.__('predicate-created'),
predicate_modified: TAPi18n.__('predicate-modified'),
predicate_start: TAPi18n.__('predicate-start'),
predicate_end: TAPi18n.__('predicate-end'),
predicate_assignee: TAPi18n.__('predicate-assignee'),
predicate_member: TAPi18n.__('predicate-member'),
};
let text = '';
[
['# ', 'globalSearch-instructions-heading'],
['\n', 'globalSearch-instructions-description'],
['\n\n', 'globalSearch-instructions-operators'],
['\n* ', 'globalSearch-instructions-operator-board'],
['\n* ', 'globalSearch-instructions-operator-list'],
['\n* ', 'globalSearch-instructions-operator-swimlane'],
['\n* ', 'globalSearch-instructions-operator-comment'],
['\n* ', 'globalSearch-instructions-operator-label'],
['\n* ', 'globalSearch-instructions-operator-hash'],
['\n* ', 'globalSearch-instructions-operator-user'],
['\n* ', 'globalSearch-instructions-operator-at'],
['\n* ', 'globalSearch-instructions-operator-member'],
['\n* ', 'globalSearch-instructions-operator-assignee'],
['\n* ', 'globalSearch-instructions-operator-due'],
['\n* ', 'globalSearch-instructions-operator-created'],
['\n* ', 'globalSearch-instructions-operator-modified'],
['\n* ', 'globalSearch-instructions-operator-status'],
['\n * ', 'globalSearch-instructions-status-archived'],
['\n * ', 'globalSearch-instructions-status-public'],
['\n * ', 'globalSearch-instructions-status-private'],
['\n * ', 'globalSearch-instructions-status-all'],
['\n * ', 'globalSearch-instructions-status-ended'],
['\n* ', 'globalSearch-instructions-operator-has'],
['\n* ', 'globalSearch-instructions-operator-sort'],
['\n* ', 'globalSearch-instructions-operator-limit'],
['\n## ', 'heading-notes'],
['\n* ', 'globalSearch-instructions-notes-1'],
['\n* ', 'globalSearch-instructions-notes-2'],
['\n* ', 'globalSearch-instructions-notes-3'],
['\n* ', 'globalSearch-instructions-notes-3-2'],
['\n* ', 'globalSearch-instructions-notes-4'],
['\n* ', 'globalSearch-instructions-notes-5'],
].forEach(([prefix, instruction]) => {
text += `${prefix}${TAPi18n.__(instruction, tags)}`;
});
return text;
}
labelColors() {
return Boards.simpleSchema()._schema['labels.$.color'].allowedValues.map(
color => {
return { color, name: TAPi18n.__(`color-${color}`) };
},
);
}
events() {
return [
{
...super.events()[0],
'submit .js-search-query-form'(evt) {
evt.preventDefault();
this.searchAllBoards(evt.target.searchQuery.value);
},
'click .js-label-color'(evt) {
evt.preventDefault();
const input = document.getElementById('global-search-input');
this.query.set(
`${input.value} ${TAPi18n.__('operator-label')}:"${
evt.currentTarget.textContent
}"`,
);
document.getElementById('global-search-input').focus();
},
'click .js-board-title'(evt) {
evt.preventDefault();
const input = document.getElementById('global-search-input');
this.query.set(
`${input.value} ${TAPi18n.__('operator-board')}:"${
evt.currentTarget.textContent
}"`,
);
document.getElementById('global-search-input').focus();
},
'click .js-list-title'(evt) {
evt.preventDefault();
const input = document.getElementById('global-search-input');
this.query.set(
`${input.value} ${TAPi18n.__('operator-list')}:"${
evt.currentTarget.textContent
}"`,
);
document.getElementById('global-search-input').focus();
},
'click .js-label-name'(evt) {
evt.preventDefault();
const input = document.getElementById('global-search-input');
this.query.set(
`${input.value} ${TAPi18n.__('operator-label')}:"${
evt.currentTarget.textContent
}"`,
);
document.getElementById('global-search-input').focus();
},
'click .js-new-search'(evt) {
evt.preventDefault();
const input = document.getElementById('global-search-input');
input.value = '';
this.query.set('');
this.hasResults.set(false);
},
},
];
}
}
GlobalSearchComponent.register('globalSearch');
+121
View File
@@ -0,0 +1,121 @@
.global-search-board-wrapper
border-radius: 8px
//padding: 0.5rem
min-width: 400px
border-width: 8px
border-color: grey
border-style: solid
margin-bottom: 2rem
margin-right: auto
margin-left: auto
.global-search-board-title
font-size: 1.4rem
font-weight: bold
padding: 0.5rem
background-color: grey
color: white
.global-search-swimlane-title
font-size: 1.1rem
font-weight: bold
padding: 0.5rem
padding-bottom: 0.4rem
margin-top: 0
margin-bottom: 0.5rem
//border-top: black 1px solid
//border-bottom: black 1px solid
text-align: center
.swimlane-default-color
background-color: lightgrey
.global-search-list-title
font-weight: bold
font-size: 1.1rem
//padding-bottom: 0
//margin-bottom: 0
text-align: center
margin-bottom: 0.7rem
.global-search-list-wrapper
margin: 1rem
border-radius: 5px
padding: 1.5rem
padding-top: 0.75rem
display: inline-block
min-width: 250px
max-width: 350px
.global-search-card-wrapper
margin-top: 0
margin-bottom: 10px
.global-search-results-list-wrapper
max-width: 500px
margin-right: auto
margin-left: auto
.global-search-field-name
font-weight: bold
.global-search-context
display: inline-block
.global-search-context-separator
font-weight: bold
.global-search-context-list
margin-bottom: 0.7rem
.global-search-error-messages
color: darkred
.global-search-page
width: 40%
min-width: 400px
margin-right: auto
margin-left: auto
line-height: 150%
.global-search-page h1
margin-top: 2rem;
.global-search-page h2
margin-top: 1rem;
.global-search-query-input
width: 90% !important
margin-right: auto
margin-left: auto
.global-search-operator
font-family: Courier
.global-search-value
font-family: Courier
font-style: italic
code
color: black
background-color: lightgrey
padding: 0.1rem !important
font-size: 0.8rem !important
.list-title
background-color: darkgray
.global-search-footer
border: none
width: 100%
.global-search-next-page
border: none
text-align: right;
.global-search-previous-page
border: none
text-align: left;
.global-search-instructions li
margin-bottom: 0.3rem
+19 -16
View File
@@ -7,16 +7,21 @@ template(name="header")
if currentUser
#header-quick-access(class=currentBoard.colorClass)
if isMiniScreen
ul
li
a(href="{{pathFor 'home'}}")
span.fa.fa-home
span
a(href="{{pathFor 'home'}}")
span.fa.fa-home
ul.header-quick-access-list
if currentList
each currentBoard.lists
li(class="{{#if $.Session.equals 'currentList' _id}}current{{/if}}")
a.js-select-list
= title
else
each currentUser.starredBoards
li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
a(href="{{pathFor 'board' id=_id slug=slug}}")
= title
#header-new-board-icon
else
//-
@@ -32,23 +37,21 @@ template(name="header")
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="{{#if currentSetting.customTopLeftCornerLogoHeight}}#{currentSetting.customTopLeftCornerLogoHeight}{{else}}27{{/if}}" width="auto" margin="0" padding="0")
unless currentSetting.customTopLeftCornerLogoImageUrl
img(src="{{pathFor '/logo-header.png'}}" alt="")
ul
li
a(href="{{pathFor 'home'}}")
span.fa.fa-home
| {{_ 'all-boards'}}
li.separator -
li
a(href="{{pathFor 'public'}}")
span.fa.fa-globe
| {{_ 'public'}}
span.allBoards
a(href="{{pathFor 'home'}}")
span.fa.fa-home
| {{_ 'all-boards'}}
ul.header-quick-access-list
//li
// a(href="{{pathFor 'public'}}")
// span.fa.fa-globe
// | {{_ 'public'}}
each currentUser.starredBoards
li.separator -
li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
a(href="{{pathFor 'board' id=_id slug=slug}}")
= title
else
li.current {{_ 'quick-access-description'}}
li.current.empty {{_ 'quick-access-description'}}
// Next line is used only for spacing at header,
// there is no visible clickable icon.
+26 -17
View File
@@ -100,6 +100,10 @@
font-size: 12px
display: flex
z-index: 21
padding: 10px 0px
.allBoards
padding: 0 0 0 10px
#header-user-bar,
#header-new-board-icon,
@@ -112,21 +116,31 @@
a:hover, a.is-active
color: white
ul
ul.header-quick-access-list
transition: opacity 0.2s
margin: 4px 0 0 5px
overflow: hidden
overflow-x: auto
overflow-y: hidden
white-space: nowrap
padding: 10px
margin: -10px
li
display: block
float: left
display: inline
width: auto
color: darken(white, 15%)
padding: 2px 5px 0
padding: 12px 0px
margin: -10px 0px
a
padding: 12px 10px
margin: -10px 0px
&.current
color: darken(white, 5%)
&.current.empty
padding: 12px 10px 12px 10px
&:first-child .fa-home,&:nth-child(3) .fa-globe
margin-right: 5px
@@ -186,37 +200,32 @@
#header-quick-access
transition: background-color 0.4s
width: 100%
padding: 10px 0px
z-index: 30
ul
width: calc(100% - 60px)
overflow: ellipsis
padding: 10px
margin: -10px
margin-right: 10px
li
height: 100%
padding: 12px 0px
margin: -10px 0px
a
height: 100%
padding: 12px 10px
margin: -10px 0px
.fa-home
span
.fa-home
font-size: 26px
margin-top: -2px
margin-right: 10px
margin-left: 10px
#header-new-board-icon
display: none
#header-user-bar
position: absolute
right: 0px
padding: 10px
margin: -10px 0 -10px -10px
margin: -8px 0 -10px -10px
.announcement .viewer
display: inline-block
+32 -14
View File
@@ -74,30 +74,48 @@ Template.userFormsLayout.helpers({
let name = lang.name;
if (lang.name === 'br') {
name = 'Brezhoneg';
} else if (lang.name === 'Español') {
name = 'español';
} else if (lang.name === 'Español de Argentina') {
name = 'español de Argentina';
} else if (lang.name === 'Español de Chile') {
name = 'español de Chile';
} else if (lang.name === 'Español de Colombia') {
name = 'español de Colombia';
} else if (lang.name === 'Español de México') {
name = 'español de México';
} else if (lang.name === 'Español de Puerto Rico') {
name = 'español de Puerto Rico';
} else if (lang.name === 'ar-EG') {
// ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
name = 'مَصرى';
} else if (lang.name === 'fa-IR') {
// fa-IR = Persian (Iran)
name = 'فارسی/پارسی (ایران‎)';
} else if (lang.name === 'fr-BE') {
name = 'Français (Belgique)';
} else if (lang.name === 'fr-CA') {
name = 'Français (Canada)';
} else if (lang.name === 'fr-CA') {
name = 'Français (Canada)';
} else if (lang.name === 'ig') {
name = 'Igbo';
} else if (lang.name === 'lv') {
name = 'Latviešu';
} else if (lang.name === 'latviešu valoda') {
name = 'Latviešu';
} else if (lang.name === 'Español') {
name = 'español';
} else if (lang.name === 'es_419') {
name = 'español de América Latina';
} else if (lang.name === 'es-419') {
name = 'español de América Latina';
} else if (lang.name === 'Español de América Latina') {
name = 'español de América Latina';
} else if (lang.name === 'es-LA') {
name = 'español de América Latina';
} else if (lang.name === 'Español de Argentina') {
name = 'español de Argentina';
} else if (lang.name === 'Español de Chile') {
name = 'español de Chile';
} else if (lang.name === 'Español de Colombia') {
name = 'español de Colombia';
} else if (lang.name === 'Español de México') {
name = 'español de México';
} else if (lang.name === 'es-PY') {
name = 'español de Paraguayo';
} else if (lang.name === 'Español de Paraguayo') {
name = 'español de Paraguayo';
} else if (lang.name === 'Español de Perú') {
name = 'español de Perú';
} else if (lang.name === 'Español de Puerto Rico') {
name = 'español de Puerto Rico';
} else if (lang.name === 'oc') {
name = 'Occitan';
} else if (lang.name === 'st') {
+73
View File
@@ -0,0 +1,73 @@
template(name="myCardsHeaderBar")
if currentUser
h1
//a.back-btn(href="{{pathFor 'home'}}")
// i.fa.fa-chevron-left
i.fa.fa-list
| {{_ 'my-cards'}}
.board-header-btns.left
a.board-header-btn.js-toggle-my-cards-choose-sort(title="{{_ 'myCardsSortChange-title'}}")
i.fa.fa-caret-down
if $eq myCardsSort 'board'
i.fa.fa-th-large
| {{_ 'myCardsSortChange-choice-board'}}
if $eq myCardsSort 'dueAt'
i.fa.fa-calendar
| {{_ 'myCardsSortChange-choice-dueat'}}
template(name="myCardsModalTitle")
if currentUser
h2
i.fa.fa-keyboard-o
| {{_ 'my-cards'}}
template(name="myCards")
if currentUser
if searching.get
+spinner
else
.wrapper
if $eq myCardsSort 'board'
each board in myCardsList
.my-cards-board-wrapper
.my-cards-board-title(class=board.colorClass, id="header")
a(href=board.originRelativeUrl)
+viewer
= board.title
each swimlane in board.mySwimlanes
.my-cards-swimlane-title(class="{{#if swimlane.colorClass}}{{ swimlane.colorClass }}{{else}}swimlane-default-color{{/if}}")
+viewer
= swimlane.title
each list in swimlane.myLists
.my-cards-list-wrapper
.my-cards-list-title(class=list.colorClass)
+viewer
= list.title
each card in list.myCards
.my-cards-card-wrapper
a.minicard-wrapper(href=card.originRelativeUrl)
+minicard(card)
else
.my-cards-dueat-list-wrapper
each card in myDueCardsList
+resultCard(card)
template(name="myCardsSortChangePopup")
if currentUser
ul.pop-over-list
li
with "my-cards-sort-board"
a.js-my-cards-sort-board
i.fa.fa-th-large.colorful
| {{_ 'myCardsSortChange-choice-board'}}
if $eq Utils.myCardsSort "board"
i.fa.fa-check
hr
li
with "my-cards-sort-dueat"
a.js-my-cards-sort-dueat
i.fa.fa-calendar.colorful
| {{_ 'myCardsSortChange-choice-dueat'}}
if $eq Utils.myCardsSort "dueAt"
i.fa.fa-check
+208
View File
@@ -0,0 +1,208 @@
import { CardSearchPagedComponent } from '../../lib/cardSearch';
import { QueryParams } from '../../../config/query-classes';
import {
OPERATOR_LIMIT,
OPERATOR_SORT,
OPERATOR_USER,
ORDER_DESCENDING,
PREDICATE_DUE_AT,
} from '../../../config/search-const';
// const subManager = new SubsManager();
BlazeComponent.extendComponent({
myCardsSort() {
// eslint-disable-next-line no-console
// console.log('sort:', Utils.myCardsSort());
return Utils.myCardsSort();
},
events() {
return [
{
'click .js-toggle-my-cards-choose-sort': Popup.open(
'myCardsSortChange',
),
},
];
},
}).register('myCardsHeaderBar');
Template.myCards.helpers({
userId() {
return Meteor.userId();
},
});
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-my-cards-sort-board'() {
Utils.setMyCardsSort('board');
Popup.close();
},
'click .js-my-cards-sort-dueat'() {
Utils.setMyCardsSort('dueAt');
Popup.close();
},
},
];
},
}).register('myCardsSortChangePopup');
class MyCardsComponent extends CardSearchPagedComponent {
onCreated() {
super.onCreated();
const queryParams = new QueryParams();
queryParams.addPredicate(OPERATOR_USER, Meteor.user().username);
queryParams.addPredicate(OPERATOR_SORT, {
name: PREDICATE_DUE_AT,
order: ORDER_DESCENDING,
});
queryParams.addPredicate(OPERATOR_LIMIT, 100);
this.runGlobalSearch(queryParams);
Meteor.subscribe('setting');
}
myCardsSort() {
// eslint-disable-next-line no-console
//console.log('sort:', Utils.myCardsSort());
return Utils.myCardsSort();
}
sortByBoard() {
return this.myCardsSort() === 'board';
}
myCardsList() {
const boards = [];
let board = null;
let swimlane = null;
let list = null;
const cursor = this.getResults();
if (cursor) {
let newBoard = false;
let newSwimlane = false;
let newList = false;
cursor.forEach(card => {
// eslint-disable-next-line no-console
// console.log('card:', card.title);
if (list === null || card.listId !== list._id) {
// eslint-disable-next-line no-console
// console.log('new list');
list = card.getList();
if (list.archived) {
list = null;
return;
}
list.myCards = [card];
newList = true;
}
if (swimlane === null || card.swimlaneId !== swimlane._id) {
// eslint-disable-next-line no-console
// console.log('new swimlane');
swimlane = card.getSwimlane();
if (swimlane.archived) {
swimlane = null;
return;
}
swimlane.myLists = [list];
newSwimlane = true;
}
if (board === null || card.boardId !== board._id) {
// eslint-disable-next-line no-console
// console.log('new board');
board = card.getBoard();
if (board.archived) {
board = null;
return;
}
// eslint-disable-next-line no-console
// console.log('board:', b, b._id, b.title);
board.mySwimlanes = [swimlane];
newBoard = true;
}
if (newBoard) {
boards.push(board);
} else if (newSwimlane) {
board.mySwimlanes.push(swimlane);
} else if (newList) {
swimlane.myLists.push(list);
} else {
list.myCards.push(card);
}
newBoard = false;
newSwimlane = false;
newList = false;
});
// sort the data structure
boards.forEach(board => {
board.mySwimlanes.forEach(swimlane => {
swimlane.myLists.forEach(list => {
list.myCards.sort((a, b) => {
return a.sort - b.sort;
});
});
swimlane.myLists.sort((a, b) => {
return a.sort - b.sort;
});
});
board.mySwimlanes.sort((a, b) => {
return a.sort - b.sort;
});
});
boards.sort((a, b) => {
let x = a.sort;
let y = b.sort;
// show the template board last
if (a.type === 'template-container') {
x = 99999999;
} else if (b.type === 'template-container') {
y = 99999999;
}
return x - y;
});
// eslint-disable-next-line no-console
// console.log('boards:', boards);
return boards;
}
return [];
}
myDueCardsList() {
const cursor = this.getResults();
const cards = [];
cursor.forEach(card => {
cards.push(card);
});
cards.sort((a, b) => {
const x = a.dueAt === null ? new Date('2100-12-31') : a.dueAt;
const y = b.dueAt === null ? new Date('2100-12-31') : b.dueAt;
if (x > y) return 1;
else if (x < y) return -1;
return 0;
});
// eslint-disable-next-line no-console
// console.log('cursor:', cards);
return cards;
}
}
MyCardsComponent.register('myCards');
+57
View File
@@ -0,0 +1,57 @@
.my-cards-board-wrapper
border-radius: 0 0 4px 4px;
//padding: 0.5rem
min-width: 400px
margin-bottom: 2rem
margin-right: auto
margin-left: auto
border-width: 2px
border-style: solid
border-color: #a2a2a2
.my-cards-board-title
font-size: 1.4rem
font-weight: bold
padding: 0.5rem
background-color: grey
color: white
.my-cards-swimlane-title
font-size: 1.1rem
font-weight: bold
padding: 0.5rem
padding-bottom: 0.4rem
margin-top: 0
margin-bottom: 0.5rem
//border-top: black 1px solid
//border-bottom: black 1px solid
text-align: center
.swimlane-default-color
background-color: lightgrey
.my-cards-list-title
font-weight: bold
font-size: 1.1rem
//padding-bottom: 0
//margin-bottom: 0
text-align: center
margin-bottom: 0.7rem
.my-cards-list-wrapper
margin: 1rem
border-radius: 5px
//padding: 1.5rem
//padding-top: 0.75rem
display: inline-grid
min-width: 250px
max-width: 350px
.my-cards-card-wrapper
margin-top: 0
margin-bottom: 10px
.my-cards-dueat-list-wrapper
max-width: 500px
margin-right: auto
margin-left: auto
@@ -5,7 +5,7 @@
.notification
display: flex
float: none
padding: 12px 8px 8px
padding: 15px 8px 8px
color: black
border-bottom: 1px solid #dbdbdb
@@ -14,6 +14,7 @@
.read-status
width: 30px
padding: 0px 10px 0px 0px
input
width: 24px
@@ -28,13 +29,16 @@
color: #bbb
.details
width: calc(100% - 30px)
.activity
display: flex
a.member
margin: 0px 0px 0px 0px
padding: 0px
svg
padding: 3px
.activity-desc
width: 100%;
margin: 0px 0px 0px 5px
.activity-comment
display: block
@@ -55,3 +59,14 @@
.remove
a:hover
color #eb4646 !important
@media screen and (max-width: 800px)
#notifications-drawer
.notification
height: auto
.details
.activity
a.member
height: 36px
width: 36px
@@ -2,7 +2,7 @@ belize = #2980b9
section#notifications-drawer
position: fixed
top: 28px
top: 48px
right: 0
width: 400px
background-color: #fafafa
@@ -17,7 +17,7 @@ section#notifications-drawer
.header
position: fixed
top 28px
top 48px
right 0
width calc(400px - 32px)
padding: 8px 16px
@@ -63,7 +63,7 @@ section#notifications-drawer
ul.notifications
display: block
padding: 0px 16px
padding: 0px 16px 0px 16px
margin: 0
height: calc(100vh - 102px)
height: calc(100vh - 122px)
overflow-y: scroll
Binary file not shown.
@@ -3,32 +3,32 @@ template(name="cardActions")
div.trigger-content
div.trigger-dropdown
select(id="setdate-action")
option(value="setDate") {{{_'r-set'}}}
option(value="updateDate") {{{_'r-update'}}}
option(value="setDate") {{_'r-set'}}
option(value="updateDate") {{_'r-update'}}
div.trigger-text
| {{{_'r-datefield'}}}
| {{_'r-datefield'}}
div.trigger-dropdown
select(id="setdate-datefield")
option(value="startAt") {{{_'r-df-start-at'}}}
option(value="dueAt") {{{_'r-df-due-at'}}}
option(value="endAt") {{{_'r-df-end-at'}}}
option(value="receivedAt") {{{_'r-df-received-at'}}}
option(value="startAt") {{_'r-df-start-at'}}
option(value="dueAt") {{_'r-df-due-at'}}
option(value="endAt") {{_'r-df-end-at'}}
option(value="receivedAt") {{_'r-df-received-at'}}
div.trigger-text
| {{{_'r-to-current-datetime'}}}
| {{_'r-to-current-datetime'}}
div.trigger-button.js-set-date-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
| {{{_'r-remove-value-from'}}}
| {{{_'r-datefield'}}}
| {{_'r-remove-value-from'}}
| {{_'r-datefield'}}
div.trigger-dropdown
select(id="setdate-removedatefieldvalue")
option(value="startAt") {{{_'r-df-start-at'}}}
option(value="dueAt") {{{_'r-df-due-at'}}}
option(value="endAt") {{{_'r-df-end-at'}}}
option(value="receivedAt") {{{_'r-df-received-at'}}}
option(value="startAt") {{_'r-df-start-at'}}
option(value="dueAt") {{_'r-df-due-at'}}
option(value="endAt") {{_'r-df-end-at'}}
option(value="receivedAt") {{_'r-df-received-at'}}
div.trigger-button.js-remove-datevalue-action.js-goto-rules
i.fa.fa-plus
@@ -36,10 +36,10 @@ template(name="cardActions")
div.trigger-content
div.trigger-dropdown
select(id="label-action")
option(value="add") {{{_'r-add'}}}
option(value="remove") {{{_'r-remove'}}}
option(value="add") {{_'r-add'}}
option(value="remove") {{_'r-remove'}}
div.trigger-text
| {{{_'r-label'}}}
| {{_'r-label'}}
div.trigger-dropdown
select(id="label-id")
each labels
@@ -52,26 +52,26 @@ template(name="cardActions")
div.trigger-content
div.trigger-dropdown
select(id="member-action")
option(value="add") {{{_'r-add'}}}
option(value="remove") {{{_'r-remove'}}}
option(value="add") {{_'r-add'}}
option(value="remove") {{_'r-remove'}}
div.trigger-text
| {{{_'r-member'}}}
| {{_'r-member'}}
div.trigger-dropdown
input(id="member-name",type=text,placeholder="{{{_'r-name'}}}")
input(id="member-name",type=text,placeholder="{{_'r-name'}}")
div.trigger-button.js-add-member-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
| {{{_'r-remove-all'}}}
| {{_'r-remove-all'}}
div.trigger-button.js-add-removeall-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
| {{{_'r-set-color'}}}
| {{_'r-set-color'}}
button.trigger-button.trigger-button-color.js-show-color-palette(
id="color-action"
class="card-details-{{cardColorButton}}")
@@ -3,12 +3,12 @@ template(name="checklistActions")
div.trigger-content
div.trigger-dropdown
select(id="check-action")
option(value="add") {{{_'r-add'}}}
option(value="remove") {{{_'r-remove'}}}
option(value="add") {{_'r-add'}}
option(value="remove") {{_'r-remove'}}
div.trigger-text
| {{{_'r-checklist'}}}
| {{_'r-checklist'}}
div.trigger-dropdown
input(id="checklist-name",type=text,placeholder="{{{_'r-name'}}}")
input(id="checklist-name",type=text,placeholder="{{_'r-name'}}")
div.trigger-button.js-add-checklist-action.js-goto-rules
i.fa.fa-plus
@@ -16,12 +16,12 @@ template(name="checklistActions")
div.trigger-content
div.trigger-dropdown
select(id="checkall-action")
option(value="check") {{{_'r-check-all'}}}
option(value="uncheck") {{{_'r-uncheck-all'}}}
option(value="check") {{_'r-check-all'}}
option(value="uncheck") {{_'r-uncheck-all'}}
div.trigger-text
| {{{_'r-items-check'}}}
| {{_'r-items-check'}}
div.trigger-dropdown
input(id="checklist-name2",type=text,placeholder="{{{_'r-name'}}}")
input(id="checklist-name2",type=text,placeholder="{{_'r-name'}}")
div.trigger-button.js-add-checkall-action.js-goto-rules
i.fa.fa-plus
@@ -30,36 +30,36 @@ template(name="checklistActions")
div.trigger-content
div.trigger-dropdown
select(id="check-item-action")
option(value="check") {{{_'r-check'}}}
option(value="uncheck") {{{_'r-uncheck'}}}
option(value="check") {{_'r-check'}}
option(value="uncheck") {{_'r-uncheck'}}
div.trigger-text
| {{{_'r-item'}}}
| {{_'r-item'}}
div.trigger-dropdown
input(id="checkitem-name",type=text,placeholder="{{{_'r-name'}}}")
input(id="checkitem-name",type=text,placeholder="{{_'r-name'}}")
div.trigger-text
| {{{_'r-of-checklist'}}}
| {{_'r-of-checklist'}}
div.trigger-dropdown
input(id="checklist-name3",type=text,placeholder="{{{_'r-name'}}}")
input(id="checklist-name3",type=text,placeholder="{{_'r-name'}}")
div.trigger-button.js-add-check-item-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
| {{{_'r-add-checklist'}}}
| {{_'r-add-checklist'}}
div.trigger-dropdown
input(id="checklist-name-3",type=text,placeholder="{{{_'r-name'}}}")
input(id="checklist-name-3",type=text,placeholder="{{_'r-name'}}")
div.trigger-text
| {{{_'r-with-items'}}}
| {{_'r-with-items'}}
div.trigger-dropdown
input(id="checklist-items",type=text,placeholder="{{{_'r-items-list'}}}")
input(id="checklist-items",type=text,placeholder="{{_'r-items-list'}}")
div.trigger-button.js-add-checklist-items-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
| {{{_'r-checklist-note'}}}
| {{_'r-checklist-note'}}
+2 -2
View File
@@ -2,7 +2,7 @@ template(name="ruleDetails")
.rules
h2
i.fa.fa-magic
| {{{_ 'r-rule-details' }}}
| {{_ 'r-rule-details' }}
.triggers-content
.triggers-body
.triggers-main-body
@@ -21,4 +21,4 @@ template(name="ruleDetails")
div.rules-back
button.js-goback
i.fa.fa-chevron-left
| {{{_ 'back'}}}
| {{_ 'back'}}
+2 -2
View File
@@ -1,7 +1,7 @@
template(name="rulesActions")
h2
i.fa.fa-magic
| {{{_ 'r-rule' }}} "#{data.ruleName.get}" - {{{_ 'r-add-action'}}}
| {{_ 'r-rule' }} "#{data.ruleName.get}" - {{_ 'r-add-action'}}
.triggers-content
.triggers-body
.triggers-side-menu
@@ -26,4 +26,4 @@ template(name="rulesActions")
div.rules-back
button.js-goback
i.fa.fa-chevron-left
| {{{_ 'back'}}}
| {{_ 'back'}}
+9 -9
View File
@@ -2,7 +2,7 @@ template(name="rulesList")
.rules
h2
i.fa.fa-magic
| {{{_ 'r-board-rules' }}}
| {{_ 'r-board-rules' }}
ul.rules-list
each rules
@@ -12,26 +12,26 @@ template(name="rulesList")
div.rules-btns-group
button.js-goto-details
i.fa.fa-eye
| {{{_ 'r-view-rule'}}}
| {{_ 'r-view-rule'}}
if currentUser.isAdmin
button.js-delete-rule
i.fa.fa-trash-o
| {{{_ 'r-delete-rule'}}}
| {{_ 'r-delete-rule'}}
else if currentUser.isBoardAdmin
button.js-delete-rule
i.fa.fa-trash-o
| {{{_ 'r-delete-rule'}}}
| {{_ 'r-delete-rule'}}
else
li.no-items-message {{{_ 'r-no-rules' }}}
li.no-items-message {{_ 'r-no-rules' }}
if currentUser.isAdmin
div.rules-add
button.js-goto-trigger
i.fa.fa-plus
| {{{_ 'r-add-rule'}}}
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
| {{_ 'r-add-rule'}}
input(type=text,placeholder="{{_ 'r-new-rule-name' }}",id="ruleTitle")
else if currentUser.isBoardAdmin
div.rules-add
button.js-goto-trigger
i.fa.fa-plus
| {{{_ 'r-add-rule'}}}
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
| {{_ 'r-add-rule'}}
input(type=text,placeholder="{{_ 'r-new-rule-name' }}",id="ruleTitle")
+2 -2
View File
@@ -1,7 +1,7 @@
template(name="rulesTriggers")
h2
i.fa.fa-magic
| {{{_ 'r-rule' }}} "#{data.ruleName.get}" - {{{_ 'r-add-trigger'}}}
| {{_ 'r-rule' }} "#{data.ruleName.get}" - {{_ 'r-add-trigger'}}
.triggers-content
.triggers-body
.triggers-side-menu
@@ -22,4 +22,4 @@ template(name="rulesTriggers")
div.rules-back
button.js-goback
i.fa.fa-chevron-left
| {{{_ 'back'}}}
| {{_ 'back'}}
@@ -100,7 +100,7 @@ template(name="boardTriggers")
div.trigger-item
div.trigger-content
div.trigger-text
| {{{_'r-board-note'}}}
| {{_'r-board-note'}}
template(name="boardCardTitlePopup")
form
@@ -109,8 +109,3 @@ template(name="boardCardTitlePopup")
input.js-card-filter-name(type="text" value=title autofocus)
input.js-card-filter-button.primary.wide(type="submit" value="{{_ 'set-filter'}}")
+341 -26
View File
@@ -5,50 +5,199 @@ template(name="people")
else
.content-title.ext-box
.ext-box-left
span
i.fa.fa-users
| {{_ 'people'}}
input#searchInput(placeholder="{{_ 'search'}}")
button#searchButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{_ 'people-number'}} #{peopleNumber}
if loading.get
+spinner
else if orgSetting.get
span
i.fa.fa-sitemap
unless isMiniScreen
| {{_ 'organizations'}}
input#searchOrgInput(placeholder="{{_ 'search'}}")
button#searchOrgButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{#unless isMiniScreen}}{{_ 'org-number'}}{{/unless}} #{orgNumber}
else if teamSetting.get
span
i.fa.fa-users
unless isMiniScreen
| {{_ 'teams'}}
input#searchTeamInput(placeholder="{{_ 'search'}}")
button#searchTeamButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{#unless isMiniScreen}}{{_ 'team-number'}}{{/unless}} #{teamNumber}
else if peopleSetting.get
span
i.fa.fa-user
unless isMiniScreen
| {{_ 'people'}}
input#searchInput(placeholder="{{_ 'search'}}")
button#searchButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{#unless isMiniScreen}}{{_ 'people-number'}}{{/unless}} #{peopleNumber}
.content-body
.side-menu
ul
li.active
a.js-setting-menu(data-id="people-setting")
a.js-org-menu(data-id="org-setting")
i.fa.fa-sitemap
| {{_ 'organizations'}}
li
a.js-team-menu(data-id="team-setting")
i.fa.fa-users
| {{_ 'teams'}}
li
a.js-people-menu(data-id="people-setting")
i.fa.fa-user
| {{_ 'people'}}
.main-body
if loading.get
+spinner
else if people.get
else if orgSetting.get
+orgGeneral
else if teamSetting.get
+teamGeneral
else if peopleSetting.get
+peopleGeneral
template(name="orgGeneral")
table
tbody
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
th {{_ 'shortName'}}
th {{_ 'website'}}
th {{_ 'createdAt'}}
th {{_ 'active'}}
th
+newOrgRow
each org in orgList
+orgRow(orgId=org._id)
template(name="teamGeneral")
table
tbody
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
th {{_ 'shortName'}}
th {{_ 'website'}}
th {{_ 'createdAt'}}
th {{_ 'active'}}
th
+newTeamRow
each team in teamList
+teamRow(teamId=team._id)
template(name="peopleGeneral")
table
tbody
tr
th {{_ 'username'}}
th {{_ 'fullname'}}
th {{_ 'initials'}}
th {{_ 'admin'}}
th {{_ 'email'}}
th {{_ 'verified'}}
th {{_ 'createdAt'}}
th {{_ 'active'}}
th {{_ 'authentication-method'}}
th {{_ 'import-usernames'}}
th
+newUserRow
each user in peopleList
+peopleRow(userId=user._id)
template(name="newOrgRow")
a.new-org
i.fa.fa-plus-square
| {{_ 'new'}}
template(name="newTeamRow")
a.new-team
i.fa.fa-plus-square
| {{_ 'new'}}
template(name="newUserRow")
a.new-user
i.fa.fa-edit
i.fa.fa-plus-square
| {{_ 'new'}}
template(name="orgRow")
tr
if orgData.loginDisabled
td <s>{{ orgData.orgDisplayName }}</s>
else
td {{ orgData.orgDisplayName }}
if orgData.loginDisabled
td <s>{{ orgData.orgDesc }}</s>
else
td {{ orgData.orgDesc }}
if orgData.loginDisabled
td <s>{{ orgData.orgName }}</s>
else
td {{ orgData.orgName }}
if orgData.loginDisabled
td <s>{{ orgData.orgWebsite }}</s>
else
td {{ orgData.orgWebsite }}
if orgData.loginDisabled
td <s>{{ moment orgData.createdAt 'LLL' }}</s>
else
td {{ moment orgData.createdAt 'LLL' }}
td
if orgData.loginDisabled
| {{_ 'no'}}
else
| {{_ 'yes'}}
td
a.edit-org
i.fa.fa-edit
| {{_ 'edit'}}
a.more-settings-org
i.fa.fa-ellipsis-h
template(name="teamRow")
tr
if teamData.loginDisabled
td <s>{{ teamData.teamDisplayName }}</s>
else
td {{ teamData.teamDisplayName }}
if teamData.loginDisabled
td <s>{{ teamData.teamDesc }}</s>
else
td {{ teamData.teamDesc }}
if teamData.loginDisabled
td <s>{{ teamData.teamName }}</s>
else
td {{ teamData.teamName }}
if teamData.loginDisabled
td <s>{{ teamData.teamWebsite }}</s>
else
td {{ teamData.teamWebsite }}
if orgData.loginDisabled
td <s>{{ moment teamData.createdAt 'LLL' }}</s>
else
td {{ moment teamData.createdAt 'LLL' }}
td
if teamData.loginDisabled
| {{_ 'no'}}
else
| {{_ 'yes'}}
td
a.edit-team
i.fa.fa-edit
| {{_ 'edit'}}
a.more-settings-team
i.fa.fa-ellipsis-h
template(name="peopleRow")
tr
if userData.loginDisabled
@@ -59,6 +208,10 @@ template(name="peopleRow")
td <s>{{ userData.profile.fullname }}</s>
else
td {{ userData.profile.fullname }}
if userData.loginDisabled
td <s>{{ userData.profile.initials }}</s>
else
td {{ userData.profile.initials }}
if userData.loginDisabled
td
if userData.isAdmin
@@ -100,6 +253,10 @@ template(name="peopleRow")
td <s>{{_ userData.authenticationMethod }}</s>
else
td {{_ userData.authenticationMethod }}
if userData.loginDisabled
td <s>{{ userData.importUsernamesString }}</s>
else
td {{ userData.importUsernamesString }}
td
a.edit-user
i.fa.fa-edit
@@ -107,12 +264,61 @@ template(name="peopleRow")
a.more-settings-user
i.fa.fa-ellipsis-h
template(name="editOrgPopup")
form
label.hide.orgId(type="text" value=org._id)
label
| {{_ 'displayName'}}
input.js-orgDisplayName(type="text" value=org.displayName required)
span.error.hide.orgname-taken
| {{_ 'error-orgname-taken'}}
label
| {{_ 'description'}}
input.js-orgDesc(type="text" value=org.orgDesc required)
label
| {{_ 'shortName'}}
input.js-orgShortName(type="text" value=org.orgShortName required)
label
| {{_ 'website'}}
input.js-orgWebsite(type="text" value=org.orgWebsite required)
label
| {{_ 'active'}}
select.select-active.js-org-isactive
option(value="false") {{_ 'yes'}}
option(value="true" selected="{{org.loginDisabled}}") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="editTeamPopup")
form
label.hide.teamId(type="text" value=team._id)
label
| {{_ 'displayName'}}
input.js-teamDisplayName(type="text" value=team.teamDisplayName required)
span.error.hide.teamname-taken
| {{_ 'error-teamname-taken'}}
label
| {{_ 'description'}}
input.js-teamDesc(type="text" value=team.teamDesc required)
label
| {{_ 'shortName'}}
input.js-teamShortName(type="text" value=team.teamShortName required)
label
| {{_ 'website'}}
input.js-teamWebsite(type="text" value=team.teamWebsite required)
label
| {{_ 'active'}}
select.select-active.js-team-isactive
option(value="false") {{_ 'yes'}}
option(value="true" selected="{{team.loginDisabled}}") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="editUserPopup")
form
label.hide.userId(type="text" value=user._id)
label
| {{_ 'fullname'}}
input.js-profile-fullname(type="text" value=user.profile.fullname)
label
| {{_ 'username'}}
span.error.hide.username-taken
@@ -120,7 +326,18 @@ template(name="editUserPopup")
if isLdap
input.js-profile-username(type="text" value=user.username readonly)
else
input.js-profile-username(type="text" value=user.username)
input.js-profile-username(type="text" value=user.username required)
label
| {{_ 'fullname'}}
input.js-profile-fullname(type="text" value=user.profile.fullname required)
label
| {{_ 'initials'}}
input.js-profile-initials(type="text" value=user.profile.initials required)
label
| {{_ 'admin'}}
select.select-role.js-profile-isadmin
option(value="false") {{_ 'no'}}
option(value="true" selected="{{user.isAdmin}}") {{_ 'yes'}}
label
| {{_ 'email'}}
span.error.hide.email-taken
@@ -128,12 +345,15 @@ template(name="editUserPopup")
if isLdap
input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
else
input.js-profile-email(type="email" value="{{user.emails.[0].address}}")
input.js-profile-email(type="email" value="{{user.emails.[0].address}}" required)
label
| {{_ 'admin'}}
select.select-role.js-profile-isadmin
| {{_ 'import-usernames'}}
input.js-import-usernames(type="text" value=user.importUsernames)
label
| {{_ 'verified'}}
select.select-verified.js-profile-email-verified
option(value="false") {{_ 'no'}}
option(value="true" selected="{{user.isAdmin}}") {{_ 'yes'}}
option(value="true" selected="{{userData.emails.[0].verified}}") {{_ 'yes'}}
label
| {{_ 'active'}}
select.select-active.js-profile-isactive
@@ -153,15 +373,61 @@ template(name="editUserPopup")
input.js-profile-password(type="password")
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
// div
// input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}")
template(name="newOrgPopup")
form
//label.hide.userId(type="text" value=user._id)
label
| {{_ 'displayName'}}
input.js-orgDisplayName(type="text" value="" required)
label
| {{_ 'description'}}
input.js-orgDesc(type="text" value="" required)
label
| {{_ 'shortName'}}
input.js-orgName(type="text" value="" required)
label
| {{_ 'website'}}
input.js-orgWebsite(type="text" value="" required)
label
| {{_ 'active'}}
select.select-active.js-org-isactive
option(value="false" selected="selected") {{_ 'yes'}}
option(value="true") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="newTeamPopup")
form
//label.hide.teamId(type="text" value=team._id)
label
| {{_ 'displayName'}}
input.js-teamDisplayName(type="text" value="" required)
label
| {{_ 'description'}}
input.js-teamDesc(type="text" value="" required)
label
| {{_ 'shortName'}}
input.js-teamName(type="text" value="" required)
label
| {{_ 'website'}}
input.js-teamWebsite(type="text" value="" required)
label
| {{_ 'active'}}
select.select-active.js-team-isactive
option(value="false" selected="selected") {{_ 'yes'}}
option(value="true") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="newUserPopup")
form
//label.hide.userId(type="text" value=user._id)
label
| {{_ 'fullname'}}
input.js-profile-fullname(type="text" value="")
input.js-profile-fullname(type="text" value="" required)
label
| {{_ 'username'}}
span.error.hide.username-taken
@@ -169,7 +435,10 @@ template(name="newUserPopup")
//if isLdap
// input.js-profile-username(type="text" value=user.username readonly)
//else
input.js-profile-username(type="text" value="")
input.js-profile-username(type="text" value="" required)
label
| {{_ 'initials'}}
input.js-profile-initials(type="text" value="" required)
label
| {{_ 'email'}}
span.error.hide.email-taken
@@ -177,7 +446,10 @@ template(name="newUserPopup")
//if isLdap
// input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
//else
input.js-profile-email(type="email" value="")
input.js-profile-email(type="email" value="" required)
label
| {{_ 'import-usernames'}}
input.js-import-usernames(type="text" value="")
label
| {{_ 'admin'}}
select.select-role.js-profile-isadmin
@@ -199,13 +471,56 @@ template(name="newUserPopup")
hr
label
| {{_ 'password'}}
input.js-profile-password(type="password")
input.js-profile-password(type="password" required)
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="settingsOrgPopup")
ul.pop-over-list
li
a.impersonate-org
i.fa.fa-user
| {{_ 'impersonate-org'}}
// Delete is not enabled yet, because it does leave empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
// that does now remove member from board, card members and assignees correctly,
// but that should be used to remove user from all boards similarly
// - wekan/models/users.js Delete is not enabled
//li
// br
// br
// hr
//li
// form
// label.hide.userId(type="text" value=user._id)
// div.buttonsContainer
// input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
template(name="settingsUserPopup")
ul.pop-over-list
li
a.impersonate-user
i.fa.fa-user
| {{_ 'impersonate-user'}}
// Delete is not enabled yet, because it does leave empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
// that does now remove member from board, card members and assignees correctly,
// but that should be used to remove user from all boards similarly
// - wekan/models/users.js Delete is not enabled
//li
// br
// br
// hr
//li
// form
// label.hide.userId(type="text" value=user._id)
// div.buttonsContainer
// input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
+432 -27
View File
@@ -1,3 +1,5 @@
const orgsPerPage = 25;
const teamsPerPage = 25;
const usersPerPage = 25;
BlazeComponent.extendComponent({
@@ -7,17 +9,45 @@ BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.people = new ReactiveVar(true);
this.orgSetting = new ReactiveVar(true);
this.teamSetting = new ReactiveVar(true);
this.peopleSetting = new ReactiveVar(true);
this.findOrgsOptions = new ReactiveVar({});
this.findTeamsOptions = new ReactiveVar({});
this.findUsersOptions = new ReactiveVar({});
this.number = new ReactiveVar(0);
this.numberOrgs = new ReactiveVar(0);
this.numberTeams = new ReactiveVar(0);
this.numberPeople = new ReactiveVar(0);
this.page = new ReactiveVar(1);
this.loadNextPageLocked = false;
this.callFirstWith(null, 'resetNextPeak');
this.autorun(() => {
const limit = this.page.get() * usersPerPage;
const limitOrgs = this.page.get() * orgsPerPage;
const limitTeams = this.page.get() * teamsPerPage;
const limitUsers = this.page.get() * usersPerPage;
this.subscribe('people', this.findUsersOptions.get(), limit, () => {
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {
this.loadNextPageLocked = false;
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
this.calculateNextPeak();
const nextPeakAfter = this.callFirstWith(null, 'getNextPeak');
if (nextPeakBefore === nextPeakAfter) {
this.callFirstWith(null, 'resetNextPeak');
}
});
this.subscribe('team', this.findTeamsOptions.get(), limitTeams, () => {
this.loadNextPageLocked = false;
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
this.calculateNextPeak();
const nextPeakAfter = this.callFirstWith(null, 'getNextPeak');
if (nextPeakBefore === nextPeakAfter) {
this.callFirstWith(null, 'resetNextPeak');
}
});
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {
this.loadNextPageLocked = false;
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
this.calculateNextPeak();
@@ -31,6 +61,22 @@ BlazeComponent.extendComponent({
events() {
return [
{
'click #searchOrgButton'() {
this.filterOrg();
},
'keydown #searchOrgInput'(event) {
if (event.keyCode === 13 && !event.shiftKey) {
this.filterOrg();
}
},
'click #searchTeamButton'() {
this.filterTeam();
},
'keydown #searchTeamInput'(event) {
if (event.keyCode === 13 && !event.shiftKey) {
this.filterTeam();
}
},
'click #searchButton'() {
this.filterPeople();
},
@@ -39,9 +85,18 @@ BlazeComponent.extendComponent({
this.filterPeople();
}
},
'click #newOrgButton'() {
Popup.open('newOrg');
},
'click #newTeamButton'() {
Popup.open('newTeam');
},
'click #newUserButton'() {
Popup.open('newUser');
},
'click a.js-org-menu': this.switchMenu,
'click a.js-team-menu': this.switchMenu,
'click a.js-people-menu': this.switchMenu,
},
];
},
@@ -84,18 +139,63 @@ BlazeComponent.extendComponent({
setLoading(w) {
this.loading.set(w);
},
orgList() {
const orgs = Org.find(this.findOrgsOptions.get(), {
fields: { _id: true },
});
this.numberOrgs.set(orgs.count(false));
return orgs;
},
teamList() {
const teams = Team.find(this.findTeamsOptions.get(), {
fields: { _id: true },
});
this.numberTeams.set(team.count(false));
return teams;
},
peopleList() {
const users = Users.find(this.findUsersOptions.get(), {
fields: { _id: true },
});
this.number.set(users.count(false));
this.numberPeople.set(users.count(false));
return users;
},
orgNumber() {
return this.numberOrgs.get();
},
teamNumber() {
return this.numberTeams.get();
},
peopleNumber() {
return this.number.get();
return this.numberPeople.get();
},
switchMenu(event) {
const target = $(event.target);
if (!target.hasClass('active')) {
$('.side-menu li.active').removeClass('active');
target.parent().addClass('active');
const targetID = target.data('id');
this.orgSetting.set('org-setting' === targetID);
this.teamSetting.set('team-setting' === targetID);
this.peopleSetting.set('people-setting' === targetID);
}
},
}).register('people');
Template.orgRow.helpers({
orgData() {
const orgCollection = this.esSearch ? ESSearchResults : Org;
return orgCollection.findOne(this.orgId);
},
});
Template.teamRow.helpers({
teamData() {
const teamCollection = this.esSearch ? ESSearchResults : Team;
return teamCollection.findOne(this.teamId);
},
});
Template.peopleRow.helpers({
userData() {
const userCollection = this.esSearch ? ESSearchResults : Users;
@@ -122,6 +222,24 @@ Template.editUserPopup.onCreated(function() {
});
});
Template.editOrgPopup.helpers({
org() {
return Org.findOne(this.orgId);
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.editTeamPopup.helpers({
team() {
return Team.findOne(this.teamId);
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.editUserPopup.helpers({
user() {
return Users.findOne(this.userId);
@@ -144,6 +262,14 @@ Template.editUserPopup.helpers({
},
});
Template.newOrgPopup.onCreated(function() {
this.errorMessage = new ReactiveVar('');
});
Template.newTeamPopup.onCreated(function() {
this.errorMessage = new ReactiveVar('');
});
Template.newUserPopup.onCreated(function() {
this.authenticationMethods = new ReactiveVar([]);
this.errorMessage = new ReactiveVar('');
@@ -163,28 +289,76 @@ Template.newUserPopup.onCreated(function() {
});
});
Template.newUserPopup.helpers({
//user() {
// return Users.findOne(this.userId);
//},
authentications() {
return Template.instance().authenticationMethods.get();
Template.newOrgPopup.helpers({
org() {
return Org.findOne(this.orgId);
},
//isSelected(match) {
// const userId = Template.instance().data.userId;
// const selected = Users.findOne(userId).authenticationMethod;
// return selected === match;
//},
//isLdap() {
// const userId = Template.instance().data.userId;
// const selected = Users.findOne(userId).authenticationMethod;
// return selected === 'ldap';
//},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.newTeamPopup.helpers({
team() {
return Team.findOne(this.teamId);
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.newUserPopup.helpers({
user() {
return Users.findOne(this.userId);
},
authentications() {
return Template.instance().authenticationMethods.get();
},
isSelected(match) {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === match;
},
isLdap() {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === 'ldap';
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
BlazeComponent.extendComponent({
onCreated() {},
org() {
return Org.findOne(this.orgId);
},
events() {
return [
{
'click a.edit-org': Popup.open('editOrg'),
'click a.more-settings-org': Popup.open('settingsOrg'),
},
];
},
}).register('orgRow');
BlazeComponent.extendComponent({
onCreated() {},
team() {
return Team.findOne(this.teamId);
},
events() {
return [
{
'click a.edit-team': Popup.open('editTeam'),
'click a.more-settings-team': Popup.open('settingsTeam'),
},
];
},
}).register('teamRow');
BlazeComponent.extendComponent({
onCreated() {},
user() {
@@ -200,6 +374,26 @@ BlazeComponent.extendComponent({
},
}).register('peopleRow');
BlazeComponent.extendComponent({
events() {
return [
{
'click a.new-org': Popup.open('newOrg'),
},
];
},
}).register('newOrgRow');
BlazeComponent.extendComponent({
events() {
return [
{
'click a.new-team': Popup.open('newTeam'),
},
];
},
}).register('newTeamRow');
BlazeComponent.extendComponent({
events() {
return [
@@ -210,24 +404,121 @@ BlazeComponent.extendComponent({
},
}).register('newUserRow');
Template.editOrgPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const org = Orgs.findOne(this.orgId);
const orgDisplayName = templateInstance
.find('.js-orgDisplayName')
.value.trim();
const orgDesc = templateInstance.find('.js-orgDesc').value.trim();
const orgShortName = templateInstance.find('.js-orgShortName').value.trim();
const orgWebsite = templateInstance.find('.js-orgWebsite').value.trim();
const orgIsActive = templateInstance.find('.js-org-isactive').value.trim();
const isChangeOrgDisplayName = orgDisplayName !== org.orgDisplayName;
const isChangeOrgDesc = orgDesc !== org.orgDesc;
const isChangeOrgShortName = orgShortName !== org.orgShortName;
const isChangeOrgWebsite = orgWebsite !== org.orgWebsite;
const isChangeOrgIsActive = orgIsActive !== org.orgIsActive;
if (isChangeOrgDisplayName) {
Meteor.call('setOrgDisplayName', org, orgDisplayName);
}
if (isChangeOrgDesc) {
Meteor.call('setOrgDesc', org, orgDesc);
}
if (isChangeOrgShortName) {
Meteor.call('setOrgShortName', org, orgShortName);
}
if (isChangeOrgIsActive) {
Meteor.call('setOrgIsActive', org, orgIsActive);
}
Popup.close();
},
});
Template.editTeamPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const team = Teams.findOne(this.teamId);
const teamDisplayName = templateInstance
.find('.js-teamDisplayName')
.value.trim();
const teamDesc = templateInstance.find('.js-teamDesc').value.trim();
const teamShortName = templateInstance
.find('.js-teamShortName')
.value.trim();
const teamWebsite = templateInstance.find('.js-teamWebsite').value.trim();
const teamIsActive = templateInstance
.find('.js-team-isactive')
.value.trim();
const isChangeTeamDisplayName = teamDisplayName !== team.teamDisplayName;
const isChangeTeamDesc = teamDesc !== team.teamDesc;
const isChangeTeamShortName = teamShortName !== team.teamShortName;
const isChangeTeamWebsite = teamWebsite !== team.teamWebsite;
const isChangeTeamIsActive = teamIsActive !== team.teamIsActive;
if (isChangeTeamDisplayName) {
Meteor.call('setTeamDisplayName', team, teamDisplayName);
}
if (isChangeTeamDesc) {
Meteor.call('setTeamDesc', team, teamDesc);
}
if (isChangeTeamShortName) {
Meteor.call('setTeamShortName', team, teamShortName);
}
if (isChangeTeamIsActive) {
Meteor.call('setTeamIsActive', team, teamIsActive);
}
Popup.close();
},
});
Template.editUserPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const user = Users.findOne(this.userId);
const fullname = templateInstance.find('.js-profile-fullname').value.trim();
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();
const password = templateInstance.find('.js-profile-password').value;
const isAdmin = templateInstance.find('.js-profile-isadmin').value.trim();
const isActive = templateInstance.find('.js-profile-isactive').value.trim();
const email = templateInstance.find('.js-profile-email').value.trim();
const verified = templateInstance
.find('.js-profile-email-verified')
.value.trim();
const authentication = templateInstance
.find('.js-authenticationMethod')
.value.trim();
const importUsernames = templateInstance
.find('.js-import-usernames')
.value.trim();
const isChangePassword = password.length > 0;
const isChangeUserName = username !== user.username;
const isChangeInitials = initials.length > 0;
const isChangeEmailVerified = verified !== user.emails[0].verified;
// If previously email address has not been set, it is undefined,
// check for undefined, and allow adding email address.
const isChangeEmail =
email.toLowerCase() !== user.emails[0].address.toLowerCase();
email.toLowerCase() !==
(typeof user.emails !== 'undefined'
? user.emails[0].address.toLowerCase()
: false);
Users.update(this.userId, {
$set: {
@@ -235,6 +526,7 @@ Template.editUserPopup.events({
isAdmin: isAdmin === 'true',
loginDisabled: isActive === 'true',
authenticationMethod: authentication,
importUsernames: Users.parseImportUsernames(importUsernames),
},
});
@@ -242,6 +534,14 @@ Template.editUserPopup.events({
Meteor.call('setPassword', password, this.userId);
}
if (isChangeEmailVerified) {
Meteor.call('setEmailVerified', email, verified === 'true', this.userId);
}
if (isChangeInitials) {
Meteor.call('setInitials', initials, this.userId);
}
if (isChangeUserName && isChangeEmail) {
Meteor.call(
'setUsernameAndEmail',
@@ -297,11 +597,56 @@ Template.editUserPopup.events({
});
} else Popup.close();
},
});
'click #deleteButton': Popup.afterConfirm('userDelete', function() {
Users.remove(this.userId);
Template.newOrgPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const orgDisplayName = templateInstance
.find('.js-orgDisplayName')
.value.trim();
const orgDesc = templateInstance.find('.js-orgDesc').value.trim();
const orgShortName = templateInstance.find('.js-orgShortName').value.trim();
const orgWebsite = templateInstance.find('.js-orgWebsite').value.trim();
const orgIsActive = templateInstance.find('.js-org-isactive').value.trim();
Meteor.call(
'setCreateOrg',
orgDisplayName,
orgDesc,
orgShortName,
orgWebsite,
orgIsActive,
);
Popup.close();
}),
},
});
Template.newTeamPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const teamDisplayName = templateInstance
.find('.js-teamDisplayName')
.value.trim();
const teamDesc = templateInstance.find('.js-teamDesc').value.trim();
const teamShortName = templateInstance
.find('.js-teamShortName')
.value.trim();
const teamWebsite = templateInstance.find('.js-teamWebsite').value.trim();
const teamIsActive = templateInstance
.find('.js-team-isactive')
.value.trim();
Meteor.call(
'setCreateTeam',
teamDisplayName,
teamDesc,
teamShortName,
teamWebsite,
teamIsActive,
);
Popup.close();
},
});
Template.newUserPopup.events({
@@ -309,19 +654,25 @@ Template.newUserPopup.events({
event.preventDefault();
const fullname = templateInstance.find('.js-profile-fullname').value.trim();
const username = templateInstance.find('.js-profile-username').value.trim();
const initials = templateInstance.find('.js-profile-initials').value.trim();
const password = templateInstance.find('.js-profile-password').value;
const isAdmin = templateInstance.find('.js-profile-isadmin').value.trim();
const isActive = templateInstance.find('.js-profile-isactive').value.trim();
const email = templateInstance.find('.js-profile-email').value.trim();
const importUsernames = Users.parseImportUsernames(
templateInstance.find('.js-import-usernames').value,
);
Meteor.call(
'setCreateUser',
fullname,
username,
initials,
password,
isAdmin,
isActive,
email.toLowerCase(),
importUsernames,
function(error) {
const usernameMessageElement = templateInstance.$('.username-taken');
const emailMessageElement = templateInstance.$('.email-taken');
@@ -356,4 +707,58 @@ Template.settingsUserPopup.events({
}
});
},
'click #deleteButton'(event) {
event.preventDefault();
/*
// Delete is not enabled yet, because it does leave empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
// that does now remove member from board, card members and assignees correctly,
// but that should be used to remove user from all boards similarly
// - wekan/models/users.js Delete is not enabled
//
//console.log('user id: ' + this.userId);
//Popup.afterConfirm('userDelete', function(event) {
//Boards.find({ members: this.userId }).forEach(board => {
// console.log('board id: ' + board._id);
//Cards.find({ boardId: board._id, members: this.userId }).forEach(card => {
// card.unassignMember(this.userId);
//});
//Cards.find({ boardId: board._id, members: this.userId }).forEach(card => {
// card.unassignMember(this.userId);
//});
//Cards.find({ boardId: board._id, assignees: this.userId }).forEach(card => {
// card.unassignAssignee(this.userId);
//});
//Boards.findOne({ boardId: board._id }).removeMember(this.userId);
//});
//Users.remove(this.userId);
*/
Popup.close();
},
});
Template.settingsUserPopup.helpers({
user() {
return Users.findOne(this.userId);
},
authentications() {
return Template.instance().authenticationMethods.get();
},
isSelected(match) {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === match;
},
isLdap() {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === 'ldap';
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
+2 -2
View File
@@ -21,7 +21,7 @@ table
.ext-box-left
display: flex;
width: 40%
width: 100%
span
vertical-align: center;
@@ -47,5 +47,5 @@ table
div
margin: auto
.more-settings-user
.more-settings-user,.more-settings-team,.more-settings-org
margin-left: 10px;
+47 -43
View File
@@ -13,10 +13,11 @@ template(name="setting")
a.js-setting-menu(data-id="registration-setting")
i.fa.fa-sign-in
| {{_ 'registration'}}
li
a.js-setting-menu(data-id="email-setting")
i.fa.fa-envelope
| {{_ 'email'}}
unless isSandstorm
li
a.js-setting-menu(data-id="email-setting")
i.fa.fa-envelope
| {{_ 'email'}}
li
a.js-setting-menu(data-id="account-setting")
i.fa.fa-users
@@ -39,7 +40,8 @@ template(name="setting")
else if generalSetting.get
+general
else if emailSetting.get
+email
unless isSandstorm
+email
else if accountSetting.get
+accountSettings
else if announcementSetting.get
@@ -80,45 +82,48 @@ template(name="general")
template(name='email')
ul#email-setting.setting-detail
li.smtp-form
.title {{_ 'smtp-host'}}
.description {{_ 'smtp-host-description'}}
.form-group
input.wekan-form-control#mail-server-host(type="text", placeholder="smtp.domain.com" value="{{currentSetting.mailServer.host}}")
li.smtp-form
.title {{_ 'smtp-port'}}
.description {{_ 'smtp-port-description'}}
.form-group
input.wekan-form-control#mail-server-port(type="text", placeholder="25" value="{{currentSetting.mailServer.port}}")
li.smtp-form
.title {{_ 'smtp-username'}}
.form-group
input.wekan-form-control#mail-server-username(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
li.smtp-form
.title {{_ 'smtp-password'}}
.form-group
input.wekan-form-control#mail-server-password(type="password", placeholder="{{_ 'password'}}" value="{{currentSetting.mailServer.password}}")
li.smtp-form
.title {{_ 'smtp-tls'}}
.form-group
a.flex.js-toggle-tls
.materialCheckBox#mail-server-tls(class="{{#if currentSetting.mailServer.enableTLS}}is-checked{{/if}}")
span {{_ 'smtp-tls-description'}}
li.smtp-form
.title {{_ 'send-from'}}
.form-group
input.wekan-form-control#mail-server-from(type="email", placeholder="no-reply@domain.com" value="{{currentSetting.mailServer.from}}")
li
button.js-save.primary {{_ 'save'}}
//if isSandstorm
// li.smtp-form
// .title {{_ 'smtp-host'}}
// .description {{_ 'smtp-host-description'}}
// .form-group
// input.wekan-form-control#mail-server-host(type="text", placeholder="smtp.domain.com" value="{{currentSetting.mailServer.host}}")
// li.smtp-form
// .title {{_ 'smtp-port'}}
// .description {{_ 'smtp-port-description'}}
// .form-group
// input.wekan-form-control#mail-server-port(type="text", placeholder="25" value="{{currentSetting.mailServer.port}}")
// li.smtp-form
// .title {{_ 'smtp-username'}}
// .form-group
// input.wekan-form-control#mail-server-username(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
// li.smtp-form
// .title {{_ 'smtp-password'}}
// .form-group
// input.wekan-form-control#mail-server-password(type="password", placeholder="{{_ 'password'}}" value="")
// li.smtp-form
// .title {{_ 'smtp-tls'}}
// .form-group
// a.flex.js-toggle-tls
// .materialCheckBox#mail-server-tls(class="{{#if currentSetting.mailServer.enableTLS}}is-checked{{/if}}")
//
// span {{_ 'smtp-tls-description'}}
//
// li.smtp-form
// .title {{_ 'send-from'}}
// .form-group
// input.wekan-form-control#mail-server-from(type="email", placeholder="no-reply@domain.com" value="{{currentSetting.mailServer.from}}")
//
// li
// button.js-save.primary {{_ 'save'}}
li
button.js-send-smtp-test-email.primary {{_ 'send-smtp-test'}}
template(name='accountSettings')
ul#account-setting.setting-detail
li
button.js-all-hide-system-messages.primary {{_ 'hide-system-messages-of-all-users'}}
li.accounts-form
.title {{_ 'accounts-allowEmailChange'}}
.form-group.flex
@@ -126,23 +131,18 @@ template(name='accountSettings')
span {{_ 'yes'}}
input.wekan-form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="false" checked="{{#unless allowEmailChange}}checked{{/unless}}")
span {{_ 'no'}}
li
li.accounts-form
.title {{_ 'accounts-allowUserNameChange'}}
.form-group.flex
input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="true" checked="{{#if allowUserNameChange}}checked{{/if}}")
span {{_ 'yes'}}
input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="false" checked="{{#unless allowUserNameChange}}checked{{/unless}}")
span {{_ 'no'}}
li
li.accounts-form
.title {{_ 'accounts-allowUserDelete'}}
.form-group.flex
input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="true" checked="{{#if allowUserDelete}}checked{{/if}}")
span {{_ 'yes'}}
input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="false" checked="{{#unless allowUserDelete}}checked{{/unless}}")
span {{_ 'no'}}
li
button.js-accounts-save.primary {{_ 'save'}}
template(name='announcementSettings')
@@ -208,6 +208,10 @@ template(name='layoutSettings')
.title {{_ 'custom-top-left-corner-logo-height'}}
.form-group
input.wekan-form-control#custom-top-left-corner-logo-height(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoHeight}}")
li.layout-form
.title {{_ 'automatic-linked-url-schemes'}}
.form-group
textarea#automatic-linked-url-schemes.wekan-form-control= currentSetting.automaticLinkedUrlSchemes
li
button.js-save-layout.primary {{_ 'save'}}
+23 -1
View File
@@ -176,6 +176,9 @@ BlazeComponent.extendComponent({
const textBelowCustomLoginLogo = $('#text-below-custom-login-logo')
.val()
.trim();
const automaticLinkedUrlSchemes = $('#automatic-linked-url-schemes')
.val()
.trim();
const customTopLeftCornerLogoImageUrl = $(
'#custom-top-left-corner-logo-image-url',
)
@@ -209,6 +212,7 @@ BlazeComponent.extendComponent({
customTopLeftCornerLogoHeight,
displayAuthenticationMethod,
defaultAuthenticationMethod,
automaticLinkedUrlSchemes,
},
});
} catch (e) {
@@ -270,7 +274,6 @@ BlazeComponent.extendComponent({
$set: { booleanValue: allowUserDelete },
});
},
allowEmailChange() {
return AccountSettings.findOne('accounts-allowEmailChange').booleanValue;
},
@@ -280,12 +283,31 @@ BlazeComponent.extendComponent({
allowUserDelete() {
return AccountSettings.findOne('accounts-allowUserDelete').booleanValue;
},
allHideSystemMessages() {
Meteor.call('setAllUsersHideSystemMessages', (err, ret) => {
if (!err && ret) {
if (ret === true) {
const message = `${TAPi18n.__(
'now-system-messages-of-all-users-are-hidden',
)}`;
alert(message);
}
} else {
const reason = err.reason || '';
const message = `${TAPi18n.__(err.error)}\n${reason}`;
alert(message);
}
});
},
events() {
return [
{
'click button.js-accounts-save': this.saveAccountsChange,
},
{
'click button.js-all-hide-system-messages': this.allHideSystemMessages,
},
];
},
}).register('accountSettings');
+15 -16
View File
@@ -3,22 +3,21 @@ template(name="settingHeaderBar")
span {{_ 'admin-panel'}}
.setting-header-btns.left
unless isMiniScreen
if currentUser
a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
i.fa(class="fa-cog")
span {{_ 'settings'}}
if currentUser
a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
i.fa(class="fa-cog")
span {{_ 'settings'}}
a.setting-header-btn.people(href="{{pathFor 'people'}}")
i.fa(class="fa-users")
span {{_ 'people'}}
a.setting-header-btn.people(href="{{pathFor 'people'}}")
i.fa(class="fa-users")
span {{_ 'people'}}
a.setting-header-btn.informations(href="{{pathFor 'information'}}")
i.fa(class="fa-info-circle")
span {{_ 'info'}}
a.setting-header-btn.informations(href="{{pathFor 'information'}}")
i.fa(class="fa-info-circle")
span {{_ 'info'}}
else
a.setting-header-btn.js-log-in(
title="{{_ 'log-in'}}")
i.fa.fa-sign-in
span {{_ 'log-in'}}
else
a.setting-header-btn.js-log-in(
title="{{_ 'log-in'}}")
i.fa.fa-sign-in
span {{_ 'log-in'}}
+27 -65
View File
@@ -269,14 +269,16 @@ template(name="outgoingWebhooksPopup")
template(name="boardMenuPopup")
ul.pop-over-list
li
a.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
| {{_ 'rules'}}
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'custom-fields'}}
if currentUser.isBoardAdmin
li
a.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
| {{_ 'rules'}}
if currentUser.isBoardAdmin
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'custom-fields'}}
li
a.js-open-archives
i.fa.fa-archive
@@ -286,79 +288,35 @@ template(name="boardMenuPopup")
a.js-change-board-color
i.fa.fa-paint-brush
| {{_ 'board-change-color'}}
//-
XXX Language should be handled by sandstorm, but for now display a
language selection link in the board menu. This link is normally present
in the header bar that is not displayed on sandstorm.
if isSandstorm
li
a.js-change-language
i.fa.fa-flag
| {{_ 'language'}}
unless isSandstorm
if currentUser.isBoardAdmin
hr
ul.pop-over-list
if withApi
li
a.js-export-board
i.fa.fa-share-alt
| {{_ 'export-board'}}
li
a.js-outgoing-webhooks
i.fa.fa-globe
| {{_ 'outgoing-webhooks'}}
li
a.js-card-settings
i.fa.fa-id-card-o
| {{_ 'card-settings'}}
li
a.js-subtask-settings
i.fa.fa-sitemap
| {{_ 'subtask-settings'}}
unless currentBoard.isTemplatesBoard
hr
ul.pop-over-list
li
a.js-archive-board
i.fa.fa-arrow-right
i.fa.fa-archive
| {{_ 'archive-board'}}
if isSandstorm
hr
ul.pop-over-list
hr
ul.pop-over-list
if withApi
li
a.js-export-board
i.fa.fa-share-alt
| {{_ 'export-board'}}
li
a.js-import-board
i.fa.fa-share-alt
i.fa.fa-sign-in
| {{_ 'import-board-c'}}
li
a.js-archive-board
i.fa.fa-arrow-right
i.fa.fa-archive
| {{_ 'archive-board'}}
if currentUser.isBoardAdmin
li
a.js-outgoing-webhooks
i.fa.fa-globe
| {{_ 'outgoing-webhooks'}}
hr
ul.pop-over-list
li
a.js-card-settings
i.fa.fa-id-card-o
| {{_ 'card-settings'}}
hr
ul.pop-over-list
li
a.js-subtask-settings
i.fa.fa-sitemap
| {{_ 'subtask-settings'}}
unless currentBoard.isTemplatesBoard
if currentUser.isBoardAdmin
hr
ul.pop-over-list
li
a.js-archive-board
i.fa.fa-arrow-right
i.fa.fa-archive
| {{_ 'archive-board'}}
template(name="exportBoard")
ul.pop-over-list
@@ -366,6 +324,10 @@ template(name="exportBoard")
a.download-json-link(href="{{exportUrl}}", download="{{exportJsonFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-json'}}
li
a(href="{{exportUrlExcel}}", download="{{exportFilenameExcel}}")
i.fa.fa-share-alt
| {{_ 'export-board-excel'}}
li
a(href="{{exportCsvUrl}}", download="{{exportCsvFilename}}")
i.fa.fa-share-alt
+45 -9
View File
@@ -155,6 +155,9 @@ Template.memberPopup.helpers({
user() {
return Users.findOne(this.userId);
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
memberType() {
const type = Users.findOne(this.userId).isBoardAdmin() ? 'admin' : 'normal';
if (type === 'normal') {
@@ -163,16 +166,16 @@ Template.memberPopup.helpers({
const noComments = currentBoard.hasNoComments(this.userId);
const worker = currentBoard.hasWorker(this.userId);
if (commentOnly) {
return TAPi18n.__('comment-only').toLowerCase();
return TAPi18n.__('comment-only');
} else if (noComments) {
return TAPi18n.__('no-comments').toLowerCase();
return TAPi18n.__('no-comments');
} else if (worker) {
return TAPi18n.__('worker').toLowerCase();
return TAPi18n.__('worker');
} else {
return TAPi18n.__(type).toLowerCase();
return TAPi18n.__(type);
}
} else {
return TAPi18n.__(type).toLowerCase();
return TAPi18n.__(type);
}
},
isInvited() {
@@ -224,6 +227,9 @@ Template.boardMenuPopup.onCreated(function() {
});
Template.boardMenuPopup.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
withApi() {
return Template.instance().apiEnabled.get();
},
@@ -238,7 +244,7 @@ Template.boardMenuPopup.helpers({
},
exportFilename() {
const boardId = Session.get('currentBoard');
return `wekan-export-board-${boardId}.json`;
return `export-board-${boardId}.json`;
},
});
@@ -249,11 +255,15 @@ Template.memberPopup.events({
},
'click .js-change-role': Popup.open('changePermissions'),
'click .js-remove-member': Popup.afterConfirm('removeMember', function() {
// This works from removing member from board, card members and assignees.
const boardId = Session.get('currentBoard');
const memberId = this.userId;
Cards.find({ boardId, members: memberId }).forEach(card => {
card.unassignMember(memberId);
});
Cards.find({ boardId, assignees: memberId }).forEach(card => {
card.unassignAssignee(memberId);
});
Boards.findOne(boardId).removeMember(memberId);
Popup.close();
}),
@@ -294,6 +304,9 @@ Template.membersWidget.helpers({
return false;
}
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
Template.membersWidget.events({
@@ -422,6 +435,23 @@ BlazeComponent.extendComponent({
};
return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
},
exportUrlExcel() {
const params = {
boardId: Session.get('currentBoard'),
};
const queryParams = {
authToken: Accounts._storedLoginToken(),
};
return FlowRouter.path(
'/api/boards/:boardId/exportExcel',
params,
queryParams,
);
},
exportFilenameExcel() {
const boardId = Session.get('currentBoard');
return `export-board-excel-${boardId}.xlsx`;
},
exportCsvUrl() {
const params = {
boardId: Session.get('currentBoard'),
@@ -451,15 +481,15 @@ BlazeComponent.extendComponent({
},
exportJsonFilename() {
const boardId = Session.get('currentBoard');
return `wekan-export-board-${boardId}.json`;
return `export-board-${boardId}.json`;
},
exportCsvFilename() {
const boardId = Session.get('currentBoard');
return `wekan-export-board-${boardId}.csv`;
return `export-board-${boardId}.csv`;
},
exportTsvFilename() {
const boardId = Session.get('currentBoard');
return `wekan-export-board-${boardId}.tsv`;
return `export-board-${boardId}.tsv`;
},
}).register('exportBoardPopup');
@@ -475,6 +505,12 @@ Template.labelsWidget.events({
'click .js-add-label': Popup.open('createLabel'),
});
Template.labelsWidget.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
// Board members can assign people or labels by drag-dropping elements from the
// sidebar to the cards on the board. In order to re-initialize the jquery-ui
// plugin any time a draggable member or label is modified or removed we use a
+33 -12
View File
@@ -5,17 +5,24 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-all-cards {{_ 'restore-all'}}
| -
a.js-delete-all-cards {{_ 'delete-all'}}
if currentUser.isBoardAdmin
| -
a.js-delete-all-cards {{_ 'delete-all'}}
each archivedCards
.minicard-wrapper.js-minicard
+minicard(this)
if currentUser.isBoardMember
unless isWorker
p.quiet
if this.archivedAt
| {{_ 'archived-at' }}
|
| {{ moment this.archivedAt 'LLL' }}
br
a.js-restore-card {{_ 'restore'}}
| -
a.js-delete-card {{_ 'delete'}}
if currentUser.isBoardAdmin
| -
a.js-delete-card {{_ 'delete'}}
if cardIsInArchivedList
p.quiet.small ({{_ 'warn-list-archived'}})
else
@@ -25,8 +32,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-all-lists {{_ 'restore-all'}}
| -
a.js-delete-all-lists {{_ 'delete-all'}}
if currentUser.isBoardAdmin
| -
a.js-delete-all-lists {{_ 'delete-all'}}
ul.archived-lists
each archivedLists
li.archived-lists-item
@@ -34,9 +42,15 @@ template(name="archivesSidebar")
if currentUser.isBoardMember
unless isWorker
p.quiet
if this.archivedAt
| {{_ 'archived-at' }}
|
| {{ moment this.archivedAt 'LLL' }}
br
a.js-restore-list {{_ 'restore'}}
| -
a.js-delete-list {{_ 'delete'}}
if currentUser.isBoardAdmin
| -
a.js-delete-list {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-lists'}}
@@ -44,8 +58,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-all-swimlanes {{_ 'restore-all'}}
| -
a.js-delete-all-swimlanes {{_ 'delete-all'}}
if currentUser.isBoardAdmin
| -
a.js-delete-all-swimlanes {{_ 'delete-all'}}
ul.archived-lists
each archivedSwimlanes
li.archived-lists-item
@@ -53,9 +68,15 @@ template(name="archivesSidebar")
if currentUser.isBoardMember
unless isWorker
p.quiet
if this.archivedAt
| {{_ 'archived-at' }}
|
| {{ moment this.archivedAt 'LLL' }}
br
a.js-restore-swimlane {{_ 'restore'}}
| -
a.js-delete-swimlane {{_ 'delete'}}
if currentUser.isBoardAdmin
| -
a.js-delete-swimlane {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-swimlanes'}}
else
+30 -12
View File
@@ -31,24 +31,39 @@ BlazeComponent.extendComponent({
},
archivedCards() {
return Cards.find({
archived: true,
boardId: Session.get('currentBoard'),
});
return Cards.find(
{
archived: true,
boardId: Session.get('currentBoard'),
},
{
sort: { archivedAt: -1, modifiedAt: -1 },
},
);
},
archivedLists() {
return Lists.find({
archived: true,
boardId: Session.get('currentBoard'),
});
return Lists.find(
{
archived: true,
boardId: Session.get('currentBoard'),
},
{
sort: { archivedAt: -1, modifiedAt: -1 },
},
);
},
archivedSwimlanes() {
return Swimlanes.find({
archived: true,
boardId: Session.get('currentBoard'),
});
return Swimlanes.find(
{
archived: true,
boardId: Session.get('currentBoard'),
},
{
sort: { archivedAt: -1, modifiedAt: -1 },
},
);
},
cardIsInArchivedList() {
@@ -141,6 +156,9 @@ BlazeComponent.extendComponent({
}).register('archivesSidebar');
Template.archivesSidebar.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
isWorker() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return (
@@ -59,6 +59,10 @@ template(name="createCustomFieldPopup")
span {{_ 'automatically-field-on-card'}}
a.flex.js-field-always-on-card(class="{{#if alwaysOnCard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if alwaysOnCard}}is-checked{{/if}}")
span {{_ 'always-field-on-card'}}
a.flex.js-field-showLabel-on-card(class="{{#if showLabelOnMiniCard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if showLabelOnMiniCard}}is-checked{{/if}}")
@@ -16,7 +16,7 @@ BlazeComponent.extendComponent({
}).register('customFieldsSidebar');
const CreateCustomFieldPopup = BlazeComponent.extendComponent({
_types: ['text', 'number', 'date', 'dropdown', 'currency'],
_types: ['text', 'number', 'date', 'dropdown', 'currency', 'checkbox'],
_currencyList: [
{
@@ -174,6 +174,14 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
$target.find('.materialCheckBox').toggleClass('is-checked');
$target.toggleClass('is-checked');
},
'click .js-field-always-on-card'(evt) {
let $target = $(evt.target);
if (!$target.hasClass('js-field-always-on-card')) {
$target = $target.parent();
}
$target.find('.materialCheckBox').toggleClass('is-checked');
$target.toggleClass('is-checked');
},
'click .js-field-showLabel-on-card'(evt) {
let $target = $(evt.target);
if (!$target.hasClass('js-field-showLabel-on-card')) {
@@ -194,6 +202,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
this.find('.js-field-showLabel-on-card.is-checked') !== null,
automaticallyOnCard:
this.find('.js-field-automatically-on-card.is-checked') !== null,
alwaysOnCard:
this.find('.js-field-always-on-card.is-checked') !== null,
};
// insert or update
@@ -155,7 +155,7 @@ template(name="multiselectionSidebar")
i.fa.fa-check
else if someSelectedElementHave 'member' _id
i.fa.fa-ellipsis-h
unless currentUser.isWorker
if currentUser.isBoardAdmin
hr
a.sidebar-btn.js-move-selection
i.fa.fa-share
+10 -1
View File
@@ -134,6 +134,15 @@ BlazeComponent.extendComponent({
},
}).register('multiselectionSidebar');
Template.multiselectionSidebar.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
isCommentOnly() {
return Meteor.user().isCommentOnly();
},
});
Template.disambiguateMultiLabelPopup.events({
'click .js-remove-label'() {
mutateSelectedCards('removeLabel', this._id);
@@ -157,7 +166,7 @@ Template.disambiguateMultiMemberPopup.events({
});
Template.moveSelectionPopup.events({
'click .js-select-list'(event) {
'click .js-select-list'() {
// Move the minicard to the end of the target list
mutateSelectedCards('moveToEndOfList', { listId: this._id });
EscapeActions.executeUpTo('multiselection');
@@ -4,9 +4,9 @@ template(name="searchSidebar")
.list-body
.minilists.clearfix.js-minilists
each (lists)
a.minilist-wrapper.js-minilist(href=absoluteUrl)
a.minilist-wrapper.js-minilist(href=originRelativeUrl)
+minilist(this)
.minicards.clearfix.js-minicards
each (results)
a.minicard-wrapper.js-minicard(href=absoluteUrl)
a.minicard-wrapper.js-minicard(href=originRelativeUrl)
+minicard(this)
@@ -1,5 +1,5 @@
template(name="swimlaneHeader")
.swimlane-header-wrap.js-swimlane-header(class='{{#if colorClass}}swimlane-{{colorClass}}{{/if}}')
.swimlane-header-wrap.js-swimlane-header(class=colorClass)
if this.isTemplateContainer
+swimlaneFixedHeader(this)
else
@@ -15,8 +15,9 @@ template(name="swimlaneFixedHeader")
= title
.swimlane-header-menu
unless currentUser.isCommentOnly
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
a.fa.fa-navicon.js-open-swimlane-menu
if currentUser.isBoardAdmin
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
a.fa.fa-navicon.js-open-swimlane-menu
unless isMiniScreen
if showDesktopDragHandles
a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle
@@ -38,6 +39,8 @@ template(name="swimlaneActionPopup")
hr
ul.pop-over-list
li: a.js-close-swimlane {{_ 'archive-swimlane'}}
ul.pop-over-list
li: a.js-move-swimlane {{_ 'move-swimlane'}}
template(name="swimlaneAddPopup")
unless currentUser.isCommentOnly
@@ -41,6 +41,12 @@ Template.swimlaneHeader.helpers({
},
});
Template.swimlaneFixedHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
Template.swimlaneActionPopup.events({
'click .js-set-swimlane-color': Popup.open('setSwimlaneColor'),
'click .js-close-swimlane'(event) {
@@ -48,6 +54,13 @@ Template.swimlaneActionPopup.events({
this.archive();
Popup.close();
},
'click .js-move-swimlane': Popup.open('moveSwimlane'),
});
Template.swimlaneActionPopup.events({
isCommentOnly() {
return Meteor.user().isCommentOnly();
},
});
BlazeComponent.extendComponent({
+26 -15
View File
@@ -45,18 +45,29 @@ template(name="listsGroup")
template(name="addListForm")
unless currentUser.isWorker
.list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
.list-header-add
+inlinedForm(autoclose=false)
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
autocomplete="off" autofocus)
.edit-controls.clearfix
button.primary.confirm(type="submit") {{_ 'save'}}
unless currentBoard.isTemplatesBoard
unless currentBoard.isTemplateBoard
span.quiet
| {{_ 'or'}}
a.js-list-template {{_ 'template'}}
else
a.open-list-composer.js-open-inlined-form
i.fa.fa-plus
| {{_ 'add-list'}}
if currentUser.isBoardAdmin
.list-header-add
+inlinedForm(autoclose=false)
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
autocomplete="off" autofocus)
.edit-controls.clearfix
button.primary.confirm(type="submit") {{_ 'save'}}
unless currentBoard.isTemplatesBoard
unless currentBoard.isTemplateBoard
span.quiet
| {{_ 'or'}}
a.js-list-template {{_ 'template'}}
else
a.open-list-composer.js-open-inlined-form
i.fa.fa-plus
| {{_ 'add-list'}}
template(name="moveSwimlanePopup")
unless currentUser.isWorker
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each toBoard in toBoards
option(value="{{toBoard._id}}") {{toBoard.title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+56 -11
View File
@@ -85,14 +85,14 @@ function initSortable(boardComponent, $listsDom) {
},
});
function userIsMember() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
}
//function userIsMember() {
// return (
// Meteor.user() &&
// Meteor.user().isBoardMember() &&
// !Meteor.user().isCommentOnly() &&
// !Meteor.user().isWorker()
// );
//}
boardComponent.autorun(() => {
let showDesktopDragHandles = false;
@@ -122,7 +122,8 @@ function initSortable(boardComponent, $listsDom) {
'option',
'disabled',
// Disable drag-dropping when user is not member/is worker
!userIsMember() || Meteor.user().isWorker(),
//!userIsMember() || Meteor.user().isWorker(),
!Meteor.user().isBoardAdmin(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
@@ -274,12 +275,13 @@ Template.swimlane.helpers({
}
},
canSeeAddList() {
return (
return Meteor.user().isBoardAdmin();
/*
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
*/
},
});
@@ -321,3 +323,46 @@ BlazeComponent.extendComponent({
initSortable(boardComponent, $listsDom);
},
}).register('listsGroup');
BlazeComponent.extendComponent({
onCreated() {
this.currentSwimlane = this.currentData();
},
board() {
return Boards.findOne(Session.get('currentBoard'));
},
toBoards() {
const boards = Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
type: 'board',
_id: { $ne: this.board()._id },
},
{
sort: { title: 1 },
},
);
return boards;
},
events() {
return [
{
'click .js-done'() {
const swimlane = Swimlanes.findOne(this.currentSwimlane._id);
const bSelect = $('.js-select-boards')[0];
let boardId;
if (bSelect) {
boardId = bSelect.options[bSelect.selectedIndex].value;
Meteor.call('moveSwimlane', this.currentSwimlane._id, boardId);
}
Popup.close();
},
},
];
},
}).register('moveSwimlanePopup');
Loaded 100 of 266 files, more files were not shown because too many files have changed in this diff. Show more