Compare commits

..

80 commits
v7.80 ... main

Author SHA1 Message Date
Lauri Ojansivu
8af719d39e v7.85 2025-04-21 16:30:58 +03:00
Lauri Ojansivu
c1a4250bd2 Updated to MongoDB 6.0.22.
Thanks to MongoDB developers !
2025-04-21 16:28:41 +03:00
Lauri Ojansivu
b4b442f8a8 Updated translations. 2025-04-21 16:13:56 +03:00
Lauri Ojansivu
b7e76fcfa1 Updated ChangeLog. 2025-04-21 16:10:24 +03:00
Lauri Ojansivu
01950cc796 Fix board sidebar menu doesn't open in mobile.
Thanks to mimZD and xet7 !

Fixes #5736
2025-04-21 16:07:43 +03:00
Lauri Ojansivu
23bac73559 Updated translations. 2025-04-05 17:39:29 +03:00
Lauri Ojansivu
2de9b94b01 Updated ChangeLog. 2025-03-31 21:50:47 +03:00
Lauri Ojansivu
05d1736f5f
Update Browser-compatibility-matrix.md 2025-03-31 21:45:22 +03:00
Lauri Ojansivu
db5346fc5c
Update Browser-compatibility-matrix.md 2025-03-31 21:38:06 +03:00
Lauri Ojansivu
f09f5bd737 Updated translations. 2025-03-29 21:35:45 +02:00
Lauri Ojansivu
d96a1a5c9e v7.84 2025-03-23 17:33:57 +02:00
Lauri Ojansivu
ad3cc9c087 Updated translations. 2025-03-22 21:39:15 +02:00
Lauri Ojansivu
d0c7bf65a4 Updated ChangeLog. 2025-03-22 21:30:53 +02:00
Lauri Ojansivu
bb6ac70f63 Updated dependencies.
Thanks to developers of dependencies !
2025-03-22 21:26:41 +02:00
Lauri Ojansivu
c38b9da7d6
Merge pull request #5718 from wekan/dependabot/github_actions/docker/login-action-3.4.0
Bump docker/login-action from 3.3.0 to 3.4.0
2025-03-18 01:37:59 +02:00
dependabot[bot]
19153ca489
Bump docker/login-action from 3.3.0 to 3.4.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](9780b0c442...74a5d14239)

---
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>
2025-03-17 21:00:44 +00:00
Lauri Ojansivu
8e7a5e8cb5 Updated translations. 2025-03-15 22:31:43 +02:00
Lauri Ojansivu
1407059937 Updated ChangeLog. 2025-03-15 19:33:49 +02:00
Lauri Ojansivu
a2911bc9c3 Fixed building OpenAPI docs.
Thanks to xet7 !

Fixes #5512
2025-03-15 19:32:16 +02:00
Lauri Ojansivu
f99b735746 Updated ChangeLog. 2025-03-11 04:23:55 +02:00
Lauri Ojansivu
4510ddda15 Fix typo at Shortcuts.
Thanks to xet7 !
2025-03-11 04:19:45 +02:00
Lauri Ojansivu
028ec46f46 Updated ChangeLog. 2025-03-09 20:05:08 +02:00
Lauri Ojansivu
c0e4e01deb Added developer docs about Login code.
Thanks to xet7 !

Fixes #5714
2025-03-09 20:03:42 +02:00
Lauri Ojansivu
cfcf682134 Updated ChangeLog. 2025-03-09 19:08:20 +02:00
Lauri Ojansivu
27bd9817d7
Merge pull request #5712 from Rayene123/Time-on-Minicard-for-Start/End/Due-Date
Time on minicard for start/end/due date
2025-03-09 19:03:54 +02:00
Rayene123
6d982cdfd9 formatted the date when storing it 2025-03-09 14:15:17 +00:00
Rayene123
827ee615c1 added the start , due , end hour 2025-03-09 14:12:20 +00:00
Lauri Ojansivu
f5f0ba721e v7.83 2025-03-08 21:32:37 +02:00
Lauri Ojansivu
1344f85986 Updated ChangeLog. 2025-03-08 21:14:12 +02:00
Lauri Ojansivu
e7462ada12 Reverted Docker changes of WeKan v7.68 to get WeKan Docker version working.
Thanks to xet7 !

Fixes #5697
2025-03-08 21:09:09 +02:00
Lauri Ojansivu
11199b6225 Updated ChangeLog. 2025-03-08 19:58:05 +02:00
Lauri Ojansivu
345aece0f2 Updated ChangeLog. 2025-03-08 19:55:49 +02:00
Lauri Ojansivu
912c84422b Merge branch 'Firas-Git-CopyCard_FixError' 2025-03-08 19:52:42 +02:00
Lauri Ojansivu
b402676079 Removed siteurl from manifest to fix browser console error about not matching URL.
Thanks to xet7 !
2025-03-08 19:51:23 +02:00
Lauri Ojansivu
908a5fc60d Comment out error message of non-existing Custom Field.
Thanks to xet7 !

Related #5684
2025-03-08 19:50:00 +02:00
Lauri Ojansivu
38e57d3635 Merge branch 'CopyCard_FixError' of github.com:Firas-Git/wekan into Firas-Git-CopyCard_FixError 2025-03-08 19:46:19 +02:00
Firas Saidi
14167b19b9 cards file 2025-03-08 18:02:03 +01:00
Lauri Ojansivu
fc548b426d Updated translations. 2025-03-08 17:45:02 +02:00
Lauri Ojansivu
71acd9603e Updated ChangeLog. 2025-03-06 01:52:46 +02:00
Lauri Ojansivu
341f655ab7
Merge pull request #5704 from wekan/dependabot/github_actions/docker/build-push-action-6.15.0
Bump docker/build-push-action from 6.14.0 to 6.15.0
2025-03-05 19:33:04 +02:00
Lauri Ojansivu
0c5323c106
Merge pull request #5703 from wekan/dependabot/github_actions/docker/metadata-action-5.7.0
Bump docker/metadata-action from 5.6.1 to 5.7.0
2025-03-05 19:30:27 +02:00
dependabot[bot]
7f871fdf30
Bump docker/build-push-action from 6.14.0 to 6.15.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.14.0 to 6.15.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](0adf995921...471d1dc4e0)

---
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>
2025-03-03 20:41:23 +00:00
dependabot[bot]
6347b40a02
Bump docker/metadata-action from 5.6.1 to 5.7.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.6.1 to 5.7.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](369eb591f4...902fa8ec7d)

---
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>
2025-03-03 20:41:20 +00:00
Lauri Ojansivu
bce84a432a Updated ChangeLog. 2025-03-02 12:03:22 +02:00
Lauri Ojansivu
b6fc4deb63
Merge pull request #5702 from adam-fu/main
Adding Development information to readme
2025-03-02 12:00:54 +02:00
adam-fu
6b48f9e259 Adding Development information to readme 2025-03-02 06:43:29 +01:00
Lauri Ojansivu
44b7666426 Merge branch 'main' of github.com:wekan/wekan 2025-02-25 14:33:34 +02:00
Lauri Ojansivu
ef70ed76a2 Updated changelog 2025-02-25 14:33:06 +02:00
Lauri Ojansivu
a1a1b3d1ee
Merge pull request #5696 from wekan/dependabot/github_actions/docker/build-push-action-6.14.0
Bump docker/build-push-action from 6.13.0 to 6.14.0
2025-02-24 23:21:55 +02:00
dependabot[bot]
0326757399
Bump docker/build-push-action from 6.13.0 to 6.14.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.13.0 to 6.14.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](ca877d9245...0adf995921)

---
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>
2025-02-24 21:18:37 +00:00
Lauri Ojansivu
edbc8ed92b v7.82 2025-02-24 20:21:33 +02:00
Lauri Ojansivu
07e9ec0617 Updated ChangeLog. 2025-02-24 15:12:07 +02:00
Lauri Ojansivu
18d0fa4327 Fixed building WeKan. Updated dompurify. Forked Meteor 2.14 version of meteor-node-stubs to update elliptic.
Thanks to delopers of depedencies and xet7 !

Fixes #5694
2025-02-24 14:56:54 +02:00
Lauri Ojansivu
666ee84033 Updated dependencies.
Thanks to developes of dependencies "
2025-02-23 15:55:20 +02:00
Lauri Ojansivu
120642f47d Updated ChangeLog. 2025-02-21 21:22:14 +02:00
Lauri Ojansivu
148b81262d Updated requirements at docs.
Thanks to mueller-ma !

Fixes #5692
2025-02-21 21:12:28 +02:00
Lauri Ojansivu
c41467f76e
Merge pull request #5691 from wekan/dependabot/npm_and_yarn/dompurify-3.2.4
Bump dompurify from 2.5.6 to 3.2.4
2025-02-15 15:47:49 +02:00
dependabot[bot]
c83e83b8b1
Bump dompurify from 2.5.6 to 3.2.4
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.5.6 to 3.2.4.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.5.6...3.2.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-15 08:58:49 +00:00
Lauri Ojansivu
563a508e26 Added missing ) character.
Thanks to xet7 !
2025-02-11 22:12:57 +02:00
Lauri Ojansivu
1d8347cc23
Merge pull request #5682 from salleman33/devel
Update metrics.js
2025-02-11 17:28:33 +02:00
salleman
874abf2c41
Update metrics.js
Add possibility to use a token in place of ipaddress to access metrics route
2025-02-11 12:06:23 +01:00
Lauri Ojansivu
3e18f820ea v7.81 2025-02-07 16:13:52 +02:00
Lauri Ojansivu
b571f1c953 Upgraded to MongoDB 6.0.20 at Snap Candidate.
Thanks to MongoDB developers!
2025-02-07 16:11:48 +02:00
Lauri Ojansivu
fd69c7ceb8 Updated ChangeLog. 2025-02-05 04:41:42 +02:00
Lauri Ojansivu
d15faa1890 Updated ChangeLog. 2025-01-29 14:15:31 +02:00
Lauri Ojansivu
0c7e12c5e7 Added Meteor 3.1 learning course to docs.
Thanks to producer of learning course !
2025-01-29 14:13:21 +02:00
Lauri Ojansivu
36a3077853 Fix misspelling of hours at env variable setting LDAP_BACKGROUND_SYNC_INTERVAL.
Thanks to hubermam !

Fixes #5665
2025-01-29 14:09:31 +02:00
Lauri Ojansivu
51bc23dbd9 Updated ChangeLog. 2025-01-29 13:40:34 +02:00
Lauri Ojansivu
0b1e0bd395 Fixed env variable METRICS_ACCEPTED_IP_ADDRESS to be same as at docs.
Thanks to salleman33 !

Fixes #5671
2025-01-29 13:38:40 +02:00
Lauri Ojansivu
151aafd114 Updated ChangeLog. 2025-01-29 10:23:12 +02:00
Lauri Ojansivu
16c8a65a1c Updated ChangeLog. 2025-01-29 10:22:08 +02:00
Lauri Ojansivu
f3133e9cd8
Merge pull request #5670 from wekan/dependabot/github_actions/docker/build-push-action-6.13.0
Bump docker/build-push-action from 6.12.0 to 6.13.0
2025-01-29 10:14:55 +02:00
dependabot[bot]
de84aa7674
Bump docker/build-push-action from 6.12.0 to 6.13.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.12.0 to 6.13.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](67a2d409c0...ca877d9245)

---
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>
2025-01-27 20:17:17 +00:00
Lauri Ojansivu
1bdbfe86bb
Merge pull request #5663 from wekan/dependabot/github_actions/helm/chart-releaser-action-1.7.0
Bump helm/chart-releaser-action from 1.6.0 to 1.7.0
2025-01-21 22:44:23 +02:00
Lauri Ojansivu
397b9f439e
Merge pull request #5662 from wekan/dependabot/github_actions/docker/build-push-action-6.12.0
Bump docker/build-push-action from 6.11.0 to 6.12.0
2025-01-21 22:44:12 +02:00
dependabot[bot]
261e0aee0f
Bump helm/chart-releaser-action from 1.6.0 to 1.7.0
Bumps [helm/chart-releaser-action](https://github.com/helm/chart-releaser-action) from 1.6.0 to 1.7.0.
- [Release notes](https://github.com/helm/chart-releaser-action/releases)
- [Commits](https://github.com/helm/chart-releaser-action/compare/v1.6.0...v1.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 20:02:15 +00:00
dependabot[bot]
a6d9bde658
Bump docker/build-push-action from 6.11.0 to 6.12.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.11.0 to 6.12.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](b32b51a8ed...67a2d409c0)

---
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>
2025-01-20 20:02:13 +00:00
Lauri Ojansivu
8d0a07e1a8 Updated translations. 2025-01-19 23:06:23 +02:00
Lauri Ojansivu
659615e6f2
Merge pull request #5658 from wekan/dependabot/github_actions/docker/build-push-action-6.11.0
Bump docker/build-push-action from 6.10.0 to 6.11.0
2025-01-15 12:18:49 +02:00
dependabot[bot]
9f0b82c0d5
Bump docker/build-push-action from 6.10.0 to 6.11.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.10.0 to 6.11.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](48aba3b46d...b32b51a8ed)

---
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>
2025-01-13 20:55:32 +00:00
49 changed files with 7180 additions and 8880 deletions

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@9780b0c442fbb1117ed29e0efdff1e18412f7567
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772
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@369eb591f429131d6889c46b94e711f089e6ca96
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804
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@48aba3b46d1b1fec4febb7c5d0c644b249a11355
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4
with:
context: .
push: ${{ github.event_name != 'pull_request' }}

View file

@ -25,6 +25,6 @@ jobs:
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.6.0
uses: helm/chart-releaser-action@v1.7.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View file

@ -15,6 +15,126 @@ Fixing other platforms In Progress.
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
# v7.85 2025-04-21 WeKan ® release
This release adds the following updates:
- Updated Browser compatibility matrix, adding Iris browser at RISC OS Direct, and fixing links.
[Part1](https://github.com/wekan/wekan/commit/db5346fc5c7407160f381c0fcf4a87204206ed55),
[Part2](https://github.com/wekan/wekan/commit/05d1736f5f21e93e83b2e25029c6cab6c5106398).
Thanks to xet7.
- [Updated to MongoDB 6.0.22](https://github.com/wekan/wekan/commit/c1a4250bd2e26be5549704234a3cfb5306120352).
Thanks to MongoDB developers.
and fixes the following bugs:
- [Fix board sidebar menu doesn't open in mobile](https://github.com/wekan/wekan/commit/01950cc796697fa201ac9e4376cb204d308e8181).
Thanks to mimZD and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.84 2025-03-23 WeKan ® release
This release adds the following new features:
- [Time on minicard for Start/End/Due Date](https://github.com/wekan/wekan/pull/5712).
Thanks to Rayene123.
and adds the following updates:
- [Added developer docs about Login code](https://github.com/wekan/wekan/commit/c0e4e01deb936653df69b4fd21598ac27cd349a0).
Thanks to xet7.
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/pull/5718),
[Part 2](https://github.com/wekan/wekan/commit/bb6ac70f63b6f3568b7c943417c698615936a956).
Thanks to developers of dependencies.
and fixes the following bugs:
- [Fixed typo at Shortcuts, now became visible translations of assignees visibility 1-9 shortcuts](https://github.com/wekan/wekan/commit/4510ddda1507bc775b9523d3673adba48d7a8385).
Thanks to xet7.
- [Fixed building OpenAPI docs](https://github.com/wekan/wekan/commit/a2911bc9c3bd94ef583388931d2cd354cc8657e3).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.83 2025-03-08 WeKan ® release
This release adds the following updates:
- [Adding Development information to readme](https://github.com/wekan/wekan/pull/5702).
Thanks to adam-fu.
- Updated GitHub actions.
[Part 1](https://github.com/wekan/wekan/pull/5703),
[Part 2](https://github.com/wekan/wekan/pull/5704).
and fixes the following bugs:
- [Removed siteurl from manifest to fix browser console error about not matching URL](https://github.com/wekan/wekan/commit/b402676079517e463ed291285f69c04126a00975).
Thanks to xet7.
- [Exception while invoking method 'copyCard' TypeError: Cannot read property 'name' of undefined](https://github.com/wekan/wekan/pull/5711).
Thanks to Firas-Git.
- [Comment out error message of non-existing Custom Field](https://github.com/wekan/wekan/commit/908a5fc60d5d574a36d4bfd496d3a16fd267ae75).
Thanks to xet7.
- [Reverted Docker changes of WeKan v7.68 to get WeKan Docker version working](https://github.com/wekan/wekan/commit/e7462ada12ec8edfd08d6c3b3a97a034211d51eb).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.82 2025-02-24 WeKan ® release
v7.82 Docker version is broken: https://github.com/wekan/wekan/issues/5697 . Snap Candidate works.
This release adds the following new features:
- [Add possibility to use a token in place of ipaddress to access metrics route](https://github.com/wekan/wekan/pull/5682).
Thanks to salleman33.
and adds the following updates:
- [Updated dependencies](https://github.com/wekan/wekan/pull/5691).
Thanks to dependabot.
- [Updated requirements at docs](https://github.com/wekan/wekan/commit/148b81262d0d143460e881d645fefa6740aae40d).
Thanks to mueller-ma.
- [Updated dependencies](https://github.com/wekan/wekan/commit/666ee8403388f7d5e1a30cf0e53bc46a70bf1c40).
Thanks to developes of dependencies.
- [Fixed building WeKan. Updated dompurify. Forked Meteor 2.14 version of meteor-node-stubs to update elliptic](https://github.com/wekan/wekan/commit/18d0fa43275cd2955dd6416213e316ca08a62255).
Thanks to developers of depedencies and xet7.
and fixes the following bugs:
- [Added missing ) character](https://github.com/wekan/wekan/commit/563a508e269be87eb713e2888409525e1ba82001).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.81 2025-02-07 WeKan ® release
This release adds the following new features:
- [Helm Chart: Added secretManaged value for enabling or disabling the creation of secret by Helm](https://github.com/wekan/charts/pull/39).
Thanks to salleman33.
and adds the following updates:
- [Updated Docker Actions](https://github.com/wekan/wekan/pull/5670).
Thanks to dependabot.
- [Added Meteor 3.1 learning course to docs](https://github.com/wekan/wekan/commit/0c7e12c5e7f322bdbaaa61100e66153dd0b92e4d).
Thanks to producer of learning course.
- [Upgraded to MongoDB 6.0.20 at Snap Candidate](https://github.com/wekan/wekan/commit/b571f1c9530b899db75bf28a03c18277a9b77cb8).
Thanks to MongoDB developers.
and fixes the following bugs:
- [Fixed env variable METRICS_ACCEPTED_IP_ADDRESS to be same as at docs](https://github.com/wekan/wekan/commit/0b1e0bd39569175668c195b63dde91bf0e6f1b24).
Thanks to salleman33.
- [Fixed misspelling of hours at env variable setting LDAP_BACKGROUND_SYNC_INTERVAL](https://github.com/wekan/wekan/commit/36a307785369337a788499065f64175971878930).
Thanks to hubermam.
- [Helm Chart: Restore pod security context in deployment](https://github.com/wekan/charts/pull/40).
Thanks to adalinesimonian.
Thanks to above GitHub users for their contributions and translators for their translations.
# v7.80 2025-01-12 WeKan ® release
This release fixes the following bugs:

View file

@ -1,76 +1,31 @@
FROM scratch AS downloads
# Download NodeJS bundle
ADD https://static.meteor.com/dev-bundle-node-os/v14.21.4/node-v14.21.4-linux-x64.tar.gz node.tar.gz
# Download Meteor bundle
ADD https://static.meteor.com/packages-bootstrap/2.16/meteor-bootstrap-os.linux.x86_64.tar.gz meteor.tar.gz
FROM ubuntu:24.04 AS build
# Install node from official archive
RUN --mount=type=bind,from=downloads,source=node.tar.gz,target=node.tar.gz \
tar xzf node.tar.gz --strip-components=1 --keep-old-files --no-same-owner
# Install meteor from official archive
RUN --mount=type=bind,from=downloads,source=meteor.tar.gz,target=meteor.tar.gz \
tar xzf meteor.tar.gz -C $HOME --no-same-owner
# Update the npm version
RUN npm install -g npm@6.14.17
# Install several build dependencies
RUN apt update && \
apt install --yes --no-install-suggests --no-install-recommends ssh git g++ curl ca-certificates && \
rm -r /var/lib/apt/lists
# Change to temporary working directory
WORKDIR /workdir
# Copy package.json and package-lock.json to install application dependencies
COPY package.json .
COPY package-lock.json .
# Install build dependencies
RUN $HOME/.meteor/meteor npm install --production
# Copy meteor application configurations
COPY .meteor .meteor
# Copy application sources
COPY packages packages
COPY imports imports
COPY config config
COPY models models
COPY public public
COPY server server
COPY client client
# Build the application
RUN $HOME/.meteor/meteor build --directory /build --allow-superuser
# Enter server bundle directory
WORKDIR /build/bundle/programs/server
# Install server dependencies
RUN $HOME/.meteor/meteor npm install --production
# Enter installation directory of fibers
WORKDIR /build/bundle/programs/server/node_modules/fibers
# Build fibers integrations
RUN node build.js
FROM ubuntu:24.04 AS wekan
# Add metadata to image
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"
# Set default environment variables
ENV WITH_API=true \
# 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
# 2021-09-18:
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
# to Quay to avoid Docker Hub rate limits.
ARG DEBIAN_FRONTEND=noninteractive
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.14 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=6.14.17 \
FIBERS_VERSION=4.0.1 \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
RESULTS_PER_PAGE="" \
DEFAULT_BOARD_ID="" \
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
@ -203,36 +158,119 @@ ENV WITH_API=true \
WRITABLE_PATH=/data \
S3=""
# Install node and application sources from build stage
RUN --mount=type=bind,from=downloads,source=node.tar.gz,target=node.tar.gz \
--mount=type=bind,from=build,source=/build,target=/build \
# Install NodeJS
tar xzf node.tar.gz --strip-components=1 --keep-old-files --no-same-owner && \
# Add the wekan user
useradd --uid 999 --user-group --system wekan && \
# Copy wekan bundle
cp -r /build/bundle /wekan && \
# Remove the web.browser.legacy platform
rm -r /wekan/programs/web.browser.legacy && \
# Change ownership of wekan directory
chown wekan:wekan -R /wekan && \
# Create the data directory
mkdir /data && \
# Change ownership of data directory
chown wekan:root -R /data
# NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------------------------------
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
# 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
# Change to the wekan user
USER wekan
# Set the port to listen on
ENV PORT=8080
EXPOSE ${PORT}
EXPOSE $PORT
# Define the stop signal for node
STOPSIGNAL SIGINT
STOPSIGNAL SIGKILL
WORKDIR /home/wekan/app
# Declare a volume on /data
VOLUME /data
# Set startup command
CMD ["node", "/wekan/main.js"]
#---------------------------------------------------------------------
# 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"
#---------------------------------------------------------------------
#
# 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 --max-old-space-size=8192 /build/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node /build/main.js"]

View file

@ -107,6 +107,14 @@ that by providing one-click installation on various platforms.
We also welcome sponsors for features and bugfixes.
By working directly with WeKan ® you get the benefit of active maintenance and new features added by growing WeKan ® developer community.
## Getting Started with Development
The default branch uses [Meteor 2 with Node.js 14](https://wekan.github.io/install/).
To contribute, [create a fork](https://github.com/wekan/wekan/wiki/Emoji#2-create-fork-of-httpsgithubcomwekanwekan-at-github-web-page) and run `./rebuild-wekan.sh` (or `./rebuild-wekan.bat` on Windows) as detailed [here](https://github.com/wekan/wekan/wiki/Emoji#3-select-option-1-to-install-dependencies-and-then-enter). Once you're ready, please test your code and [submit a pull request (PR)](https://github.com/wekan/wekan/wiki/Emoji#7-test).
Please refer to the [developer documentation](https://github.com/wekan/wekan/wiki/Developer-Documentation) for more information.
## Screenshot
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)

View file

@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v7.80.0"
appVersion: "v7.85.0"
files:
userUploads:
- README.md

View file

@ -11,7 +11,7 @@ import { DatePicker } from '/client/lib/datepicker';
}
_storeDate(date) {
this.card.setReceived(date);
this.card.setReceived(moment(date).format('YYYY-MM-DD HH:mm'));
}
_deleteDate() {
@ -37,7 +37,7 @@ import { DatePicker } from '/client/lib/datepicker';
}
_storeDate(date) {
this.card.setStart(date);
this.card.setStart(moment(date).format('YYYY-MM-DD HH:mm'));
}
_deleteDate() {
@ -60,7 +60,7 @@ import { DatePicker } from '/client/lib/datepicker';
}
_storeDate(date) {
this.card.setDue(date);
this.card.setDue(moment(date).format('YYYY-MM-DD HH:mm'));
}
_deleteDate() {
@ -83,7 +83,7 @@ import { DatePicker } from '/client/lib/datepicker';
}
_storeDate(date) {
this.card.setEnd(date);
this.card.setEnd(moment(date).format('YYYY-MM-DD HH:mm'));
}
_deleteDate() {
@ -322,19 +322,19 @@ CardCustomFieldDate.register('cardCustomFieldDate');
(class extends CardStartDate {
showDate() {
return this.date.get().format('L');
return this.date.get().format('YYYY-MM-DD HH:mm');
}
}.register('minicardStartDate'));
(class extends CardDueDate {
showDate() {
return this.date.get().format('L');
return this.date.get().format('YYYY-MM-DD HH:mm');
}
}.register('minicardDueDate'));
(class extends CardEndDate {
showDate() {
return this.date.get().format('L');
return this.date.get().format('YYYY-MM-DD HH:mm');
}
}.register('minicardEndDate'));

View file

@ -177,7 +177,7 @@
@media screen and (max-width: 800px) {
.board-sidebar {
width: 100%;
right: -100%;
left: 0;
}
.board-sidebar .sidebar-content .hide-btn {
width: 40px;

View file

@ -366,7 +366,7 @@ Template.keyboardShortcuts.helpers({
},
{
keys: ['ctrl + alt + number keys 1-9'],
action: 'toggle-asignees'
action: 'toggle-assignees'
},
],
});

View file

@ -577,10 +577,14 @@ services:
# If the sync of the users should be done in the background
#- LDAP_BACKGROUND_SYNC=false
#
# At which interval does the background task sync.
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hour
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
# At which interval does the background task sync in milliseconds.
# Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
- LDAP_BACKGROUND_SYNC_INTERVAL=''
#
#- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
#

View file

@ -575,10 +575,14 @@ services:
# If the sync of the users should be done in the background
#- LDAP_BACKGROUND_SYNC=false
#
# At which interval does the background task sync.
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hour
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
# At which interval does the background task sync in milliseconds.
# Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
- LDAP_BACKGROUND_SYNC_INTERVAL=''
#
#- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
#

View file

@ -10,6 +10,7 @@ There edit Browser-compatibility-matrix.md and attach it with .txt extension or
Browser | [PWA](PWA) | Mobile | Desktop | OS
------- | ----| ------ | ------- | -------
Safari | iOS Yes | iOS Newest | Newest | iOS, macOS
Iris | No | No | Newest | [Iris browser news](https://www.riscosopen.org/forum/forums/1/topics/19545), Download [RISC OS Direct](https://www.riscosdev.com/direct/) for Raspberry Pi etc. [Other versions of RISC OS for many ARM CPU devices](https://www.riscosopen.org/content/downloads) do not have Iris browser yet, but there could be some way to transfer Iris browser files from RISC OS Direct.
## Firefox based
@ -17,10 +18,8 @@ Any telemetry at any Firefox based browser can be additionally most locked down
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/BSD/RasPi. [Haiku](https://discuss.haiku-os.org/t/progress-on-porting-firefox/13493/143) not tested yet - [HN](https://news.ycombinator.com/item?id=41214762).
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. [Repo](https://gitlab.com/ubports/development/core/morph-browser)
[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
[Mypal](https://github.com/reactosapps/apps/releases/download/0.01/mypal-27.9.4.win32.installer.exe) | No | No | Newest | For 32bit ReactOS/WinXP/Win7/etc [issue](https://github.com/wekan/wekan/issues/3132)
Firefox | No | Newest | Newest | iOS/Android/Win/Mac/Linux/BSD/RasPi. At iOS uses Safari engine, elsewhere Firefox engine. [Haiku](https://discuss.haiku-os.org/t/progress-on-porting-firefox/13493/143) not tested yet - [HN](https://news.ycombinator.com/item?id=41214762).
[Waterfox](https://www.waterfox.net) | No | No | Yes | Win/Mac/Linux, more private than Firefox, no tracking. [Repo](https://github.com/BrowserWorks/Waterfox)
[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)
@ -38,6 +37,8 @@ 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
Morph Browser | No | Yes | Yes | [Ubuntu Touch](https://ubports.com) based on Ubuntu 16.04 and 20.04 at all Ubuntu Touch devices, [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/) (not RasPi4 yet). [Repo](https://gitlab.com/ubports/development/core/morph-browser)
[OpenStore App](https://open-store.io/app/wekan.wekanteam) | Yes | Yes | Yes | [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 . App source code for Ubuntu 16.04 at https://github.com/wekan/wekan-openstore and Ubuntu 20.04 at https://github.com/wekan/wekan-openstore2
[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
@ -60,7 +61,7 @@ Internet Explorer | No | No | No | No | No
- Apache 2.0 or MIT license
- Repo: https://github.com/versotile-org/verso
## Ladybird based, not tested yet:
## Ladybird based, not yet compatible with WeKan
- BSD-2-Clause license
- Website: https://ladybird.org
@ -76,7 +77,7 @@ Benefits:
## Desktop app with Meteor
https://forums.meteor.com/t/desktop-electron-meteor-app-with-todesktop/60904
- https://forums.meteor.com/t/desktop-electron-meteor-app-with-todesktop/60904
## Optional Payments

View file

@ -2,6 +2,7 @@
- 2024-08 Design discussion here: https://github.com/wekan/wekan/discussions/5507
- Original WeKan Design:
- Uses WeKan style confirm popups `Popup.afterConfirm(` , translations etc. Please look at existing code to keep same style.
- Kanban, the good parts. Like was done when figuring out best design for Swimlanes https://github.com/wekan/wekan/issues/955
- Intuitive, easy to figure out, prevent messing up something https://github.com/wekan/wekan/wiki/Monkey-Proof-Software
- Polished UI/UX

View file

@ -6,6 +6,7 @@ Please read the meteor style guide before making any significant contribution.
# Stories about how Wekan works, and developing Wekan
- [Login code](https://github.com/wekan/wekan/issues/5714)
- 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)

View file

@ -1,3 +1,7 @@
## Learning Course: Your First Meteor 3.1 Application
- https://www.youtube.com/watch?v=aFZzBb2oRi8&list=PLKKckIyt2nF863eP16mvVgWKR4JDyJoKy
## Meteor 3 Example Code
- https://github.com/fredmaiaarantes/simpletasks

View file

@ -1,8 +1 @@
Wekan works on x64. There is not yet version for [Raspberry Pi](https://github.com/wekan/wekan/issues/1053).
Wekan requires MongoDB 3.2.x . For other requirements and versions see [VirtualBox scripts](https://github.com/wekan/wekan-maintainer/tree/master/virtualbox) or [Dockerfile](https://github.com/wekan/wekan/blob/main/Dockerfile).
Known bugs with other versions:
- Node 6.x: 100% CPU usage.
- MongoDB 3.4.x: Wekan crashes when uploading attachment.
- [Hardened kernel prevents creating new Wekan boards at Sandstorm](https://github.com/wekan/wekan/issues/1398)
WeKan Requiremens are at https://wekan.github.io/install/

View file

@ -0,0 +1,23 @@
## Multiple lines to Checklist
1. Click Add new Checklist
2. Click Add new Checklist Item
3. Toggle `One line of text = one checklist item`
4. Paste multiple lines of text
5. Click Save
<img src="https://wekan.github.io/multiline/multiline1.png" width="60%" alt="Multiple lines to Checklist" />
## Card ☰ Menu / Copy Checklist Template to Many Cards
<img src="https://wekan.github.io/multiline/multiline2.png" width="60%" alt="Checklist Template to Many Cards 1" />
## Edit titles and descriptions of Many Cards
```
[ {"title": "First card title", "description":"First card description"},
{"title":"Second card title","description":"Second card description"},
{"title":"Last card title","description":"Last card description"} ]
```
<img src="https://wekan.github.io/multiline/multiline3.png" width="60%" alt="Checklist Template to Many Cards 2" />

View file

@ -52,7 +52,15 @@ sudo snap set wekan ldap-authentication-userdn='CN=LDAP-User,OU=Service Accounts
sudo snap set wekan ldap-authentication-password='<password>'
sudo snap set wekan ldap-log-enabled='true'
sudo snap set wekan ldap-background-sync='true'
sudo snap set wekan ldap-background-sync-interval='every 1 minute'
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#sudo snap set wekan ldap-background-sync-interval='every 1 hours'
# At which interval does the background task sync in milliseconds.
# If not in use, Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
#sudo snap set wekan ldap-background-sync-interval=''
sudo snap set wekan ldap-background-sync-interval='every 1 hours'
sudo snap set wekan ldap-background-sync-keep-existant-users-updated='true'
sudo snap set wekan ldap-background-sync-import-new-users='true'
sudo snap set wekan ldap-encryption='false'
@ -100,7 +108,15 @@ snap set wekan ldap-basedn='dc=example,dc=com'
snap set wekan ldap-background-sync='true'
snap set wekan ldap-background-sync-keep-existant-users-updated='true'
snap set wekan ldap-background-sync-import-new-users='true'
snap set wekan ldap-background-sync-interval='Every 1 minute'
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#sudo snap set wekan ldap-background-sync-interval='every 1 hours'
# At which interval does the background task sync in milliseconds.
# If not in use, Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
#sudo snap set wekan ldap-background-sync-interval=''
snap set wekan ldap-background-sync-interval='every 1 hours'
snap set wekan ldap-merge-existing-users='true'
snap set wekan ldap-user-search-field='uid'
snap set wekan ldap-user-search-filter='(&(objectclass=person))'
@ -121,7 +137,15 @@ sudo snap set wekan ldap-authentication-password='********'
sudo snap set wekan ldap-authentication-userdn='cn=admin,dc=*******,dc=lan'
sudo snap set wekan ldap-background-sync='true'
sudo snap set wekan ldap-background-sync-import-new-users='true'
sudo snap set wekan ldap-background-sync-interval='Every 1 minute'
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#sudo snap set wekan ldap-background-sync-interval='every 1 hours'
# At which interval does the background task sync in milliseconds.
# If not in use, Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
#sudo snap set wekan ldap-background-sync-interval=''
sudo snap set wekan ldap-background-sync-interval='every 1 hours'
sudo snap set wekan ldap-basedn='dc=*****,dc=lan'
sudo snap set wekan ldap-email-field='mail'
sudo snap set wekan ldap-enable='true'
@ -316,10 +340,14 @@ services:
# LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background
# example : LDAP_BACKGROUND_SYNC=true
- LDAP_BACKGROUND_SYNC=false
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync
# example : LDAP_BACKGROUND_SYNC_INTERVAL='every 15 minutes'
# for more info: http://bunkat.github.io/later/parsers.html#text
- LDAP_BACKGROUND_SYNC_INTERVAL='every 1 hour'
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
# At which interval does the background task sync in milliseconds.
# Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
- LDAP_BACKGROUND_SYNC_INTERVAL=''
# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
# example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false

View file

@ -46,4 +46,22 @@ Wekan clientside code is at `wekan/client/components/main/layouts.*`
Wekan serverside code is at:
- `wekan/server/authentication.js` at bottom
- `wekan/packages/meteor-accounts-saml/*`
- `wekan/packages/meteor-accounts-saml/*`
## Gitea
- https://github.com/crewjam/saml
- https://github.com/go-gitea/gitea/pull/29403
- https://docs.gitea.com/enterprise/features/saml-auth
## Laravel
- https://github.com/24Slides/laravel-saml2
## ruby-saml/omniauth/RoR: Sign in as anyone: Bypassing SAML SSO authentication with parser differentials
- https://github.blog/security/sign-in-as-anyone-bypassing-saml-sso-authentication-with-parser-differentials/
- https://news.ycombinator.com/item?id=43349634
- https://github.com/github/securitylab

View file

@ -1,7 +1,12 @@
- At some cases [Hardened kernel may prevent creating new Wekan boards at Sandstorm](https://github.com/wekan/wekan/issues/1398)
# Sandstorm at Debian and Ubuntu
### Sandstorm CloudFlare DNS settings
Sandstorm works when configured to full domain, with CloudFlare SSL/TLS, with Caddy.
Not subdomain, not sub-url, and not with Let's Encrypt that AFAIK does not support wildcard SSL/TLS.
Source: https://github.com/sandstorm-io/sandstorm/issues/3714#issuecomment-2366866243
For me, it works at CloudFlare DNS using TLS Strict checking and DNS setting clicking to orange cloud icon to make TLS proxy with Origin certificate, that is at /etc/caddy/certs/example.com.pem with above private key and below cert.
@ -13,17 +18,52 @@ DNS records:
```
Caddyfile, proxy to KVM VM that is running Debian and Sandstorm:
```
# Full domain where Sandstorm login is. Not subdomain. Not sub-url.
*.example.com example.com {
tls {
load /etc/caddy/certs
alpn http/1.1
}
# If KVM VM, it's IP address:
#reverse_proxy 123.123.123.123:80
# Localhost port 81, when not in KVM VM
reverse_proxy 127.0.0.1:81
}
reverse_proxy 123.123.123.123:80
blog.somecompany.com {
tls {
load /etc/caddy/certs
alpn http/1.1
}
# Blog hosted at Sandstorm WordPress
reverse_proxy 127.0.0.1:81
}
othercompany.com {
tls {
load /etc/caddy/certs
alpn http/1.1
}
# Website hosted at Sandstorm Hacker CMS
reverse_proxy 127.0.0.1:81
}
```
At /opt/sandstorm/sandstorm.conf is domain, http port etc.
If having Sandstorm inside of KVM VM: https://github.com/wekan/wekan/blob/main/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md
At /opt/sandstorm/sandstorm.conf is domain where Sandstorm login is, http port etc.
```
SERVER_USER=sandstorm
PORT=81
MONGO_PORT=6081
BIND_IP=127.0.0.1
BASE_URL=https://example.com
WILDCARD_HOST=*.example.com
UPDATE_CHANNEL=dev
ALLOW_DEV_ACCOUNTS=false
SMTP_LISTEN_PORT=25
#SANDCATS_BASE_DOMAIN=sandcats.io
#HTTPS_PORT=443
```
Some related info at:
https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config

View file

@ -520,6 +520,15 @@ services:
# https://bunkat.github.io/later/parsers.html#text
#- LDAP_BACKGROUND_SYNC_INTERVAL='every 1 hour'
#
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
# At which interval does the background task sync in milliseconds.
# Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722
- LDAP_BACKGROUND_SYNC_INTERVAL=''
#
# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
# example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
#- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false

View file

@ -10,19 +10,19 @@ This is without container (without Docker or Snap).
Right click and download files 1-4:
1. [wekan-7.80-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.80/wekan-7.80-amd64-windows.zip)
1. [wekan-7.85-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.85/wekan-7.85-amd64-windows.zip)
2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe)
3. [mongodb-windows-x86_64-6.0.19-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.19-signed.msi)
3. [mongodb-windows-x86_64-6.0.22-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.22-signed.msi)
4. [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/main/start-wekan.bat)
5. Copy files from steps 1-4 with USB stick or DVD to offline Windows computer
6. Double click `mongodb-windows-x86_64-6.0.19-signed.msi` . In installer, uncheck downloading MongoDB compass.
6. Double click `mongodb-windows-x86_64-6.0.22-signed.msi` . In installer, uncheck downloading MongoDB compass.
7. Unzip `wekan-7.80-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
7. Unzip `wekan-7.85-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
```
bundle (directory)

View file

@ -129,6 +129,7 @@
# <a name="Features"></a>Features
* [Multiline](Multiline)
* [Linked Cards](Linked-Cards)
* [Drag Drop](https://github.com/wekan/wekan/wiki/Drag-Drop) on Mobile and Desktop
* [Rclone: Store attachments to cloud storage like S3, MinIO, etc](Rclone)

View file

@ -411,10 +411,10 @@
"user-can-not-export-card-to-pdf": "User can not export card to PDF",
"exportBoardPopup-title": "Export board",
"exportCardPopup-title": "Export card",
"sort": "Sort",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sort-desc": "Click to Sort List",
"sort": "رتب",
"sorted": "مرتبة",
"remove-sort": "إزالة الفرز\n ",
"sort-desc": "انقر لفرز القائمة\n ",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
"list-label-title": "Name of the List",
@ -1207,7 +1207,7 @@
"newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items",
"newLineNewItem": "One line of text = one checklist item",
"newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order",
"originOrder": "original order",
"originOrder": "النظام الأصلي\n ",
"copyChecklist": "Copy Checklist",
"copyChecklistPopup-title": "Copy Checklist",
"card-show-lists": "Card Show Lists",

View file

@ -319,7 +319,7 @@
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"copy-text-to-clipboard": "Copy text to clipboard",
"linkCardPopup-title": "Link Card",
"searchElementPopup-title": "Search",
"searchElementPopup-title": "Klask",
"copyCardPopup-title": "Copy Card",
"copyManyCardsPopup-title": "Copy Template to Many Cards",
"copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@ -572,7 +572,7 @@
"rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions",
"rescue-card-description-dialogue": "Overwrite current card description with your changes?",
"save": "Save",
"search": "Search",
"search": "Klask",
"rules": "Rules",
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -300,7 +300,7 @@
"color-white": "white",
"color-yellow": "flava",
"unset-color": "Unset",
"comments": "Comments",
"comments": "Komentoj",
"comment": "Komento",
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
@ -1253,7 +1253,7 @@
"newTranslationPopup-title": "New custom translation string",
"editTranslationPopup-title": "Edit custom translation string",
"settingsTranslationPopup-title": "Delete this custom translation string?",
"translation": "Translation",
"translation": "Traduko",
"text": "Teksto",
"translation-text": "Translation text",
"show-subtasks-field": "Show subtasks field",

View file

@ -16,9 +16,9 @@
"act-uncheckedItem": "desmarcado el elemento __checklistItem__ de la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-completeChecklist": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-uncompleteChecklist": "no completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-addComment": "comentario en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-editComment": "comentario editado en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-deleteComment": "comentario eliminado en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-addComment": "ha comentado en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-editComment": "ha editado la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-deleteComment": "ha borrado el comentario en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-createBoard": "creó el tablero __board__",
"act-createSwimlane": "creó el carril de flujo __swimlane__ en el tablero __board__",
"act-createCard": "creada la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
@ -49,7 +49,7 @@
"activity-archived": "%s se ha archivado",
"activity-attached": "adjuntado(s) %s a %s",
"activity-created": "ha creado %s",
"activity-changedListTitle": "renamed list to %s",
"activity-changedListTitle": "lista renombrada como %s",
"activity-customfield-created": "creó el campo personalizado %s",
"activity-excluded": "ha excluido %s de %s",
"activity-imported": "ha importado %s en %s desde %s",
@ -86,27 +86,27 @@
"add-card": "Añadir una tarjeta",
"add-card-to-top-of-list": "Subir la tarjeta al principio de la lista",
"add-card-to-bottom-of-list": "Bajar la tarjeta al final de la lista",
"setListWidthPopup-title": "Set Widths",
"set-list-width": "Set Widths",
"set-list-width-value": "Set Min & Max Widths (pixels)",
"list-width-error-message": "List widths must be integers greater than 100",
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
"setSwimlaneHeightPopup-title": "Set Swimlane Height",
"set-swimlane-height": "Set Swimlane Height",
"set-swimlane-height-value": "Swimlane Height (pixels)",
"swimlane-height-error-message": "Swimlane height must be a positive integer",
"setListWidthPopup-title": "Ajustar anchuras",
"set-list-width": "Ajustar anchuras",
"set-list-width-value": "Establecer anchos mín. y máx. (píxeles)",
"list-width-error-message": "Las anchuras de las listas deben ser enteros mayores de 100",
"keyboard-shortcuts-enabled": "Atajos de teclado habilitados. Haz clic para deshabilitarlos.",
"keyboard-shortcuts-disabled": "Atajos de teclado deshabilitados. Haz clic para habilitarlos.",
"setSwimlaneHeightPopup-title": "Ajustar la altura del carril",
"set-swimlane-height": "Ajustar la altura del carril",
"set-swimlane-height-value": "Altura de carril (píxeles)",
"swimlane-height-error-message": "La altura de carril debe ser un entero positivo",
"add-swimlane": "Añadir un carril de flujo",
"add-subtask": "Añadir subtarea",
"add-checklist": "Añadir una lista de verificación",
"add-checklist-item": "Añadir un elemento a la lista de verificación",
"close-add-checklist-item": "Close add an item to checklist form",
"close-edit-checklist-item": "Close edit an item to checklist form",
"close-add-checklist-item": "Cerrar el formulario para añadir un elemento a la lista de verificación",
"close-edit-checklist-item": "Cerrar el formulario de edición de un elemento de la lista de verificación",
"convertChecklistItemToCardPopup-title": "Convertir en tarjeta",
"add-cover": "Add cover image to minicard",
"add-cover": "Añadir imagen de portada a la minitarjeta",
"add-label": "Añadir una etiqueta",
"add-list": "Añadir una lista",
"add-after-list": "Add After List",
"add-after-list": "Añadir después de la lista",
"add-members": "Añadir miembros",
"added": "Añadida el",
"addMemberPopup-title": "Miembros",
@ -120,7 +120,7 @@
"and-n-other-card": "y __count__ tarjeta más",
"and-n-other-card_plural": "y otras __count__ tarjetas",
"apply": "Aplicar",
"app-is-offline": "Cargando, espera por favor. Refrescar esta página causará pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.",
"app-is-offline": "Cargando, espera por favor. Refrescar esta página causará la pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.",
"app-try-reconnect": "Intente reconectar.",
"archive": "Archivar",
"archive-all": "Archivar todo",
@ -149,10 +149,10 @@
"avatar-too-big": "El avatar es demasiado grande (__size__ máx)",
"back": "Atrás",
"board-change-color": "Cambiar el color",
"board-change-background-image": "Change Background Image",
"board-background-image-url": "Background Image URL",
"add-background-image": "Add Background Image",
"remove-background-image": "Remove Background Image",
"board-change-background-image": "Cambiar imagen de fondo",
"board-background-image-url": "URL de la imagen de fondo",
"add-background-image": "Añadir imagen de fondo",
"remove-background-image": "Quitar imagen de fondo",
"show-at-all-boards-page" : "Mostrar todos los tableros",
"board-info-on-my-boards" : "Configuración de todos los tableros",
"boardInfoOnMyBoardsPopup-title" : "Configuración de todos los tableros",
@ -163,11 +163,11 @@
"board-not-found": "Tablero no encontrado",
"board-private-info": "Este tablero será <strong>privado</strong>.",
"board-public-info": "Este tablero será <strong>público</strong>.",
"board-drag-drop-reorder-or-click-open": "Mueve y posiciona para reordenar los iconos de los tableros. Click en el icono del tablero para abrirlo",
"board-drag-drop-reorder-or-click-open": "Arrastra y suelta para reordenar los iconos del tablero. Click en el icono del tablero para abrirlo",
"boardChangeColorPopup-title": "Cambiar el fondo del tablero",
"boardChangeBackgroundImagePopup-title": "Change Background Image",
"boardChangeBackgroundImagePopup-title": "Cambiar imagen de fondo",
"allBoardsChangeColorPopup-title": "Cambiar el color",
"allBoardsChangeBackgroundImagePopup-title": "Change Background Image",
"allBoardsChangeBackgroundImagePopup-title": "Cambiar imagen de fondo",
"boardChangeTitlePopup-title": "Renombrar el tablero",
"boardChangeVisibilityPopup-title": "Cambiar visibilidad",
"boardChangeWatchPopup-title": "Cambiar vigilancia",
@ -217,10 +217,10 @@
"vote-against": "contrarios",
"deleteVotePopup-title": "¿Borrar voto?",
"vote-delete-pop": "El Borrado es permanente. Perderá todas las acciones asociadas con este voto.",
"cardStartPlanningPokerPopup-title": "Comenzar una Planning Poker",
"card-edit-planning-poker": "Editar la planificación del Poker",
"editPokerEndDatePopup-title": "Cambiar la fecha final para la planificación del Poker",
"poker-question": "Planificación del Poker",
"cardStartPlanningPokerPopup-title": "Comenzar un Planning Poker",
"card-edit-planning-poker": "Editar el Planning Poker",
"editPokerEndDatePopup-title": "Cambiar la fecha final de voto del Planning Poker",
"poker-question": "Planning Poker",
"poker-one": "1",
"poker-two": "2",
"poker-three": "3",
@ -236,8 +236,8 @@
"poker-result-who": "¿Quien?",
"poker-replay": "Reproducir",
"set-estimation": "Fijar estimación",
"deletePokerPopup-title": "¿Borrar el póquer de planificación?",
"poker-delete-pop": "El borrado es permanente. Perderás todas las acciones asociadas a este póker de planificación.",
"deletePokerPopup-title": "¿Borrar el Planning Poker?",
"poker-delete-pop": "El borrado es permanente. Perderás todas las acciones asociadas a este Planning Poker.",
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
"cardArchivePopup-title": "¿Archivar tarjeta?",
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
@ -266,9 +266,9 @@
"checklists": "Lista de verificación",
"click-to-star": "Haz clic para destacar este tablero.",
"click-to-unstar": "Haz clic para dejar de destacar este tablero.",
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
"auto-list-width": "Auto list width",
"click-to-enable-auto-width": "Ancho de lista automático deshabilitado. Haz clic para habilitarlo.",
"click-to-disable-auto-width": "Ancho de lista automático habilitado. Haz clic para deshabilitarlo.",
"auto-list-width": "Ancho de lista automático",
"clipboard": "el portapapeles o con arrastrar y soltar",
"close": "Cerrar",
"close-board": "Cerrar el tablero",
@ -300,7 +300,7 @@
"color-white": "blanco",
"color-yellow": "amarilla",
"unset-color": "Desmarcar",
"comments": "Comments",
"comments": "Comentarios",
"comment": "Comentar",
"comment-placeholder": "Escribir comentario",
"comment-only": "Sólo comentarios",
@ -313,7 +313,7 @@
"worker-desc": "Solo puede mover tarjetas, asignarse a la tarjeta y comentar.",
"computer": "el ordenador",
"confirm-subtask-delete-popup": "¿Seguro que quieres eliminar la subtarea?",
"confirm-checklist-delete-popup": "¿Está seguro de que quiere eliminar la lista de tareas?",
"confirm-checklist-delete-popup": "¿Está seguro de querer eliminar la lista de tareas?",
"subtaskDeletePopup-title": "¿Borrar subtarea?",
"checklistDeletePopup-title": "¿Borrar la lista de tareas?",
"copy-card-link-to-clipboard": "Copiar el enlace de la tarjeta al portapapeles",
@ -338,7 +338,7 @@
"custom-field-date": "Fecha",
"custom-field-dropdown": "Lista desplegable",
"custom-field-dropdown-none": "(nada)",
"custom-field-dropdown-options": "Opciones de la lista",
"custom-field-dropdown-options": "Opciones de listas",
"custom-field-dropdown-options-placeholder": "Pulsa Intro para añadir más opciones",
"custom-field-dropdown-unknown": "(desconocido)",
"custom-field-number": "Número",
@ -383,7 +383,7 @@
"email-sent": "Correo enviado",
"email-verifyEmail-subject": "Verifica tu dirección de correo en __siteName__",
"email-verifyEmail-text": "Hola __user__,\n\nPara verificar tu cuenta de correo electrónico, haz clic en el siguiente enlace.\n\n__url__\n\nGracias.",
"enable-vertical-scrollbars": "Enable vertical scrollbars",
"enable-vertical-scrollbars": "Habilitar barras de desplazamiento verticales",
"enable-wip-limit": "Habilitar el límite del trabajo en proceso",
"error-board-doesNotExist": "El tablero no existe",
"error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso",
@ -414,7 +414,7 @@
"sort": "Ordenar",
"sorted": "Ordenado",
"remove-sort": "Eliminar el ordenamiento",
"sort-desc": "Click para ordenar la lista",
"sort-desc": "Clic para ordenar la lista",
"list-sort-by": "Ordenar la lista por:",
"list-label-modifiedAt": "Hora de último acceso",
"list-label-title": "Nombre de la lista",
@ -451,7 +451,7 @@
"advanced-filter-description": "El filtrado avanzado permite escribir una cadena que contiene los siguientes operadores: == != <= >= && || ( ) Se utiliza un espacio como separador entre los operadores. Se pueden filtrar todos los campos personalizados escribiendo sus nombres y valores. Por ejemplo: Campo1 == Valor1. Nota: Si los campos o valores contienen espacios, deben encapsularse entre comillas simples. Por ejemplo: 'Campo 1' == 'Valor 1'. Para omitir los caracteres de control único (' \\\\/), se usa \\\\. Por ejemplo: Campo1 = I\\\\'m. También se pueden combinar múltiples condiciones. Por ejemplo: C1 == V1 || C1 == V2. Normalmente todos los operadores se interpretan de izquierda a derecha. Se puede cambiar el orden colocando paréntesis. Por ejemplo: C1 == V1 && ( C2 == V2 || C2 == V3 ). También se puede buscar en campos de texto usando expresiones regulares: C1 == /Tes.*/i",
"fullname": "Nombre completo",
"header-logo-title": "Volver a tu página de tableros",
"show-activities": "Show Activities",
"show-activities": "Mostrar actividades",
"headerBarCreateBoardPopup-title": "Crear tablero",
"home": "Inicio",
"import": "Importar",
@ -500,7 +500,7 @@
"list-move-cards": "Mover todas las tarjetas de esta lista",
"list-select-cards": "Seleccionar todas las tarjetas de esta lista",
"set-color-list": "Cambiar el color",
"listActionPopup-title": "Acciones de la lista",
"listActionPopup-title": "Acciones de listas",
"settingsUserPopup-title": "Preferencias de usuario",
"settingsTeamPopup-title": "Configuración del Equipo",
"settingsOrgPopup-title": "Configuración de la Organización",
@ -510,7 +510,7 @@
"listImportCardsTsvPopup-title": "Importar CSV/TSV",
"listMorePopup-title": "Más",
"link-list": "Enlazar a esta lista",
"list-delete-pop": "Todas las acciones serán eliminadas del historial de actividades y no se podrá recuperar la lista. Esta acción no puede deshacerse.",
"list-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la lista. Esta acción no puede deshacerse.",
"list-delete-suggest-archive": "Puedes mover una lista al Archivo para quitarla del tablero y preservar la actividad.",
"lists": "Listas",
"swimlanes": "Carriles",
@ -540,7 +540,7 @@
"normal": "Normal",
"normal-desc": "Puedes ver y editar tarjetas. No puedes cambiar la configuración.",
"not-accepted-yet": "La invitación no ha sido aceptada aún",
"notify-participate": "Receive updates to any cards you participate as creator or member",
"notify-participate": "Recibir actualizaciones de cualquier tarjeta en la que participes como creador o miembro",
"notify-watch": "Recibir actuaizaciones de cualquier tablero, lista o tarjeta que estés vigilando",
"optional": "opcional",
"or": "o",
@ -558,7 +558,7 @@
"public": "Público",
"public-desc": "Este tablero es público. Es visible para cualquiera a través del enlace, y se mostrará en los buscadores como Google. Sólo las personas añadidas al tablero pueden editarlo.",
"quick-access-description": "Destaca un tablero para añadir un acceso directo en esta barra.",
"remove-cover": "Remove cover image from minicard",
"remove-cover": "Quitar imagen de portada de la minitarjeta",
"remove-from-board": "Desvincular del tablero",
"remove-label": "Eliminar la etiqueta",
"listDeletePopup-title": "¿Eliminar la lista?",
@ -580,14 +580,14 @@
"select-board": "Seleccionar tablero",
"set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.",
"setWipLimitPopup-title": "Establecer el límite del trabajo en proceso",
"shortcut-add-self": "Add yourself to current card",
"shortcut-add-self": "Añadirte a ti mismo a la tarjeta actual",
"shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual",
"shortcut-autocomplete-emoji": "Autocompletar emoji",
"shortcut-autocomplete-members": "Autocompletar miembros",
"shortcut-clear-filters": "Limpiar todos los filtros",
"shortcut-close-dialog": "Cerrar el cuadro de diálogo",
"shortcut-filter-my-cards": "Filtrar mis tarjetas",
"shortcut-filter-my-assigned-cards": "Filter my assigned cards",
"shortcut-filter-my-assigned-cards": "Filtrar mis tarjetas asignadas",
"shortcut-show-shortcuts": "Mostrar esta lista de atajos",
"shortcut-toggle-filterbar": "Conmutar la barra lateral del filtro",
"shortcut-toggle-searchbar": "Conmutar la barra lateral de búsqueda",
@ -604,13 +604,13 @@
"this-board": "este tablero",
"this-card": "esta tarjeta",
"spent-time-hours": "Tiempo consumido (horas)",
"overtime-hours": "Tiempo excesivo (horas)",
"overtime-hours": "Horas extras",
"overtime": "Tiempo excesivo",
"has-overtime-cards": "Hay tarjetas con el tiempo excedido",
"has-spenttime-cards": "Se ha excedido el tiempo de las tarjetas",
"time": "Hora",
"title": "Título",
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
"toggle-assignees": "Alternar asignados 1-9 para la tarjeta (por orden de adición al tablero).",
"toggle-labels": "Alterna las etiquetas 1-9 para la tarjeta. La selección múltiple añade las etiquetas 1-9",
"remove-labels-multiselect": "La selección múltiple elimina las etiquetas 1-9",
"tracking": "Siguiendo",
@ -624,12 +624,12 @@
"uploaded-avatar": "Avatar cargado",
"custom-top-left-corner-logo-image-url": "Personalizar la URL del logotipo en la esquina superior izquierda",
"custom-top-left-corner-logo-link-url": "Personalizar el enlace del logotipo de la esquina superior izquierda",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-top-left-corner-logo-height": "Altura personalizada del logo de la esquina superior izquierda. Por defecto: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"custom-help-link-url": "Custom Help Link URL",
"custom-help-link-url": "Enlace URL de ayuda personalizada",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line",
"automatic-linked-url-schemes": "Esquemas de URL personalizados que deberían ser clicables automáticamente. Un esquema de URL por línea.",
"username": "Nombre de usuario",
"import-usernames": "Importar Usuarios",
"view-it": "Verla",
@ -656,7 +656,7 @@
"disable-forgot-password": "Disable Forgot Password",
"invite": "Invitar",
"invite-people": "Invitar a personas",
"to-boards": "A el(los) tablero(s)",
"to-boards": "Al (A los) tablero(s)",
"email-addresses": "Direcciones de correo electrónico",
"smtp-host-description": "Dirección del servidor SMTP para gestionar tus correos",
"smtp-port-description": "Puerto usado por el servidor SMTP para mandar correos",
@ -731,7 +731,7 @@
"setListColorPopup-title": "Elegir un color",
"assigned-by": "Asignado por",
"requested-by": "Solicitado por",
"card-sorting-by-number": "Card sorting by number",
"card-sorting-by-number": "Orden de tarjetas por número",
"board-delete-notice": "Se eliminarán todas las listas, tarjetas y acciones asociadas a este tablero. Esta acción no puede deshacerse.",
"delete-board-confirm-popup": "Se eliminarán todas las listas, tarjetas, etiquetas y actividades, y no podrás recuperar los contenidos del tablero. Esta acción no puede deshacerse.",
"boardDeletePopup-title": "¿Eliminar el tablero?",
@ -742,7 +742,7 @@
"queue": "Cola",
"subtask-settings": "Preferencias de las subtareas",
"card-settings": "Preferencias de la tarjeta",
"minicard-settings": "Minicard Settings",
"minicard-settings": "Configuración de minitarjeta",
"boardSubtaskSettingsPopup-title": "Preferencias de las subtareas del tablero",
"boardCardSettingsPopup-title": "Preferencias de la tarjeta",
"boardMinicardSettingsPopup-title": "Minicard Settings",
@ -750,9 +750,9 @@
"deposit-subtasks-list": "Lista de destino para subtareas depositadas aquí:",
"show-parent-in-minicard": "Mostrar el padre en una minitarjeta:",
"description-on-minicard": "Description on minicard",
"cover-attachment-on-minicard": "Cover image on minicard",
"badge-attachment-on-minicard": "Count of attachments on minicard",
"card-sorting-by-number-on-minicard": "Card sorting by number on minicard",
"cover-attachment-on-minicard": "Imagen de portada de la minitarjeta",
"badge-attachment-on-minicard": "Contador de adjuntos en la minitarjeta",
"card-sorting-by-number-on-minicard": "Orden de tarjetas por número de minitarjeta",
"prefix-with-full-path": "Prefijo con ruta completa",
"prefix-with-parent": "Prefijo con el padre",
"subtext-with-full-path": "Subtexto con ruta completa",
@ -786,7 +786,7 @@
"r-added-to": "Añadido a",
"r-removed-from": "eliminado de",
"r-the-board": "el tablero",
"r-list": "la lista",
"r-list": "lista",
"set-filter": "Filtrar",
"r-moved-to": "Movido a",
"r-moved-from": "Movido desde",
@ -861,12 +861,12 @@
"r-d-remove-checklist": "Eliminar lista de verificación",
"r-by": "por",
"r-add-checklist": "Añadir una lista de verificación",
"r-with-items": "con items",
"r-with-items": "con elementos",
"r-items-list": "item1,item2,item3",
"r-add-swimlane": "Agregar el carril",
"r-swimlane-name": "nombre del carril",
"r-board-note": "Nota: deje un campo vacío para que coincida con todos los valores posibles",
"r-checklist-note": "Nota: los ítems de la lista tienen que escribirse como valores separados por coma.",
"r-checklist-note": "Nota: los elementos de la lista tienen que escribirse como valores separados por coma.",
"r-when-a-card-is-moved": "Cuando una tarjeta es movida a otra lista",
"r-set": "Cambiar",
"r-update": "Actualizar",
@ -877,7 +877,7 @@
"r-df-received-at": "recibido",
"r-to-current-datetime": "a la fecha/hora actual",
"r-remove-value-from": "Eliminar el valor de",
"r-link-card": "Link card to",
"r-link-card": "Enlazar tarjeta a",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
@ -890,7 +890,7 @@
"hide-board-member-list": "Hide board member list on All Boards",
"add-custom-html-after-body-start": "Añade HTML personalizado después de <body>",
"add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
"error-undefined": "Algo no está bien",
"error-undefined": "Algo ha salido mal",
"error-ldap-login": "Ocurrió un error al intentar acceder",
"display-authentication-method": "Mostrar el método de autenticación",
"oidc-button-text": "Customize the OIDC button text",
@ -916,15 +916,15 @@
"almostdue": "está próxima la hora de vencimiento actual %s",
"pastdue": "se sobrepasó la hora de vencimiento actual%s",
"duenow": "la hora de vencimiento actual %s es hoy",
"act-newDue": "__list__/__card__ tiene una 1ra notificación de vencimiento [__board__]",
"act-newDue": "__list__/__card__ tiene una primera notificación de vencimiento [__board__]",
"act-withDue": "__list__/__card__ notificaciones de vencimiento [__board__]",
"act-almostdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ está próximo",
"act-pastdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ se sobrepasó",
"act-duenow": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ es ahora",
"act-atUserComment": "Se te mencionó en [__board__] __list__/__card__",
"delete-user-confirm-popup": "¿Seguro que quieres eliminar esta cuenta? Esta acción no puede deshacerse.",
"delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.",
"delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.",
"delete-user-confirm-popup": "¿Estás seguro de querer eliminar esta cuenta? Esta acción no puede deshacerse.",
"delete-team-confirm-popup": "¿Estás seguro de querer eliminar este equipo? Esta acción no puede deshacerse",
"delete-org-confirm-popup": "¿Estás seguro de querer eliminar esta organización? Esta acción no puede deshacerse.",
"accounts-allowUserDelete": "Permitir a los usuarios eliminar su cuenta",
"hide-minicard-label-text": "Ocultar el texto de la etiqueta de la minitarjeta",
"show-desktop-drag-handles": "Mostrar los controles de arrastre del escritorio",
@ -966,7 +966,7 @@
"delete-linked-card-before-this-card": "No puede borrar esta tarjeta antes de borrar la tarjeta enlazada que tiene",
"delete-linked-cards-before-this-list": "No puede borrar esta lista antes de borrar las tarjetas enlazadas que apuntan a tarjetas en esta lista",
"hide-checked-items": "Ocultar elementos marcados",
"hide-finished-checklist": "Hide finished checklist",
"hide-finished-checklist": "Esconder la lista de tareas finalizada",
"task": "Tarea",
"create-task": "Crear Tarea",
"ok": "Vale",
@ -974,7 +974,7 @@
"teams": "Equipos",
"displayName": "Mostrar Nombre",
"shortName": "Nombre Corto",
"autoAddUsersWithDomainName": "Automatically add users with the domain name",
"autoAddUsersWithDomainName": "Añadir automáticamente usuarios con el nombre del dominio",
"website": "Sitio web",
"person": "Persona",
"my-cards": "Mis Tarjetas",
@ -998,13 +998,13 @@
"dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.",
"broken-cards": "Tarjetas Rotas",
"board-title-not-found": "Tablero '%s' no encontrado.",
"swimlane-title-not-found": "Swimlane '%s' not found.",
"swimlane-title-not-found": "Carril '%s' no encontrado.",
"list-title-not-found": "Lista '%s' no encontrada.",
"label-not-found": "Etiqueta '%s' no encontrada.",
"label-color-not-found": "Label color %s not found.",
"user-username-not-found": "Usuario '%s' no encontrado.",
"comment-not-found": "Card with comment containing text '%s' not found.",
"org-name-not-found": "Organization '%s' not found.",
"org-name-not-found": "Organización '%s' no encontrada.",
"team-name-not-found": "Team '%s' not found.",
"globalSearch-title": "Buscar todas las tarjetas",
"no-cards-found": "Ninguna tarjeta encontrada",
@ -1013,9 +1013,9 @@
"n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
"operator-board": "tablero",
"operator-board-abbrev": "b",
"operator-swimlane": "swimlane",
"operator-swimlane": "carril",
"operator-swimlane-abbrev": "s",
"operator-list": "la lista",
"operator-list": "lista",
"operator-list-abbrev": "l",
"operator-label": "etiqueta",
"operator-label-abbrev": "#",
@ -1041,7 +1041,7 @@
"predicate-open": "abierto",
"predicate-ended": "finalizó",
"predicate-all": "todo",
"predicate-overdue": "overdue",
"predicate-overdue": "atrasado",
"predicate-week": "semana",
"predicate-month": "mes",
"predicate-quarter": "cuarto",
@ -1064,45 +1064,45 @@
"operator-number-expected": "operator __operator__ expected a number, got '__value__'",
"operator-sort-invalid": "sort of '%s' is invalid",
"operator-status-invalid": "'%s' no es un estado válido",
"operator-has-invalid": "%s is not a valid existence check",
"operator-has-invalid": "%s no es una comprobación de existencia válida",
"operator-limit-invalid": "%s no es un límite válido. El límite ha de ser un entero positivo.",
"operator-debug-invalid": "%s is not a valid debug predicate",
"next-page": "Página Siguiente",
"previous-page": "Página Anterior",
"heading-notes": "Notas",
"globalSearch-instructions-heading": "Buscar instrucciones.",
"globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
"globalSearch-instructions-heading": "Instrucciones de búsqueda",
"globalSearch-instructions-description": "Se pueden usar operadores para refinar la búsqueda. Los operadores se especifican escribiendo el nombre del operador y su valor separado por dos puntos. Por ejemplo, especificar `lista:Bloqueada` limitaría la búsqueda a tarjetas que conengan una lista llamada *Bloqueada*. Si el valor contiene espacios o caracteres especiales, debe escribirse entre comillas (por ejemplo: `__operator_list__:\"To Review\"`).",
"globalSearch-instructions-operators": "Operadores disponibles:",
"globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*",
"globalSearch-instructions-operator-board": "`__operator_board__:<title>` - tarjetas en tableros que coincidan con *<title>*",
"globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*",
"globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*",
"globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.",
"globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - tarjetas con comentarios que contengan *<text>*.",
"globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>",
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`",
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - abreviatura para `__operator_label__:<color>` o `__operator_label__:<name>`",
"globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*",
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`",
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - abreviatura para `user:<username>`",
"globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*",
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*",
"globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator",
"globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - tarjetas donde *<username>* es el creador de la tarjeta",
"globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*",
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*",
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.",
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - las tarjetas pertenecientes al tablero asignadas al equipo *<name>*",
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - tarjetas que vencen dentro de *<n>* days. `__operator_due__:__predicate_overdue__ lista todas las tarjetas que han vencido.",
"globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less",
"globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less",
"globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:",
"globalSearch-instructions-operator-status": "`__operator_status__:<status>` - donde *<status>* puede ser uno de los siguientes:",
"globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards",
"globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards",
"globalSearch-instructions-status-all": "`__predicate_all__` - todas las tarjetas archivadas o no archivadas",
"globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date",
"globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards",
"globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards",
"globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).",
"globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.",
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.",
"globalSearch-instructions-notes-1": "Múltiple operadores pueden ser seleccionados.",
"globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.",
"globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.",
"globalSearch-instructions-status-private": "`__predicate_private__` - solo tarjetas de tableros privados",
"globalSearch-instructions-operator-has": "`__operator_has__:<field>` - donde *<field>* puede ser `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` o `__predicate_member__`. Colocando un `-` delante de *<field>* busca la ausencia del valor en ese campo (por ejemplo, `has:-due` busca tarjetas sin fecha de vencimiento).",
"globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - donde *<sort-name>* puede ser `__predicate_due__`, `__predicate_created__` o `__predicate_modified__`. Para ordenar descendentemente, coloca un `-` delante del tipo de orden.",
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - donde *<n>* es un entero positivo que expresa el número de tarjetas que se mostrarán por página.",
"globalSearch-instructions-notes-1": "Se pueden especificar múltiples operadores.",
"globalSearch-instructions-notes-2": "Múltiples condiciones de operadores parecidos se tratan internamente con el operador lógico OR. Es decir, la búsqueda devolverá las tarjetas que coincidan con alguna de las condiciones:\n`__operator_list__:Disponible __operator_list__:Bloqueada` devolverá tarjetas contenidas en cualquier lista nombrada *Bloqueada* o *Disponible*.",
"globalSearch-instructions-notes-3": "Múltiples condiciones de operadores distintos se tratan internamente con el operador lógico AND. Es decir, la búsqueda devolverá las tarjetas que coincidan con TODAS las condiciones:\n`__operator_list__:Disponible __operator_label__:rojo` devuelve sólo las tarjetas en la lista *Disponible* con una etiqueta *roja*.",
"globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.",
"globalSearch-instructions-notes-4": "La búsqueda de texto distingue entre mayúsculas y minúsculas.",
"globalSearch-instructions-notes-4": "Las búsquedas de texto no distinguen entre mayúsculas y minúsculas.",
"globalSearch-instructions-notes-5": "Por defecto no se buscan las tarjetas archivadas.",
"link-to-search": "Enlazar a esta búsqueda",
"excel-font": "Arial",
@ -1111,32 +1111,32 @@
"label-names": "Nombres de las etiquetas",
"archived-at": "archivado el",
"sort-cards": "Ordenar tarjetas",
"sort-is-on": "Sort is on",
"sort-is-on": "Ordenamiento activado",
"cardsSortPopup-title": "Ordenar tarjetas",
"due-date": "Fecha de Vencimiento",
"server-error": "Error del Servidor",
"server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`",
"server-error-troubleshooting": "Por favor, envíe el error generado por el servidor.\nPara la instalación con snap, ejecute: `sudo snap logs wekan.wekan`\nPara la instalación con docker, ejecute: `sudo docker logs wekan-app`",
"title-alphabetically": "Título (Alfabéticamente)",
"created-at-newest-first": "Creación (Nuevos Primero)",
"created-at-oldest-first": "Creación (Antiguos Primero)",
"links-heading": "Enlaces",
"hide-activities-of-all-boards": "Don't show the board activities on all boards",
"now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden",
"hide-activities-of-all-boards": "No mostrar las actividades del tablero en todos los tableros",
"now-activities-of-all-boards-are-hidden": "Todas las actividades de todos los tableros están ahora ocultas",
"move-swimlane": "Move Swimlane",
"moveSwimlanePopup-title": "Move Swimlane",
"custom-field-stringtemplate": "String Template",
"custom-field-stringtemplate": "Plantilla de cadenas",
"custom-field-stringtemplate-format": "Format (use %{value} as placeholder)",
"custom-field-stringtemplate-separator": "Separator (use &#32; or &nbsp; for a space)",
"custom-field-stringtemplate-item-placeholder": "Pulsa intro para añadir más elementos",
"creator": "Creador",
"creator-on-minicard": "Creator on minicard",
"creator-on-minicard": "Creador en minitarjeta",
"filesReportTitle": "Informe sobre los archivos",
"reports": "Informes",
"rulesReportTitle": "Informe sobre las Reglas",
"boardsReportTitle": "Informe sobre los Tableros",
"cardsReportTitle": "Informe sobre las Tarjetas",
"copy-swimlane": "Copy Swimlane",
"copySwimlanePopup-title": "Copy Swimlane",
"copySwimlanePopup-title": "Copiar carril",
"display-card-creator": "Mostrar Creador de la Tarjeta",
"wait-spinner": "Wait Spinner",
"Bounce": "Bounce Wait Spinner",
@ -1150,7 +1150,7 @@
"maximize-card": "Maximizar Tarjeta",
"minimize-card": "Minimizar Tarjeta",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"delete-team-warning-message": "No se puede eliminar este equipo, hay al menos un usuario que pertenece a este equipo.",
"subject": "Asunto",
"details": "Detalles",
"carbon-copy": "Carbon Copy (Cc:)",
@ -1175,9 +1175,9 @@
"remove-btn": "Eliminar",
"filter-card-title-label": "Filtrar por el título de la tarjeta",
"invite-people-success": "Invitation to register sent with success",
"invite-people-error": "Error while sending invitation to register",
"invite-people-error": "Error al enviar la invitación para registrarse",
"can-invite-if-same-mailDomainName": "Email domain name",
"to-create-teams-contact-admin": "To create teams, please contact the administrator.",
"to-create-teams-contact-admin": "Para crear equipos, por favor contacte con el administrador.",
"Node_heap_total_heap_size": "Node heap: total heap size",
"Node_heap_total_heap_size_executable": "Node heap: total heap size executable",
"Node_heap_total_physical_size": "Node heap: total physical size",
@ -1195,7 +1195,7 @@
"Node_memory_usage_external": "Node memory usage: external",
"add-organizations": "Añadir organizaciones",
"add-organizations-label": "Added organizations are displayed below:",
"remove-organization-from-board": "Are you sure you want to remove this organization from this board ?",
"remove-organization-from-board": "¿Estás seguro de querer quitar esta organización del tablero?",
"to-create-organizations-contact-admin": "Para crear organizaciones, póngase en contacto con el administrador.",
"custom-legal-notice-link-url": "URL personalizada de la página de aviso legal",
"acceptance_of_our_legalNotice": "Al continuar, usted acepta nuestra",
@ -1204,25 +1204,25 @@
"checklistActionsPopup-title": "Acciones de la Lista de Tareas",
"moveChecklist": "Mover Lista de Tareas",
"moveChecklistPopup-title": "Mover Lista de Tareas",
"newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items",
"newLineNewItem": "One line of text = one checklist item",
"newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order",
"originOrder": "original order",
"newlineBecomesNewChecklistItem": "Cada línea de texto se convierte en un nuevo elemento de la lista de verificación",
"newLineNewItem": "Una línea de texto = un elemento de la lista de verificación",
"newlineBecomesNewChecklistItemOriginOrder": "Cada línea de texto se convierte en un nuevo elemento de la lista de verificación, orden original",
"originOrder": "orden original",
"copyChecklist": "Copiar Lista de Tareas",
"copyChecklistPopup-title": "Copiar Lista de Tareas",
"card-show-lists": "Mostrar Listas de Tarjetas",
"subtaskActionsPopup-title": "Acciones de la Subtarea",
"attachmentActionsPopup-title": "Acciones de Adhesión",
"attachment-move-storage-fs": "Mover el archivo adjunto al sistema de archivos",
"attachment-move-storage-gridfs": "Move attachment to GridFS",
"attachment-move-storage-gridfs": "Mover adjunto a GridFS",
"attachment-move-storage-s3": "Move attachment to S3",
"attachment-move": "Mover el Adjunto",
"move-all-attachments-to-fs": "Mover todos los archivos adjuntos al sistema de archivos",
"move-all-attachments-to-gridfs": "Move all attachments to GridFS",
"move-all-attachments-to-gridfs": "Mover todos los adjuntos a GridFS",
"move-all-attachments-to-s3": "Move all attachments to S3",
"move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem",
"move-all-attachments-of-board-to-fs": "Mover todos los adjuntos del tablero al sistema de archivos",
"move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS",
"move-all-attachments-of-board-to-s3": "Move all attachments of board to S3",
"move-all-attachments-of-board-to-s3": "Mover todos los adjuntos del tablero a S3",
"path": "Ruta",
"version-name": "Nombre de la versión",
"size": "Tamaño",
@ -1234,7 +1234,7 @@
"remaining_time": "Tiempo restante",
"speed": "Velocidad",
"progress": "Progreso",
"password-again": "Password (again)",
"password-again": "Contraseña (repetir)",
"if-you-already-have-an-account": "If you already have an account",
"register": "Register",
"forgot-password": "Forgot password",
@ -1246,27 +1246,27 @@
"max-avatar-filesize": "Máximo tamaño de archivo de avatar en bytes:",
"allowed-avatar-filetypes": "Tipos de archivo permitidos para el avatar:",
"invalid-file": "Si el nombre de archivo no es válido, la carga o el cambio de nombre es cancelado.",
"preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.",
"drag-board": "Drag board",
"translation-number": "The number of custom translation strings is:",
"delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.",
"newTranslationPopup-title": "New custom translation string",
"editTranslationPopup-title": "Edit custom translation string",
"settingsTranslationPopup-title": "Delete this custom translation string?",
"translation": "Translation",
"preview-pdf-not-supported": "Tu dispositivo no permite previsualizar PDF. Intenta descargarlo.",
"drag-board": "Arrastrar tablero",
"translation-number": "El número de cadenas de traducción personalizadas es:",
"delete-translation-confirm-popup": "¿Estás seguro de querer eliminar esta cadena de traducción personalizada? Esta acción no puede deshacerse.",
"newTranslationPopup-title": "Nueva cadena de traducción personalizada",
"editTranslationPopup-title": "Editar cadena de traducción personalizada",
"settingsTranslationPopup-title": "¿Borrar esta cadena de traducción personalizada?",
"translation": "Traducción",
"text": "Texto",
"translation-text": "Translation text",
"show-subtasks-field": "Show subtasks field",
"show-week-of-year": "Show week of year (ISO 8601)",
"convert-to-markdown": "Convert to markdown",
"import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments",
"translation-text": "Texto de traducción",
"show-subtasks-field": "Mostrar campo de subtareas",
"show-week-of-year": "Mostrar semana del año (ISO 8601)",
"convert-to-markdown": "Convertir en Markdown",
"import-board-zip": "Añadir archivo .zip que contenga los archivos JSON del tablero y los nombres de las subcarpetas con adjuntos del tablero",
"collapse": "Contraer",
"uncollapse": "Uncollapse",
"hideCheckedChecklistItems": "Hide checked checklist items",
"hideAllChecklistItems": "Hide all checklist items",
"support": "Support",
"supportPopup-title": "Support",
"accessibility-page-enabled": "Accessibility page enabled",
"accessibility-title": "Accessibility topic",
"accessibility-content": "Accessibility content"
"uncollapse": "Expandir",
"hideCheckedChecklistItems": "Ocultar elementos marcados de la lista de verificación",
"hideAllChecklistItems": "Ocultar todos los elementos de la lista de verificación",
"support": "Soporte",
"supportPopup-title": "Soporte",
"accessibility-page-enabled": "Página de accesibilidad habilitada",
"accessibility-title": "Temas de accesibilidad",
"accessibility-content": "Contenido de accesibilidad"
}

View file

@ -90,8 +90,8 @@
"set-list-width": "Ezarri zabalerak",
"set-list-width-value": "Ezarri gutxieneko eta gehieneko zabalerak (pixel)",
"list-width-error-message": "Zerrenden zabalerak 100 baino handiagoak izan behar dira",
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
"keyboard-shortcuts-enabled": "Laster-teklak gaituta. Egin klik desgaitzeko.",
"keyboard-shortcuts-disabled": "Laster-teklak desgaituta. Egin klik gaitzeko.",
"setSwimlaneHeightPopup-title": "Errailaren altuera ezarri",
"set-swimlane-height": "Errailaren altuera ezarri",
"set-swimlane-height-value": "Errailaren altuera (pixelak)",
@ -266,9 +266,9 @@
"checklists": "Kontrol-zerrendak",
"click-to-star": "Egin klik arbel honi izarra jartzeko",
"click-to-unstar": "Egin klik arbel honi izarra kentzeko",
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
"auto-list-width": "Auto list width",
"click-to-enable-auto-width": "Zerrenda zabalera automatikoa desgaituta dago. Egin klik gaitzeko.",
"click-to-disable-auto-width": "Zerrenda zabalera automatikoa gaituta dago. Egin klik desgaitzeko.",
"auto-list-width": "Zerrenda zabalera automatikoa",
"clipboard": "Kopiatu eta itsatsi edo arrastatu eta jaregin",
"close": "Itxi",
"close-board": "Itxi arbela",
@ -383,7 +383,7 @@
"email-sent": "E-posta bidali da",
"email-verifyEmail-subject": "Egiaztatu __siteName__ guneko zure e-posta helbidea.",
"email-verifyEmail-text": "Kaixo __user__,\n\nZure e-posta kontua egiaztatzeko, egin klik beheko loturan.\n\n__url__\n\nEskerrik asko.",
"enable-vertical-scrollbars": "Enable vertical scrollbars",
"enable-vertical-scrollbars": "Gaitu korritze barra bertikalak",
"enable-wip-limit": "WIP muga gaitu",
"error-board-doesNotExist": "Arbel hau ez da existitzen",
"error-board-notAdmin": "Arbel honetako kudeatzailea izan behar zara hori egin ahal izateko",
@ -1257,7 +1257,7 @@
"text": "Testua",
"translation-text": "itzulpenaren testua",
"show-subtasks-field": "azpi-zereginen eremua bezala",
"show-week-of-year": "Show week of year (ISO 8601)",
"show-week-of-year": "Erakutsi rrteko aste zenbakia (ISO 8601)",
"convert-to-markdown": "Bihurtu markdown-era",
"import-board-zip": "Gehitu taula JSON fitxategiak dituen .zip fitxategia eta eranskinak dituzten taularen izenen azpidirektorioak",
"collapse": "Tolestu",

View file

@ -107,7 +107,7 @@
"add-label": "Ajouter une étiquette",
"add-list": "Ajouter une liste",
"add-after-list": "Ajouter après la liste",
"add-members": "Assigner des participants",
"add-members": "Ajouter des participants",
"added": "Ajouté le",
"addMemberPopup-title": "Participants",
"memberPopup-title": "Préférence du participant",
@ -139,7 +139,7 @@
"templates": "Modèles",
"template-container": "Conteneur de modèles",
"add-template-container": "Ajouter un conteneur de modèles",
"assign-member": "Affecter un participant",
"assign-member": "Attribuer à un participant",
"attached": "joint",
"attachment": "Pièce jointe",
"attachment-delete-pop": "La suppression d'une pièce jointe est définitive. Cela est irréversible.",
@ -199,7 +199,7 @@
"card-edit-labels": "Gérer les étiquettes",
"card-edit-members": "Gérer les participants",
"card-labels-title": "Modifier les étiquettes de la carte.",
"card-members-title": "Assigner ou supprimer des participants à la carte.",
"card-members-title": "Ajouter ou supprimer des participants du tableau à la carte.",
"card-start": "Début",
"card-start-on": "Commence le",
"cardAttachmentsPopup-title": "Ajouter depuis",
@ -310,7 +310,7 @@
"no-comments": "Aucun commentaire",
"no-comments-desc": "Ne peut pas voir les commentaires et les activités.",
"worker": "Travailleur",
"worker-desc": "Peut seulement déplacer des cartes, s'assigner à une carte et la commenter.",
"worker-desc": "Peut seulement déplacer des cartes, s'attribuer une carte et la commenter.",
"computer": "Ordinateur",
"confirm-subtask-delete-popup": "Êtes-vous sûr de vouloir supprimer la sous-tâche ?",
"confirm-checklist-delete-popup": "Êtes-vous sûr de vouloir supprimer la check-list ?",
@ -437,8 +437,8 @@
"filter-no-label": "Aucune étiquette",
"filter-member-label": "Filtrer par participant",
"filter-no-member": "Aucun participant",
"filter-assignee-label": "Filtrer par personne en charge",
"filter-no-assignee": "Pas de personne en charge",
"filter-assignee-label": "Filtrer par intervenant",
"filter-no-assignee": "Pas d'intervenant",
"filter-custom-fields-label": "Filtrer par champs personnalisés",
"filter-no-custom-fields": "Pas de champs personnalisés",
"filter-show-archive": "Montrer les listes archivées",
@ -471,9 +471,9 @@
"import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".",
"import-json-placeholder": "Collez ici les données JSON valides",
"import-csv-placeholder": "Déposez ici vos données valides CSV/TSV",
"import-map-members": "Assigner des participants",
"import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez assigner les participants que vous souhaitez importer à vos utilisateurs.",
"import-members-map-note": "Note: les participants ne concordant pas seront assignés à l'utilisateur courant.",
"import-map-members": "Faire correspondre les participants",
"import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez faire correspondre les participants que vous souhaitez importer à vos utilisateurs.",
"import-members-map-note": "Note: les participants ne concordant pas seront attribués à l'utilisateur courant.",
"import-show-user-mapping": "Contrôler l'assignation des participants",
"import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce participant",
"importMapMembersAddPopup-title": "Sélectionner le participant",
@ -581,13 +581,13 @@
"set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste",
"setWipLimitPopup-title": "Définir la limite WIP",
"shortcut-add-self": "S'ajouter à la carte courante",
"shortcut-assign-self": "Affecter cette carte à vous-même",
"shortcut-assign-self": "S'attribuer cette carte",
"shortcut-autocomplete-emoji": "Auto-complétion des emoji",
"shortcut-autocomplete-members": "Auto-complétion des participants",
"shortcut-clear-filters": "Retirer tous les filtres",
"shortcut-close-dialog": "Fermer la boîte de dialogue",
"shortcut-filter-my-cards": "Filtrer mes cartes",
"shortcut-filter-my-assigned-cards": "Filtrer mes cartes assignées",
"shortcut-filter-my-assigned-cards": "Filtrer mes cartes attribuées",
"shortcut-show-shortcuts": "Afficher cette liste de raccourcis",
"shortcut-toggle-filterbar": "Afficher/Masquer la barre latérale des filtres",
"shortcut-toggle-searchbar": "Afficher/Masquer la barre latérale de recherche",
@ -610,7 +610,7 @@
"has-spenttime-cards": "A des cartes avec du temps passé",
"time": "Temps",
"title": "Titre",
"toggle-assignees": "Changer les personnes en charge 1-9 sur les cartes (par ordre d'ajout au tableau)",
"toggle-assignees": "Changer les intervenants 1-9 sur une carte (par ordre d'ajout au tableau)",
"toggle-labels": "Afficher/Masquer les étiquettes 1-9 sur les cartes. La sélection multiple ajoute les étiquettes 1-9",
"remove-labels-multiselect": "La multi-sélection supprime les étiquettes 1-9",
"tracking": "Suivi",
@ -729,7 +729,7 @@
"setCardActionsColorPopup-title": "Choisissez une couleur",
"setSwimlaneColorPopup-title": "Choisissez une couleur",
"setListColorPopup-title": "Choisissez une couleur",
"assigned-by": "Assigné par",
"assigned-by": "Attribué par",
"requested-by": "Demandé par",
"card-sorting-by-number": "Tri numérique des cartes",
"board-delete-notice": "La suppression est définitive. Vous perdrez toutes les listes, cartes et actions associées à ce tableau.",
@ -928,8 +928,8 @@
"accounts-allowUserDelete": "Autoriser les utilisateurs à supprimer leur compte",
"hide-minicard-label-text": "Cacher l'étiquette de la mini-carte",
"show-desktop-drag-handles": "Voir les poignées de déplacement du bureau",
"assignee": "Personne en charge",
"cardAssigneesPopup-title": "Personne en charge",
"assignee": "Intervenant",
"cardAssigneesPopup-title": "Intervenant",
"addmore-detail": "Ajouter une description plus détaillée",
"show-on-card": "Afficher sur la carte",
"show-on-minicard": "Afficher sur la mini-carte",
@ -1023,7 +1023,7 @@
"operator-user-abbrev": "@",
"operator-member": "participant",
"operator-member-abbrev": "m",
"operator-assignee": "personne en charge",
"operator-assignee": "intervenant",
"operator-assignee-abbrev": "a",
"operator-creator": "créateur",
"operator-status": "statut",
@ -1054,7 +1054,7 @@
"predicate-checklist": "check-list",
"predicate-start": "début",
"predicate-end": "fin",
"predicate-assignee": "personne en charge",
"predicate-assignee": "intervenant",
"predicate-member": "participant",
"predicate-public": "public",
"predicate-private": "privé",
@ -1079,13 +1079,13 @@
"globalSearch-instructions-operator-comment": "`__operator_comment__:<texte>` - cartes dont le commentaire contient *<texte>*.",
"globalSearch-instructions-operator-label": "`__operator_label__:<couleur>` `__operator_label__:<nom>` - cartes qui ont une étiquette correspondant à *<couleur>* ou à *<nom>*.",
"globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<nom|couleur>` - raccourci pour `__operator_label__:<couleur>` ou `__operator_label__:<nom>`",
"globalSearch-instructions-operator-user": "`__operator_user__:<nom>` - cartes où l'utilisateur <nom> est *participant* ou est *en charge*.",
"globalSearch-instructions-operator-user": "`__operator_user__:<nom>` - cartes où l'utilisateur <nom> est *participant* ou *intervenant*.",
"globalSearch-instructions-operator-at": "`__operator_user_abbrev__nom` - raccourci pour `__operator_user__:<nom>`",
"globalSearch-instructions-operator-member": "`__operator_member__:<nom>` - cartes pour lesquelles l'utilisateur *<nom>* est *participant*",
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<nom>` - cartes *assignées* à l'utilisateur *<nom>*",
"globalSearch-instructions-operator-assignee": "`__operator_assignee__:<nom>` - cartes *attribuées* à l'utilisateur *<nom>*",
"globalSearch-instructions-operator-creator": "`__operator_creator__:<utilisateur>` - cartes dont le créateur est *<utilisateur>*",
"globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cartes appartenant à un tableau assigné à l'organisation *<name>*",
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cartes appartenant à un tableau assigné à l'équipe *<name>*",
"globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cartes appartenant à un tableau attribué à l'organisation *<name>*",
"globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cartes appartenant à un tableau attribué à l'équipe *<name>*",
"globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cartes qui arrive à échéance dans moins de *<n>* jours à partir d'aujourd'hui.\n`__operator_due__:__predicate_overdue__` liste toutes les cartes ayant passé la date d'échéance.",
"globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cartes qui ont été créées il y a *<n>* jours ou moins",
"globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cartes qui ont été modifiées il y a *<n>* jours ou moins",

View file

@ -1,5 +1,5 @@
{
"accept": "Accept",
"accept": "Terima",
"act-activity-notify": "Activity Notification",
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
@ -49,7 +49,7 @@
"activity-archived": "%s moved to Archive",
"activity-attached": "attached %s to %s",
"activity-created": "created %s",
"activity-changedListTitle": "renamed list to %s",
"activity-changedListTitle": "Namakan semula senarai kepada %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluded %s from %s",
"activity-imported": "imported %s into %s from %s",
@ -86,9 +86,9 @@
"add-card": "Add Card",
"add-card-to-top-of-list": "Add Card to Top of List",
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
"setListWidthPopup-title": "Set Widths",
"set-list-width": "Set Widths",
"set-list-width-value": "Set Min & Max Widths (pixels)",
"setListWidthPopup-title": "Tetapkan Lebar",
"set-list-width": "Tetapkan Lebar",
"set-list-width-value": "Tetapkan lebar minimum dan maksimum (piksel)",
"list-width-error-message": "List widths must be integers greater than 100",
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
@ -105,20 +105,20 @@
"convertChecklistItemToCardPopup-title": "Convert to Card",
"add-cover": "Add cover image to minicard",
"add-label": "Add Label",
"add-list": "Add List",
"add-list": "Tambah Senarai",
"add-after-list": "Add After List",
"add-members": "Add Members",
"added": "Added",
"addMemberPopup-title": "Members",
"memberPopup-title": "Member Settings",
"admin": "Admin",
"add-members": "Tambah Ahli",
"added": "Ditambah",
"addMemberPopup-title": "Ahli-ahli",
"memberPopup-title": "Tetapan Ahli",
"admin": "Pentadbir",
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
"admin-announcement": "Announcement",
"admin-announcement": "Pengumuman",
"admin-announcement-active": "Active System-Wide Announcement",
"admin-announcement-title": "Announcement from Administrator",
"all-boards": "All Boards",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
"admin-announcement-title": "Pengumuman dari Pentadbir",
"all-boards": "Semua Papan",
"and-n-other-card": "Dan __count__ kad lain",
"and-n-other-card_plural": "Dan __count__ kad-kad lain",
"apply": "Apply",
"app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
"app-try-reconnect": "Try to reconnect.",
@ -451,7 +451,7 @@
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
"fullname": "Full Name",
"header-logo-title": "Go back to your boards page.",
"show-activities": "Show Activities",
"show-activities": "Tunjukkan Aktiviti",
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
@ -972,20 +972,20 @@
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"displayName": "Nama Paparan",
"shortName": "Nama Ringkas",
"autoAddUsersWithDomainName": "Automatically add users with the domain name",
"website": "Website",
"website": "Laman Sesawang",
"person": "Person",
"my-cards": "My Cards",
"card": "Card",
"list": "List",
"board": "Board",
"my-cards": "Kad Saya",
"card": "Kad",
"list": "Senarai",
"board": "Papan",
"context-separator": "/",
"myCardsViewChange-title": "My Cards View",
"myCardsViewChangePopup-title": "My Cards View",
"myCardsViewChange-choice-boards": "Boards",
"myCardsViewChange-choice-table": "Table",
"myCardsViewChange-choice-boards": "Papan",
"myCardsViewChange-choice-table": "Jadual",
"myCardsSortChange-title": "My Cards Sort",
"myCardsSortChangePopup-title": "My Cards Sort",
"myCardsSortChange-choice-board": "By Board",
@ -993,8 +993,8 @@
"dueCards-title": "Due Cards",
"dueCardsViewChange-title": "Due Cards View",
"dueCardsViewChangePopup-title": "Due Cards View",
"dueCardsViewChange-choice-me": "Me",
"dueCardsViewChange-choice-all": "All Users",
"dueCardsViewChange-choice-me": "Saya",
"dueCardsViewChange-choice-all": "Semua Pengguna",
"dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.",
"broken-cards": "Broken Cards",
"board-title-not-found": "Board '%s' not found.",
@ -1004,27 +1004,27 @@
"label-color-not-found": "Label color %s not found.",
"user-username-not-found": "Username '%s' not found.",
"comment-not-found": "Card with comment containing text '%s' not found.",
"org-name-not-found": "Organization '%s' not found.",
"team-name-not-found": "Team '%s' not found.",
"globalSearch-title": "Search All Boards",
"no-cards-found": "No Cards Found",
"one-card-found": "One Card Found",
"n-cards-found": "%s Cards Found",
"org-name-not-found": "Organisasi '%s' tidak ditemui.",
"team-name-not-found": "Pasukan '%s' tidak ditemui.",
"globalSearch-title": "Cari di Semua Papan",
"no-cards-found": "Tiada Kad Ditemui",
"one-card-found": "Satu Kad Ditemui",
"n-cards-found": "%s Kad Ditemui",
"n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found",
"operator-board": "board",
"operator-board-abbrev": "b",
"operator-board": "papan",
"operator-board-abbrev": "p",
"operator-swimlane": "swimlane",
"operator-swimlane-abbrev": "s",
"operator-list": "list",
"operator-list-abbrev": "l",
"operator-list": "senarai",
"operator-list-abbrev": "s",
"operator-label": "label",
"operator-label-abbrev": "#",
"operator-user": "user",
"operator-user": "pengguna",
"operator-user-abbrev": "@",
"operator-member": "member",
"operator-member-abbrev": "m",
"operator-assignee": "assignee",
"operator-assignee-abbrev": "a",
"operator-member": "ahli",
"operator-member-abbrev": "a",
"operator-assignee": "pemberi tugas",
"operator-assignee-abbrev": "pt",
"operator-creator": "creator",
"operator-status": "status",
"operator-due": "due",
@ -1033,31 +1033,31 @@
"operator-sort": "sort",
"operator-comment": "comment",
"operator-has": "has",
"operator-limit": "limit",
"operator-limit": "had",
"operator-debug": "debug",
"operator-org": "org",
"operator-team": "team",
"predicate-archived": "archived",
"predicate-open": "open",
"predicate-ended": "ended",
"predicate-all": "all",
"predicate-all": "semua",
"predicate-overdue": "overdue",
"predicate-week": "week",
"predicate-month": "month",
"predicate-quarter": "quarter",
"predicate-year": "year",
"predicate-week": "minggu",
"predicate-month": "bulan",
"predicate-quarter": "suku",
"predicate-year": "tahun",
"predicate-due": "due",
"predicate-modified": "modified",
"predicate-created": "created",
"predicate-attachment": "attachment",
"predicate-description": "description",
"predicate-description": "huraian",
"predicate-checklist": "checklist",
"predicate-start": "start",
"predicate-end": "end",
"predicate-start": "mula",
"predicate-end": "akhir",
"predicate-assignee": "assignee",
"predicate-member": "member",
"predicate-public": "public",
"predicate-private": "private",
"predicate-public": "umum",
"predicate-private": "peribadi",
"predicate-selector": "selector",
"predicate-projection": "projection",
"operator-unknown-error": "%s is not an operator",
@ -1067,10 +1067,10 @@
"operator-has-invalid": "%s is not a valid existence check",
"operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.",
"operator-debug-invalid": "%s is not a valid debug predicate",
"next-page": "Next Page",
"previous-page": "Previous Page",
"heading-notes": "Notes",
"globalSearch-instructions-heading": "Search Instructions",
"next-page": "Halaman Seterusnya",
"previous-page": "Halaman Sebelumnya",
"heading-notes": "Nota-nota",
"globalSearch-instructions-heading": "Cari arahan",
"globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).",
"globalSearch-instructions-operators": "Available operators:",
"globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*",
@ -1106,7 +1106,7 @@
"globalSearch-instructions-notes-5": "By default archived cards are not searched.",
"link-to-search": "Link to this search",
"excel-font": "Arial",
"number": "Number",
"number": "Nombor",
"label-colors": "Label Colors",
"label-names": "Label Names",
"archived-at": "archived at",
@ -1128,8 +1128,8 @@
"custom-field-stringtemplate-format": "Format (use %{value} as placeholder)",
"custom-field-stringtemplate-separator": "Separator (use &#32; or &nbsp; for a space)",
"custom-field-stringtemplate-item-placeholder": "Press enter to add more items",
"creator": "Creator",
"creator-on-minicard": "Creator on minicard",
"creator": "Pencipta",
"creator-on-minicard": "Pencipta pada kad mini",
"filesReportTitle": "Files Report",
"reports": "Reports",
"rulesReportTitle": "Rules Report",
@ -1152,27 +1152,27 @@
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"details": "Maklumat",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"ticket": "Tiket",
"tickets": "Tiket-tiket",
"ticket-number": "Nombor Tiket",
"open": "Dibuka",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"closed": "Ditutup",
"resolved": "Selesai",
"cancelled": "Batalkan",
"history": "Sejarah",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details",
"add-teams": "Add teams",
"cardDetailsPopup-title": "Maklumat Kad",
"add-teams": "Tambahkan Kumpulan",
"add-teams-label": "Added teams are displayed below:",
"remove-team-from-table": "Are you sure you want to remove this team from the board ?",
"confirm-btn": "Confirm",
"remove-btn": "Remove",
"confirm-btn": "Sahkan",
"remove-btn": "Hapus",
"filter-card-title-label": "Filter by card title",
"invite-people-success": "Invitation to register sent with success",
"invite-people-error": "Error while sending invitation to register",
@ -1200,14 +1200,14 @@
"custom-legal-notice-link-url": "Custom legal notice page URL",
"acceptance_of_our_legalNotice": "By continuing, you accept our",
"legalNotice": "legal notice",
"copied": "Copied!",
"copied": "Disalin!",
"checklistActionsPopup-title": "Checklist Actions",
"moveChecklist": "Move Checklist",
"moveChecklistPopup-title": "Move Checklist",
"newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items",
"newLineNewItem": "One line of text = one checklist item",
"newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order",
"originOrder": "original order",
"originOrder": "aturan asal",
"copyChecklist": "Copy Checklist",
"copyChecklistPopup-title": "Copy Checklist",
"card-show-lists": "Card Show Lists",
@ -1223,21 +1223,21 @@
"move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem",
"move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS",
"move-all-attachments-of-board-to-s3": "Move all attachments of board to S3",
"path": "Path",
"version-name": "Version-Name",
"size": "Size",
"storage": "Storage",
"action": "Action",
"board-title": "Board Title",
"attachmentRenamePopup-title": "Rename",
"uploading": "Uploading",
"remaining_time": "Remaining time",
"path": "Haluan",
"version-name": "Versi-Nama",
"size": "Saiz",
"storage": "Simpanan",
"action": "Tindakan",
"board-title": "Tajuk Papan",
"attachmentRenamePopup-title": "Namakan Semula",
"uploading": "Memuat Naik",
"remaining_time": "Masa yang tersisa",
"speed": "Speed",
"progress": "Progress",
"password-again": "Password (again)",
"if-you-already-have-an-account": "If you already have an account",
"register": "Register",
"forgot-password": "Forgot password",
"progress": "Perkembangan",
"password-again": "Kata laluan (semula)",
"if-you-already-have-an-account": "Jika anda sudah mempunyai akaun",
"register": "Daftar",
"forgot-password": "Lupa kata laluan",
"minicardDetailsActionsPopup-title": "Card Details",
"Mongo_sessions_count": "Mongo sessions count",
"change-visibility": "Change Visibility",
@ -1253,9 +1253,9 @@
"newTranslationPopup-title": "New custom translation string",
"editTranslationPopup-title": "Edit custom translation string",
"settingsTranslationPopup-title": "Delete this custom translation string?",
"translation": "Translation",
"text": "Text",
"translation-text": "Translation text",
"translation": "Terjemahan",
"text": "Teks",
"translation-text": "Teks terjemahan",
"show-subtasks-field": "Show subtasks field",
"show-week-of-year": "Show week of year (ISO 8601)",
"convert-to-markdown": "Convert to markdown",

View file

@ -49,7 +49,7 @@
"activity-archived": "%s Arşive taşındı",
"activity-attached": "%s içine %s ekledi",
"activity-created": "%s öğesini oluşturdu",
"activity-changedListTitle": "renamed list to %s",
"activity-changedListTitle": "Liste adı %syapıldı",
"activity-customfield-created": "%s adlı özel alan yaratıldı",
"activity-excluded": "%s içinden %s çıkarttı",
"activity-imported": "%s kaynağından %s öğesini %s öğesinin içine taşıdı",
@ -86,10 +86,10 @@
"add-card": "Kart Ekle",
"add-card-to-top-of-list": "Listenin Başına Kart Ekle",
"add-card-to-bottom-of-list": "Listenin Sonuna Kart Ekle",
"setListWidthPopup-title": "Set Widths",
"set-list-width": "Set Widths",
"set-list-width-value": "Set Min & Max Widths (pixels)",
"list-width-error-message": "List widths must be integers greater than 100",
"setListWidthPopup-title": "Genişlik Ata",
"set-list-width": "Genişlik Ata",
"set-list-width-value": "En Az & En Çok Genişlik (piksel) Ata ",
"list-width-error-message": "Liste genişliği 100'den büyük sayısal bir değer olmalı",
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
"setSwimlaneHeightPopup-title": "Kulvar Uzunluğunu Ayarla",
@ -300,7 +300,7 @@
"color-white": "beyaz",
"color-yellow": "sarı",
"unset-color": "Seçilmemiş",
"comments": "Comments",
"comments": "Yorumlar",
"comment": "Yorum",
"comment-placeholder": "Yorum Yaz",
"comment-only": "Sadece yorum",

View file

@ -383,7 +383,7 @@
"email-sent": "Email відправлений",
"email-verifyEmail-subject": "Підтвердіть вашу email адресу на __siteName__",
"email-verifyEmail-text": "Привіт __user__,\n\nЩоб підтвердити ваш акаунт email, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.",
"enable-vertical-scrollbars": "Enable vertical scrollbars",
"enable-vertical-scrollbars": "Увімкнути вертикальні скроллбари",
"enable-wip-limit": "Увімкнути ліміт WIP",
"error-board-doesNotExist": "Ця дошка не існує",
"error-board-notAdmin": "Вам потрібно бути адміністратором цієї дошки, щоб зробити це",
@ -610,7 +610,7 @@
"has-spenttime-cards": "Має картки з витраченим часом",
"time": "Час",
"title": "Назва",
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
"toggle-assignees": "Перемикання призначень 1-9 для картки (за порядком додавання на дошку)",
"toggle-labels": "Перемкнути мітки 1-9 для картки. Мультивибір додає мітки 1-9",
"remove-labels-multiselect": "Мультивибір видаляє мітки 1-9",
"tracking": "Відстеження",
@ -1257,7 +1257,7 @@
"text": "Текст",
"translation-text": "Перекласти текст",
"show-subtasks-field": "Показати поле підзавдань",
"show-week-of-year": "Show week of year (ISO 8601)",
"show-week-of-year": "Показати тиждень року (ISO 8601)",
"convert-to-markdown": "Конвертувати в Markdown",
"import-board-zip": "Додати файл .zip, який містить файли JSON дошки та підкаталоги з назвами дошок і вкладеннями",
"collapse": "Згорнути",

View file

@ -86,12 +86,12 @@
"add-card": "Додати картку",
"add-card-to-top-of-list": "Додати картку на початок списку",
"add-card-to-bottom-of-list": "Додати картку у кінець списку",
"setListWidthPopup-title": "Set Widths",
"set-list-width": "Set Widths",
"set-list-width-value": "Set Min & Max Widths (pixels)",
"list-width-error-message": "List widths must be integers greater than 100",
"keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.",
"keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.",
"setListWidthPopup-title": "Встановити ширину",
"set-list-width": "Встановити ширину",
"set-list-width-value": "Встановити мін. та макс. ширину (у пікселях)",
"list-width-error-message": "Ширина списку має бути цілим числом, більшим за 100",
"keyboard-shortcuts-enabled": "Комбінації клавіш увімкнено. Натисніть, щоб вимкнути.",
"keyboard-shortcuts-disabled": "Комбінації клавіш вимкнено. Натисніть, щоб увімкнути.",
"setSwimlaneHeightPopup-title": "Встановити довжину доріжки",
"set-swimlane-height": "Встановити довжину доріжки",
"set-swimlane-height-value": "Висота доріжки (у пікселях)",
@ -266,9 +266,9 @@
"checklists": "Контрольні списки",
"click-to-star": "Натисніть, щоб відзначити цю дошку зірочкою.",
"click-to-unstar": "Натисніть, щоб видалити зірочку з цієї дошки.",
"click-to-enable-auto-width": "Auto list width disabled. Click to enable.",
"click-to-disable-auto-width": "Auto list width enabled. Click to disable.",
"auto-list-width": "Auto list width",
"click-to-enable-auto-width": "Автоматична ширина списку вимкнена. Натисніть, щоб увімкнути.",
"click-to-disable-auto-width": "Автоматична ширина списку увімкнена. Натисніть, щоб вимкнути.",
"auto-list-width": "Автоматична ширина списку",
"clipboard": "Буфер обміну або перетягнути і відпустити",
"close": "Закрити",
"close-board": "Закрити дошку",
@ -383,7 +383,7 @@
"email-sent": "Email відправлений",
"email-verifyEmail-subject": "Підтвердіть вашу email адресу на __siteName__",
"email-verifyEmail-text": "Привіт __user__,\n\nЩоб підтвердити ваш акаунт email, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.",
"enable-vertical-scrollbars": "Enable vertical scrollbars",
"enable-vertical-scrollbars": "Увімкнути вертикальні скроллбари",
"enable-wip-limit": "Увімкнути ліміт WIP",
"error-board-doesNotExist": "Ця дошка не існує",
"error-board-notAdmin": "Вам потрібно бути адміністратором цієї дошки, щоб зробити це",
@ -610,7 +610,7 @@
"has-spenttime-cards": "Має картки з витраченим часом",
"time": "Час",
"title": "Назва",
"toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).",
"toggle-assignees": "Перемикання призначень 1-9 для картки (за порядком додавання на дошку)",
"toggle-labels": "Перемкнути мітки 1-9 для картки. Мультивибір додає мітки 1-9",
"remove-labels-multiselect": "Мультивибір видаляє мітки 1-9",
"tracking": "Відстеження",
@ -1257,7 +1257,7 @@
"text": "Текст",
"translation-text": "Перекласти текст",
"show-subtasks-field": "Показати поле підзавдань",
"show-week-of-year": "Show week of year (ISO 8601)",
"show-week-of-year": "Показати тиждень року (ISO 8601)",
"convert-to-markdown": "Конвертувати в Markdown",
"import-board-zip": "Додати файл .zip, який містить файли JSON дошки та підкаталоги з назвами дошок і вкладеннями",
"collapse": "Згорнути",
@ -1266,7 +1266,7 @@
"hideAllChecklistItems": "Приховати всі пункти чек-листа",
"support": "Підтримка",
"supportPopup-title": "Підтримка",
"accessibility-page-enabled": "Accessibility page enabled",
"accessibility-title": "Accessibility topic",
"accessibility-content": "Accessibility content"
"accessibility-page-enabled": "Увімкнено сторінку доступності",
"accessibility-title": "Тема доступності",
"accessibility-content": "Доступність контенту"
}

View file

@ -531,20 +531,30 @@ Cards.helpers({
mapCustomFieldsToBoard(boardId) {
// Map custom fields to new board
return this.customFields.map(cf => {
const oldCf = ReactiveCache.getCustomField(cf._id);
const newCf = ReactiveCache.getCustomField({
boardIds: boardId,
name: oldCf.name,
type: oldCf.type,
});
if (newCf) {
cf._id = newCf._id;
} else if (!_.contains(oldCf.boardIds, boardId)) {
oldCf.addBoard(boardId);
}
return cf;
const oldCf = ReactiveCache.getCustomField(cf._id);
// Check if oldCf is undefined or null
if (!oldCf) {
//console.error(`Custom field with ID ${cf._id} not found.`);
return cf; // Skip this field if oldCf is not found
}
const newCf = ReactiveCache.getCustomField({
boardIds: boardId,
name: oldCf.name,
type: oldCf.type,
});
if (newCf) {
cf._id = newCf._id;
} else if (!_.contains(oldCf.boardIds, boardId)) {
oldCf.addBoard(boardId);
}
return cf;
});
},
},
copy(boardId, swimlaneId, listId) {
const oldId = this._id;

View file

@ -2,13 +2,38 @@ import { Meteor } from 'meteor/meteor';
import Users from '../users';
function acceptedIpAddress(ipAddress) {
const trustedIpAddress = process.env.WEKAN_METRICS_ACCEPTED_IP_ADDRESS;
const trustedIpAddress = process.env.METRICS_ACCEPTED_IP_ADDRESS;
return (
trustedIpAddress !== undefined &&
trustedIpAddress.split(',').includes(ipAddress)
);
}
function accessToken(req) {
const valid_token = process.env.METRICS_ACCESS_TOKEN;
let token;
if (req.headers && req.headers.authorization) {
var parts = req.headers.authorization.split(" ");
if (parts.length === 2) {
var scheme = parts[0];
var credentials = parts[1];
if (/^Bearer$/i.test(scheme)) {
token = credentials;
}
}
}
if (!token && req.query && req.query.access_token) {
token = req.query.access_token;
}
return (
token !== undefined &&
valid_token !== undefined &&
token == valid_token
);
}
const getBoardTitleWithMostActivities = (dateWithXdaysAgo, nbLimit) => {
return Promise.await(
Activities.rawCollection()
@ -48,8 +73,8 @@ Meteor.startup(() => {
// const ipAddress = req.socket.remoteAddress
// }
// List of trusted ip adress will be found in environment variable "WEKAN_METRICS_ACCEPTED_IP_ADDRESS" (separeted with commas)
if (acceptedIpAddress(ipAddress)) {
// List of trusted ip adress will be found in environment variable "METRICS_ACCEPTED_IP_ADDRESS" (separeted with commas)
if (acceptedIpAddress(ipAddress) || (accessToken(req))) {
let metricsRes = '';
let resCount = 0;
//connected users
@ -170,12 +195,12 @@ Meteor.startup(() => {
metricsRes +=
'# Top 10 boards with most activities dated 30 days ago\n';
//Get top 10 table with most activities in current month
//Get top 10 table with most activities in current month
const boardTitleWithMostActivities = getBoardTitleWithMostActivities(
dateWithXdaysAgo,
xdays,
);
const boardWithMostActivities = boardTitleWithMostActivities.map(
(board) => board.lookup[0].title,
);
@ -185,7 +210,7 @@ Meteor.startup(() => {
`wekan_top10BoardsWithMostActivities{n="${title}"} ${
index + 1
}` + '\n';
});
});
res.writeHead(200); // HTTP status
res.end(metricsRes);

View file

@ -65,6 +65,8 @@ def get_req_body_elems(obj, elems):
elif obj.type in ('LogicalExpression', 'BinaryExpression', 'AssignmentExpression'):
get_req_body_elems(obj.left, elems)
get_req_body_elems(obj.right, elems)
elif obj.type == 'ChainExpression':
get_req_body_elems(obj.expression, elems)
elif obj.type in ('ReturnStatement', 'UnaryExpression'):
if obj.argument is not None:
get_req_body_elems(obj.argument, elems)

239
package-lock.json generated
View file

@ -1,13 +1,13 @@
{
"name": "wekan",
"version": "v7.80.0",
"version": "v7.85.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/runtime": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
"integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
"version": "7.26.10",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz",
"integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==",
"requires": {
"regenerator-runtime": "^0.14.0"
}
@ -108,6 +108,12 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz",
"integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="
},
"@types/trusted-types": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
"integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
"optional": true
},
"@wekanteam/dragscroll": {
"version": "git+https://github.com/wekan/dragscroll.git#6ea215c8cdbde9362ecba8ffb72ce9f9fde842d2",
"from": "git+https://github.com/wekan/dragscroll.git"
@ -600,9 +606,12 @@
}
},
"dompurify": {
"version": "2.5.6",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
"integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ=="
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz",
"integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==",
"requires": {
"@types/trusted-types": "^2.0.7"
}
},
"domutils": {
"version": "2.8.0",
@ -1373,16 +1382,15 @@
"integrity": "sha512-SBbbYWvFYvsxHVL+q6ZB8lT3rp2LSvfALD2V52H+MGH2IgJsevy0VtXRkRG0EsUewwOaDTIKBn9DlD8HQ3GSwg=="
},
"meteor-node-stubs": {
"version": "1.2.12",
"resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.12.tgz",
"integrity": "sha512-mzp3KI2aGNDhFlCVXPd0pfMr2z9A5vl1AqEgV13/z7AgKwcbd2X+ymE6tpSAMkrrQb40PU9PC2B59bCb6XkAaw==",
"version": "git+https://github.com/wekan/meteor-node-stubs.git#4f2609bc4d9d700ff79424ad4ed8dbf1f06666cb",
"from": "git+https://github.com/wekan/meteor-node-stubs.git",
"requires": {
"@meteorjs/crypto-browserify": "^3.12.1",
"assert": "^2.1.0",
"browserify-zlib": "^0.2.0",
"buffer": "^5.7.1",
"console-browserify": "^1.2.0",
"constants-browserify": "^1.0.0",
"crypto-browserify": "^3.12.0",
"domain-browser": "^4.23.0",
"elliptic": "^6.6.0",
"events": "^3.3.0",
@ -1398,46 +1406,19 @@
"string_decoder": "^1.3.0",
"timers-browserify": "^2.0.12",
"tty-browserify": "0.0.1",
"url": "^0.11.4",
"url": "^0.11.3",
"util": "^0.12.5",
"vm-browserify": "^1.1.2"
},
"dependencies": {
"@meteorjs/crypto-browserify": {
"version": "3.12.1",
"bundled": true,
"requires": {
"browserify-cipher": "^1.0.1",
"browserify-sign": "^4.2.3",
"create-ecdh": "^4.0.4",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
"diffie-hellman": "^5.0.3",
"hash-base": "~3.0.4",
"inherits": "^2.0.4",
"pbkdf2": "^3.1.2",
"public-encrypt": "^4.0.3",
"randombytes": "^2.1.0",
"randomfill": "^1.0.4"
},
"dependencies": {
"hash-base": {
"version": "3.0.4",
"bundled": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
}
}
},
"asn1.js": {
"version": "4.10.1",
"version": "5.4.1",
"bundled": true,
"requires": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
"minimalistic-assert": "^1.0.0",
"safer-buffer": "^2.1.0"
},
"dependencies": {
"bn.js": {
@ -1513,64 +1494,23 @@
}
},
"browserify-sign": {
"version": "4.2.3",
"version": "4.2.2",
"bundled": true,
"requires": {
"bn.js": "^5.2.1",
"browserify-rsa": "^4.1.0",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
"elliptic": "^6.5.5",
"hash-base": "~3.0",
"elliptic": "^6.5.4",
"inherits": "^2.0.4",
"parse-asn1": "^5.1.7",
"readable-stream": "^2.3.8",
"parse-asn1": "^5.1.6",
"readable-stream": "^3.6.2",
"safe-buffer": "^5.2.1"
},
"dependencies": {
"bn.js": {
"version": "5.2.1",
"bundled": true
},
"hash-base": {
"version": "3.0.4",
"bundled": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"readable-stream": {
"version": "2.3.8",
"bundled": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
},
"dependencies": {
"safe-buffer": {
"version": "5.1.2",
"bundled": true
}
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"requires": {
"safe-buffer": "~5.1.0"
},
"dependencies": {
"safe-buffer": {
"version": "5.1.2",
"bundled": true
}
}
}
}
},
@ -1598,14 +1538,12 @@
"bundled": true
},
"call-bind": {
"version": "1.0.7",
"version": "1.0.5",
"bundled": true,
"requires": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"set-function-length": "^1.2.1"
"get-intrinsic": "^1.2.1",
"set-function-length": "^1.1.1"
}
},
"cipher-base": {
@ -1624,10 +1562,6 @@
"version": "1.0.0",
"bundled": true
},
"core-util-is": {
"version": "1.0.3",
"bundled": true
},
"create-ecdh": {
"version": "4.0.4",
"bundled": true,
@ -1665,13 +1599,30 @@
"sha.js": "^2.4.8"
}
},
"define-data-property": {
"version": "1.1.4",
"crypto-browserify": {
"version": "3.12.0",
"bundled": true,
"requires": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"gopd": "^1.0.1"
"browserify-cipher": "^1.0.0",
"browserify-sign": "^4.0.0",
"create-ecdh": "^4.0.0",
"create-hash": "^1.1.0",
"create-hmac": "^1.1.0",
"diffie-hellman": "^5.0.0",
"inherits": "^2.0.1",
"pbkdf2": "^3.0.3",
"public-encrypt": "^4.0.0",
"randombytes": "^2.0.0",
"randomfill": "^1.0.3"
}
},
"define-data-property": {
"version": "1.1.1",
"bundled": true,
"requires": {
"get-intrinsic": "^1.2.1",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.0"
}
},
"define-properties": {
@ -1711,7 +1662,7 @@
"bundled": true
},
"elliptic": {
"version": "6.6.0",
"version": "6.6.1",
"bundled": true,
"requires": {
"bn.js": "^4.11.9",
@ -1724,22 +1675,11 @@
},
"dependencies": {
"bn.js": {
"version": "4.12.0",
"version": "4.12.1",
"bundled": true
}
}
},
"es-define-property": {
"version": "1.0.0",
"bundled": true,
"requires": {
"get-intrinsic": "^1.2.4"
}
},
"es-errors": {
"version": "1.3.0",
"bundled": true
},
"events": {
"version": "3.3.0",
"bundled": true
@ -1764,10 +1704,9 @@
"bundled": true
},
"get-intrinsic": {
"version": "1.2.4",
"version": "1.2.2",
"bundled": true,
"requires": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
@ -1782,10 +1721,10 @@
}
},
"has-property-descriptors": {
"version": "1.0.2",
"version": "1.0.1",
"bundled": true,
"requires": {
"es-define-property": "^1.0.0"
"get-intrinsic": "^1.2.2"
}
},
"has-proto": {
@ -1882,10 +1821,6 @@
"which-typed-array": "^1.1.11"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true
},
"md5.js": {
"version": "1.3.5",
"bundled": true,
@ -1918,7 +1853,7 @@
"bundled": true
},
"object-inspect": {
"version": "1.13.2",
"version": "1.13.1",
"bundled": true
},
"object-is": {
@ -1952,25 +1887,14 @@
"bundled": true
},
"parse-asn1": {
"version": "5.1.7",
"version": "5.1.6",
"bundled": true,
"requires": {
"asn1.js": "^4.10.1",
"browserify-aes": "^1.2.0",
"evp_bytestokey": "^1.0.3",
"hash-base": "~3.0",
"pbkdf2": "^3.1.2",
"safe-buffer": "^5.2.1"
},
"dependencies": {
"hash-base": {
"version": "3.0.4",
"bundled": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
}
"asn1.js": "^5.2.0",
"browserify-aes": "^1.0.0",
"evp_bytestokey": "^1.0.0",
"pbkdf2": "^3.0.3",
"safe-buffer": "^5.1.1"
}
},
"path-browserify": {
@ -1992,10 +1916,6 @@
"version": "0.11.10",
"bundled": true
},
"process-nextick-args": {
"version": "2.0.1",
"bundled": true
},
"public-encrypt": {
"version": "4.0.3",
"bundled": true,
@ -2019,10 +1939,10 @@
"bundled": true
},
"qs": {
"version": "6.13.0",
"version": "6.11.2",
"bundled": true,
"requires": {
"side-channel": "^1.0.6"
"side-channel": "^1.0.4"
}
},
"querystring-es3": {
@ -2065,16 +1985,18 @@
"version": "5.2.1",
"bundled": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true
},
"set-function-length": {
"version": "1.2.2",
"version": "1.1.1",
"bundled": true,
"requires": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"define-data-property": "^1.1.1",
"get-intrinsic": "^1.2.1",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.2"
"has-property-descriptors": "^1.0.0"
}
},
"setimmediate": {
@ -2090,13 +2012,12 @@
}
},
"side-channel": {
"version": "1.0.6",
"version": "1.0.4",
"bundled": true,
"requires": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.4",
"object-inspect": "^1.13.1"
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"stream-browserify": {
@ -2136,11 +2057,11 @@
"bundled": true
},
"url": {
"version": "0.11.4",
"version": "0.11.3",
"bundled": true,
"requires": {
"punycode": "^1.4.1",
"qs": "^6.12.3"
"qs": "^6.11.2"
}
},
"util": {

View file

@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v7.80.0",
"version": "v7.85.0",
"description": "Open-Source kanban",
"private": true,
"repository": {
@ -17,7 +17,7 @@
"sinon": "^13.0.2"
},
"dependencies": {
"@babel/runtime": "^7.25.0",
"@babel/runtime": "^7.26.10",
"@mapbox/node-pre-gyp": "^1.0.10",
"@rwap/jquery-ui-touch-punch": "^1.0.11",
"@wekanteam/dragscroll": "https://github.com/wekan/dragscroll.git",
@ -28,7 +28,7 @@
"ajv": "^6.12.6",
"bcryptjs": "^2.4.3",
"bson": "^4.5.2",
"dompurify": "^2.5.6",
"dompurify": "^3.2.4",
"es6-promise": "^4.2.4",
"escape-string-regexp": "^5.0.0",
"fibers": "^5.0.3",
@ -44,7 +44,7 @@
"markdown-it-emoji": "^2.0.0",
"markdown-it-mathjax3": "^4.3.2",
"meteor-accounts-t9n": "^2.6.0",
"meteor-node-stubs": "^1.2.12",
"meteor-node-stubs": "https://github.com/wekan/meteor-node-stubs.git",
"minio": "^7.1.3",
"moment": "^2.29.4",
"os": "^0.1.2",

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v7.80
version: v7.85
description: |
The REST API allows you to control and extend Wekan with ease.

524
public/old-site.webmanifest Normal file
View file

@ -0,0 +1,524 @@
{
"name": "Wekan",
"short_name": "Wekan",
"icons": [
{
"src": "svg-etc/wekan-logo-512.svg",
"sizes": "any",
"type": "image/svg"
},
{
"src": "android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "Square150x150Logo.scale-100.png",
"sizes": "150x150",
"type": "image/png"
},
{
"src": "Square44x44Logo.scale-100.png",
"sizes": "44x44",
"type": "image/png"
},
{
"src": "StoreLogo.scale-100.png",
"sizes": "50x50",
"type": "image/png"
},
{
"src": "maskable_icon.png",
"sizes": "474x474",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "monochrome-icon-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "monochrome"
},
{
"src": "windows11/SmallTile.scale-100.png",
"sizes": "71x71"
},
{
"src": "windows11/SmallTile.scale-125.png",
"sizes": "89x89"
},
{
"src": "windows11/SmallTile.scale-150.png",
"sizes": "107x107"
},
{
"src": "windows11/SmallTile.scale-200.png",
"sizes": "142x142"
},
{
"src": "windows11/SmallTile.scale-400.png",
"sizes": "284x284"
},
{
"src": "windows11/Square150x150Logo.scale-100.png",
"sizes": "150x150"
},
{
"src": "windows11/Square150x150Logo.scale-125.png",
"sizes": "188x188"
},
{
"src": "windows11/Square150x150Logo.scale-150.png",
"sizes": "225x225"
},
{
"src": "windows11/Square150x150Logo.scale-200.png",
"sizes": "300x300"
},
{
"src": "windows11/Square150x150Logo.scale-400.png",
"sizes": "600x600"
},
{
"src": "windows11/Wide310x150Logo.scale-100.png",
"sizes": "310x150"
},
{
"src": "windows11/Wide310x150Logo.scale-125.png",
"sizes": "388x188"
},
{
"src": "windows11/Wide310x150Logo.scale-150.png",
"sizes": "465x225"
},
{
"src": "windows11/Wide310x150Logo.scale-200.png",
"sizes": "620x300"
},
{
"src": "windows11/Wide310x150Logo.scale-400.png",
"sizes": "1240x600"
},
{
"src": "windows11/LargeTile.scale-100.png",
"sizes": "310x310"
},
{
"src": "windows11/LargeTile.scale-125.png",
"sizes": "388x388"
},
{
"src": "windows11/LargeTile.scale-150.png",
"sizes": "465x465"
},
{
"src": "windows11/LargeTile.scale-200.png",
"sizes": "620x620"
},
{
"src": "windows11/LargeTile.scale-400.png",
"sizes": "1240x1240"
},
{
"src": "windows11/Square44x44Logo.scale-100.png",
"sizes": "44x44"
},
{
"src": "windows11/Square44x44Logo.scale-125.png",
"sizes": "55x55"
},
{
"src": "windows11/Square44x44Logo.scale-150.png",
"sizes": "66x66"
},
{
"src": "windows11/Square44x44Logo.scale-200.png",
"sizes": "88x88"
},
{
"src": "windows11/Square44x44Logo.scale-400.png",
"sizes": "176x176"
},
{
"src": "windows11/StoreLogo.scale-100.png",
"sizes": "50x50"
},
{
"src": "windows11/StoreLogo.scale-125.png",
"sizes": "63x63"
},
{
"src": "windows11/StoreLogo.scale-150.png",
"sizes": "75x75"
},
{
"src": "windows11/StoreLogo.scale-200.png",
"sizes": "100x100"
},
{
"src": "windows11/StoreLogo.scale-400.png",
"sizes": "200x200"
},
{
"src": "windows11/SplashScreen.scale-100.png",
"sizes": "620x300"
},
{
"src": "windows11/SplashScreen.scale-125.png",
"sizes": "775x375"
},
{
"src": "windows11/SplashScreen.scale-150.png",
"sizes": "930x450"
},
{
"src": "windows11/SplashScreen.scale-200.png",
"sizes": "1240x600"
},
{
"src": "windows11/SplashScreen.scale-400.png",
"sizes": "2480x1200"
},
{
"src": "windows11/Square44x44Logo.targetsize-16.png",
"sizes": "16x16"
},
{
"src": "windows11/Square44x44Logo.targetsize-20.png",
"sizes": "20x20"
},
{
"src": "windows11/Square44x44Logo.targetsize-24.png",
"sizes": "24x24"
},
{
"src": "windows11/Square44x44Logo.targetsize-30.png",
"sizes": "30x30"
},
{
"src": "windows11/Square44x44Logo.targetsize-32.png",
"sizes": "32x32"
},
{
"src": "windows11/Square44x44Logo.targetsize-36.png",
"sizes": "36x36"
},
{
"src": "windows11/Square44x44Logo.targetsize-40.png",
"sizes": "40x40"
},
{
"src": "windows11/Square44x44Logo.targetsize-44.png",
"sizes": "44x44"
},
{
"src": "windows11/Square44x44Logo.targetsize-48.png",
"sizes": "48x48"
},
{
"src": "windows11/Square44x44Logo.targetsize-60.png",
"sizes": "60x60"
},
{
"src": "windows11/Square44x44Logo.targetsize-64.png",
"sizes": "64x64"
},
{
"src": "windows11/Square44x44Logo.targetsize-72.png",
"sizes": "72x72"
},
{
"src": "windows11/Square44x44Logo.targetsize-80.png",
"sizes": "80x80"
},
{
"src": "windows11/Square44x44Logo.targetsize-96.png",
"sizes": "96x96"
},
{
"src": "windows11/Square44x44Logo.targetsize-256.png",
"sizes": "256x256"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-16.png",
"sizes": "16x16"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-20.png",
"sizes": "20x20"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-24.png",
"sizes": "24x24"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-30.png",
"sizes": "30x30"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-32.png",
"sizes": "32x32"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-36.png",
"sizes": "36x36"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-40.png",
"sizes": "40x40"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-44.png",
"sizes": "44x44"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-48.png",
"sizes": "48x48"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-60.png",
"sizes": "60x60"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-64.png",
"sizes": "64x64"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-72.png",
"sizes": "72x72"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-80.png",
"sizes": "80x80"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-96.png",
"sizes": "96x96"
},
{
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-256.png",
"sizes": "256x256"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png",
"sizes": "16x16"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png",
"sizes": "20x20"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png",
"sizes": "24x24"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png",
"sizes": "30x30"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png",
"sizes": "32x32"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png",
"sizes": "36x36"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png",
"sizes": "40x40"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png",
"sizes": "44x44"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png",
"sizes": "48x48"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png",
"sizes": "60x60"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png",
"sizes": "64x64"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png",
"sizes": "72x72"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png",
"sizes": "80x80"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png",
"sizes": "96x96"
},
{
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png",
"sizes": "256x256"
},
{
"src": "android/android-launchericon-512-512.png",
"sizes": "512x512"
},
{
"src": "android/android-launchericon-192-192.png",
"sizes": "192x192"
},
{
"src": "android/android-launchericon-144-144.png",
"sizes": "144x144"
},
{
"src": "android/android-launchericon-96-96.png",
"sizes": "96x96"
},
{
"src": "android/android-launchericon-72-72.png",
"sizes": "72x72"
},
{
"src": "android/android-launchericon-48-48.png",
"sizes": "48x48"
},
{
"src": "ios/16.png",
"sizes": "16x16"
},
{
"src": "ios/20.png",
"sizes": "20x20"
},
{
"src": "ios/29.png",
"sizes": "29x29"
},
{
"src": "ios/32.png",
"sizes": "32x32"
},
{
"src": "ios/40.png",
"sizes": "40x40"
},
{
"src": "ios/50.png",
"sizes": "50x50"
},
{
"src": "ios/57.png",
"sizes": "57x57"
},
{
"src": "ios/58.png",
"sizes": "58x58"
},
{
"src": "ios/60.png",
"sizes": "60x60"
},
{
"src": "ios/64.png",
"sizes": "64x64"
},
{
"src": "ios/72.png",
"sizes": "72x72"
},
{
"src": "ios/76.png",
"sizes": "76x76"
},
{
"src": "ios/80.png",
"sizes": "80x80"
},
{
"src": "ios/87.png",
"sizes": "87x87"
},
{
"src": "ios/100.png",
"sizes": "100x100"
},
{
"src": "ios/114.png",
"sizes": "114x114"
},
{
"src": "ios/120.png",
"sizes": "120x120"
},
{
"src": "ios/128.png",
"sizes": "128x128"
},
{
"src": "ios/144.png",
"sizes": "144x144"
},
{
"src": "ios/152.png",
"sizes": "152x152"
},
{
"src": "ios/167.png",
"sizes": "167x167"
},
{
"src": "ios/180.png",
"sizes": "180x180"
},
{
"src": "ios/192.png",
"sizes": "192x192"
},
{
"src": "ios/256.png",
"sizes": "256x256"
},
{
"src": "ios/512.png",
"sizes": "512x512"
},
{
"src": "ios/1024.png",
"sizes": "1024x1024"
}
],
"screenshots": [
{
"src": "screenshot1.webp",
"sizes": "1280x720",
"type": "image/webp"
},
{
"src": "screenshot2.webp",
"sizes": "1280x720",
"type": "image/webp"
}
],
"theme_color": "#000000",
"background_color": "#000000",
"start_url": "sign-in",
"display": "standalone",
"orientation": "any",
"categories": [
"productivity"
],
"iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96",
"description": "Open Source kanban with MIT license",
"dir": "auto",
"scope": "https://boards.wekan.team",
"prefer_related_applications": false,
"display_override": [
"standalone"
]
}

View file

@ -513,10 +513,8 @@
"categories": [
"productivity"
],
"iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96",
"description": "Open Source kanban with MIT license",
"dir": "auto",
"scope": "https://boards.wekan.team",
"prefer_related_applications": false,
"display_override": [
"standalone"

View file

@ -15,7 +15,8 @@ fi
if [ ! -d ~/python/esprima-python ]; then
sudo apt-get -y install python3-pip python3-swagger-spec-validator python3-wheel python3-setuptools
sudo npm install -g api2html
# Install older version of api2html that works with Node.js 14
sudo npm install -g api2html@0.3.0 || sudo npm install -g swagger-ui-watcher
(mkdir -p ~/python && cd ~/python && git clone --depth 1 -b master https://github.com/Kronuz/esprima-python)
(cd ~/python/esprima-python && git fetch origin pull/20/head:delete_fix && git checkout delete_fix && sudo python3 setup.py install --record files.txt)
#(cd ~/python/esprima-python && git fetch origin pull/20/head:delete_fix && git checkout delete_fix && sudo pip3 install .)
@ -38,10 +39,11 @@ if [ ! -d public/api ]; then
mkdir -p public/api
fi
# 4) Generate docs.
#python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml
# 4) Generate docs with api2html or fallback to swagger-ui-watcher
python3 ./openapi/generate_openapi.py --release v$1 > ./public/api/wekan.yml
api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml
if ! api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; then
swagger-ui-watcher ./public/api/wekan.yml -p 8080
fi
# Copy docs to bundle
#cp -pR ./public/api ~/repos/wekan/.build/bundle/programs/web.browser/app/

View file

@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 780,
appVersion = 785,
# Increment this for every release.
appMarketingVersion = (defaultText = "7.80.0~2025-01-12"),
appMarketingVersion = (defaultText = "7.85.0~2025-04-21"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,

View file

@ -1,5 +1,5 @@
name: wekan
version: '7.80'
version: '7.85'
base: core20
summary: Open Source kanban
description: |
@ -65,7 +65,7 @@ apps:
parts:
mongodb:
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.19.tgz
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.22.tgz
plugin: dump
stage-packages:
- libssl1.1
@ -170,9 +170,9 @@ parts:
# Cleanup
mkdir .build
cd .build
wget https://github.com/wekan/wekan/releases/download/v7.80/wekan-7.80-amd64.zip
unzip wekan-7.80-amd64.zip
rm wekan-7.80-amd64.zip
wget https://github.com/wekan/wekan/releases/download/v7.85/wekan-7.85-amd64.zip
unzip wekan-7.85-amd64.zip
rm wekan-7.85-amd64.zip
cd ..
##cd .build/bundle
##find . -type d -name '*-garbage*' | xargs rm -rf

View file

@ -459,6 +459,9 @@ REM # example : LDAP_BACKGROUND_SYNC=true
REM SET LDAP_BACKGROUND_SYNC=false
REM # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
REM # The format must be as specified in:
REM # https://bunkat.github.io/later/parsers.html#text
REM SET LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
REM # At which interval does the background task sync in milliseconds.
REM # Leave this unset, so it uses default, and does not crash.
REM # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722

View file

@ -385,6 +385,9 @@
#export LDAP_BACKGROUND_SYNC=false
#
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# The format must be as specified in:
# https://bunkat.github.io/later/parsers.html#text
#export LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours
# At which interval does the background task sync in milliseconds.
# Leave this unset, so it uses default, and does not crash.
# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722