Compare commits

...
480 Commits
Author SHA1 Message Date
Lauri Ojansivu 975993dd6d v7.55 2024-08-08 17:32:35 +03:00
Lauri Ojansivu 43084eb664 Updated ChangeLog. 2024-08-08 17:25:16 +03:00
Lauri Ojansivu 0e770ac3b3 Merge pull request #5501 from walster001/main
Fix board backgrounds not showing correctly after V7.54
2024-08-08 17:20:08 +03:00
walster001 206abc8c68 Fix board backgrounds not showing correctly.
Fixed board backgrounds not showing correctly on the following themes. Various code modified as different themes have used different code to implement the background.

Have tried to stick with board-wrapper as a standard to apply the background colour to.
Board background image will override board-wrapper colour every time.

Dark
Relax
Natural
Modern
ModernDark
Exodark
CleanDark
CleanLight

- Updated pull due to original file I had stored on my pc 139 commits behind! So synced that and then redid code changes to bring it all up to date.
2024-08-08 23:34:09 +09:30
walster001 62b13cc343 Merge branch 'main' of https://github.com/walster001/wekan-atlanz 2024-08-08 23:23:00 +09:30
walster001 7822dd3b75 Fix board backgrounds not showing correctly
Fixed board backgrounds not showing correctly on the following themes.
Various code modified as different themes have used different code to implement the background.

Have tried to stick with board-wrapper as a standard to apply the background colour to.

Board background image will override this every time.

- Dark
- Relax
- Natural
- Modern
- ModernDark
- Exodark
- CleanDark
- CleanLight
2024-08-08 22:51:07 +09:30
Lauri Ojansivu a214cd64b6 v7.54 2024-08-07 17:51:01 +03:00
Lauri Ojansivu 8839a8ea39 Updated ChangeLog. 2024-08-07 17:26:47 +03:00
Lauri Ojansivu a4169f3da7 Fix LDAP login fails after upgrade.
Thanks to juppees !

Fixes #5499
2024-08-07 17:24:14 +03:00
Lauri Ojansivu 19d59b3ab4 Updated ChangeLog. 2024-08-07 00:25:57 +03:00
Lauri Ojansivu 27b2e2384c Merge pull request #5498 from mfilser/master
Bugfix, edit description didn't work if it was clicked
2024-08-07 00:24:58 +03:00
Lauri Ojansivu 49d2cbc2c1 Updated ChangeLog. 2024-08-07 00:23:49 +03:00
Martin Filser bf2b3b40cd Bugfix, edit description didn't work if it was clicked
- introduced by commit: 0cc63b810c
2024-08-06 23:22:58 +02:00
Lauri Ojansivu 1541c6ca23 Merge pull request #5497 from mfilser/master
listHeader, simpler code logic at collapsed if conditions
2024-08-07 00:22:23 +03:00
Lauri Ojansivu 42c1ff94e2 Updated ChangeLog. 2024-08-07 00:13:13 +03:00
Martin Filser 53aa5ebc17 listHeader, simpler code logic at collapsed if conditions 2024-08-06 23:12:31 +02:00
Lauri Ojansivu 0f43818757 Merge pull request #5496 from mfilser/master
Bugfix, Cards Count on mobile view was missing
2024-08-07 00:12:11 +03:00
Lauri Ojansivu f3c5b1eb07 Updated ChangeLog. 2024-08-07 00:11:36 +03:00
Martin Filser 517d1bb7fa Bugfix, Cards Count on mobile view was missing
introduced by:
a601ba542a
2024-08-06 23:10:30 +02:00
Lauri Ojansivu 6ee0919ead Merge pull request #5495 from mfilser/master
Editor, Bugfix, copy text is now at each editor (textarea) again
2024-08-07 00:10:03 +03:00
Martin Filser 13eb1a58e0 Editor, migrate to markdown at same line than copy text icon 2024-08-06 23:06:51 +02:00
Martin Filser 08f9c09484 Editor, Bugfix, copy text is now at each editor (textarea) again 2024-08-06 23:05:54 +02:00
Lauri Ojansivu 3f3abe26ee Updated ChangeLog. 2024-08-07 00:05:09 +03:00
Lauri Ojansivu e31c5b6d42 Merge pull request #5494 from mfilser/master
Minicard, show creator, defaultValue of schema and other code is now the same
2024-08-07 00:03:47 +03:00
Martin Filser 7bf77fa7cb Minicard, show creator, defaultValue of schema and other code is now the same 2024-08-06 23:00:42 +02:00
Lauri Ojansivu a2662f1366 Updated ChangeLog. 2024-08-06 23:57:40 +03:00
Lauri Ojansivu 116cf6aa21 Merge pull request #5493 from mfilser/master
board view, first column a bit smaller to save screen space
2024-08-06 23:56:20 +03:00
Lauri Ojansivu 79bb6d0c55 Updated ChangeLog. 2024-08-06 23:55:12 +03:00
Martin Filser c157ecec38 board view, first column to add a new list was too large 2024-08-06 22:53:53 +02:00
Martin Filser 28893cf637 Bugfix, in View "Lists" the first column only showed the first 10 minicards, now all minicards again 2024-08-06 22:53:53 +02:00
Lauri Ojansivu 73ffc99f37 Merge pull request #5492 from mfilser/master
sidebar xmark icon, add padding and background color
2024-08-06 23:53:24 +03:00
Martin Filser 35802c7c62 sidebar xmark-icon, background color on hover the icon 2024-08-06 22:45:51 +02:00
Martin Filser bc44fdf89c sidebar xmark icon, add padding to easier click 2024-08-06 22:45:51 +02:00
Lauri Ojansivu 030c3dd587 Updated ChangeLog. 2024-08-06 23:38:33 +03:00
Lauri Ojansivu 498be2759e Merge pull request #5491 from mfilser/master
fix empty parentId in cards
2024-08-06 23:37:38 +03:00
Lauri Ojansivu 649d00733a Updated ChangeLog. 2024-08-06 23:36:07 +03:00
Martin Filser 8a7a4f3033 fix empty parentId in cards
- if the parentId is undefined or empty, the code run in a infinite loop and
  the browser "hangs"
2024-08-06 22:35:16 +02:00
Lauri Ojansivu b6ce81dc79 Merge pull request #5490 from mfilser/master
change Meteor.user() to ReactiveCache.getCurrentUser()
2024-08-06 23:35:07 +03:00
Lauri Ojansivu 490c417cee Updated ChangeLog. 2024-08-06 23:33:59 +03:00
Martin Filser 2dfeb3924b reactiveCache, removing commented out code 2024-08-06 22:33:03 +02:00
Martin Filser bff96f6ae2 change Meteor.user() to ReactiveCache.getCurrentUser()
- see also: https://github.com/wekan/wekan/issues/5000
2024-08-06 22:33:03 +02:00
Lauri Ojansivu 4801e26b2f Merge pull request #5489 from mfilser/master
attachment popup back was broken since new attachment viewer, now fixed
2024-08-06 23:32:53 +03:00
Lauri Ojansivu 027997f7b3 Updated ChangeLog. 2024-08-06 23:32:29 +03:00
Martin Filser 76aaefbde1 attachment popup back was broken since new attachment viewer, now fixed 2024-08-06 22:30:51 +02:00
Lauri Ojansivu a01bc0f325 Merge pull request #5488 from mfilser/master
remove attachment storage name from attachment list
2024-08-06 23:30:23 +03:00
Martin Filser f6f4f5660e remove attachment storage name from attachment list
- this was for debugging, now not necessary anymore
2024-08-06 22:26:00 +02:00
Lauri Ojansivu 956925889a Updated ChangeLog. 2024-08-06 23:23:42 +03:00
Lauri Ojansivu 0bd49326d8 Merge pull request #5487 from mfilser/master
little opacity to minicards to see the background image a little bit
2024-08-06 23:22:32 +03:00
Lauri Ojansivu 64c4e8eca8 Updated ChangeLog. 2024-08-06 23:22:04 +03:00
Lauri Ojansivu 55fc342f6d Added info how with Caddy webserver config, PWA and Android app override icons, showing toolbars, etc.
Thanks to xet7 !
2024-08-06 23:19:43 +03:00
Martin Filser 3ae0d96760 little opacity to minicards to see the background image a little bit 2024-08-06 22:03:16 +02:00
Lauri Ojansivu fc1e55cc19 Updated ChangeLog. 2024-08-06 22:58:13 +03:00
Lauri Ojansivu 58fc810a43 Merge pull request #5486 from mfilser/master
Bugfix, variable "color" didn't exist
2024-08-06 22:55:58 +03:00
Martin Filser 3c477e9783 Bugfix, variable "color" didn't exist
- background-color is maybe wrong too, but better than throwing an exception
2024-08-06 21:50:57 +02:00
Lauri Ojansivu f2247ed86d Updated ChangeLog. 2024-08-06 22:48:32 +03:00
Lauri Ojansivu 0d9a9d1ed8 Merge branch 'main' of github.com:wekan/wekan 2024-08-06 22:46:00 +03:00
Lauri Ojansivu ca5a579e22 PWA, move to standalone (standard) to display the status bar.
Thanks to mfilser !

Related https://github.com/wekan/wekan/pull/5484
2024-08-06 22:44:51 +03:00
Lauri Ojansivu 53d97a593f Merge pull request #5485 from mfilser/master
don't set background image in .board-canvas too
2024-08-06 22:38:27 +03:00
Martin Filser 3641a8f389 don't set background image in .board-canvas too 2024-08-06 21:30:27 +02:00
Lauri Ojansivu 1dea1bd09d Merge pull request #5483 from mfilser/master
fix error on console when user logout
2024-08-06 19:09:22 +03:00
Martin Filser 3db265d57f fix error on console when user logout (Part 2) 2024-08-06 17:24:43 +02:00
Martin Filser 38a32824ea fix error on console when user logout (Part 1) 2024-08-06 17:24:43 +02:00
Lauri Ojansivu b0c94f7ff2 Updated ChangeLog. 2024-08-05 13:06:51 +03:00
Lauri Ojansivu 2415aa3d2b v7.53 2024-08-03 22:16:18 +03:00
Lauri Ojansivu 1af1844f37 Updated Snap Candidate to MongoDB 6.0.16.
Thanks to MongoDB developers !
2024-08-03 22:13:08 +03:00
Lauri Ojansivu 75bb247c2b Updated ChangeLog. 2024-08-03 21:52:34 +03:00
Lauri Ojansivu 5a1b517733 Merge pull request #5481 from mfilser/master
reducing card size in database if no planning poker was started
2024-08-03 21:50:27 +03:00
Lauri Ojansivu 0fbc8754f7 Updated ChangeLog. 2024-08-03 21:49:12 +03:00
Lauri Ojansivu aaca60b676 Copied changes from wiki to docs.
Thanks to xet7 !
2024-08-03 21:47:10 +03:00
Martin Filser a929d1e3a4 reducing card size in database if no planning poker was started
reducing:
- cards collection size
- database size
- size to transfer from server to client (publish / subscribe)
2024-08-03 20:40:29 +02:00
Lauri Ojansivu 4a7fa7c396 Updated ChangeLog. 2024-08-03 21:36:22 +03:00
Lauri Ojansivu 45674806d7 Fix dragscroll package name.
Thanks to xet7 !
2024-08-03 21:35:04 +03:00
Lauri Ojansivu 8905bc7dfe Updated ChangeLog. 2024-08-03 21:21:19 +03:00
Lauri Ojansivu dd6aec1ba9 Merge pull request #5480 from mfilser/master
changing card color now closes the popup and doesn't refresh the whole boards page
2024-08-03 21:12:05 +03:00
Lauri Ojansivu aca5fa4d0a Merge branch 'main' of github.com:wekan/wekan 2024-08-03 21:11:23 +03:00
Lauri Ojansivu 0d1f45b8a2 Updated ChangeLog. 2024-08-03 21:11:01 +03:00
Lauri Ojansivu 3f9ae57144 Updated dependencies.
Thanks to developers of dependencies.
2024-08-03 21:09:30 +03:00
Martin Filser 45c2f1007b changing card color now closes the popup and doesn't refresh the whole boards page 2024-08-03 20:06:51 +02:00
Lauri Ojansivu 83adaa3074 Merge pull request #5479 from mfilser/master
fixing of "mode is undefined" on first activity component creation
2024-08-03 21:06:33 +03:00
Martin Filser 1951b279c0 fixing of "mode is undefined" on first activity component creation 2024-08-03 20:03:46 +02:00
Lauri Ojansivu 50406ad683 Merge pull request #5478 from mfilser/master
Board Menu Popup's were opened twice because of 2 same event creation
2024-08-03 21:03:15 +03:00
Martin Filser 95740eaa01 Board Menu Popup's were opened twice because of 2 same event creation 2024-08-03 19:58:25 +02:00
Lauri Ojansivu 08f2c1c735 Merge pull request #5477 from mfilser/dragscroll
adding Dragscroll to scroll the board
2024-08-03 20:54:03 +03:00
Martin Filser 32459ec405 No dragscroll on card details 2024-08-03 19:45:55 +02:00
Martin Filser c7ac0cbce1 No dragscroll while sorting swimlanes 2024-08-03 19:45:55 +02:00
Martin Filser 711fb5754e No dragscroll while sorting checklists 2024-08-03 19:45:55 +02:00
Martin Filser 24fffd8bfa Dragscroll, change cursor while scrolling + support summernote compatibily 2024-08-03 19:45:55 +02:00
Martin Filser 52556aff68 Dragscroll, disable scroll on input, textarea and select 2024-08-03 19:45:55 +02:00
Martin Filser c76959ff25 Dragscroll possible, scroll the screen with the mouse at desktop view
- click on a empty list area and drag the view left/right to scroll
2024-08-03 19:45:45 +02:00
Lauri Ojansivu a141871e60 Updated ChangeLog. 2024-08-03 20:42:30 +03:00
Lauri Ojansivu 5e639a7c2d Updated release script: New install webpage location.
Thanks to xet7 !
2024-08-03 20:39:49 +03:00
Lauri Ojansivu f9654d17d5 Updated ChangeLog. 2024-08-03 20:21:42 +03:00
Lauri Ojansivu c89f3ba3da Revert forking ldapjs.
Thanks to xet7 !
2024-08-03 20:18:53 +03:00
Lauri Ojansivu 1dc5ae444e Merge branch 'update' 2024-08-03 19:55:22 +03:00
Lauri Ojansivu 5db67e47a8 v7.52 2024-08-03 19:43:07 +03:00
Lauri Ojansivu 3877e5feb9 Updated ChangeLog. 2024-08-03 16:56:08 +03:00
Lauri Ojansivu 7456186265 Updated WeKan app webmanifest.
Thanks to xet7 !
2024-08-03 16:53:46 +03:00
Lauri Ojansivu 952f7feb49 Updates 2024-08-03 02:24:49 +03:00
Lauri Ojansivu 3983d750f3 Updated ChangeLog. 2024-08-03 01:38:17 +03:00
Lauri Ojansivu b4f2a8ab5b Updated ChangeLog. 2024-08-03 01:20:47 +03:00
Lauri Ojansivu e8a4554789 Updated ChangeLog. 2024-08-03 01:04:49 +03:00
Lauri Ojansivu de3bc9cb4d Fix typos at attachments code. 2024-08-03 00:52:51 +03:00
Lauri Ojansivu e09f028cd1 Merge pull request #5473 from wekan/dependabot/npm_and_yarn/fast-xml-parser-4.4.1
Bump fast-xml-parser from 4.3.2 to 4.4.1
2024-08-03 00:46:38 +03:00
Lauri Ojansivu ea9f597685 Merge pull request #5476 from mfilser/activities_add_back_created_at_field
Activities, adding back "created at" field
2024-08-03 00:46:01 +03:00
Martin Filser e538fb9514 Activities, adding back "created at" field
Fixes #5459
2024-08-02 23:27:03 +02:00
dependabot[bot] 32fed3d048 Bump fast-xml-parser from 4.3.2 to 4.4.1
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.3.2 to 4.4.1.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.3.2...v4.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 21:43:29 +00:00
Lauri Ojansivu c6b6d1aa40 Updated translations. 2024-07-28 22:26:54 +03:00
Lauri Ojansivu b9615ccbad Merge pull request #5471 from wekan/dependabot/github_actions/docker/build-push-action-6.5.0
Bump docker/build-push-action from 6.4.0 to 6.5.0
2024-07-23 12:11:31 +03:00
Lauri Ojansivu 0032a91f66 Merge pull request #5470 from wekan/dependabot/github_actions/docker/login-action-3.3.0
Bump docker/login-action from 3.2.0 to 3.3.0
2024-07-23 12:11:20 +03:00
dependabot[bot] 88f6076422 Bump docker/build-push-action from 6.4.0 to 6.5.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.4.0 to 6.5.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/a254f8ca60a858f3136a2f1f23a60969f2c402dd...5176d81f87c23d6fc96624dfdbcd9f3830bbe445)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 20:53:03 +00:00
dependabot[bot] 8e11ecf799 Bump docker/login-action from 3.2.0 to 3.3.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/0d4c9c5ea7693da7b068278f7b52bda2a190a446...9780b0c442fbb1117ed29e0efdff1e18412f7567)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 20:52:59 +00:00
Lauri Ojansivu d04c5c9846 Merge pull request #5469 from wekan/dependabot/github_actions/docker/build-push-action-6.4.0
Bump docker/build-push-action from 6.3.0 to 6.4.0
2024-07-16 21:31:52 +03:00
Lauri Ojansivu e46a66904f Removed old PGP key.
Thanks to xet7 !
2024-07-16 13:56:57 +03:00
dependabot[bot] d038cb4a2d Bump docker/build-push-action from 6.3.0 to 6.4.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/1a162644f9a7e87d8f4b053101d1d9a712edc18c...a254f8ca60a858f3136a2f1f23a60969f2c402dd)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 20:34:56 +00:00
Lauri Ojansivu 78e68c7fea Merge pull request #5464 from wekan/dependabot/github_actions/docker/build-push-action-6.3.0
Bump docker/build-push-action from 6.2.0 to 6.3.0
2024-07-11 16:04:28 +03:00
dependabot[bot] 700f345576 Bump docker/build-push-action from 6.2.0 to 6.3.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/15560696de535e4014efeff63c48f16952e52dd1...1a162644f9a7e87d8f4b053101d1d9a712edc18c)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 20:16:21 +00:00
Lauri Ojansivu 22067198ab Updated ChangeLog. 2024-07-05 11:59:56 +03:00
Lauri Ojansivu 21d6dfd790 Added RepoCloud.svg .
Related https://github.com/wekan/wekan/pull/5463
2024-07-05 10:43:07 +03:00
Lauri Ojansivu e663ce038a Added RepoCloud.
Related https://github.com/wekan/wekan/pull/5463
2024-07-05 10:38:58 +03:00
Lauri Ojansivu 367b7778fd Merge pull request #5460 from wekan/dependabot/github_actions/docker/build-push-action-6.2.0
Bump docker/build-push-action from 6.1.0 to 6.2.0
2024-07-02 22:55:51 +03:00
dependabot[bot] 989e0a5326 Bump docker/build-push-action from 6.1.0 to 6.2.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/31159d49c0d4756269a0940a750801a1ea5d7003...15560696de535e4014efeff63c48f16952e52dd1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 20:21:29 +00:00
Lauri Ojansivu 13940f0663 Merge pull request #5458 from abramchikd/clean-theme
Clean theme fixes
2024-06-29 16:05:54 +03:00
Dmitrij Abramov 09e87f207c Some tweaks to clean light and clean dark themes 2024-06-28 00:38:45 +03:00
Lauri Ojansivu f9884b7782 v7.51 2024-06-27 15:16:25 +03:00
Lauri Ojansivu cca5f81c65 Updated ChangeLog. 2024-06-27 14:12:59 +03:00
Lauri Ojansivu c863428aa2 Reorganized docs. 2024-06-27 14:12:06 +03:00
Lauri Ojansivu 2104b853ef Updated ChangeLog. 2024-06-27 14:09:04 +03:00
Lauri Ojansivu 00a56f6aaa Reorganize files. 2024-06-27 14:08:24 +03:00
Lauri Ojansivu 67e7a75b9c Updated ChangeLog. 2024-06-27 14:06:57 +03:00
Lauri Ojansivu 52375df783 Reorganized docs. 2024-06-27 14:06:29 +03:00
Lauri Ojansivu 77fad0e7c6 Reorganized docs. 2024-06-27 14:04:44 +03:00
Lauri Ojansivu 802341384e Updated changelog. 2024-06-27 14:02:44 +03:00
Lauri Ojansivu 057ac4031e Reorganize docs. 2024-06-27 14:01:26 +03:00
Lauri Ojansivu ea5d0999c4 Copy Emoji page to Build from source. 2024-06-27 13:51:14 +03:00
Lauri Ojansivu 7b21650003 Updated ChangeLog. 2024-06-27 13:31:27 +03:00
Lauri Ojansivu 1cfaddff9c Reorganized docs. 2024-06-27 13:30:40 +03:00
Lauri Ojansivu 7690d91771 Updated ChangeLog. 2024-06-27 13:25:52 +03:00
Lauri Ojansivu 6b7b66801b Reorganized docs. 2024-06-27 13:25:06 +03:00
Lauri Ojansivu d671071758 Updated ChangeLog. 2024-06-27 13:21:45 +03:00
Lauri Ojansivu e9c1c620eb Reorganize docs. 2024-06-27 13:20:36 +03:00
Lauri Ojansivu b17a8757fb Updated ChangeLog. 2024-06-27 13:12:44 +03:00
Lauri Ojansivu 2b04cef50b Merge pull request #5455 from walster001/main
Fix ModernDark Cards not showing correctly.
2024-06-27 13:10:33 +03:00
Lauri Ojansivu 16060108b4 Updated ChangeLog. 2024-06-27 13:09:28 +03:00
Lauri Ojansivu 0fb2f7fdd6 Reorganize docs. 2024-06-27 13:07:52 +03:00
walster001 c002cf759e Fix ModernDark Card Alignment
Fix position from absolute to fixed, so it moves with the viewport when horizonally scrolling. 

Fix card top border due to changing position, adjust top border px to 82px
2024-06-27 18:49:01 +09:30
walster001 5fee0b05e0 Fix ModernDark Card Alignment 2024-06-27 18:39:48 +09:30
walster001 48bc176bdf Merge branch 'wekan:main' into main 2024-06-27 18:10:43 +09:30
walster001 ec56dc73c4 Merge branch 'main' of https://github.com/walster001/wekan-atlanz 2024-06-27 18:09:59 +09:30
walster001 83e9d681d7 Fix ModernDark Card Alignment
Fix cards not showing up properly in ModernDark theme, when more lists are created than will fit on a single screen, inciting a horizontal scrollbar, and then scrolling across trying to open cards.

Due to position being absolute, this then opened the card off-screen
2024-06-27 18:09:51 +09:30
Lauri Ojansivu e0b9e80698 Updated ChangeLog. 2024-06-27 11:16:53 +03:00
Lauri Ojansivu 449c02c42a Updated Snap docs from wiki. 2024-06-27 11:12:49 +03:00
Lauri Ojansivu ce89ff4833 Reorganized Docs. In Progress. 2024-06-27 11:08:43 +03:00
Lauri Ojansivu 1961e22cbd Added changes from wiki to wekan repo. 2024-06-27 10:31:35 +03:00
Lauri Ojansivu b95ee7cf4d Updated ChangeLog. 2024-06-26 18:57:10 +03:00
Lauri Ojansivu 14b2291590 Merge pull request #5452 from wekan/dependabot/github_actions/docker/build-push-action-6.1.0
Bump docker/build-push-action from 6.0.0 to 6.1.0
2024-06-25 09:13:44 +03:00
Dmitrij Abramov 954ec05d41 Clean themes tweaks 2024-06-25 01:57:31 +03:00
dependabot[bot] 4c25b40b2d Bump docker/build-push-action from 6.0.0 to 6.1.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/c382f710d39a5bb4e430307530a720f50c2d3318...31159d49c0d4756269a0940a750801a1ea5d7003)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-24 20:30:46 +00:00
Lauri Ojansivu 1792e3d884 v7.50 2024-06-22 09:12:23 +03:00
Lauri Ojansivu 3c35a6400b Updated docs for WeKan version for Windows. Part 2. 2024-06-22 08:58:18 +03:00
Lauri Ojansivu 2a4ba31a9e Updated ChangeLog. 2024-06-21 03:51:26 +03:00
Lauri Ojansivu 99a8afd6c3 Updated dependencies. 2024-06-21 03:48:52 +03:00
Lauri Ojansivu cc9ff4c8db Updated ChangeLog. 2024-06-21 03:31:52 +03:00
Lauri Ojansivu ed4189cc5e Merge pull request #5449 from abramchikd/theme-clean
Added "Clean dark" and "Clean light" themes
2024-06-21 03:08:30 +03:00
Dmitrij Abramov 6d66e60830 Fixes for clean light theme 2024-06-19 02:33:02 +03:00
Dmitrij Abramov 930f0a7f82 Added clean dark and clean light themes 2024-06-19 01:37:55 +03:00
Lauri Ojansivu 89347e2a56 Merge pull request #5446 from wekan/dependabot/github_actions/docker/build-push-action-6.0.0
Bump docker/build-push-action from 5.4.0 to 6.0.0
2024-06-18 19:55:37 +03:00
dependabot[bot] 09a08cd074 Bump docker/build-push-action from 5.4.0 to 6.0.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.4.0 to 6.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/ca052bb54ab0790a636c9b5f226502c73d547a25...c382f710d39a5bb4e430307530a720f50c2d3318)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-17 20:59:11 +00:00
Lauri Ojansivu c344474d9e Merge pull request #5443 from Hekatomb/bugfix/CardOverflow
Update cardDetails.css
2024-06-13 16:52:22 +03:00
Hekatomb d13d169768 Update cardDetails.css
Bugfix, task card may overflow below the screen when maximized, making the bottom part not viewable.

Reason: Top position is set to 97px, Height of the element is set to calc(100% - 20px).

Fix: Set the height to be lower than 100% - Top position
2024-06-13 09:45:31 +02:00
Lauri Ojansivu e3929973d1 Updated ChangeLog. 2024-06-11 02:05:57 +03:00
Lauri Ojansivu 9b428150a4 Updated docs for WeKan version for Windows.
Thanks to xet7.
2024-06-11 02:04:12 +03:00
Lauri Ojansivu 8ba565042f v7.49 2024-06-11 01:40:43 +03:00
Lauri Ojansivu 6df03294bd Updated ChangeLog. 2024-06-11 01:34:19 +03:00
Lauri Ojansivu 4a40ac3ced Merge pull request #5441 from wekan/dependabot/github_actions/docker/build-push-action-5.4.0
Bump docker/build-push-action from 5.3.0 to 5.4.0
2024-06-11 01:31:44 +03:00
dependabot[bot] 2f34d65164 Bump docker/build-push-action from 5.3.0 to 5.4.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/2cdde995de11925a030ce8070c3d77a52ffcf1c0...ca052bb54ab0790a636c9b5f226502c73d547a25)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-10 20:33:21 +00:00
Lauri Ojansivu 7c68d6a710 Updated ChangeLog. 2024-06-10 16:27:51 +03:00
Lauri Ojansivu 55fb7a8f27 Merge pull request #5440 from Hekatomb/bugfix/TeamsOrgAdminCard
Fill out Org and Team in adminReports
2024-06-10 16:19:48 +03:00
Lauri Ojansivu bb9fb1187e Updated ChangeLog. 2024-06-10 14:54:13 +03:00
Lauri Ojansivu f0170c576c Updated ChangeLog. 2024-06-10 14:52:35 +03:00
Lauri Ojansivu 02caaafc52 Merge branch 'main' of github.com:wekan/wekan 2024-06-10 14:49:51 +03:00
Lauri Ojansivu 168b17ac4e Updated ChangeLog. 2024-06-10 14:47:13 +03:00
Lauri Ojansivu e3214c874e Changed back to original icon of Edit Description.
Thanks to saschafoerster, C0rn3j and xet7 !

Fixes #5413,
related https://github.com/wekan/wekan/commit/1f2fb2ccce38e9cac348f1c459784d6e5a949ded
2024-06-10 14:40:49 +03:00
hekatomb 91444cce9b Fill out Org and Team in adminReports 2024-06-07 19:58:12 +02:00
Lauri Ojansivu c952aaadec Merge pull request #5435 from Hekatomb/bugfix/TeamsOrgStrikethrough 2024-06-07 01:11:37 +03:00
hekatomb 77ab5c1690 Bugfix: Strikethrough inactive Teams and orginizations rather than strikethrough active teams and orgs 2024-06-06 23:25:16 +02:00
Lauri Ojansivu 37857935f3 Updated ChangeLog. 2024-06-06 04:58:47 +03:00
Lauri Ojansivu e5c7650fc8 WeKan new release version number from wiki to WeKan repo docs.
Thanks to xet7 !
2024-06-06 04:55:45 +03:00
Lauri Ojansivu f42e0fe507 v7.48 2024-06-06 02:12:09 +03:00
Lauri Ojansivu 58dbd78997 Updated ChangeLog. 2024-06-06 02:07:32 +03:00
Lauri Ojansivu 04b995e77f Allow Normal user to add new swimlane, list and label.
Thanks to RyanHecht, norrig and xet7 !

Fixes #4276,
fixes #4785
2024-06-06 02:03:29 +03:00
Lauri Ojansivu 82aa3fb7ee Updated ChangeLog. 2024-06-06 01:44:56 +03:00
Lauri Ojansivu ec0e88ad2e Try to show more of title of collapsed list.
Thanks to C0rn3j and xet7 !

Related #5428
2024-06-06 01:39:57 +03:00
Lauri Ojansivu cac28fde4d Updated ChangeLog. 2024-06-04 23:45:46 +03:00
Lauri Ojansivu e65a8c9017 Add changes from wiki to docs. Part 2.
Thanks to xet7 !
2024-06-04 23:44:35 +03:00
Lauri Ojansivu 4a26f80fb1 Updated ChangeLog. 2024-06-04 23:30:57 +03:00
Lauri Ojansivu bca8a72a0f Merge branch 'main' of github.com:wekan/wekan 2024-06-04 23:28:59 +03:00
Lauri Ojansivu 13be8160d5 Add changes from wiki to docs.
Thanks to xet7 !
2024-06-04 23:27:55 +03:00
Lauri Ojansivu 8efea6c4e2 Updated ChangeLog. 2024-06-04 16:05:52 +03:00
Lauri Ojansivu 36bb5e099e Fix Admin Panel pages Organizations and Teams, where HTML Tables were broken.
Thanks to Hekatomb and xet7 !

Fixes #5429
2024-06-04 16:02:03 +03:00
Lauri Ojansivu b86a24d97a Merge pull request #5430 from wekan/dependabot/github_actions/docker/login-action-3.2.0
Bump docker/login-action from 3.1.0 to 3.2.0
2024-06-04 15:17:18 +03:00
dependabot[bot] 3febe80329 Bump docker/login-action from 3.1.0 to 3.2.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/e92390c5fb421da1463c202d546fed0ec5c39f20...0d4c9c5ea7693da7b068278f7b52bda2a190a446)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 20:32:31 +00:00
Lauri Ojansivu b11a2103a4 Updated ChangeLog. 2024-06-03 05:16:50 +03:00
Lauri Ojansivu 4a9d881e47 Updated release scripts.
Thanks to xet7 !
2024-06-03 05:14:58 +03:00
Lauri Ojansivu 8e5c6af612 v7.47 2024-06-03 05:07:30 +03:00
Lauri Ojansivu ca588a4b54 Updated translations. 2024-06-03 05:00:33 +03:00
Lauri Ojansivu 258032acb0 Updated ChangeLog. 2024-06-03 04:39:55 +03:00
Lauri Ojansivu 2c9c9c4356 Updated release scripts.
Thanks to xet7 !
2024-06-03 04:38:55 +03:00
Lauri Ojansivu 88d4e8a4d9 Updated ChangeLog. 2024-06-03 04:35:16 +03:00
Lauri Ojansivu 4e2a8735bc Updated to MongoDB 6.0.15 at Snap Candidate.
Thanks to MongoDB developers !
2024-06-03 04:33:40 +03:00
Lauri Ojansivu b72d24f6d0 Updated ChangeLog. 2024-06-03 04:30:24 +03:00
Lauri Ojansivu 1f2fb2ccce Fix Edit Description button is wildly out of place.
Thanks to C0rn3j and xet7 !

Fixes #5413
2024-06-03 04:23:09 +03:00
Lauri Ojansivu 5e2b423ef8 Only show Board name edit button to BoardAdmin.
Thanks to xet7 !
2024-06-03 04:03:31 +03:00
Lauri Ojansivu 79e2001708 Update Docker base images to Ubuntu 24.04.
Thanks to xet7 !
2024-06-03 03:06:58 +03:00
Lauri Ojansivu 2ea96518ad v7.46 2024-06-03 01:16:20 +03:00
Lauri Ojansivu 2666001226 Updated ChangeLog. 2024-05-30 23:22:48 +03:00
Lauri Ojansivu 1bd30bc121 For development, only recommend Debian 12 amd64, because Sandstorm works at Debian 12.
Sandstorm does not work at Ubuntu 24.04.

Thanks to xet7 !

Related https://github.com/sandstorm-io/sandstorm/issues/3712
2024-05-30 23:19:55 +03:00
Lauri Ojansivu d6d8144476 Updated dependencies. 2024-05-29 01:03:18 +03:00
Lauri Ojansivu 68e7818c1d Updated ChangeLog. 2024-05-29 00:58:05 +03:00
Lauri Ojansivu e0e5f4514b Merge pull request #5424 from Dexus/patch-1
Update exporter.js with fix for #5416
2024-05-28 18:04:57 +03:00
Josef Fröhle c2942fa269 Update exporter.js with fix for #5416
This should fix #5416
2024-05-28 16:42:44 +02:00
Lauri Ojansivu 6f31240c74 Updated ChangeLog. 2024-05-27 23:47:50 +03:00
Lauri Ojansivu 5124265142 Updated GitHub issue template for issue instructions to be more visible.
Related #5422
2024-05-27 14:00:49 +03:00
Lauri Ojansivu f0bd5eaca9 Updated ChangeLog. 2024-05-27 00:15:42 +03:00
Lauri Ojansivu 8589f85907 Merge pull request #5420 from mfilser/remove_second_created_at_on_activities
Remove second created at on activities
2024-05-26 23:17:34 +03:00
Martin Filser 66d739b3b1 Removed second "created at" text at activites / card comment
- the same text is already at line start, it makes no sense to print it
  again at line end
2024-05-26 22:05:51 +02:00
Lauri Ojansivu 2206e34ab6 Merge pull request #5419 from mfilser/dockerfile_production_and_dev_same_build
Dockerfile production and dev same build
2024-05-26 22:06:09 +03:00
Martin Filser cc1ca4a1bb Dockerfile for production and development same build (part 2) 2024-05-26 19:55:19 +02:00
Martin Filser c8b1ef8ea6 Dockerfile for production and development same build (part 1) 2024-05-26 19:49:31 +02:00
Lauri Ojansivu f836faad48 Merge pull request #5418 from mfilser/devcontainer_reduce_image_size_and_other_dev_updates
Devcontainer, reduce image size and other necessary changes for development
2024-05-26 00:26:45 +03:00
Lauri Ojansivu 7e27b916aa Updated ChangeLog. 2024-05-25 23:59:41 +03:00
Lauri Ojansivu ae9963c1f7 Merge pull request #5412 from e-gaulue/e-gaulue-patch-1
Remove notification while copying board
2024-05-25 22:40:58 +03:00
Martin Filser 2b4f4c8d4d .devcontainer/Dockerfile, updated RUN statements to heredoc style 2024-05-25 19:53:33 +02:00
Martin Filser 68104fe578 .devcontainer/Dockerfile, use Debian 11 because Ubuntu 21.10 can not build 2024-05-25 19:53:33 +02:00
Martin Filser 6f2c46a747 .devcontainer/Dockerfile, make is needed by "meteor npm update" 2024-05-25 19:53:30 +02:00
Martin Filser e7e1f1b667 .devcontainer/Dockerfile, don't remove ca-certificates because it's needed for "meteor npm install" 2024-05-25 19:53:25 +02:00
Martin Filser 7dc20616a7 .devcontainer/Dockerfile, don't remove curl/python3 because it's needed for "meteor npm" 2024-05-25 19:53:20 +02:00
Martin Filser b5b323000a .devcontainer/Dockerfile, reduce build a bit + image size to 3.42 GB
- on a test system it reduced from 11m36s to 9m34s
2024-05-25 19:53:07 +02:00
Martin Filser 19d204c7a8 .devcontainer/Dockerfile, 3.49 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 672c279b0a .devcontainer/Dockerfile, 4.12 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 669e31ea64 .devcontainer/Dockerfile, 4.16 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 4ab72170e3 .devcontainer/Dockerfile, 4.16 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 9ca39696b3 .devcontainer/Dockerfile, 5.64 GB image size
- first copy all files, then install to make it possible to install everything
  in one RUN section
2024-05-25 19:50:16 +02:00
Martin Filser 7c36279308 .devcontainer/Dockerfile, 5.64 GB image size 2024-05-25 19:50:16 +02:00
Martin Filser 89e5b3a979 .devcontainer/Dockerfile, 6.02 GB image size 2024-05-25 19:50:14 +02:00
Martin Filser 58782c9a89 .devcontainer/Dockerfile contained duplicated logic 2024-05-25 19:49:30 +02:00
Martin Filser c3824dcbd2 .devcontainer, added missing environments 2024-05-25 19:49:30 +02:00
Lauri Ojansivu cead2bc00f Merge pull request #5417 from LanetNetwork/fix-cards-load
fixed loading of cards if there are more than 20 of them on one swimlane
2024-05-24 17:50:24 +03:00
Dmytro Novash 0d5380466a fix cards load if cards > 20 on swimlane 2024-05-24 17:15:52 +03:00
e-gaulue 58f6acbc48 Remove notification while copying board
1. It takes too long while server stops after 2 minutes (#5371).
2. It is useless, because when you copy a board, most of the time your users don't want to be notified of every copied cards.
2024-05-15 22:17:54 +02:00
Lauri Ojansivu db73fb4e37 Updated translations. 2024-05-08 18:00:31 +03:00
Lauri Ojansivu a3d4c3d948 Merge pull request #5405 from LanetNetwork/uk_upd
Update ukrainian translation
2024-05-08 17:45:41 +03:00
Dmytro Novash f9dc5c6f80 upd 2024-05-07 18:57:48 +03:00
Dmitriy Novash 96b763fb89 Merge branch 'wekan:main' into uk_upd 2024-05-07 16:51:49 +03:00
Lauri Ojansivu 98a75305e7 Merge pull request #5404 from C0rn3j/fix-deprecated-grep
Swap deprecated `egrep` for `grep -E`
2024-05-06 17:09:58 +03:00
Lauri Ojansivu 0d8739327e Merge pull request #5403 from C0rn3j/image-optim
Optimize SVGs and PNGs to save 550KB~
2024-05-06 16:54:30 +03:00
Martin Rys 7dc4d9bb71 Swap deprecated egrep for grep -E
also remove some extra whitespace in MD doc
2024-05-06 11:19:59 +02:00
Martin Rys c814221185 Run SVG logos through svgo to reduce their filesize 2024-05-06 11:16:17 +02:00
Martin Rys f2f6b57944 Losslessly optimize PNGs (-522KB)
oxipng --zopfli --opt max
2024-05-06 11:12:54 +02:00
Lauri Ojansivu f50c2af914 v7.45 2024-05-06 01:38:35 +03:00
Lauri Ojansivu 5b7442436d Updated ChangeLog. 2024-05-06 01:33:54 +03:00
Lauri Ojansivu 9cebee7347 Fix Can't set a Due Date that has a leading zero in time, errors with invalid time.
Thanks to C0rn3j and xet7 !

Fixes #5395
2024-05-06 01:30:49 +03:00
Lauri Ojansivu f311359373 Updated ChangeLog. 2024-05-04 23:17:22 +03:00
Lauri Ojansivu 31b9970c04 Merge pull request #5401 from C0rn3j/set-silver
Allow `silver` color to be set in List and Swimlane
2024-05-04 23:14:06 +03:00
Martin Rys baf0edc51e Allow silver color to be set in List and Swimlane 2024-05-04 22:09:04 +02:00
Lauri Ojansivu 69a2a76b2e Merge pull request #5400 from C0rn3j/fix-white-list-color
Fix white List color and define Silver in CSS instead of leaving it unset
2024-05-04 23:01:05 +03:00
Martin Rys 7fd894f33d Do not leave silver color unset in Swimlane and List CSS 2024-05-04 21:59:05 +02:00
Martin Rys 3f366844e2 Fix white List color 2024-05-04 21:58:08 +02:00
Lauri Ojansivu 4156b6f932 Temporarily revert collapse per user that did not work yet.
Thanks to xet7 !

Related #5388
2024-05-04 22:57:13 +03:00
Lauri Ojansivu ed801f7082 Collapse Swimlane. In Progress.
Thanks to xet7 !

Related #5388
2024-05-04 22:50:13 +03:00
Lauri Ojansivu cedd10e067 Updated translations. 2024-05-02 00:06:30 +03:00
Lauri Ojansivu 86b756b6bc Updated ChangeLog. 2024-05-02 00:04:42 +03:00
Lauri Ojansivu 259a12acf9 Merge branch 'main' of github.com:wekan/wekan 2024-05-02 00:00:43 +03:00
Lauri Ojansivu 902f86d363 Collapse Lists to be per user, not per board. In Progress.
Related #5388

Thanks to xet7 !
2024-05-01 23:58:57 +03:00
Lauri Ojansivu d5fc75e345 Merge pull request #5392 from wekan/dependabot/github_actions/meteorengineer/setup-meteor-2
Bump meteorengineer/setup-meteor from 1 to 2
2024-04-30 17:56:10 +03:00
Lauri Ojansivu 5650bd829a Merge pull request #5393 from LanetNetwork/fix_tables
fix display of tables with a large number of rows
2024-04-30 17:55:46 +03:00
Dmitriy Novash f9ad46180e upd 2024-04-30 17:43:06 +03:00
Dmitriy Novash 6e534d7543 fix display of tables with a large number of rows 2024-04-30 15:54:28 +03:00
Dmitriy Novash 9aa56a8e42 update ukr translation 2024-04-30 15:49:48 +03:00
Dmitriy Novash 4ed67832d2 remove deprecated & invalid translation 2024-04-30 15:48:32 +03:00
dependabot[bot] 3409de9ed1 Bump meteorengineer/setup-meteor from 1 to 2
Bumps [meteorengineer/setup-meteor](https://github.com/meteorengineer/setup-meteor) from 1 to 2.
- [Release notes](https://github.com/meteorengineer/setup-meteor/releases)
- [Commits](https://github.com/meteorengineer/setup-meteor/compare/v1...v2)

---
updated-dependencies:
- dependency-name: meteorengineer/setup-meteor
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 20:50:33 +00:00
Lauri Ojansivu e73a44d15b Updated translations. 2024-04-28 16:22:55 +03:00
Lauri Ojansivu 5cf30f05fd Updated ChangeLog. 2024-04-28 16:21:49 +03:00
Lauri Ojansivu 63117e87e7 Update Docker base container to Ubuntu 24.04, and update software versions.
Thanks to developers of dependencies !
2024-04-28 16:19:14 +03:00
Lauri Ojansivu a8e520e7f0 v7.44 2024-04-26 14:35:54 +03:00
Lauri Ojansivu e14bb16d60 Updated ChangeLog. 2024-04-26 14:29:31 +03:00
Lauri Ojansivu b704d58f0f Collapse Swimlane. In Progress, does not work yet, not visible yet.
Thanks to xet7 !
2024-04-26 14:27:09 +03:00
Lauri Ojansivu 246e9a7764 Updated translations. 2024-04-26 14:23:46 +03:00
Lauri Ojansivu 1c7b63f583 Updated ChangeLog. 2024-04-26 08:00:15 +03:00
Lauri Ojansivu e6476319bc Fix board not visible.
Thanks to xet7 !
2024-04-26 07:57:16 +03:00
Lauri Ojansivu c954934b33 Updated translations. 2024-04-26 07:41:38 +03:00
Lauri Ojansivu a72a6886f6 Updated ChangeLog. 2024-04-26 07:35:15 +03:00
Lauri Ojansivu a601ba542a Collapse Lists.
Thanks to xet7 !
2024-04-26 07:33:06 +03:00
Lauri Ojansivu f22f470ba4 Updated translations. 2024-04-19 15:04:23 +03:00
Lauri Ojansivu 3faeeac126 v7.43 2024-04-18 04:53:26 +03:00
Lauri Ojansivu 40be1d416b Updated translations. 2024-04-18 04:44:10 +03:00
Lauri Ojansivu 9ef82458b7 Updated ChangeLog. 2024-04-18 04:21:38 +03:00
Lauri Ojansivu da99e363cd Updated dependencies.
Thanks to developers of dependencies !
2024-04-18 04:20:04 +03:00
Lauri Ojansivu 3110bb48fd Updated ChangeLog. 2024-04-18 03:47:22 +03:00
Lauri Ojansivu 08e2f2f273 Updated dependencies.
Thanks to developers of dependencies !
2024-04-18 03:45:48 +03:00
Lauri Ojansivu 6636d12215 Updated ChangeLog. 2024-04-18 03:30:39 +03:00
Lauri Ojansivu 5f243d173a Updated translations. 2024-04-18 03:23:07 +03:00
Lauri Ojansivu 5ea8d3a4c6 Merge pull request #5381 from tvogel/localized-timestamps
By default, use localized long date-time format
2024-04-17 22:25:00 +03:00
Tilman Vogel dad3fd22ec By default, use localized long date-time format
because ISO 8601 is not easy to the eye (at least for non-tech people).
2024-04-17 16:52:10 +02:00
Lauri Ojansivu f381402e8f Merge pull request #5380 from verdel/fix-debug-env-check
Fix DEBUG environment variable check
2024-04-17 15:40:31 +03:00
Vadim Aleksandrov f010235ff2 Fix DEBUG environment variable check 2024-04-17 14:06:15 +03:00
Lauri Ojansivu 09f6dcbde1 Updated translations. 2024-04-14 22:50:16 +03:00
Lauri Ojansivu 224b8e3492 Updated ChangeLog. 2024-04-14 22:47:25 +03:00
Martin Rys 28612bbc8a Dockerfile: Switch RUN commands to heredoc to avoid an insane amount of ANDs and escapes 2024-04-14 17:31:19 +02:00
Martin Rys dfe4f7bb56 docker-compose.yml: Remove obsolete version parameter 2024-04-14 17:24:56 +02:00
Lauri Ojansivu 3f28c0dd22 Merge pull request #5372 from wekan/dependabot/npm_and_yarn/tar-6.2.1
Bump tar from 6.2.0 to 6.2.1
2024-04-11 20:56:35 +03:00
dependabot[bot] 959dd1a95a Bump tar from 6.2.0 to 6.2.1
Bumps [tar](https://github.com/isaacs/node-tar) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.2.0...v6.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-11 12:34:10 +00:00
Lauri Ojansivu d5297cd1df Updated translations. 2024-04-11 06:41:33 +03:00
Lauri Ojansivu 95404f43b7 Updated ChangeLog. 2024-04-07 18:46:08 +03:00
Lauri Ojansivu 9838af5e56 Updated Transifex URL. 2024-04-07 18:44:43 +03:00
Lauri Ojansivu dab656f8ca Updated ChangeLog. 2024-04-07 18:35:52 +03:00
Lauri Ojansivu 802eeb1e6b Updated release script for Windows On-Premise, that is without container like Docker and Snap.
Thanks to xet7 !
2024-04-07 18:33:23 +03:00
Lauri Ojansivu 98dd28818a Updated wiki. 2024-04-07 16:49:05 +03:00
Lauri Ojansivu f705373cc4 v7.42 2024-04-03 01:20:29 +03:00
Lauri Ojansivu 5bc60a8dab Updated ChangeLog. 2024-04-03 01:17:13 +03:00
Lauri Ojansivu 1c8f783767 Updated dependencies.
Thanks to developers of dependencies !
2024-04-03 01:15:08 +03:00
Lauri Ojansivu 24d3075c85 Updated ChangeLog. 2024-04-03 01:13:20 +03:00
Lauri Ojansivu c461adff11 Fixed CRITICAL SECURITY ISSUE by updating meteor-node-stubs.
Thanks to Meteor developers !
2024-04-03 00:53:47 +03:00
Lauri Ojansivu b172f7207d Merge pull request #5363 from jghaanstra/main
Small tweaks to moderndark theme
2024-04-01 17:27:31 +03:00
Jelger Haanstra ef31fffa40 Small tweaks to moderndark theme 2024-03-28 19:27:35 +01:00
Lauri Ojansivu 426632a307 Updated translations. 2024-03-27 20:59:32 +02:00
Lauri Ojansivu 2c708b6df6 Updated translations. 2024-03-25 14:10:34 +02:00
Lauri Ojansivu b555d0ccc8 Merge pull request #5360 from dyercode/patch-1
Update README.md
2024-03-21 22:05:55 +02:00
Jon Dyer e1724c8a12 Update README.md
change link to the thing you're talking about (presumably) instead of cyclically linking to the page the link is on
2024-03-21 08:30:32 -04:00
Lauri Ojansivu cd35574c0b Merge pull request #5356 from wekan/dependabot/github_actions/docker/login-action-3.1.0
Bump docker/login-action from 3.0.0 to 3.1.0
2024-03-19 07:50:28 +02:00
Lauri Ojansivu d016cbcffc Merge pull request #5355 from wekan/dependabot/github_actions/docker/build-push-action-5.3.0
Bump docker/build-push-action from 5.2.0 to 5.3.0
2024-03-19 07:50:13 +02:00
dependabot[bot] 7e4b672888 Bump docker/login-action from 3.0.0 to 3.1.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/343f7c4344506bcbf9b4de18042ae17996df046d...e92390c5fb421da1463c202d546fed0ec5c39f20)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 20:06:55 +00:00
dependabot[bot] 06d9abf6f6 Bump docker/build-push-action from 5.2.0 to 5.3.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/af5a7ed5ba88268d5278f7203fb52cd833f66d6e...2cdde995de11925a030ce8070c3d77a52ffcf1c0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 20:06:52 +00:00
Lauri Ojansivu a1a6dae5c6 v7.41 2024-03-18 02:32:43 +02:00
Lauri Ojansivu c5f40f1be9 Updated ChangeLog. 2024-03-18 02:26:26 +02:00
Lauri Ojansivu 4358cb5e57 Merge pull request #5350 from lorodoes/main
Update mongodb-control
2024-03-18 01:46:46 +02:00
lorodoes a591bf05e0 Update mongodb-control
Missed a few mongosh lines.
2024-03-17 19:28:50 -04:00
Lauri Ojansivu 568b7538ad Merge pull request #5349 from lorodoes/main
Update mongodb-control
2024-03-18 01:06:54 +02:00
lorodoes bbd7765432 Update mongodb-control
Fixes for mongosh to allow snap packages to update to the edge/candidate version
2024-03-17 19:04:07 -04:00
Lauri Ojansivu 558024785f v7.40 2024-03-17 04:03:51 +02:00
Lauri Ojansivu 76043cc5b6 Updated ChangeLog. 2024-03-17 03:53:50 +02:00
Lauri Ojansivu 583fca1814 Fixed In RTL, hamburger margin is too much in mobile.
Thanks to mohammadZahedian and xet7 !

Fixes #5337
2024-03-17 03:49:46 +02:00
Lauri Ojansivu 806201b8cb Updated ChangeLog. 2024-03-17 03:38:26 +02:00
Lauri Ojansivu 24c89aeb64 Fixed centering of text below custom login logo.
Thanks to xet7 !
2024-03-17 03:36:05 +02:00
Lauri Ojansivu 8f0d88d9e0 v7.39 2024-03-16 15:08:24 +02:00
Lauri Ojansivu e92d8dc127 Updated ChangeLog. 2024-03-16 14:59:15 +02:00
Lauri Ojansivu 8a99e8f796 Merge pull request #5346 from kuba-orlik/patch-1
Make the contents of the cards grow to the list width
2024-03-14 20:38:18 +02:00
Kuba Orlik c0246c6834 Make the contents of the cards grow to the list width 2024-03-14 11:42:56 +01:00
Lauri Ojansivu 42ed92f346 Merge pull request #5344 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-3.0.0
Bump VeryGoodOpenSource/very_good_coverage from 2.2.0 to 3.0.0
2024-03-13 16:06:19 +02:00
Lauri Ojansivu df0bd90fae Merge pull request #5343 from wekan/dependabot/github_actions/docker/build-push-action-5.2.0
Bump docker/build-push-action from 5.1.0 to 5.2.0
2024-03-13 16:05:57 +02:00
dependabot[bot] 3453f94b43 Bump VeryGoodOpenSource/very_good_coverage from 2.2.0 to 3.0.0
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/verygoodopensource/very_good_coverage) from 2.2.0 to 3.0.0.
- [Release notes](https://github.com/verygoodopensource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/verygoodopensource/very_good_coverage/compare/v2.2.0...v3.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 20:01:56 +00:00
dependabot[bot] ca537e266d Bump docker/build-push-action from 5.1.0 to 5.2.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/4a13e500e55cf31b7a5d59a38ab2040ab0f42f56...af5a7ed5ba88268d5278f7203fb52cd833f66d6e)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-11 20:01:53 +00:00
Lauri Ojansivu 8f3c948614 Updated docs. 2024-03-11 15:53:23 +02:00
Lauri Ojansivu 059743ad34 Merge pull request #5341 from e-gaulue/e-gaulue-wiki-1
Clarify usage of api.py
2024-03-11 15:29:04 +02:00
e-gaulue 33ccf68e17 Update New-card-with-Python3-and-REST-API.md 2024-03-11 14:17:20 +01:00
e-gaulue b6f22712f9 Update New-card-with-Python3-and-REST-API.md
Clarify usage, at least for me.
2024-03-11 14:14:42 +01:00
Lauri Ojansivu 9e413b3961 Merge pull request #5340 from e-gaulue/ED1 2024-03-11 11:49:55 +02:00
Lauri Ojansivu 5dd318a481 v7.38 2024-03-10 23:47:29 +01:00
Lauri Ojansivu 1783257c0e v7.38 2024-03-10 08:42:04 +02:00
Lauri Ojansivu 966852c212 Updated ChangeLog. 2024-03-10 08:37:21 +02:00
Lauri Ojansivu 07d6c1e514 Upgraded to MongoDB 6.0.14 at Snap Candidate.
Thanks to MongoDB developers !
2024-03-10 08:35:55 +02:00
Lauri Ojansivu 09be915ea5 Updated ChangeLog. 2024-03-10 08:34:27 +02:00
Lauri Ojansivu abd3c95dfa Fixed In RTL, hamburger needs margin.
Thanks to mohammadZahedian and xet7 !

Fixes #5337
2024-03-10 08:31:33 +02:00
Lauri Ojansivu 3fa61ac23c Updated ChangeLog. 2024-03-10 08:21:10 +02:00
Lauri Ojansivu 00bbc26698 Fixed text below custom login logo not visible.
Thanks to xet7 !
2024-03-10 08:18:50 +02:00
Lauri Ojansivu 3004f54b5d Updated ChangeLog. 2024-03-08 23:14:20 +02:00
Lauri Ojansivu ef5b888779 Add info about GitHub top committers at Finland.
Thanks to xet7 !
2024-03-08 23:02:41 +02:00
Lauri Ojansivu 835e33bf09 Added script to count lines of code changed per committer email address, because GitHub removed that feature from web UI.
Thanks to bgwines and xet7 !
2024-03-08 22:57:38 +02:00
Lauri Ojansivu 8ba3a05648 Updated contributing to wiki. 2024-03-08 21:36:29 +02:00
Lauri Ojansivu 73ae73d4c3 Added docs from wekan.wiki and wekan-snap.wiki 2024-03-08 21:24:14 +02:00
Lauri Ojansivu 76175a711a Merge pull request #5336 from xator91/patch-12
Update api.py
2024-03-08 14:18:55 +02:00
Mirko Genovese 574acd6744 Update api.py
#5322 Fix error during delete.
2024-03-08 11:45:34 +01:00
Lauri Ojansivu 9e0e052bba Updated ChangeLog. 2024-03-07 20:18:51 +02:00
Lauri Ojansivu ffafb30b9b Fixed API get_all_cards doesn't return SwimlaneId. Please test.
Thanks to mohammadZahedian, xator91 and xet7.

Fixes #5319
2024-03-07 13:36:42 +02:00
Lauri Ojansivu 9c4e402e6c v7.37 2024-03-07 13:27:49 +02:00
Lauri Ojansivu f6f9dbb5e3 Updated ChangeLog. 2024-03-07 13:14:23 +02:00
Lauri Ojansivu 7beced1e68 Fixed API get swimlane cards wrong order. Please test.
Thanks to mohammadZahedian, xator91 and xet7.

Fixes #5319
2024-03-07 13:10:41 +02:00
Lauri Ojansivu c8921b77f0 v7.36 2024-03-06 12:14:54 +02:00
Lauri Ojansivu 482ce0a265 Updated ChangeLog. 2024-03-06 12:10:03 +02:00
Lauri Ojansivu c570405d02 Try to fix API get cards wrong order. Please test.
Thanks to mohammadZahedian, xator91 and xet7.

Fixes #5319
2024-03-06 12:07:18 +02:00
Lauri Ojansivu 35ed465e10 Updated ChangeLog. 2024-03-06 11:57:26 +02:00
Lauri Ojansivu 747bc4c088 Fixed Card image cover should be margin-top:6px since hamburger menu and due date at the top.
Thanks to e-gaulue and xet7 !

Fixes #5331
2024-03-06 11:54:10 +02:00
Lauri Ojansivu 7c156927e4 Updated ChangeLog. 2024-02-28 23:08:10 +02:00
Lauri Ojansivu 13f0c77fb6 Merge pull request #5326 from xator91/patch-11
Update api.py
2024-02-28 23:03:03 +02:00
Mirko Genovese 82d9f77eb3 Update api.py
Added new 4 command. 

checklistid, checklistinfo, get_list_cards_count and get_board_cards_count
2024-02-28 07:58:19 +01:00
Lauri Ojansivu 151699ceb9 v7.35 2024-02-27 14:56:48 +02:00
Lauri Ojansivu cc5d5bdd01 Updated ChangeLog. 2024-02-27 14:50:30 +02:00
Lauri Ojansivu f43dadc068 Added back Mathjax that has bug of showing math twice.
Thanks to macthecadillac, Dexus and xet7 !

Related https://github.com/wekan/wekan/commit/19703fed311c894b61e9269cc0b973d0b0275a6a#commitcomment-139091804,
opens #5117
2024-02-27 14:36:51 +02:00
Lauri Ojansivu b24694bea3 Updated translations. 2024-02-27 14:28:13 +02:00
Lauri Ojansivu f4b31aa771 v7.34 2024-02-23 22:18:24 +02:00
Lauri Ojansivu 3cd5d00b0b Updated translations. 2024-02-23 22:05:58 +02:00
Lauri Ojansivu 7112584139 v7.33 2024-02-23 08:52:59 +02:00
Lauri Ojansivu 639b9c8f56 Updated translations. 2024-02-23 08:46:56 +02:00
Lauri Ojansivu 791ebc6406 Updated translations. 2024-02-22 20:07:31 +02:00
Lauri Ojansivu 059134d3d0 Updated ChangeLog. 2024-02-22 19:44:23 +02:00
Lauri Ojansivu 3b0616c150 Updated docs for WeKan 7.32. 2024-02-22 19:39:15 +02:00
Lauri Ojansivu ad5c4fdca2 Updated ChangeLog. 2024-02-22 19:38:32 +02:00
Lauri Ojansivu b219b8fb65 Merge pull request #5321 from bentiss/fix-docs
openapi: fix breakage introduced with blank return
2024-02-22 19:35:27 +02:00
Benjamin Tissoires 73a170a388 openapi: fix breakage introduced with blank return
Introduced by commit f8ef2e33de ("cards.js Added a control to check
error if card is not updated"), a blank return was added at line 3914.

The generate_openapi script assumed a return statement always has an
argument, and this was crashing.

Fixes #5320
2024-02-22 16:31:11 +01:00
Lauri Ojansivu e55e9c73b9 v7.32 2024-02-22 16:10:40 +02:00
Lauri Ojansivu 71ed5d3427 Updated translations. 2024-02-22 16:10:17 +02:00
Lauri Ojansivu 8b7bdfe0c7 Updated translations. 2024-02-22 15:45:24 +02:00
Lauri Ojansivu ed6018fad1 Updated ChangeLog. 2024-02-22 15:34:26 +02:00
Lauri Ojansivu b5f4be36d4 Fixed Error 500 when adding user to a board and multiple same avatar icons by revert back from Meteor 2.15 to 2.14.
Thanks to xator91 and xet7 !

Fixes #5302,
fixes #5317
2024-02-22 15:19:51 +02:00
Lauri Ojansivu 5c0a46b006 Updated ChangeLog. 2024-02-22 15:07:15 +02:00
Lauri Ojansivu 54ed46447a Updated translations. 2024-02-22 14:59:48 +02:00
Lauri Ojansivu 84fe3c2f40 Merge pull request #5318 from DevOpsNB/main
Add shortcut to filter by assignees
2024-02-22 14:50:11 +02:00
nikolaj.bassauer e30329a18c Add text to new shortcut 2024-02-22 13:32:59 +01:00
nikolaj.bassauer 22b40aab5d Set Shortcut to filter assignees 2024-02-22 13:21:52 +01:00
Lauri Ojansivu c3c8b1eb70 Merge pull request #5313 from xator91/patch-10
Update api.py Deleteallcards
2024-02-22 11:37:51 +02:00
Lauri Ojansivu ce82ee8d0d Merge pull request #5312 from xator91/patch-9
cards.js Added a control to check error if card is not updated
2024-02-22 11:36:40 +02:00
Mirko Genovese 04f0967b18 Update api.py Deleteallcards
Will delete all cards from Swimlanes automatically, will retrieve automatically all list id and delete everything.
2024-02-22 07:55:09 +01:00
Mirko Genovese f8ef2e33de cards.js Added a control to check error if card is not updated 2024-02-22 07:50:21 +01:00
Lauri Ojansivu 20a8ac7c98 Updated ChangeLog. 2024-02-22 08:46:08 +02:00
Lauri Ojansivu 37e9236bde Merge pull request #5311 from xator91/patch-8
Update api.py Addchecklist with multiple items also or just title
2024-02-22 08:43:44 +02:00
Mirko Genovese fc11ff13c5 Update api.py Addchecklist command with multiple items also or just title 2024-02-22 07:22:24 +01:00
Lauri Ojansivu c92586ee64 Updated ChangeLog. 2024-02-21 17:29:50 +02:00
Lauri Ojansivu 38e2308d94 Merge pull request #5309 from xator91/patch-7
Update api.py EDITCARDCOLOR
2024-02-21 17:28:13 +02:00
Mirko Genovese 03044250a3 Update api.py EDITCARDCOLOR 2024-02-21 12:03:14 +01:00
Lauri Ojansivu ebe7ec40e4 Updated ChangeLog. 2024-02-21 11:59:20 +02:00
Lauri Ojansivu 412626052b Merge pull request #5308 from xator91/patch-6
Update api.py Add createlabel
2024-02-21 11:55:43 +02:00
Mirko Genovese 2a0af154c6 Update api.py Add createlabel 2024-02-21 08:17:38 +01:00
Lauri Ojansivu 87debbd26b Updated translations. 2024-02-19 18:20:33 +02:00
Lauri Ojansivu 10e88fccd6 v7.31 2024-02-17 18:03:09 +02:00
Lauri Ojansivu cc781c0082 Updated ChangeLog. 2024-02-16 17:16:08 +02:00
Lauri Ojansivu 5198ee997c Updated to Meteor 2.15.
Thanks to Meteor developers !
2024-02-16 17:14:34 +02:00
Lauri Ojansivu 4843d6cdc1 Updated ChangeLog. 2024-02-16 17:00:14 +02:00
Lauri Ojansivu 8ca0b2d9c3 Merge pull request #5301 from xator91/patch-4
Update api.py EDIT BOARD TITLE
2024-02-16 16:22:45 +02:00
Mirko Genovese cf589cb792 Update api.py EDIT BOARD TITLE 2024-02-16 11:29:20 +01:00
Lauri Ojansivu eda05e0157 Merge pull request #5300 from xator91/patch-3
Update boards.js - New update board title function
2024-02-16 12:01:33 +02:00
Mirko Genovese 4ae8a0308e Update boards.js - New update board title function 2024-02-16 10:50:52 +01:00
Lauri Ojansivu 88c6ce1c7e Updates. 2024-02-12 22:34:09 +02:00
Lauri Ojansivu b714e2fca0 Updated readme. 2024-02-12 22:29:53 +02:00
Lauri Ojansivu ce3a931c59 Updated ChangeLog. 2024-02-09 14:53:10 +02:00
Lauri Ojansivu 69f5d90e91 Merge pull request #5293 from xator91/patch-2
Update api.py
2024-02-09 14:45:20 +02:00
Mirko Genovese 1a6ab68752 Update api.py
Typo error on instructions
2024-02-09 08:17:59 +01:00
Lauri Ojansivu f13001e53a Updated ChangeLog. 2024-02-07 17:47:24 +02:00
Lauri Ojansivu 824b537db0 Merge pull request #5290 from xator91/patch-1
Update api.py
2024-02-07 17:44:50 +02:00
Mirko Genovese 42e4bc3105 Update api.py
Add card with label and add a label to a card
2024-02-07 16:03:03 +01:00
Lauri Ojansivu ebcedcffec Updated ChangeLog. 2024-02-07 15:56:25 +02:00
Lauri Ojansivu b8cc84261f Merge pull request #5287 from xator91/xator91-patch-2
Update api.py
2024-02-07 15:51:16 +02:00
xator91 4e2475502a Update api.py
Added getcard and cardsbyswimlane
2024-02-07 14:38:49 +01:00
Lauri Ojansivu 7dd9bcce2b Updated translations. 2024-02-07 12:15:55 +02:00
Lauri Ojansivu 620628dca3 Merge pull request #5284 from wekan/dependabot/github_actions/docker/metadata-action-5.5.1
Bump docker/metadata-action from 5.5.0 to 5.5.1
2024-02-05 22:31:17 +02:00
dependabot[bot] 5ee7d52e8c Bump docker/metadata-action from 5.5.0 to 5.5.1
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/dbef88086f6cef02e264edb7dbf63250c17cef6c...8e5442c4ef9f78752691e2d8f8d19755c6f78e81)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 20:28:06 +00:00
Lauri Ojansivu 26004b1f73 Updated ChangeLog. 2024-02-03 21:09:23 +02:00
Lauri Ojansivu 59c42bc1a3 Updated to Meteor 2.15-rc.1 and removed duplicate nodemailer package because of some errors.
Thanks to Meteor developers !
2024-02-03 21:03:34 +02:00
Lauri Ojansivu c8a7d539f3 Updated translations. 2024-02-01 13:17:45 +02:00
Lauri Ojansivu 98c86bcc0f Updated translations. 2024-01-29 21:56:38 +02:00
Lauri Ojansivu 1b138e14c3 Updated ChangeLog. 2024-01-28 14:16:20 +02:00
Lauri Ojansivu a54e52d34b Try to fix Snap.
Thanks to xet7 !
2024-01-28 14:11:38 +02:00
Lauri Ojansivu 67218fb61d Updated ChangeLog. 2024-01-28 13:39:41 +02:00
Lauri Ojansivu 4eb0085243 Release scripts: Commented out not currently in use builds of WeKan bundle.
Thanks to xet7 !
2024-01-28 13:36:50 +02:00
Lauri Ojansivu 38a8fcb69a v7.30 2024-01-28 13:33:17 +02:00
Lauri Ojansivu 64592d734c Back to MongoDB 6.
Thanks to xet7 1
2024-01-28 13:17:44 +02:00
Lauri Ojansivu abddc8a864 v7.29 2024-01-27 22:50:39 +02:00
Lauri Ojansivu 09b45aca4f Updated ChangeLog. 2024-01-27 20:44:06 +02:00
Lauri Ojansivu f624211620 Upgraded to MongoDB 7.0.5 at Snap Candidate and Docker.
Thanks to MongoDB developers !
2024-01-27 20:39:29 +02:00
Lauri Ojansivu c19cde53d6 Updated ChangeLog. 2024-01-27 20:39:07 +02:00
Lauri Ojansivu cf8694fcd1 Updated translations. 2024-01-27 20:28:44 +02:00
Lauri Ojansivu 28d640afb4 Updated to Meteor 2.14.1-beta.0 .
Thanks to Meteor developers !
2024-01-25 12:28:05 +02:00
Lauri Ojansivu 7b432078a0 Updated ChangeLog. 2024-01-23 23:36:19 +02:00
Lauri Ojansivu 19703fed31 Removed markdown-it-mathjax3.
Fixes #5117

Thanks to Dexus and xet7 !
2024-01-23 23:32:46 +02:00
Lauri Ojansivu b01e127cc3 v7.28 2024-01-23 00:51:09 +02:00
Lauri Ojansivu f0c2d81352 Updated ChangeLog. 2024-01-23 00:44:30 +02:00
Lauri Ojansivu 67896adefc Updated dependencies.
Thanks to developers of dependencies !
2024-01-23 00:42:54 +02:00
Lauri Ojansivu d1b29b6e61 Updated translations. 2024-01-23 00:36:55 +02:00
Lauri Ojansivu ef93aad659 Updated ChangeLog. 2024-01-23 00:35:31 +02:00
Lauri Ojansivu 616b433409 Updated ChangeLog. 2024-01-23 00:26:39 +02:00
Lauri Ojansivu 515d96eef0 Merge pull request #5271 from wekan/dependabot/github_actions/actions/cache-4
Bump actions/cache from 3 to 4
2024-01-23 05:46:23 +08:00
Lauri Ojansivu 85963cc58d Merge pull request #5270 from wekan/dependabot/github_actions/actions/dependency-review-action-4
Bump actions/dependency-review-action from 3 to 4
2024-01-23 05:45:56 +08:00
Lauri Ojansivu e15611a0ea Merge pull request #5265 from gustavengstrom/master
Added archive option to  of Wekan API
2024-01-23 05:45:30 +08:00
dependabot[bot] f89a2ab91d Bump actions/cache from 3 to 4
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 21:00:40 +00:00
dependabot[bot] 18d3fb75ac Bump actions/dependency-review-action from 3 to 4
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 3 to 4.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v3...v4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 21:00:32 +00:00
Gustav Engström f5bc2b08f9 Added archive option to of Wekan API 2024-01-15 12:32:24 +01:00
Lauri Ojansivu 80e5916394 Merge pull request #5263 from wekan/dependabot/github_actions/docker/metadata-action-5.5.0
Bump docker/metadata-action from 5.4.0 to 5.5.0
2024-01-08 23:50:02 +02:00
dependabot[bot] 48c47f9911 Bump docker/metadata-action from 5.4.0 to 5.5.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/9dc751fe249ad99385a2583ee0d084c400eee04e...dbef88086f6cef02e264edb7dbf63250c17cef6c)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 20:41:32 +00:00
Lauri Ojansivu c3f5849f11 Updated translations. 2024-01-02 23:02:29 +02:00
Lauri Ojansivu c73346eda0 v7.27 2024-01-02 14:59:38 +02:00
Lauri Ojansivu d976455a12 Updated ChangeLog. 2024-01-02 14:54:39 +02:00
Lauri Ojansivu f10f80f655 Fix missing maximize card.
Thanks to xet7 !
2024-01-02 14:52:13 +02:00
598 changed files with 29063 additions and 6629 deletions

No files matched your search

+101 -94
View File
@@ -1,20 +1,24 @@
FROM ubuntu:21.10
LABEL maintainer="sgr"
FROM ubuntu:24.04
LABEL maintainer="wekan"
LABEL org.opencontainers.image.ref.name="ubuntu"
LABEL org.opencontainers.image.version="24.04"
LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
# 2022-04-25:
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
# so changing to 21.10. https://github.com/wekan/wekan/issues/4488
ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python3 git ca-certificates iproute2"
ENV DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ iproute2 apt-transport-https libarchive-tools"
ENV DEV_DEPS="curl python3 ca-certificates build-essential git"
ARG DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v14.21.4 \
METEOR_RELEASE=METEOR@2.13 \
METEOR_RELEASE=METEOR@2.14 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
NPM_VERSION=6.14.17 \
FIBERS_VERSION=4.0.1 \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
@@ -28,15 +32,14 @@ ENV \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
ATTACHMENTS_UPLOAD_MIME_TYPES="" \
ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
AVATARS_UPLOAD_MIME_TYPES="" \
AVATARS_UPLOAD_MAX_SIZE=0 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
@@ -48,10 +51,12 @@ ENV \
MATOMO_SITE_ID="" \
MATOMO_DO_NOT_TRACK=true \
MATOMO_WITH_USERNAME=false \
METRICS_ALLOWED_IP_ADDRESSES="" \
BROWSER_POLICY_ENABLED=true \
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OIDC_REDIRECTION_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_B2C_ENABLED=false \
@@ -71,6 +76,9 @@ ENV \
LDAP_ENABLE=false \
LDAP_PORT=389 \
LDAP_HOST="" \
LDAP_AD_SIMPLE_AUTH="" \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_BASEDN="" \
LDAP_LOGIN_FALLBACK=false \
LDAP_RECONNECT=true \
@@ -88,8 +96,6 @@ ENV \
LDAP_ENCRYPTION=false \
LDAP_CA_CERT="" \
LDAP_REJECT_UNAUTHORIZED=false \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_USER_SEARCH_FILTER="" \
LDAP_USER_SEARCH_SCOPE="" \
LDAP_USER_SEARCH_FIELD="" \
@@ -144,69 +150,32 @@ ENV \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
DEFAULT_WAIT_SPINNER="" \
ORACLE_OIM_ENABLED=false \
WAIT_SPINNER="" \
WRITABLE_PATH=/data \
S3=""
# \
# NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------------------------------
# Install OS
RUN set -o xtrace \
&& useradd --user-group -m --system --home-dir /home/wekan wekan \
&& apt-get update \
&& apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
&& apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
# OLD:
# && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$ARCHITECTURE.tar.xz" \
# && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/SHASUMS256.txt.asc" \
# Install NodeJS
RUN set -o xtrace \
&& cd /tmp \
&& curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.xz" \
&& curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt" \
&& grep " node-$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs \
&& mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \
&& npm install -g npm@${NPM_VERSION} \
&& chown wekan:wekan --recursive /home/wekan/.config
ENV DEBIAN_FRONTEND=dialog
USER wekan
# Install Meteor
RUN set -o xtrace \
&& cd /home/wekan \
&& curl https://install.meteor.com/?release=$METEOR_VERSION --output /home/wekan/install-meteor.sh \
# Replace tar with bsdtar in the install script; https://github.com/jshimko/meteor-launchpad/issues/39
&& sed --in-place "s/tar -xzf.*/bsdtar -xf \"\$TARBALL_FILE\" -C \"\$INSTALL_TMPDIR\"/g" /home/wekan/install-meteor.sh \
&& sed --in-place 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' /home/wekan/install-meteor.sh \
&& printf "\n[-] Installing Meteor $METEOR_VERSION...\n\n" \
&& sh /home/wekan/install-meteor.sh
ENV PATH=$PATH:/home/wekan/.meteor/
USER root
RUN echo "export PATH=$PATH" >> /etc/environment
USER wekan
RUN <<EOR
echo "export PATH=$PATH" >> /etc/environment
EOR
# Copy source dir
RUN set -o xtrace \
&& mkdir -p /home/wekan/app/.meteor \
&& mkdir -p /home/wekan/app/packages
RUN <<EOR
set -o xtrace
mkdir -p /home/wekan/app/.meteor
mkdir -p /home/wekan/app/packages
EOR
COPY \
.meteor/.finished-upgraders \
@@ -231,44 +200,83 @@ COPY \
packages \
/home/wekan/app/packages/
USER root
# Install OS
RUN <<EOR
set -o xtrace
RUN set -o xtrace \
&& chown -R wekan:wekan /home/wekan/app /home/wekan/.meteor
# Add non-root user wekan
useradd --user-group --system --home-dir /home/wekan wekan
# OS dependencies
apt-get update --assume-yes
apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS} ${DEV_DEPS}
USER wekan
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
cp $(which tar) $(which tar)~
ln -sf $(which bsdtar) $(which tar)
RUN \
set -o xtrace && \
# Build app
cd /home/wekan/app && \
/home/wekan/.meteor/meteor add standard-minifier-js && \
/home/wekan/.meteor/meteor npm install && \
/home/wekan/.meteor/meteor build --directory /home/wekan/app_build
# Install NodeJS
cd /tmp
RUN \
set -o xtrace && \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w package.json npm-shrinkwrap.json && \
npm install && \
cd node_modules/fibers && \
node build.js
# Download nodejs
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz"
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt"
# Verify nodejs authenticity
grep "node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz" "SHASUMS256.txt" | shasum -a 256 -c -
rm -f "SHASUMS256.txt"
# Install Node
tar xzf "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" -C /usr/local --strip-components=1 --no-same-owner
rm "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" "SHASUMS256.txt"
ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs"
mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config"
# Install node dependencies
npm install -g npm@${NPM_VERSION}
chown --recursive wekan:wekan /home/wekan/.config
# Install Meteor
cd /home/wekan
chown --recursive wekan:wekan /home/wekan
echo "Starting meteor ${METEOR_RELEASE} installation... \n"
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
mv /root/.meteor /home/wekan/
chown --recursive wekan:wekan /home/wekan/.meteor
# sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
cd /home/wekan/.meteor
gosu wekan:wekan /home/wekan/.meteor/meteor -- help
# Build app (Development)
cd /home/wekan/app
gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js
gosu wekan:wekan /home/wekan/.meteor/meteor npm install
# Put back the original tar
mv $(which tar)~ $(which tar)
USER root
# Cleanup
RUN \
set -o xtrace && \
apt-get clean -y && \
apt-get autoremove -y && \
rm -Rf /tmp/* && \
rm -Rf /home/wekan/app_build && \
rm -Rf /var/cache/apt /var/lib/apt/lists && \
rm -Rf /var/lib/apt/lists/*
apt-get remove --purge --assume-yes ${BUILD_DEPS}
apt-get install --assume-yes --no-install-recommends build-essential
apt-get autoremove --assume-yes
apt-get clean --assume-yes
rm -Rf /tmp/*
rm -Rf /var/lib/apt/lists/*
rm -Rf /var/cache/apt
rm -Rf /var/lib/apt/lists
rm -Rf /home/wekan/app_build
mkdir /data
chown wekan --recursive /data
EOR
USER wekan
ENV PORT=3000
EXPOSE $PORT
STOPSIGNAL SIGKILL
WORKDIR /home/wekan/app
#---------------------------------------------------------------------
@@ -278,7 +286,6 @@ WORKDIR /home/wekan/app
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
#TODO:
#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
#
CMD ["/home/wekan/.meteor/meteor", "run", "--verbose", "--settings", "settings.json"]
+29 -11
View File
@@ -1,18 +1,24 @@
## Issue
<!--
Please report these elsewhere:
Please report these issues elsewhere:
- SECURITY ISSUES, PGP EMAIL: https://github.com/wekan/wekan/blob/main/SECURITY.md
- UCS: https://github.com/wekan/univention/issues
**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest WeKan ® before reporting an issue.
**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest
WeKan ® before reporting an issue, if possible.
Please search existing Open and Closed issues, most questions have already been answered.
If you can not login for any reason: https://github.com/wekan/wekan/wiki/Forgot-Password
Email settings, only SMTP MAIL_URL and MAIL_FROM are in use: https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
-->
Email settings, only SMTP MAIL_URL and MAIL_FROM are in use:
https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
### Server Setup Information
<!-- Please anonymize info, and do not any of your Wekan board URLs, passwords, API tokens etc to this public issue. -->
Please anonymize info, and do not any of your Wekan board URLs, passwords,
API tokens etc to this public issue.
* Did you test in newest Wekan?:
* Did you configure root-url correctly so Wekan cards open correctly (see https://github.com/wekan/wekan/wiki/Settings)?
* Operating System:
@@ -23,13 +29,25 @@ Email settings, only SMTP MAIL_URL and MAIL_FROM are in use: https://github.com/
* What webbrowser version are you using (Wekan should work on all modern browsers that support Javascript)?
### Problem description
<!-- Add a recorded animated gif (e.g. with https://github.com/phw/peek) about how it works currently, and screenshot mockups how it should work. -->
Add a recorded animated gif (e.g. with https://github.com/phw/peek) about
how it works currently, and screenshot mockups how it should work.
#### Reproduction Steps
#### Logs
<!-- Check Right Click>Inspect>Console in you browser - generally Chrome shows more detailed info than Firefox. -->
<!-- Please anonymize logs.
#### Logs
Check Right Click / Inspect / Console in you browser - generally Chromium
based browsers show more detailed info than Firefox based browsers.
Please anonymize logs.
Snap: sudo snap logs wekan.wekan
Docker: sudo docker logs wekan-app
If logs are very long, attach them in .zip file -->
If logs are very long, attach them in .zip file
+1 -1
View File
@@ -11,4 +11,4 @@ jobs:
- name: 'Checkout Repository'
uses: actions/checkout@v4
- name: 'Dependency Review'
uses: actions/dependency-review-action@v3
uses: actions/dependency-review-action@v4
+3 -3
View File
@@ -38,7 +38,7 @@ jobs:
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -48,14 +48,14 @@ jobs:
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@9dc751fe249ad99385a2583ee0d084c400eee04e
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56
uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
+5 -5
View File
@@ -95,7 +95,7 @@ jobs:
# CACHING
- name: Install Meteor
id: cache-meteor-install
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/.meteor
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
@@ -104,7 +104,7 @@ jobs:
- name: Cache NPM dependencies
id: cache-meteor-npm
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/.npm
key: v1-npm-${{ hashFiles('package-lock.json') }}
@@ -113,7 +113,7 @@ jobs:
- name: Cache Meteor build
id: cache-meteor-build
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
.meteor/local/resolver-result-cache.json
@@ -125,7 +125,7 @@ jobs:
v1-meteor_build_cache-
- name: Setup meteor
uses: meteorengineer/setup-meteor@v1
uses: meteorengineer/setup-meteor@v2
with:
meteor-release: '2.2'
@@ -157,7 +157,7 @@ jobs:
- name: Coverage Report
uses: VeryGoodOpenSource/very_good_coverage@v2.2.0
uses: VeryGoodOpenSource/very_good_coverage@v3.0.0
with:
path: ".coverage/lcov.info"
min_coverage: 1 # TODO add tests and increase to 95!
+3 -3
View File
@@ -1,4 +1,4 @@
accounts-base@2.2.9
accounts-base@2.2.10
accounts-oauth@1.4.3
accounts-password@2.4.0
aldeed:collection2@2.10.0
@@ -63,7 +63,7 @@ localstorage@1.2.0
logging@1.3.3
matb33:collection-hooks@1.3.0
mdg:validation-error@0.5.1
meteor@1.11.4
meteor@1.11.5
meteor-autosize@5.0.1
meteor-base@1.5.1
meteorhacks:aggregate@1.3.0
@@ -123,7 +123,7 @@ reactive-var@1.0.12
reload@1.3.1
retry@1.1.0
routepolicy@1.1.1
service-configuration@1.3.2
service-configuration@1.3.3
session@1.2.1
sha@1.0.9
shell-server@0.5.0
+600 -1
View File
@@ -2,7 +2,7 @@
Newest WeKan at these amd64 platforms:
- Linux bundle
- Windows and Linux bundle
- Snap Candidate
- Docker
- Kubernetes
@@ -15,6 +15,605 @@ Fixing other platforms In Progress.
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
# v7.55 2024-08-08 WeKan ® release
This release fixes the following bugs:
- [Fix board backgrounds not showing correctly after v7.54](https://github.com/wekan/wekan/pull/5501).
Thanks to walster001.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.54 2024-08-07 WeKan ® release
This release adds the following new features:
- [Helm Chart: Add Support for Overriding Image Registry in Airgapped Environments](https://github.com/wekan/charts/pull/35).
Thanks to geilername.
- [PWA, move to standalone (standard) to display the status bar](https://github.com/wekan/wekan/pull/5484)
Thanks to mfilser.
- [Added info how with Caddy webserver config, PWA and Android app override icons, showing toolbars, etc](https://github.com/wekan/wekan/commit/55fc342f6d90d8e30b70a8903ecead1c4370bd89).
Thanks to xet7.
and fixes the following bugs:
- [Don't set background image in .board-canvas too](https://github.com/wekan/wekan/pull/5485).
Thanks to mfilser.
- [Bugfix, variable "color" didn't exist](https://github.com/wekan/wekan/pull/5486).
Thanks to mfilser.
- [Little opacity to minicards to see the background image a little bit](https://github.com/wekan/wekan/pull/5487).
Thanks to mfilser.
- [Remove attachment storage name from attachment list](https://github.com/wekan/wekan/pull/5488).
Thanks to mfilser.
- [Attachment popup back was broken since new attachment viewer, now fixed](https://github.com/wekan/wekan/pull/5489).
Thanks to mfilser.
- [Change Meteor.user() to ReactiveCache.getCurrentUser()](https://github.com/wekan/wekan/pull/5490).
Thanks to mfilser.
- [Fix empty parentId in cards](https://github.com/wekan/wekan/pull/5491).
Thanks to mfilser.
- [Sidebar xmark icon, add padding and background color](https://github.com/wekan/wekan/pull/5492).
Thanks to mfilser.
- [Board view, first column a bit smaller to save screen space](https://github.com/wekan/wekan/pull/5493).
Thanks to mfilser.
- [Minicard, show creator, defaultValue of schema and other code is now the same](https://github.com/wekan/wekan/pull/5494).
Thanks to mfilser.
- [Editor, Bugfix, copy text is now at each editor (textarea) again](https://github.com/wekan/wekan/pull/5495).
Thanks to mfilser.
- [Bugfix, Cards Count on mobile view was missing](https://github.com/wekan/wekan/pull/5496).
Thanks to mfilser.
- [ListHeader, simpler code logic at collapsed if conditions](https://github.com/wekan/wekan/pull/5497).
Thanks to mfilser.
- [Bugfix, edit description didn't work if it was clicked](https://github.com/wekan/wekan/pull/5498).
Thanks to mfilser.
- [Fix LDAP login fails after upgrade](https://github.com/wekan/wekan/commit/a4169f3da773e4fd961acd0266260085a753cdab).
Thanks to juppees and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.53 2024-08-03 WeKan ® release
This release adds the following new features:
- [Added Dragscroll to scroll the board](https://github.com/wekan/wekan/pull/5477).
Click on an empty space in the board, hold the left mouse and move left and right
to scroll the board easily.
Thanks to mfilser.
and adds the following updates:
- [Updated release script: New install webpage location](https://github.com/wekan/wekan/commit/5e639a7c2d6dc1182ba95e44875ac8a6798a62be).
Thanks to xet7.
- [Updated dependencies](https://github.com/wekan/wekan/commit/3f9ae57144dc9befd674c784896d68b5db9df146).
Thanks to developers of dependencies.
- [Copied changes from wiki to docs](https://github.com/wekan/wekan/commit/aaca60b6760cc84b56a24fc15c93f23b4a34f06e).
Thanks to xet7.
- [Updated Snap Candidate to MongoDB 6.0.16](https://github.com/wekan/wekan/commit/1af1844f37d17f9f54ca358ccf0f44eed1dfbef4).
Thanks to MongoDB developers.
and fixes the following bugs:
- [Board Menu Popup's were opened twice because of 2 same event creation](https://github.com/wekan/wekan/pull/5478).
Thanks to mfilser.
- [Fixing of "mode is undefined" on first activity component creation](https://github.com/wekan/wekan/pull/5479).
Thanks to mfilser.
- [Changing card color now closes the popup and doesn't refresh the whole board page](https://github.com/wekan/wekan/pull/5480).
Thanks to mfilser.
- [Fix dragscroll package name](https://github.com/wekan/wekan/commit/45674806d78fddb8a3b8a75890e5059cc1a680ea).
Thanks to xet7.
- [Reducing card size in database if no planning poker was started](https://github.com/wekan/wekan/pull/5481).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.52 2024-08-03 WeKan ® release
This release adds the following new features:
- [Helm Chart: Add option to set resource limits for initContainer](https://github.com/wekan/charts/pull/33).
Thanks to mreichelt-dicos.
- [Helm Chart: Fixes for mongodb persistence. Please test is this correct](https://github.com/wekan/charts/commit/7efb071dd91d76c3971e1865fd18f9d43d8c6891).
Thanks to emoritzx.
- [Helm Chart: Added info about rarely used running WeKan at subpath](https://github.com/wekan/charts/commit/7d4176c7b328c5477c1fa29a323574aac78616a9).
Thanks to emoritzx.
and adds the following updates:
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5460),
[Part 2](https://github.com/wekan/wekan/pull/5464),
[Part 3](https://github.com/wekan/wekan/pull/5460),
[Part 4](https://github.com/wekan/wekan/pull/5469),
[Part 5](https://github.com/wekan/wekan/pull/5470),
[Part 6](https://github.com/wekan/wekan/pull/5471),
[Part 7](https://github.com/wekan/wekan/pull/5473).
Thanks to dependabot.
- Added RepoCloud SaaS.
[Part 1](https://github.com/wekan/wekan/commit/21d6dfd79090f9885635f55537bd9fa1ef8539e1),
[Part 2](https://github.com/wekan/wekan/commit/e663ce038af397f547e8823d61ce5dc2e3cea84d),
[Part 3](https://github.com/wekan/wekan.github.io/commit/e9e0550824cdda31daae42df7c497fbd037fd78f).
Thanks to RepoCloud.
- [Updated WeKan app webmanifest](https://github.com/wekan/wekan/commit/745618626535743938b9d2e8c88afe6345807a85).
Thanks to xet7.
- [Revert forking of ldapjs](https://github.com/wekan/wekan/commit/c89f3ba3da6512169e033d76377a9190b35a92d2).
Thanks to xet7.
and fixes the following bugs:
- [Fixes to Clean light and Clean dark themes](https://github.com/wekan/wekan/pull/5458).
Thanks to abramchikd.
- [Activities, adding back "created at" field](https://github.com/wekan/wekan/pull/5476).
Thanks to mfilser.
- [Fix typos at attachments code](https://github.com/wekan/wekan/commit/de3bc9cb4d20590c45ff72ef7749d830ea3fc16c).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.51 2024-06-27 WeKan ® release
This release adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/pull/5452).
Thanks to dependabot.
- Moved docs from wiki to wekan repo docs directory, organized to subdirectories. Organizing and updating in progress.
[Part 1](https://github.com/wekan/wekan/commit/1961e22cbd51e83aa131c8b092c7d43475a021eb),
[Part 2](https://github.com/wekan/wekan/commit/ce89ff48331a27ffb42d021833c78df3a462b9db),
[Part 3](https://github.com/wekan/wekan/commit/449c02c42a0183a49592ada89bdfb8f25e5db903),
[Part 4](https://github.com/wekan/wekan/commit/0fb2f7fdd6b6cb828ab4ea534204a5b834d2e19a),
[Part 5](https://github.com/wekan/wekan/commit/e9c1c620eb938349c30761497066daf41cdcfc19),
[Part 6](https://github.com/wekan/wekan/commit/6b7b66801b716e1d0bf2548b18eed4ed4e354f2d),
[Part 7](https://github.com/wekan/wekan/commit/1cfaddff9cd4fe84fb74c80d1585f2a5dd65f5ca),
[Part 8](https://github.com/wekan/wekan/commit/057ac4031eaa912b849c637e163f4dffa79a9329),
[Part 9](https://github.com/wekan/wekan/commit/52375df78380bbe3407b51dc986baaf6f31f40e4),
[Part 10](https://github.com/wekan/wekan/commit/00a56f6aaa0c2bcd24ca8829a0718b45e7cedf04),
[Part 11](https://github.com/wekan/wekan/commit/c863428aa2597457fc4931e7b1bdd75d6cc2610b).
Thanks to xet7.
and fixes the following bugs:
- [Fix ModernDark Cards not showing correctly](https://github.com/wekan/wekan/pull/5455).
Thanks to walster001.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.50 2024-06-22 WeKan ® release
This release adds the following new features:
- [Added "Clean dark" and "Clean light" themes that are more clean and modern looking](https://github.com/wekan/wekan/pull/5449).
Thanks to abramchikd.
and adds the following updates:
- Updated docs for WeKan version for Windows.
[Part 1](https://github.com/wekan/wekan/commit/9b428150a4fb9efdcb2ae9d3bb59d0da29529e69),
[Part 2](https://github.com/wekan/wekan/commit/3c35a6400b88e071a474a552ee941892522c8d59).
Thanks to xet7.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5446),
[Part 2](https://github.com/wekan/wekan/commit/99a8afd6c39591e0d85fe5f55ebc3016b9e7f011).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Task card may overflow below the screen when maximized, making the bottom part not viewable](https://github.com/wekan/wekan/pull/5443).
Thanks to Hekatomb.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.49 2024-06-11 WeKan ® release
This release adds the following updates:
- [WeKan new release version number from wiki to WeKan repo docs](https://github.com/wekan/wekan/commit/e5c7650fc8eb5c3fcc6216f12e806ceb56fd94d9).
Thanks to xet7.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5430),
[Part 2](https://github.com/wekan/wekan/pull/5441).
Thanks to dependabot.
and fixes the following bugs:
- [Bugfix: Strikethrough inactive Teams and orginizations logic was inverted](https://github.com/wekan/wekan/pull/5435).
Thanks to Hekatomb.
- [Changed back to original icon of Edit Description](https://github.com/wekan/wekan/commit/e3214c874ec9369ab6b865154f7964da8ec55f45).
Thanks to saschafoerster, C0rn3j and xet7.
- [Fill out Org and Team in adminReports](https://github.com/wekan/wekan/pull/5440).
Thanks to Hekatomb.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.48 2024-06-06 WeKan ® release
This release adds the following updates:
- [Updated release scripts](https://github.com/wekan/wekan/commit/4a9d881e47751ec49d24af5bf4fd1c5452ceb194).
Thanks to xet7.
- Add changes from wiki to docs.
[Part 1](https://github.com/wekan/wekan/commit/13be8160d5b6a894c674d04c37ff9e653e7bd4b0),
[Part 2](https://github.com/wekan/wekan/commit/e65a8c90177cd948ca8212486a365b65cd7d5372).
Thanks to xet7.
and fixes the following bugs:
- [Fix Admin Panel pages Organizations and Teams, where HTML Tables were broken](https://github.com/wekan/wekan/commit/36bb5e099ed9f1f88c0399867bd76f040467745c).
Thanks to Hekatomb and xet7.
- [Try to show more of title of collapsed list](https://github.com/wekan/wekan/commit/ec0e88ad2e914437b4767456a160f2c1138fc5f2).
Thanks to C0rn3j and xet7.
- [Allow Normal user to add new swimlane, list and label](https://github.com/wekan/wekan/commit/04b995e77fdb5abc186e02482a75aba6a5cf0759).
Thanks to RyanHecht, norrig and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.47 2024-06-03 WeKan ® release
This release adds the following updates:
- [Update Docker base images to Ubuntu 24.04](https://github.com/wekan/wekan/commit/79e2001708b5110b26cf54b15bbbf90f7977fe90).
Thanks to xet7.
- [Updated to MongoDB 6.0.15 at Snap Candidate](https://github.com/wekan/wekan/commit/4e2a8735bc2e449a2a3c949d042fb625052a1152).
Thanks to MongoDB developers.
- [Updated release scripts](https://github.com/wekan/wekan/commit/2c9c9c43561093801004f0268d58b29d9a10b570).
Thanks to xet7.
and fixes the following bugs:
- [Only show Board name edit button to BoardAdmin](https://github.com/wekan/wekan/commit/5e2b423ef87c62a70a6b08abd2f185fd560f391f).
Thanks to xet7.
- [Fix Edit Description button is wildly out of place](https://github.com/wekan/wekan/commit/1f2fb2ccce38e9cac348f1c459784d6e5a949ded).
Thanks to C0rn3j and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.46 2024-06-03 WeKan ® release
This release adds the following updates:
- [Update ukrainian translation](https://github.com/wekan/wekan/pull/5405).
Thanks to novashdima.
- [Updated GitHub issue template for issue instructions to be more visible](https://github.com/wekan/wekan/commit/5124265142c94d5044b81f81eaaa9c3bc01cef58).
Thanks to xet7.
- [For development, only recommend Debian 12 amd64, because Sandstorm works at Debian 12. Sandstorm does not work at Ubuntu 24.04](https://github.com/wekan/wekan/commit/1bd30bc12129be8cc8a633a561bb8a5be76823d7).
Thanks to xet7. Related https://github.com/sandstorm-io/sandstorm/issues/3712
and fixes the following bugs:
- [Optimize SVGs and PNGs to save 550KB](https://github.com/wekan/wekan/pull/5403).
Thanks to C0rn3j.
- [Swap deprecated egrep for grep -E](https://github.com/wekan/wekan/pull/5404).
Thanks to C0rn3j.
- [Remove notification while copying board](https://github.com/wekan/wekan/pull/5412).
Thanks to e-gaulue.
- [Fixed loading of cards if there are more than 20 of them on one swimlane](https://github.com/wekan/wekan/pull/5417).
Thanks to novashdima.
- [Devcontainer, reduce image size and other necessary changes for development](https://github.com/wekan/wekan/pull/5418).
Thanks to mfilser.
- [Dockerfile production and dev same build](https://github.com/wekan/wekan/pull/5419).
Thanks to mfilser.
- [Remove second created at on activities](https://github.com/wekan/wekan/pull/5420).
Thanks to mfilser.
- [Fix Export CSV/TSV from Board create unhandled Exception](https://github.com/wekan/wekan/pull/5424).
Thanks to Dexus.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.45 2024-05-06 WeKan ® release
This release adds the following updates:
- [Update Docker base container to Ubuntu 24.04, and update software versions](https://github.com/wekan/wekan/commit/63117e87e759af965c8eeceaaa41f52815630d20).
Thanks to developers of dependencies.
- [Updated dependencies](https://github.com/wekan/wekan/pull/5392).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Fix display of tables with a large number of rows](https://github.com/wekan/wekan/pull/5393).
Thanks to novashdima.
- [Fix white List color and define Silver in CSS instead of leaving it unset](https://github.com/wekan/wekan/pull/5400).
Thanks to C0rn3j.
- [Allow silver color to be set in List and Swimlane](https://github.com/wekan/wekan/pull/5401).
Thanks to C0rn3j.
- [Fix Can't set a Due Date that has a leading zero in time, errors with invalid time](https://github.com/wekan/wekan/commit/9cebee734740790145ca574c539ccebd067cee7e).
Thanks to C0rn3j and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.44 2024-04-26 WeKan ® release
This release adds the following new features:
- [Collapse Lists](https://github.com/wekan/wekan/commit/a601ba542aebefdfa8b5d683d22405ab3d5f8569).
Thanks to xet7.
- [Collapse Swimlanes. In Progress, does not work yet, not visible yet](https://github.com/wekan/wekan/commit b704d58f0f3cf5e7785b79d5a6c9f6c63da4159c).
Thanks to xet7.
and fixes the following bugs:
- [Fix board not visible at Collapse Lists](https://github.com/wekan/wekan/commit/e6476319bcb06cc71fa0eefa0a608ec3a7b89767).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.43 2024-04-18 WeKan ® release
This release adds the following updates:
- [Updated release script for Windows On-Premise, that is without container like Docker and Snap](https://github.com/wekan/wekan/commit/802eeb1e6bb87c45fa79298f67ff690e87f939f8).
Thanks to xet7.
- [Updated translations Transifex URL at readme](https://github.com/wekan/wekan/commit/9838af5e5630a6ef34175e110ddfb6bfc225b40c).
Thanks to xet7.
- [Improve Docker files](https://github.com/wekan/wekan/pull/5377).
Thanks to C0rn3j.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/commit/08e2f2f2731856255e0b40eb692328424efdf9ac),
[Part 2](https://github.com/wekan/wekan/commit/da99e363cd72cda7d400ce65785a6650e42c72cf).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Fix DEBUG environment variable check](https://github.com/wekan/wekan/pull/5380).
Thanks to verdel.
- [By default, use localized long date-time format](https://github.com/wekan/wekan/pull/5381).
Thanks to tvogel.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.42 2024-04-03 WeKan ® release
This release fixes the following CRITICAL SECURITY ISSUES:
- [Fixed CRITICAL SECURITY ISSUE by updating meteor-node-stubs](https://github.com/wekan/wekan/commit/c461adff11456734fcb9193b5522cc6451078732).
Thanks to Meteor developers.
and adds the following updates:
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5355),
[Part 2](https://github.com/wekan/wekan/pull/5356),
[Part 3](https://github.com/wekan/wekan/commit/1c8f783767a680758f2219d2f416ce3ae2fb0c57).
Thanks to dependabot and developers of dependencies.
- [Small tweaks to moderndark theme](https://github.com/wekan/wekan/pull/5363).
Thanks to jghaanstra.
and fixes the following bugs:
- [Fixed link at readme](https://github.com/wekan/wekan/pull/5360).
Thanks to dyercode.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.41 2024-03-18 WeKan ® release
This release fixes the following bugs:
- Fixes for mongosh to allow snap packages to update to the edge/candidate version.
[Part 1](https://github.com/wekan/wekan/pull/5349),
[Part 2](https://github.com/wekan/wekan/pull/5350).
Thanks to lorodoes.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.40 2024-03-17 WeKan ® release
This release fixes the following bugs:
- [Fixed centering of text below custom login logo](https://github.com/wekan/wekan/commit/24c89aeb64cf6266d95f42124419d4f070864631).
Thanks to xet7.
- [Fixed In RTL, hamburger margin is too much in mobile](https://github.com/wekan/wekan/commit/583fca1814d916490b04947ba8d97dd85168fb22).
Thanks to mohammadZahedian and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.39 2024-03-16 WeKan ® release
This release adds the following updates:
- Clarify usage of api.py.
[Part 1](https://github.com/wekan/wekan/pull/5341).
[Part 2](https://github.com/wekan/wekan/commit/8f3c948614df0641b0971d1882cc241587d9d3b4).
Thanks to e-gaulue and xet7.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5343),
[Part 2](https://github.com/wekan/wekan/pull/5344).
and fixes the following bugs:
- [Make the contents of the cards grow to the list width](https://github.com/wekan/wekan/pull/5346).
Thanks to kuba-orlik.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.38 2024-03-10 WeKan ® release
This release adds the following new features:
- [Added docs wikis to WeKan repo directory docs, to make possible to send PRs](https://github.com/wekan/wekan/commit/73ae73d4c38640e9daedbe8ef9e5b25b877ee804).
Thanks to e-gaulue, C0rn3j and xet7.
- [Added script to count lines of code changed per committer email address, because GitHub removed that feature from web UI](https://github.com/wekan/wekan/commit/835e33bf090022875f50916412f80b6a9b4a3b21).
Thanks to bgwines and xet7.
- [Add info about GitHub top committers at Finland](https://github.com/wekan/wekan/commit/ef5b8887799a75ab797655f39483bc08841815d2).
Thanks to xet7.
and adds the following updates:
- [Updated contributing to wiki](https://github.com/wekan/wekan/commit/8ba3a05648818f6162b2021affeb33066f91c400).
Thanks to xet7.
- [Upgraded to MongoDB 6.0.14 at Snap Candidate](https://github.com/wekan/wekan/commit/07d6c1e5148eb0392357d55d0486a9672378c16f).
Thanks to MongoDB developers.
and tried to fix the following bugs:
- [Fix error during delete](https://github.com/wekan/wekan/pull/5336).
Thanks to xator91.
- [Fixed text below custom login logo not visible](https://github.com/wekan/wekan/commit/00bbc2669814247c0ff79bd816be7bf34bcf08a2).
Thanks to xet7.
- [Fixed In RTL, hamburger needs margin](https://github.com/wekan/wekan/commit/abd3c95dfa13cd697ff2fb7e299c85287406772a).
Thanks to mohammadZahedian and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.37 2024-03-07 WeKan ® release
This release fixes the following bugs:
- [Fixed API get swimlane cards wrong order. Please test](https://github.com/wekan/wekan/commit/7beced1e683c2eb2960b0ee40d5ec927d235fa6a).
Thanks to mohammadZahedian, xator91 and xet7.
- [Fixed API get_all_cards doesn't return SwimlaneId. Please test](https://github.com/wekan/wekan/commit/ffafb30b9b394188e1b60ec836ad83f1738c266d).
Thanks to mohammadZahedian, xator91 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.36 2024-03-06 WeKan ® release
This release adds the following features:
- [api.py: checklistid, checklistinfo, get_list_cards_count and get_board_cards_count](https://github.com/wekan/wekan/pull/5326).
Thanks to xator91.
and fixes the following bugs:
- [Fixed Card image cover should be margin-top:6px since hamburger menu and due date at the top](https://github.com/wekan/wekan/commit/747bc4c08837ad9781d63b9f16b97a64b0bfe7b8).
Thanks to e-gaulue and xet7.
- [Try to fix API get cards wrong order. Please test](https://github.com/wekan/wekan/commit/c570405d0267e28f2b2644005d48fb097eac385b).
Thanks to mohammadZahedian, xator91 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.35 2024-02-27 WeKan ® release
This release adds the following features and bugs:
- [Added back Mathjax that has bug of showing math twice](https://github.com/wekan/wekan/commit/f43dadc06894d874281ec0e449dcc4c81b3c59ad).
Thanks to macthecadillac, Dexus and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.34 2024-02-23 WeKan ® release
This release adds the following updates:
- [Updated translations](https://github.com/wekan/wekan/commit/3cd5d00b0b8d74acb2cd2afbc12f5b9d7aafcbd8).
Thanks to translators.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.33 2024-02-23 WeKan ® release
This release adds the following updates:
- [Updated docs for previous version of WeKan](https://github.com/wekan/wekan/commit/3b0616c1500b5070e660d2ba00968d59600958eb).
Thanks to xet7.
and fixes the following bugs:
- [OpenAPI: Fix breakage introduced with blank return](https://github.com/wekan/wekan/pull/5321).
Thanks to bentiss.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.32 2024-02-22 WeKan ® release
This release adds the following new features:
- [api.py: Added create label](https://github.com/wekan/wekan/pull/5308).
Thanks to xator91.
- [api.py: Edit card color](https://github.com/wekan/wekan/pull/5309).
Thanks to xator91.
- [api.py: Add checklist with multiple items also or just title](https://github.com/wekan/wekan/pull/5311).
Thanks to xator91.
- [api.py: Delete all cards. Will delete all cards from Swimlanes automatically, will retrieve automatically all list id and delete everything](https://github.com/wekan/wekan/pull/5313).
Thanks to xator91.
- [cards.js: Added a control to check error if card is not updated](https://github.com/wekan/wekan/pull/5312).
Thanks to xator91.
- [Shortcut a to filter by assignees](https://github.com/wekan/wekan/pull/5318).
Thanks to DevOpsNB.
and fixes the following bugs:
- [Fixed Error 500 when adding user to a board and multiple same avatar icons by reverting back from Meteor 2.15 to 2.14](https://github.com/wekan/wekan/commit/b5f4be36d4577c391ad19c5e5dd9de3036b8998f).
Thanks to xator91, mariogalan, bbyszio, zeo101, laurentm255, johnnytolengo and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.31 2024-02-17 WeKan ® release
This release adds the following new features:
- [api.py: Added getcard and cardsbyswimlane](https://github.com/wekan/wekan/pull/5287).
Thanks to xator91.
- [api.py: Add card with label and add a label to a card](https://github.com/wekan/wekan/pull/5290).
Thanks to xator91.
- [api.py: Fix BoardID to SwimlaneID in cardsbyswimlane](https://github.com/wekan/wekan/pull/5290).
Thanks to xator91.
- [boards.js: New update board title function for API](https://github.com/wekan/wekan/pull/5300).
Thanks to xator91.
- [api.py: EDIT BOARD TITLE](https://github.com/wekan/wekan/pull/5301).
Thanks to xator91.
and adds the following updates:
- [Release scripts: Commented out not currently in use builds of WeKan bundle](https://github.com/wekan/wekan/commit/4eb0085243672071a392dc32f77dba3103c592ab).
Thanks to xet7.
- [Try to fix Snap](https://github.com/wekan/wekan/commit/a54e52d34bdab02befda7eefad46d16814d2c46e).
Thanks to xet7.
- [Updated to Meteor 2.15-rc.1 and removed duplicate nodemailer package because of some errors](https://github.com/wekan/wekan/commit/59c42bc1a3a1792a50379be2f9251fce9b45c1a3).
Thanks to Meteor developers.
- [Updated to Meteor 2.15](https://github.com/wekan/wekan/commit/5198ee997cb43b503fcb2edaf781b0521d8096cd).
Thanks to Meteor developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.30 2024-01-28 WeKan ® release
This release adds the following updates:
- [Back to MongoDB 6.0.13](https://github.com/wekan/wekan/commit/64592d734cfdbe10b48c3aa3ea74e0ba35903976).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.29 2024-01-27 WeKan ® release
This release removes the following features:
- [Removed markdown-it-mathjax3](https://github.com/wekan/wekan/commit/19703fed311c894b61e9269cc0b973d0b0275a6a).
Thanks to Dexus and xet7.
and adds the following updates:
- [Updated to Meteor 2.14.1-beta.0](https://github.com/wekan/wekan/commit/28d640afb40f4d7c9070fa514c910fbf7065a724).
Thanks to Meteor developers.
- [Updated to MongoDB 7.0.5 at Snap Candidate and Docker](https://github.com/wekan/wekan/commit/f624211620c5e42ccdd6f931ba473be62437a62c).
Thanks to MongoDB developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.28 2024-01-23 WeKan ® release
This release adds the following new features:
- [Added archive option to of Wekan API](https://github.com/wekan/wekan/pull/5265).
Thanks to gustavengstrom.
and adds the following updates:
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5270),
[Part 2](https://github.com/wekan/wekan/pull/5271),
[Part 3](https://github.com/wekan/wekan/commit/67896adefc4a12a93fed7575f621f8aa924a2ab8).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.27 2024-01-02 WeKan ® release
This release fixes the following bugs:
- [Fix missing maximize card](https://github.com/wekan/wekan/commit/f10f80f6559a6cdee020d5ca34fd5991e07617cf).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.26 2024-01-02 WeKan ® release
This release fixes the following bugs:
+3 -7
View File
@@ -27,13 +27,9 @@ CVE Hall of Fame is at https://wekan.github.io/hall-of-fame/
## Contributing to Documentation Wiki
Please clone wiki:
```
git clone https://github.com/wekan/wekan.wiki
```
Edit .md files, and add changed files in .zip attachment
directly to comment of new issue at
https://github.com/wekan/wekan/issues
Fork WeKan repo https://github.com/wekan/wekan ,
edit `docs` directory content at GitHub web interface,
and click send PR.
## Contributing code
+99 -108
View File
@@ -1,13 +1,8 @@
FROM --platform=linux/amd64 ubuntu:23.10 as wekan
LABEL maintainer="wekan" \
org.opencontainers.image.ref.name="ubuntu" \
org.opencontainers.image.version="23.10" \
org.opencontainers.image.source="https://github.com/wekan/wekan"
# 2022-09-04:
# - above "--platform=linux/amd64 ubuntu:22.04 as wekan" is needed to build Dockerfile
# correctly on Mac M1 etc, to not get this error:
# https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc
FROM ubuntu:24.04
LABEL maintainer="wekan"
LABEL org.opencontainers.image.ref.name="ubuntu"
LABEL org.opencontainers.image.version="24.04"
LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
# 2022-04-25:
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
@@ -16,19 +11,17 @@ LABEL maintainer="wekan" \
# 2021-09-18:
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
# to Quay to avoid Docker Hub rate limits.
# Set the environment variables (defaults where required)
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
# ENV BUILD_DEPS="paxctl"
ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3"
ENV \
DEBUG=false \
NODE_VERSION=v14.21.4 \
METEOR_RELEASE=METEOR@2.13.3 \
METEOR_RELEASE=METEOR@2.14 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=9.8.1 \
NPM_VERSION=6.14.17 \
FIBERS_VERSION=4.0.1 \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
@@ -165,7 +158,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
WRITABLE_PATH=/data \
S3=""
# NODE_OPTIONS="--max_old_space_size=4096" \
# NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
@@ -176,99 +169,98 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
RUN \
set -o xtrace && \
# Add non-root user wekan
useradd --user-group --system --home-dir /home/wekan wekan && \
\
# OS dependencies
apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
\
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
cp $(which tar) $(which tar)~ && \
ln -sf $(which bsdtar) $(which tar) && \
\
# Download nodejs
wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
wget https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt && \
#wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
#wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
#---------------------------------------------------------------------------------------------
\
# Verify nodejs authenticity
grep node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt | shasum -a 256 -c - && \
rm -f SHASUMS256.txt && \
#grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
#rm -f SHASUMS256.txt.asc && \
\
# Install Node
tar xvzf node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
rm node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
ln -s /opt/nodejs/bin/node /usr/bin/node && \
ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config && \
chown wekan --recursive /home/wekan/.config && \
\
#DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
#paxctl -mC `which node` && \
\
# Install Node dependencies. Python path for node-gyp.
#npm install -g npm@${NPM_VERSION} && \
\
# Change user to wekan and install meteor
cd /home/wekan/ && \
chown wekan --recursive /home/wekan && \
echo "Starting meteor ${METEOR_RELEASE} installation... \n" && \
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh && \
mv /root/.meteor /home/wekan/ && \
chown wekan --recursive /home/wekan/.meteor && \
\
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
gosu wekan:wekan /home/wekan/.meteor/meteor -- help; \
\
# Build app
cd /home/wekan/app && \
mkdir -p /home/wekan/.npm && \
chown wekan --recursive /home/wekan/.npm /home/wekan/.config /home/wekan/.meteor && \
chmod u+w *.json && \
gosu wekan:wekan meteor npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w *.json && \
gosu wekan:wekan meteor npm install && \
cd node_modules/fibers && \
node build.js && \
cd ../.. && \
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
mv /home/wekan/app_build/bundle /build && \
\
# Put back the original tar
mv $(which tar)~ $(which tar) && \
\
# Cleanup
apt-get remove --purge -y ${BUILD_DEPS} && \
apt-get autoremove -y && \
npm uninstall -g api2html &&\
rm -R /tmp/* && \
rm -R /var/lib/apt/lists/* && \
rm -R /home/wekan/.meteor && \
rm -R /home/wekan/app && \
rm -R /home/wekan/app_build && \
mkdir /data && \
chown wekan --recursive /data
#cat /home/wekan/python/esprima-python/files.txt | xargs rm -R && \
#rm -R /home/wekan/python
#rm /home/wekan/install_meteor.sh
# Install OS
RUN <<EOR
set -o xtrace
# Add non-root user wekan
useradd --user-group --system --home-dir /home/wekan wekan
# OS dependencies
apt-get update --assume-yes
apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
cp $(which tar) $(which tar)~
ln -sf $(which bsdtar) $(which tar)
# Install NodeJS
cd /tmp
# Download nodejs
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz"
wget "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt"
# Verify nodejs authenticity
grep "node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz" "SHASUMS256.txt" | shasum -a 256 -c -
rm -f "SHASUMS256.txt"
# Install Node
tar xzf "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" -C /usr/local --strip-components=1 --no-same-owner
rm "node-$NODE_VERSION-$ARCHITECTURE.tar.gz" "SHASUMS256.txt"
ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs"
mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config"
# Install node dependencies
npm install -g npm@${NPM_VERSION} --production
chown --recursive wekan:wekan /home/wekan/.config
# Install Meteor
cd /home/wekan
chown --recursive wekan:wekan /home/wekan
echo "Starting meteor ${METEOR_RELEASE} installation... \n"
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh
mv /root/.meteor /home/wekan/
chown --recursive wekan:wekan /home/wekan/.meteor
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
cd /home/wekan/.meteor
gosu wekan:wekan /home/wekan/.meteor/meteor -- help
# Build app (Production)
cd /home/wekan/app
mkdir -p /home/wekan/.npm
chown --recursive wekan:wekan /home/wekan/.npm
chmod u+w *.json
gosu wekan:wekan meteor npm install --production
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build
cd /home/wekan/app_build/bundle/programs/server/
chmod u+w *.json
gosu wekan:wekan meteor npm install --production
cd node_modules/fibers
node build.js
cd ../..
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy
mv /home/wekan/app_build/bundle /build
# Put back the original tar
mv $(which tar)~ $(which tar)
# Cleanup
apt-get remove --purge --assume-yes ${BUILD_DEPS}
npm uninstall -g api2html
apt-get autoremove --assume-yes
apt-get clean --assume-yes
rm -Rf /tmp/*
rm -Rf /var/lib/apt/lists/*
rm -Rf /var/cache/apt
rm -Rf /var/lib/apt/lists
rm -Rf /home/wekan/app_build
rm -Rf /home/wekan/app
rm -Rf /home/wekan/.meteor
mkdir /data
chown wekan --recursive /data
EOR
USER wekan
ENV PORT=8080
EXPOSE $PORT
USER wekan
STOPSIGNAL SIGKILL
WORKDIR /home/wekan/app
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
@@ -279,6 +271,5 @@ STOPSIGNAL SIGKILL
#---------------------------------------------------------------------
#
# CMD ["node", "/build/main.js"]
#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
# CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node /build/main.js"]
+2 -2
View File
@@ -12,7 +12,7 @@ https://wekan.github.io / Install WeKan ® Server
- [Quay](https://quay.io/repository/wekan/wekan)
- [Docker Hub](https://hub.docker.com/r/wekanteam/wekan)
docker-compose.yml at https://github.com/wekan/wekan
docker-compose.yml at https://github.com/wekan/wekan/blob/main/docker-compose.yml
## Standards
@@ -29,7 +29,7 @@ docker-compose.yml at https://github.com/wekan/wekan
## [Translate WeKan ® at Transifex](https://app.transifex.com/wekan/)
Translations to non-English languages are accepted only at [Transifex](https://app.transifex.com/wekan/) using webbrowser.
Translations to non-English languages are accepted only at [Transifex](https://app.transifex.com/wekan/wekan) using webbrowser.
New English strings of new features can be added as PRs to master branch file wekan/imports/i18n/data/en.i18n.json .
## [WeKan ® feature requests and bugs](https://github.com/wekan/wekan/issues)
+1 -2
View File
@@ -1,8 +1,7 @@
About money, see [CONTRIBUTING.md](CONTRIBUTING.md)
Security is very important to us. If you discover any issue regarding security, please disclose
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
the information responsibly by sending an email to support@wekan.team 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
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v7.26.0"
appVersion: "v7.55.0"
files:
userUploads:
- README.md
+355 -2
View File
@@ -37,9 +37,24 @@ If *nix: chmod +x api.py => ./api.py users
python3 api.py customfields BOARDID # Custom Fields of BOARDID
python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID
python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board
python3 api.py editcustomfield BOARDID LISTID CARDID CUSTOMFIELDID NEWCUSTOMFIELDVALUE
python3 api.py editcustomfield BOARDID LISTID CARDID CUSTOMFIELDID NEWCUSTOMFIELDVALUE # Edit Custom Field
python3 api.py listattachments BOARDID # List attachments
python3 api.py cardsbyswimlane SWIMLANEID LISTID # Retrieve cards list on a swimlane
python3 api.py getcard BOARDID LISTID CARDID # Get card info
python3 api.py addlabel BOARDID LISTID CARDID LABELID # Add label to a card
python3 api.py addcardwithlabel AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION LABELIDS # Add a card and a label
python3 api.py editboardtitle BOARDID NEWBOARDTITLE # Edit board title
python3 api.py copyboard BOARDID NEWBOARDTITLE # Copy a board
python3 api.py createlabel BOARDID LABELCOLOR LABELNAME (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Create a new label
python3 api.py editcardcolor BOARDID LISTID CARDID COLOR (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Edit card color
python3 api.py addchecklist BOARDID CARDID TITLE ITEM1 ITEM2 ITEM3 ITEM4 (You can add multiple items or just one, or also without any item, just TITLE works as well. * If items or Title contains spaces, you should add ' between them.) # Add checklist + item on a card
python3 api.py deleteallcards BOARDID SWIMLANEID ( * Be careful will delete ALL CARDS INSIDE the swimlanes automatically in every list * ) # Delete all cards on a swimlane
python3 api.py checklistid BOARDID CARDID # Retrieve Checklist ID attached to a card
python3 api.py checklistinfo BOARDID CARDID CHECKLISTID # Get checklist info
python3 api.py get_list_cards_count BOARDID LISTID # Retrieve how many cards in a list
python3 api.py get_board_cards_count BOARDID # Retrieve how many cards in a board
Admin API:
python3 api.py users # All users
python3 api.py boards # All Public Boards
@@ -179,6 +194,52 @@ if arguments == 10:
print(body.text)
# ------- ADD CUSTOM FIELD TO BOARD END -----------
if arguments == 8:
if sys.argv[1] == 'addcardwithlabel':
# ------- ADD CARD WITH LABEL START -----------
authorid = sys.argv[2]
boardid = sys.argv[3]
swimlaneid = sys.argv[4]
listid = sys.argv[5]
cardtitle = sys.argv[6]
carddescription = sys.argv[7]
labelIds = sys.argv[8] # Aggiunto labelIds
cardtolist = wekanurl + apiboards + boardid + s + l + s + listid + s + cs
# Add card
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {
'authorId': '{}'.format(authorid),
'title': '{}'.format(cardtitle),
'description': '{}'.format(carddescription),
'swimlaneId': '{}'.format(swimlaneid),
'labelIds': labelIds
}
body = requests.post(cardtolist, data=post_data, headers=headers)
print(body.text)
# If ok id card
if body.status_code == 200:
card_data = body.json()
new_card_id = card_data.get('_id')
# Updating card
if new_card_id:
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + new_card_id
put_data = {'labelIds': labelIds}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== EDIT CARD ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}', "}\n")
print(data2)
else:
print("Error obraining ID.")
else:
print("Error adding card.")
# ------- ADD CARD WITH LABEL END -----------
if arguments == 7:
if sys.argv[1] == 'addcard':
@@ -237,7 +298,53 @@ if arguments == 6:
print(data2)
# ------- EDIT CUSTOMFIELD END -----------
if arguments == 4:
if arguments == 5:
if sys.argv[1] == 'addlabel':
# ------- EDIT CARD ADD LABEL START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
labelIds = sys.argv[5]
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
print(edcard)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
put_data = {'labelIds': labelIds}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== ADD LABEL ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- EDIT CARD ADD LABEL END -----------
if sys.argv[1] == 'editcardcolor':
# ------- EDIT CARD COLOR START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
newcolor = sys.argv[5]
valid_colors = ['white', 'green', 'yellow', 'orange', 'red', 'purple', 'blue', 'sky', 'lime', 'pink', 'black',
'silver', 'peachpuff', 'crimson', 'plum', 'darkgreen', 'slateblue', 'magenta', 'gold', 'navy',
'gray', 'saddlebrown', 'paleturquoise', 'mistyrose', 'indigo']
if newcolor not in valid_colors:
print("Invalid color. Choose a color from the list.")
sys.exit(1)
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
print(edcard)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
put_data = {'color': '{}'.format(newcolor)}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== EDIT CARD COLOR ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}', "}\n")
print(data2)
# ------- EDIT CARD COLOR END -----------
if arguments >= 4:
if sys.argv[1] == 'newuser':
@@ -251,9 +358,155 @@ if arguments == 4:
print("=== CREATE NEW USER ===\n")
print(body.text)
# ------- CREATE NEW USER END -----------
if sys.argv[1] == 'getcard':
# ------- LIST OF CARD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
listone = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== INFO OF ONE LIST ===\n")
print("URL:", listone) # Stampa l'URL per debug
try:
response = requests.get(listone, headers=headers)
print("=== RESPONSE ===\n")
print("Status Code:", response.status_code) # Stampa il codice di stato per debug
if response.status_code == 200:
data2 = response.text.replace('}', "}\n")
print(data2)
else:
print(f"Error: {response.status_code}")
print(f"Response: {response.text}")
except Exception as e:
print(f"Error in the GET request: {e}")
# ------- LISTS OF CARD END -----------
if sys.argv[1] == 'createlabel':
# ------- CREATE LABEL START -----------
boardid = sys.argv[2]
labelcolor = sys.argv[3]
labelname = sys.argv[4]
label_url = wekanurl + apiboards + boardid + s + 'labels'
print(label_url)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
# Object to send
put_data = {'label': {'color': labelcolor, 'name': labelname}}
print("URL:", label_url)
print("Headers:", headers)
print("Data:", put_data)
try:
response = requests.put(label_url, json=put_data, headers=headers)
print("=== CREATE LABELS ===\n")
print("Response Status Code:", response.status_code)
print("Response Text:", response.text)
except Exception as e:
print("Error:", e)
# ------- CREATE LABEL END -----------
if sys.argv[1] == 'addchecklist':
# ------- ADD CHECKLIST START -----------
board_id = sys.argv[2]
card_id = sys.argv[3]
checklist_title = sys.argv[4]
# Aggiungi la checklist
checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists'
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
data = {'title': checklist_title}
response = requests.post(checklist_url, data=data, headers=headers)
response.raise_for_status()
result = json.loads(response.text)
checklist_id = result.get('_id')
print(f"Checklist '{checklist_title}' created. ID: {checklist_id}")
# Aggiungi gli items alla checklist
items_to_add = sys.argv[5:]
for item_title in items_to_add:
checklist_item_url = wekanurl + apiboards + board_id + s + cs + s + card_id + s + 'checklists' + s + checklist_id + '/items'
item_data = {'title': item_title}
item_response = requests.post(checklist_item_url, data=item_data, headers=headers)
item_response.raise_for_status()
item_result = json.loads(item_response.text)
checklist_item_id = item_result.get('_id')
print(f"Item '{item_title}' added. ID: {checklist_item_id}")
if sys.argv[1] == 'checklistinfo':
# ------- ADD CHECKLIST START -----------
board_id = sys.argv[2]
card_id = sys.argv[3]
checklist_id = sys.argv[4]
checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists' + s + checklist_id
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
response = requests.get(checklist_url, headers=headers)
response.raise_for_status()
checklist_info = response.json()
print("Checklist Info:")
print(checklist_info)
if arguments == 3:
if sys.argv[1] == 'editboardtitle':
# ------- EDIT BOARD TITLE START -----------
boardid = sys.argv[2]
boardtitle = sys.argv[3]
edboardtitle = wekanurl + apiboards + boardid + s + 'title'
print(edboardtitle)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'title': boardtitle}
body = requests.put(edboardtitle, json=post_data, headers=headers)
print("=== EDIT BOARD TITLE ===\n")
#body = requests.get(edboardtitle, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
if body.status_code == 200:
print("Succesfull!")
else:
print(f"Error: {body.status_code}")
print(body.text)
# ------- EDIT BOARD TITLE END -----------
if sys.argv[1] == 'copyboard':
# ------- COPY BOARD START -----------
boardid = sys.argv[2]
boardtitle = sys.argv[3]
edboardcopy = wekanurl + apiboards + boardid + s + 'copy'
print(edboardcopy)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'title': boardtitle}
body = requests.post(edboardcopy, json=post_data, headers=headers)
print("=== COPY BOARD ===\n")
#body = requests.get(edboardcopy, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
if body.status_code == 200:
print("Succesfull!")
else:
print(f"Error: {body.status_code}")
print(body.text)
# ------- COPY BOARD END -----------
if sys.argv[1] == 'createlist':
# ------- CREATE LIST START -----------
@@ -293,6 +546,90 @@ if arguments == 3:
print(data2)
# ------- INFO OF CUSTOM FIELD END -----------
if sys.argv[1] == 'cardsbyswimlane':
# ------- RETRIEVE CARDS BY SWIMLANE ID START -----------
boardid = sys.argv[2]
swimlaneid = sys.argv[3]
cardsbyswimlane = wekanurl + apiboards + boardid + s + sws + s + swimlaneid + s + cs
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== CARDS BY SWIMLANE ID ===\n")
print("URL:", cardsbyswimlane) # Debug
try:
body = requests.get(cardsbyswimlane, headers=headers)
print("Status Code:", body.status_code) # Debug
data = body.text.replace('}', "}\n")
print("Data:", data)
except Exception as e:
print("Error GET:", e)
# ------- RETRIEVE CARDS BY SWIMLANE ID END -----------
if sys.argv[1] == 'deleteallcards':
boardid = sys.argv[2]
swimlaneid = sys.argv[3]
# ------- GET SWIMLANE CARDS START -----------
get_swimlane_cards_url = wekanurl + apiboards + boardid + s + "swimlanes" + s + swimlaneid + s + "cards"
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
try:
response = requests.get(get_swimlane_cards_url, headers=headers)
response.raise_for_status()
cards_data = response.json()
# Print the details of each card
for card in cards_data:
# ------- DELETE CARD START -----------
delete_card_url = wekanurl + apiboards + boardid + s + "lists" + s + card['listId'] + s + "cards" + s + card['_id']
try:
response = requests.delete(delete_card_url, headers=headers)
if response.status_code == 404:
print(f"Card not found: {card['_id']}")
else:
response.raise_for_status()
deleted_card_data = response.json()
print(f"Card Deleted Successfully. Card ID: {deleted_card_data['_id']}")
except requests.exceptions.RequestException as e:
print(f"Error deleting card: {e}")
# ------- DELETE CARD END -----------
except requests.exceptions.RequestException as e:
print(f"Error getting swimlane cards: {e}")
sys.exit(1)
# ------- GET SWIMLANE CARDS END -----------
if sys.argv[1] == 'get_list_cards_count':
# ------- GET LIST CARDS COUNT START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
get_list_cards_count_url = wekanurl + apiboards + boardid + s + l + s + listid + s + "cards_count"
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
try:
response = requests.get(get_list_cards_count_url, headers=headers)
response.raise_for_status()
data = response.json()
print(f"List Cards Count: {data['list_cards_count']}")
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# ------- GET LIST CARDS COUNT END -----------
if sys.argv[1] == 'checklistid':
# ------- ADD CHECKLIST START -----------
board_id = sys.argv[2]
card_id = sys.argv[3]
checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists'
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
response = requests.get(checklist_url, headers=headers)
response.raise_for_status()
checklists = response.json()
print("Checklists:")
for checklist in checklists:
print(checklist)
if arguments == 2:
# ------- BOARDS LIST START -----------
@@ -364,6 +701,22 @@ if arguments == 2:
print(data2)
# ------- LISTS OF ATTACHMENTS END -----------
if sys.argv[1] == 'get_board_cards_count':
# ------- GET BOARD CARDS COUNT START -----------
boardid = sys.argv[2]
get_board_cards_count_url = wekanurl + apiboards + boardid + s + "cards_count"
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
try:
response = requests.get(get_board_cards_count_url, headers=headers)
response.raise_for_status()
data = response.json()
print(f"Board Cards Count: {data['board_cards_count']}")
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# ------- GET BOARD CARDS COUNT END -----------
if arguments == 1:
if sys.argv[1] == 'users':
+5 -7
View File
@@ -16,7 +16,6 @@ template(name="cardActivities")
+activity(activity=activityData card=card mode=mode)
template(name="editOrDeleteComment")
= ' - '
a.js-open-inlined-form {{_ "edit"}}
= ' - '
a.js-delete-comment {{_ "delete"}}
@@ -145,11 +144,10 @@ template(name="activity")
+viewer
= activity.comment.text
+commentReactions(reactions=activity.comment.reactions commentId=activity.comment._id)
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
if($eq currentUser._id activity.comment.userId)
+editOrDeleteComment
else if currentUser.isBoardAdmin
+editOrDeleteComment
if($eq currentUser._id activity.comment.userId)
+editOrDeleteComment
else if currentUser.isBoardAdmin
+editOrDeleteComment
if($eq activity.activityType 'deleteComment')
| {{{_ 'activity-deleteComment' activity.commentId}}}.
@@ -243,4 +241,4 @@ template(name="activity")
else if(currentData.timeValue)
| {{_ activity.activityType currentData.timeValue}}
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
div(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
+34 -32
View File
@@ -13,39 +13,41 @@ BlazeComponent.extendComponent({
const sidebar = Sidebar;
sidebar && sidebar.callFirstWith(null, 'resetNextPeak');
this.autorun(() => {
let mode = this.data().mode;
const capitalizedMode = Utils.capitalize(mode);
let searchId;
if (mode === 'linkedcard' || mode === 'linkedboard') {
searchId = Utils.getCurrentCard().linkedId;
mode = mode.replace('linked', '');
} else if (mode === 'card') {
searchId = Utils.getCurrentCardId();
} else {
searchId = Session.get(`current${capitalizedMode}`);
}
const limit = this.page.get() * activitiesPerPage;
const user = ReactiveCache.getCurrentUser();
const hideSystem = user ? user.hasHiddenSystemMessages() : false;
if (searchId === null) return;
this.subscribe('activities', mode, searchId, limit, hideSystem, () => {
this.loadNextPageLocked = false;
// TODO the guard can be removed as soon as the TODO above is resolved
if (!sidebar) return;
// If the sibear peak hasn't increased, that mean that there are no more
// activities, and we can stop calling new subscriptions.
// XXX This is hacky! We need to know excatly and reactively how many
// activities there are, we probably want to denormalize this number
// dirrectly into card and board documents.
const nextPeakBefore = sidebar.callFirstWith(null, 'getNextPeak');
sidebar.calculateNextPeak();
const nextPeakAfter = sidebar.callFirstWith(null, 'getNextPeak');
if (nextPeakBefore === nextPeakAfter) {
sidebar.callFirstWith(null, 'resetNextPeak');
let mode = this.data()?.mode;
if (mode) {
const capitalizedMode = Utils.capitalize(mode);
let searchId;
if (mode === 'linkedcard' || mode === 'linkedboard') {
searchId = Utils.getCurrentCard().linkedId;
mode = mode.replace('linked', '');
} else if (mode === 'card') {
searchId = Utils.getCurrentCardId();
} else {
searchId = Session.get(`current${capitalizedMode}`);
}
});
const limit = this.page.get() * activitiesPerPage;
const user = ReactiveCache.getCurrentUser();
const hideSystem = user ? user.hasHiddenSystemMessages() : false;
if (searchId === null) return;
this.subscribe('activities', mode, searchId, limit, hideSystem, () => {
this.loadNextPageLocked = false;
// TODO the guard can be removed as soon as the TODO above is resolved
if (!sidebar) return;
// If the sibear peak hasn't increased, that mean that there are no more
// activities, and we can stop calling new subscriptions.
// XXX This is hacky! We need to know excatly and reactively how many
// activities there are, we probably want to denormalize this number
// dirrectly into card and board documents.
const nextPeakBefore = sidebar.callFirstWith(null, 'getNextPeak');
sidebar.calculateNextPeak();
const nextPeakAfter = sidebar.callFirstWith(null, 'getNextPeak');
if (nextPeakBefore === nextPeakAfter) {
sidebar.callFirstWith(null, 'resetNextPeak');
}
});
}
});
},
loadNextPage() {
+1 -1
View File
@@ -18,7 +18,7 @@ template(name="boardBody")
else
.board-wrapper(class=currentBoard.colorClass)
+sidebar
.board-canvas.js-swimlanes(
.board-canvas.js-swimlanes.dragscroll(
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
+2
View File
@@ -1,5 +1,6 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
import dragscroll from '@wekanteam/dragscroll';
const subManager = new SubsManager();
const { calculateIndex } = Utils;
@@ -219,6 +220,7 @@ BlazeComponent.extendComponent({
boardComponent.openNewListForm();
}
dragscroll.reset();
Utils.setBackgroundImage();
},
File diff suppressed because it is too large. Load diff
+3 -2
View File
@@ -12,8 +12,9 @@ template(name="boardHeaderBar")
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
if currentUser.isBoardAdmin
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'}}")
-31
View File
@@ -6,37 +6,6 @@ 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'() {
Sidebar.setView('customFields');
Popup.back();
},
'click .js-open-archives'() {
Sidebar.setView('archives');
Popup.back();
},
'click .js-change-board-color': Popup.open('boardChangeColor'),
'click .js-change-language': Popup.open('changeLanguage'),
'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() {
const currentBoard = Utils.getCurrentBoard();
currentBoard.archive();
// XXX We should have some kind of notification on top of the page to
// confirm that the board was successfully archived.
FlowRouter.go('home');
}),
'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
const currentBoard = Utils.getCurrentBoard();
Popup.back();
Boards.remove(currentBoard._id);
FlowRouter.go('home');
}),
'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'),
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
'click .js-card-settings': Popup.open('boardCardSettings'),
'click .js-minicard-settings': Popup.open('boardMinicardSettings'),
});
Template.boardChangeTitlePopup.events({
submit(event, templateInstance) {
+7 -10
View File
@@ -151,8 +151,8 @@ BlazeComponent.extendComponent({
}
const currUser = ReactiveCache.getCurrentUser();
let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
if (orgIdsUserBelongs && orgIdsUserBelongs != '') {
let orgIdsUserBelongs = currUser?.orgIdsUserBelongs() || '';
if (orgIdsUserBelongs) {
let orgsIds = orgIdsUserBelongs.split(',');
// for(let i = 0; i < orgsIds.length; i++){
// query.$and[2].$or.push({'orgs.orgId': orgsIds[i]});
@@ -162,8 +162,8 @@ BlazeComponent.extendComponent({
query.$and[2].$or.push({ 'orgs.orgId': { $in: orgsIds } });
}
let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
if (teamIdsUserBelongs && teamIdsUserBelongs != '') {
let teamIdsUserBelongs = currUser?.teamIdsUserBelongs() || '';
if (teamIdsUserBelongs) {
let teamsIds = teamIdsUserBelongs.split(',');
// for(let i = 0; i < teamsIds.length; i++){
// query.$or[2].$or.push({'teams.teamId': teamsIds[i]});
@@ -199,15 +199,12 @@ BlazeComponent.extendComponent({
},
boardMembers(boardId) {
let boardMembers = [];
/* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214
const lists = ReactiveCache.getBoard(boardId)
let members = lists.members
members.forEach(member => {
boardMembers.push(member.userId);
});
*/
const boardMembers = lists?.members.map(member => member.userId);
return boardMembers;
*/
return [];
},
isStarred() {
+1 -7
View File
@@ -51,11 +51,7 @@ template(name="attachmentGallery")
.attachment-gallery
if currentUser.isAdmin
a.attachment-item.add-attachment.js-add-attachment
i.fa.fa-plus.icon
if currentUser.isNormal
if canModifyCard
a.attachment-item.add-attachment.js-add-attachment
i.fa.fa-plus.icon
@@ -121,8 +117,6 @@ template(name="attachmentActionsPopup")
| {{_ 'remove-background-image'}}
else
| {{_ 'add-background-image'}}
p.attachment-storage
| {{versions.original.storage}}
if $neq versions.original.storage "fs"
a.js-move-storage-fs
+2 -2
View File
@@ -39,7 +39,7 @@ Template.attachmentGallery.events({
'click .js-rename': Popup.open('attachmentRename'),
'click .js-confirm-delete': Popup.afterConfirm('attachmentDelete', function() {
Attachments.remove(this._id);
Popup.back(2);
Popup.back();
}),
});
@@ -501,7 +501,7 @@ BlazeComponent.extendComponent({
if (name === DOMPurify.sanitize(name)) {
Meteor.call('renameAttachment', this.data()._id, name);
}
Popup.back(2);
Popup.back();
},
}
]
+1 -1
View File
@@ -272,7 +272,7 @@
box-sizing: border-box;
top: 97px;
left: 0px;
height: calc(100% - 20px);
height: calc(100% - 100px);
width: calc(100% - 20px);
float: left;
}
+9 -23
View File
@@ -5,7 +5,7 @@ template(name="cardDetails")
+attachmentViewer
section.card-details.js-card-details(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}'): .card-details-canvas
section.card-details.js-card-details.nodragscroll(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}'): .card-details-canvas
.card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}')
+inlinedForm(classNames="js-card-details-title")
+editCardTitleForm
@@ -13,27 +13,12 @@ template(name="cardDetails")
unless isMiniScreen
unless isPopup
a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
if isAdmin
if canModifyCard
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
else
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if isNormal
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
else
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if isWorker
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
else
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if isNoComments
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
else
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if currentUser.isBoardMember
if canModifyCard
a.fa.fa-navicon.card-details-menu.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
a.fa.fa-link.card-copy-button.js-copy-link(
id="cardURL_copy"
@@ -45,7 +30,7 @@ template(name="cardDetails")
else
unless isPopup
a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
if currentUser.isBoardMember
if canModifyCard
a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
a.fa.fa-link.card-copy-mobile-button.js-copy-link(
id="cardURL_copy"
@@ -540,11 +525,12 @@ template(name="cardDetails")
a.fa.fa-times-thin.js-close-inlined-form
else
if currentBoard.allowsDescriptionText
a.js-open-inlined-form.right(title="{{_ 'edit'}}" value=title)
a.js-open-inlined-form(title="{{_ 'edit'}}" value=title)
i.fa.fa-pencil-square-o
if getDescription
+viewer
= getDescription
a.js-open-inlined-form(title="{{_ 'edit'}}" value=title)
if getDescription
+viewer
= getDescription
if (hasUnsavedValue 'cardDescription' _id)
p.quiet
| {{_ 'unsaved-description'}}
+6 -4
View File
@@ -846,13 +846,15 @@ BlazeComponent.extendComponent({
'click .js-palette-color'() {
this.currentColor.set(this.currentData().color);
},
'click .js-submit'() {
'click .js-submit'(event) {
event.preventDefault();
this.currentCard.setColor(this.currentColor.get());
Popup.close();
Popup.back();
},
'click .js-remove-color'() {
'click .js-remove-color'(event) {
event.preventDefault();
this.currentCard.setColor(null);
Popup.close();
Popup.back();
},
},
];
+1 -1
View File
@@ -22,7 +22,7 @@ template(name="checklists")
i.fa.fa-plus
template(name="checklistDetail")
.js-checklist.checklist
.js-checklist.checklist.nodragscroll
+inlinedForm(classNames="js-edit-checklist-title" checklist = checklist)
+editChecklistItemForm(checklist = checklist)
else
+1 -2
View File
@@ -37,5 +37,4 @@ template(name="cardLabelsPopup")
= name
if(isLabelSelected ../_id)
i.card-label-selectable-icon.fa.fa-check
if currentUser.isBoardAdmin
a.quiet-button.full.js-add-label {{_ 'label-create'}}
a.quiet-button.full.js-add-label {{_ 'label-create'}}
+3 -2
View File
@@ -56,10 +56,12 @@
float: right;
font-size: 18px;
padding-right: 30px;
padding-left: 5px;
}
.minicard-details-menu {
float: right;
font-size: 18px;
padding-left: 5px;
}
@media print {
.minicard-details-menu,
@@ -99,7 +101,7 @@
background-size: contain;
height: 145px;
user-select: none;
margin: -6px -8px 6px -8px;
margin: 6px -8px 6px -8px;
border-radius: top 2px;
}
.minicard .minicard-labels {
@@ -173,7 +175,6 @@
.minicard .minicard-title .viewer {
display: block;
word-wrap: break-word;
max-width: 230px;
}
}
.minicard .dates {
+4 -12
View File
@@ -1,16 +1,9 @@
template(name="minicard")
.minicard(
.minicard.nodragscroll(
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
if currentUser.isAdmin
if isTouchScreenOrShowDesktopDragHandles
a.fa.fa-navicon.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
.handle
.fa.fa-arrows
else
a.fa.fa-navicon.minicard-details-menu.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
if currentUser.isNormal
if canModifyCard
if isTouchScreenOrShowDesktopDragHandles
a.fa.fa-navicon.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
.handle
@@ -142,7 +135,7 @@ template(name="minicard")
+userAvatar(userId=this.userId noRemove=true)
.badges
unless currentUser.isNoComments
if canModifyCard
if comments.length
.badge(title="{{_ 'card-comments-title' comments.length }}")
span.badge-icon.fa.fa-comment-o.badge-comment.badge-text
@@ -197,12 +190,11 @@ template(name="editCardSortOrderPopup")
template(name="minicardDetailsActionsPopup")
ul.pop-over-list
if currentUser.isBoardAdmin
if canModifyCard
li
a.js-move-card
i.fa.fa-arrow-right
| {{_ 'moveCardPopup-title'}}
unless currentUser.isWorker
li
a.js-copy-card
i.fa.fa-copy
+1 -5
View File
@@ -42,11 +42,7 @@ BlazeComponent.extendComponent({
const board = this.data().board();
let ret = false;
if (board) {
ret =
board.allowsCreatorOnMinicard === null ||
board.allowsCreatorOnMinicard === undefined ||
board.allowsCreatorOnMinicard
;
ret = board.allowsCreatorOnMinicard ?? false;
}
return ret;
},
+36 -12
View File
@@ -7,17 +7,11 @@
border-left: 1px solid #ccc;
padding: 0;
float: left;
min-width: 100px; /* TODO(mark-i-m): hardcoded? */
/*max-width: 270px;*/
/* Reverted incomplete change list width: */
/* https://github.com/wekan/wekan/issues/4558 */
/* Orinal width: 270px. Changes not saved yet: */
/*resize: both; - List width and height resizeable */
/* overflow: auto; - List width and height resizeable */
}
[id^="swimlane-"] .list:first-child {
min-width: 20px;
}
.list:first-child {
min-width: 20px;
margin-left: 5px;
border-left: none;
}
.card-details + .list {
@@ -48,7 +42,7 @@
}
.list-header-add {
flex: 0 0 auto;
padding: 20px 12px 4px;
padding: 12px;
position: relative;
min-height: 20px;
}
@@ -81,6 +75,20 @@
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
}
.list-rotated {
width: 10px;
height: 250px;
margin-top: -90px;
margin-left: -110px;
margin-right: 0;
transform: rotate(90deg);
position: relative;
text-overflow: ellipsis;
white-space: nowrap;
}
.list-header .list-rotated {
}
.list-header .list-header-watch-icon {
padding-left: 10px;
@@ -99,6 +107,23 @@
color: #a6a6a6;
margin-right: 15px;
}
.list-header .list-header-collapse-right {
color: #a6a6a6;
}
.list-header .list-header-collapse-left {
color: #a6a6a6;
margin-right: 15px;
}
.list-header .list-header-uncollapse-left {
color: #a6a6a6;
}
.list-header .list-header-uncollapse-right {
color: #a6a6a6;
}
.list-header .list-header-collapse {
color: #a6a6a6;
margin-right: 15px;
}
.list-header .highlight {
color: #ce1414;
}
@@ -297,7 +322,6 @@
}
.list-header-white {
border-bottom: 6px solid #fff;
border: 1px solid #eee;
}
.list-header-green {
border-bottom: 6px solid #3cb500;
@@ -330,7 +354,7 @@
border-bottom: 6px solid #51e898;
}
.list-header-silver {
border-bottom: 6px solid unset;
border-bottom: 6px solid #e4e4e4;
}
.list-header-peachpuff {
border-bottom: 6px solid #ffdab9;
+2 -1
View File
@@ -1,6 +1,7 @@
template(name='list')
.list.js-list(id="js-list-{{_id}}"
style="width:{{listWidth}}px;")
style="{{#unless collapsed}}width:{{listWidth}}px;{{/unless}}"
class="{{#if collapsed}}list-collapsed{{/if}}")
+listHeader
+listBody
+1 -1
View File
@@ -196,7 +196,7 @@ BlazeComponent.extendComponent({
},
listWidth() {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
const list = Template.currentData();
return user.getListWidth(list.boardId, list._id);
},
+32 -31
View File
@@ -1,37 +1,38 @@
template(name="listBody")
.list-body
.minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}")
if cards.length
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
ul.sidebar-list
each customFieldsSum
li
+viewer
= name
if $eq customFieldsSum.type "number"
unless collapsed
.list-body
.minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}")
if cards.length
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
ul.sidebar-list
each customFieldsSum
li
+viewer
= value
if $eq customFieldsSum.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(value)
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
if MultiSelection.isActive
.materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection(
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
if (showSpinner (idOrNull ../../_id))
+spinnerList
= name
if $eq customFieldsSum.type "number"
+viewer
= value
if $eq customFieldsSum.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(value)
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
if MultiSelection.isActive
.materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection(
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
if (showSpinner (idOrNull ../../_id))
+spinnerList
if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
else
a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}")
i.fa.fa-plus
if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
else
a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}")
i.fa.fa-plus
template(name="spinnerList")
.sk-spinner.sk-spinner-list(
+49 -24
View File
@@ -1,5 +1,5 @@
template(name="listHeader")
.list-header.js-list-header(
.list-header.js-list-header.nodragscroll(
class="{{#if limitToShowCardsCount}}list-header-card-count{{/if}}"
class=colorClass)
+inlinedForm
@@ -8,19 +8,40 @@ template(name="listHeader")
if isMiniScreen
if currentList
a.list-header-left-icon.fa.fa-angle-left.js-unselect-list
h2.list-header-name(
title="{{ moment modifiedAt 'LLL' }}"
class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}")
+viewer
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
if showCardsCountForList cards.length
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}}
else
if collapsed
a.js-collapse(title="{{_ 'uncollapse'}}")
i.fa.fa-arrow-left.list-header-uncollapse-left
i.fa.fa-arrow-right.list-header-uncollapse-right
if showCardsCountForList cards.length
br
span.cardCount {{cardsCount}}
if isMiniScreen
h2.list-header-name(
title="{{ moment modifiedAt 'LLL' }}"
class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}")
+viewer
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
if showCardsCountForList cards.length
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}}
else
div(class="{{#if collapsed}}list-rotated{{/if}}")
h2.list-header-name(
title="{{ moment modifiedAt 'LLL' }}"
class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}")
+viewer
= title
if wipLimit.enabled
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
unless collapsed
if showCardsCountForList cards.length
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}}
if isMiniScreen
if currentList
if isWatching
@@ -36,16 +57,20 @@ template(name="listHeader")
else if currentUser.isBoardMember
if isWatching
i.list-header-watch-icon.fa.fa-eye
div.list-header-menu
unless currentUser.isCommentOnly
//if isBoardAdmin
// a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}")
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
if currentUser.isBoardAdmin
if isTouchScreenOrShowDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
unless collapsed
div.list-header-menu
unless currentUser.isCommentOnly
//if isBoardAdmin
// a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}")
a.js-collapse(title="{{_ 'collapse'}}")
i.fa.fa-arrow-right.list-header-collapse-right
i.fa.fa-arrow-left.list-header-collapse-left
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
if currentUser.isBoardAdmin
if isTouchScreenOrShowDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
.list-composer
+16 -1
View File
@@ -31,6 +31,17 @@ BlazeComponent.extendComponent({
return !status;
}
},
collapsed(check = undefined) {
const list = Template.currentData();
const status = list.isCollapsed();
if (check === undefined) {
// just check
return status;
} else {
list.collapse(!status);
return !status;
}
},
editTitle(event) {
event.preventDefault();
const newTitle = this.childComponents('inlinedForm')[0]
@@ -104,6 +115,10 @@ BlazeComponent.extendComponent({
event.preventDefault();
this.starred(!this.starred());
},
'click .js-collapse'(event) {
event.preventDefault();
this.collapsed(!this.collapsed());
},
'click .js-open-list-menu': Popup.open('listAction'),
'click .js-add-card.list-header-plus-top'(event) {
const listDom = $(event.target).parents(
@@ -347,7 +362,7 @@ BlazeComponent.extendComponent({
listWidthValue() {
const list = Template.currentData();
const board = list.boardId;
return Meteor.user().getListWidth(board, list._id);
return ReactiveCache.getCurrentUser().getListWidth(board, list._id);
},
events() {
+4 -4
View File
@@ -2,15 +2,15 @@
.inlined-form a.fa.fa-brands.fa-markdown {
float: right;
position: absolute;
top: -20px;
top: -10px;
right: 60px;
}
.new-comment a.fa.fa-copy,
.inlined-form a.fa.fa-copy {
float: right;
position: absolute;
top: -20px;
right: 6px;
position: relative;
top: -10px;
right: 5px;
}
.js-inlined-form.viewer.btn-sm {
position: absolute;
+1
View File
@@ -470,6 +470,7 @@ a:not(.disabled).is-active i.fa {
.select-authentication {
width: 100%;
}
.textBelowCustomLoginLogo,
.auth-layout {
display: flex;
flex-direction: column;
+7 -4
View File
@@ -37,10 +37,13 @@ template(name="userFormsLayout")
else
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
br
if currentSetting.textBelowCustomLoginLogo
+viewer
| {{currentSetting.textBelowCustomLoginLogo}}
br
if currentSetting.textBelowCustomLoginLogo
hr
section.textBelowCustomLoginLogo
+viewer
| {{currentSetting.textBelowCustomLoginLogo}}
hr
section.auth-layout
section.auth-dialog
if isLoading
+loader
+63 -54
View File
@@ -58,18 +58,20 @@ template(name="rulesReport")
h1 {{_ 'rulesReportTitle'}}
if resultsCount
table
tr
th Rule Title
th Board Title
th actionType
th activityType
thead
tr
th Rule Title
th Board Title
th actionType
th activityType
each rule in results
tr
td {{ rule.title }}
td {{ rule.boardTitle }}
td {{ rule.action.actionType }}
td {{ rule.trigger.activityType }}
tbody
tr
td {{ rule.title }}
td {{ rule.boardTitle }}
td {{ rule.action.actionType }}
td {{ rule.trigger.activityType }}
else
div {{_ 'no-results' }}
@@ -77,22 +79,24 @@ template(name="filesReport")
h1 {{_ 'filesReportTitle'}}
if resultsCount
table
tr
th Filename
th.right Size (kB)
th MIME Type
th Attachment ID
th Board ID
th Card ID
thead
tr
th Filename
th.right Size (kB)
th MIME Type
th Attachment ID
th Board ID
th Card ID
each att in results
tr
td {{ att.name }}
td.right {{ fileSize att.size }}
td {{ att.type }}
td {{ att._id }}
td {{ att.meta.boardId }}
td {{ att.meta.cardId }}
tbody
tr
td {{ att.name }}
td.right {{ fileSize att.size }}
td {{ att.type }}
td {{ att._id }}
td {{ att.meta.boardId }}
td {{ att.meta.cardId }}
else
div {{_ 'no-results' }}
@@ -100,22 +104,24 @@ template(name="cardsReport")
h1 {{_ 'cardsReportTitle'}}
if resultsCount
table.table
tr
th Card Title
th Board
th Swimlane
th List
th Members
th Assignees
thead
tr
th Card Title
th Board
th Swimlane
th List
th Members
th Assignees
each card in results
tr
td {{abbreviate card.title }}
td {{abbreviate card.board.title }}
td {{abbreviate card.swimlane.title }}
td {{abbreviate card.list.title }}
td {{userNames card.members }}
td {{userNames card.assignees }}
tbody
tr
td {{abbreviate card.title }}
td {{abbreviate card.board.title }}
td {{abbreviate card.swimlane.title }}
td {{abbreviate card.list.title }}
td {{userNames card.members }}
td {{userNames card.assignees }}
else
div {{_ 'no-results' }}
@@ -123,22 +129,25 @@ template(name="boardsReport")
h1 {{_ 'boardsReportTitle'}}
if resultsCount
table.table
tr
th Title
th Id
th Permission
th Archived?
th Members
th Organizations
th Teams
each board in results
thead
tr
td {{abbreviate board.title }}
td {{abbreviate board._id }}
td {{ board.permission }}
td
= yesOrNo(board.archived)
td {{userNames board.members }}
th Title
th Id
th Permission
th Archived?
th Members
th Organizations
th Teams
each board in results
tbody
tr
td {{abbreviate board.title }}
td {{abbreviate board._id }}
td {{ board.permission }}
td
= yesOrNo(board.archived)
td {{userNames board.members }}
td {{orgs board.orgs }}
td {{teams board.teams }}
else
div {{_ 'no-results' }}
@@ -170,8 +170,27 @@ class AdminReport extends BlazeComponent {
.join(", ");
return ret;
}
teams(memberTeams) {
const ret = (memberTeams || [])
.map(_memberTeam => {
const _ret = ReactiveCache.getTeam(_memberTeam.teamId)?.teamDisplayName || _memberTeam.teamId;
return _ret;
})
.join(", ");
return ret;
}
orgs(orgs) {
const ret = (orgs || [])
.map(_orgs => {
const _ret = ReactiveCache.getOrg(_orgs.orgId)?.orgDisplayName || _orgs.orgId;
return _ret;
})
.join(", ");
return ret;
}
}.register('boardsReport'));
(class extends AdminReport {
collection = Cards;
+9 -3
View File
@@ -73,7 +73,7 @@ template(name="people")
template(name="orgGeneral")
table
tbody
thead
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
@@ -84,12 +84,14 @@ template(name="orgGeneral")
th {{_ 'active'}}
th
+newOrgRow
tbody
tr
each org in orgList
+orgRow(orgId=org._id)
template(name="teamGeneral")
table
tbody
thead
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
@@ -99,6 +101,8 @@ template(name="teamGeneral")
th {{_ 'active'}}
th
+newTeamRow
tbody
tr
each team in teamList
+teamRow(teamId=team._id)
@@ -106,7 +110,7 @@ template(name="peopleGeneral")
#divAddOrRemoveTeamContainer
+modifyTeamsUsers
table
tbody
thead
tr
th
+selectAllUser
@@ -124,6 +128,8 @@ template(name="peopleGeneral")
th {{_ 'teams'}}
th
+newUserRow
tbody
tr
each user in peopleList
+peopleRow(userId=user._id)
@@ -7,11 +7,13 @@
display: -moz-flex;
display: -ms-flexbox;
display: flex;
height: 100%;
}
.setting-content {
color: #727479;
background: #dedede;
width: 100%;
height: 100%;
position: absolute;
}
.setting-content .content-title {
@@ -56,6 +58,8 @@
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
max-height: 100%;
overflow: auto;
}
.setting-content .content-body .main-body ul li {
padding: 0.5rem 0.5rem;
@@ -34,13 +34,14 @@ template(name="translation")
template(name="translationGeneral")
table
tbody
thead
tr
th {{_ 'language'}}
th {{_ 'text'}}
th {{_ 'translation-text'}}
th
+newTranslationRow
tbody
each translation in translationList
+translationRow(translationId=translation._id)
+6 -2
View File
@@ -16,9 +16,13 @@
}
.sidebar-xmark {
position: absolute;
right: 10px;
top: 5px;
right: 0px;
top: 0px;
font-size: 25px;
padding: 10px;
}
.sidebar-xmark:hover {
background: rgba(0,0,0,0.15);
}
.sidebar .sidebar-content {
padding: 12px;
+2 -10
View File
@@ -913,19 +913,11 @@ BlazeComponent.extendComponent({
},
allowsCreator() {
return (
this.currentBoard.allowsCreator === null ||
this.currentBoard.allowsCreator === undefined ||
this.currentBoard.allowsCreator
);
return this.currentBoard.allowsCreator ?? false;
},
allowsCreatorOnMinicard() {
return (
this.currentBoard.allowsCreatorOnMinicard === null ||
this.currentBoard.allowsCreatorOnMinicard === undefined ||
this.currentBoard.allowsCreatorOnMinicard
);
return this.currentBoard.allowsCreatorOnMinicard ?? false;
},
allowsMembers() {
@@ -24,9 +24,17 @@ template(name="swimlaneFixedHeader")
| {{isTitleDefault title}}
.swimlane-header-menu
unless currentUser.isCommentOnly
if currentUser.isBoardAdmin
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
a.fa.fa-navicon.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}")
//// TODO: Collapse Swimlane: make button working, etc.
//unless collapsed
// a.js-collapse-swimlane(title="{{_ 'collapse'}}")
// i.fa.fa-arrow-down.swimlane-header-collapse-down
// i.fa.fa-arrow-up.swimlane-header-collapse-up
//if collapsed
// a.js-collapse-swimlane(title="{{_ 'uncollapse'}}")
// i.fa.fa-arrow-up.swimlane-header-collapse-up
// i.fa.fa-arrow-down.swimlane-header-collapse-down
unless isTouchScreen
if isShowDesktopDragHandles
a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle
+16 -1
View File
@@ -18,10 +18,25 @@ BlazeComponent.extendComponent({
swimlane.rename(newTitle.trim());
}
},
collapsed(check = undefined) {
const swimlane = Template.currentData();
const status = swimlane.isCollapsed();
if (check === undefined) {
// just check
return status;
} else {
swimlane.collapse(!status);
return !status;
}
},
events() {
return [
{
'click .js-collapse-swimlane'(event) {
event.preventDefault();
this.collapsed(!this.collapsed());
},
'click .js-open-swimlane-menu': Popup.open('swimlaneAction'),
'click .js-open-add-swimlane-menu': Popup.open('swimlaneAdd'),
submit: this.editTitle,
@@ -209,7 +224,7 @@ BlazeComponent.extendComponent({
swimlaneHeightValue() {
const swimlane = this.currentData();
const board = swimlane.boardId;
return Meteor.user().getSwimlaneHeight(board, swimlane._id);
return ReactiveCache.getCurrentUser().getSwimlaneHeight(board, swimlane._id);
},
events() {
+25 -37
View File
@@ -1,38 +1,3 @@
/*
// Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp
.accordion
cursor: pointer
width: 30px
height: 20px
border: none
outline: none
font-size: 18px
transition: 0.4s
padding-top: 0px
margin-top: 0px
.accordion:after
// Unicode triagle right:
content: '\25B6'
color: #777
font-weight: bold
float: left
.active:after
// Unicode triangle down:
content: '\25BC'
.panel
width: 100%
max-height: 0
overflow: hidden
transition: max-height 0.2s ease-out
margin: 0px
padding: 0px
// Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp
*/
@media screen and (min-width: 801px) {
.swimlane.ui-sortable {
width: max-content;
@@ -46,7 +11,30 @@
background: #dedede;
display: flex;
flex-direction: row;
overflow: 0;
overflow: auto;
max-height: 100%;
}
.swimlane-header-menu .swimlane-header-collapse-down {
font-size: 50%;
color: #a6a6a6;
position: absolute;
top: 5px;
left: 100px;
}
.swimlane-header-menu .swimlane-header-collapse-up {
font-size: 50%;
color: #a6a6a6;
position: absolute;
bottom: 5px;
left: 100px;
}
.swimlane-header-menu .swimlane-header-uncollapse-up {
font-size: 50%;
color: #a6a6a6;
}
.swimlane-header-menu .swimlane-header-uncollapse-down {
font-size: 50%;
color: #a6a6a6;
}
.swimlane.placeholder {
background-color: rgba(0,0,0,0.2);
@@ -170,7 +158,7 @@
color: #4d4d4d !important;
}
.swimlane-silver {
background: unset !important;
background: #ccc !important;
color: #4d4d4d !important;
}
.swimlane-peachpuff {
+3 -3
View File
@@ -1,5 +1,5 @@
template(name="swimlane")
.swimlane
.swimlane.nodragscroll
+swimlaneHeader
unless collapseSwimlane
.swimlane.js-lists.js-swimlane(id="swimlane-{{_id}}"
@@ -46,8 +46,8 @@ template(name="listsGroup")
template(name="addListForm")
unless currentUser.isWorker
.list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
if currentUser.isBoardAdmin
unless currentUser.isCommentOnly
.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'}}"
+2 -2
View File
@@ -225,7 +225,7 @@ BlazeComponent.extendComponent({
},
swimlaneHeight() {
const user = Meteor.user();
const user = ReactiveCache.getCurrentUser();
const swimlane = Template.currentData();
const height = user.getSwimlaneHeight(swimlane.boardId, swimlane._id);
return height == -1 ? "auto" : (height + "px");
@@ -288,7 +288,7 @@ BlazeComponent.extendComponent({
Template.swimlane.helpers({
canSeeAddList() {
return Meteor.user().isBoardAdmin();
return ReactiveCache.getCurrentUser().isBoardAdmin();
},
});
+4 -4
View File
@@ -26,9 +26,9 @@ template(name="orgAvatar")
template(name="boardOrgRow")
tr
if orgData.orgIsActive
td <s>{{ orgData.orgDisplayName }}</s>
else
td {{ orgData.orgDisplayName }}
else
td <s>{{ orgData.orgDisplayName }}</s>
td
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-removeOrg(title="{{_ 'remove-from-board'}}")
@@ -39,9 +39,9 @@ template(name="boardOrgRow")
template(name="boardTeamRow")
tr
if teamData.teamIsActive
td <s>{{ teamData.teamDisplayName }}</s>
else
td {{ teamData.teamDisplayName }}
else
td <s>{{ teamData.teamDisplayName }}</s>
td
if currentUser.isBoardAdmin
a.member.orgOrTeamMember.add-member.js-manage-board-removeTeam(title="{{_ 'remove-from-board'}}")
+3 -3
View File
@@ -325,7 +325,7 @@ Template.changeSettingsPopup.helpers({
});
},
startDayOfWeek() {
currentUser = Meteor.user();
currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
return currentUser.getStartDayOfWeek();
} else {
@@ -343,7 +343,7 @@ Template.changeSettingsPopup.events({
return ret;
},
'click .js-toggle-desktop-drag-handles'() {
currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (currentUser) {
Meteor.call('toggleDesktopDragHandles');
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
@@ -375,7 +375,7 @@ Template.changeSettingsPopup.events({
templateInstance.$('#start-day-of-week').val(),
10,
);
const currentUser = Meteor.user();
const currentUser = ReactiveCache.getCurrentUser();
if (isNaN(minLimit) || minLimit < -1) {
minLimit = -1;
}
+1 -1
View File
@@ -47,7 +47,7 @@ Blaze.registerHelper('isTouchScreenOrShowDesktopDragHandles', () =>
Blaze.registerHelper('moment', (...args) => {
args.pop(); // hash
const [date, format] = args;
return moment(date).format(format);
return moment(date).format(format ?? 'LLLL');
});
Blaze.registerHelper('canModifyCard', () =>
+3 -2
View File
@@ -6,10 +6,11 @@ import moment from 'moment/min/moment-with-locales';
function adjustedTimeFormat() {
return moment
.localeData()
.longDateFormat('LT')
.replace(/HH/i, 'H');
.longDateFormat('LT');
}
// .replace(/HH/i, 'H');
export class DatePicker extends BlazeComponent {
template() {
return 'datepicker';
+12
View File
@@ -33,6 +33,14 @@ Mousetrap.bind('q', () => {
}
});
Mousetrap.bind('a', () => {
const currentBoardId = Session.get('currentBoard');
const currentUserId = Meteor.userId();
if (currentBoardId && currentUserId) {
Filter.assignees.toggle(currentUserId);
}
});
Mousetrap.bind('x', () => {
if (Filter.isActive()) {
Filter.reset();
@@ -181,6 +189,10 @@ Template.keyboardShortcuts.helpers({
keys: ['q'],
action: 'shortcut-filter-my-cards',
},
{
keys: ['a'],
action: 'shortcut-filter-my-assigned-cards',
},
{
keys: ['f'],
action: 'shortcut-toggle-filterbar',
+4 -3
View File
@@ -4,10 +4,11 @@ Utils = {
setBackgroundImage(url) {
const currentBoard = Utils.getCurrentBoard();
if (currentBoard.backgroundImageURL !== undefined) {
$(".board-wrapper,.board-wrapper .board-canvas").css({"background":"url(" + currentBoard.backgroundImageURL + ")","background-size":"cover"});
$(".board-wrapper").css({"background":"url(" + currentBoard.backgroundImageURL + ")","background-size":"cover"});
$(".swimlane,.swimlane .list,.swimlane .list .list-body,.swimlane .list:first-child .list-body").css({"background-color":"transparent"});
} else if (currentBoard.color !== undefined) {
currentBoard.setColor(currentBoard.color);
$(".minicard").css({"opacity": "0.9"});
} else if (currentBoard["background-color"]) {
currentBoard.setColor(currentBoard["background-color"]);
}
},
/** returns the current board id
+2
View File
@@ -16,6 +16,8 @@ export const ALLOWED_BOARD_COLORS = [
'modern',
'moderndark',
'exodark',
'cleandark',
'cleanlight',
];
export const ALLOWED_COLORS = [
'white',
-2
View File
@@ -1,5 +1,3 @@
version: '2'
# Note: Do not add single quotes '' to variables. Having spaces still works without quotes where required.
#---------------------------------------------------------------------------------------------------------
# ==== CREATING USERS AND LOGGING IN TO WEKAN ====
@@ -0,0 +1,41 @@
Wekan provides a python script to ease the call of the REST API from command line interface.
# Context
- [API Login to get Bearer token](REST-API#example-call---as-form-data)
- [API docs and examples for various programming languages](https://wekan.github.io/api/), there is Boards / Export for exporting board with API
- In the right menu, scroll down REST API Docs etc links =====>
- Wekan-Gogs integration with Node.js https://github.com/wekan/wekan-gogs
# Install
You need python3.
Windows
```
choco install python3
# REBOOT
pip3 install pip --upgrade
pip3 install json
python3 wekan.py
```
Debian/Ubuntu
```
sudo apt-get -y install python3 python3-pip python3-simplejson
sudo pip3 install pip --upgrade
chmod +x wekan.py
./wekan.py
```
# Usage
Copy the api.py script to you machine. [Newest Wekan Python CLI api.py here](https://raw.githubusercontent.com/wekan/wekan/master/api.py).
Then, in this script, look for and change:
- wekanurl: https://boards.example.com => Your Wekan URL
- username (could be username or username@example.com)
- Only works with password login admin user. Does not work with LDAP, OAuth2 etc.
Keep in mind your Wekan credentials are potentially accessible in this file.
Then call it without any argument to see if everything is all right. You should just get usage examples.
+56
View File
@@ -0,0 +1,56 @@
# Disclaimer
This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new).
## Information about boards of user
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
http://localhost:3000/api/users/XQMZgynx9M79qTtQc/boards
```
## Add/Remove Board Member and Change Role
[Add/Remove Board Member and Change Role admin/normal/nocomments/commentonly](REST-API-Role).
## The admin takes the ownership of ALL boards of the user (archived and not archived) where the user is admin on.
| URL | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/users/:id` | `yes` | `PUT` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/users/ztKvBTzCqmyJ77on8 \
-d '{ "action": "takeOwnership" }'
```
## Create board
Required:
- "title":"Board title here"
- "owner":"ABCDE12345" <= User ID in Wekan. Not username or email.
Optional, and defaults:
- "isAdmin":"true"
- "isActive":"true"
- "isNoComments":"false"
- "isCommentOnly":"false"
- "permission":"private" <== Set to "public" if you want public Wekan board
- "color":"belize" <== Board color: belize, nephritis, pomegranate, pumpkin, wisteria, midnight.
<img src="https://wekan.github.io/board-colors.png" width="40%" alt="Wekan logo" />
Example:
```
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards \
-d '{"title":"Board title here","owner":"ABCDE12345","permission":"private","color":"nephritis"}'
```
## In Wekan code
If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/boards.js "Board API code")
+94
View File
@@ -0,0 +1,94 @@
# Disclaimer
This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new).
# Retrieve cards by swimlane id
| API URL / Code Link | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| [/api/boards/:boardId/swimlanes/:swimlaneId/cards](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L487) | `yes` | `GET` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-X GET \
http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/swimlanes/PgTuf6sFJsaxto5dC/cards
```
## Result example
```shell
{
"_id": "AzEeHS7KAGeYZCcak",
"title": "Create Auth Code",
"description": "Create Auth Code for application.",
"listId": "RPRtDTQMKpShpgqoj"
},
{
...
```
# Add Card to List-Board-Swimlane
| API URL / Code Link | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| [/api/boards/:boardId/lists/:listId/cards](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L487) | `yes` | `POST` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards \
-d '{ "title": "Card title text", "description": "Card description text", "authorId": "The appropriate existing userId", "swimlaneId": "The destination swimlaneId" }'
```
## Result example
The new card's ID is returned in the format:
```json
{
"_id": "W9m9YxQKT6zZrKzRW"
}
```
# Update a card
You can change (any of) the card's title, list, and description.
| API URL / Code Link | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| [/api/boards/:boardId/lists/:fromListId/cards/:cardId](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L520) | `yes` | `PUT` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards/ssrNX9CvXvPxuC5DE \
-d '{ "title": "New title text", "listId": "New destination listId", "description": "New description text" }'
```
## Result example
The card's ID is returned in the format:
```json
{
"_id": "W9m9YxQKT6zZrKzRW"
}
```
# Delete a card
| API URL / Code Link | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| [/api/boards/:boardId/lists/:listId/cards/:cardId](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L554) | `yes` | `DELETE` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X DELETE \
http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards/ssrNX9CvXvPxuC5DE \
-d '{ "authorId": "the appropriate existing userId"}'
```
## Result example
The card's ID is returned in the format:
```json
{
"_id": "W9m9YxQKT6zZrKzRW"
}
```
# In Wekan code
If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/cards.js "Card API code")
+148
View File
@@ -0,0 +1,148 @@
## In Wekan code
## 1) Checklists
wekan/models/checklists.js at bottom:
```
JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res) {
Authentication.checkUserId( req.userId);
const paramCardId = req.params.cardId;
const checklists = Checklists.find({ cardId: paramCardId }).map(function (doc) {
return {
_id: doc._id,
title: doc.title,
};
});
if (checklists) {
JsonRoutes.sendResult(res, {
code: 200,
data: checklists,
});
} else {
JsonRoutes.sendResult(res, {
code: 500,
});
}
});
JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramChecklistId = req.params.checklistId;
const paramCardId = req.params.cardId;
const checklist = Checklists.findOne({ _id: paramChecklistId, cardId: paramCardId });
if (checklist) {
checklist.items = ChecklistItems.find({checklistId: checklist._id}).map(function (doc) {
return {
_id: doc._id,
title: doc.title,
isFinished: doc.isFinished,
};
});
JsonRoutes.sendResult(res, {
code: 200,
data: checklist,
});
} else {
JsonRoutes.sendResult(res, {
code: 500,
});
}
});
JsonRoutes.add('POST', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res) {
Authentication.checkUserId( req.userId);
const paramCardId = req.params.cardId;
const id = Checklists.insert({
title: req.body.title,
cardId: paramCardId,
sort: 0,
});
if (id) {
req.body.items.forEach(function (item, idx) {
ChecklistItems.insert({
cardId: paramCardId,
checklistId: id,
title: item.title,
sort: idx,
});
});
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: id,
},
});
} else {
JsonRoutes.sendResult(res, {
code: 400,
});
}
});
JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramChecklistId = req.params.checklistId;
Checklists.remove({ _id: paramChecklistId });
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: paramChecklistId,
},
});
});
```
### 2) Checklist Items
wekan/models/checklistItems.js at bottom:
```
JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramItemId = req.params.itemId;
const checklistItem = ChecklistItems.findOne({ _id: paramItemId });
if (checklistItem) {
JsonRoutes.sendResult(res, {
code: 200,
data: checklistItem,
});
} else {
JsonRoutes.sendResult(res, {
code: 500,
});
}
});
JsonRoutes.add('PUT', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramItemId = req.params.itemId;
if (req.body.hasOwnProperty('isFinished')) {
ChecklistItems.direct.update({_id: paramItemId}, {$set: {isFinished: req.body.isFinished}});
}
if (req.body.hasOwnProperty('title')) {
ChecklistItems.direct.update({_id: paramItemId}, {$set: {title: req.body.title}});
}
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: paramItemId,
},
});
});
JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramItemId = req.params.itemId;
ChecklistItems.direct.remove({ _id: paramItemId });
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: paramItemId,
},
});
```
+33
View File
@@ -0,0 +1,33 @@
## Using Meteor with REST API
### 1) Adding API
```
meteor add simple:json-routes
```
https://atmospherejs.com/simple/json-routes
https://github.com/wekan/wekan/blob/main/.meteor/packages#L139
### 2) API code
At models directory:
https://github.com/wekan/wekan/blob/main/models/users.js#L2018
### 3) Login to API as JSON
https://github.com/wekan/wekan/wiki/REST-API#example-call---as-json
Also see at wiki right menu about REST API.
### 4) Use Python3 CLI to login to API and do REST API action
https://github.com/wekan/wekan/blob/main/api.py
### 4) API Docs
https://wekan.github.io/api/
Building API Docs: https://github.com/wekan/wekan/blob/main/releases/rebuild-docs.sh
+78
View File
@@ -0,0 +1,78 @@
1) Login as Admin user as Form Data to get Bearer token
https://github.com/wekan/wekan/wiki/REST-API#example-call---as-form-data
2) There needs to be Custom Field added to board
https://wekan.github.io/api/v4.42/#wekan-rest-api-customfields
3) Custom Field at board and card will have same `_id`
https://wekan.github.io/api/v4.42/#put_board_list_card
4) When writing Custom Field value to card, like text field, content type needs to be "application/json" and the string needs to be an array:
```
-d '{ "customFields" : [ { "_id" : "oZHkpcaxDHnbkbqGo", "value" : "foobar" } ] }'
```
5) For other types of Custom Fields, you can look at Custom Field structure from MongoDB database with [nosqlbooster](https://nosqlbooster.com/downloads) that can also login through ssh to server Wekan snap MongoDB port 27019
## In Wekan code (old)
wekan/models/customFields.js , at bottom
```
//CUSTOM FIELD REST API
if (Meteor.isServer) {
JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
JsonRoutes.sendResult(res, {
code: 200,
data: CustomFields.find({ boardId: paramBoardId }),
});
});
JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const paramCustomFieldId = req.params.customFieldId;
JsonRoutes.sendResult(res, {
code: 200,
data: CustomFields.findOne({ _id: paramCustomFieldId, boardId: paramBoardId }),
});
});
JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const id = CustomFields.direct.insert({
name: req.body.name,
type: req.body.type,
settings: req.body.settings,
showOnCard: req.body.showOnCard,
boardId: paramBoardId,
});
const customField = CustomFields.findOne({_id: id, boardId: paramBoardId });
customFieldCreation(req.body.authorId, customField);
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: id,
},
});
});
JsonRoutes.add('DELETE', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const id = req.params.customFieldId;
CustomFields.remove({ _id: id, boardId: paramBoardId });
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: id,
},
});
});
}
```
+191
View File
@@ -0,0 +1,191 @@
## In Wekan code
wekan/models/integrations.js at bottom
```
// Get all integrations in board
JsonRoutes.add('GET', '/api/boards/:boardId/integrations', function(req, res) {
try {
const paramBoardId = req.params.boardId;
Authentication.checkBoardAccess(req.userId, paramBoardId);
const data = Integrations.find({ boardId: paramBoardId }, { fields: { token: 0 } }).map(function(doc) {
return doc;
});
JsonRoutes.sendResult(res, {code: 200, data});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
// Get a single integration in board
JsonRoutes.add('GET', '/api/boards/:boardId/integrations/:intId', function(req, res) {
try {
const paramBoardId = req.params.boardId;
const paramIntId = req.params.intId;
Authentication.checkBoardAccess(req.userId, paramBoardId);
JsonRoutes.sendResult(res, {
code: 200,
data: Integrations.findOne({ _id: paramIntId, boardId: paramBoardId }, { fields: { token: 0 } }),
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
// Create a new integration
JsonRoutes.add('POST', '/api/boards/:boardId/integrations', function(req, res) {
try {
const paramBoardId = req.params.boardId;
Authentication.checkBoardAccess(req.userId, paramBoardId);
const id = Integrations.insert({
userId: req.userId,
boardId: paramBoardId,
url: req.body.url,
});
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: id,
},
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
// Edit integration data
JsonRoutes.add('PUT', '/api/boards/:boardId/integrations/:intId', function (req, res) {
try {
const paramBoardId = req.params.boardId;
const paramIntId = req.params.intId;
Authentication.checkBoardAccess(req.userId, paramBoardId);
if (req.body.hasOwnProperty('enabled')) {
const newEnabled = req.body.enabled;
Integrations.direct.update({_id: paramIntId, boardId: paramBoardId},
{$set: {enabled: newEnabled}});
}
if (req.body.hasOwnProperty('title')) {
const newTitle = req.body.title;
Integrations.direct.update({_id: paramIntId, boardId: paramBoardId},
{$set: {title: newTitle}});
}
if (req.body.hasOwnProperty('url')) {
const newUrl = req.body.url;
Integrations.direct.update({_id: paramIntId, boardId: paramBoardId},
{$set: {url: newUrl}});
}
if (req.body.hasOwnProperty('token')) {
const newToken = req.body.token;
Integrations.direct.update({_id: paramIntId, boardId: paramBoardId},
{$set: {token: newToken}});
}
if (req.body.hasOwnProperty('activities')) {
const newActivities = req.body.activities;
Integrations.direct.update({_id: paramIntId, boardId: paramBoardId},
{$set: {activities: newActivities}});
}
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: paramIntId,
},
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
// Delete subscribed activities
JsonRoutes.add('DELETE', '/api/boards/:boardId/integrations/:intId/activities', function (req, res) {
try {
const paramBoardId = req.params.boardId;
const paramIntId = req.params.intId;
const newActivities = req.body.activities;
Authentication.checkBoardAccess(req.userId, paramBoardId);
Integrations.direct.update({_id: paramIntId, boardId: paramBoardId},
{$pullAll: {activities: newActivities}});
JsonRoutes.sendResult(res, {
code: 200,
data: Integrations.findOne({_id: paramIntId, boardId: paramBoardId}, { fields: {_id: 1, activities: 1}}),
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
// Add subscribed activities
JsonRoutes.add('POST', '/api/boards/:boardId/integrations/:intId/activities', function (req, res) {
try {
const paramBoardId = req.params.boardId;
const paramIntId = req.params.intId;
const newActivities = req.body.activities;
Authentication.checkBoardAccess(req.userId, paramBoardId);
Integrations.direct.update({_id: paramIntId, boardId: paramBoardId},
{$addToSet: {activities: { $each: newActivities}}});
JsonRoutes.sendResult(res, {
code: 200,
data: Integrations.findOne({_id: paramIntId, boardId: paramBoardId}, { fields: {_id: 1, activities: 1}}),
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
// Delete integration
JsonRoutes.add('DELETE', '/api/boards/:boardId/integrations/:intId', function (req, res) {
try {
const paramBoardId = req.params.boardId;
const paramIntId = req.params.intId;
Authentication.checkBoardAccess(req.userId, paramBoardId);
Integrations.direct.remove({_id: paramIntId, boardId: paramBoardId});
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: paramIntId,
},
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
```
+89
View File
@@ -0,0 +1,89 @@
## In Wekan code
wekan/models/lists.js at bottom:
```
JsonRoutes.add('GET', '/api/boards/:boardId/lists', function (req, res) {
try {
const paramBoardId = req.params.boardId;
Authentication.checkBoardAccess( req.userId, paramBoardId);
JsonRoutes.sendResult(res, {
code: 200,
data: Lists.find({ boardId: paramBoardId, archived: false }).map(function (doc) {
return {
_id: doc._id,
title: doc.title,
};
}),
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId', function (req, res) {
try {
const paramBoardId = req.params.boardId;
const paramListId = req.params.listId;
Authentication.checkBoardAccess( req.userId, paramBoardId);
JsonRoutes.sendResult(res, {
code: 200,
data: Lists.findOne({ _id: paramListId, boardId: paramBoardId, archived: false }),
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
JsonRoutes.add('POST', '/api/boards/:boardId/lists', function (req, res) {
try {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const id = Lists.insert({
title: req.body.title,
boardId: paramBoardId,
});
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: id,
},
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
JsonRoutes.add('DELETE', '/api/boards/:boardId/lists/:listId', function (req, res) {
try {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const paramListId = req.params.listId;
Lists.remove({ _id: paramListId, boardId: paramBoardId });
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: paramListId,
},
});
}
catch (error) {
JsonRoutes.sendResult(res, {
code: 200,
data: error,
});
}
});
```
+82
View File
@@ -0,0 +1,82 @@
# Change Role at Web UI
BoardAdmin can change role of user at right sidebar / click avatar / select role like Admin, Normal, etc.
# Change Role with API
- https://wekan.github.io/api/
- api.py at https://github.com/wekan/wekan
- Login to API https://github.com/wekan/wekan/wiki/REST-API#example-call---as-json
# Disclaimer
This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new).
## Add New Board Member with Role
This example adds with normal role. See examples below for other roles.
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE/add \
-d '{"action": "add","isAdmin": "false", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "false" }'
```
like
```
/api/boards/{boardid}/members/{MEMBERID}/add Body{ "action" : add, "isadmin" : false ...........
```
## Remove Member from Board
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE/remove \
-d '{"action": "remove"}'
```
# Change Role of Existing Board Member
## Admin
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \
-d '{"isAdmin": "true", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "false"}'
```
## Normal
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \
-d '{"isAdmin": "false", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "false"}'
```
## No Comments
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \
-d '{"isAdmin": "false", "isNoComments":"true", "isCommentOnly": "false", "isWorker": "false"}'
```
## Comment Only
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \
-d '{"isAdmin": "false", "isNoComments":"false", "isCommentOnly": "true", "isWorker": "false"}'
```
## Worker
- Can: move cards, can assign himself to card, can comment.
- Cannot: anything else including revoke card, change settings, create/delete/edit cards/tags and so on...
```
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \
-d '{"isAdmin": "false", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "true"}'
```
+54
View File
@@ -0,0 +1,54 @@
# Disclaimer
This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new).
# Retrieve cards by swimlane id
Please somebody add example by looking this:
[Issue](https://github.com/wekan/wekan/issues/1934) and [code](https://github.com/wekan/wekan/pull/1944/commits/be42b8d4cbdfa547ca019ab2dc9a590a115cc0e2). Also add to [Cards page](REST-API-Cards)
# Add Swimlane to Board
| API URL / Code Link | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| [/api/boards/:boardId/swimlanes](https://github.com/wekan/wekan/blob/main/models/swimlanes.js#L223) | `yes` | `POST` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/swimlanes \
-d '{ "title": "Swimlane title text" }'
```
## Result example
The new swimlane's ID is returned in the format:
```json
{
"_id": "W9m9YxQKT6zZrKzRW"
}
```
# Delete a swimlane
| API URL / Code Link | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| [/api/boards/:boardId/swimlanes/:swimlaneId](https://github.com/wekan/wekan/blob/main/models/swimlanes.js#L257) | `yes` | `DELETE` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X DELETE \
http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards/ssrNX9CvXvPxuC5DE
```
## Result example
The swimlane's ID is returned in the format:
```json
{
"_id": "W9m9YxQKT6zZrKzRW"
}
```
# In Wekan code
If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/swimlanes.js "Swimlane API code")
+335
View File
@@ -0,0 +1,335 @@
# Disclaimer
This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new).
# User Register
| URL | Requires Auth | HTTP Method |
| :--- | :--- | :--- |
| `/users/register` | `no` | `POST` |
## Payload
| Argument | Example | Required | Description |
| :--- | :--- | :--- | :--- |
| `username` | `myusername` | Required | Your username |
| `password` | `my$up3erP@ssw0rd` | Required | Your password |
| `email` | `my@email.com` | Required | Your email |
* Notes:
* **You will need to provide the `token` for any of the authenticated methods.**
## Example Call - As Form Data
```bash
curl http://localhost:3000/users/register \
-d "username=myusername&password=mypassword&email=my@email.com"
```
## Example Call - As JSON
```bash
curl -H "Content-type:application/json" \
http://localhost:3000/users/register \
-d '{ "username": "myusername", "password": "mypassword", "email": "my@email.com" }'
```
## Result
```json
{
"id": "user id",
"token": "string",
"tokenExpires": "ISO encoded date string"
}
```
## Result example
```json
{
"id": "XQMZgynx9M79qTtQc",
"token": "ExMp2s9ML1JNp_l11sIfINPT3wykZ1SsVwg-cnxKdc8",
"tokenExpires": "2017-12-15T00:47:26.303Z"
}
```
# User Create
| URL | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/users` | `yes` | `POST` |
## Payload
| Argument | Example | Required | Description |
| :--- | :--- | :--- | :--- |
| `username` | `myusername` | Required | Your username |
| `password` | `my$up3erP@ssw0rd` | Required | Your password |
| `email` | `my@email.com` | Required | Your email |
* Notes:
* **You will need to provide the `token` for any of the authenticated methods.**
## Example Call - As Form Data
```bash
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-X POST \
http://localhost:3000/api/users \
-d "username=myusername&password=mypassword&email=my@email.com"
```
## Example Call - As JSON
```bash
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/users \
-d '{ "username": "myusername", "password": "mypassword", "email": "my@email.com" }'
```
## Example of all steps of create user
1) Login
```
curl http://example.com/users/login \
-d "username=YOUR-USERNAME-HERE&password=YOUR-PASSWORD-HERE"
```
As response you get your id and token:
```
"id":"YOUR-ID-HERE","token":"YOUR-TOKEN-HERE","tokenExpires":"2017-12-23T21:07:10.395Z"}
```
2) Create user. Works both when serf-register enabled and disabled.
```
curl -H "Authorization: Bearer YOUR-TOKEN-HERE" \
-H "Content-type:application/json" \
-X POST \
http://example.com/api/users \
-d '{ "username": "tester", "password": "tester", "email": "tester@example.com", "fromAdmin": "true" }'
```
As reply you get new user's id.
```
{"id":"NEW-USER-ID-HERE"}
```
3) You can get user details with your new user's id:
```
curl -H "Authorization: Bearer YOUR-TOKEN-HERE" \
http://example.com/api/users/NEW-USER-ID-HERE
```
## Result
Returns the id of the created user.
```json
{
"_id": "user id"
}
```
## Result example
```json
{
"_id": "EnhMbvxh65Hr7YvtG"
}
```
# User Delete
> IMPORTANT : Should not be used as long as [this bug](https://github.com/wekan/wekan/issues/1289) exists.
| URL | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/users/:id` | `yes` | `DELETE` |
## Parameters
| Argument | Example | Required | Description |
| :--- | :--- | :--- | :--- |
| `id` | `BsNr28znDkG8aeo7W` | Required | The id of the user to delete. |
## Example Call
```bash
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
-X DELETE \
http://localhost:3000/api/users/EnhMbvxh65Hr7YvtG
```
## Example Result
Returns the id of the deleted user.
```json
{
"_id": "EnhMbvxh65Hr7YvtG"
}
```
# User Information
Retrieves information about a user.
| URL | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/users/:id` | `yes` | `GET` |
* Notes:
* **You will need to provide the `token` for any of the authenticated methods.**
* **Only the admin user (the first user) can call the REST API.**
## Example Call
```bash
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
http://localhost:3000/api/users/XQMZgynx9M79qTtQc
```
## Result example
```json
{
"_id": "XQMZgynx9M79qTtQc",
"createdAt": "2017-09-13T06:45:53.127Z",
"services": {
"password": {
"bcrypt": "$2a$10$CRZrpT4x.VpG2FdJxR3rN.9m0NbQb0OPsSPBDAZukggxrskMtWA8."
},
"email": {
"verificationTokens": [
{
"token": "8rzwpq_So2PVYHVSfrcc5f5QZnuV2wEtu7QRQGwOJx8",
"address": "my@email.com",
"when": "2017-09-13T06:45:53.157Z"
}
]
},
"resume": {
"loginTokens": [
{
"when": "2017-09-13T06:45:53.265Z",
"hashedToken": "CY/PWeDa3fAkl+k94+GWzCtpB5nPcVxLzzzjXs4kI3A="
},
{
"when": "2017-09-16T06:06:19.741Z",
"hashedToken": "74MQNXfsgjkItx/gpgPb29Y0MSNAvBrsnSGQmr4YGvQ="
}
]
}
},
"username": "john",
"emails": [
{
"address": "my@email.com",
"verified": false
}
],
"isAdmin": true,
"profile": {}
}
```
# User List
Retrieves the user list.
| URL | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/users` | `yes` | `GET` |
* Notes:
* **You will need to provide the `token` for any of the authenticated methods.**
* **Only the admin user (the first user) can call the REST API.**
## Example Call
```bash
curl -H "Authorization: Bearer cwUZ3ZsTaE6ni2R3ppSkYd-KrDvxsLcBIkSVfOCfIkA" \
http://localhost:3000/api/users
```
## Result
```json
[
{
"_id": "user id",
"username": "string"
}
]
```
## Result example
```json
[
{
"_id": "XQMZgynx9M79qTtQc",
"username": "admin"
},
{
"_id": "vy4WYj7k7NBhf3AFc",
"username": "john"
}
]
```
# User Logged-in
Retrieves information about a logged-in user with his auth token.
| URL | Requires Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/user` | `yes` | `GET` |
* Notes:
* **You will need to provide the `token` for any of the authenticated methods.**
## Example Call
```bash
curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \
http://localhost:3000/api/user
```
## Result example
```json
{
"_id": "vy4WYj7k7NBhf3AFc",
"createdAt": "2017-09-16T05:51:30.339Z",
"username": "john",
"emails": [
{
"address": "me@mail.com",
"verified": false
}
],
"profile": {}
}
```
# Disable a user (the user is not allowed to login and his login tokens are purged)
| URL | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/users/:id` | `yes` | `PUT` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/users/ztKvBTzCqmyJ77on8 \
-d '{ "action": "disableLogin" }'
```
# Enable a user
| URL | Requires Admin Auth | HTTP Method |
| :--- | :--- | :--- |
| `/api/users/:id` | `yes` | `PUT` |
```shell
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/users/ztKvBTzCqmyJ77on8 \
-d '{ "action": "enableLogin" }'
```
# In Wekan code
If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/users.js "User API code")
+126
View File
@@ -0,0 +1,126 @@
REST API is not complete yet, please add missing functionality with pull requests to devel branch.
If you are in a hurry, you can use these to have more functionality:
* https://restheart.org
* http://vulcanjs.org
For workflows see [If-this-then-that issue](https://github.com/wekan/wekan/issues/1160) than mentions Huginn, Flogo etc.
# Wekan REST API
The REST API allows you to control and extend Wekan with ease.
If you are an end-user and not a dev or a tester, [create an issue](https://github.com/wekan/wekan/issues/new) to request new APIs.
> All API calls in the documentation are made using `curl`. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages.
## Production Security Concerns
When calling a production Wekan server, ensure it is running via HTTPS and has a valid SSL Certificate. The login method requires you to post your username and password in plaintext, which is why we highly suggest only calling the REST login api over HTTPS. Also, few things to note:
* Only call via HTTPS
* Implement a timed authorization token expiration strategy
* Ensure the calling user only has permissions for what they are calling and no more
# Summary
### Authentication
| HTTP Method | Url | Short Description |
| :--- | :--- | :--- |
| `POST` | `/users/login` | [Authenticate with the REST API.](#login) |
### Users
| HTTP Method | Url | Short Description |
| :--- | :--- | :--- |
| `POST` | `/users/register` | [Register a new user.](REST-API-User#user-register) |
| `POST` | `/api/users` | [Create a new user.](REST-API-User#user-create) |
| `PUT` | `/api/users/:id` | [Disable an existing user.](REST-API-User#disable-a-user-the-user-is-not-allowed-to-login-and-his-login-tokens-are-purged) |
| `PUT` | `/api/users/:id` | [Enable an existing user.](REST-API-User#enable-a-user) |
| `PUT` | `/api/users/:id` | [Admin takes the ownership.](REST-API-User#the-admin-takes-the-ownership-of-all-boards-of-the-user-archived-and-not-archived-where-the-user-is-admin-on) |
| `DELETE` | `/api/users/:id` | [Delete an existing user.](REST-API-User#user-delete) ([Warning](https://github.com/wekan/wekan/issues/1289))|
| `GET` | `/api/users/:id` | [Gets a user's information.](REST-API-User#user-information) |
| `GET` | `/api/users` | [All of the users.](REST-API-User#user-list) |
| `GET` | `/api/user` | [Gets a logged-in user.](REST-API-User#user-logged-in) |
### Cards
| HTTP Method | Url | Short Description |
| :--- | :--- | :--- |
| `POST` | `/api/boards/:boardId/lists/:listId/cards` | [Add a card to a list, board, and swimlane.](REST-API-Cards#add-card-to-list-board-swimlane) |
| `PUT` | `/api/boards/:boardId/lists/:fromListId/cards/:cardId` | [Update a card.](REST-API-Cards#update-a-card) |
| `DELETE` | `/api/boards/:boardId/lists/:listId/cards/:cardId` | [Delete a card.](REST-API-Cards#update-a-card) |
---
# Login
| URL | Requires Auth | HTTP Method |
| :--- | :--- | :--- |
| `/users/login` | `no` | `POST` |
## Payload
### Authentication with username
| Argument | Example | Required | Description |
| :--- | :--- | :--- | :--- |
| `username` | `myusername` | Required | Your username |
| `password` | `my$up3erP@ssw0rd` | Required | Your password |
### Authentication with email
| Argument | Example | Required | Description |
| :--- | :--- | :--- | :--- |
| `email` | `my@email.com` | Required | Your email |
| `password` | `my$up3erP@ssw0rd` | Required | Your password |
* Notes:
* **You will need to provide the `token` for any of the authenticated methods.**
## Example Call - As Form Data
DOES NOT WORK ! Please use As JSON example below !
https://github.com/wekan/wekan/issues/4807
```bash
curl http://localhost:3000/users/login \
-d "username=myusername&password=mypassword"
```
```bash
curl http://localhost:3000/users/login \
-d "email=my@email.com&password=mypassword"
```
## Example Call - As JSON
THIS WORKS !! Alternatively, look at api.py example at https://github.com/wekan/wekan
NOTE: Username and password is case sensitive. So type BIG and small letters correctly.
```bash
curl -H "Content-type:application/json" \
http://localhost:3000/users/login \
-d '{ "username": "myusername", "password": "mypassword" }'
```
```bash
curl -H "Content-type:application/json" \
http://localhost:3000/users/login \
-d '{ "email": "my@email.com", "password": "mypassword" }'
```
## Result
```json
{
"id": "user id",
"token": "string",
"tokenExpires": "ISO encoded date string"
}
```
## Result example
```json
{
"id": "XQMZgynx9M79qTtQc",
"token": "ExMp2s9ML1JNp_l11sIfINPT3wykZ1SsVwg-cnxKdc8",
"tokenExpires": "2017-12-15T00:47:26.303Z"
}
```
+8
View File
@@ -0,0 +1,8 @@
Admin Panel / People / Click at right side of usename `...` button that is User Settings / Impersonate user.
You will be switched to logged in as that user.
To switch back to your original user, at your webbrowser click `Reload open webpage` round arrow button.
This feature was added to Wekan v4.39 at https://github.com/wekan/wekan/pull/3280
+784
View File
@@ -0,0 +1,784 @@
[Sandstorm](Sandstorm) - [Sandstorm Backup](Export-from-Wekan-Sandstorm-grain-.zip-file)
# Upcoming
[Transferring to Minio and SQLite](https://github.com/wekan/minio-metadata)
# Backup Docker
[Also see: Upgrading Synology with Wekan quay images](https://github.com/wekan/wekan/issues/3874#issuecomment-867526249)
Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
[docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/master/docker-compose.yml)
This presumes your Wekan Docker is currently running with:
```bash
docker-compose up -d
```
Backup to directory dump:
```bash
docker stop wekan-app
docker exec wekan-db rm -rf /data/dump
docker exec wekan-db mongodump -o /data/dump
docker cp wekan-db:/data/dump .
docker start wekan-app
```
Copy dump directory to other server or to your backup.
# Restore Docker
```bash
docker stop wekan-app
docker exec wekan-db rm -rf /data/dump
docker cp dump wekan-db:/data/
docker exec wekan-db mongorestore --drop --dir=/data/dump
docker start wekan-app
```
# Upgrade Docker Wekan version
## Newest info
https://github.com/wekan/wekan/discussions/5367
## Old info
Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
```bash
docker-compose stop
docker rm wekan-app
```
a) For example, if you in docker-compose.yml use `image: wekanteam/wekan` or `image: quay.io/wekan/wekan` for latest development version
b) Or in docker-compose.yml change version tag, or use version tag like `image: wekanteam/wekan:v5.50` or `image: quay.io/wekan/wekan:v5.50`
```bash
docker-compose up -d
```
# Backup Wekan Snap to directory dump
```bash
sudo snap stop wekan.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="/snap/wekan/current/bin:$PATH"
mongodump --port 27019
sudo snap get wekan > snap-settings.sh
```
NOTE for Arch Linux: Use this path instead. [Source](https://github.com/wekan/wekan/issues/3941).
```bash
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH-}:/var/lib/snapd/snap/wekan/current/lib/x86_64-linux-gnu
```
username is your /home/username
```bash
sudo chown username:username snap-settings.sh
sudo snap start wekan.wekan
```
Modify snap-settings.sh so that it has commands like:
```bash
sudo snap set wekan root-url='http://localhost'
```
Set snap-settings.sh executeable:
```bash
chmod +x snap-settings.sh
```
# Restore Wekan Snap
```bash
sudo snap stop wekan.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan/current/bin"
mongorestore --drop --port 27019
sudo snap start wekan.wekan
./snap-settings.sh
```
# Upgrade Snap manually immediately (usually it updates automatically)
```bash
sudo snap refresh
```
# Backup Wekan Gantt GPLv2 Snap to directory dump
```bash
sudo snap stop wekan-gantt-gpl.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan-gantt-gpl/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan-gantt-gpl/current/bin"
mongodump --port 27019
sudo snap get wekan-gantt-gpl > snap-settings.sh
```
username is your /home/username
```bash
sudo chown username:username snap-settings.sh
sudo snap start wekan-gantt-gpl.wekan
```
Modify snap-settings.sh so that it has command like:
```bash
sudo snap set wekan-gantt-gpl root-url='http://localhost'
```
Set snap-settings.sh executeable:
```bash
chmod +x snap-settings.sh
```
# Restore Wekan Gantt GPLv2 Snap
```bash
sudo snap stop wekan-gantt-gpl.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan-gantt-gpl/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan-gantt-gpl/current/bin"
mongorestore --drop --port 27019
sudo snap start wekan-gantt-gpl.wekan
./snap-settings.sh
```
# DBGate, Open Source MongoDB GUI
https://dbgate.org - https://github.com/dbgate/dbgate
# Using nosqlbooster closed source MongoDB GUI with Wekan Snap to edit MongoDB database
https://nosqlbooster.com/downloads
### At server where Wekan Snap is installed, MongoDB is running at localhost port 27019
<img src="https://wekan.github.io/nosqlbooster-basic-connection.png" width="60%" alt="Wekan logo" />
### You can tunnel via SSH to server, using password auth or private key auth dropdown selection
<img src="https://wekan.github.io/nosqlbooster-ssh-tunnel.png" width="60%" alt="Wekan logo" />
# Scheduled backups to local or remote server
For below scheduled backup scripts, no info from above of this wiki page is required. Backup scripts below have the required settings.
This does backup of [Wekan+RocketChat snap databases](OAuth2) and php website etc.
If you need to backup some remote server or cloud, you can use scp, or read [rclone docs](https://rclone.org/docs/) about how to configure saving to some other remote server or cloud.
The following .sh bash scripts are added as root user to your `/root/` directory.
Backups are created to subdirectories of `/root/backups/`.
Cron is used to schedule backups, for example once a day.
1. To add bash scripts, you change to root user with this command, and your sudo or root password.
```bash
sudo su
```
2. Use nano editor for editing cron. If you don't have it installed, type:
```bash
apt install nano
```
3. Then we set text editor to be nano. Otherwise it probably uses vi, that is harder to use.
```bash
export EDITOR=nano
```
4. Now we start editing cron scheduler.
```bash
crontab -e
```
For more info how to make cron time, see https://crontab.guru
In this example, we set backups every day at 04:00, then it runs backup.sh script, and saves output of the backup commands to the bottom of textfile backup.log.txt
```bash
# m h dom mon dow command
0 4 * * * /root/backup.sh >> /root/backup.log.txt 2>&1
```
- For changing to `/root` directory, type: `cd /root`
- for editing backup.sh file, type: `nano backup.sh`
- For saving in nano, press Ctrl-o Enter
- For exiting nano, press Ctrl-x Enter
- Set every .sh file as executeable, for example: `chmod +x backup.sh`
This is content of `backup.sh` script. It runs all the other backup scripts.
If you do not need to backup rocketchat or website, or do not need to use rclone,
you don't need to add those command lines at all.
```bash
cd /root
./backup-wekan.sh
./backup-rocketchat.sh
./backup-website.sh
rclone move backups cloudname:backup.example.com
```
More about rclone:
/root/rclone-ls-all.sh , shows directory contests at cloud:
```bash
rclone lsd cloudname:
```
In this example, cron does run backup scripts as root.
This is if you edit cron with command `crontab -e` as root user,
so it edits the cron of root user.
If mongodump command works as normal user for you, you could instead
run backups as normal user, by exiting root user with `exit` and
then as normal user editing cron with `crontab -e`.
You can also list current cron with command `crontab -l`.
If you like to backup Wekan snap settings with this command, then it
only works with sudo at front, or as a root user without sudo at front.
```bash
sudo snap get wekan > snap-settings.txt
```
This below is backup script for backing up Wekan.
/root/backup-wekan.sh
```bash
#!/bin/bash
makeDump()
{
# Backups will be created below this directory.
backupdir="/root/backups/wekan"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Gets current time to variable "now"
now=$(date +'%Y-%m-%d_%H.%M.%S')
# Creates new backup directory like BACKUPDIR/BACKUPVERSIO-TIMENOW
mkdir -p $backupdir/$version-$now
# Targets the dump file.
#dump=$"/snap/wekan/$version/bin/mongodump"
# Changes to backup directory
cd $backupdir/$version-$now
# Backup Caddy settings
snap get wekan > snap-settings.txt
# Show text that database backup is in progress
printf "\nThe database backup is in progress.\n\n"
# Backup to current directory, creates subdirectory called "dump"
# with database dump files
mongodump --port 27019
# Change diretory (=cd) to parent directory
cd ..
# Show text "Makes the tar.gz archive file"
printf "\nMakes the tar.gz archive file.\n"
# Creates tar.gz archive file. This works similarly like creating .zip file.
tar -zcvf $version-$now.tar.gz $version-$now
# Delete temporary files that have already been
# compressed to above tar.gz file
rm -rf $version-$now
# Shows text "Backup done."
printf "\nBackup done.\n"
# Show where backup archive file is.
echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```bash
/root/backup-rocketchat.sh
```bash
#!/bin/bash
makeDump()
{
backupdir="/root/backups/rocketchat"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Prepares.
now=$(date +'%Y-%m-%d_%H.%M.%S')
mkdir -p $backupdir/$version-$now
# Targets the dump file.
dump=$"/snap/wekan/$version/bin/mongodump"
# Makes the backup.
cd $backupdir/$version-$now
printf "\nThe database backup is in progress.\n\n"
$dump --port 27017
# Makes the tar.gz file.
cd ..
printf "\nMakes the tar.gz file.\n"
tar -zcvf $version-$now.tar.gz $version-$now
# Cleanups
rm -rf $version-$now
# End.
printf "\nBackup done.\n"
echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```
/root/backup-website.sh
```bash
#!/bin/bash
makeDump()
{
backupdir="/root/backups/example.com"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Prepares.
now=$(date +'%Y-%m-%d_%H.%M.%S')
mkdir -p $backupdir/$version-$now
# Makes the backup.
cd $backupdir/$version-$now
printf "\nThe file backup is in progress.\n\n"
# Makes the tar.gz file.
cd ..
printf "\nMakes the tar.gz file.\n"
cp -pR /var/snap/wekan/common/example.com $version-$now
tar -zcvf $version-$now.tar.gz $version-$now
# Cleanups
rm -rf $version-$now
# End.
printf "\nBackup done.\n"
echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```
/var/snap/wekan/common/Caddyfile
```bash
chat.example.com {
proxy / localhost:3000 {
websocket
transparent
}
}
https://boards.example.com {
proxy / localhost:3001 {
websocket
transparent
}
}
example.com {
root /var/snap/wekan/common/example.com
fastcgi / /var/run/php/php7.0-fpm.sock php
}
matomo.example.com {
root /var/snap/wekan/common/matomo.example.com
fastcgi / /var/run/php/php7.0-fpm.sock php
}
# Example CloudFlare free wildcard SSL Origin Certificate, there is example.com.pem at certificates directory with private key at to and cert at bottom.
http://example.com https://example.com {
tls {
load /var/snap/wekan/common/certificates
alpn http/1.1
}
root /var/snap/wekan/common/example.com
browse
}
static.example.com {
root /var/snap/wekan/common/static.example.com
}
```
## Related talk about MongoDB backup
Related talk, search for "mongodb" this page:
https://fosdem.org/2020/schedule/events/
There is this:
Percona Backup for MongoDB: Status and Plans
Open Source solution for consistent backups of multi-shard MongoDB
- [Slides](https://fosdem.org/2020/schedule/event/perconamongodb/attachments/slides/3768/export/events/attachments/perconamongodb/slides/3768/Percona_Backup_for_MongoDB.pdf)
- [Video webm](https://video.fosdem.org/2020/UD2.119/perconamongodb.webm)
- [Same Video mp4](https://video.fosdem.org/2020/UD2.119/perconamongodb.mp4)
## Related Sandstorm issue
[Creating a backup while the grain is running could cause corruption](https://github.com/sandstorm-io/sandstorm/issues/3186).
## Combining old and new Wekan version data
Note: Do mongodump/mongorestore only when Wekan is stopped: wekan.wekan (Snap) or wekan-app (Docker).
1. From new Wekan export all boards to Wekan JSON.
2. Backup new Wekan with mongodump.
3. Backup old Wekan with mongodump.
4. Restore old Wekan data to new Wekan with mongorestore.
5. Restore new Wekan JSON exported boards by importing them.
## Rescuing board that does not load
Wekan web UI Import/Export JSON does not have all content currently. To upgrade from old Wekan version, use mongodump/mongorestore to newest Wekan, like described below.
To import big JSON file, on Linux you can use xclip to copy textfile to clipboard:
```bash
sudo apt-get install xclip
cat board.json | xclip -se c
```
Then paste to webbrowser Wekan Add Board / Import / From previous export.
You can [save all MongoDB database content as JSON files](Export-from-Wekan-Sandstorm-grain-.zip-file). Files are base64 encoded in JSON files.
Export board to Wekan JSON, and import as Wekan JSON can make some part of board to load, but you should check is some data missing.
With Wekan Snap, you can use [nosqlbooster GUI](https://nosqlbooster.com/downloads) to login through SSH to Wekan server localhost port 27019 and browse data.
You could use [daff](https://github.com/paulfitz/daff) to compare tables.
## Using Snap Mongo commands on your bash CLI
Add to your `~/.bashrc`
```bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="$PATH:/snap/wekan/current/bin"
```
Then you can backup:
```bash
mongodump --port 27019
```
And restore:
```bash
mongorestore --drop --port 27019
```
## MongoDB shell on Wekan Snap
mongoshell.sh
```bash
#/bin/bash
export LC_ALL=C
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
mongo=$"/snap/wekan/$version/bin/mongo"
$mongo --port 27019
```
***
# Snap backup-restore v2
Originally from https://github.com/wekan/wekan-snap/issues/62#issuecomment-470622601
## Backup
wekan-backup.sh
```bash
#!/bin/bash
export LC_ALL=C
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
now=$(date +"%Y%m%d-%H%M%S")
parent_dir="/data/backups/wekan"
backup_dir="${parent_dir}/${now}"
log_file="${parent_dir}/backup-progress.log.${now}"
error () {
printf "%s: %s\n" "$(basename "${BASH_SOURCE}")" "${1}" >&2
exit 1
}
trap 'error "An unexpected error occurred."' ERR
take_backup () {
mkdir -p "${backup_dir}"
cd "${backup_dir}"
/snap/wekan/$version/bin/mongodump --quiet --port 27019
cd ..
tar -zcf "${now}.tar.gz" "${now}"
rm -rf "${now}"
}
printf "\n======================================================================="
printf "\nWekan Backup"
printf "\n======================================================================="
printf "\nBackup in progress..."
take_backup 2> "${log_file}"
if [[ -s "${log_file}" ]]
then
printf "\nBackup failure! Check ${log_file} for more information."
printf "\n=======================================================================\n\n"
else
rm "${log_file}"
printf "...SUCCESS!\n"
printf "Backup created at ${backup_dir}.tar.gz"
printf "\n=======================================================================\n\n"
fi
```
wekan-restore.sh
```bash
#!/bin/bash
export LC_ALL=C
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
makesRestore()
{
file=$1
ext=$"$(basename $file)"
parentDir=$"${file:0:${#file}-${#ext}}"
cd "${parentDir}"
printf "\nMakes the untar of the archive.\n"
tar -zxvf "${file}"
file="${file:0:${#file}-7}"
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
restore=$"/snap/wekan/${version}/bin/mongorestore"
printf "\nThe database restore is in progress.\n\n"
## Only if you get errors about existing indexes, use this below instead:
## $restore --quiet --drop --noIndexRestore -d wekan --port 27019 "${file}/dump/wekan"
$restore --quiet --drop -d wekan --port 27019 "${file}/dump/wekan"
rm -rf "${file}"
printf "\nRestore done.\n"
}
makesRestore $1
```
***
# Snap backup-restore v1
## Backup script for MongoDB Data, if running Snap MongoDB at port 27019
```bash
#!/bin/bash
makeDump()
{
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Prepares.
now=$(date +'%Y-%m-%d_%H.%M.%S')
mkdir -p /var/backups/wekan/$version-$now
# Targets the dump file.
dump=$"/snap/wekan/$version/bin/mongodump"
# Makes the backup.
cd /var/backups/wekan/$version-$now
printf "\nThe database backup is in progress.\n\n"
$dump --port 27019
# Makes the tar.gz file.
cd ..
printf "\nMakes the tar.gz file.\n"
tar -zcvf $version-$now.tar.gz $version-$now
# Cleanups
rm -rf $version-$now
# End.
printf "\nBackup done.\n"
echo "Backup is archived to .tar.gz file at /var/backups/wekan/${version}-${now}.tar.gz"
}
# Checks is the user is sudo/root
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Starts
makeDump
```
## Restore script for MongoDB Data, if running Snap MongoDB at port 27019 with a tar.gz archive.
```bash
#!/bin/bash
makesRestore()
{
# Prepares the folder used for the backup.
file=$1
if [[ "$file" != *tar.gz* ]]
then
echo "The backup archive must be a tar.gz."
exit -1
fi
# Goes into the parent directory.
ext=$"$(basename $file)"
parentDir=$"${file:0:${#file}-${#ext}}"
cd $parentDir
# Untar the archive.
printf "\nMakes the untar of the archive.\n"
tar -zxvf $file
file="${file:0:${#file}-7}"
# Gets the version of the snap.
version=$(snap list | grep wekan | awk -F ' ' '{print $3}')
# Targets the dump file.
restore=$"/snap/wekan/$version/bin/mongorestore"
# Restores.
printf "\nThe database restore is in progress.\n\n"
## Only if you get errors about existing indexes, use this below instead:
## $restore --drop --noIndexRestore wekan --port 27019 $file/dump/wekan
$restore --drop wekan --port 27019 $file/dump/wekan
printf "\nRestore done.\n"
# Cleanups
rm -rf $file
}
# Checks is the user is sudo/root.
if [ "$UID" -ne "0" ]
then
echo "This program must be launched with sudo/root."
exit 1
fi
# Start.
makesRestore $1
```
## Docker Backup and Restore
[Docker Backup and Restore](Export-Docker-Mongo-Data)
[Wekan Docker Upgrade](https://github.com/wekan/wekan-mongodb#backup-before-upgrading)
## Snap Backup
[Snap Backup and Restore](https://github.com/wekan/wekan-snap/wiki/Backup-and-restore)
[Wekan Snap upgrade](https://github.com/wekan/wekan-snap/wiki/Install#5-install-all-snap-updates-automatically-between-0200am-and-0400am)
## Sandstorm Backup
Download Wekan grain with arrow down download button to .zip file. You can restore it later.
[Export data from Wekan Sandstorm grain .zip file](Export-from-Wekan-Sandstorm-grain-.zip-file)
## <a name="cloudron">Cloudron
If those [Backup](Backup) ways are not easily found at [Cloudron](Cloudron), one way is to install [Redash](https://redash.io/) and then backup this way:
Redash works with this kind of queries:
```json
{
"collection": "accountSettings",
"query": {
"type": 1
},
"fields": {
"_id": 1,
"booleanValue": 1,
"createdAt": 1,
"modifiedAt": 1,
}
}
```
So:
1) Create this kind of query:
```json
{
"collection": "boards"
}
```
Later when you modify query, you can remove text like boards with double-click-with-mouse and delete-key-at-keyboard (or select characters with mouse and delete-key-at-keyboard), and then click collection/table >> button to insert name of next collection/table.
2) Click Save
3) Click Execute. This will cache query for use with REST API.
4) Click at right top `[...]` => `Show API key`
It looks like this:
https://redash.example.com/api/queries/1/results.json?api_key=...
5) Only when saving first collection/table, Save API key to text file script like this `dl.sh`
```bash
#!/bin/bash
# Example: ./dl.sh boards
export APIKEY=https://redash.example.com/api/queries/1/results.json?api_key=...
curl -o $1.json $APIKEY
```
6) Run save script like:
```bash
./dl.sh boards
```
Note: 1) Save 2) Execute => webbrowser can give this kind of timeout,
but downloading with API script still works:
> wekan
> Error running query: failed communicating with server. Please check your Internet connection and try again.
7) Repeat steps 1-4 and 6 for every collection/table like boards,cards, etc
8) Remove from downloaded .json files extra query related data, so that it is similar like [any other Wekan database backup JSON files](Export-from-Wekan-Sandstorm-grain-.zip-file)
9) Insert data to some other Wekan install with nosqlbooster like mentioned at page [Backup](Backup)
+155
View File
@@ -0,0 +1,155 @@
# Upgrading
Newest WeKan uses MongoDB 6.0.3.
Current working way to upgrade is:
## Docker
1. Create Mongodump of your database like at [Backup page](https://github.com/wekan/wekan/wiki/Backup)
2. Use newest WeKan docker-compose.yml from https://github.com/wekan/wekan with WRITABLE_PATH setup to Rclone/MinIO like below this page
3. Mongorestore to MongoDB 6.0.3 database
4. Use WeKan Admin Panel `Move all attachments to filesystem` button to move all attachments to MinIO.
5. Create Mongodump, that this time does not have any attachments, and is much smaller.
6. Mongorestore to MongoDB 6.0.3 database.
7. Start WeKan.
## Snap
Similar Mongodump and Mongorestore above, with these info:
- https://github.com/wekan/wekan-snap/wiki/Candidate-WeKan-Snap-Manual-Upgrade
- https://github.com/wekan/wekan/issues/4780
# Introduction
With Rclone https://rclone.org , it's possible to use many cloud filesystems, like AWS S3, MinIO https://min.io , etc.
Newest WeKan has features to move files between MongoDB GridFS and filesystem.
Instead of filesystem, Rclone mounted cloud filesystem directory can be used, like MinIO.
## Screenshot 1: Move to filesystem button moves to cloud filesystem like MinIO. S3 button does not work yet.
Note: In some cases, only buttons `Move all attachments` at top are visible. In some other cases, there is more visible, like moving all attachments of board, etc, maybe when some have been already moved.
<img src="https://wekan.github.io/rclone/wekan-admin-panel.png" width="100%" alt="Wekan Admin Panel file move" />
## Screenshot 2: Files at MinIO after moving all to filesystem
<img src="https://wekan.github.io/rclone/minio1.png" width="100%" alt="MinIO 1" />
## Screenshot 3: Files at MinIO after moving all to filesystem
<img src="https://wekan.github.io/rclone/minio2.png" width="100%" alt="MinIO 2" />
## Rclone config
Create config for example with command:
```
rclone config
```
At S3 providers, there is MinIO at https://rclone.org/s3/#minio
`/root/.config/rclone/rclone.conf`
```
[aws]
type = s3
provider = AWS
access_key_id = ACCESS-KEY-HERE
secret_access_key = SECRET-KEY-HERE
region = eu-north-1
location_constraint = eu-north-1
acl = private
[minio]
type = s3
provider = Minio
access_key_id = ACCESS-KEY-HERE
secret_access_key = SECRET-KEY-HERE
endpoint = http://192.168.0.100:9000
acl = private
```
## Listing files with Rclone
```
rclone ls aws:
rclone ls minio:
```
## MinIO config
https://min.io
Running MinIO server binary, storing files at `/home/wekan/minio/data`
```
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /home/wekan/minio/data --console-address ":9001"
```
Create bucket, access key, secret key. Then connect them with `mc` command installed from https://min.io website, here bucket wekan:
```
mc config host add wekan http://192.168.0.100:9000 ACCESS-KEY-HERE SECRET-KEY-HERE
```
## Snap
This uses minimal cache to make it work. Note that Rclone stays at foreground running, showing related messages, it does not daemonize to background.
```
sudo su
rclone mount minio:wekan/files /var/snap/wekan/common/files --vfs-cache-mode minimal
```
Sometimes it shows this kind of message:
```
2022/12/27 10:22:13 NOTICE: S3 bucket wekan path files: Streaming uploads using chunk size 5Mi will have maximum file size of 48.828Gi
```
## Docker
Rclone, short story:
```
sudo su
rclone mount minio:wekan/files /var/lib/docker/volumes/wekan_wekan-files/_data --vfs-cache-mode minimal
```
Longer story:
`docker-compose.yml` at https://github.com/wekan/wekan
```
- WRITABLE_PATH=/data
```
Docker volumes are there:
```
sudo ls /var/lib/docker/volumes/
wekan_wekan-db-dump
wekan_wekan-db
wekan_wekan-files
```
Directories there are:
```
/var/lib/docker/volumes/_data/attachments
/var/lib/docker/volumes/_data/avatars
```
## Bundle or Source
Set `WRITABLE_PATH`like in Docker example above.
## Development
In Progress direct support without Rclone, if getting it working sometime.
Meteor-Files currently uses official AWS-SDK that does not yet directly support custom endpoint like MinIO:
- https://github.com/veliovgroup/Meteor-Files/issues/862
- https://github.com/veliovgroup/Meteor-Files/blob/master/docs/aws-s3-integration.md
- https://github.com/wekan/wekan/issues/142#issuecomment-1365249290
MinIO code examples:
- https://github.com/minio/minio-js/tree/master/examples
Related RocketChat docs about MinIO:
- https://docs.rocket.chat/guides/administration/admin-panel/settings/file-upload/minio
- https://github.com/RocketChat/Rocket.Chat/tree/develop/apps/meteor/app/file-upload
- https://github.com/RocketChat/Rocket.Chat/pulls?q=is%3Apr+minio+is%3Aclosed
Storage path during developing WeKan, for example:
```
./rebuild-wekan.sh
rclone mount minio:wekan/files /home/wekan/repos/wekan/.meteor/local/.build-garbage-uslyxi.uokel/programs --vfs-cache-mode minimal
```
+165
View File
@@ -0,0 +1,165 @@
## Repair Snap WeKan
```
sudo su
snap stop wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH="/snap/wekan/current/bin:$PATH"
mongod --dbpath "/var/snap/wekan/common" --repair >> /root/repairlog.txt
snap start wekan
exit
```
Logs from Snap:
https://github.com/wekan/wekan/issues/5073
## Repair Docker WeKan
At step 12 below is actual repair MongoDB command.
Some customer of [WeKan Commercial Support](https://wekan.team/commercial-support/) ordered restore and repair of WeKan MongoDB database at UCS appliance. This was needed when changing back to previous UCS 4.x major version, when in new major UCS 5.x version Docker containers were all the time crashing and restarting, or something else got broken. Here are commands that were used while repairing.
Similarly, MongoDB may require repair, if:
- MongoDB does not recover from sudden power failure cleanly
- Disk comes full, that is worst case. Recommended are daily backups, in this case sometimes repair does not work well enough.
1. SSH to UCS appliance as root:
```
ssh root@192.168.0.100
```
2. If backup or raw database files is at external USB harddrive, look where it is inserted:
```
ls /dev
fdisk -l /dev/sdb
fdisk -l /dev/sdc
fdisk -l /dev/sdd
```
2. If external USB drive has NTFS file format, and mount complains about not having NTFS support, install NTFS support to Linux:
```
apt install ntfs-3g
```
3. Mount USB drive to /mnt
```
mount /dev/sdd1 /mnt
```
4. Stop WeKan Docker containers. If copying raw database files, WeKan and MongoDB should not be running, so that MongoDB would not be even more corrupted. (If MongoDB is running, and you have mongodump backup, you can [Backup with mongorestore](Backup)
```
docker stop wekan-db wekan-app
```
5. Find WeKan database raw files. MongoDB has various database engines, like WiredTiger, how to save raw data compressed, or other formats. WiredTiger is file format to save compressed MongoDB data. Similar like MySQL has ISAM, InnoDB etc.
```
apt -y install mlocate
updatedb
locate WiredTiger.wt
```
It can show for example USB drive and Docker container directory:
```
root@ucs:/mnt/wekan/data/db# locate WiredTiger.wt
/mnt/wekan/data/db/WiredTiger.wt
/var/lib/univention-appcenter/apps/wekan/data/db/WiredTiger.wt
```
6. Change to newly installed MongoDB data directory:
```
cd /var/lib/univention-appcenter/apps/wekan/data/db/
```
7. Look at directory files owner permissions:
```
ls -lah
```
There could be like this:
```
-rw-r--r-- 1 tss tss 1004 Jan 25 13:09 WiredTiger.turtle
-rw-r--r-- 1 tss tss 392K Jan 25 13:09 WiredTiger.wt
```
8. Move that probably empty newly installed MongoDB data elsewhere:
```
mkdir /root/new-empty-wekan-data
mv * /root/new-empty-wekan-data
```
9. Copy MongoDB raw database files from USB harddrive to docker container directory:
```
root@ucs-bdc:/var/lib/univention-appcenter/apps/wekan/data/db# cp -pR /mnt/wekan/data/db/* .
```
10. Like looked at step 7, change file owner permissions to be correct, and change directory
```
chown -R tss:tss *
cd /root
```
11. Find mongod command:
```
locate /usr/bin/mongod
```
12. Repair Docker WeKan with version of Docker MongoDB that WeKan uses, change mongod path to below. Repairing logged to textfile.
```
root@ucs:~# /var/lib/docker/overlay2/7b58483a16a2f67ee50486c00ec669940f7a95d460ee8188966fee0096e81fa2/diff/usr/bin/mongod --dbpath "/var/lib/univention-appcenter/apps/wekan/data/db" --repair >> repairlog.txt
```
13. Look what containers are running:
```
docker ps
```
14. Look what containers are not running:
```
docker ps -a
```
15. Start MongoDB first:
```
docker start wekan-db
```
16. Look what happends at MongoDB container:
```
docker logs wekan-db
```
17. Start WeKan next.
```
docker start wekan-app
```
18. Look what happends at MongoDB container.
```
docker logs wekan-app
```
19. Check are both wekan-db and wekan-app containers running, and not restarting:
```
docker ps
```
20. Try to login to WeKan with webbrowser.
21. Backup WeKan database now after repair:
```
docker exec -it wekan-db bash
cd /data
rm -rf dump
mongodump
exit
docker cp wekan-db:/data/dump .
zip -r wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip dump
```
Now backup is at wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip file.
22. At your local computer terminal (not at UCS server), transfer file to your local computer with scp:
```
scp root@192.168.0.100:/root/wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip .
```
23. Copy backup to external USB harddrive, change YEAR-MONTH-DATE-TIME-HERE to current date and time:
```
cp /root/wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip /mnt/
```
24. Look what drives are mounted:
```
df -h
```
25. Sync and save unwritted data to disk, and unmount external USB harddrive safely:
```
sync
umount /dev/sdd1
```
26. Remove external USB harddisk from server.
27. Login to WeKan, check do all WeKan boards work. In this case, all did work.
+15
View File
@@ -0,0 +1,15 @@
```
sudo snap stop wekan.wekan
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
export PATH2=$PATH
export PATH=/snap/wekan/current/bin:$PATH
mongodump --port 27019
sudo snap get wekan > snap-settings.txt
sudo snap stop wekan.mongodb
sudo mv /var/snap/wekan/common .
sudo mkdir /var/snap/wekan/common
sudo snap refresh wekan --channel=latest/candidate
```
To be continued...
@@ -0,0 +1,73 @@
If you know updates to this, please add new issue about it. Make changes to this page by cloning wiki:
```
git clone https://github.com/wekan/wekan.wiki
```
There edit Browser-compatibility-matrix.md and attach it with .txt extension or in .zip file to https://github.com/wekan/wekan/wiki/issues
## Webkit based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Safari | iOS Yes | iOS Newest | Newest | iOS, macOS
## Firefox based
Any telemetry at any Firefox based browser can be additionally most locked down with arkenfox user JS.
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
[Mypal](https://releases.wekan.team/mypal/) | No | No | Newest | For 32bit ReactOS/WinXP/Win7/etc [issue](https://github.com/wekan/wekan/issues/3132), Other 32bit browsers probably not
Firefox | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi
Morph Browser | No | Yes | Yes | [Ubuntu Touch](https://ubports.com) (based on Ubuntu 16.04) on PinePhone, OnePlus 3, [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/) (not RasPi4 yet). Works best with bluetooth or USB mouse and keyboard.
[OpenStore App](https://open-store.io/app/wekan.wekanteam) | Yes | Yes | Yes | Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), [Ubuntu Touch](https://ubports.com) app at [OpenStore](https://open-store.io/app/wekan.wekanteam) using Morph browser with Wekan demo & development server https://boards.wekan.team . Tested on [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/). PWA URL is configured here https://github.com/wekan/wekan-openstore/blob/master/wekan.desktop#L3
[Waterfox](https://www.waterfox.net) | No | No | Yes | Win/Mac/Linux, more private than Firefox, no tracking
[Floorp](https://floorp.app) | No | No | Yes | [Win/Mac/Linux](https://github.com/Floorp-Projects/Floorp/releases), more private than Firefox, [Repo](https://github.com/Floorp-Projects/Floorp)
[Mercury](https://thorium.rocks/mercury) | No | No | Yes | [Win/Linux](https://github.com/Alex313031/Mercury/releases), more private than Firefox, [Repo](https://github.com/Alex313031/Mercury)
[SeaLion](https://github.com/wicknix/SeaLion) | No | No | Yes | [MacOS 10.7-14.1 x32,x64,ppc,ppc64/Linux x64](https://github.com/wicknix/SeaLion/releases), [Repo](https://github.com/wicknix/SeaLion)
[LibreWolf](https://librewolf.net) | No | No | Yes | [Win/Mac/Linux](https://librewolf.net/installation/)
## Chromium based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Chrome | Android Yes | Android Newest | Newest | Win/Mac/Linux
Chromium | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi
Brave | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi
Vivaldi | Android Yes | Android Newest | Newest | Win/Mac/Linux
Opera | Android Yes | Android Newest | Newest | Win/Mac/Linux
Credge, Chromium Edge | Android Yes | Android | Newest | Win/Mac/Linux/Mobile
[Microsoft Store App](https://www.microsoft.com/fi-fi/p/wekan/9p2mrxvd087r#activetab=pivot:overviewtab) | Yes | Yes | Yes | At Microsoft Store of Windows 10/11 desktop, made with [PWABuilder](https://www.pwabuilder.com/). Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), changed app from EdgeHTML to Credge based with Wekan demo & development server https://boards.wekan.team
[Android Play Store App](https://play.google.com/store/apps/details?id=team.wekan.boards.twa) | Yes | Yes | Yes | Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), made with [PWABuilder](https://www.pwabuilder.com/), uses Android Chrome browser with Wekan demo & development server https://boards.wekan.team
[Thorium](https://thorium.rocks) | No | Yes | Yes | [Win/Win7/Mac/Linux/Android/RasPi](https://thorium.rocks), speed optimized
[Supermium](https://github.com/win32ss/supermium) | No | No | Yes | 32bit: Windows XP, Windows 2003
## EdgeHTML based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Legacy Edge | No | No | Not | Not compatible with newest WeKan. Worked with Wekan v4.19 and before.
## MSHTML based
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Internet Explorer | No | No | No | No | No
## Other ways to create Mobile App with Meteor
https://guide.meteor.com/cordova
Benefits:
- Can be faster, more stored at mobile
- Native features integration possibilities
## Desktop app with Meteor
https://forums.meteor.com/t/desktop-electron-meteor-app-with-todesktop/60904
## Optional Payments
- If there is sometime a need to develop payment feature, that does not exist yet
- https://forums.meteor.com/t/need-help-adding-in-app-purchases-to-a-meteor-app-specifically-adding-subscription-support-for-android-play-store/40510
- https://www.npmjs.com/package/cordova-plugin-purchase
+11
View File
@@ -0,0 +1,11 @@
## FerretDB
Replacing MongoDB with FerretDB/SQLite or FerretDB/PostgreSQL. Needs testing, what are correct settings.
https://forums.meteor.com/t/ferretdb-1-18-now-has-oplog-support-trying-replace-mongodb-6-x-with-ferretdb-postgresql-or-ferretdb-sqlite/61092
## ToroDB
ToroDB is not developed anymore. ToroDB was about adding MongoDB proxy to PostgreSQL or MySQL.
https://github.com/wekan/wekan/tree/main/torodb-postgresql
+23
View File
@@ -0,0 +1,23 @@
### Create card
At Calendar View, on Month when you click a date it will ask you if you want to create a new card and give its name. It then creates at first swimlane and at first list the card with the due date that it got from the date you clicked.
Video demonstration:
https://user-images.githubusercontent.com/70445835/184324324-b4bd466e-6873-4eef-8ca5-b6e4d9f95ac5.mp4
- How it works https://github.com/wekan/wekan/issues/2687#issuecomment-1545235649
- Fix for Calendar View Create Card https://github.com/wekan/wekan/pull/5019
- Calendar view logic https://github.com/wekan/wekan/issues/4511
## <a name="Time"></a>Time
* [Due Date](Due-Date)
* [Day of week start](Day-of-week-start)
## What features are missing
* [Calendar issues](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+calendar+label%3AFeature%3ACalendar-view)
* [Time Tracking](Time-Tracking)
* [Gantt Chart](Gantt)
+7
View File
@@ -0,0 +1,7 @@
## 1) Click right top your username
<img src="https://wekan.github.io/day/day_of_week_start_1.png" width="40%" alt="Day of Week Start 1" />
## 2) Click Change Settings => Set day of the week start => Select first day of the week from dropdown menu
<img src="https://wekan.github.io/day/day_of_week_start_2.png" width="40%" alt="Day of Week Start 1" />
+5
View File
@@ -0,0 +1,5 @@
- received - when a bug or task is found
- start - when work is started
- due - when it should be done
- end - when it's done
+19
View File
@@ -0,0 +1,19 @@
## Time Tracking
This was found 2020-05-20 at [Time Tracking Wekan issue](https://github.com/wekan/wekan/issues/812#issuecomment-631111730), thanks!
Titra Time Tracking, GPLv3
- https://titra.io/en/free-time-tracking-online/
- https://github.com/kromitgmbh/titra/
Wekan Integration:
- https://github.com/kromitgmbh/titra/wiki/Wekan-integration
***
## iCal
https://github.com/wekan/wekan/issues/2836
https://github.com/wekan/wekan-ical-server
+38
View File
@@ -0,0 +1,38 @@
1. At Windows, sync to ntp timeserver. Examples:
- `time.windows.com`
- `ntp.ubuntu.com`
- `ntp1.kolumbus.fi`
2. Dual boot to Qubes OS. At desktop top right calendar/time, set timezone to Etc/UTC.
3. At server and it's KVM VMs, edit `/etc/timezone` to `Etc/UTC`.
4. Update time at server:
```
sudo apt -y install ntpdate
sudo ntpdate ntp.ubuntu.com
```
5. Now local time shows correctly at webbrowser, like for example at Friend Desktop https://github.com/wekan/wekan/wiki/Friend
For testing any other time related code, that it shows correct local time, compare time functions results to this:
https://github.com/FriendUPCloud/friendup/blob/master/interfaces/web_desktop/apps/Convos/Scripts/chatlog.fui.js#L694
From Hogle Titlestad:
> Oh, and the most important thing.
> The first argument is a time string.
> Seconds. Not a normal date.
> Such that you can subtracck and add seconds to it.
> So input would be:
> ```
> this.parseDate( 1695981700956, false, 'Europe/Oslo' );
> ```
> e.g. Europe/Oslo is the server time zone.
> The timestamp is server time.
> For the event in question.
@@ -0,0 +1,91 @@
# Also see Snap Developer Docs
[Snap Developer Docs](https://github.com/wekan/wekan-snap/wiki/Snap-Developer-Docs)
# When adding settings to code you or somebody else wrote
Add all necessary settings that you find on code.
After doing all changes, [fix lint errors](Developer-Documentation#preventing-travis-ci-lint-errors-before-submitting-pull-requests) and if possible warnings too. You can silence errors if you really can't find solution.
Submit pull request to Wekan edge branch https://github.com/wekan/wekan/tree/edge
# Changes to server code
To use environment variables in your serverside code, use:
```
process.env.YOURSETTING
```
Example: [wekan/server/policy.js](https://github.com/wekan/wekan/blob/edge/server/policy.js)
# Changes to [config](https://github.com/wekan/wekan/blob/edge/snap-src/bin/config)
## 1) Add to beginning
At beginning there is this line:
```
# list of supported keys
keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP ..."
```
To the end of it, add name of new setting. For example:
```
keys="... AWESOME_FEATURE_ENABLED"
```
## 2) Add to bottom
Example 1: Set features not enabled as default.
```
DESCRIPTION_LDAP_ENABLED="LDAP enabled. Default: false"
DEFAULT_LDAP_ENABLED="false"
KEY_LDAP_ENABLED="ldap-enabled"
```
Example 2: If setting is different for every server, leave it empty.
```
DESCRIPTION_OAUTH2_TOKEN_ENDPOINT="OAuth2 token endpoint. Example: /oauth/token"
DEFAULT_OAUTH2_TOKEN_ENDPOINT=""
KEY_OAUTH2_TOKEN_ENDPOINT="oauth2-token-endpoint"
```
Example 3: If there is same for every server, set it to general setting.
```
DESCRIPTION_LDAP_SEARCH_FILTER="LDAP search filter. Default: (&(objectCategory=person)(objectClass=user)(!(cn=andy)))"
DEFAULT_LDAP_SEARCH_FILTER="(&(objectCategory=person)(objectClass=user)(!(cn=andy)))"
KEY_LDAP_ENABLED="ldap-enabled"
```
Example 4: If you don't know example, leave it without example.
```
DESCRIPTION_TURBO_FILTER="Turbo filter. Default: ''"
DEFAULT_TURBO_FILTER=""
KEY_TURBO_FILTER="turbo-filter"
```
# Changes to [Snap help](https://github.com/wekan/wekan/blob/edge/snap-src/bin/wekan-help)
## 1) How to quote examples
Snap settings need to be lowercase, and inside single quotes. For example:
```
snap set wekan ldap-user-search-filter='(&(objectCategory=person)(objectClass=user)(!(cn=andy)))'
```
The setting inside single quotes is the actual setting.
Actual settings can include double quotes, spaces, etc, but not single quotes. For example:
```
snap set wekan ldap-user-search-filter='"(&(objectCategory=person)(objectClass=user)(!(cn=andy)))"'
```
## 2) What to add as setting to Wekan help
Example 1:
```
echo -e "OAuth2 Token Endpoint. Example: /oauth/token"
echo -e "To enable the OAuth2 Token Endpoint of Wekan:"
echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT='/oauth/token'"
echo -e "\t-Disable the OAuth2 Token Endpoint of Wekan:"
echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT=''"
echo -e "\n"
```
So all you add need to be above of this line:
```
# parse config file for supported settings keys
```
+3
View File
@@ -0,0 +1,3 @@
- https://www.sitepoint.com/javascript-async-await/
- https://www.freecodecamp.org/news/javascript-async-await-tutorial-learn-callbacks-promises-async-await-by-making-icecream/
- https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous
+204
View File
@@ -0,0 +1,204 @@
## About markdown changes
Wekan v4.29 changes markdown rendering from [marked](https://github.com/markedjs/marked) to [markdown-it](https://github.com/markdown-it/markdown-it).
## About emoji
With markdown-it, also [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji) plugin has been added, supporting [full list of GitHub emojis](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.json).
Example emoji code, that you can add for example to card name, card description etc:
```
:rainbow: :thumbsup: :100:
```
That shows emojis :rainbow: :thumbsup: :100:
## About other markdown-it plugins
For markdown-it, there are also other [syntax extensions](https://github.com/markdown-it/markdown-it#syntax-extensions) where some are listed at that markdown-it page, and [others at npmjs.com](https://www.npmjs.org/browse/keyword/markdown-it-plugin).
For example, how to get some [mermaid plugin](https://www.npmjs.com/search?q=markdown-it-mermaid) working so that some syntax works for https://mermaid-js.github.io/mermaid/ ?
## How you could add another plugin
Using newest Ubuntu amd64:
# Meteor 2
### 1. Install git and configure it
```
sudo apt -y install git
git config --global user.name "Yourfirstname Yourlastname"
git config --global user.email email-address-you-use-at-github@example.com
git config --global push.default simple
nano .ssh/config
```
There add your User (GitHub username) and IdentityFile (Your ssh private key. Not public key that has .pub).
For indentation, use one tab.
```
Host *
IdentitiesOnly=yes
Host github.com
Hostname github.com
User xet7
IdentityFile ~/.ssh/id_xet7ed
```
Save and Exit with Ctrl-o Enter Ctrl-x Enter
If you do not have ssh key, create it:
```
ssh-keygen
```
And press Enter about 3 times, until you have private key at `~/.ssh/id_rsa` and public key at `~/.ssh/id_rsa.pub`
Add public key `.pub` to your github account web interface.
Add path to Meteor:
```
nano .bashrc
```
There at bottom add:
```
export PATH=~/.meteor:$PATH
```
Save and Exit with Ctrl-o Enter Ctrl-x Enter
### 2. Create fork of `https://github.com/wekan/wekan` at GitHub web page
```
mkdir repos
cd repos
git clone git@github.com:YourGithubUsername/wekan.git
cd wekan
```
### 3. Select option 1 to install dependencies, and then Enter.
```
./rebuild-wekan.sh
1
./rebuild-wekan.sh
2
./rebuild-wekan.sh
3
```
That does: 1 install dependencies, 2 builds wekan, 3 starts wekan in development mode with command `meteor`, so it can detect if some file changes and try to rebuild automatically and reload webbroser. But, still sometimes, it may need stopping with Ctrl-c and full build with option 2.
And then [register and login](Adding-users) at http://localhost:4000
### OPTIONAL, NOT NEEDED: 5. Add new plugin package
```
meteor npm install markdown-it-something --save
```
Edit file `wekan/packages/markdown/src-integration.js` and add using that new package, using code example from that new plugin page, or similar like emoji plugin was added.
### 7. Test
Test does that new plugin syntax work, for example in card title, card description etc on other input fields.
### 8. If it works, create pull request
If normal markdown, emoji, and your new added plugin syntax all work, commit your changes:
```
git add --all
git commit -m "Added plugin markdown-it-something."
git push
```
And then at your GitHub for `https://github.com/YOUR-GITHUB-USERNAME/wekan` click `Create pull request`.
# Meteor 3
At 2024-06-26, it looks like from https://nodejs.org/en that Node.js LTS version is 20.15.0 , so change to newest Node.js LTS, delete old Meteor:
```
sudo n 20.15.0
sudo npm -g install npm
cd
rm -rf .meteor
```
Check how to install newest Meteor from Meteor 3 PR at https://github.com/meteor/meteor/pull/13163 , for example:
```
npx meteor@rc
```
Check what branches there are:
```
cd repos/wekan
git branch -a
```
Change to Meteor 3 branch:
```
git checkout feature-meteor3
```
Build wekan:
```
./rebuild-wekan.sh
2
```
If there are errors, try to fix them.
Or try to run wekan:
```
./rebuild-wekan.sh
3
```
# Updating
There are usually updates both for npm packages and Meteor
Updating npm packages:
```
npm update
```
Checking for vulnerable packages:
```
npm audit
```
Fixing vulnerable npm packages by updating to newer packages:
```
npm audit fix
```
If that did not help, use force:
```
npm audit fix --force
```
If that did not help, read links from that `npm audit` command did show, remove deprecated dependencies, update to other maintained dependencies.
Updating to next Meteor release:
```
meteor update
```
Updating to specific Meteor release:
```
meteor update --release METEOR@3.0-rc.4
```
Trying to update all Meteor packages:
```
meteor update --release METEOR@3.0-rc.4 --all-packages
```
Allowing incompatible updates, that may sometime work:
```
meteor update --release METEOR@3.0-rc.4 --all-packages --allow-incompatible-update
```
If you are changing Meteor and Node.js versions, you may need to reset Meteor:
```
meteor reset
```
Or alternatively, delete wekan repo (if you did not need any changes you made), and clone wekan repo again, and then build etc.
+115
View File
@@ -0,0 +1,115 @@
## Maximum Call Stack Size Exceeded
https://github.com/wekan/wekan/issues?q=is%3Aissue+maximum+call+stack+is%3Aclosed
https://stackoverflow.com/questions/75869629/ios-websocket-close-and-error-events-not-firing
This can happen, when there is too much or incompatible code at browserside, for example at iOS Safari.
To fix it:
1. Move ExcelJS from browserside to run at serverside https://github.com/wekan/wekan/pull/3871
2. Use Bundle Visualizer to see what is the size of dependencies, and try what can be moved to serverside like at step 1, that bundle visualizer is used in this script https://github.com/wekan/wekan/blob/main/rebuild-wekan.sh
```
meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000 --extra-packages bundle-visualizer --production 2>&1 | tee ../log.txt
```
3. Make dependencies smaller. For example, use only required files, and do not include all dependencies: https://github.com/wekan/wekan/commit/23e5e1e3bd081699ce39ce5887db7e612616014d . In that commit, package was forked to packages directory, then renamed, and added with `meteor add packagename`, where package name does not have character `:`
4. Use Browserstack.com to see errors at browser / inspect / console, or use iOS or other device emulators, to see error messages. Testing at real device is more important, because they could work differently than emulators, emulators sometimes do not emulate all same features. Those error messages have file where error happened, and line number, like `something.js:301` . From there, scroll up a little, look at what function or what package dependency it is where it happened. If possible, try to move that package serverside, like at step 1. Or alternatively, look is it possible to remove or change to some other compatible dependency.
5. See what are the dependencies at your Meteor based software, compared to WeKan dependencies that are usually already upgraded to newest Meteor, is there any differences where changing to correct dependencies could help you to upgrade to newest Meteor:
- https://github.com/wekan/wekan/blob/main/package.json
- https://github.com/wekan/wekan/blob/main/.meteor/packages
- https://github.com/wekan/wekan/blob/main/.meteor/versions
- https://github.com/wekan/wekan/blob/main/.meteor/release
5. If you get some errors, search are those same already fixed in WeKan/Meteor/RocketChat, could you fix them same way:
- https://github.com/wekan/wekan/blob/main/CHANGELOG.md
- https://github.com/wekan/wekan/issues
- https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aclosed
- https://github.com/meteor/meteor/issues
- https://github.com/meteor/meteor/issues?q=is%3Aissue+is%3Aclosed
- https://github.com/RocketChat/Rocket.Chat/issues
- https://github.com/RocketChat/Rocket.Chat/issues?q=is%3Aissue+is%3Aclosed
6. If you have some webserver providing SSL/TLS, check that you have websockets enabled:
- https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config
- https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config
- https://github.com/wekan/wekan/wiki/Apache
- OpenLiteSpeed https://github.com/wekan/wekan/issues/3334#issuecomment-723651328
- https://github.com/wekan/wekan/wiki/Local-self-signed-TLS
- https://github.com/wekan/wekan/wiki/Traefik-and-self-signed-SSL-certs
## OLD: TODO
[Quote from advise](https://github.com/meteor/meteor/issues/9796#issuecomment-443520767):
> Identify the core service your app is providing and make sure it is running independently. Put everything non-critical, including reporting, on some other system.
[Look at scaling tips here](https://github.com/meteor/meteor/issues/9796#issuecomment-411373831), quote:
> smeijer commented 25 days ago
> Just wanted to let know that I haven't experienced this issue anymore since I've replaced a lot of `meteor publications` with `apollo/graphql requests`.
>
> The reactivity is thereby lost, but in my case a 30sec poll is also fine. On the places that I do require reactivity, I only `publish` a single `timestamp`. This timestamp is passed through to `apollo`, which triggers a `refetch` when the timestamp is changed.
>
> The [discussion here](https://forums.meteor.com/t/implementing-livedocument-as-an-alternative-to-livequery-discussion/40152) has also been helpfull to improve performance here and there.
[Rocket.Chat scaling tips](https://rocket.chat/docs/installation/manual-installation/multiple-instances-to-improve-performance/)
## Kadira
- https://github.com/edemaine/kadira-compose
- https://github.com/meteor/meteor-apm-agent
- https://github.com/kadira-open/kadira-server
- https://www.gethappyboards.com/2017/07/rolling-out-your-own-instance-of-kadira/
## Finding memory leaks
**[Collect a heap profile and then analyze it](https://github.com/v8/sampling-heap-profiler)**
[Older article: How to Self Detect a Memory Leak in Node](https://www.nearform.com/blog/self-detect-memory-leak-node/)
## 100% CPU usage
1) Increase ulimit system wide to 100 000 in systemd config.
2) Wekan Javascript code has [increaded fiber poolsize](https://github.com/wekan/wekan/blob/main/server/authentication.js#L5-L9).
3) There is [on-going 100% CPU usage Meteor issue](https://github.com/meteor/meteor/issues/9796#issuecomment-400079380) and hopefully [fixes to Node.js will land in Node v8.12](https://github.com/nodejs/node/pull/21593#issuecomment-403636667) sometime. Node 8.12 is now released and official version included at Wekan.
## Scaling to thousands of users
[Production setup at AWS](AWS)
## Current versions of dependencies
[Dockerfile](https://github.com/wekan/wekan/blob/main/Dockerfile), versions of Meteor.js, Node etc listed at beginning.
[Included Meteor packages](https://github.com/wekan/wekan/blob/main/.meteor/packages)
[Included Meteor package versions](https://github.com/wekan/wekan/blob/main/.meteor/versions)
[Added packages at package.json](https://github.com/wekan/wekan/blob/main/package.json)
## Build from source
Wekan:
- On any x64 hardware that has Ubuntu 14.04 or Debian 9 or newer installed directly or in VM:
[Build from source scripts](https://github.com/wekan/wekan-maintainer/tree/master/virtualbox)
Wekan for Sandstorm:
- Install above Wekan from source
- Install [Sandstorm locally](https://sandstorm.io/install) with `curl https://install.sandstorm.io | bash`, select dev install
- Install [meteor-spk](https://github.com/sandstorm-io/meteor-spk)
- Get 100% CPU issue fibers fixed node, and copy it to spk directory:<br />
`wget https://releases.wekan.team/node`<br />
`chmod +x node`<br />
`mv node ~/projects/meteor-spk/meteor-spk-0.4.0/meteor-spk.deps/bin/`
- Add to your /home/username/.bashrc : <br /> `export PATH=$PATH:$HOME/projects/meteor-spk/meteor-spk-0.4.0`
- Close and open your terminal, or read settings from .bashrc with<br />`source ~/.bashrc`
- `cd wekan && meteor-spk dev`
- Then Wekan will be visible at local sandstorm at http://local.sandstorm.io:6080/
- Sandstorm commands: `sudo sandstorm`. [Release scripts](https://github.com/wekan/wekan-maintainer/tree/master/releases). Official releases require publishing key that only xet7 has.
Docker:
- `git clone https://github.com/wekan/wekan`
- `cd wekan`
- Edit docker-compose.yml script ROOT_URL etc like documented at https://github.com/wekan/wekan-mongodb docker-compose.yml script
- `docker-compose up -d --build`
+136
View File
@@ -0,0 +1,136 @@
## WeKan Interview 2023-12-08 starts at 22min 22sec
https://www.youtube.com/watch?v=ke-mbnZM3zE
## Screenshot of Meteor WeKan
<img src="https://wekan.github.io/wekan-dark-mode.png" width="100%" alt="Meteor WeKan screenshot" />
## Description of Meteor WeKan
- WeKan Open Source kanban with MIT license.
- Translated to 70+ languages https://explore.transifex.com/wekan/wekan/
- Used in most countries of the world https://snapcraft.io/wekan
- Biggest user have about 30k users, using many pods at Kubernetes
- Changelog https://github.com/wekan/wekan/blob/main/CHANGELOG.md
- Commercial Support at https://wekan.team/commercial-support/ . Currently looking who could sponsor more of maintenance and development.
## How much effort to create Meteor WeKan, in COCOMO model
- WeKan 134k lines of code: 34 years of effort, 316 contributors https://openhub.net/p/wekan
- Meteor.js, 224k lines of code: 59 years of effort, 819 contributors https://openhub.net/p/meteor-js
- Since December 2016, WeKan maintainer https://github.com/xet7 :
- has added and removed about 4M lines of code https://github.com/wekan/wekan/graphs/contributors
- https://openhub.net/accounts/xet7
## Meteor WeKan Browser support
- Javascript enabled Desktop and Mobile Safari/Chromium/Firefox based browsers
- Apps at Play Store, Windows Microsoft Store, Ubuntu Touch OpenStore https://github.com/wekan/wekan/wiki/Browser-compatibility-matrix
- Alternatively, for self-hosted WeKan, create PWA icon https://github.com/wekan/wekan/wiki/PWA
- Using WeKan with big touchscreen https://github.com/wekan/wekan/wiki/Touch-Screen-support
## Meteor WeKan Server
- Meteor.js 2.x, Node.js 14.x https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 , MongoDB 6.x
- CPU: amd64, arm64, s390x, Source Bundle at https://github.com/wekan/wekan/wiki/Raspberry-Pi
- Windows On-Premise: https://github.com/wekan/wekan/wiki/Offline
- Mac: Docker, or at https://github.com/wekan/wekan/wiki/Mac
- Newest at platforms: Source Bundle, Snap Candidate, Docker, Kubernetes https://wekan.github.io
- Platforms that will be updated to be up-to-date: Snap Stable, Sandstorm, UCS https://wekan.github.io
## Meteor WeKan Features
- [WeKan Design Principles](https://github.com/wekan/wekan/wiki/Design-Principles)
- Realtime UI. When someone makes change, like drag card or add text, everyone will see changes immediately. This is because Meteor listens to MongoDB change stream, and updates UI. For some rare cases, there needs to be reload of page, those need to be fixed.
- Whitelabel: Change product name and product image at login screen and board left top corner. Not changing favicon, because there are 100+ favicons for different devices.
- Drag Drop at Desktop and Mobile:
- Board Icons, Swimlanes, Lists, Cards, Checklists, Checklist Items
- Drag handles, per screen https://github.com/wekan/wekan/wiki/Drag-Drop
- Some features similar to Trello and Jira. Some features not in Trello and Jira.
- IFTTT Rules like Trello Butler https://github.com/wekan/wekan/wiki/IFTTT , translated to all supported languages. Trello Butler is only In English.
- Many Assignees like in Jira.
- Change background image and Card Cover. Change Theme. Change color of Boards, Swimlane, List, Card, Label.
- Markdown at: Board name and description, Swimlane, List, Card title and description, Checklist and Checklist Item, Subtask title, https://github.com/wekan/wekan/wiki/Wekan-Markdown
- Emoji https://github.com/wekan/wekan/wiki/Emoji
- MathML
- Preview card attachment image and PDF
- Show Start at End Dates of card at Calendar of Swimlanes/Lists/Calendar dropdown menu
- Custom Fields https://github.com/wekan/wekan/wiki/Custom-Fields
- Subtasks https://github.com/wekan/wekan/wiki/Subtasks
- Planning Poker / Scrum Poker at Card https://github.com/wekan/wekan/wiki/Planning-Poker . No other card games yet ;)
- For board actions, like move card etc, Per Board and Global Outgoing and 2-way webhooks to Chat (RocketChat, Slack, Discord etc), NodeRED, or PHP webhook receiver like https://github.com/wekan/webhook
- At top right username menu:
- Search All Boards, with search options
- Public Boards. Board can be set private or public. At Admin Panel is option to disable public boards, so all boards are private.
- Change Language
- My Cards and Due Cards: Show cards where you are member or assignee, from all boards
- At top of current board:
- Filter cards, by user etc
- Multi-Selection, checkmark and drag many cards at once
- Sort current board
- Python and PHP based additional features https://github.com/wekan/wekan/wiki/Python
- Admin Panel:
- Organizations/Teams/People. Impersonate User, logged to database when someone uses that feature.
- Customize Translations https://github.com/wekan/wekan/wiki/Customize-Translations
## Technical details
- Reactive Cache
- mfilser tested speed improvement for half a year, and finally made huge PR to WeKan v7.00 to make all of WeKan use Reactive cache https://github.com/wekan/wekan/pull/5014
- Reactive Cache Repo https://github.com/wekan/meteor-reactive-cache , xet7 updated dependencies
- Big performance improvements https://github.com/wekan/wekan/issues/5000
- Using same style of API for client and serverside
- Use more ReactiveCache than MiniMongo
- Optimizing and Debugging Meteor, reducing size, links to WeKan dependencies https://github.com/wekan/wekan/wiki/Debugging
- Custom OIDC/OAuth2 login
- Repo https://github.com/wekan/wekan/tree/main/packages/wekan-oidc
- Features:
- At Admin Panel, you can change text of login page button `Login with OIDC`
- Auth0 https://github.com/wekan/wekan/wiki/OAuth2#auth0 . This did take about half year to implement by xet7, was not available anywhere else for Meteor.
- Oracle OIM. https://github.com/wekan/wekan/wiki/Oracle-OIM . For this, customer provided some code. xet7 added fix to make login work even when some login field was missing data, by taking data from other field, all this while xet7 did not have access to customers Oracle OIM, just guessing about what code to add, and it worked.
- GitLab https://github.com/wekan/wekan/wiki/OAuth2#gitlab-providing-oauth2-login-to-wekan
- RocketChat https://github.com/wekan/wekan/wiki/OAuth2#rocketchat-providing-oauth2-login-to-wekan
- Nextcloud https://github.com/wekan/wekan/wiki/Nextcloud
- ADFS 4.0 using OAuth2 and OpenID https://github.com/wekan/wekan/wiki/ADFS
- Azure https://github.com/wekan/wekan/wiki/Azure
- Keycloak https://github.com/wekan/wekan/wiki/Keycloak
- Google login https://github.com/wekan/wekan/wiki/Google-login
- Custom LDAP
- LDAP https://github.com/wekan/wekan/wiki/LDAP
- LDAP AD Simple Auth https://github.com/wekan/wekan/wiki/LDAP-AD-Simple-Auth
- Default board for users https://github.com/wekan/wekan/pull/5098
- Brute Force Accounts Lockout https://github.com/wekan/wekan/wiki/Accounts-Lockout
- Markdown, Emoji, MathML, sanitizing https://github.com/wekan/wekan/blob/main/packages/markdown/src/template-integration.js
- Many security fixes from Responsible Disclosure https://wekan.github.io/hall-of-fame/
## Upcoming Features
- CAS https://github.com/wekan/wekan/wiki/CAS
- SAML https://github.com/wekan/wekan/wiki/SAML
## Video
- Creator of WeKan, mquandalle (Maxime Quandalle) https://www.youtube.com/watch?v=N3iMLwCNOro
- https://github.com/wekan/wekan/wiki/FAQ#what-was-wekan-fork--wefork
- Maintainer of WeKan since December 2016, xet7 (Lauri Ojansivu), about WeKan Multiverse at EU NGI Dapsi https://www.youtube.com/watch?v=BPPjiZHVeyM . More about Multiverse at https://github.com/wekan/wekan/wiki/WeKan-Multiverse-Roadmap
## Maybe?
- https://github.com/frozeman/meteor-persistent-minimongo2
## Upcoming upgrades to Meteor 3.0
- This Week in MeteorJS: 22 September 2023 https://www.youtube.com/watch?v=UWVL1xUP9r0
- There Jan Dvorak IV https://github.com/StorytellerCZ commented chat: "We should do deep dive into WeKan!"
- So here is The Deep Dive!
- Questions for upcoming "This Week in MeteorJS", some already mentioned to be upcoming:
- How to upgrade dependencies to Meteor 3.0 ? Some answer was to mention Meteor version at package dependency:
<img src="https://wekan.github.io/upgrade-meteor3-new.png" width="100%" alt="Meteor 3.0 upgrading dependencies" />
- But what if adding dependency adds some more error messages? Probably that depends on error message, like here when
trying to upgrade to Meteor 3.0 alpha 15: https://github.com/wekan/wekan/issues/5142
- https://forums.meteor.com/t/my-journey-towards-meteor-3-0/60001/23
- https://github.com/bratelefant/Meteor-Files
- https://github.com/bratelefant/meteor-roles
- https://github.com/bratelefant/meteor-multitenancy
+23
View File
@@ -0,0 +1,23 @@
## WeKan Design Principles
- Prevent messing up something https://github.com/wekan/wekan/wiki/Monkey-Proof-Software
- Original WeKan Design, that WeKan currently has: Intuitive, easy to figure out, polished UI/UX, menu options are there where you would expect then to be. Try to fix anything unexpected. New features added there where it makes most sense. And not so many duplicate menus and texts like Trello.
- Not the exact design of Trello https://github.com/wekan/wekan/wiki/FAQ#why-does-wekan-look-so-different-now-compared-to--v09 . Also not the exact design of any other software. But note that design of all software changes often, when they are in active development.
- Some features like Trello:
- Import from Trello
- Shortcuts https://github.com/wekan/wekan/issues/1878
- IFTTT Rules like Trello Butler https://github.com/wekan/wekan/wiki/IFTTT
- Progress bar of checklist
- Some features like Jira:
- Multiple assignees
- Some features not in Trello, like:
- FOSS with MIT license
- Self-hosting
- Swimlanes
- All the use cases of WeKan feature/fix contributors
- Cross-platform. Support many CPU/OS/Browsers for Desktop and Mobile. Add support for more.
- https://github.com/wekan/wekan/wiki/Browser-compatibility-matrix
- https://github.com/wekan/wekan/wiki/PWA
- https://github.com/wekan/wekan/wiki/Offline
- https://github.com/wekan/wekan/wiki/Mac
- https://github.com/wekan/wekan/wiki/Raspberry-Pi
@@ -0,0 +1,106 @@
# Style guide
We follow the [meteor style guide](https://guide.meteor.com/code-style.html#javascript).
Please read the meteor style guide before making any significant contribution.
# Stories about how Wekan works, and developing Wekan
- https://www.mongodb.com/docs/drivers/node/v3.7/fundamentals/promises/
- [Do not use code formatters like Prettier and ESLint](https://github.com/wekan/wekan/pull/4633#issuecomment-1214214591)
- [How realtime board updates work](https://github.com/wekan/wekan/issues/3788#issuecomment-834649553)
- [Mobile Web interface](https://github.com/wekan/wekan/issues/3566#issuecomment-778700604)
- [How to add RTL support](https://github.com/wekan/wekan/issues/3376#issuecomment-766092425)
- [How to code Part 1](https://blog.wekan.team/2019/04/howto-code-part-1-learning-to-learn/)
- [First time Wekan contributor easily figures out Wekan and develops big features](https://blog.wekan.team/2018/05/wekan-v1-00-released/)
- [Benefits of contributing your features to upstream Wekan](https://blog.wekan.team/2018/02/benefits-of-contributing-your-features-to-upstream-wekan/)
- [Excellent example how pull requests are improved and integrated, and not needed commits removed](https://github.com/wekan/wekan/pull/1470)
- [How to add dependency](https://github.com/wekan/wekan/discussions/5235)
- [How to add set default view feature](https://github.com/wekan/wekan/discussions/5233)
- [Adding SVG image](https://github.com/wekan/wekan/discussions/5211#discussioncomment-7765365)
## Building code and submitting pull request
- [Building code and submitting pull request](emoji#how-you-could-add-another-plugin)
- When you start `meteor` command, it watches for changes to files in wekan directory and subdirectories, and if it detects changed code, it starts rebuilding bundle and then reloads webbrowser after that automatically
- Also look at meteor changelog mentioned new feature `hot reload` how that could make reloading faster
## VSCode / VSCodium
- I use [VSCodium](https://vscodium.com) that has MS tracking code removed
- Plugin Prettier for right click format javascript code with prettier
- There could be other plugins for Meteor, Jade, Stylus, Dockerfile, etc
## Finding code
There is find.sh script that ignores generated directories, finds code in subdirectories, and paginates with less. For example, finding how search cards is implemented:
```
cd wekan
./find.sh js-search
```
When you run this, you see .jade template files where is search input box, and .js files where is the search code. CSS is in .styl files.
## Getting Started
- Currently Wekan development is done mainly at Ubuntu 20.10 64bit, but building Wekan does work on any Debian, Ubuntu, WSL Ubuntu 20.04, [Mac](Mac). Sametime maybe on [Windows](Windows) with `choco install -y meteor` and installing packages it then asks for with `meteor add ...` or `meteor npm install --save ...` and then running meteor again.
- Look through old [pull requests](https://github.com/wekan/wekan/pulls)
- Read Wekan source code, you can use some git history viewer GUI like gitk
- Read [Meteor documentation](https://docs.meteor.com/) for [Meteor version](https://github.com/wekan/wekan/blob/main/.meteor/release) in use, other versions mentioned at [Dockerfile](https://github.com/wekan/wekan/blob/main/Dockerfile)
- Docker up-to-date way: You can clone wekan/wekan repo and update docker-compose.yml file ROOT_URL etc as documented at https://github.com/wekan/wekan-mongodb commented docker-compose.yml file, install docker, and build from source with docker with "docker-compose up -d --build"
- Docker not up-to-date way: [Docker environment for Wekan development](https://github.com/wekan/wekan-dev).
## Pull Request Workflow (Please read before submitting PR's)
- If package is available on meteor https://atmospherejs.com `meteor add packagename` or https://www.npmjs.com `meteor npm install packagename` then it's enough to add package that way, and there is no need to clone repo in [rebuild-wekan.sh](https://github.com/wekan/wekan-maintainer/tree/master/releases) script.
- When doing pull requests, only add additions and changes to English at wekan/i18n/en.i18n.json . Other translations are done at [https://app.transifex.com/wekan/](https://app.transifex.com/wekan/).
- If you have fix to some existing pull request, add your fix as comment. Do not post new pull request.
- For new features add new pull request, if there is none already.
- remove all console.log statements
- [Here is how to remove commits from pull request](https://stackoverflow.com/questions/36168839/how-to-remove-commits-from-pull-request)
## Preventing Travis CI lint errors before submitting pull requests
- NOTE: Travis is currently broken and always shows warnings and errors like variables not defined or not used, so if your code works, ignore Travis.
- Eslint for linting. To prevent Travis CI lint errors, you can test for lint errors by installing `npm install eslint` and running it with `npm run lint` and trying automatic fixing with `eslint --fix filename.js`
- There is also probably not-currently-working as of 2018-05-05 [jsbeautifer website](http://jsbeautifier.org) with settings Indent with 2 spaces (topmost dropdown), [X] Space before conditional: "if(x)" / "if (x)", [X] Use JSLint-happy formatting tweaks.
## Choosing issues to work on
- You are free to select what feature to work on.
- Leave a comment on an issue saying that you're working on it, and give updates as needed.
- Work and concentrate on one issue at a time and finish it, before moving to other issue.
- Keep list of your contributions on your personal website.
- Keep track of time it takes to implement each part of a feature, so you can estimate what time it would take to implement similar feature. After implementing feature, review your estimate was it correct, make improvements to your process and estimates, also keeping enough time allocated in estimate if something is harder to implement. Employers look for coders with proven track record.
- You can ask for comments from others, but usually those feature requests are clearly defined how they should work. You can place those Settings options there where it seems most logical for you.
Main point is to be friendly to those commenting of your code, and incorporate those suggestions that make most sense.
# Build Pipeline
- Templates are written in [JADE](https://naltatis.github.io/jade-syntax-docs/) instead of plain HTML. Also see [HTML to JADE converter](http://html2jade.org/).
- CSS is written in the [Stylus](http://stylus-lang.com/) precompiler - see [Stylus to CSS converter](https://mikethedj4.github.io/Stylus2CSS/), and
- Meteor templates are created as BlazeLayout templates.
- Instead of the allow/deny paradigm a lot of the `collections` defined in the project use `mutations` to define what kinds of operations are allowed.
For further details look for the 'feature summaries' in the Wiki (still in progress) otherwise go through the git history and see how old features were built. Might I suggest the Start and Due date feature [wefork#26](https://github.com/wefork/wekan/pull/26)
# Translations
If adding new features, please also support the internationalization features built in. Refer to the [[Translations]] wiki page.
# Export From Trello
It's possible to import your existing boards from Trello. Instructions [[here|migrating-from-trello]]
# Directory Structure Details
[Directory Structure](Directory-Structure)
# Chat
[![Wekan chat][vanila_badge]][vanila_chat]
[rocket_chat]: https://chat.indie.host/channel/wekan
[vanila_badge]: https://vanila.io/img/join-chat-button2.png
[vanila_chat]: https://community.vanila.io/wekan
+187
View File
@@ -0,0 +1,187 @@
# Routing
We're using [FlowRouter](https://github.com/kadirahq/flow-router) client side router inside **[config/router.js](https://github.com/wekan/wekan/tree/main/config/router.js)**.
For accounts there is [AccountsTemplates](https://github.com/meteor-useraccounts) configured in **[config/accounts.js](https://github.com/wekan/wekan/tree/main/config/accounts.js)**.
# Client
## public
Files in this directory are served by meteor as-is to the client. It hosts some (fav)icons and fonts.
**[wekan-manifest.json](https://github.com/wekan/wekan/tree/main/wekan-manifest.json)**: goes into `link rel="manifest"` in the header of the generated page and is a [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest).
## components
* **[activities](https://github.com/wekan/wekan/tree/main/client/components/activities)**:
* **[activities.jade](https://github.com/wekan/wekan/tree/main/client/components/activities/activities.jade)**: `activities` template for the list of activities placed inside a `sidebar-content`; uses `boardActivities` or `cardActivities` depending on `mode`; <span style="color:red">*XXX: does this mean that sidebar should be visible in board list mode? when does the `board` activity gets shown?*</span>
* **[comments.jade](https://github.com/wekan/wekan/tree/main/client/components/activities/comments.jade)**: `commentForm` template used in `card-details-canvas` for adding comments;
* **[boards](https://github.com/wekan/wekan/tree/main/client/components/boards)**:
* **[boardArchive.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardArchive.jade)**: `archivedBoards` template for the modal dialog showing the list of archived boards that might be restored;
* **[boardBody.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardBody.jade)**: top level template for presenting a board is `board` and, based on screen size and current state, it uses either `cardDetails` or `boardBody` templates; `boardBody` is the one including the `sidebar`, each `list`, `cardDetails` for larger screens when a card is selected and the `addListForm` for adding a new list (also defined in this file);
* **[boardHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardHeader.jade)**: `boardHeaderBar`, `boardMenuPopup`, `boardVisibilityList`, `boardChangeVisibilityPopup`, `boardChangeWatchPopup`, `boardChangeColorPopup`, `createBoard`, `chooseBoardSource`, `boardChangeTitlePopup`, `archiveBoardPopup`, `outgoingWebhooksPopup`;
* **[boardsList.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardsList.jade)**: `boardList` and `boardListHeaderBar` for the list of boards in the initial screen;
* **[cards](https://github.com/wekan/wekan/tree/main/client/components/cards)**:
* **[attachments.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/attachments.jade)**: `cardAttachmentsPopup`, `previewClipboardImagePopup`, `previewAttachedImagePopup`, `attachmentDeletePopup`, `attachmentsGalery`;
* **[cardDate.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/cardDate.jade)**: `editCardDate` and `dateBadge` templates;
* **[cardDetails.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/cardDetails.jade)**: `boardsAndLists` is the usual layout for a board display with `boardLists` being used in sandstorm where each board is independent;`cardDetails`, `editCardTitleForm`, `cardDetailsActionsPopup`, `moveCardPopup`, `copyCardPopup`,`cardMembersPopup`,`cardMorePopup`, `cardDeletePopup`;
* **[cardTime.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/cardTime.jade)**: `editCardSpentTime` and `timeBadge` templates;
* **[checklists.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/checklists.jade)**: `checklists`, `checklistDetail`, `checklistDeleteDialog`, `addChecklistItemForm`, `editChecklistItemForm`, `checklistItems`, `itemDetail`;
* **[labels.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/labels.jade)**: `formLabel`, `createLabelPopup`, `editLabelPopup`, `deleteLabelPopup`, `cardLabelsPopup`;
* **[minicard.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/minicard.jade)**: has the `minicard` template
* **[forms](https://github.com/wekan/wekan/tree/main/client/components/forms)**: **[inlinedform.jade](https://github.com/wekan/wekan/tree/main/client/components/forms/inlinedform.jade)** has the`inlinedForm` template;
* **[import](https://github.com/wekan/wekan/tree/main/client/components/import)**:
* **[import.jade](https://github.com/wekan/wekan/tree/main/client/components/import/import.jade)**: `importHeaderBar`, `import`, `importTextarea`, `importMapMembers`, `importMapMembersAddPopup` are all templates used for importing Trello (via **[trelloMembersMapper.js](https://github.com/wekan/wekan/tree/main/client/components/import/trelloMembersMapper.js)**) and Wekan (via **[wekanMembersMapper.js](https://github.com/wekan/wekan/tree/main/client/components/import/wekanMembersMapper.js)**) boards;
* **[lists](https://github.com/wekan/wekan/tree/main/client/components/lists)**:
* **[list.jade](https://github.com/wekan/wekan/tree/main/client/components/lists/list.jade)**: `list` is the simple, main template for lists;
* **[listBody.jade](https://github.com/wekan/wekan/tree/main/client/components/lists/listBody.jade)**: `listBody`, `addCardForm`, `autocompleteLabelLine` templates;
* **[listHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/lists/listHeader.jade)**: `listHeader`, `editListTitleForm`, `listActionPopup`, `boardLists`, `listMorePopup`, `listDeletePopup`, `setWipLimitPopup`, `wipLimitErrorPopup` templates;
* **[main](https://github.com/wekan/wekan/tree/main/client/components/main)**:
* **[editor.jade](https://github.com/wekan/wekan/tree/main/client/components/main/editor.jade)**: `editor` and `viewer` templates;
* **[header.jade](https://github.com/wekan/wekan/tree/main/client/components/main/header.jade)**: `header` and `offlineWarning` templates; if the user is connected we display a small "quick-access" top bar that list all starred boards with a link to go there (this is inspired by the Reddit "subreddit" bar); the first link goes to the boards page;
* **[keyboardShortcuts.jade](https://github.com/wekan/wekan/tree/main/client/components/main/keyboardShortcuts.jade)**: `shortcutsHeaderBar`, `shortcutsModalTitle`, `keyboardShortcuts` - all for the shortcuts that are presented when you press `?`re implemented inhere;
* **[layouts.jade](https://github.com/wekan/wekan/tree/main/client/components/main/layouts.jade)**: has the template for head portion of the html page and other general purpose templates: `userFormsLayout`, `defaultLayout`, `notFound`, `message`;
* **[popup.tpl.jade](https://github.com/wekan/wekan/tree/main/client/components/main/popup.tpl.jade)**: tpl files only define a single template so there's no need to wrap content in a template tag; the name of the template is the base name of the file (`popup` in this case);
* **[spinner.tpl.jade](https://github.com/wekan/wekan/tree/main/client/components/main/spinner.tpl.jade)**: is the template for a "waiting" dialog;
* **[settings](https://github.com/wekan/wekan/tree/main/client/components/settings)**:
* **[informationBody.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/informationBody.jade)**: `information`, `statistics` templates;
* **[invitationCode.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/invitationCode.jade)**: `invitationCode` template;
* **[peopleBody.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/peopleBody.jade)**: `people`, `peopleGeneral`, `peopleRow`, `editUserPopup`;
* **[settingBody.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/settingBody.jade)**: `setting`, `general`, `email`, `accountSettings`, `announcementSettings`
* **[settingHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/settingHeader.jade)**: `settingHeaderBar` template;
* **[sidebar](https://github.com/wekan/wekan/tree/main/client/components/sidebar)**:
* **[sidebar.jade](https://github.com/wekan/wekan/tree/main/client/components/sidebar/sidebar.jade)**: `sidebar`, `homeSidebar`, `membersWidget`, `labelsWidget`, `memberPopup`, `removeMemberPopup`, `leaveBoardPopup`, `addMemberPopup`, `changePermissionsPopup`
* **[sidebarArchives.jade](https://github.com/wekan/wekan/tree/main/client/components/sidebar/sidebarArchives.jade)**: `archivesSidebar`
* **[sidebarFilters.jade](https://github.com/wekan/wekan/tree/main/client/components/sidebar/sidebarFilters.jade)**: `filterSidebar`, `multiselectionSidebar`, `disambiguateMultiLabelPopup`, `disambiguateMultiMemberPopup`, `moveSelectionPopup`;
* **[users](https://github.com/wekan/wekan/tree/main/client/components/users)**:
* **[userAvatar.jade](https://github.com/wekan/wekan/tree/main/client/components/users/userAvatar.jade)**: `userAvatar`, `userAvatarInitials`, `userPopup`, `memberName`, `changeAvatarPopup`, `cardMemberPopup`
* **[userHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/users/userHeader.jade)**: `headerUserBar`, `memberMenuPopup`, `editProfilePopup`, `editNotificationPopup`, `changePasswordPopup`, `changeLanguagePopup`, `changeSettingsPopup`;
* **[mixins](https://github.com/wekan/wekan/tree/main/client/components/mixins)**: [extends](http://www.meteorpedia.com/read/Infinite_Scrolling) **[infiniteScrolling.js](https://github.com/wekan/wekan/tree/main/client/components/mixins/infiniteScrolling.js)** for card details, sidebar and also extends **[perfectScrollbar.js](https://github.com/wekan/wekan/tree/main/client/components/mixins/perfectScrollbar.js)**;
## config
* **[blazeHelpers.js](https://github.com/wekan/wekan/tree/main/client/config/blazeHelpers.js)**: following [Blaze](http://blazejs.org/) helpers are registered here:`currentBoard()`, `currentCard()`, `getUser()` and `concat()`;
* **[gecko-fix.js](https://github.com/wekan/wekan/tree/main/client/config/gecko-fix.js)**: removes [deprecated](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch)`watch` and `unwatch` from Firefox prior to version 58;
* **[presence.js](https://github.com/wekan/wekan/tree/main/client/config/presence.js)**: custom state function for [Presence](https://github.com/dburles/meteor-presence) that keeps track of current board;
* **[reactiveTabs.js](https://github.com/wekan/wekan/tree/main/client/config/reactiveTabs.js)**: [ReactiveTabs](https://github.com/meteortemplates/tabs) are configured to use `basicTabs` template.
## lib
* **[accessibility.js](https://github.com/wekan/wekan/tree/main/client/lib/accessibility.js)**: define a set of DOM transformations that are specifically intended for blind screen readers;
* **[cssEvents.js](https://github.com/wekan/wekan/tree/main/client/lib/cssEvents.js)**: the `CSSEvents`object has methods that select the name of the event based on the specific transitions and animations;
* **[pasteImage.js](https://github.com/wekan/wekan/tree/main/client/lib/pasteImage.js)** and **[dropImage.js](https://github.com/wekan/wekan/tree/main/client/lib/dropImage.js)**: utility for pasting and dropping images on a web app; <span style="color:red">*XXX: add comments; not same style as the rest of the code*</span>
* **[emoji-values.js](https://github.com/wekan/wekan/tree/main/client/lib/emoji-values.js)**: sets Emoji.values;
* **[escapeActions.js](https://github.com/wekan/wekan/tree/main/client/lib/escapeActions.js)**: defines the behavior (mostly canceling current edit) for escape keyboard key;
* **[i18n.js](https://github.com/wekan/wekan/tree/main/client/lib/i18n.js)**: at startup we choose the language for the ui based on user profile or browser language;
* **[inlinedform.js](https://github.com/wekan/wekan/tree/main/client/lib/inlinedform.js)**: forms for editing a single field (like adding a card); <span style="color:red">*XXX: comments in code suggest that a form that is not submitted will retain its value to prevent data loss using [unsavedEdits.js](https://github.com/wekan/wekan/tree/main/client/lib/unsavedEdits.js);bug?*</span>; <span style="color:red">*XXX: edit button to save and open*</span>;
* **[keyboard.js](https://github.com/wekan/wekan/tree/main/client/lib/keyboard.js)**: the shortcuts that are presented when you press `?`re implemented inhere;
* **[mixins.js](https://github.com/wekan/wekan/tree/main/client/lib/mixins.js)**: stub; no `Mixins` at this point; <span style="color:red">*XXX: what does `new class` do? exlint: missing () invoking a constructor*</span>
* **[popup.js](https://github.com/wekan/wekan/tree/main/client/lib/popup.js)**: defines `Popup` class for things likes electing a date; <span style="color:red">*XXX: not a Blaze helper?*</span>
* **[textComplete.js](https://github.com/wekan/wekan/tree/main/client/lib/textComplete.js)**: extends [jquery-textcomplete](https://yuku-t.com/jquery-textcomplete/) to integrate with the rest of the system (like escape actions, tab and enter key handling); <span style="color:red">*XXX: deprecated?*</span>
* **[utils.js](https://github.com/wekan/wekan/tree/main/client/lib/utils.js)**: various methods all over the place (resize, screen size, sort, capitalize, navigate to board and card);
* **Blaze helpers**:
* **[filter.js](https://github.com/wekan/wekan/tree/main/client/lib/filter.js)**: registers `Filter` [Blaze](http://blazejs.org/) helper to support filtering cards by labels and by members;
* **[modal.js](https://github.com/wekan/wekan/tree/main/client/lib/modal.js)**: registers `Modal` [Blaze](http://blazejs.org/) helper to support showing modal windows like the one for archived boards;
* **[multiSelection.js](https://github.com/wekan/wekan/tree/main/client/lib/multiSelection.js)**: registers `Modal` [Blaze](http://blazejs.org/) helper to support multiple selection mode;
* **[unsavedEdits.js](https://github.com/wekan/wekan/tree/main/client/lib/unsavedEdits.js)**: registers `getUnsavedValue` and `hasUnsavedValue` [Blaze](http://blazejs.org/) helpers to preserve content entered in fields but not saved;
# Server
.js files in this directory are not available to the client.
* **[statistics.js](https://github.com/wekan/wekan/tree/main/server/statistics.js)** implements a Meteor server-only [method](https://guide.meteor.com/methods.html) for general-purpose information such as OS, memory, CPUs, PID of the process and so on.
* **[migrations.js](https://github.com/wekan/wekan/tree/main/server/migrations.js)** is where code that update sold databases to new schema is located. Anytime the schema of one of the collection changes in a non-backward compatible way a migration needs to be written in this file.
* **[authentication.js](https://github.com/wekan/wekan/tree/main/server/authentication.js)** add the `Authentication`object to Meteor that provides methods for checking access rights.
* **[lib/utils.js](https://github.com/wekan/wekan/tree/main/server/lib/utils.js)** defines some checks used by [checklists.js](https://github.com/wekan/wekan/tree/main/models/checklists.js)** model. <span style="color:red">*XXX: these methods are defined in server-only code by are used in models, which are visible by the client (in Checklists.allow)?*</span>
* **[notifications](https://github.com/wekan/wekan/tree/main/server/notifications)**
* **[notifications.js](https://github.com/wekan/wekan/tree/main/server/notifications/notifications.js)**: defines the `Notifications` object that supports [Activities](models/activities.js) and holds a list of functions to call when its `notify()` method is called along with convenience methods to subscribe, unsubscribe and a way to filter recipients according to user settings for notification;
* **[email.js](https://github.com/wekan/wekan/tree/main/server/notifications/email.js)**: makes use of the notification system to send an email to a user;
* **[profile.js](https://github.com/wekan/wekan/tree/main/server/notifications/profile.js)**: *stub*; will allow associating notifications with user ids to be consumed by mobile apps;
* **[notifications.js](https://github.com/wekan/wekan/tree/main/server/notifications/notifications.js)**: adds the `watch()` Meteor server-only [method](https://guide.meteor.com/methods.html) that may watch boards, lists or cards using [models/watchable.js](https://github.com/wekan/wekan/tree/main/models/watchable.js);
* **[outgoing.js](https://github.com/wekan/wekan/tree/main/server/notifications/outgoing.js)**: adds the `outgoingWebhooks()` Meteor server-only [method](https://guide.meteor.com/methods.html) that can call external API <span style="color:red">*XXX: I guess*</span>
* **[publications](https://github.com/wekan/wekan/tree/main/server/publications)** defines sets of records that are [published](https://docs.meteor.com/api/pubsub.html#Meteor-publish) by the server and how clients can subscribe to those:
* **[accountSettings.js](https://github.com/wekan/wekan/tree/main/server/publications/accountSettings.js)**: [AccountSettings](models/accountSettings.js) collection;
* **[activities.js](https://github.com/wekan/wekan/tree/main/server/publications/activities.js)**: [Activities](models/activities.js) collection filtered and paginated;
* **[announcements.js](https://github.com/wekan/wekan/tree/main/server/publications/announcements.js)**: [Announcements](models/announcements.js) collection;
* **[avatars.js](https://github.com/wekan/wekan/tree/main/server/publications/avatars.js)**: [Avatars](models/avatars.js) collection for current user;
* **[boards.js](https://github.com/wekan/wekan/tree/main/server/publications/boards.js)**: [Boards](models/boards.js) collection for current user, archived boards collection and individual board as a [relation](https://atmospherejs.com/cottz/publish-relations);
* **[cards.js](https://github.com/wekan/wekan/tree/main/server/publications/cards.js)**: a [Card](https://github.com/wekan/wekan/tree/main/models/cards.js) by its id;
* **[fast-render.js](https://github.com/wekan/wekan/tree/main/server/publications/fast-render.js)**: configures [FastRender](https://github.com/kadirahq/fast-render) to use the board data; <span style="color:red">*XXX: FastRender docs say "Make sure you're using Meteor.subscribe and not this.subscribe"*</span>
* **[people.js](https://github.com/wekan/wekan/tree/main/server/publications/people.js)**: [Users](models/users.js) collection;
* **[settings.js](https://github.com/wekan/wekan/tree/main/server/publications/settings.js)**: [Settings](models/settings.js) collection and, separately, the mail server;
* **[unsavedEdits.js](https://github.com/wekan/wekan/tree/main/server/publications/unsavedEdits.js)**: [UnsavedEdits](models/unsavedEdits.js) collection;
* **[users.js](https://github.com/wekan/wekan/tree/main/server/publications/users.js)**: provides a "mini-profile" for individual users and a [way](https://docs.meteor.com/api/collections.html#fieldspecifiers) to check if current user is admin.
# Models
The files in **[models](https://github.com/wekan/wekan/tree/main/models)** directory mainly define collections; most of them have [aldeed SimpleSchema](https://atmospherejs.com/aldeed/simple-schema) for automatic validation of insert and update of collections. This is also where helpers, mutations, methods, hooks and bootstrap code is to be found. [Server side code](https://docs.meteor.com/api/core.html#Meteor-isServer) also implements json REST API.
Collections (mostly `Mongo.Collection` except as noted) are defined in:
* **[accountSettings.js](https://github.com/wekan/wekan/tree/main/models/accountSettings.js)**;
* **[activities.js](https://github.com/wekan/wekan/tree/main/models/activities.js)**: does not have a SimpleSchema;
* **[announcements.js](https://github.com/wekan/wekan/tree/main/models/announcements.js)**;
* **[attachments.js](https://github.com/wekan/wekan/tree/main/models/attachments.js)**: file-system collection;
* **[avatars.js](https://github.com/wekan/wekan/tree/main/models/avatars.js)**: file-system collection;
* **[boards.js](https://github.com/wekan/wekan/tree/main/models/boards.js)**;
* **[cardComments.js](https://github.com/wekan/wekan/tree/main/models/cardComments.js)**;
* **[cards.js](https://github.com/wekan/wekan/tree/main/models/cards.js)**;
* **[checklists.js](https://github.com/wekan/wekan/tree/main/models/checklists.js)**;
* **[integrations.js](https://github.com/wekan/wekan/tree/main/models/integrations.js)**;
* **[invitationCodes.js](https://github.com/wekan/wekan/tree/main/models/invitationCodes.js)**;
* **[lists.js](https://github.com/wekan/wekan/tree/main/models/lists.js)**;
* **[settings.js](https://github.com/wekan/wekan/tree/main/models/settings.js)**;
* **[unsavedEdits.js](https://github.com/wekan/wekan/tree/main/models/unsavedEdits.js)**;
* **[users.js](https://github.com/wekan/wekan/tree/main/models/users.js)**: extends the `Meteor.users` collection.
Other files:
* **[watchable.js](https://github.com/wekan/wekan/tree/main/models/watchable.js)**: extends the schema, helpers and mutations of `Boards`, `Lists` and `Cards`.
* **[export.js](https://github.com/wekan/wekan/tree/main/models/export.js)**: has some code to support the REST API.
* **[import.js](https://github.com/wekan/wekan/tree/main/models/import.js)**: implements `importBoard()` method so that Trello (in **[trelloCreator.js](https://github.com/wekan/wekan/tree/main/models/trelloCreator.js)**) and Wekan (in **[wekanCreator.js](https://github.com/wekan/wekan/tree/main/models/wekanCreator.js)**) boards can be imported. <span style="color:red">*XXX: Solid candidates for a directory of their own.*</span>
# Tools
* Git:
* **.git**;
* **[.gitignore](https://github.com/wekan/wekan/tree/main/.gitignore)**;
* Docker:
* **[docker-compose.yml](https://github.com/wekan/wekan/tree/main/docker-compose.yml)**: the compose file is a YAML file defining services, networks and volumes;
* **[Dockerfile](https://github.com/wekan/wekan/tree/main/Dockerfile)**;
* Snap:
* **[snapcraft.yaml](https://github.com/wekan/wekan/tree/main/snapcraft.yaml)**: [Snapcraft](https://snapcraft.io/) packages any app for every Linux desktop, server, cloud or device, and deliver updates directly;
* **[snap](https://github.com/wekan/wekan/tree/main/snap)**;
* **[snap-src](https://github.com/wekan/wekan/tree/main/snap-src)**;
* Sandstorm:
* **[sandstorm.js](https://github.com/wekan/wekan/tree/main/sandstorm.js)**: [Sandstorm](https://sandstorm.io/) specific code;
* **[sandstorm-pkgdef.capnp](https://github.com/wekan/wekan/tree/main/sandstorm-pkgdef.capnp)**: used the meteor-spk tool to generate a sandstorm package;
* Node:
* **[package.json](https://github.com/wekan/wekan/tree/main/package.json)**;
* **node_modules**
* **[app.json](https://github.com/wekan/wekan/tree/main/app.json)**: is a manifest format for describing web apps (build requirements, environment variables, addons, and other information);
* **[app.env](https://github.com/wekan/wekan/tree/main/app.env)**: environment variables;
* Meteor: is a full-stack JavaScript platform for developing modern web and mobile applications.
* **[.meteor](https://github.com/wekan/wekan/tree/main/.meteor)**;
* Translation:
* **[i18n](https://github.com/wekan/wekan/tree/main/i18n)** directory has one .json file for each supported language
* **[.tx](https://github.com/wekan/wekan/tree/main/.tx)**: configuration for [Transifex](https://app.transifex.com/wekan/) tool used to manage translation;
* Text editors:
* **[.vscode](https://github.com/wekan/wekan/tree/main/.vscode)**: [Visual Studio Code Editor](https://code.visualstudio.com/docs/getstarted/settings);
* **[.editorconfig](https://github.com/wekan/wekan/tree/main/.editorconfig)**: [EditorConfig](http://EditorConfig.org) provides consistent coding styles between different editors and IDEs;
* **[.github](https://github.com/wekan/wekan/tree/main/.github)**: hosts the issues template;
* **[.eslintrc.json](https://github.com/wekan/wekan/tree/main/.eslintrc.json)**: [ESLint](https://eslint.org/docs/user-guide/configuring) configuration;
* **[.travis.yml](https://github.com/wekan/wekan/tree/main/.travis.yml)**: configuration for [Travis CI](https://travis-ci.org/);
* **[scalingo.json](https://github.com/wekan/wekan/tree/main/scalingo.json)**: [Scalingo](https://scalingo.com/) is a deploy solution;
* **[fix-download-unicode](https://github.com/wekan/wekan/tree/main/fix-download-unicode)**: `cfs_access-point.txt` from this folder is copied to `bundle/programs/server/packages/cfs_access-point.js` in Docker build and in snapcraft build; this is a monkey patch fix for [downloading files that have unicode in filename](https://github.com/wekan/wekan/issues/784).
# Info
* **[meta](https://github.com/wekan/wekan/tree/main/meta)**: binary signatures, project description, icons, screenshots and, oui, a French change-log;
* **[CHANGELOG.md](https://github.com/wekan/wekan/tree/main/CHANGELOG.md)**;
* **[Contributing.md](https://github.com/wekan/wekan/tree/main/Contributing.md)**;
* **[LICENSE](https://github.com/wekan/wekan/tree/main/LICENSE)**;
* **[README.md](https://github.com/wekan/wekan/tree/main/README.md)**.
---
# Contributions to this page
This documentation was contributed by [TNick](https://github.com/TNick) and [xet7](https://github.com/xet7) while Wekan was at commit [e2f768c](https://github.com/wekan/wekan/tree/e2f768c6a0f913b7c5f07695dce8cec692037255).
Please add new files, fixes, updates, etc directly to this page.
+204
View File
@@ -0,0 +1,204 @@
## About markdown changes
Wekan v4.29 changes markdown rendering from [marked](https://github.com/markedjs/marked) to [markdown-it](https://github.com/markdown-it/markdown-it).
## About emoji
With markdown-it, also [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji) plugin has been added, supporting [full list of GitHub emojis](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.json).
Example emoji code, that you can add for example to card name, card description etc:
```
:rainbow: :thumbsup: :100:
```
That shows emojis :rainbow: :thumbsup: :100:
## About other markdown-it plugins
For markdown-it, there are also other [syntax extensions](https://github.com/markdown-it/markdown-it#syntax-extensions) where some are listed at that markdown-it page, and [others at npmjs.com](https://www.npmjs.org/browse/keyword/markdown-it-plugin).
For example, how to get some [mermaid plugin](https://www.npmjs.com/search?q=markdown-it-mermaid) working so that some syntax works for https://mermaid-js.github.io/mermaid/ ?
## How you could add another plugin
Using newest Ubuntu amd64:
# Meteor 2
### 1. Install git and configure it
```
sudo apt -y install git
git config --global user.name "Yourfirstname Yourlastname"
git config --global user.email email-address-you-use-at-github@example.com
git config --global push.default simple
nano .ssh/config
```
There add your User (GitHub username) and IdentityFile (Your ssh private key. Not public key that has .pub).
For indentation, use one tab.
```
Host *
IdentitiesOnly=yes
Host github.com
Hostname github.com
User xet7
IdentityFile ~/.ssh/id_xet7ed
```
Save and Exit with Ctrl-o Enter Ctrl-x Enter
If you do not have ssh key, create it:
```
ssh-keygen
```
And press Enter about 3 times, until you have private key at `~/.ssh/id_rsa` and public key at `~/.ssh/id_rsa.pub`
Add public key `.pub` to your github account web interface.
Add path to Meteor:
```
nano .bashrc
```
There at bottom add:
```
export PATH=~/.meteor:$PATH
```
Save and Exit with Ctrl-o Enter Ctrl-x Enter
### 2. Create fork of `https://github.com/wekan/wekan` at GitHub web page
```
mkdir repos
cd repos
git clone git@github.com:YourGithubUsername/wekan.git
cd wekan
```
### 3. Select option 1 to install dependencies, and then Enter.
```
./rebuild-wekan.sh
1
./rebuild-wekan.sh
2
./rebuild-wekan.sh
3
```
That does: 1 install dependencies, 2 builds wekan, 3 starts wekan in development mode with command `meteor`, so it can detect if some file changes and try to rebuild automatically and reload webbroser. But, still sometimes, it may need stopping with Ctrl-c and full build with option 2.
And then [register and login](Adding-users) at http://localhost:4000
### OPTIONAL, NOT NEEDED: 5. Add new plugin package
```
meteor npm install markdown-it-something --save
```
Edit file `wekan/packages/markdown/src-integration.js` and add using that new package, using code example from that new plugin page, or similar like emoji plugin was added.
### 7. Test
Test does that new plugin syntax work, for example in card title, card description etc on other input fields.
### 8. If it works, create pull request
If normal markdown, emoji, and your new added plugin syntax all work, commit your changes:
```
git add --all
git commit -m "Added plugin markdown-it-something."
git push
```
And then at your GitHub for `https://github.com/YOUR-GITHUB-USERNAME/wekan` click `Create pull request`.
# Meteor 3
At 2024-06-26, it looks like from https://nodejs.org/en that Node.js LTS version is 20.15.0 , so change to newest Node.js LTS, delete old Meteor:
```
sudo n 20.15.0
sudo npm -g install npm
cd
rm -rf .meteor
```
Check how to install newest Meteor from Meteor 3 PR at https://github.com/meteor/meteor/pull/13163 , for example:
```
npx meteor@rc
```
Check what branches there are:
```
cd repos/wekan
git branch -a
```
Change to Meteor 3 branch:
```
git checkout feature-meteor3
```
Build wekan:
```
./rebuild-wekan.sh
2
```
If there are errors, try to fix them.
Or try to run wekan:
```
./rebuild-wekan.sh
3
```
# Updating
There are usually updates both for npm packages and Meteor
Updating npm packages:
```
npm update
```
Checking for vulnerable packages:
```
npm audit
```
Fixing vulnerable npm packages by updating to newer packages:
```
npm audit fix
```
If that did not help, use force:
```
npm audit fix --force
```
If that did not help, read links from that `npm audit` command did show, remove deprecated dependencies, update to other maintained dependencies.
Updating to next Meteor release:
```
meteor update
```
Updating to specific Meteor release:
```
meteor update --release METEOR@3.0-rc.4
```
Trying to update all Meteor packages:
```
meteor update --release METEOR@3.0-rc.4 --all-packages
```
Allowing incompatible updates, that may sometime work:
```
meteor update --release METEOR@3.0-rc.4 --all-packages --allow-incompatible-update
```
If you are changing Meteor and Node.js versions, you may need to reset Meteor:
```
meteor reset
```
Or alternatively, delete wekan repo (if you did not need any changes you made), and clone wekan repo again, and then build etc.
+13
View File
@@ -0,0 +1,13 @@
- Read [Wekan new release ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md)
- [Install Meteor.js](https://www.meteor.com/install). Note: Windows install is very slow, please use other option at [Windows wiki page](Windows)
- Download newest bundle from https://releases.wekan.team
- Unarchive bundle .tar.gz file: `tar -zxvf wekan-VERSION.tar.gz`
- `cd bundle`
- `meteor`
- Browse with webbrowser like Firefox to http://localhost:3000
[Wekan for Meteor.js bundle bug reports and feature requests](https://github.com/wekan/wekan/issues)
[Build Meteor bundle from source](Source)
[Install from source without root](Install-from-source-without-root)
+71
View File
@@ -0,0 +1,71 @@
## Videos about upgrading to Meteor 3
- Storyteller
- 2024-07-15: WeKan Upgrades https://www.youtube.com/watch?v=Zjb3m9JsAD0
- 2024-07-08: Upgrading Meteor examples https://www.youtube.com/watch?v=jzWXxOe93t4
- Upcoming and past: https://www.youtube.com/@storytellercz/streams
- React.js
- WeKan uses Blaze and Jade, not React.
- 2024-08-02:
- https://www.youtube.com/watch?v=NnT7AbVMnj4
- https://thenewstack.io/after-a-decade-of-react-is-frontend-a-post-react-world-now/
- https://thenewstack.io/pivoting-from-react-to-native-dom-apis-a-real-world-example/
- https://thenewstack.io/how-web-components-are-used-at-github-and-salesforce/
- https://devclass.com/2024/07/22/react-community-splitting-into-full-stack-and-client-only-camps-suggests-survey/
- https://news.ycombinator.com/item?id=41068685
- 2024-07-10: Storyteller at React Wroclaw Meetup, talking about Meteor.js and React: https://www.youtube.com/watch?v=4dnM6bXZCz4&t=741s
- How A Small Team of Developers Created React at Facebook | React.js: The Documentary https://www.youtube.com/watch?v=8pDqJVdNa44
https://www.youtube.com/watch?v=8pDqJVdNa44
- Meteor Dispatches Podcast
- 46: 2024-07-12: Packages you need in every app https://www.youtube.com/watch?v=S2YkZfKN0DI
- 25: 2024-02-09: WeKan Security https://www.youtube.com/watch?v=zic-h8jG6F8
- 16: 2023-12-08: WeKan interview https://www.youtube.com/watch?v=ke-mbnZM3zE
- Upcoming and past: https://www.youtube.com/@meteorjscommunity/streams
- Playlists: https://www.youtube.com/@meteorjscommunity/playlists
- Some recent also had info, how to make dependencies compatible with both Meteor 2 and Meteor 3
- Add Eslint 3 and fix anything found
- https://www.youtube.com/watch?v=rFjNNNc_7-E
- https://github.com/quavedev/eslint-plugin
- https://github.com/quavedev/meteor-template/pull/8
## Upgrading to Meteor 3
- Meteor 3 migration guide: https://v3-migration-docs.meteor.com ( older pages at https://guide.meteor.com/3.0-migration or https://guide.meteor.com/prepare-meteor-3.0 )
- Look at progress of migrated packages https://forums.meteor.com/t/looking-for-help-migrating-packages-to-meteor-3-0/60985
- Migrate from Fibers (works only at Meteor 2 and Node.js 14) to Async/Await (works with Meteor 3 and Node.js 20)
- Helper tool https://forums.meteor.com/t/blaze-async-migration-helper-babel-plugin-tracker-async-enhance-for-the-client-side-released/60842
- Info how Async/Await works, from Storyteller: https://github.com/wekan/wekan/wiki/AsyncAwait
- Forums posts about migrating: https://forums.meteor.com
- ( Older version upgrade to newest 2.14 https://guide.meteor.com/2.14-migration )
## Removing unused files
From Meteor Discord chat from someone:
> Nice tool that I found out about today. I was able to remove 58 unused files, functions, exports, types and dependencies 😄
>
> https://knip.dev
## Lint
From Meteor Discord chat from someone:
> We started using https://biomejs.dev to replace eslint and prettier on Galaxy 2, and it's been amazing. It's speedy, easy to configure, and has fewer packages to care about.
>
> Just sharing it here in case someone has never heard about it before
## Building WeKan
- https://github.com/wekan/wekan/wiki/Emoji
- Docs: https://github.com/wekan/wekan/tree/main/docs
## Similar technology
- https://en.wikipedia.org/wiki/JavaScript_engine
- https://en.wikipedia.org/wiki/Single-page_application
- https://en.wikipedia.org/wiki/Web_framework
- https://en.wikipedia.org/wiki/Progressive_web_app
- https://en.wikipedia.org/wiki/Web_2.0
- https://en.wikipedia.org/wiki/Meteor_(web_framework)
- https://en.wikipedia.org/wiki/Next.js
@@ -0,0 +1,75 @@
## 1. What is Monkey Proof Software?
Someone told xet7, that WeKan is Monkey Proof Software. Jira is not Monkey Proof Software. Here we are exploring what it means.
## 2. Proofing
a) Monkey Proof testing of laptop https://www.youtube.com/watch?v=QxCV0bZGE00 . There are also some info at Internet how to make sure monkeys do not mess up apartments, trashcans etc.
b) https://en.wikipedia.org/wiki/Proofing
> Proofing may refer to:
>
> - [Proofing (armour)](https://en.wikipedia.org/wiki/Proofing_(armour)), the testing of armour for its defensive ability
> - [Proofing (baking technique)](https://en.wikipedia.org/wiki/Proofing_(baking_technique)), a rest period during the fermentation of bread dough
> - [Proofing (prepress)](https://en.wikipedia.org/wiki/Prepress_proofing), a concept in print production
> - [Proof testing](https://en.wikipedia.org/wiki/Proof_test), a form of stress test to demonstrate the fitness of a load-bearing structure
c) https://nl.wikipedia.org/wiki/Foolproof mentions "De Engelse termen foolproof, idiot proof, monkey proof"
d) https://en.wikipedia.org/wiki/Idiot-proof
> In modern [English](https://en.wikipedia.org/wiki/English_language) usage, the informal term idiot-proof or foolproof describes designs that cannot be misused either inherently, or by use of [defensive design](https://en.wikipedia.org/wiki/Defensive_design) principles. The implication is that the design is usable even by someone of low intelligence who would not use it properly.
## 3. Defensive design
Mentioned at https://en.wikipedia.org/wiki/Defensive_design
> Defensive design is the practice of planning for [contingencies](https://en.wikipedia.org/wiki/Contingency_plan) in the [design](https://en.wikipedia.org/wiki/Design) stage of a project or undertaking. Essentially, it is the practice of anticipating all possible ways that an end-user could misuse a device, and designing the device so as to make such misuse impossible, or to minimize the negative consequences. For example, if it is important that a plug is inserted into a socket in a particular orientation, the socket and plug should be designed so that it is physically impossible to insert the plug incorrectly. Power sockets are often keyed in such a manner, to prevent the transposition of live and neutral. They are also recessed in the wall in a way that makes it impossible to touch connectors once they become live.
## 4. Defensive Design in Computer software
> Defensive design in [software engineering](https://en.wikipedia.org/wiki/Software_engineering) is called [defensive programming](https://en.wikipedia.org/wiki/Defensive_programming). [Murphy's law](https://en.wikipedia.org/wiki/Murphy%27s_law) is a well-known statement of the need for defensive design, and also of its ultimate limitations.
>
> [Software design](https://en.wikipedia.org/wiki/Software_design) entails many ways so that software can be designed to operate more safely.
>
> - Data entry screens can "sanitize" inputs, e.g. numeric fields contain only digits, signs and a single decimal point if appropriate.
>
> - Inputs can be sanity checked for legitimate values, e.g. for counts of workplace injuries (or number of people injured) the number can be 0 but can't be negative and must be a whole number; for number of hours worked in one week the amount for any specified employee can be 0, can be fractional, but can't be negative and can't be greater than 168, nor more than 24 times the number of days they were in attendance.
>
> - A word processor requested to load a saved document should scan it to ensure it is in good form and not corrupted. If it is corrupted, the program should say so, then either accept the partial document that was valid, or refuse the entire document. In either case it should remain running and not quit.
## 6. Monkey Testing
https://en.wikipedia.org/wiki/Monkey_testing
## 7. Why Custom CSS/Javascript is not Monkey Proof
@xet7 wrote at https://github.com/wekan/wekan/issues/4167#issuecomment-1151557772 to this comment
> Wekan functions better on pretty much all fronts except for customization options given that one can directly change kanboard CSS to fit their needs.
From @xet7
Custom CSS and Javascript is very dangerous: https://github.com/wekan/wekan/issues/3086#issuecomment-627615017
> I had to previously find a way [how to fix Custom Javascript in RocketChat](https://forums.rocket.chat/t/big-issue-with-custom-javascript/261/4?u=xet7) because it broke my RocketChat install.
>
> Also, previously I had to [fix XSS bug](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v385-2020-03-23-wekan-release) because adding Javascript to input fields did run that Javascript code.
>
> I'll try to find is there a safe way to do this.
Correct solution is to add setting like here https://github.com/wekan/wekan/issues/4558
WeKan target group is those that call WeKan "Monkey Proof Software", so that WeKan is easy to figure out, user friendly, polished enough. Jira is not "Monkey Proof Software".
If someone is asking for "Custom CSS", that means they are programmers, and should be sending PRs to WeKan with fixes to UI, new settings, etc, so that WeKan works safely without "Custom CSS", for normal non-programmer people.
## 6. Towards more Monkey Proof Software
In Progress:
- Optimizing speed
- Minimize frontend and backend code
- Fixing bugs
+144
View File
@@ -0,0 +1,144 @@
## Testers to ping with new Wekan Edge release
- All those whose issues were fixed [at ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md)
- @saschafoerster
Those should reply to new issue that has name `Test Edge Wekan (version-number-here)` at https://github.com/wekan/wekan/issues .
## Why test?
https://github.com/wekan/wekan/issues/2811
## Who should test
- If you are the person in your company that gets yelled at when something breaks in new version of Wekan.
- If you think xet7 releasing new version of Wekan every day directly to stable production Snap channel is in any way risky.
## What usually happens when Wekan gets broken
1. There is many new issues about some same new feature or bug. Yes, also when some notices new feature that is already [at ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md), they add issue about it, usually asking "Can this feature be turned off or made optional?". This is usually if new feature changes some old workflow radically.
2. Many do tag @xet7 that are you aware of the issue.
3. Someone yells at IRC that "this is too much, it's time to fork Wekan". Well, that's because he gets yelled at by all users of Wekan at his company.
4. xet7 does not have time to answer those, he just fixes the issue - usually at the same day, makes new release, closes all related issues with last comment "Please try Wekan (version-number-here)".
5. There is [only one comment](https://github.com/wekan/wekan/issues/2812#issuecomment-555860032) that says "This resolved things for me. Thanks for such a quick fix. This is an invaluable piece of software for me!"
6. xet7 thinks this is great normal development day: Got some features added, got some bugs fixes, and happily goes to sleep well. This is because above 1-5 has happened many times before, it's just normal.
## ChangeLog
https://github.com/wekan/wekan/blob/main/CHANGELOG.md
## Backup before testing. And backup daily in production.
Why? Well, Wekan has no undo yet. If you delete Swimlane/List/Card, it's gone.
That's why it's harder to reach in submenu. It's better to Arhive those,
and unarchive.
https://github.com/wekan/wekan/wiki/Backup
You could test at other computer than your production.
## Snap
Snap has automatic update, or you can update manually:
```
sudo snap refresh
```
You see at https://snapcraft.io/wekan what are current versions.
To change to Edge:
```
sudo snap refresh wekan --edge --amend
```
And back to stable:
```
sudo snap refresh wekan --stable --amend
```
## Docker
`docker-compose.yml` is at https://github.com/wekan/wekan .
### Latest development version from master branch
Quay:
```
image: quay.io/wekan/wekan
```
Docker Hub:
```
image: wekanteam/wekan
```
### Example of using release tags
[Quay tags](https://quay.io/repository/wekan/wekan?tag=latest&tab=tags):
```
image: quay.io/wekan/wekan:v3.55
```
[Docker Hub tags](https://hub.docker.com/r/wekanteam/wekan/tags):
```
image: wekanteam/wekan:v3.55
```
### How to change Docker version
1) Backup first
https://github.com/wekan/wekan/wiki/Backup
```
docker-compose stop
docker rm wekan-app
```
2) Change version tag. Then:
```
docker-compose up -d
```
### Build Docker version from source
At docker-compose.yml is these lines:
```
#-------------------------------------------------------------------------------------
# ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ====
# ==== and use commands: docker-compose up -d --build
#build:
# context: .
# dockerfile: Dockerfile
# args:
# - NODE_VERSION=${NODE_VERSION}
# - METEOR_RELEASE=${METEOR_RELEASE}
# - NPM_VERSION=${NPM_VERSION}
# - ARCHITECTURE=${ARCHITECTURE}
# - SRC_PATH=${SRC_PATH}
# - METEOR_EDGE=${METEOR_EDGE}
# - USE_EDGE=${USE_EDGE}
#-------------------------------------------------------------------------------------
```
Uncomment from those this way:
```
build:
context: .
dockerfile: Dockerfile
args:
- NODE_VERSION=${NODE_VERSION}
- METEOR_RELEASE=${METEOR_RELEASE}
- NPM_VERSION=${NPM_VERSION}
- ARCHITECTURE=${ARCHITECTURE}
- SRC_PATH=${SRC_PATH}
- METEOR_EDGE=${METEOR_EDGE}
- USE_EDGE=${USE_EDGE}
```
Then start Wekan to http://localhost this way:
```
docker-compose up -d --build
```
## Sandstorm
1) Install local development version of Sandstorm to your laptop from https://sandstorm.io/install
2) Download and install experimental version to your local Sandstorm:
https://github.com/wekan/wekan/wiki/Sandstorm
Local sandstorm is at http://local.sandstorm.io:6080/ .
3) Download your production Wekan grain .zip file with down arrow button. Upload to your dev local Sandstorm.
Try does it work.
@@ -0,0 +1,329 @@
## Prototype Strategy
- Try building many prototypes, see what works
- https://en.wiktionary.org/wiki/throw_things_at_the_wall_and_see_what_sticks
## Future
- Will this happen? With what tech? See https://github.com/wekan/wekan/blob/main/FUTURE.md
- You can comment at https://github.com/wekan/wekan/issues/4578
- You can help by sending PR to any prototype repo mentioned below
## Wishes to all web frameworks
- Documentation about how to upgrade, all required steps. Or alternatively, a script that does changes required to upgrade.
- Using parts of frameworks as separate packages, like:
- Authentication, like OAuth2, Gmail, etc
- Option to not use websockets, because at some corporate networks do not allow them.
- Option to not have Javascript at frontend, having SSR only. Working with and without Javascript at frontend, like ufront did.
- https://github.com/ufront/ufront
- https://jasono.co/2020/10/03/im-going-to-write-a-web-app-framework-again-maybe-well-see/
- Please do not discontinue HTML (no Javascript) version https://news.ycombinator.com/item?id=37558372
- Storing session to database, for round robin
- https://github.com/wekan/wekan/issues/5120
- https://stackoverflow.com/questions/65547266/how-to-store-my-session-mysql-with-express-mysql-session
- Not having build step:
- Keep all files at directories they currently are, with understandable directory structure naming, like:
- Feature name
- Feature part name 1
- Feature part name 2
- Only use file from it's location on page where it is needed
- Cache dependencies. Make possible coding offline.
- Do not uglify
- https://world.hey.com/dhh/you-can-t-get-faster-than-no-build-7a44131c
- Rails World Opening Keynote by DHH
- https://www.youtube.com/watch?v=iqXjGiQ_D-A
- https://news.ycombinator.com/item?id=37843951
- https://news.ycombinator.com/item?id=37897921
- I merged all branches to one main branch, because merging between branches did take a lot of time.
- Do not use linters like eslint and prettier. What I did, is I removed all linters, like eslint, prettier etc, because they did disagree about syntax. Point is to make to code minimal change, that fixes something, or adds some feature. Not that most commits would be about fixing syntax.
- https://matt-rickard.com/why-is-the-frontend-stack-so-complicated
- https://news.ycombinator.com/item?id=37895164
- https://deno.com/blog/node-config-hell
- How to not become slow and unresponsive after a week https://github.com/wekan/wekan/issues/5140
- Run code like CGI, release all memory
- Looking for most cross-platform web frameworks, supporting many different CPU, OS and database.
- Both On-Premise AND MultiCloud possible
- https://github.com/serverless/multicloud
- https://github.com/xet7/multicloud
- License: MIT and other https://copyfree.org
## List of realtime web frameworks
- Meteor
- https://www.meteor.com
- https://github.com/meteor/meteor
- Helene
- Forum Post https://forums.meteor.com/t/helene-a-lightweight-real-time-web-framework-for-node-js-and-bun/60626
- Repo https://github.com/leonardoventurini/helene
- Discussions https://github.com/leonardoventurini/helene/discussions
- NPM package https://www.npmjs.com/package/helene
- Discord https://discord.com/invite/PbY36PU75C
- Any others?
## Screenshot
Supporting many more webbrowsers:
<img src="https://wekan.github.io/manybrowser.png" width="100%" alt="Multiverse WeKan screenshot" />
## Talks
- Maintainer of WeKan since December 2016, xet7 (Lauri Ojansivu), about WeKan Multiverse at EU NGI Dapsi https://www.youtube.com/watch?v=BPPjiZHVeyM
- https://dapsi.ngi.eu/20-new-solutions-to-bring-the-power-of-data-back-to-peoples-hands/
- https://dapsi.ngi.eu/hall-of-fame/multiverse/
- WeKan Open Source kanban: add multiple Import/Export/Sync options and UI Designer, making it possible to create any app.
## Roadmap
From https://github.com/wekan/wekan/issues/4578#issuecomment-1407769397
## Standards
- Web Sustainability Guidelines (WSG) 1.0 at a Glance
- https://w3c.github.io/sustyweb/glance.html
- Minimize size, support all devices https://w3c.github.io/sustyweb/#benefits-90
- Other standards? https://news.ycombinator.com/item?id=36675451
## Browsers developed for therapy reasons
Are you fed up? Need some therapy? Write a webbrowser!
- Gosub
- https://adayinthelifeof.nl/2023/09/22/browsers.html
- Repo https://github.com/jaytaph/gosub-browser
- https://codemusings.nl/@jaytaph/p/MQpHToAx8c1KXyU98Auip4
- https://news.ycombinator.com/item?id=37608580
- Ladybird
- https://www.ladybird.dev
- Repo https://github.com/SerenityOS/serenity/tree/master/Ladybird
## Browsers that have Javascript
- Use Javascript to add drag-drop etc Javascript features, and hide UI elements like buttons etc that are for non-Javascript
## Browsers without using Websockets
- Maybe with long poll. Or no live update, require webpage reload.
- For internal corporate networks where websockets are not allowed
## Browsers that do not support Javascript
or have Javascript disabled for security reasons.
- Netsurf https://www.netsurf-browser.org/downloads/ , Development Builds https://ci.netsurf-browser.org/builds/
- RISC OS https://www.riscosopen.org/content/downloads , https://www.riscosdev.com/direct/
- ReactOS https://reactos.org , https://github.com/howinfo/howinfo/wiki/ReactOS
- Redox OS https://www.redox-os.org
- Haiku, Linux, Windows, Amiga, Atari etc
- Amiga: AWeb, iBrowse
- Dillo Webbrowser at FreeDOS https://github.com/wekan/wekan/issues/4578#issuecomment-1248525591
- Netscape, IE, etc all browsers at all OS/CPU
- FreeDOS: Dillo, Arachne
- Text based browsers: Lynx, Links, w3m (sudo apt-get install w3m w3m-img)
- Ancient browsers:
- http://9p.sdf.org/who/tweedy/ancient_browsers/
- https://news.ycombinator.com/item?id=34981257
## Browsers that are programmable
- Nyxt
- https://github.com/atlas-engineer/nyxt
## Support more databases
- SQLite
- PostgreSQL
- Migrations between databases
- Using many databases at the same time
- Offline or Local-First
- https://news.ycombinator.com/item?id=37584049
- https://news.ycombinator.com/item?id=37488034
## Graphics
- Raphael JS, supports also many legacy browsers, with VML and SVG graphics https://dmitrybaranovskiy.github.io/raphael/
- Related forked repos for various graphics at https://github.com/raphaeljsorg
- Or alternatively, just use HTML4, images, imagemaps etc to be compatible to non-Javascript browsers
## Programming language alternatives
- Optionally, use some transpiler:
- https://en.wikipedia.org/wiki/Source-to-source_compiler
- Haxe https://haxe.org , with HaxeUI [GUI/WebUI](http://haxeui.org/) and [TUI](https://github.com/haxeui/haxeui-pdcurses)
- Wax https://github.com/xet7/wax
- Nim https://nim-lang.org
- V https://vlang.io
- Maybe transpiling UI to/from HaxeUI XML, HTML4, HTML5, Gopher, Gemini, Lazarus, Gambas, Godot, MUI/ZUI Amiga/AROS
- Cross-platform:
- C89 code for 30+ OS/CPU like at https://github.com/xet7/darkesthour
- Pascal code with TRSE https://lemonspawn.com/turbo-rascal-syntax-error-expected-but-begin/
- Embedded webserver, for example:
- C https://github.com/wekan/hx/blob/main/prototypes/code/webserver/works/c/server.c
- Sandstorm https://sandstorm.io , https://github.com/sandstorm-io/sandstorm
- Rust https://github.com/dwrensha/sandstorm-rawapi-example-rust
- C++ https://github.com/dwrensha/sandstorm-rawapi-example
- Try to avoid strange NPM packages
- https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-6/
## Benchmarks
- For selecting programming language:
- https://github.com/wekan/hx/tree/main/prototypes/code/webserver
- https://forums.meteor.com/t/performance-tests-between-meteor-3-meteor-2-help-on-format/60458
- https://www.techempower.com/benchmarks/
- https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks
## Screenshot of Multiverse WeKan at FreeDOS Dillo
![freedos-dillo](https://user-images.githubusercontent.com/15545/190492967-f2770d0e-86a1-4822-93e7-68c65b23d6c4.png)
## Screenshot of Multiverse WeKan at Netsurf
### Group and count by first character of board names
From https://github.com/wekan/wekan/issues/4578#issuecomment-1250143726
When there is a lot of boards, it is very useful to group by first character of board (and after that click charater to see list of boards for that character, to be added later). I could not figure out how to do it with MongoDB aggregate query. Here is how I did it with SQLite, for type board. SQLite returns results immediately. Note that emojis, UTF-8 shows also on Netsurf browser. TODO is to figure out, could I get these visible also in FreeDOS Dillo browser.
```
SELECT _id, substr(title,1,1), COUNT(*), type from boards
WHERE type=:type GROUP BY substr(title,1,1) ORDER BY substr(title,1,1) ASC;
```
Actually, somewhere I saved answer from ChatGPT or Bing AI search, what this SQL query using MongoDB Javascript syntax. So maybe I should ask again.
https://github.com/wekan/php/blob/main/page/allboardschar.php
![wekan-allboardschar](https://user-images.githubusercontent.com/15545/190877008-ec8a035b-10d4-432a-b3cb-581983b5e24e.png)
## Prototypes
### Redbean
- Currently xet7 actively working with this prototype: https://github.com/wekan/wekanstudio
- https://redbean.dev
- Minimal kanban board drag drop example
- Repo https://github.com/wekan/hx/tree/main/prototypes/code/webserver/works/fullmoon
- Redbean amd64 binary works at Win/Mac/Linux/BSD/BIOS without any modifications, because it is based on Cosmopolitan https://github.com/jart/cosmopolitan
- Uses HTMX https://htmx.org at UI
- Saves to SQLite database
- Petclinic fork, using Blink to run at s390x https://github.com/wekan/wekan/wiki/s390x#petclinic-s390x
### PHP
- Repo https://github.com/wekan/php
- Features:
- Some webpages compatible with all browsers
- SQLite list all boards with first character, show board with some data
- MongoDB test for newer MongoDB
- upload file(s) with drag-drop, for upcoming feature https://github.com/wekan/wekan/issues/2936
- RTL https://github.com/wekan/wekan/issues/3376#issuecomment-1243922087
- Not yet: Login, Move card
### Gambas
- Repo https://github.com/wekan/hx/tree/main/prototypes/ui/gambas
- Features: Login, dropdown menu structure, SQLite database
- Not yet: Show board
- Problems: Gambas login page etc requires Javascript, does not work in Netsurf
### Meteor SSR
- https://github.com/wekan/we
- Features:
- Only serverside rendering. Javascript removed removed from frontend.
- Only test webpage. No actual features.
### Node.js 20, Bun and Deno
- Repo https://github.com/wekan/wekan-node20
- Features:
- main.js makes database queries to many databases
- Database drivers:
- MongoDB driver for Legacy MongoDB 3.2.x, using MongoDB from `sudo snap install wekan`
- MongoDB driver for newest MongoDB included, using MongoDB 6.x from rebuild-wekan.sh from https://github.com/wekan/wekan
- FerretDB proxy to PostgreSQL, from docker-compose.yml
- FerretDB proxy to SQLite, from docker-compose.yml
- Bun size is about 93 MB
- Deno size is usually about 350 MB https://github.com/wekan/wekan-node20/releases , but from source built Linux arm64 is 1.1 GB because of some bug somewhere.
- Deno also includes Node.js as Deno's Node.js compatibility layer.
- Node.js supports many CPU/OS
- Node.js is used in production and has traceability. https://changelog.com/jsparty/294
- https://github.com/wekan/wekan/wiki/s390x
- https://nodejs.org/dist/latest-v20.x/
- https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4
### Haxe
- https://haxe.org
- Hello world example
- Repo https://github.com/wekan/hx/blob/main/prototypes/code/hello
- Transpiled with Haxe to many programming languages
- Tinkweb
- Repo https://github.com/wekan/hx/tree/main/prototypes/ui/tinkweb
- Has router and webpage
- Transpiles to PHP and Node.js
### FreePascal
- Repo https://github.com/wekan/hx/tree/main/prototypes/code/webserver/works/freepascal-router
- Router and some webpage
- Works at many retro and modern OS, but not at s390x that FreePascal does not support yet https://wiki.freepascal.org/ZSeries
### FreeDOS and Bash
- Repo https://github.com/wekan/wedos
- Features:
- DOS: .bat script, that shows menu, and uses SQLite DOS version to make queries to WeKan SQLite database
- Bash: .sh script, that shows menu, and uses SQLite CLI to make queris to WeKan SQLite database
### Minio
- Repo: https://github.com/wekan/minio-metadata
- Features:
- Uses Bash script and CLI binaries to migerate text data and attachments from MongoDB to SQLite and Minio
- There is Node.js, Go etc drivers for using Minio
### CloudFlare Workers
- Developing
- https://developers.cloudflare.com/pages/framework-guides/
- https://developers.cloudflare.com/pages/
- https://developers.cloudflare.com/workers/
- https://developers.cloudflare.com/pages/platform/language-support-and-tools/
- https://miniflare.dev
- https://blog.cloudflare.com/workers-playground/
- D1 SQLite
- https://developers.cloudflare.com/d1/platform/community-projects/#d1-adapter-for-kysely-orm
- https://blog.cloudflare.com/d1-open-beta-is-here/
- https://blog.cloudflare.com/introducing-d1/
- https://www.cloudflare.com/developer-platform/d1/
- https://blog.cloudflare.com/hyperdrive-making-regional-databases-feel-distributed/
- Northwind Traders example
- https://northwind.d1sql.com
- https://github.com/cloudflare/d1-northwind
- https://github.com/xet7/d1-northwind
- Kysely Query builder for D1 SQLite database
- https://codedamn.com/news/product/dont-use-prisma
- https://news.ycombinator.com/item?id=37804072
- https://kysely.dev
- https://github.com/kysely-org/kysely
- https://www.npmjs.com/package/kysely
- Awesome Kysely https://github.com/kysely-org/awesome-kysely
- Older database examples: https://github.com/cloudflare/db-connect
- Hono
- https://blog.yusu.ke/hono-htmx-cloudflare/
- https://news.ycombinator.com/item?id=37165054
- https://github.com/yusukebe/hono-htmx
- https://github.com/xet7/hono-htmx
- https://developers.cloudflare.com/pages/framework-guides/
- WebGPU
- https://blog.cloudflare.com/webgpu-in-workers/
- https://news.ycombinator.com/item?id=37673999
- CloudFlare TV https://cloudflare.tv
- CloudFlare https://cloudflare.com
- TODO example with KV https://github.com/wekan/cloudflare-workers-todos
### Swap microframework, vs HTMX
- https://github.com/josephernest/Swap
- https://news.ycombinator.com/item?id=35991783
+41
View File
@@ -0,0 +1,41 @@
## Roles
It depends on role of user what drag drop is allowed https://github.com/wekan/wekan/wiki/REST-API-Role
## Mobile Drag Drop
1. Click `Drag Handle Enabled/Disabled` button to enable drag handles
2. Use drag handles to move Board Icons, Swimlanes, MiniCards, Lists, Checklists, Checklist Items.
3. Use non-drag-handle area to to view other parts of board, by dragging board up/down/left/right, without moving any icons etc.
<img src="https://wekan.github.io/dragdrop/mobile-drag-drop.png" width="40%" alt="Wekan logo" />
## 2 or more external screens of desktop or mobile
For each screen, you can enable or disable drag handles, because that setting is stored in browser localstorage, not to database. https://github.com/wekan/wekan/issues/4715
Because this feature was added, `Drag Handle Enabled/Disabled` was moved to current place shown in above screenshot. https://github.com/wekan/wekan/issues/4734
## All Boards page
Reorder with drag drop:
- Board Icons
## One Board page
Reorder with drag drop:
- Swimlanes
- Lists
- MiniCards. MiniCard is card, that is not click opened to view card contents.
- Opened Card: Checklists
- Opened Card: Checklist Items
## Drag code examples
- Draggable objects
- https://www.redblobgames.com/making-of/draggable/
- https://news.ycombinator.com/item?id=37703291
- Fixed Drag at Ubuntu Touch Morph browser https://github.com/wekan/wekan/commit/af63259f091cb2ade84493a288ea37c53cd37321
+20
View File
@@ -0,0 +1,20 @@
# Enabling all Touch Screen Support
## 1) Wekan / Click right top your username / Change Settings / Show Desktop Drag Handles
Then you can drag cards with touch screen, for example at Android/iOS/desktop touch screen.
- [Wekan Drag Handle issue](https://github.com/wekan/wekan/issues/3755)
## 2) Enable touch screen support of Chrome/Chromium/Chromium Edge
Change the target inside properties in the Google Chrome shortcut by adding "--touch-events" in the end of the address.
```
Chrome shortcut > Properties >
Target: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --touch-events
```
And similarly at other non-Windows operating systems, by modifying shortcut.
- [Chrome touch at Google Support](https://support.google.com/chrome/thread/18609718/how-to-get-drag-drop-working-with-touch-screen-working-on-latest-version-of-chrome?hl=en)
- [Chrome touch Wekan discussion](https://github.com/wekan/wekan/discussions/3958)
- [Chrome/Chromium/Chromium Edge Touch issue](https://github.com/wekan/wekan/discussions/3958)
Loaded 100 of 598 files, more files were not shown because too many files have changed in this diff. Show more