walster001 10 months ago
commit 62b13cc343
  1. 4
      .devcontainer/Dockerfile
  2. 4
      .github/workflows/docker-publish.yml
  3. 143
      CHANGELOG.md
  4. 6
      Dockerfile
  5. 3
      SECURITY.md
  6. 2
      Stackerfile.yml
  7. 12
      client/components/activities/activities.jade
  8. 64
      client/components/activities/activities.js
  9. 2
      client/components/boards/boardBody.jade
  10. 2
      client/components/boards/boardBody.js
  11. 1004
      client/components/boards/boardColors.css
  12. 31
      client/components/boards/boardHeader.js
  13. 17
      client/components/boards/boardsList.js
  14. 2
      client/components/cards/attachments.jade
  15. 4
      client/components/cards/attachments.js
  16. 9
      client/components/cards/cardDetails.jade
  17. 10
      client/components/cards/cardDetails.js
  18. 2
      client/components/cards/checklists.jade
  19. 2
      client/components/cards/minicard.jade
  20. 6
      client/components/cards/minicard.js
  21. 14
      client/components/lists/list.css
  22. 2
      client/components/lists/list.js
  23. 16
      client/components/lists/listHeader.jade
  24. 2
      client/components/lists/listHeader.js
  25. 8
      client/components/main/editor.css
  26. 8
      client/components/sidebar/sidebar.css
  27. 12
      client/components/sidebar/sidebar.js
  28. 2
      client/components/swimlanes/swimlaneHeader.js
  29. 2
      client/components/swimlanes/swimlanes.jade
  30. 4
      client/components/swimlanes/swimlanes.js
  31. 6
      client/components/users/userHeader.js
  32. 7
      client/lib/utils.js
  33. 204
      docs/DeveloperDocs/Build-from-source.md
  34. 83
      docs/DeveloperDocs/Meteor.md
  35. 0
      docs/DeveloperDocs/Test-Edge.md
  36. 4
      docs/Features/Python.md
  37. 0
      docs/ImportExport/asana/CHANGELOG.md
  38. 0
      docs/ImportExport/asana/LICENSE
  39. 0
      docs/ImportExport/asana/export_boards.pl
  40. 0
      docs/ImportExport/asana/load_tasks.pl
  41. 0
      docs/ImportExport/trello/CHANGELOG.md
  42. 0
      docs/ImportExport/trello/LICENSE
  43. 0
      docs/ImportExport/trello/Migrating-from-Trello.md
  44. 0
      docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md
  45. 0
      docs/ImportExport/trello/api.py
  46. 0
      docs/ImportExport/trello/trello-project100.json
  47. 12
      docs/Login/Multitenancy.md
  48. 0
      docs/Login/OAuth2.md
  49. 30
      docs/Login/SAML.md
  50. 0
      docs/Login/ldap-sync/ldap-sync.py
  51. 0
      docs/Platforms/FOSS/Android.md
  52. 0
      docs/Platforms/FOSS/Cloud-Foundry.md
  53. 0
      docs/Platforms/FOSS/Debian.md
  54. 0
      docs/Platforms/FOSS/Docker/Docker.md
  55. 0
      docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md
  56. 0
      docs/Platforms/FOSS/Docker/Install-Wekan-Docker-for-testing.md
  57. 0
      docs/Platforms/FOSS/Docker/Install-Wekan-Docker-in-production.md
  58. 0
      docs/Platforms/FOSS/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md
  59. 0
      docs/Platforms/FOSS/Docker/Move-Docker-containers-to-other-computer.md
  60. 0
      docs/Platforms/FOSS/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md
  61. 0
      docs/Platforms/FOSS/Docker/Repair-Docker.md
  62. 0
      docs/Platforms/FOSS/FreeBSD.md
  63. 0
      docs/Platforms/FOSS/Friend.md
  64. 0
      docs/Platforms/FOSS/Helm.md
  65. 0
      docs/Platforms/FOSS/Helm2.md
  66. 0
      docs/Platforms/FOSS/OpenShift/OpenShift.md
  67. 0
      docs/Platforms/FOSS/OpenShift/README.md
  68. 0
      docs/Platforms/FOSS/OpenShift/wekan.yml
  69. 0
      docs/Platforms/FOSS/OpenSuse.md
  70. 0
      docs/Platforms/FOSS/Platforms.md
  71. 0
      docs/Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md
  72. 0
      docs/Platforms/FOSS/Sandstorm/Sandstorm.md
  73. 0
      docs/Platforms/FOSS/Sandstorm/Wekan-Sandstorm-cards-to-CSV-using-Python.md
  74. 0
      docs/Platforms/FOSS/Sandstorm/Wekan-vs-Sandstorm.md
  75. 0
      docs/Platforms/FOSS/SmartOS.md
  76. 0
      docs/Platforms/FOSS/Snap/Automatic-update-schedule.md
  77. 0
      docs/Platforms/FOSS/Snap/Backup-and-restore.md
  78. 0
      docs/Platforms/FOSS/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md
  79. 0
      docs/Platforms/FOSS/Snap/CentOS-7.md
  80. 0
      docs/Platforms/FOSS/Snap/CentOS8.md
  81. 0
      docs/Platforms/FOSS/Snap/Home.md
  82. 0
      docs/Platforms/FOSS/Snap/Install-snap-with-Ansible.md
  83. 0
      docs/Platforms/FOSS/Snap/Install.md
  84. 0
      docs/Platforms/FOSS/Snap/Limit-snap-to-root-user-only.md
  85. 0
      docs/Platforms/FOSS/Snap/Making-releases-from-source.md
  86. 0
      docs/Platforms/FOSS/Snap/Making-releases.md
  87. 0
      docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md
  88. 0
      docs/Platforms/FOSS/Snap/Old-Making-releases.md
  89. 0
      docs/Platforms/FOSS/Snap/OpenSuse.md
  90. 0
      docs/Platforms/FOSS/Snap/Sharing-MongoDB.md
  91. 0
      docs/Platforms/FOSS/Snap/Snap.md
  92. 0
      docs/Platforms/FOSS/Snap/Supported-settings-keys.md
  93. 0
      docs/Platforms/FOSS/Snap/Testing-new-WeKan-Snap-versions.md
  94. 0
      docs/Platforms/FOSS/Snap/Troubleshooting.md
  95. 0
      docs/Platforms/FOSS/Snap/Uninstall.md
  96. 0
      docs/Platforms/FOSS/Snap/Update-all-snap-packages.md
  97. 0
      docs/Platforms/FOSS/Source/Install-and-Update.md
  98. 0
      docs/Platforms/FOSS/Source/Install-from-source-without-root.md
  99. 0
      docs/Platforms/FOSS/Source/Install-source-without-sudo-on-Linux.md
  100. 0
      docs/Platforms/FOSS/Source/Raspberry-Pi.md
  101. Some files were not shown because too many files have changed in this diff Show More

@ -8,8 +8,8 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan"
# - 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="apt-utils gnupg gosu wget bzip2 g++ iproute2 apt-transport-https libarchive-tools git"
ENV DEV_DEPS="curl python3 ca-certificates build-essential"
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 \

@ -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@0d4c9c5ea7693da7b068278f7b52bda2a190a446
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@ -55,7 +55,7 @@ jobs:
# 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@31159d49c0d4756269a0940a750801a1ea5d7003
uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445
with:
context: .
push: ${{ github.event_name != 'pull_request' }}

@ -15,7 +15,131 @@ Fixing other platforms In Progress.
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
# Upcoming WeKan ® release
# 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:
@ -23,10 +147,23 @@ This release adds the following updates:
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 1](https://github.com/wekan/wekan/commit/ce89ff48331a27ffb42d021833c78df3a462b9db),
[Part 1](https://github.com/wekan/wekan/commit/449c02c42a0183a49592ada89bdfb8f25e5db903).
[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

@ -202,7 +202,7 @@ 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}
npm install -g npm@${NPM_VERSION} --production
chown --recursive wekan:wekan /home/wekan/.config
# Install Meteor
@ -222,11 +222,11 @@ 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
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
gosu wekan:wekan meteor npm install --production
cd node_modules/fibers
node build.js
cd ../..

@ -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,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v7.50.0"
appVersion: "v7.54.0"
files:
userUploads:
- README.md

@ -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}}}.
@ -242,3 +240,5 @@ template(name="activity")
= ' @'
else if(currentData.timeValue)
| {{_ activity.activityType currentData.timeValue}}
div(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}

@ -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;
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;
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');
}
});
// 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() {

@ -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}}")

@ -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

@ -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) {

@ -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() {

@ -117,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

@ -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();
},
}
]

@ -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
@ -527,9 +527,10 @@ template(name="cardDetails")
if currentBoard.allowsDescriptionText
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'}}

@ -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();
},
},
];

@ -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,5 +1,5 @@
template(name="minicard")
.minicard(
.minicard.nodragscroll(
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")

@ -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;
},

@ -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 */
}
.list:first-child {
[id^="swimlane-"] .list:first-child {
min-width: 20px;
margin-left: 5px;
}
.list:first-child {
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;
}

@ -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);
},

@ -1,20 +1,18 @@
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
+editListTitleForm
else
unless isMiniScreen
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 isMiniScreen
if currentList
a.list-header-left-icon.fa.fa-angle-left.js-unselect-list
unless isMiniScreen
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}}
@ -28,7 +26,9 @@ template(name="listHeader")
|&nbsp;(
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}}
|/#{wipLimit.value})
unless isMiniScreen
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' }}"

@ -362,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() {

@ -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;

@ -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;

@ -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() {

@ -224,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() {

@ -1,5 +1,5 @@
template(name="swimlane")
.swimlane
.swimlane.nodragscroll
+swimlaneHeader
unless collapseSwimlane
.swimlane.js-lists.js-swimlane(id="swimlane-{{_id}}"

@ -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();
},
});

@ -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;
}

@ -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

@ -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.

@ -1,18 +1,71 @@
## Upgrading Meteor
- Disclaimer:
- These are opinions about upgrading, from xet7, maintainer of WeKan Open Source kanban https://wekan.github.io
- xet7 thinks, that it is good to keep using current frontend and backend frameworks, upgrade them when possible. If there is any problems, ask at https://forums.meteor.com
- xet7 thinks, that upgrading to newest Meteor 2 and Meteor 3 is being made more easier all the time, when new dependencies become available, any bugs are fixed, etc. So it is good to make all possible upgrading steps available.
- Upgrade to newest 2.14 https://guide.meteor.com/2.14-migration . Currently xet7 is using newest 2.14.1-beta.0 in production release of WeKan https://forums.meteor.com/t/meteor-v2-14-1-beta-0-is-out/61142
- Prepare for 3.0 https://guide.meteor.com/3.0-migration
- Migrate Async
- Helper tool https://forums.meteor.com/t/blaze-async-migration-helper-babel-plugin-tracker-async-enhance-for-the-client-side-released/60842
- 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
## 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://youtu.be/rFjNNNc_7-E
- https://www.youtube.com/watch?v=rFjNNNc_7-E
- https://github.com/quavedev/eslint-plugin
- https://github.com/quavedev/meteor-template/pull/8
- Watch Meteor Dispatches etc Podcasts https://www.youtube.com/@meteorjscommunity/playlists
- Some recent also had info, how to make dependencies compatible with both Meteor 2 and Meteor 3
## 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

@ -1,5 +1,5 @@
Some Python etc code in WeKan, that is not yet added directly to WeKan:
- [LDAP sync script, that also correctly removes users](https://github.com/wekan/wekan/blob/main/ldap-sync/ldap-sync.py)
- [LDAP sync script, that also correctly removes users](https://github.com/wekan/wekan/blob/main/docs/Login/ldap-sync/ldap-sync.py)
- [Email notifications to AWS SES](https://github.com/wekan/wekan/issues/3543#issuecomment-1199897164)
- [Prometheus Exporter](https://github.com/wekan/wekan-prometheus-exporter)
- [Burndown Chart](Burndown-and-Velocity-Chart)
@ -12,4 +12,4 @@ Some Python etc code in WeKan, that is not yet added directly to WeKan:
- [Logstash and ElasticSearch](https://github.com/wekan/wekan-logstash)
- iCal server in [Python](https://github.com/wekan/wekan-ical-server) and [PHP](https://github.com/wekan/wekan-ical-php)
- [Sandstorm CSV related Python code](Wekan-Sandstorm-cards-to-CSV-using-Python)
- [Trello API test code](https://github.com/wekan/wekan/tree/main/trello)
- [Trello API test code](https://github.com/wekan/wekan/tree/main/docs/ImportExport/trello)

@ -0,0 +1,12 @@
Q: Is Multi-tenancy like ability to configure multiple ROOT_URL for same Meteor app? Or having relative URLs?
A: Yes
https://www.youtube.com/watch?v=917v1a01-Ko
https://github.com/Meteor-Community-Packages/meteor-partitioner
Related:
- https://www.enterpriseready.io
- https://github.com/clinical-meteor/hipaa-audit-log

@ -1,4 +1,32 @@
Related SAML code, not in WeKan yet: https://forums.meteor.com/t/what-are-you-working-on/59187
Related Meteor SAML code, not in WeKan yet:
- New: https://forums.meteor.com/t/meteor-and-saml/61561
- Old link: https://forums.meteor.com/t/what-are-you-working-on/59187
Sandstorm has SAML login, and old WeKan that will be updated someday:
- https://github.com/wekan/wekan/wiki/Sandstorm
How SAML works:
- https://ssoready.com/blog/engineering/a-gentle-intro-to-saml/
- https://news.ycombinator.com/item?id=41036982
- https://www.sheshbabu.com/posts/visual-explanation-of-saml-authentication/
- https://news.ycombinator.com/item?id=41057814
Ruby on Rails OmniAuth, that has Shibboleth and SAML:
- https://github.com/omniauth/omniauth/wiki/List-of-Strategies
- https://github.com/omniauth/omniauth
SAML at SSOReady:
- https://github.com/ssoready/ssoready
- https://news.ycombinator.com/item?id=41110850
The SSO Wall of Shame:
- https://sso.tax
[SAML Issue](https://github.com/wekan/wekan/issues/708)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save