Compare commits

...
892 Commits
Author SHA1 Message Date
Lauri Ojansivu eb166737e3 v1.44 2018-09-09 22:03:04 +03:00
Lauri Ojansivu a58ee144ac Update translations. 2018-09-09 21:53:00 +03:00
Lauri Ojansivu 54260ca325 Merge remote-tracking branch 'origin/master' into devel 2018-09-09 21:45:56 +03:00
Lauri Ojansivu cb7eebaed0 - Fix cards export and add customFields export.
Thanks to ymeramees !

Closes #1873,
related #1775
2018-09-09 21:43:45 +03:00
Lauri Ojansivu 6eeb708e4d - Fix cards export and add customFields export.
Thanks to ymeramees !

Closes #1873,
related #1775
2018-09-09 21:40:23 +03:00
Lauri Ojansivu 1c49469b33 Merge pull request #1886 from ymeramees/devel
Fix cards export and add customFields export
2018-09-09 21:17:26 +03:00
ymeramees d18cd59c05 Fixed cards export
Fixed cards export.
2018-09-09 14:23:53 +03:00
Ymeramees 960cb27eef Added customFields export. 2018-09-08 08:10:23 +03:00
Ymeramees cdab6076cc Merge remote-tracking branch 'upstream/master' into devel
Updated to upstream master 1.43
2018-09-08 07:04:55 +03:00
Lauri Ojansivu be9cf34462 - REST API: Add startAt/dueAt/endAt etc. https://github.com/wekan/wekan/wiki/REST-API-Cards
Thanks to xet7 !

Closes #1879
2018-09-07 12:36:12 +03:00
Lauri Ojansivu 1e0fdf8abc - REST API: Add startAt/dueAt/endAt etc. https://github.com/wekan/wekan/wiki/REST-API-Cards
Thanks to xet7 !

Closes #1879
2018-09-07 12:30:06 +03:00
Lauri Ojansivu 2ef8803dfd Merge branch 'devel' 2018-09-06 19:55:04 +03:00
Lauri Ojansivu 1d2896886e v1.43 2018-09-06 19:54:07 +03:00
Lauri Ojansivu e52351dcbf - Fix "No Comments" permission on Wekan and Trello import.
Thanks to xet7 !
2018-09-06 19:37:18 +03:00
Lauri Ojansivu 0a001d505d - Fix "No Comments" permission on Wekan and Trello import.
Thanks to xet7 !
2018-09-06 19:29:52 +03:00
Lauri Ojansivu 55072c529a Merge branch 'devel' 2018-09-06 12:48:03 +03:00
Lauri Ojansivu 66e22a2c87 v1.42 2018-09-06 12:46:26 +03:00
Lauri Ojansivu 07b505aa32 Update translations (fr). 2018-09-06 12:40:54 +03:00
Lauri Ojansivu 3c86cf854e - Add swimlaneId in activity. Create default swimlaneId in API.
Thanks to andresmanelli !
2018-09-06 12:33:16 +03:00
Lauri Ojansivu 334c15ff71 Merge branch 'devel' of https://github.com/andresmanelli/wekan into devel 2018-09-06 12:06:54 +03:00
Lauri Ojansivu 1aecf8da6b - REST API: [Create board options to be modifiable](https://github.com/wekan/wekan/commit/9cea76e4efaacaebcb2e9f0690dfeb4ef6d62527),
like permissions, public/private board - now private by default,
  and board background color.
  Docs at https://github.com/wekan/wekan/wiki/REST-API-Boards

Thanks to xet7 !

Related #1037
2018-09-06 12:04:09 +03:00
Lauri Ojansivu 9cea76e4ef - REST API: Create board options to be modifiable, like
permissions, public/private board - now private by default,
  and board background color.
  Docs at https://github.com/wekan/wekan/wiki/REST-API-Boards

Thanks to xet7 !

Related #1037
2018-09-06 11:56:38 +03:00
Andrés Manelli e74fb2f5b0 Add swimlaneId in activity. Create default swimlaneId in API 2018-09-06 00:23:50 +02:00
Ymeramees 6c0b6ca670 Merge remote-tracking branch 'upstream/master' into devel
Merge to update to latest upstream/master
2018-09-05 07:23:34 +03:00
Lauri Ojansivu 9492daf9bc Merge branch 'devel' 2018-09-05 02:13:10 +03:00
Lauri Ojansivu f346ce04f5 v1.41 2018-09-05 02:11:38 +03:00
Lauri Ojansivu b465500afa Update translations (de). 2018-09-05 02:06:50 +03:00
Lauri Ojansivu adf969f6ff - Try to fix Wekan Sandstorm API. https://github.com/wekan/wekan/commit/6462f855c9388416517b0e5d29e11b4ede21f78e
Thanks to ocdtrekkie and xet7 !

Related #1279
2018-09-05 02:01:13 +03:00
Lauri Ojansivu 6462f855c9 - Try to fix Wekan Sandstorm API.
Thanks to ocdtrekkie and xet7 !
2018-09-05 01:58:18 +03:00
Lauri Ojansivu 3721742327 Merge branch 'devel' 2018-09-04 20:52:45 +03:00
Lauri Ojansivu 910771708a v1.40 2018-09-04 20:51:22 +03:00
Lauri Ojansivu 7ba361e2c9 Update translations. 2018-09-04 20:24:00 +03:00
Lauri Ojansivu cc2e0a7c7c - Add permission "No comments" https://github.com/wekan/wekan/commit/77efcf71376d3da6c19ad1a4910567263e83c0ca
It is like normal user, but does not show comments and activities.

Thanks to xet7 !

Related #1861
2018-09-04 20:13:44 +03:00
Lauri Ojansivu 77efcf7137 - Add permission "No comments". It is like normal user, but does not show comments and activities.
Thanks to xet7 !
2018-09-04 20:09:36 +03:00
Lauri Erm 1298a07838 Merge remote-tracking branch 'upstream/master' into devel
Merge with upstream/master
2018-09-02 06:13:55 +03:00
Lauri Ojansivu bcbe1aaaf5 Update translations. 2018-08-31 13:54:44 +03:00
Lauri Ojansivu 0c351f4864 Merge branch 'devel' 2018-08-29 00:39:30 +03:00
Lauri Ojansivu 066237de08 v1.39 2018-08-29 00:37:21 +03:00
Lauri Ojansivu ec3902021e - Only allow ifCanModify users to add dates on cards.
Thanks to rjevnikar !
2018-08-29 00:29:43 +03:00
Lauri Ojansivu 6928fd71a9 Merge pull request #1867 from rjevnikar/commentOnlyDateFix
Only allow ifCanModify users to add dates on cards
2018-08-29 00:18:10 +03:00
Lauri Ojansivu 035334125b Merge branch 'devel' 2018-08-29 00:11:55 +03:00
Lauri Ojansivu 70f37c55fd v1.38 2018-08-29 00:10:40 +03:00
Lauri Ojansivu 670ace6a8d - Add msavin:userCache to speedup Wekan.
https://forums.meteor.com/t/introducing-a-new-approach-to-meteor-user-this-simple-trick-can-save-you-millions-of-database-requests/45336/7
  https://github.com/msavin/userCache

Thanks to msavin and xet7 !

Related #1672
2018-08-28 23:43:01 +03:00
Lauri Ojansivu ebaccbccca - Add msavin:userCache.
https://forums.meteor.com/t/introducing-a-new-approach-to-meteor-user-this-simple-trick-can-save-you-millions-of-database-requests/45336/7
  https://github.com/msavin/userCache

Thanks to msavin and xet7 !

Related #1672
2018-08-28 23:36:54 +03:00
Lauri Ojansivu 652f4e693b - Fix Delete Board.
Thanks to rjevnikar and xet7 !
2018-08-28 23:28:57 +03:00
rjevnikar 555d31cca6 Only allow ifCanModify users to add dates (received, start, end, and due). 2018-08-28 20:23:29 +00:00
Lauri Ojansivu 534b20feda - Fix Delete Board and keep confirmation popup.
Thanks to xet7 !
2018-08-28 23:23:24 +03:00
Lauri Ojansivu 24f59b1855 Merge branch 'devel' 2018-08-28 21:21:10 +03:00
Lauri Ojansivu c0df1dd4aa v1.37 2018-08-28 21:20:16 +03:00
Lauri Ojansivu ba63627ebf Fix typo. 2018-08-28 21:16:32 +03:00
Lauri Ojansivu da636ed17d - Add Missing Index on cards.parentId since Swimlane integration
to speedup Wekan;
- Update OpenShift template to add Route and parameterize;
- Fix typos in Wekan snap help.

Thanks to Clement87, InfoSec812 and xet7 !
2018-08-28 21:12:24 +03:00
Lauri Ojansivu 4e12bcc378 - Add Missing Index on cards.parentId since Swimlane integration
to speedup Wekan.

Thanks to Clement87 !

Closes #1863
2018-08-28 21:01:55 +03:00
Lauri Ojansivu 6cec3b36de Update translations. 2018-08-28 19:22:39 +03:00
Lauri Ojansivu 3e7247891d Merge pull request #1865 from InfoSec812/InfoSec812-openshift-route-parameterized
Update OpenShift template to add Route and parameterize
2018-08-28 19:22:13 +03:00
Deven Phillips 6bb2f311e2 Change MongoDB ImageStream Config
Also debugging some issues
2018-08-28 12:11:35 -04:00
Lauri Ojansivu 0c5fc6d7fd Fix typos. 2018-08-28 19:01:00 +03:00
Deven Phillips 8fae676551 Add route to template and parameterize 2018-08-28 11:58:52 -04:00
Lauri Ojansivu 379f1af89e Update translations. 2018-08-27 19:34:34 +03:00
Lauri Ojansivu 5e128583ac Merge branch 'devel' 2018-08-25 01:24:02 +03:00
Lauri Ojansivu 23c27f9e07 v1.36 2018-08-25 01:22:50 +03:00
Lauri Ojansivu c36509095a Add empty oauth2 settings to Sandstorm. 2018-08-25 01:11:18 +03:00
Lauri Ojansivu f85a05e454 - Fix typos in security documentation.
Thanks to tlevine !

Related https://github.com/wekan/wekan/pull/1857
2018-08-25 01:01:45 +03:00
Lauri Ojansivu 067e4d15f3 Merge pull request #1857 from tlevine/security-typos
Security documentation typos
2018-08-25 00:59:56 +03:00
Lauri Ojansivu 65d1330d35 Merge branch 'salleman33-devel' into devel 2018-08-25 00:51:16 +03:00
Lauri Ojansivu 39312a075e - [OAuth2 Login on Standalone Wekan](https://github.com/wekan/wekan/wiki/OAuth2). For example, Rocket.Chat can provide OAuth2 login to Wekan.
Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when
  Rocket.Chat is providing OAuth2 login to Wekan.

Thanks to salleman33 and xet7 !

Closes #234
2018-08-25 00:49:02 +03:00
Lauri Ojansivu 96173ad431 Merge branch 'devel' of https://github.com/salleman33/wekan into salleman33-devel 2018-08-24 19:46:42 +03:00
Thomas Levine c0957ce173 I removed the period from a non-sentence. 2018-08-24 10:09:45 +00:00
Thomas Levine fdc168a476 I corrected typos in security documentation. 2018-08-24 10:09:45 +00:00
Lauri Ojansivu 3d76b8e1c1 - Move labels back to original place at minicard.
Thanks to hever and xet7 !

Closes #1842
2018-08-23 17:01:38 +03:00
Lauri Ojansivu 1296fce72a - Move labels back to original place at minicard.
Thanks to hever and xet7 !

Closes #1842
2018-08-23 16:58:07 +03:00
Lauri Ojansivu c34b1a9ec5 Merge branch 'devel' 2018-08-23 00:07:12 +03:00
Lauri Ojansivu 13db2fd7b2 v1.35 2018-08-23 00:06:15 +03:00
Lauri Ojansivu 511d1973eb Add webhooks-attributes to Sandstorm.
Thanks to xet7 !
2018-08-23 00:02:00 +03:00
Lauri Ojansivu dfd26e4843 - Remove avatar url fix javascript version, it breaks too easily.
Same can be done with Caddy.

Thanks to xet7 !

Closes #1776,
closes #386
2018-08-22 23:58:47 +03:00
Lauri Ojansivu d2c3ecdbcd Fix typos. 2018-08-22 22:46:56 +03:00
Lauri Ojansivu 1249bef93e Fix typo. 2018-08-22 22:45:20 +03:00
Lauri Ojansivu 71b642a2ba Fix lint errors. 2018-08-22 22:42:17 +03:00
Lauri Ojansivu f170c116bb Fix typo. 2018-08-22 22:35:52 +03:00
Lauri Ojansivu 4ed2f29e30 - Make the attributes that the webhook sends configurable.
Thanks to omarsy and xet7 !
2018-08-22 22:23:39 +03:00
Lauri Ojansivu d0731a4bf4 Merge branch 'omarsy-devel' into devel 2018-08-22 22:20:14 +03:00
Lauri Ojansivu d165733242 - Add webhooks-attributes to Snap and Docker.
Thanks to xet7 !
2018-08-22 22:19:06 +03:00
Lauri Ojansivu a91f0b5c3b Merge branch 'devel' of https://github.com/omarsy/wekan into omarsy-devel 2018-08-22 22:02:04 +03:00
Lauri Ojansivu cc84bf2de3 - Remove suburl from beginning of avatar file path,
so that avatar images don't get broken when root-url changes
  to different sub-url. This does not change avatar urls
  in database, instead this fixes url on the fly after
  loading avatar url from database.

Thanks to xet7 !
2018-08-22 21:57:38 +03:00
Lauri Ojansivu 7e0bc1e33a - Remove suburl from beginning of avatar file path, so that avatar images
don't get broken when root-url changes to different sub-url.
  This does not change avatar urls in database, instead this
  fixes url on the fly after loading avatar url from database.

Thanks to xet7 !

Closes #1776,
closes #386
2018-08-22 21:42:53 +03:00
Lauri Ojansivu 1b94b919fe This release adds the following new features:
Add Caddy plugins:
- [http.filter](https://caddyserver.com/docs/http.filter)
  for changing Wekan UI on the fly, for example custom logo,
  or changing to all different CSS file to have custom theme;
- [http.ipfilter](https://caddyserver.com/docs/http.ipfilter)
  to block requests by ip address;
- [http.realip](https://caddyserver.com/docs/http.realip)
  for showing real X-Forwarded-For IP to behind proxy;
- Turn off Caddy telemetry.

Thanks to Caddy contributors and xet7 !
2018-08-22 16:56:02 +03:00
Lauri Ojansivu d68ad5af04 Add Caddy plugins:
- [http.filter](https://caddyserver.com/docs/http.filter)
  for changing Wekan UI on the fly, for example custom logo,
  or changing to all different CSS file to have custom theme;
- [http.ipfilter](https://caddyserver.com/docs/http.ipfilter)
  to block requests by ip address;
- [http.realip](https://caddyserver.com/docs/http.realip)
  for showing real X-Forwarded-For IP to behind proxy.

Thanks to Caddy contributors and xet7 !
2018-08-22 16:16:56 +03:00
Omar Sy fcbbb93bb6 change let to const 2018-08-22 15:07:46 +02:00
Omar Sy b3b8d3c086 make the attributes that the webhook sends configurable 2018-08-22 14:24:21 +02:00
Lauri Ojansivu 676140f5c8 Merge branch 'devel' 2018-08-22 11:01:06 +03:00
Lauri Ojansivu 20757efc7e v1.34 2018-08-22 11:00:45 +03:00
Lauri Ojansivu 4d615057fe Update translations. 2018-08-22 10:17:43 +03:00
Lauri Ojansivu 9bdb5aea87 - Add Favicon for pinned tab on Safari browser.
Thanks to woodyart and xet7 !

Closes #1795
2018-08-22 10:04:31 +03:00
Lauri Ojansivu d67c435132 - Add Favicon for pinned tab on Safari browser.
Thanks to woodyart and xet7 !

Closes #1795
2018-08-22 10:01:19 +03:00
Lauri Ojansivu 18de911a7f - Allow Sandstorm to serve Wekan HTTP API. This may help towards #1279
Thanks to ocdtrekkie !

Related #1279
2018-08-22 09:41:14 +03:00
Lauri Ojansivu 39b1871e4d Merge pull request #1851 from ocdtrekkie/patch-1
Allow Sandstorm to serve Wekan HTTP API
2018-08-22 09:39:21 +03:00
Lauri Ojansivu eecac0e37f - Fix and improve linked cards.
Thanks to andresmanelli !
2018-08-22 09:30:12 +03:00
Lauri Ojansivu 3e0352c586 Merge branch 'andresmanelli-devel' into devel 2018-08-22 09:09:05 +03:00
Jacob Weisz 485f6b5ac2 Allow Sandstorm to serve Wekan HTTP API
This is probably not a "whole" fix, but this may be a missing piece.
2018-08-21 22:23:32 -05:00
Andrés Manelli 3e715bbcc9 Fix and improve linked cards 2018-08-21 22:21:23 +02:00
Lauri Ojansivu b881c3b908 Update translations. 2018-08-21 00:10:15 +03:00
Lauri Ojansivu 9e29d4c815 - Move color labels on minicard to bottom of minicard.
Thanks to therampagerado and xet7 !

Closes #1842
2018-08-21 00:03:24 +03:00
Lauri Ojansivu f09d9b63de - Move color labels on minicard to bottom of minicard.
Thanks to xet7 !

Closes #1842
2018-08-20 23:59:43 +03:00
Lauri Ojansivu 0588c2f605 - Restored SMTP settings at Admin Panel, and disabled showing password.
Thanks to xet7 !

Closes #1790
2018-08-20 23:19:14 +03:00
Lauri Ojansivu b216c63c13 - Restored SMTP settings at Admin Panel, and disabled showing password.
Thanks to xet7 !

Closes #1790
2018-08-20 23:16:24 +03:00
Lauri Ojansivu b186561355 Merge branch 'devel' 2018-08-16 22:23:10 +03:00
Lauri Ojansivu c9ca79aac8 Update translations. 2018-08-16 22:21:26 +03:00
Lauri Ojansivu 6b4e6d0c63 v1.33 2018-08-16 22:12:37 +03:00
Lauri Ojansivu c60ae13b5f - Change default value of label ids.
Thanks to omarsy !
2018-08-16 21:34:56 +03:00
Lauri Ojansivu 4e1fedb236 Merge pull request #1837 from omarsy/devel
Change of the default value of labelIds
2018-08-16 21:20:46 +03:00
Omar Sy 3c9aa65ca3 Change of the default value of labelIds 2018-08-16 19:10:47 +02:00
Lauri Ojansivu 365e2e5b4b Merge branch 'devel' 2018-08-16 14:40:56 +03:00
Lauri Ojansivu 4064429047 v1.32 2018-08-16 14:39:19 +03:00
Lauri Ojansivu 62dd28d91c - Use only framing policy, not all of content policy.
- Fix Date and Time Formats are only US in every language.

Thanks to xet7 !

Closes #1833
2018-08-16 14:34:01 +03:00
Lauri Ojansivu b3005f828d - Use only framing policy, not all of content policy.
- Fix Date and Time Formats are only US in every language.

Thanks to xet7 !

Closes #1833
2018-08-16 14:29:38 +03:00
Lauri Ojansivu 36447ba1c0 - Content Policy: Allow inline scripts, otherwise there is errors in browser
- Set default matomo settings to disabled
- Fix hidden system [messages](https://github.com/wekan/wekan/issues/1830)
- Fix Requested By and Assigned By fields.

Thanks to andresmanelli and xet7 !

Closes #1830
2018-08-15 23:52:32 +03:00
Lauri Ojansivu c694505885 Merge branch 'devel' of github.com:wekan/wekan into devel 2018-08-15 23:44:07 +03:00
Lauri Ojansivu 807c6ce09e - Content Policy: Allow inline scripts, otherwise there is errors in browser/inspect/console.
- Set default matomo settings to disabled.

Thanks to xet7 !
2018-08-15 23:41:01 +03:00
Lauri Ojansivu 9fc3de8502 Merge pull request #1832 from andresmanelli/devel
Fix hiddenSystemMessages
2018-08-15 23:24:11 +03:00
Andrés Manelli be00465e67 Fix hiddenSystemMessages 2018-08-15 22:17:52 +02:00
Lauri Ojansivu 5c33a85341 Merge pull request #1831 from andresmanelli/devel
Fix removed setters and getters
2018-08-15 22:08:19 +03:00
Andrés Manelli e55d7e4f72 Fix removed setters and getters 2018-08-15 20:50:51 +02:00
Lauri Ojansivu 53c0a52788 Remove Trello. 2018-08-14 21:22:46 +03:00
Lauri Ojansivu 89b535ac0f Merge branch 'devel' 2018-08-14 18:52:19 +03:00
Lauri Ojansivu c2eb300e21 v1.31
- Fix: Export of Board does not work on Docker.

Thanks to xet7 !

Closes #1820
2018-08-14 18:50:05 +03:00
Lauri Ojansivu eea077e57e Fix quotes. 2018-08-14 18:43:09 +03:00
Lauri Ojansivu f725291e14 Try to fix Dockerfile. 2018-08-14 18:27:37 +03:00
Lauri Ojansivu bec1256727 Try to fix Docker env variables. 2018-08-14 17:36:03 +03:00
Lauri Ojansivu 9407992312 Fix typo. 2018-08-14 17:29:53 +03:00
Lauri Ojansivu c7e02ad2ee Fix trusted url on docker-compose.yml. 2018-08-14 17:09:46 +03:00
Lauri Ojansivu ac12aa7ede Merge branch 'devel' 2018-08-14 15:19:53 +03:00
Lauri Ojansivu cec5f45459 v1.30 2018-08-14 15:18:58 +03:00
Lauri Ojansivu ab73afe17a Fix lint errors. 2018-08-14 14:43:15 +03:00
Lauri Ojansivu dc4e93ad56 - Fix Import from Trello error 400.
Thanks to xet7 !
2018-08-14 01:33:52 +03:00
Lauri Ojansivu 2f557ae3a5 - Fix Import from Trello error 400.
Thanks to xet7 !
2018-08-14 01:28:53 +03:00
Lauri Ojansivu be25e372a3 Update translations. 2018-08-13 20:10:41 +03:00
Lauri Ojansivu 3f937764cb Fix lint errors. 2018-08-13 20:01:08 +03:00
Lauri Ojansivu 0b9748dff6 - When Content Policy is enabled, allow one URL to have iframe that embeds Wekan
- Add option to turn off Content Policy
- Allow always in Wekan markdown <img src="any-image-url-here">

Thanks to xet7 !

Closes #1676
2018-08-13 19:34:42 +03:00
Lauri Ojansivu b9929dc682 - When Content Policy is enabled, allow one URL to have iframe that embeds Wekan
- Add option to turn off Content Policy
- Allow always in Wekan markdown <img src="any-image-url-here">

Thanks to xet7 !

Closes #1676
2018-08-13 19:24:07 +03:00
Lauri Ojansivu 034981cd3d Merge branch 'devel' 2018-08-12 17:36:50 +03:00
Lauri Ojansivu 79e464bf90 v1.29 2018-08-12 17:36:06 +03:00
Lauri Ojansivu b015b5b724 Revert eslint changes, because they caused breakage. 2018-08-12 17:32:53 +03:00
Lauri Ojansivu f5515cb95f Fix lint errors. 2018-08-12 14:36:37 +03:00
Lauri Ojansivu 16bbd892aa Merge branch 'devel' 2018-08-12 14:14:10 +03:00
Lauri Ojansivu 32d9a2c10b v1.27 2018-08-12 14:12:52 +03:00
Lauri Ojansivu 9967859f42 Merge branch 'andresmanelli-devel' into devel 2018-08-12 14:07:19 +03:00
Lauri Ojansivu eac0b3e7bb - Linked Cards and Linked Boards.
Thanks to andresmanelli !
2018-08-12 14:05:58 +03:00
Lauri Ojansivu 8177a1ed0a Update translations. 2018-08-12 14:03:13 +03:00
Andrés Manelli 17308dc5f3 Fix lint errors 2018-08-11 01:00:21 +02:00
Andrés Manelli 67301e07e2 Fix rebase errors 2018-08-11 00:50:20 +02:00
Andrés Manelli 315db00e83 Fix lint warning 2018-08-11 00:17:42 +02:00
Andrés Manelli 692a1bc369 Refactor imported -> linked in server and i18n 2018-08-11 00:17:42 +02:00
Andrés Manelli f76d8e47a8 Refactor imported -> linked in components 2018-08-11 00:17:42 +02:00
Andrés Manelli 6adfcb3513 Refactor imported -> linked in models 2018-08-11 00:16:31 +02:00
Andrés Manelli bce2242528 Add imported card location 2018-08-11 00:15:51 +02:00
Andrés Manelli f0597ef0c4 Indicate board or card through icons. Indicate if archived 2018-08-11 00:15:13 +02:00
Andrés Manelli 10aab8a733 Remove imported cards and boards colors 2018-08-11 00:14:13 +02:00
Andrés Manelli fb75a487fc Fix lint errors 2018-08-11 00:14:13 +02:00
Andrés Manelli 37306c8d22 Add title binding 2018-08-11 00:14:13 +02:00
Andrés Manelli 4ffa8784a2 Avoid reimport imported card 2018-08-11 00:07:29 +02:00
Andrés Manelli 74a01691e3 Add two way binding of activities, comments, and attachments 2018-08-11 00:07:29 +02:00
Andrés Manelli 49c415f023 Add two way binding of checklists 2018-08-11 00:07:29 +02:00
Andrés Manelli b2e175ba8c Avoid exporting imported cards 2018-08-11 00:07:29 +02:00
Andrés Manelli 724d26379c Add two way binding of card/board times 2018-08-11 00:07:29 +02:00
Andrés Manelli 0a62089df0 Allow description and member two way binding 2018-08-10 23:59:08 +02:00
Andrés Manelli a93de07fb9 Avoid importing imported cards or boards 2018-08-10 23:57:35 +02:00
Andrés Manelli 64367a01dd Link description 2018-08-10 23:57:35 +02:00
Andrés Manelli 5644ef66af Import card-as-card, board-as-card. Add styling. Missing details and links 2018-08-10 23:56:02 +02:00
Andrés Manelli 061a13e46e Avoid showing current board 2018-08-10 23:55:19 +02:00
Andrés Manelli dcc7b2970f Add UI for importing card-as-card and board-as-card 2018-08-10 23:55:19 +02:00
Lauri Ojansivu d509b2608f Merge branch 'devel' 2018-08-09 17:13:02 +03:00
Lauri Ojansivu 193af893ee v1.26 2018-08-09 17:11:02 +03:00
Lauri Ojansivu acd105e61b - Set Matomo blank settings on Sandstorm.
Thanks to xet7 !
2018-08-09 17:08:22 +03:00
Lauri Ojansivu a300b73d56 - Set WITH_API=true on Sandstorm, so that export works.
Thanks to xet7 !
2018-08-09 16:56:58 +03:00
Lauri Ojansivu 5168fb7717 Merge branch 'devel' 2018-08-09 13:28:39 +03:00
Lauri Ojansivu 945ffeda34 v1.25 2018-08-09 13:27:18 +03:00
Lauri Ojansivu 66adc397bf Merge pull request #1822 from Yanonix/devel
Fix showing only the cards of the current board in calendar view
2018-08-09 13:21:26 +03:00
Lauri Ojansivu 82a6b4245c Merge branch 'devel' 2018-08-09 13:16:51 +03:00
Lauri Ojansivu ae5ea46d7f v1.24 2018-08-09 13:15:53 +03:00
Lauri Ojansivu b5022529ac - Use new WITH_API and Matomo env variables at Dockerfile.
Thanks to xadagaras and xet7 !

Closes #1820
2018-08-09 12:51:28 +03:00
Lauri Ojansivu 49c471d816 Use new WITH_API and Matomo env variables at Dockerfile.
Thanks to xadagaras and xet7 !
2018-08-09 12:50:04 +03:00
Lauri Ojansivu 445aa89e4f - Use new WITH_API and Matomo env variables at Dockerfile.
Closes #1820
2018-08-09 12:46:19 +03:00
Yanonix 787941857d Fix showing only the cards of the current board in calendar view 2018-08-09 12:23:34 +03:00
Lauri Ojansivu 6a2b494713 Update translations. 2018-08-08 10:38:26 +03:00
Lauri Ojansivu 04d7c47f4c Update node to v8.12.0 prerelease build. 2018-08-04 21:47:02 +03:00
Lauri Ojansivu 9c94ea58b4 Revert snap changes. 2018-08-04 18:47:46 +03:00
Lauri Ojansivu 9f65696fcc Try to fix snap. 2018-08-04 16:47:21 +03:00
Lauri Ojansivu 95b21943ee Fix port order, hopefully correctly.
Related #1778

Thanks to xet7 !
2018-08-02 16:47:50 +03:00
Lauri Ojansivu d1400f48c3 Merge pull request #1816 from Worteks/devel
Change Run User for Openshift compliance
2018-08-02 16:25:27 +03:00
Thibaut Demaret 53d545eeef Change Run User for Openshift compliance 2018-08-02 15:09:34 +02:00
Lauri Ojansivu afeb2de412 Merge branch 'rjevnikar-dateCSS' into devel 2018-08-02 00:55:08 +03:00
Lauri Ojansivu 83d6ef7301 - Fix the flagging of dates.
Thanks to rjevnikar and xet7 !
2018-08-02 00:54:20 +03:00
Lauri Ojansivu d2e93c4927 Fix typo. 2018-08-02 00:51:45 +03:00
Lauri Ojansivu fd67bb8e67 Merge branch 'dateCSS' of https://github.com/rjevnikar/wekan into rjevnikar-dateCSS 2018-08-02 00:50:52 +03:00
Lauri Ojansivu da6c2b5503 Add Matomo options. 2018-08-01 22:04:33 +03:00
Lauri Ojansivu 57d43f916f Optional integration with Matomo. 2018-08-01 21:45:11 +03:00
Lauri Ojansivu 10a6dbd080 Enable API by default, so that Export Board works.
Thanks to xet7 !
2018-08-01 21:38:03 +03:00
Lauri Ojansivu 0498671cd4 Update translations (ru). 2018-08-01 21:30:42 +03:00
Lauri Ojansivu b2eeff9697 Enable Wekan API by default, so that Export Board to JSON works. 2018-08-01 21:21:14 +03:00
RJevnikar a8146e61f3 Fix flagging of dates (i.e. due date only flagged when before end date) 2018-07-31 22:01:14 +00:00
Lauri Ojansivu 6a23f73d94 Reverting change, Docker container did not build. 2018-07-30 22:10:49 +03:00
Lauri Ojansivu b9bcb8f979 Try to fix glibc in Dockerfile. 2018-07-30 22:07:17 +03:00
Lauri Ojansivu 0416fbdcc4 Merge branch 'master' of github.com:wekan/wekan 2018-07-30 21:45:27 +03:00
Lauri Ojansivu 064d125a1c Merge branch 'devel' 2018-07-30 21:45:16 +03:00
Lauri Ojansivu 1cc8452752 v1.23 2018-07-30 21:44:12 +03:00
Lauri Ojansivu 5bfb6c6411 Check for existing directories when building snap. 2018-07-30 21:27:22 +03:00
Lauri Ojansivu a48f560a85 No error if existing directory, with mkdir. 2018-07-30 21:18:04 +03:00
Lauri Ojansivu 92bb646977 Merge branch 'devel' 2018-07-30 17:42:57 +03:00
Lauri Ojansivu 43c38f87a5 v1.22 2018-07-30 17:42:16 +03:00
Lauri Ojansivu 01c12d7abc Add missing packages. 2018-07-30 17:28:52 +03:00
Lauri Ojansivu 63e3f6907a Merge pull request #1806 from Akuket/devel
Integration of matomo with env vars
2018-07-27 21:22:23 +03:00
Lauri Ojansivu 2e62524d5e Update translations. 2018-07-27 21:12:35 +03:00
guillaume ec59af3777 Integration of matomo with env vars 2018-07-27 18:08:09 +02:00
Lauri Ojansivu aa080a7506 Merge pull request #1799 from Akuket/devel
enable/disable api with env var
2018-07-26 15:44:34 +03:00
Lauri Ojansivu 397dda11ce Upggrade xss to v1.0.3 2018-07-26 15:41:04 +03:00
guillaume 6173a73381 enable/disable api with env var 2018-07-24 18:09:30 +02:00
Lauri Ojansivu dafe1e39a5 Update translations (pt-BR). 2018-07-20 20:30:29 +03:00
Lauri Ojansivu b77be874e0 - Backup script now uses mongodump from snap to
do backups: https://github.com/wekan/wekan/wiki/Backup

Thanks to Akuket !
2018-07-18 17:26:05 +03:00
Lauri Ojansivu aca4bffac8 Fix typos. 2018-07-18 16:23:09 +03:00
Lauri Ojansivu 2bb80956dd Merge branch 'devel' 2018-07-18 15:15:43 +03:00
Lauri Ojansivu e5148b4571 v1.21 2018-07-18 15:14:56 +03:00
Lauri Ojansivu 6204edd76e - Add logo from Wekan website to login logo.
Thanks to xet7 !
2018-07-18 14:55:03 +03:00
Lauri Ojansivu 4eed23afe0 Add new Wekan logo. 2018-07-18 14:52:41 +03:00
Lauri Ojansivu 2b02e09b07 - Allow to resend invites.
Thanks to Akuket and xet7 !

Closes #1320
2018-07-18 14:22:59 +03:00
Lauri Ojansivu c708877dde Merge pull request #1785 from Akuket/devel
Bugfix : Resending invitation code.
2018-07-18 14:17:36 +03:00
guillaume e2ae5d6b8e remove invitation code 2018-07-18 10:07:03 +02:00
Lauri Ojansivu a798713919 Merge branch 'devel' 2018-07-18 01:24:57 +03:00
Lauri Ojansivu 19402f5850 v1.20 2018-07-18 01:24:05 +03:00
Lauri Ojansivu 2beb91ba5d Update translations. 2018-07-18 01:19:46 +03:00
Lauri Ojansivu 1c35f05224 - Add scrolling to long cards.
Thanks to jnso !

Closes #1780
2018-07-18 01:13:21 +03:00
Lauri Ojansivu 758ec48e5c Merge pull request #1782 from jnso/scroll-fix
bug fix: #1780 (adding scroll to long cards)
2018-07-18 01:10:31 +03:00
Lauri Ojansivu f8d5c91659 - Remove SMTP settings from Admin Panel, because they
are set in environment variable settings like source/snap/docker
  already, and password was exposed in plain text.
- Added info how to limit snap to root user.

Thanks to LyR33x and xet7 !

Closes #1783
2018-07-18 01:02:41 +03:00
Lauri Ojansivu a8f41f7994 Remove SMTP settings from Admin Panel, because they
are set in environment variable settings like source/snap/docker
already, and password was exposed in plain text.

Thanks to xet7 !

Closes #1783
2018-07-18 00:46:45 +03:00
Akuket bf5596b201 patch re invit 2018-07-17 16:07:46 +02:00
Jonas Olsson b0f410f82d bug fix: #1780
Cards that are longer than the screen height can now scroll on the y-axis in order to be able to see the whole card.
2018-07-17 16:22:57 +04:00
guillaume df54f15ecb patch re-invit 2018-07-16 19:20:47 +02:00
Lauri Ojansivu 6a0e4c9b21 Merge branch 'devel' 2018-07-16 15:30:02 +03:00
Lauri Ojansivu c0ddecb2ee v1.19 2018-07-16 15:27:14 +03:00
Lauri Ojansivu 1a7796f2ca Merge branch 'Akuket-devel' into devel 2018-07-16 14:48:46 +03:00
Lauri Ojansivu 7119896a3c - Fix invitation code.
Thanks to Akuket and xet7 !

Closes #1749
2018-07-16 14:47:48 +03:00
Lauri Ojansivu 1b32509496 Fix lint errors. 2018-07-16 14:46:33 +03:00
Lauri Ojansivu a0d2df0647 Merge branch 'devel' of https://github.com/Akuket/wekan into Akuket-devel 2018-07-16 14:44:50 +03:00
Lauri Ojansivu d8c62cf242 Update translations. 2018-07-16 14:16:51 +03:00
Akuket 980fd4f61e Patch Invitation Code 2018-07-16 12:51:18 +02:00
Lauri Ojansivu 0dd82fedaf Remove Greenkeeper. 2018-07-13 02:51:40 +03:00
Lauri Ojansivu 058f7e430b Update translations. 2018-07-13 02:45:13 +03:00
Lauri Ojansivu 9487406fc3 Fix typos. 2018-07-13 02:34:55 +03:00
Lauri Ojansivu bf35b09998 - Snap Caddy: set -agree flag for Let's Encrypt.
Thanks to halunk3 and xet7 !

Closes wekan/wekan-snap#54
2018-07-13 02:11:34 +03:00
Lauri Ojansivu d50e78c787 - Snap Caddy: set -agree flag for Let's Encrypt.
Thanks to halunk3 and xet7 !
2018-07-13 02:07:56 +03:00
Lauri Ojansivu 5dd43fa147 - Wekan integration with OpenShift.
Thanks to adyachok !
2018-07-13 02:05:33 +03:00
Lauri Ojansivu 5f345e851a Merge pull request #1765 from adyachok/devel
Wekan integration with OpenShift
2018-07-13 01:59:12 +03:00
Andras Gyacsok 687c7923e7 Wekan integration with OpenShift
Added OpenShift template to run WeCan in OpenShift.
Tested on OpensShift 3.7 Dedicated.
2018-07-11 18:22:21 +02:00
Lauri Ojansivu 90707aaab3 Build from source on macOS. 2018-07-09 14:35:21 +03:00
Lauri Ojansivu d5870472fb - Hotfix for mobile device.
Thanks to Haocen !
2018-07-07 08:57:37 +03:00
Lauri Ojansivu efb083aabf Merge pull request #1757 from Haocen/mobile-hotfix
Mobile hotfix
2018-07-07 08:50:19 +03:00
Haocen Xu 5c77407061 Fix missing utility function. 2018-07-06 20:15:39 -04:00
Haocen Xu 9c204d9bbe Avoid default behavior 2018-07-06 15:25:26 -04:00
Haocen Xu 616dade81c Hotfix more sortable elements 2018-07-06 14:42:36 -04:00
Haocen Xu 43d86d7d5d Hotfix for mobile device 2018-07-06 12:48:46 -04:00
Lauri Ojansivu dea9df2a3b Merge branch 'devel' 2018-07-06 16:21:54 +03:00
Lauri Ojansivu 6c7eab4456 v1.18 2018-07-06 16:20:31 +03:00
Lauri Ojansivu 35a3b0b62e - Fix Title is required by setting Checklist title during migration.
Thanks to centigrade-kdk and xet7 !
2018-07-06 16:17:09 +03:00
Lauri Ojansivu 7683f98b7b - Fix Title is required by setting Checklist title
during migration.

Thanks to centigrade-kdk and xet7 !

Closes #1576,
closes #1753
2018-07-06 16:14:07 +03:00
Lauri Ojansivu 09dbcf3bea Merge branch 'devel' 2018-07-06 15:35:14 +03:00
Lauri Ojansivu 369da1e09d v1.17 2018-07-06 15:33:34 +03:00
Lauri Ojansivu 94a1446a08 - Made Subtask Settings visible at Board menu at Sandstorm.
Thanks to xet7 !
2018-07-06 15:27:04 +03:00
Lauri Ojansivu 884cd0e6b8 - Made Subtask Settings visible at Board menu at Sandstorm.
Thanks to xet7 !
2018-07-06 15:23:29 +03:00
Lauri Ojansivu 5e17b01077 Merge branch 'devel' 2018-07-06 14:39:24 +03:00
Lauri Ojansivu 644b235bbb v1.16 2018-07-06 14:38:23 +03:00
Lauri Ojansivu 3d3096104e - Fix: Boards.forEach is not function.
Thanks to xet7 !
2018-07-06 14:35:33 +03:00
Lauri Ojansivu a41190cdf0 - Fix: Boards.forEach is not function.
Thanks to xet7 !
2018-07-06 14:32:57 +03:00
Lauri Ojansivu 1189259a55 Merge branch 'devel' 2018-07-06 13:41:34 +03:00
Lauri Ojansivu 9a053164ac v1.15 2018-07-06 13:37:44 +03:00
Lauri Ojansivu c31602da42 - Fix Title is required by making Checklist title optional.
Thanks to centigrade-kdk and xet7 !

Closes #1576,
closes #1753
2018-07-06 13:34:54 +03:00
Lauri Ojansivu 074a1218fd - Fix [Title is required](https://github.com/wekan/wekan/issues/1576)
by making [Checkist title optional](https://github.com/wekan/wekan/issues/1753).

Thanks to xet7 !

Closes #1576,
closes #1753
2018-07-06 13:29:05 +03:00
Lauri Ojansivu 5d573a7aa1 Merge branch 'devel' 2018-07-06 11:45:51 +03:00
Lauri Ojansivu c26a31f498 v1.14 2018-07-06 11:42:56 +03:00
Lauri Ojansivu 4b65c5cc33 - Fix Checklists.forEach is not a function.
Thanks to xet7 !

Closes #1753
2018-07-06 11:36:24 +03:00
Lauri Ojansivu af8bf1af2e - Fix Checklists.forEach is not a function.
Thanks to xet7 !

Closes #1753
2018-07-06 11:33:13 +03:00
Lauri Ojansivu aaae3150c4 Merge branch 'devel' 2018-07-06 01:14:53 +03:00
Lauri Ojansivu 5220111822 v1.13 2018-07-06 01:14:02 +03:00
Lauri Ojansivu 62e5e5db49 v1.12 2018-07-06 01:03:51 +03:00
Lauri Ojansivu eb6373a879 Merge branch 'ppoulard-devel' into devel 2018-07-05 23:27:07 +03:00
Lauri Ojansivu a4ca6dce25 - SSO CAS.
Thanks to ppoulard !

Closes #620
2018-07-05 23:25:13 +03:00
Lauri Ojansivu 5986f64d72 Update translations. 2018-07-05 23:23:37 +03:00
Lauri Ojansivu b1b9170afe Merge branch 'devel' of https://github.com/ppoulard/wekan into ppoulard-devel 2018-07-05 23:22:57 +03:00
Lauri Ojansivu 13e5ccb56e Fix missing space in jade file.
Thanks to xet7 !
2018-07-05 23:06:02 +03:00
Lauri Ojansivu 8d24fc4bcf Merge branch 'TNick-calendar' into devel 2018-07-05 23:04:35 +03:00
Lauri Ojansivu cc63a575ab - Calendar improvements.
Thanks to TNick !
2018-07-05 23:03:48 +03:00
Lauri Ojansivu a02c51cc3b Merge branch 'calendar' of https://github.com/TNick/wekan into TNick-calendar 2018-07-05 23:02:20 +03:00
Lauri Ojansivu ca6cadbe6d Merge branch 'TNick-nested-tasks' into devel 2018-07-05 22:54:04 +03:00
Lauri Ojansivu cc753cf4e4 - Nested tasks.
Thanks to TNick !

Closes #709
2018-07-05 22:51:10 +03:00
Lauri Ojansivu 7e4fddd932 Update translations. 2018-07-05 22:49:25 +03:00
Lauri Ojansivu 06423164fb Merge branch 'nested-tasks' of https://github.com/TNick/wekan into TNick-nested-tasks 2018-07-05 22:48:43 +03:00
Lauri Ojansivu 515c9be051 - Fix Minimize board sidebar actually just moves it over.
Thanks to dagomar !

Closes #1589
2018-07-05 21:57:17 +03:00
Nicu Tofan 243797d2e9 Merge branch 'upstream-devel' into calendar 2018-07-05 20:17:18 +03:00
Lauri Ojansivu c997786e64 - Fix lint warning: EditCardDate is assigned a value but never used no-unused-vars
Thanks to xet7 !
2018-07-04 00:01:05 +03:00
Lauri Ojansivu dd324aa581 - Fix lint warning: EditCardDate is assigned a value but never used no-unused-vars
Thanks to xet7 !
2018-07-03 23:57:05 +03:00
Lauri Ojansivu 177c00e974 - Fix warning about missing space in jade file.
Thanks to xet7 !
2018-07-03 23:40:31 +03:00
Lauri Ojansivu 067aef9de9 Fix warning about missing space in jade file.
Thanks to xet7 !
2018-07-03 23:33:28 +03:00
ppoulard 02f14d967f Fix stupid error 💥🗯💣🕳💢☠ 2018-07-03 16:21:51 +02:00
Lauri Ojansivu 122a61b333 - Revert "Fix vertical align of user avatar initials",
so that initials are again visible.

Thanks to pravdomil and xet7 !

Reverts https://github.com/wekan/wekan/pull/1714
2018-07-03 17:19:13 +03:00
ppoulard 49a89b80cf Fix QA 2018-07-03 16:08:18 +02:00
ppoulard ee81775dc8 Adding SSO CAS to Wekan 2018-07-03 15:55:19 +02:00
Lauri Ojansivu 05869792ad Revert Dockerfile changes. 2018-07-02 20:06:22 +03:00
Lauri Ojansivu 2ac7660f29 Fix typo. 2018-07-02 20:01:13 +03:00
Lauri Ojansivu abf7890941 Try to fix Dockerfile. 2018-07-02 19:59:00 +03:00
Lauri Ojansivu e139e140f4 Fix typo. 2018-07-02 19:42:04 +03:00
Lauri Ojansivu 1f7db171d9 Try to fix Dockerfile. 2018-07-02 19:38:49 +03:00
Lauri Ojansivu bf06c715fe Fix URL. 2018-07-02 19:09:57 +03:00
Lauri Ojansivu 44e20023cc Try to fix Dockerfile. 2018-07-02 19:05:39 +03:00
Lauri Ojansivu e03ee1bd2f Try to fix Dockerfile. 2018-07-02 18:51:42 +03:00
Lauri Ojansivu aea5ed7848 Try to fix Dockerfile. 2018-07-02 18:48:49 +03:00
Lauri Ojansivu bbdb6a90b2 Download node from sandstorm in Dockerfile. 2018-07-02 18:40:08 +03:00
Lauri Ojansivu f4eac833ed Merge branch 'devel' 2018-06-30 12:39:57 +03:00
Lauri Ojansivu 8fbbc104f7 v1.11 2018-06-30 12:38:40 +03:00
Lauri Ojansivu 6ba4574c67 - Less margin-bottom after minicard.
Thanks to pravdomil and xet7 !
2018-06-30 12:23:49 +03:00
Lauri Ojansivu 928d88cfe1 - More margin-bottom after minicard.
Thanks to pravdomil and xet7 !
2018-06-30 12:22:35 +03:00
Lauri Ojansivu 4f5086c5cd - Revert previous More margin-bottom after minicard.
Thanks to pravdomil and xet7 !
2018-06-30 12:03:15 +03:00
Lauri Ojansivu fe69ab9030 Merge branch 'pravdomil-patch-7' into devel 2018-06-30 11:42:47 +03:00
Lauri Ojansivu 08a1927c0c - Remove card shadow, Wekan users now prefer not to have it.
Thanks to GitHub users pravdomil and xet7 for their contributions.
2018-06-30 11:42:03 +03:00
Lauri Ojansivu f02d5e64f0 Merge branch 'patch-7' of https://github.com/pravdomil/wekan into pravdomil-patch-7 2018-06-30 11:39:51 +03:00
Lauri Ojansivu 5bca2f802b Update translations. 2018-06-30 11:34:00 +03:00
Nicu Tofan 3eba6ef285 Merge branch 'devel' into nested-tasks 2018-06-28 17:00:35 +03:00
Lauri Ojansivu 5f81b73a49 Merge branch 'devel' 2018-06-28 14:03:57 +03:00
Lauri Ojansivu ad54a8a484 v1.10 2018-06-28 14:02:57 +03:00
Lauri Ojansivu 5adce79842 Update translations (de) 2018-06-28 13:59:43 +03:00
Lauri Ojansivu 9fceb212d9 Fix migration error "TypeError: Checklists.foreach" at Snap, Docker etc.
Thanks to Jubi94, kestrelhawk and xet7 !
2018-06-28 13:56:41 +03:00
Lauri Ojansivu e044769d85 - Fix migration error "TypeError: Checklists.foreach"
Thanks to Jubi94, kestrelhawk and xet7 !

Fixes #1736,
fixes wekan/wekan-snap#51
2018-06-28 13:48:36 +03:00
Lauri Ojansivu a86a8eff2d Fix typo. 2018-06-28 00:26:37 +03:00
Lauri Ojansivu 7b9aaddb5b Merge branch 'devel' 2018-06-28 00:15:24 +03:00
Lauri Ojansivu 541dc67a02 v1.09 2018-06-28 00:14:02 +03:00
Nicu Tofan db5ff4e1e2 Changing events in calendar updates the card 2018-06-28 00:13:35 +03:00
Lauri Ojansivu d0611e1bff Update translations. 2018-06-28 00:09:52 +03:00
Lauri Ojansivu 523ebea4dd Merge branch 'TNick-calendar' into devel 2018-06-27 23:57:02 +03:00
Lauri Ojansivu bccfa320a9 - Calendar.
Thanks to TNick !
2018-06-27 23:56:15 +03:00
Lauri Ojansivu 72d0db7a59 Merge branch 'calendar' of https://github.com/TNick/wekan into TNick-calendar 2018-06-27 23:55:06 +03:00
Lauri Ojansivu ed0ef5b7d3 Merge branch 'TNick-invitation-code-setting' into devel 2018-06-27 23:38:58 +03:00
Lauri Ojansivu 5619eef620 - Restore invitation code logic. Please test and add comment
to those invitation code issues that this fixes.

Thanks to TNick !
2018-06-27 23:37:50 +03:00
Lauri Ojansivu ae2e42e1b4 Merge branch 'invitation-code-setting' of https://github.com/TNick/wekan into TNick-invitation-code-setting 2018-06-27 23:30:23 +03:00
Lauri Ojansivu 864ad3827d - To fix "title is required" fix only add-checklist-items and
revert all other migration changes.

Closes #1576,
closes #1734
2018-06-27 23:25:48 +03:00
Nicu Tofan 9cb8aab3ba Reactive change when a date is modified. 2018-06-27 23:00:14 +03:00
Nicu Tofan 374e986579 Can show card on event click 2018-06-27 22:37:32 +03:00
Nicu Tofan 3c4549fe64 Can show card on top of calendar 2018-06-27 22:23:28 +03:00
Nicu Tofan 0394a78ece Get rid of extra package
staringatlights:flow-router is another incarnation of kadira:flow-router
kadira:flow-router is not an explicit dependency but useraccounts:flow-routing depends on it.
This commit gets rid of an anoying message informing that a route has
not been found.
2018-06-27 17:39:29 +03:00
Nicu Tofan 19d239f4cf Prevent errors due to missing date fields 2018-06-27 16:25:57 +03:00
Nicu Tofan d23ac2b385 Restore invitation code logic 2018-06-27 15:30:52 +03:00
Lauri Ojansivu ae5d2b7908 Merge branch 'devel' 2018-06-27 11:07:52 +03:00
Lauri Ojansivu 766b58d91b v1.08 2018-06-27 11:06:37 +03:00
Lauri Ojansivu 663a4040f9 Add Georgian language. 2018-06-27 10:24:07 +03:00
Nicu Tofan 18467dfe40 Show cards in calendar 2018-06-26 22:11:51 +03:00
Lauri Ojansivu 2a165dccd4 Update translations (sv). 2018-06-26 21:37:21 +03:00
Lauri Ojansivu d501e5832a Fix typo. 2018-06-26 21:31:29 +03:00
Lauri Ojansivu b198a3ed99 Fix typo. 2018-06-26 21:29:38 +03:00
Nicu Tofan 226d25ca94 Introducing third board view: calendar.
A dependency to rzymek:fullcalendar has also been added.
2018-06-26 19:55:23 +03:00
Nicu Tofan b7d508e8c4 Added ability to change card's parent. 2018-06-26 17:39:31 +03:00
Nicu Tofan 439d7c3dbc Fix conflict in migrations
(Error: title is required by removing find() from all of migrations.)
2018-06-26 14:49:21 +03:00
Nicu Tofan bac490d2f3 Links for parents in card details. 2018-06-26 14:33:05 +03:00
Nicu Tofan 3a4a075dba Fix minicard parents display 2018-06-26 14:33:05 +03:00
Nicu Tofan c0ffd6c20f Show parent in card (no links, yet) 2018-06-26 14:32:51 +03:00
Nicu Tofan 94a52080cf Board level settings for subtasks 2018-06-26 14:32:51 +03:00
Nicu Tofan c9f70cf382 Check for null and undefined in board defaults 2018-06-26 14:32:51 +03:00
Nicu Tofan 04745f0c2f implement getDefaultSwimline for boards 2018-06-26 14:32:51 +03:00
Nicu Tofan aead18eb58 change all mentions of Kids => Children 2018-06-26 14:32:50 +03:00
Nicu Tofan a0c02f4a50 typo in renaming itemDetail to checklistItemDetail 2018-06-26 14:32:50 +03:00
Nicu Tofan 50f170b75d A better name for incoming subtasks 2018-06-26 14:32:50 +03:00
Nicu Tofan 989b026b33 Can now navigate to subtask 2018-06-26 14:32:50 +03:00
Nicu Tofan 4ac6a507cd Get rid of old implementation for substacks 2018-06-26 14:32:50 +03:00
Nicu Tofan cd36194477 Archive subtask instead of permanent delete 2018-06-26 14:32:49 +03:00
Nicu Tofan 6ab1cbb341 Take archived status into consideration for subtasks 2018-06-26 14:32:49 +03:00
Nicu Tofan 5a023e4315 Can add cards as subtasks 2018-06-26 14:32:49 +03:00
Nicu Tofan adb7f5b2ca Switch from subtasks to cards in model 2018-06-26 14:32:49 +03:00
Nicu Tofan fd465fbb60 Helpers for dealing with trees of cards 2018-06-26 14:32:48 +03:00
Nicu Tofan 879a84184f added ability to create a tree of cards 2018-06-26 14:32:48 +03:00
Nicu Tofan f89de026c4 Change order using drag-n-drop for subtasks 2018-06-26 14:32:48 +03:00
Nicu Tofan 5f20e56721 Remove leftovers from checklist conversion 2018-06-26 14:32:47 +03:00
Nicu Tofan d59583915c Initial implementation for subtasks 2018-06-26 14:32:47 +03:00
Nicu Tofan b627ced605 Some inspiration from checklists to subtasks 2018-06-26 14:32:47 +03:00
Nicu Tofan c3037b155f Added subtasks model and APIs for it 2018-06-26 14:32:47 +03:00
pravdomil c3e839c885 revert 6a58729 2018-06-26 10:54:22 +02:00
Lauri Ojansivu b0444ae338 Merge branch 'devel' 2018-06-26 02:37:23 +03:00
Lauri Ojansivu 43dde4a10f - Fix "Error: title is required" by removing find() from all of migrations.
Thanks to xet7 !

Closes #1576
2018-06-26 02:14:52 +03:00
Lauri Ojansivu 97922c90cb - Fix "Error: title is required" by removing find() from all of migrations.
Thanks to xet7 !

Closes #1576
2018-06-26 02:11:37 +03:00
Lauri Ojansivu c372ea02f7 Merge branch 'pravdomil-patch-6' into devel 2018-06-26 01:42:02 +03:00
Lauri Ojansivu daa95c582e - Submit inline form on click outside, fixes
"You have an unsaved description" doesn't go away after saving.

Thanks to pravdomil and xet7 !

Fixes #1287
2018-06-26 01:40:13 +03:00
Lauri Ojansivu aa2a15bf1b Fix lint errors. 2018-06-26 01:36:44 +03:00
Lauri Ojansivu f629a7b3f7 Merge branch 'patch-6' of https://github.com/pravdomil/wekan into pravdomil-patch-6 2018-06-26 01:35:09 +03:00
Lauri Ojansivu 03921a969a Merge branch 'pravdomil-patch-3' into devel 2018-06-26 01:08:18 +03:00
Lauri Ojansivu b7d51456eb - Add more card inner shadow;
- Less margin-bottom after minicard.

Thanks pravdomil and xet7 !

Related #1690
Related https://github.com/wekan/wekan/pull/1713
2018-06-26 01:06:14 +03:00
Lauri Ojansivu 6a587299b8 - Add more card inner shadow.
Thanks to pravdomil and xet7 !

Related #1690
2018-06-26 01:02:19 +03:00
Lauri Ojansivu f5aa1b795b Merge branch 'patch-3' of https://github.com/pravdomil/wekan into pravdomil-patch-3 2018-06-26 01:01:12 +03:00
Lauri Ojansivu 2efc5ab4e9 Merge branch 'pravdomil-patch-4' into devel 2018-06-26 00:46:32 +03:00
Lauri Ojansivu fde26c2183 - Fix vertical align of user avatar initials.
Thanks to pravdomil !
2018-06-26 00:45:51 +03:00
Lauri Ojansivu 8ad8f17731 Merge branch 'patch-4' of https://github.com/pravdomil/wekan into pravdomil-patch-4 2018-06-26 00:43:36 +03:00
Lauri Ojansivu e9d56b0804 Merge branch 'zypA13510-zypA13510-patch-1' into devel 2018-06-26 00:37:58 +03:00
Lauri Ojansivu 43a967b274 - Fix typo in English translation.
Thanks to zypA13510 !
2018-06-26 00:37:02 +03:00
Lauri Ojansivu c1ecaf3959 Merge branch 'zypA13510-patch-1' of https://github.com/zypA13510/wekan into zypA13510-zypA13510-patch-1 2018-06-26 00:04:05 +03:00
Lauri Ojansivu 0b5ecd24f9 Update translations. 2018-06-26 00:01:02 +03:00
Lauri Ojansivu 9a55f38d90 Change fr.md to not be executeable. 2018-06-25 23:57:53 +03:00
Lauri Ojansivu 09c8f29de8 Update translations. 2018-06-23 02:11:44 +03:00
pravdomil 620bbb3394 refactor 2018-06-19 16:43:02 +02:00
pravdomil 77ae6c17e7 submit inline form on click outside 2018-06-19 16:38:42 +02:00
pravdomil b8bbdcc4c5 fix vertical align of user avatar initials 2018-06-19 16:10:48 +02:00
pravdomil 18e936fd28 less margin-bottom after minicard 2018-06-19 14:12:17 +02:00
Yuping Zuo c94edb6bb0 Update en.i18n.json
Fixed incorrect syntax in advanced filter description.
2018-06-19 10:37:59 +08:00
Lauri Ojansivu 615f66c820 Merge branch 'devel' 2018-06-15 19:21:56 +03:00
Lauri Ojansivu 484d495259 Update translations (de). 2018-06-15 19:21:32 +03:00
Lauri Ojansivu bec0c4b4d0 Merge branch 'devel' 2018-06-14 23:56:36 +03:00
Lauri Ojansivu dfbcca2a2d Try to fix broken markdown of \ character. 2018-06-14 23:55:55 +03:00
Lauri Ojansivu 4526845fd1 Merge branch 'devel' 2018-06-14 23:33:59 +03:00
Lauri Ojansivu 73c6c07c47 v1.07 2018-06-14 23:32:30 +03:00
Lauri Ojansivu 896a149fb9 - Regex for Advanced filter.
It aims to solve search in bigger text fields, and using wildcards.
  A change to translations was made for adding info about regex and escaping characters with \

Thanks to feuerball11 and xet7 !
2018-06-14 23:29:58 +03:00
Lauri Ojansivu 0034d2d3be Merge branch 'feuerball11-feature-custom-fields' into devel 2018-06-14 23:25:39 +03:00
Lauri Ojansivu 880dcab0b1 Update translations. 2018-06-14 23:24:29 +03:00
Lauri Ojansivu 98eb4453c5 Fix typo. 2018-06-14 23:09:47 +03:00
Lauri Ojansivu 3e686e4379 Merge branch 'feature-custom-fields' of https://github.com/feuerball11/wekan into feuerball11-feature-custom-fields 2018-06-14 22:51:43 +03:00
IgnatzHome 8509dad58f changing loca to explain regex and escape character 2018-06-14 21:42:18 +02:00
Lauri Ojansivu 0f53220122 Merge branch 'devel' 2018-06-14 22:31:26 +03:00
Lauri Ojansivu 1214af04a9 v1.06 2018-06-14 22:30:36 +03:00
Lauri Ojansivu 8c0d61c4a5 v1.06 2018-06-14 22:29:54 +03:00
IgnatzHome ba2012af43 regex for advanced filter 2018-06-14 21:14:16 +02:00
IgnatzHome b5e6e6ee10 Merge branch 'devel' of https://github.com/wekan/wekan into feature-custom-fields 2018-06-14 20:38:10 +02:00
IgnatzHome 61ee6cf09f This seems to make more sense. 2018-06-14 20:26:44 +02:00
IgnatzHome 04925f7347 trying to understand hirachy 2018-06-14 20:11:29 +02:00
Lauri Ojansivu 37817fcaf8 Merge branch 'devel' 2018-06-14 20:44:43 +03:00
Lauri Ojansivu 8a7ad0df54 v1.05 2018-06-14 20:43:28 +03:00
IgnatzHome a433f7d9fe Merge branch 'feature-custom-fields' of https://github.com/feuerball11/wekan into feature-custom-fields 2018-06-14 19:42:09 +02:00
IgnatzHome 991e74bfc2 testing mobile detail view fix. 2018-06-14 19:38:57 +02:00
Lauri Ojansivu c46817f23a Fix lint errors. 2018-06-14 20:14:43 +03:00
Lauri Ojansivu 94bd63c8a7 Merge branch 'rjevnikar-fixRDate' into devel 2018-06-14 19:45:22 +03:00
Lauri Ojansivu 3e8b2620a1 Fix minicardReceivedDate typo in
1.04 regression: Socket connection error and boards not loading

Thanks to Fran-KTA and rjevnikar !

Closes #1694
2018-06-14 19:43:33 +03:00
Lauri Ojansivu ce8c78eb34 Merge branch 'fixRDate' of https://github.com/rjevnikar/wekan into rjevnikar-fixRDate 2018-06-14 19:39:27 +03:00
Lauri Ojansivu 85e02010d4 Merge branch 'feuerball11-feature-custom-fields' into devel 2018-06-14 19:38:16 +03:00
RJevnikar a912960a58 Add back language files 2018-06-14 16:31:54 +00:00
Lauri Ojansivu aeec9f6ef8 - Markdown support in Custom Fields, and view on minicard
- Fixes to Advanced Filter, you are now able to filter for Dropdown and Numbers,
  also Dropdown are now correctly displayed on minicard
- Fix Issue with custom fields shown on card
- Fix showing public board in list mode
- Fix for not able to remove Custom Field "Show on Card"

Related #807

Closes #1659,
closes #1623,
closes #1683
2018-06-14 19:28:06 +03:00
RJevnikar 718adc6c47 Fix minicardReceivedDate typo identified in #1694 2018-06-14 16:11:41 +00:00
Lauri Ojansivu 454aa05987 Another fix for checklists item migration error "title is required"
https://github.com/wekan/wekan/commit/8d5cbf1e6c2b6d467fe1c0708cd794fd11b98a2e#commitcomment-29362180

Thanks to oec !

Closes #1576
2018-06-14 19:03:44 +03:00
Lauri Ojansivu 23726136bd Merge branch 'feature-custom-fields' of https://github.com/feuerball11/wekan into feuerball11-feature-custom-fields 2018-06-14 18:58:09 +03:00
Lauri Ojansivu fa82efe7d2 Merge branch 'rjevnikar-dateColourFix' into devel
Fix data colour changes on cards.

Related https://github.com/wekan/wekan/pull/1698

Fixes #1693
2018-06-14 18:47:26 +03:00
Lauri Ojansivu 011fad6701 Update translations. 2018-06-14 18:46:28 +03:00
Ignatz fcf262cc98 testing markdown support for custom fields 2018-06-14 15:08:30 +02:00
Ignatz c5f0e87dd0 fix for not able to remove "Show on Card" 2018-06-14 14:10:30 +02:00
Ignatz 6a154ee9b0 correcting error in advanced filter 2018-06-14 12:56:29 +02:00
Ignatz 558539e21b trying to fix integer search 2018-06-14 12:49:59 +02:00
Ignatz 571f55f904 fixing search for dropdown fields, and error on loading board 2018-06-14 12:41:16 +02:00
Ignatz 259614b647 trying to fix display Issue with dropdown custom fields 2018-06-14 11:58:37 +02:00
Ignatz 8ec60879dc hotfix public board 2018-06-14 10:55:53 +02:00
RJevnikar edd2e9db3c Fix lint errors 2018-06-13 22:26:45 +00:00
RJevnikar 67454d0491 Fix data colour changes on cards.
Addressing both #1685 and #1693
2018-06-13 22:18:00 +00:00
Lauri Ojansivu 9e14733478 Merge branch 'devel' 2018-06-13 00:35:11 +03:00
Lauri Ojansivu 848d8ac95d Removed duplicate text. 2018-06-13 00:34:51 +03:00
Lauri Ojansivu 93e7c8aecf Merge branch 'devel' 2018-06-12 22:21:23 +03:00
Lauri Ojansivu a98ae8dc71 v1.04 2018-06-12 22:20:17 +03:00
Lauri Ojansivu 193ff20c23 Add SECURITY.md 2018-06-12 22:11:43 +03:00
Lauri Ojansivu 92a85a991b Merge branch 'rjevnikar-labelText' into devel 2018-06-12 21:48:46 +03:00
Lauri Ojansivu 38af71d9c9 - Change label text colour to black for specific label colours for better visibility
Thanks to rjevnikar !
2018-06-12 21:48:02 +03:00
Lauri Ojansivu 246267276a Update translations. 2018-06-12 21:46:37 +03:00
Lauri Ojansivu ea19176d3c Merge branch 'labelText' of https://github.com/rjevnikar/wekan into rjevnikar-labelText 2018-06-12 21:46:03 +03:00
Lauri Ojansivu f28889de59 - Modify card covers/mini-cards so that:
1) Received date is shown unless there is a start date
  2) Due Date is shown, unless there is an end date.

This begins to address #1668

Thanks to rjevnikar !
2018-06-12 21:42:52 +03:00
Lauri Ojansivu aa7199af2d Merge branch 'rjevnikar-cardCoverTimeBadges' into devel 2018-06-12 21:36:16 +03:00
Lauri Ojansivu fba0a52e4a Update translations. 2018-06-12 21:34:57 +03:00
Lauri Ojansivu 6d7bdad140 Merge branch 'cardCoverTimeBadges' of https://github.com/rjevnikar/wekan into rjevnikar-cardCoverTimeBadges 2018-06-12 21:21:56 +03:00
Lauri Ojansivu aef871833b - SECURITY FIX: Do not publish all of people collection.
Thanks to Adrian Genaid.
2018-06-12 21:18:38 +03:00
Lauri Ojansivu dda49d2f07 - Security Fix: Do not publish all of people collection.
Thanks to Adrian Genaid !
2018-06-12 21:13:50 +03:00
RJevnikar 199ea3d6f9 Change label text colour to black for specific label colours for better visibility 2018-06-11 16:21:35 +00:00
Lauri Ojansivu 6478dd7da8 Merge branch 'devel' 2018-06-10 19:45:33 +03:00
Lauri Ojansivu 53bd527947 - Add Khmer language.
Thanks to xet7 and translators !
2018-06-10 19:45:03 +03:00
Lauri Ojansivu 2156e45869 Add Khmer language. 2018-06-10 19:42:24 +03:00
Lauri Ojansivu 72a66c1d5b Merge branch 'devel' 2018-06-10 18:41:58 +03:00
Lauri Ojansivu 1ced919dfb Update translations. 2018-06-10 18:38:07 +03:00
Lauri Ojansivu d948e78d1e Update translations. 2018-06-10 18:02:07 +03:00
Lauri Ojansivu bd5fd77655 Fix typo. 2018-06-10 17:45:02 +03:00
RJevnikar 45cf2843a6 Adjust classes given to due date to take into account end date 2018-06-08 21:09:52 +00:00
RJevnikar ca51ace22d Modify mini cards so that received date is shown if there is no start date, and due date is shown if there is no end date. 2018-06-08 20:42:16 +00:00
Lauri Ojansivu 93a7040c77 Update translations. 2018-06-08 18:00:35 +03:00
Lauri Ojansivu d4df405862 Merge branch 'devel' 2018-06-08 14:20:40 +03:00
Lauri Ojansivu dc687848e6 v1.03 2018-06-08 14:19:45 +03:00
Lauri Ojansivu 85187817a7 Update translations. 2018-06-08 14:17:04 +03:00
Lauri Ojansivu 5f5a1b780e Merge branch 'rjevnikar-moreFieldsColours' into devel
Closes #833
2018-06-08 01:52:27 +03:00
Lauri Ojansivu e31741cd7b Update translations. 2018-06-08 01:51:58 +03:00
Lauri Ojansivu d5bfa468f7 - Additional label colors
- Assigned By and Requested By text fields on card
- Delete board from Recycle Bin

Thanks to JamesLavin and rjevnikar !
2018-06-08 01:18:41 +03:00
Lauri Ojansivu 9990f9856b Change button order at Boards Recycle Bin. 2018-06-08 00:41:39 +03:00
Lauri Ojansivu b3bb03fed4 Merge branch 'moreFieldsColours' of https://github.com/rjevnikar/wekan into rjevnikar-moreFieldsColours 2018-06-07 22:53:06 +03:00
RJevnikar 1332a57890 Fix double comma in i18n/en.i18n.json 2018-06-07 19:15:58 +00:00
Lauri Ojansivu 123d9659c1 - Update to newest Sandstorm fork of Node.js that includes
performance etc fixes.

Thanks to xet7 !
2018-06-07 22:13:39 +03:00
Lauri Ojansivu 90d55777f7 Copy latest Sandstorm Node.js fork binary from installed Sandstorm
/opt/sandstorm/sandstorm-234/bin/node to https://releases.wekan.team
download server.

Node binary is compiled by https://github.com/kentonv
when doing new release of Sandstorm.

Source code of binary is at:
https://github.com/sandstorm-io/node
2018-06-07 21:54:08 +03:00
RJevnikar ec4e1b6eff Fix spacing on cardDetails.jade to get 'Add' buttons in <a> tag for RequestedBy & AssignedBy 2018-06-07 16:26:20 +00:00
RJevnikar c72b769f82 Attempt to lineup buttons in recycle bin & get delete board popup to appear 2018-06-07 16:02:44 +00:00
Lauri Ojansivu 8471f389eb Merge branch 'rjevnikar-boardViewMigration' into devel
Fixes #1675
2018-06-06 23:12:00 +03:00
Lauri Ojansivu 23e6b4ec0a - Try to fix: Missing board-view-lists Field after DB updated to Wekan 1.02.
Thanks to rjevnikar !
2018-06-06 23:10:40 +03:00
RJevnikar 8f364281d2 Remove delete option from board hamburger menu 2018-06-06 20:05:44 +00:00
RJevnikar 1f17cee39b Remove double template for deleteCardPopup 2018-06-06 17:45:43 +00:00
RJevnikar 4787a1186b Adjust 'add-profile-view' in migrations.js in attempt to resolve 1675 2018-06-06 17:36:20 +00:00
RJevnikar 3c4b09157e Fix AssignedBy & RequestedBy fields & forms 2018-06-06 16:44:15 +00:00
RJevnikar 87ee0ca646 Fix display of card details - cardDetails.styl - remove trailing comma 2018-06-06 16:31:18 +00:00
RJevnikar de59758471 Add delete board to Recycle Bin, fix delete-board menu item on board menu 2018-06-06 15:27:05 +00:00
RJevnikar ea109cfdd7 Add migrations for requestedBy and assignedBy fields. 2018-06-06 13:19:53 +00:00
RJevnikar 9035989abf Finish adding delete board feature 2018-06-05 22:03:46 +00:00
RJevnikar aa6076e087 Fix lint error 2018-06-05 21:29:28 +00:00
RJevnikar 78b9436f38 Fix problems highlighted by Codacy/PR Quality Review 2018-06-05 21:21:14 +00:00
RJevnikar 3ce3fa74b3 Add additional label colours (from pull by JamesLavin), Add Assigned & Requested By text fields. 2018-06-05 20:23:29 +00:00
Lauri Ojansivu d6eff2a074 Update translations. 2018-06-04 00:15:22 +03:00
Lauri Ojansivu ccf1e8bc3c Merge branch 'devel' 2018-05-28 22:02:49 +03:00
Lauri Ojansivu 6d75fe4d86 Update translations. 2018-05-28 22:02:30 +03:00
Lauri Ojansivu 82a01edc54 Merge branch 'devel' 2018-05-26 09:40:43 +03:00
Lauri Ojansivu 9ff2340cdb v1.02 2018-05-26 09:39:18 +03:00
Lauri Ojansivu b727204716 Merge branch 'devel' of github.com:wekan/wekan into devel 2018-05-26 09:37:39 +03:00
Lauri Ojansivu 5b4f2f55aa Update translations.
Correction: Releasing Wekan v1.02
2018-05-26 09:36:11 +03:00
Lauri Ojansivu 60119153de Update translations. 2018-05-26 09:29:58 +03:00
Lauri Ojansivu 2b2d596da6 v1.0.2 2018-05-26 08:58:40 +03:00
Lauri Ojansivu 63c1ef9f9e Actually, without @latest it works the same. 2018-05-26 08:47:37 +03:00
Lauri Ojansivu 0cc183682e Use latest npm. 2018-05-26 08:43:20 +03:00
Lauri Ojansivu 4d193f5650 Remove bcrypt, continued. 2018-05-26 08:28:16 +03:00
Lauri Ojansivu 73c4806864 Merge branch 'xadagaras-bugfix/received_end_date_picker' into devel 2018-05-26 08:27:07 +03:00
Lauri Ojansivu b0cf60a3d9 - Fix Received Date and End Date on Cards.
Thanks to xadagaras !
2018-05-26 07:52:20 +03:00
Lauri Ojansivu 3ca3d063a7 Merge branch 'bugfix/received_end_date_picker' of https://github.com/xadagaras/wekan into xadagaras-bugfix/received_end_date_picker 2018-05-26 07:49:49 +03:00
Lauri Ojansivu 01741750f8 Merge branch 'kubiko-devel' into devel 2018-05-26 07:48:38 +03:00
Lauri Ojansivu 4377381fd3 - Snap: Filtering out swap file created at build time, adding stage package.
Thanks to kubiko !
2018-05-26 07:47:59 +03:00
Lauri Ojansivu 9cf1b62cd6 Merge branch 'devel' of https://github.com/kubiko/wekan into kubiko-devel 2018-05-26 07:45:41 +03:00
Lauri Ojansivu 5ded2e5121 - Removed binary version of bcrypt because of vulnerability that has issue that is not fixed yet. This may cause some slowdown.
Thanks to xet7 !
2018-05-26 07:44:36 +03:00
Lauri Ojansivu 7eeabf14be Remove binary version of bcrypt because of security vulnerability.
This may cause some slowdown.
2018-05-26 07:33:32 +03:00
Daniel Kreuter be507e567a Extend editCardReceivedDatePopup and editCardEndDatePopup from DatePicker to fix #1654 2018-05-25 19:44:49 +02:00
Ondrej Kubik 1117d1c2ae filtering out swap file created at build time, adding stage package
Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>
2018-05-25 13:49:24 +00:00
Lauri Ojansivu 9eaac52b73 Merge branch 'devel' 2018-05-24 18:07:20 +03:00
Lauri Ojansivu 4b20102139 Remove bcrypt 2018-05-24 18:06:39 +03:00
Lauri Ojansivu edae64b1c7 Merge branch 'devel' 2018-05-24 14:08:44 +03:00
Lauri Ojansivu 9242bdb10b Go back to xss 0.3.8, because 1.0.0 did break snap build. 2018-05-24 14:07:57 +03:00
Lauri Ojansivu 171d0c8629 Merge branch 'devel' 2018-05-24 11:04:53 +03:00
Lauri Ojansivu a69997d31e Merge remote-tracking branch 'upstream/devel' into devel 2018-05-24 11:04:31 +03:00
Lauri Ojansivu 31e4400c66 Merge branch 'devel' 2018-05-24 10:55:39 +03:00
Lauri Ojansivu 3bcd578fcb Merge branch 'greenkeeper/xss-1.0.0' into devel 2018-05-24 10:55:12 +03:00
Lauri Ojansivu 4c5daf5d85 - Update xss to version 1.00
Thanks to xet7 !
2018-05-24 10:51:29 +03:00
greenkeeper[bot] 5b4d75a976 fix(package): update xss to version 1.0.0 2018-05-24 07:11:37 +00:00
Lauri Ojansivu 05020241aa Merge branch 'devel' 2018-05-23 22:55:29 +03:00
Lauri Ojansivu b9c63a8c8f v1.01 2018-05-23 22:54:12 +03:00
Lauri Ojansivu f75f686271 Update translations. 2018-05-23 21:56:11 +03:00
Lauri Ojansivu 505fc71665 - Possible quickfix for all customFields Import errors, please test.
Thanks to feuerball11 and xet7 !

Related #807

Closes #1652, closes #1651
2018-05-23 21:04:24 +03:00
Lauri Ojansivu 529594ef55 Fix lint errors. 2018-05-23 20:58:28 +03:00
Ignatz 3d1f004e90 lint corrections 2018-05-23 11:04:12 +02:00
Ignatz 0195044ba1 possible quickfix for all customFields Import errors 2018-05-23 11:02:23 +02:00
Lauri Ojansivu e8c24aeaf9 Merge branch 'devel' 2018-05-22 09:46:20 +03:00
Lauri Ojansivu ad8f227880 More details to issue template. 2018-05-22 09:45:59 +03:00
Lauri Ojansivu ddfcb235cc Merge branch 'devel' 2018-05-22 09:38:15 +03:00
Lauri Ojansivu c4d83c6e66 Simplify issue template 2018-05-22 09:37:46 +03:00
Lauri Ojansivu 90b589d993 Remove duplicate Contributing.md 2018-05-22 09:29:00 +03:00
Lauri Ojansivu 94fc172366 Merge branch 'devel' 2018-05-21 17:30:21 +03:00
Lauri Ojansivu d4cc337577 v1.00 2018-05-21 17:29:04 +03:00
Lauri Ojansivu 25695bdef2 Update translations. 2018-05-21 17:22:46 +03:00
Lauri Ojansivu af496839f5 Fix typo.
Thanks to yarons !

Closes #1647
2018-05-21 16:31:09 +03:00
Lauri Ojansivu a8feb8ed32 Merge branch 'devel' 2018-05-21 15:07:12 +03:00
Lauri Ojansivu 9c09d926e3 v0.99 2018-05-21 15:05:56 +03:00
Lauri Ojansivu cba480d3ae Update translations (de) 2018-05-21 15:03:26 +03:00
Lauri Ojansivu dbfdba75f9 Merge branch 'feuerball11-feature-advanced-filter' into devel 2018-05-21 02:41:48 +03:00
Lauri Ojansivu d46afc12be Advanced Filter for Custom Fields.
Thanks to feuerball11 and xet7 !
2018-05-21 02:41:02 +03:00
Lauri Ojansivu 531cea489e Update translations. 2018-05-21 02:27:15 +03:00
Lauri Ojansivu 9e4758ec9e Update translations. 2018-05-21 01:03:42 +03:00
Lauri Ojansivu e8206f2983 Merge branch 'feature-advanced-filter' of https://github.com/feuerball11/wekan into feuerball11-feature-advanced-filter 2018-05-20 22:53:36 +03:00
SpeaKeasY e5c6da5a39 Added initial DJango 2.0.5 project config with pyjade, python 3.6.5 venv. 2018-05-20 18:38:33 +00:00
IgnatzHome 2119a6568b forgot a ' 2018-05-20 14:59:32 +02:00
IgnatzHome dd7c9997a9 Removing Debug Lines, correcting behavior, caching las valide filter, and adding description 2018-05-20 14:53:00 +02:00
IgnatzHome 256ca129f0 Correcting not Filter 2018-05-20 14:03:48 +02:00
IgnatzHome 6d9ac3ae48 testing theorie: subcommands are allways 1 entry 2018-05-20 13:19:18 +02:00
IgnatzHome 59046d448f making custom-fields uneditable on minicard 2018-05-20 12:24:07 +02:00
IgnatzHome d9e291635a customFields bevore mebers on minicard 2018-05-20 12:17:25 +02:00
Lauri Ojansivu b8158fadfc Merge branch 'devel' 2018-05-20 13:13:35 +03:00
Lauri Ojansivu 1133b7a04a Update translations. 2018-05-20 13:13:15 +03:00
IgnatzHome 43fe9ef34a style correction for custom fields on minicard 2018-05-20 12:11:58 +02:00
IgnatzHome f910b66ef2 correcting indent in jade 2018-05-20 11:49:49 +02:00
IgnatzHome bfac626fa4 showOnCard test implementation 2018-05-20 11:40:32 +02:00
IgnatzHome ecbb8ef071 correcting strings not part of subcommand 2018-05-20 11:27:22 +02:00
IgnatzHome 1c0c5bde0f More conditions and logic Operators, Also Brackets. 2018-05-20 11:15:57 +02:00
IgnatzHome c3044a6b8b removing .cmd in oricessing Operators 2018-05-20 10:20:29 +02:00
IgnatzHome 778a29855f stringify console.logs becouse of asynchrone nature from chromes interpretation... WAT 2018-05-20 10:11:46 +02:00
IgnatzHome eb859dac3a More Debugging Logs 2018-05-20 09:57:40 +02:00
IgnatzHome 9ac1164440 Testing 'or' condition for advanced Filter 2018-05-20 09:47:20 +02:00
IgnatzHome 39974c9532 rewrite Filter._getMongoSelecto to not include Empty Filter. 2018-05-20 09:33:51 +02:00
IgnatzHome 4ff8989e8f More Debugging 2018-05-19 22:29:12 +02:00
IgnatzHome 2bf13a50c4 find to findOne 2018-05-19 22:17:00 +02:00
IgnatzHome 382b14ea27 debugging _fieldNameToId 2018-05-19 21:54:20 +02:00
IgnatzHome 17fcfd3697 correcting _fieldNameToId(field); 2018-05-19 21:42:11 +02:00
IgnatzHome 811ccf0f10 i was constructing the wrong and the whole time.. *sigh* 2018-05-19 21:31:43 +02:00
IgnatzHome 422424d21c fixing string detection in advanced filter 2018-05-19 21:19:10 +02:00
IgnatzHome 0bdc7efc8b another debug line 2018-05-19 21:06:53 +02:00
IgnatzHome 32058e8018 damm i got the eslint file again.... 2018-05-19 20:53:59 +02:00
IgnatzHome ba12b53e49 correct way, wrong idea 2018-05-19 20:53:25 +02:00
IgnatzHome b9ead144fb javascript is confusing sometimes 2018-05-19 20:33:49 +02:00
IgnatzHome 1d58e40133 this took me way too long 2018-05-19 20:17:52 +02:00
IgnatzHome cd749bc385 console log for debug 2018-05-19 19:59:10 +02:00
IgnatzHome 01cd2df369 correcting return type from constructed 2018-05-19 19:16:10 +02:00
IgnatzHome 1854f5c061 correcting push not part of string 2018-05-19 19:00:20 +02:00
IgnatzHome b00bd04baa first test for Advanced Filter 2018-05-19 18:38:48 +02:00
Lauri Ojansivu 8b32cf42cb Merge branch 'devel' 2018-05-19 18:45:37 +03:00
Lauri Ojansivu 3075791a93 v0.98 2018-05-19 18:43:59 +03:00
Lauri Ojansivu 38ab2b766d Merge branch 'feuerball11-feature-custom-fields-filter' into devel 2018-05-19 18:40:03 +03:00
Lauri Ojansivu 410e5aa28d - Filtering by Custom Field
- Update to NPM 6.0.1 and MongoDB 3.2.20

Thanks to feuerball11 and xet7 !
2018-05-19 18:37:02 +03:00
Lauri Ojansivu 82f7541131 Update translations. 2018-05-19 18:30:29 +03:00
Lauri Ojansivu 106b135eba Use NPM 6.0.1 2018-05-19 18:13:43 +03:00
Lauri Ojansivu 7dfec58128 Merge branch 'feature-custom-fields-filter' of https://github.com/feuerball11/wekan into feuerball11-feature-custom-fields-filter 2018-05-19 17:39:05 +03:00
IgnatzHome 977bce9eb2 correcting 'no custom fields' 2018-05-19 16:23:18 +02:00
IgnatzHome bc0aef3332 More Filter Corrections (Custom Fields) 2018-05-19 16:06:06 +02:00
Lauri Ojansivu 8101d7ade8 MongoDB v3.2.20 2018-05-19 17:05:28 +03:00
IgnatzHome f6d19d2833 Filter Sidebar Corrections 2018-05-19 15:40:51 +02:00
IgnatzHome c431af27c2 Correcting FIlter search with Multiple Custom Fields 2018-05-19 15:35:25 +02:00
IgnatzHome 973a0d93ae reverting .eslintrc (i always forget to dont commit this) 2018-05-19 15:21:48 +02:00
IgnatzHome cbdb7b4f64 Correcting constructed mongoSelector 2018-05-19 15:21:12 +02:00
Lauri Ojansivu 9c5bcd7321 Merge branch 'devel' 2018-05-19 16:10:30 +03:00
Lauri Ojansivu 8f0c3b45c0 Fix date. 2018-05-19 16:10:12 +03:00
IgnatzHome 78317ef792 Filter on custom fields presence 2018-05-19 14:51:01 +02:00
IgnatzHome 1ab4f5b913 Merge remote-tracking branch 'original/devel' into feature-custom-fields-filter 2018-05-19 14:18:40 +02:00
Lauri Ojansivu 04f09b6042 Merge branch 'devel' 2018-05-19 14:21:30 +03:00
Lauri Ojansivu f48e2fbd14 v0.97 2018-05-19 14:20:08 +03:00
Lauri Ojansivu 27f9e9e104 Update translations. 2018-05-19 14:18:20 +03:00
Lauri Ojansivu 9a509778d3 Merge branch 'devel' 2018-05-19 14:10:53 +03:00
Lauri Ojansivu 12b08b9915 v0.96 2018-05-19 14:09:33 +03:00
Lauri Ojansivu bd8a8ab90e Update translations. 2018-05-19 14:01:16 +03:00
Lauri Ojansivu 642507fb42 Merge branch 'feature-custom-fields' of https://github.com/feuerball11/wekan into devel 2018-05-19 13:06:06 +03:00
IgnatzHome 4600e4e237 Migration Test 2018-05-19 08:58:30 +02:00
Lauri Ojansivu c2e6f67689 Update translations. 2018-05-18 22:49:35 +03:00
Lauri Ojansivu 9dec10bad3 Add CLA back 2018-05-18 18:57:42 +03:00
Ignatz 3e390503fc first test for custom fields filter 2018-05-18 16:41:03 +02:00
Lauri Ojansivu a7f8614f04 Fix: checklistItems broken after upgrade.
Thanks to feuerball11 !

Closes #1636
2018-05-18 16:29:18 +03:00
Lauri Ojansivu 0be7a5d783 Merge branch 'franksiler-migration-checklistitems-fix' into devel 2018-05-18 16:26:44 +03:00
Lauri Ojansivu 41b938ea69 Merge branch 'migration-checklistitems-fix' of https://github.com/franksiler/wekan into franksiler-migration-checklistitems-fix 2018-05-18 16:25:42 +03:00
Lauri Ojansivu 12a374bec7 Changed place of greenkeeper badge. 2018-05-18 16:24:26 +03:00
Lauri Ojansivu 8dd1566316 Merge branch 'greenkeeper/initial' into devel 2018-05-18 16:23:53 +03:00
Lauri Ojansivu 50f751e0a9 Merge branch 'devel' into greenkeeper/initial 2018-05-18 16:22:53 +03:00
Lauri Ojansivu 1984a6b1c8 Merge branch 'feuerball11-feature-custom-fields' into devel 2018-05-18 16:19:48 +03:00
Lauri Ojansivu 1d904adc61 - Add: Custom Fields.
Thanks to feuerball11, papoola and xet7 !

Closes #807
2018-05-18 16:15:49 +03:00
Lauri Ojansivu 22882a0603 Update translations. 2018-05-18 16:11:32 +03:00
Lauri Ojansivu 9b465bc98b Fix lint errors back to eslint requirements. 2018-05-18 15:20:20 +03:00
Ignatz ef99e6a6b1 indend corrections 2018-05-18 11:13:01 +02:00
greenkeeper[bot] 61b240d126 docs(readme): add Greenkeeper badge 2018-05-18 09:09:23 +00:00
greenkeeper[bot] 1f3b5604c0 chore(package): update dependencies 2018-05-18 09:09:21 +00:00
Ignatz 3bf4f3ef40 Line Endings back to Unix (Was Temporarly on Windows) 2018-05-18 11:03:04 +02:00
Ignatz 838578657d template literals correction 2018-05-18 10:43:43 +02:00
Ignatz d6cfac0122 linter corrections 2018-05-18 10:24:51 +02:00
Ignatz c1d2e27c09 correcting missing loca 2018-05-18 10:02:32 +02:00
IgnatzHome b43779e408 That should do it 2018-05-17 22:15:35 +02:00
IgnatzHome f9df38d333 Style Changes 2018-05-17 22:14:41 +02:00
IgnatzHome 80088174fc More style corrections 2018-05-17 22:08:17 +02:00
IgnatzHome 0dfc62c025 Removing Doupling start / end and more style corrections 2018-05-17 21:57:54 +02:00
IgnatzHome 7186b947b2 correcting style errors 2018-05-17 21:49:14 +02:00
IgnatzHome 98df01060d removing checkbox types part 2 2018-05-17 21:17:40 +02:00
IgnatzHome 9184bf3946 removing checkbox type 2018-05-17 21:06:52 +02:00
IgnatzHome 9518a5c11e resolving merge conflicts 2018-05-17 20:21:07 +02:00
Frank Siler 9a766c0f74 ensure checklistItem titles are correct when migrating 2018-05-16 19:40:27 -05:00
Lauri Ojansivu c0c7b269a7 Update translations. 2018-05-16 12:58:31 +03:00
Lauri Ojansivu 5dafea405d Merge branch 'devel' 2018-05-10 09:53:08 +03:00
Lauri Ojansivu 77a5f8f339 Update dependencies. 2018-05-10 09:52:43 +03:00
Lauri Ojansivu be97efb791 Merge branch 'devel' 2018-05-10 02:33:01 +03:00
Lauri Ojansivu 7e34dd0c2b Update translations. 2018-05-10 02:31:22 +03:00
Lauri Ojansivu 0ecbb73419 Merge branch 'devel' 2018-05-08 11:14:26 +03:00
Lauri Ojansivu f3aa524b77 v0.95 2018-05-08 11:13:35 +03:00
Lauri Ojansivu 792f187d06 Update translation (de). 2018-05-08 10:57:31 +03:00
Lauri Ojansivu 4c18df757f Update translations. 2018-05-08 10:54:24 +03:00
Lauri Ojansivu 9d47d3e397 Admin Panel: Option to block username change.
Thanks to thiagofernando !
2018-05-08 01:33:52 +03:00
Lauri Ojansivu 0b9328a1be Merge pull request #1627 from thiagofernando/devel
Includes possibility to block username change
2018-05-08 01:31:01 +03:00
Lauri Ojansivu fc033c30e6 Add a new API route to create a new label in a given board.
Thanks to ThisNeko !
2018-05-08 01:29:10 +03:00
Lauri Ojansivu da180472c1 Merge pull request #1630 from ThisNeko/devel
Add a new API route to create a new label in a given board
2018-05-08 01:27:09 +03:00
Lauri Ojansivu cdc2b920ee Fix error: title is required.
Thanks to Shahar-Y !

Related https://github.com/wekan/wekan/commit/8d5cbf1e6c2b6d467fe1c0708cd794fd11b98a2e#commitcomment-28880774

Closes #1576
2018-05-08 01:24:24 +03:00
Lauri Ojansivu 16d75f549d Fix error: title is required.
Related https://github.com/wekan/wekan/commit/8d5cbf1e6c2b6d467fe1c0708cd794fd11b98a2e

Closes #1576
2018-05-08 01:20:56 +03:00
Thiago Fernando S. dos Santos c43508cacb send settingBody.jade 2018-05-07 13:57:23 -03:00
NET\faguet 6b2d022a93 correction 2018-05-07 14:27:07 +02:00
NET\faguet 1cb8a6e7fe Add a new API route to create a new label in a given board 2018-05-07 13:32:33 +02:00
Lauri Ojansivu 5e109de8d5 Fix link. 2018-05-06 18:21:21 +03:00
Lauri Ojansivu c4b5145db4 Fix link. 2018-05-06 18:12:51 +03:00
Lauri Ojansivu e5638e5e5a Fix link 2018-05-06 18:07:56 +03:00
Lauri Ojansivu 7e49ab5fea Tried to fix, but it did not work yet. 2018-05-06 18:00:36 +03:00
Lauri Ojansivu 682eab74d9 Fix lint error.
Related https://github.com/wekan/wekan/pull/1626
2018-05-05 00:30:34 +03:00
Lauri Ojansivu 9edbc349b9 - REST API Edit Card Labels.
Thanks to ThisNeko !
2018-05-04 23:57:40 +03:00
Thiago Fernando S. dos Santos c751f05962 revert translations files 2018-05-04 17:35:37 -03:00
Thiago Fernando S. dos Santos 2fa1b3122d Includes possibility to block username change 2018-05-04 16:44:50 -03:00
Lauri Ojansivu c48c18c4e9 Merge pull request #1626 from ThisNeko/devel
API Edit Card Labels
2018-05-04 15:50:00 +03:00
thisNeko 2da157dbb0 API Edit Card Labels 2018-05-04 14:32:36 +02:00
Lauri Ojansivu daeb06f7b7 Merge branch 'devel' 2018-05-03 09:27:29 +03:00
Lauri Ojansivu dcd5af0a76 v0.94 2018-05-03 09:26:09 +03:00
Lauri Ojansivu e576e0f9cf Merge pull request #1622 from couscous3/patch-2
POST /cards: allow setting card members
2018-05-03 09:20:01 +03:00
couscous3 83e7e4fb27 POST /cards: allow setting card members
if members isn't specified then the authorId will be the only member of the card, otherwise the provided members attribute will be used
2018-05-03 00:35:47 +02:00
Lauri Ojansivu 01804daf24 Merge branch 'devel' 2018-05-02 18:19:19 +03:00
Lauri Ojansivu d77e54fff6 v0.93 2018-05-02 18:18:16 +03:00
Lauri Ojansivu 0aa78d9847 Merge branch 'lichtamberg-devel' into devel 2018-05-02 17:18:22 +03:00
Lauri Ojansivu e5c1351e82 - Checklist items lineheight to 18px, and positioning improvements.
Thanks to lichtamberg !
2018-05-02 17:16:56 +03:00
Peter L f6656a4791 Changed px to em and added margin for add-checklist-item link 2018-05-02 15:32:53 +02:00
Peter L d2354827da Move checkbox down, so it aligns at the same height like the text 2018-05-02 15:20:54 +02:00
Peter Lampesberger 814164e53e Change checklist-item line-height to 18px. Fixes #1619 2018-05-02 14:43:47 +02:00
Lauri Ojansivu bde9cc7cea Merge branch 'devel' 2018-05-01 23:07:53 +03:00
Lauri Ojansivu 7b0cf760e9 Better text formatting. 2018-05-01 23:07:27 +03:00
Lauri Ojansivu 6a16063f7d Merge branch 'devel' 2018-05-01 20:53:02 +03:00
Lauri Ojansivu 130aa1161e v0.92 2018-05-01 20:50:21 +03:00
Lauri Ojansivu eaebe8b893 Try to fix: Users who register with an invitation code can't see lists/cards.
Please test.

Thanks to andresmanelli !

Related #1610
2018-05-01 20:03:16 +03:00
Lauri Ojansivu c4b898633e Try to fix: Users who register with an invitation code can't see lists/cards.
Please test.

Thanks to andresmanelli !

Related #1610
2018-05-01 20:00:50 +03:00
Lauri Ojansivu 88fca396d4 Merge branch 'devel' 2018-05-01 13:08:35 +03:00
Lauri Ojansivu cfa3c4bfcb v0.91 2018-05-01 13:07:45 +03:00
Lauri Ojansivu bf7520c430 Merge branch 'zebby76-devel' into devel 2018-05-01 13:06:15 +03:00
Lauri Ojansivu 166324df01 - Fix Wekan Import / Export lists not being sortable.
Thanks to zebby76 !
2018-05-01 13:05:17 +03:00
zebby76 539c1ab87a Define sort property on swimlanes and lists 2018-05-01 07:55:41 +02:00
Lauri Ojansivu e5cb190693 Merge branch 'devel' 2018-05-01 00:12:21 +03:00
Lauri Ojansivu 359d0b376f v0.90 2018-05-01 00:10:59 +03:00
Lauri Ojansivu a6cf57e988 - Remove space from between checklist items, so longer checklists can be seen at once.
Thanks to xet7 !
2018-05-01 00:07:16 +03:00
Lauri Ojansivu 1124f4120c - Remove space from between checklist items, so longer checklists can be seen at once.
Thanks to xet7 !
2018-05-01 00:05:09 +03:00
Lauri Ojansivu 6ee6dbade5 Merge branch 'devel' 2018-04-30 18:45:14 +03:00
Lauri Ojansivu f219e2151f Text to lowercase. 2018-04-30 16:45:15 +03:00
Lauri Ojansivu c5b7f30d65 Shorter text. 2018-04-30 16:43:26 +03:00
Lauri Ojansivu e3f1fbc967 Fix links. 2018-04-30 16:37:49 +03:00
Lauri Ojansivu e6df7d81cf Update readme layout. 2018-04-30 16:29:08 +03:00
Lauri Ojansivu 24ad97cddb Add badges. 2018-04-30 16:26:18 +03:00
Lauri Ojansivu b70252468a Merge branch 'devel' 2018-04-29 11:47:17 +03:00
Lauri Ojansivu f9941c0f9c v0.89 2018-04-29 11:46:23 +03:00
Lauri Ojansivu 26c8505d9e Merge branch 'devel' 2018-04-29 10:48:35 +03:00
Lauri Ojansivu e7e558e865 Merge branch 'zebby76-devel' into devel 2018-04-29 09:19:44 +03:00
Lauri Ojansivu 6167d447fd - Fix Wekan import / Export for ChecklistItems.
Thanks to zebby76 !
2018-04-29 09:11:23 +03:00
Sebastian Molle 30b17ff6c9 Fix Wekan import / Export for ChecklistItems 2018-04-28 22:17:56 +02:00
Lauri Ojansivu df91d1e632 Merge branch 'devel' 2018-04-27 18:14:36 +03:00
Lauri Ojansivu 1f42aac19f v0.88 2018-04-27 18:10:24 +03:00
Lauri Ojansivu 212440862b Fix lint errors of
https://github.com/wekan/wekan/pull/1611

Thanks to xet7 !
2018-04-27 17:49:14 +03:00
Lauri Ojansivu 21e68f3e54 Merge branch 'zebby76-devel' into devel 2018-04-27 17:00:56 +03:00
Lauri Ojansivu 116bc38136 - Fix Trello import of ChecklistItems.
Thanks to zebby76 !
2018-04-27 16:59:54 +03:00
ZeBBy e721dba1e2 Fix Trello importation for ChecklistItems 2018-04-27 15:29:31 +02:00
Lauri Ojansivu 3b6ec34bf5 Try to fix snap build 2018-04-27 15:09:57 +03:00
Lauri Ojansivu be61904a1e Merge branch 'devel' 2018-04-27 14:03:49 +03:00
Lauri Ojansivu 170acf6948 v0.87 2018-04-27 14:02:25 +03:00
Lauri Ojansivu d69f8f4cda Fix: Copy Card, Move Card and Copy Checklist Template to Many Cards - No longer works in menu in Sandstorm.
Thanks to xet7 !

Closes #1607
2018-04-27 14:00:05 +03:00
Lauri Ojansivu db80e73804 Fix: Copy Card, Move Card and Copy Checklist Template to Many Cards - No longer works in menu in Sandstorm.
Thanks to xet7 !

Closes #1607
2018-04-27 13:57:28 +03:00
Lauri Ojansivu 25668eb7c4 Try to fix snap 2018-04-27 13:23:09 +03:00
Lauri Ojansivu 11177196e3 Update translations. 2018-04-27 12:50:32 +03:00
Lauri Ojansivu 6d21ffe660 Try to fix snap. 2018-04-27 12:42:33 +03:00
Lauri Ojansivu ce79645455 Removed not-used plugins part of Caddy download URL.
Thanks to xet7 !
2018-04-20 18:42:35 +03:00
Lauri Ojansivu 7b91b341fe Removed not-used plugins part of Caddy download URL.
Thanks to xet7 !
2018-04-20 18:40:20 +03:00
Lauri Ojansivu 6856f4d95f Use override-build instead of old deprecated prepare/build/install.
https://github.com/canonical-docs/snappy-docs/blob/master/deprecation-notices/dn7.md

Thanks to kyrofa !

Closes wekan/wekan-snap#45
2018-04-20 18:39:29 +03:00
Lauri Ojansivu 075ea1c43d Use override-build instead of old deprecated prepare/build/install.
https://github.com/canonical-docs/snappy-docs/blob/master/deprecation-notices/dn7.md

Thanks to kyrofa !

Closes wekan/wekan-snap#45
2018-04-20 18:30:48 +03:00
Lauri Ojansivu b7247f8d52 Merge branch 'devel' 2018-04-20 15:37:24 +03:00
Lauri Ojansivu 87d2cee02a v0.86 2018-04-20 15:35:51 +03:00
Lauri Ojansivu fa758a73bd Update translations. 2018-04-20 15:26:51 +03:00
Lauri Ojansivu 4191ede176 Merge branch 'devel' 2018-04-18 19:16:00 +03:00
Lauri Ojansivu ded98d73d7 Merge branch 'devel' of github.com:wekan/wekan into devel 2018-04-18 19:15:05 +03:00
Lauri Ojansivu bbfacc06e3 v0.85
And:
- Use curl to download 100% CPU fibers fixed node in snap
- Remove paxctl from snap package

Thanks to xet7 !
2018-04-18 19:14:05 +03:00
Lauri Ojansivu e45b8ea48c - Use curl to download 100% CPU fibers fixed node in snap
- Remove paxctl from snap package

Thanks to xet7 !
2018-04-18 19:08:28 +03:00
Lauri Ojansivu 179ff7a124 Use curl to download 100% CPU usage fibers fixed node in snap. 2018-04-18 19:04:08 +03:00
Lauri Ojansivu fc4d7a0bde Merge branch 'devel' 2018-04-18 18:28:23 +03:00
Lauri Ojansivu 5415a7c4b9 Fix typo. 2018-04-18 18:28:06 +03:00
Lauri Ojansivu 84fd00c566 Merge branch 'devel' 2018-04-18 18:25:34 +03:00
Lauri Ojansivu f41589ba82 - Removed paxctl alpine fix #1303 , because it did not work anymore, so Docker container
and Snap did not build correctly.

Thanks to xet7 !

Closes #1594
2018-04-18 18:24:20 +03:00
Lauri Ojansivu ce65963217 Removed paxctl alpine fix #1303 , because it did not work anymore.
Thanks to xet7 !

Closes #1594
2018-04-18 18:19:22 +03:00
Lauri Ojansivu 1e0fcfd20d - Fix checklists items migration error "title is required"
Thanks to xet7 !

Closes #1576
2018-04-18 17:28:24 +03:00
Lauri Ojansivu 8d5cbf1e6c - Fix checklists items migration error "title is required"
Thanks to xet7 !

Closes #1576
2018-04-18 17:27:15 +03:00
Lauri Ojansivu 7cc930f6b9 Fix lint error in Fibers size setting 2018-04-18 16:03:49 +03:00
Lauri Ojansivu e9bb7e0041 Fix Wekan logo positioning.
Thanks to iwkse and xet7 !

Closes #1583, closes #1378
2018-04-17 21:36:15 +03:00
Lauri Ojansivu 61538ab577 Try to fix Dockerfile. 2018-04-16 22:39:52 +03:00
Lauri Ojansivu bca4f0b842 Try to fix Dockerfile 2018-04-16 22:30:48 +03:00
Lauri Ojansivu 0723a204e8 Try to fix Dockerfile 2018-04-16 22:03:51 +03:00
Lauri Ojansivu 2cd1fbf9d9 Merge branch 'andresmanelli-viewProfile' into devel 2018-04-16 21:51:10 +03:00
Lauri Ojansivu 29c3d939a7 Fix Switch List/swimlane view only working with admin privileges.
Thanks to andresmanelli !

Closes #1567
2018-04-16 21:49:23 +03:00
Lauri Ojansivu 02e8749540 Merge branch 'viewProfile' of https://github.com/andresmanelli/wekan into andresmanelli-viewProfile 2018-04-16 21:35:07 +03:00
Lauri Ojansivu e402200b87 Merge branch 'devel' 2018-04-16 21:27:24 +03:00
Lauri Ojansivu ea289c7810 v0.84 2018-04-16 21:25:54 +03:00
Lauri Ojansivu f3058133b3 Fix Node Fibers 100% CPU issue.
Thanks to kentonv !
2018-04-16 21:22:33 +03:00
Lauri Ojansivu e26a4824cf Fix Node Fibers 100% CPU issue.
Thanks to kentonv !

Related wekan/wekan-mongodb#2, related meteor/meteor#9796
2018-04-16 21:18:09 +03:00
Andrés Manelli e5995477b8 Fix #1567 2018-04-16 14:43:10 -03:00
Lauri Ojansivu c12e003fd3 Update changelog with changes from andresmanelli. 2018-04-16 19:55:03 +03:00
Lauri Ojansivu 8e11d278d3 Update translations. 2018-04-16 19:42:48 +03:00
Andrés Manelli de13705289 Fix lint errors 2018-04-16 00:25:54 -03:00
Andrés Manelli 09bc8ac44c Fix #1561 Filter checklist items 2018-04-16 00:19:03 -03:00
Andrés Manelli eae4bb2d37 Fix #1565 2018-04-16 00:19:03 -03:00
Andrés Manelli 31584e849c Fix #1570, now zero means hide cards count 2018-04-16 00:19:03 -03:00
Andrés Manelli b735817901 Fix #1577 2018-04-16 00:19:03 -03:00
Andrés Manelli 4dbe6feb8c Fix lint errors 2018-04-16 00:19:03 -03:00
Andrés Manelli 9eef5112dc Add REST API for Checklist Items (Related to #1562) 2018-04-16 00:18:55 -03:00
Andrés Manelli 4861da52a0 Fix checklists REST API (#1562) 2018-04-16 00:18:44 -03:00
Lauri Ojansivu aede4dd9c5 Merge branch 'devel' 2018-04-12 20:46:19 +03:00
Lauri Ojansivu 4505e6edc9 v0.83 2018-04-12 20:44:09 +03:00
Lauri Ojansivu 85e86136e9 Update translations. 2018-04-12 20:39:35 +03:00
Lauri Ojansivu 9b961edb36 Merge branch 'devel' 2018-04-11 15:09:27 +03:00
Lauri Ojansivu 82fc4d011f v0.82 2018-04-11 15:08:56 +03:00
Lauri Ojansivu bfe03ac89f - Restore original font and font sizes.
- Admin panel people and version texts to darker.

Thanks to apn3a and xet7 !

Closes #1582
2018-04-11 15:06:04 +03:00
Lauri Ojansivu db74c86e55 Restore original font and font sizes.
Admin panel people and version texts to darker.
2018-04-11 14:59:58 +03:00
Lauri Ojansivu b7ee0173ec Merge branch 'devel' 2018-04-10 22:21:38 +03:00
Lauri Ojansivu ce177117a0 v0.81 2018-04-10 22:19:51 +03:00
Lauri Ojansivu b05f3595f0 Update translations. 2018-04-10 22:17:00 +03:00
Allemand Sylvain 3e927b4e58 merge oidc and local account if exists 2018-04-10 11:44:54 +02:00
Allemand Sylvain 1c8a00943c authentification oauth2 2018-04-09 16:49:07 +02:00
Lauri Ojansivu f00797de5c Merge branch 'devel' 2018-04-06 17:46:42 +03:00
Lauri Ojansivu c115046a7c Update translations. 2018-04-06 17:46:23 +03:00
Lauri Ojansivu 8051f6affa Board title as markdown in board view.
Thanks to xet7 !
2018-04-06 00:14:01 +03:00
Lauri Ojansivu 973b416885 Board title as markdown in board view.
Thanks to xet7 !
2018-04-06 00:11:15 +03:00
Lauri Ojansivu b501d35b55 Merge branch 'devel' 2018-04-05 22:14:20 +03:00
Lauri Ojansivu 8fc4011bf8 Use lighter and smaller font sizes.
Thanks to xet7 !
2018-04-05 22:13:51 +03:00
Lauri Ojansivu 7b94b04701 Use lighter and smaller font sizes.
Thanks to xet7 !
2018-04-05 22:10:51 +03:00
Lauri Ojansivu 217ae207b9 Fix commit URL. 2018-04-05 16:27:53 +03:00
Lauri Ojansivu 4f1eaa6b82 - Renamed Archives to Recycle Bin
Thanks to BruceZCQ and xet7 !

Closes #1429
2018-04-05 16:25:08 +03:00
Lauri Ojansivu 49c7a6c223 Separate translations for cards in Recycle Bin and cards count. 2018-04-05 16:19:22 +03:00
Lauri Ojansivu 0e883675fc Merge branch 'devel' 2018-04-05 12:58:51 +03:00
Lauri Ojansivu 5a6be37d52 - Removed checkbox from checklist name to have more of material design look.
Thanks to quantazelle and xet7 !

Related #1568
2018-04-05 12:56:03 +03:00
Lauri Ojansivu c295e47f76 Merge branch 'devel' 2018-04-05 12:01:59 +03:00
Lauri Ojansivu 9711945e48 - Removed forcing "cards" translations to lowercase in count of cards.
- Finnish translation of cards to lowercase.

Thanks to Chartman123 and xet7 !

Closes #1571
2018-04-05 12:00:12 +03:00
Lauri Ojansivu fb87e4b1f2 Merge branch 'devel' 2018-04-04 23:27:49 +03:00
Lauri Ojansivu a320a71467 v0.80 2018-04-04 23:26:25 +03:00
Lauri Ojansivu bda6ee26d7 Added meteor packages for security:
- browser-policy
- eluck:accounts-lockout

Thanks to xet7 !
2018-04-04 23:20:19 +03:00
Lauri Ojansivu 40d438a517 Added meteor packages for security:
- browser-policy
- eluck:accounts-lockout

Thanks to xet7 !
2018-04-04 23:18:06 +03:00
Lauri Ojansivu 5d2dd66450 - Changed icon of checklist name to unchecked
Thanks to quantazelle ! Related #1568
2018-04-04 21:49:33 +03:00
Lauri Ojansivu f9539aa2a8 Changed icon of checklist name. Related #1568 2018-04-04 21:44:53 +03:00
Lauri Ojansivu 66e56849a4 Merge branch 'devel' 2018-04-04 17:36:38 +03:00
Lauri Ojansivu 75512043e8 Try to fix travis 2018-04-04 17:36:19 +03:00
Lauri Ojansivu 3631cd5026 Merge branch 'devel' 2018-04-04 17:34:17 +03:00
Lauri Ojansivu 09c59ff562 Update translations. 2018-04-04 17:33:54 +03:00
Lauri Ojansivu e3d1fbc7f4 Update all from wekan-mongodb to main wekan repo docker-compose.yml file 2018-04-04 14:22:59 +03:00
Lauri Ojansivu 05f1d197f5 Remove warnings about Docker. MongoDB to 3.2.19. 2018-04-04 13:42:45 +03:00
Lauri Ojansivu 485ccf4007 Merge branch 'devel' 2018-04-03 19:39:28 +03:00
Lauri Ojansivu fe79a3e763 Update translations. 2018-04-03 19:39:08 +03:00
Lauri Ojansivu 30a4494af2 Merge branch 'devel' 2018-03-31 21:22:33 +03:00
Lauri Ojansivu add5d22c4e v0.79 2018-03-31 21:20:46 +03:00
Lauri Ojansivu 08af6a0cf1 Update translations. 2018-03-31 20:41:11 +03:00
Lauri Ojansivu 38a8d82735 Fix lint errors. 2018-03-31 20:29:17 +03:00
Lauri Ojansivu 42a4ca3678 Merge branch 'andresmanelli-fixDragInListsView' into devel 2018-03-31 20:04:47 +03:00
Lauri Ojansivu 66c20df5ba - Fix drag in lists view
- Set fixed width for swimlane header

Thanks to andresmanelli !

Closes #1553, closes #1546
2018-03-31 20:02:16 +03:00
Lauri Ojansivu 4505495762 Merge branch 'fixDragInListsView' of https://github.com/andresmanelli/wekan into andresmanelli-fixDragInListsView 2018-03-31 19:38:33 +03:00
Andrés Manelli 679e50af64 Fix drag in lists view 2018-03-31 13:19:14 -03:00
Andrés Manelli 2e8f8924dd Set fixed width for swimlane header 2018-03-31 13:11:22 -03:00
Lauri Ojansivu 568a1a11fd Merge branch 'devel' 2018-03-29 15:04:27 +03:00
Lauri Ojansivu 5e88cb24cb Merge branch 'rjevnikar-additionalDates' into devel 2018-03-29 15:03:59 +03:00
Lauri Ojansivu 023b41b205 - Add Received Date and End Date. Between them is already existing Start and Due Date.
Thanks to rjevnikar !
2018-03-29 15:02:24 +03:00
Lauri Ojansivu cca4a3e372 Merge branch 'additionalDates' of https://github.com/rjevnikar/wekan into rjevnikar-additionalDates 2018-03-29 14:54:46 +03:00
Lauri Ojansivu caca2e34fc Update translations. 2018-03-29 12:31:37 +03:00
RJevnikar 07217d0e51 Add additional dates (received & end), default title of checklists to 'Checklist'
Remove translations

Add additional dates (received & end), default name checklists to Checklist
2018-03-26 20:51:24 +00:00
Lauri Ojansivu 75b3d51b39 Merge branch 'devel' 2018-03-21 13:48:31 +02:00
Lauri Ojansivu 80941e57d3 Update translations. 2018-03-21 13:48:10 +02:00
Lauri Ojansivu 3d0bac1f49 Merge branch 'devel' 2018-03-21 12:44:19 +02:00
Lauri Ojansivu 10f24a8a8a Use personal license for non-commercial use only for Caddy.
Related wekan/wekan-snap#39
2018-03-21 12:41:29 +02:00
Lauri Ojansivu 578bdf9e67 Merge branch 'devel' 2018-03-20 22:58:59 +02:00
Lauri Ojansivu a7855f3f58 Merge branch 'andresmanelli-checklistItems' into devel 2018-03-20 22:58:22 +02:00
Lauri Ojansivu ac19904ee8 Checklist items sort fix, and checklist sort capability.
Thanks to andresmanelli !

Closes #876, closes #1483, closes #1237
2018-03-20 22:57:52 +02:00
Lauri Ojansivu ec1630f8dd Merge branch 'checklistItems' of https://github.com/andresmanelli/wekan into andresmanelli-checklistItems 2018-03-20 22:13:18 +02:00
Lauri Ojansivu a7f88d24a1 Merge branch 'devel' 2018-03-20 21:32:21 +02:00
Lauri Ojansivu 90f3f7ba16 Added note about no new issues about Docker. 2018-03-20 21:31:24 +02:00
Andrés Manelli 5e5a5ed9be Fix class name change when clicking check box 2018-03-19 18:49:00 -03:00
Andrés Manelli 3eb6f97291 Fix lint errors 2018-03-19 17:31:53 -03:00
Andrés Manelli 06e64d24a8 Add styling 2018-03-19 17:19:46 -03:00
Andrés Manelli 243af32fc7 Add checklist ordering capability 2018-03-19 16:47:07 -03:00
Andrés Manelli ca89442f3a Clean checklists model 2018-03-19 15:31:38 -03:00
Andrés Manelli 153960742c Fix migration. Replace old checklist-item sort algorithm. 2018-03-19 15:03:44 -03:00
Andrés Manelli bf7de463f1 Add checklist items model, migration and publication 2018-03-19 01:25:33 -03:00
Lauri Ojansivu fa0fd5f21f Merge branch 'devel' 2018-03-17 09:36:51 +02:00
Lauri Ojansivu dfc5537107 Merge branch 'devel' 2018-03-13 02:02:21 +02:00
Lauri Ojansivu 5b98f139d1 Merge branch 'devel' 2018-03-07 21:19:50 +02:00
Lauri Ojansivu 862239019a Merge branch 'devel' 2018-03-07 15:35:09 +02:00
Lauri Ojansivu 983649a6cb Merge branch 'devel' 2018-03-07 09:05:31 +02:00
Lauri Ojansivu 660b578ab3 Merge branch 'devel' 2018-03-07 08:17:16 +02:00
Lauri Ojansivu 594daa9cf8 Merge branch 'devel' 2018-03-05 23:05:47 +02:00
Lauri Ojansivu ebb48f3ee8 Merge branch 'devel' 2018-03-05 22:44:36 +02:00
Lauri Ojansivu 4a2b30d08b Merge branch 'devel' 2018-03-03 17:47:10 +02:00
Lauri Ojansivu 0cee496270 Merge branch 'devel' 2018-03-02 12:48:01 +02:00
Lauri Ojansivu 2c1dadf712 Merge branch 'devel' 2018-03-01 14:38:33 +02:00
Lauri Ojansivu 6fc89a04de Merge branch 'devel' 2018-03-01 13:01:23 +02:00
Lauri Ojansivu 4994f66e9c Merge branch 'devel' 2018-03-01 01:02:46 +02:00
Lauri Ojansivu 91bab1c274 Merge branch 'devel' 2018-02-28 16:44:58 +02:00
Lauri Ojansivu daf1a67dc2 Merge branch 'devel' 2018-02-28 16:35:56 +02:00
Lauri Ojansivu e44c46bcd2 Merge branch 'devel' 2018-02-27 08:43:24 +02:00
Lauri Ojansivu 57cf86a79f Merge branch 'devel' 2018-02-23 21:01:44 +02:00
Lauri Ojansivu 1ef663531b Merge branch 'devel' 2018-02-21 21:05:43 +02:00
Lauri Ojansivu becdcbd5a7 Merge branch 'devel' 2018-02-16 00:23:35 +02:00
Lauri Ojansivu d3bdc8edbc Merge branch 'devel' 2018-02-13 00:19:15 +02:00
Lauri Ojansivu ffc825e348 Merge branch 'devel' 2018-02-13 00:07:44 +02:00
Lauri Ojansivu 9db64a95b6 Merge branch 'devel' 2018-02-08 13:46:22 +02:00
Lauri Ojansivu c5a707a7f5 Merge branch 'devel' 2018-02-07 15:37:53 +02:00
Lauri Ojansivu b2d3138220 Merge branch 'devel' 2018-02-03 12:57:15 +02:00
Lauri Ojansivu 405514fd6b Merge branch 'devel' 2018-02-02 14:37:19 +02:00
Lauri Ojansivu efa2d99bf4 Merge branch 'devel' 2018-02-01 16:49:06 +02:00
Lauri Ojansivu 8d816cdb0f Merge branch 'devel' 2018-01-30 15:05:18 +02:00
Lauri Ojansivu 918bd0befd Merge branch 'devel' 2018-01-30 14:17:03 +02:00
Lauri Ojansivu bf2a08555b Merge branch 'devel' 2018-01-28 21:22:43 +02:00
Lauri Ojansivu cf97123512 Merge branch 'devel' 2018-01-28 18:27:57 +02:00
Lauri Ojansivu 6aca70f0d1 Merge branch 'devel' 2018-01-28 00:02:35 +02:00
Lauri Ojansivu 963e319345 Merge branch 'devel' 2017-12-20 15:20:31 +02:00
Lauri Ojansivu b21021501c Merge branch 'devel' 2017-12-19 21:38:34 +02:00
Lauri Ojansivu 638e2d87eb Merge branch 'devel' 2017-12-13 14:28:54 +02:00
Lauri Ojansivu d94393c764 Merge branch 'devel' 2017-12-13 13:49:36 +02:00
Lauri Ojansivu faa95a0f8c Merge branch 'devel' 2017-12-12 15:37:16 +02:00
Lauri Ojansivu 047e22571e Merge branch 'devel' 2017-12-12 14:32:37 +02:00
Lauri Ojansivu ed95542b67 Merge branch 'devel' 2017-11-29 14:19:49 +02:00
Lauri Ojansivu 9c283112ed Merge branch 'devel' 2017-11-23 17:48:13 +02:00
Lauri Ojansivu fbfe6590b7 Merge branch 'devel' 2017-11-23 12:12:31 +02:00
Lauri Ojansivu 2824873511 Merge branch 'devel' 2017-11-23 11:46:47 +02:00
Lauri Ojansivu dc9ac5b58a Merge branch 'devel' 2017-11-21 12:42:08 +02:00
Lauri Ojansivu ee69eb03d4 Merge branch 'devel'
Conflicts:
	sandstorm-pkgdef.capnp
2017-11-19 19:03:36 +02:00
Lauri Ojansivu c040603786 Merge branch 'devel'
Conflicts:
	CHANGELOG.md
	package.json
	sandstorm-pkgdef.capnp
2017-11-02 02:17:16 +02:00
Lauri Ojansivu 275bb0b131 v0.53 2017-11-02 01:34:27 +02:00
Pouyan Savoli 8b16955cc2 number + date fields 2017-10-14 01:38:25 +02:00
Pouyan Savoli 3753337d60 dropdown items 2017-09-22 22:59:32 +02:00
Pouyan Savoli caad952bc1 text custom fields are now editable using inlinedForm 2017-09-22 22:59:32 +02:00
Pouyan Savoli 6ff89b43b6 show custom fields on cards but still with dummy value 2017-09-22 22:59:32 +02:00
Pouyan Savoli 733b14dcd8 card model and card ui preparation for custom fields #2 2017-09-22 22:59:32 +02:00
Pouyan Savoli d87191f17e card model and card ui preparation for custom fields 2017-09-22 22:59:32 +02:00
Pouyan Savoli afd87e3caa many custom fields model and UI enhancements 2017-09-22 22:59:32 +02:00
Pouyan Savoli ade3c02122 Create custom fields creation UI added to Board Menu, Model in progress 2017-09-22 22:59:32 +02:00
167 changed files with 12715 additions and 2734 deletions

No files matched your search

+6 -1
View File
@@ -100,7 +100,9 @@
"Attachments": true,
"Boards": true,
"CardComments": true,
"DatePicker" : true,
"Cards": true,
"CustomFields": true,
"Lists": true,
"UnsavedEditCollection": true,
"Users": true,
@@ -119,7 +121,8 @@
"allowIsBoardAdmin": true,
"allowIsBoardMember": true,
"allowIsBoardMemberByCard": true,
"allowIsBoardMemberNonComment": true,
"allowIsBoardMemberCommentOnly": true,
"allowIsBoardMemberNoComments": true,
"Emoji": true,
"Checklists": true,
"Settings": true,
@@ -131,6 +134,8 @@
"AccountSettings": true,
"Announcements": true,
"Swimlanes": true,
"ChecklistItems": true,
"Subtasks": true,
"Npm": true
}
}
+9 -7
View File
@@ -1,16 +1,18 @@
## Issue
**Impacted version**: xxxx
**Server Setup Information**:
* Did you test in newest Wekan?:
* Wekan version:
* If this is about old version of Wekan, what upgrade problem you have?:
* Operating System:
* Deployment Method(tar/sandstorm/snap/docker/etc /http frontend (nginx, httpd, ...)):
* Deployment Method(snap/docker/sandstorm/mongodb bundle/source):
* Http frontend if any (Caddy, Nginx, Apache, see config examples from Wekan GitHub wiki first):
* Node Version:
* MongoDB Version:
* ROOT_URL environment variable (Is there a subfolder?):
* ROOT_URL environment variable http(s)://(subdomain).example.com(/suburl):
**Problem description**:
- *be as explicit as you can*
- *describe the problem and its symptoms*
- *explain how to reproduce*
- *attach whatever information that can help understanding the context (screen capture, log files)*
- *REQUIRED: Add recorded animated gif about how it works currently, and screenshot mockups how it should work*
- *Explain steps how to reproduce*
- *Attach log files in .zip file)*
+1
View File
@@ -15,3 +15,4 @@ package-lock.json
**/prime
**/*.snap
snap/.snapcraft/
.idea
+8 -2
View File
@@ -31,6 +31,7 @@ kenton:accounts-sandstorm
service-configuration@1.0.11
useraccounts:unstyled
useraccounts:flow-routing
salleman:accounts-oidc
# Utilities
check@1.2.5
@@ -49,7 +50,6 @@ kadira:dochead
meteorhacks:picker
meteorhacks:subs-manager
mquandalle:autofocus
mquandalle:moment
ongoworks:speakingurl
raix:handlebar-helpers
tap:i18n
@@ -77,8 +77,14 @@ email@1.2.3
horka:swipebox
dynamic-import@0.2.0
staringatlights:fast-render
staringatlights:flow-router
mixmax:smart-disconnect
accounts-password@1.5.0
cfs:gridfs
eluck:accounts-lockout
rzymek:fullcalendar
momentjs:moment@2.22.2
atoy40:accounts-cas
browser-policy-framing
mquandalle:moment
msavin:usercache
+12 -1
View File
@@ -1,5 +1,6 @@
3stack:presence@1.1.2
accounts-base@1.4.0
accounts-oauth@1.1.15
accounts-password@1.5.0
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
@@ -9,6 +10,7 @@ aldeed:simple-schema@1.5.3
alethes:pages@1.8.6
allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
atoy40:accounts-cas@0.0.2
audit-argument-checks@1.0.7
autoupdate@1.3.12
babel-compiler@6.24.7
@@ -18,6 +20,8 @@ binary-heap@1.0.10
blaze@2.3.2
blaze-tools@1.0.10
boilerplate-generator@1.3.1
browser-policy-common@1.0.11
browser-policy-framing@1.1.0
caching-compiler@1.1.9
caching-html-compiler@1.1.2
callback-hook@1.0.10
@@ -57,6 +61,7 @@ ecmascript-runtime@0.5.0
ecmascript-runtime-client@0.5.0
ecmascript-runtime-server@0.5.0
ejson@1.1.0
eluck:accounts-lockout@0.9.0
email@1.2.3
es5-shim@4.6.15
fastclick@1.0.13
@@ -98,6 +103,7 @@ mixmax:smart-disconnect@0.0.4
mobile-status-bar@1.0.14
modules@0.11.0
modules-runtime@0.9.1
momentjs:moment@2.22.2
mongo@1.3.1
mongo-dev-server@1.1.0
mongo-id@1.0.6
@@ -112,8 +118,11 @@ mquandalle:jquery-ui-drag-drop-sort@0.2.0
mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1
mquandalle:perfect-scrollbar@0.6.5_2
msavin:usercache@1.0.0
npm-bcrypt@0.9.3
npm-mongo@2.2.33
oauth@1.2.1
oauth2@1.2.0
observe-sequence@1.0.16
ongoworks:speakingurl@1.1.0
ordered-dict@1.0.9
@@ -134,6 +143,9 @@ reactive-var@1.0.11
reload@1.1.11
retry@1.0.9
routepolicy@1.0.12
rzymek:fullcalendar@3.8.0
salleman:accounts-oidc@1.0.9
salleman:oidc@1.0.9
service-configuration@1.0.11
session@1.1.7
sha@1.0.9
@@ -150,7 +162,6 @@ srp@1.0.10
standard-minifier-css@1.3.5
standard-minifier-js@2.2.3
staringatlights:fast-render@2.16.5
staringatlights:flow-router@2.12.2
staringatlights:inject-data@2.0.5
stylus@2.513.13
tap:i18n@1.8.2
+737
View File
@@ -1,3 +1,740 @@
# v1.44 2018-09-09 Wekan release
This release adds the following new features:
- REST API: [Add startAt/dueAt/endAt etc](https://github.com/wekan/wekan/commit/1e0fdf8abc10130ea3c50b13ae97396223ce7fa9).
Docs at https://github.com/wekan/wekan/wiki/REST-API-Cards
- [Fix cards export and add customFields export](https://github.com/wekan/wekan/pull/1886).
Thanks to GitHub users ymeramees and xet7 for their contributions.
# v1.43 2018-09-06 Wekan release
This release fixes the following bugs:
- [Fix "No Comments" permission on Wekan and Trello import](https://github.com/wekan/wekan/commit/0a001d505d81961e6bd6715d885fffee0adb702d).
Thanks to GitHub user xet7 for contributions.
# v1.42 2018-09-06 Wekan release
This release adds the following new features:
- REST API: [Create board options to be modifiable](https://github.com/wekan/wekan/commit/9cea76e4efaacaebcb2e9f0690dfeb4ef6d62527),
like permissions, public/private board - now private by default,
and board background color.
Docs at https://github.com/wekan/wekan/wiki/REST-API-Boards
- [Add swimlaneId in activity. Create default swimlaneId in API](https://github.com/wekan/wekan/pull/1876).
Thanks to GitHub users andresmanelli and xet7 for their contributions.
# v1.41 2018-09-05 Wekan release
This release tries to fix the following bugs:
- [Try to fix Wekan Sandstorm API](https://github.com/wekan/wekan/issues/1279#issuecomment-418440401).
Thanks to GitHub users ocdtrekkie and xet7 for their contributions.
# v1.40 2018-09-04 Wekan release
This release adds the following new features:
- [Add permission "No comments"](https://github.com/wekan/wekan/commit/77efcf71376d3da6c19ad1a4910567263e83c0ca).
It is like normal user, but [does not show comments and activities](https://github.com/wekan/wekan/issues/1861).
Thanks to GitHub user xet7 for contributions.
# v1.39 2018-08-29 Wekan release
This release fixes the following bugs:
- [Only allow ifCanModify users to add dates on cards](https://github.com/wekan/wekan/pull/1867).
Thanks to GitHub user rjevnikar for contributions.
# v1.38 2018-08-29 Wekan release
This release adds the following new features:
- Add [msavin:userCache](https://github.com/msavin/userCache) to speedup Wekan.
See [meteor forums post](https://forums.meteor.com/t/introducing-a-new-approach-to-meteor-user-this-simple-trick-can-save-you-millions-of-database-requests/45336/7).
and fixes the following bugs:
- [Fix Delete Board](https://github.com/wekan/wekan/commit/534b20fedac9162d2d316bd74eff743d636f2b3d).
Thanks to GitHub users msavin, rjevnikar and xet7 for their contributions.
# v1.37 2018-08-28 Wekan release
This release fixes the following bugs:
- [Add Missing Index on cards.parentId since Swimlane integration
to speedup Wekan](https://github.com/wekan/wekan/issues/1863);
- [Update OpenShift template to add Route and parameterize](https://github.com/wekan/wekan/pull/1865);
- [Fix typos in Wekan snap help](https://github.com/wekan/wekan/commit/0c5fc6d7fd899a6bc67a446ab43e53290d8571e4).
Thanks to GitHub users Clement87, InfoSec812 and xet7 for their contributions.
# v1.36 2018-08-25 Wekan release
This release adds the following new features:
- [OAuth2 Login on Standalone Wekan](https://github.com/wekan/wekan/wiki/OAuth2). For example, Rocket.Chat can provide OAuth2 login to Wekan.
Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when
Rocket.Chat is providing OAuth2 login to Wekan.
and fixes the following bugs:
- [Move labels back to original place at minicard](https://github.com/wekan/wekan/issues/1842);
- [Fix typos in security documentation](https://github.com/wekan/wekan/pull/1857).
Thanks to GitHub users hever, salleman33, tlevine and xet7 for their contributions.
# v1.35 2018-08-23 Wekan release
This release adds the following new features:
Add Caddy plugins:
- [http.filter](https://caddyserver.com/docs/http.filter)
for changing Wekan UI on the fly, for example custom logo,
or changing to all different CSS file to have custom theme;
- [http.ipfilter](https://caddyserver.com/docs/http.ipfilter)
to block requests by ip address;
- [http.realip](https://caddyserver.com/docs/http.realip)
for showing real X-Forwarded-For IP to behind proxy;
- Turn off Caddy telemetry.
Add configuring webhooks:
- [Make the attributes that the webhook sends configurable](https://github.com/wekan/wekan/pull/1852).
Thanks to Caddy contributors, and Github users omarsy and xet7 for their contributions.
# v1.34 2018-08-22 Wekan release
This release add the following new features:
- [Add Favicon for pinned tab on Safari browser](https://github.com/wekan/wekan/issues/1795).
and fixes the following bugs:
- [Restored SMTP settings at Admin Panel, and disabled showing password](https://github.com/wekan/wekan/issues/1790);
- [Move color labels on minicard to bottom of minicard](https://github.com/wekan/wekan/issues/1842);
- [Fix and improve linked cards](https://github.com/wekan/wekan/pull/1849);
- [Allow Sandstorm to serve Wekan HTTP API](https://github.com/wekan/wekan/pull/1851);
Thanks to GitHub users andresmanelli, ocdtrekkie, therampagerado, woodyart and xet7 for their contributions.
# v1.33 2018-08-16 Wekan release
This release fixes the following bugs:
- [Change default value of label ids](https://github.com/wekan/wekan/pull/1837).
Thanks to GitHub user omarsy for contributions.
# v1.32 2018-08-16 Wekan release
This release fixes the following bugs:
- [Content Policy: Allow inline scripts, otherwise there is errors in browser/inspect/console](https://github.com/wekan/wekan/commit/807c6ce09e4b5d49049d343d73bbca24fa84d527);
- [Use only framing policy, not all of content policy](https://github.com/wekan/wekan/commit/b3005f828dbf69bdf174d4bcd7654310fa9e0968);
- [Set default matomo settings to disabled](https://github.com/wekan/wekan/commit/807c6ce09e4b5d49049d343d73bbca24fa84d527);
- Fix [hidden](https://github.com/wekan/wekan/commit/be00465e67931f2a5655ed47f6e075ed1c589f54)
[system](https://github.com/wekan/wekan/commit/9fc3de8502919f9aeb18c9f8ea3b0678b66ce176) [messages](https://github.com/wekan/wekan/issues/1830);
- Fix [Requested By](https://github.com/wekan/wekan/commit/e55d7e4f72a4b425c4aca5ba04a7be1fc642649b) and
[Assigned By](https://github.com/wekan/wekan/commit/5c33a8534186920be642be8e2ac17743a54f16db) [fields](https://github.com/wekan/wekan/issues/1830);
- [Fix Date and Time Formats are only US in every language](https://github.com/wekan/wekan/commit/b3005f828dbf69bdf174d4bcd7654310fa9e0968).
Thanks to GitHub users andresmanelli and xet7 for their contributions.
# v1.31 2018-08-14 Wekan release
This release fixes the following bugs:
- [Export of Board does not work on Docker](https://github.com/wekan/wekan/issues/1820).
Thanks to GitHub user xet7 for contributions.
# v1.30 2018-08-14 Wekan release
This release add the following new features:
- [When Content Policy is enabled, allow one URL to have iframe that embeds Wekan](https://github.com/wekan/wekan/commit/b9929dc68297539a94d21950995e26e06745a263);
- [Add option to turn off Content Policy](https://github.com/wekan/wekan/commit/b9929dc68297539a94d21950995e26e06745a263);
- [Allow always in Wekan markdown `<img src="any-image-url-here">`](https://github.com/wekan/wekan/commit/b9929dc68297539a94d21950995e26e06745a263).
and fixes the following bugs:
- [Fix Import from Trello error 400](https://github.com/wekan/wekan/commit/2f557ae3a558c654cc6f3befff22f5ee4ea6c3d9).
Thanks to GitHub user xet7 for contributions.
# v1.29 2018-08-12 Wekan release
This release fixes the following bugs:
- [Revert Fix lint errors, that caused breakage](https://github.com/wekan/wekan/commit/b015b5b7240f5fb5a715843dce5d35907345eb4a).
Thanks to GitHub user xet7 for contributions.
# v1.28 2018-08-12 Wekan release
This release fixes the following bugs:
- [Fix lint errors](https://github.com/wekan/wekan/commit/f5515cb95fc93882e5e1098d6043267b9260b9d7).
Thanks to GitHub user xet7 for contributions.
# v1.27 2018-08-12 Wekan release
This release add the following new features:
- [Linked Cards and Linked Boards](https://github.com/wekan/wekan/pull/1592).
Thanks to GitHub user andresmanelli for contributions.
# v1.26 2018-08-09 Wekan release
This release fixes the following bugs:
- [Set WITH_API=true setting on Sandstorm, and so that export works](https://github.com/wekan/wekan/commit/a300b73d56750a1a5645767d375be60839314e84);
- [Set Matomo blank settings on Sandstorm](https://github.com/wekan/wekan/commit/acd105e61b9dca5a78354047bbc23b0a01e71d8c).
Thanks to GitHub user xet7 for contributions.
# v1.25 2018-08-09 Wekan release
This release fixes the following bugs:
- [Fix showing only the cards of the current board in calendar view](https://github.com/wekan/wekan/pull/1822).
Thanks to GitHub user Yanonix for contributions.
# v1.24 2018-08-09 Wekan release
This release add the following new features:
- [Update node to v8.12.0 prerelease build](https://github.com/wekan/wekan/commit/04d7c47f4ca990311079be8dd6dc383448ee342f).
and fixes the following bugs:
- [Enable Wekan API by default, so that Export Board to JSON works](https://github.com/wekan/wekan/commit/b2eeff96977592deaeb23a8171fc3b13f8c6c5dc);
- [Fix the flagging of dates](https://github.com/wekan/wekan/pull/1814);
- [Use new WITH_API and Matomo env variables at Dockerfile](https://github.com/wekan/wekan/issues/1820);
- For OpenShift compliance, [change](https://github.com/wekan/wekan/commit/53d545eeef7e796bd910f7cce666686ca05de544)
[run user](https://github.com/wekan/wekan/pull/1816)
and [Docker internal port to 8080](https://github.com/wekan/wekan/commit/95b21943ee7a9fa5a27efe5276307febc2fbad94).
Thanks to GitHub users rjevnikar, tdemaret, xadagaras and xet7 for their contributions.
# v1.23 2018-07-30 Wekan release
This release tries to fix the following bugs:
- Checking for [existing](https://github.com/wekan/wekan/commit/a48f560a85860451914dbaad8cae6ff5120a0c38)
[directories](https://github.com/wekan/wekan/commit/5bfb6c6411c928bfffa7ed6fe829f030e3ea57da) when
building snap etc, trying to [get snap to build somehow](https://github.com/wekan/wekan-snap/issues/58).
This is just a test, does it build this time correctly.
Thanks to GitHub user xet7 for contributions.
# v1.22 2018-07-30 Wekan release
This release adds the following new features:
- [Backup script now uses mongodump from snap to
do backups](https://github.com/wekan/wekan/wiki/Backup);
- [Integration of Matomo](https://github.com/wekan/wekan/pull/1806);
- [Enable/Disable API with env var](https://github.com/wekan/wekan/pull/1799).
Thanks to GitHub user Akuket and xet7 for their contributions.
# v1.21 2018-07-18 Wekan release
This release adds the following new features:
- [Add logo from Wekan website to login logo](https://github.com/wekan/wekan/commit/4eed23afe06d5fab8d45ba3decc7c1d3b85efbd8).
and fixes the following bugs:
- [Allow to resend invites](https://github.com/wekan/wekan/pull/1785).
Thanks to GitHub users Akuket and xet7 for their contributions.
# v1.20 2018-07-18 Wekan release
This release fixes the following bugs:
- [Remove SMTP settings from Admin Panel, because they are set in environment
variable settings like source/snap/docker already, and password was
exposed in plain text](https://github.com/wekan/wekan/issues/1783);
- [Added info how to limit snap to root
user](https://github.com/wekan/wekan-snap/wiki/Limit-snap-to-root-user-only);
- [Add scrolling to long cards](https://github.com/wekan/wekan/pull/1782).
Thanks to GitHub users jnso, LyR33x and xet7 for their contributions.
# v1.19 2018-07-16 Wekan release
This release adds the following new features:
- [Build from source on macOS](https://github.com/wekan/wekan/wiki/Mac);
- [Wekan integration with OpenShift](https://github.com/wekan/wekan/pull/1765);
- [Snap Caddy: set -agree flag for Let's Encrypt](https://github.com/wekan/wekan-snap/issues/54).
and fixes the following mobile bugs:
- [Fix missing utility function](https://github.com/wekan/wekan/commit/5c774070617357c25c7bb35b43f4b122eb4b3e34);
- [Avoid default behavior](https://github.com/wekan/wekan/commit/9c204d9bbe4845bc3e352e839615dfb782a753f4);
- [Hotfix more sortable elements](https://github.com/wekan/wekan/commit/616dade81c25b10fc409aee1bcc9a93ddbfee81b);
- [Hotfix for mobile device](https://github.com/wekan/wekan/commit/43d86d7d5d3f3b34b0500f6d5d3afe7bd86b0060).
and fixes the following bugs:
- [Fix invitation code](https://github.com/wekan/wekan/pull/1777).
Thanks to GitHub users adyachok, Akuket, halunk3, Haocen and xet7 for their contributions.
# v1.18 2018-07-06 Wekan release
This release fixes the following bugs:
- Fix [Title is required](https://github.com/wekan/wekan/issues/1576)
by [setting Checklist title during migration](https://github.com/wekan/wekan/issues/1753).
Thanks to GitHub users centigrade-kdk and xet7 for their contributions.
# v1.17 2018-07-06 Wekan release
This release adds the following new features:
- [Made Subtask Settings visible at Board menu at Sandstorm](https://github.com/wekan/wekan/commit/884cd0e6b888edc9752cbed80e7ac75e2ce232de).
Thanks to GitHub user xet7 for contributions.
# v1.16 2018-07-06 Wekan release
This release fixes the following bugs:
- Fix: [Boards.forEach is not function](https://github.com/wekan/wekan/commit/a41190cdf024df65ad1c9931b3065c6ababeaf25).
Thanks to GitHub user xet7 for contributions.
# v1.15 2018-07-06 Wekan release
This release fixes the following bugs:
- Fix [Title is required](https://github.com/wekan/wekan/issues/1576)
by making [Checklist title optional](https://github.com/wekan/wekan/issues/1753).
Thanks to GitHub users centigrade-kdk and xet7 for their contributions.
# v1.14 2018-07-06 Wekan release
This release fixes the following bugs:
- Fix [Checklists.forEach is not a function](https://github.com/wekan/wekan/issues/1753).
Thanks to GitHub user xet7 for contributions.
# v1.13 2018-07-06 Wekan release
This release adds the following new features:
- Added snapcraft.yml new node version changes, that were missing from v1.12.
Thanks to GitHub user xet7 for contibutions.
# v1.12 2018-07-06 Wekan release
This release adds the following new features:
- [Nested tasks](https://github.com/wekan/wekan/pull/1723);
- [Calendar improvements](https://github.com/wekan/wekan/pull/1752);
- [SSO CAS](https://github.com/wekan/wekan/pull/1742).
and fixes the following bugs:
- [Fix warning about missing space in jade file](https://github.com/wekan/wekan/commit/067aef9de948ef0cb6037d52602100b00d214706);
- Revert [Fix vertical align of user avatar initials](https://github.com/wekan/wekan/pull/1714), so that [initials are again
visible](https://github.com/wekan/wekan/commit/122a61b3333fb77c0f08bbdc6fe0d3c2f6db97df);
- Fix lint warning: [EditCardDate is assigned a value but never used
no-unused-vars](https://github.com/wekan/wekan/commit/dd324aa581bed7ea31f20968c6b596f373e7054f);
- Fix [Minimize board sidebar actually just moves it over](https://github.com/wekan/wekan/issues/1589).
Thanks to GitHub users dagomar, ppoulard, pravdomil, TNick and xet7 for their contributions.
# v1.11 2018-06-30 Wekan release
This release fixes the following bugs:
* [Remove card shadow](https://github.com/wekan/wekan/pull/1726), Wekan users now prefer not to have it;
* [Revert](https://github.com/wekan/wekan/commit/928d88cfe1da4187797519c929cd2fdd9ffe9c2e) previous
[Less margin-bottom after minicard](https://github.com/wekan/wekan/pull/1713).
Thanks to GitHub users pravdomil and xet7 for their contributions.
# v1.10 2018-06-28 Wekan release
This release fixes the following bugs:
* Fix migration error "TypeError: Checklists.foreach" at [Snap](https://github.com/wekan/wekan-snap/issues/51),
[Docker](https://github.com/wekan/wekan/issues/1736) etc.
Thanks to GitHub users Jubi94, kestrelhawk and xet7 for their contributions.
# v1.09 2018-06-28 Wekan release
This release adds the following new features:
* [Calendar](https://github.com/wekan/wekan/pull/1728). Click Lists / Swimlanes / Calendar.
and fixes the following bugs:
* To fix ["title is required"](https://github.com/wekan/wekan/issues/1576) fix only
[add-checklist-items and revert all other migration changes](https://github.com/wekan/wekan/issues/1734);
* [Restore invitation code logic](https://github.com/wekan/wekan/pull/1732). Please test and add comment
to those invitation code issues that this fixes.
Thanks to GitHub users TNick and xet7 for their contributions.
# v1.08 2018-06-27 Wekan release
This release adds the following new features:
* [Add more card inner shadow](https://github.com/wekan/wekan/commit/6a587299b80a49fce0789628ff65885b5ed2c837);
* [Less margin-bottom after minicard](https://github.com/wekan/wekan/pull/1713);
* Updated newest node fork binary from Sandstorm to Wekan, see https://releases.wekan.team/node.txt
* Add Georgian language.
and fixes the following bugs:
* [Fix typo in English translation](https://github.com/wekan/wekan/pull/1710);
* [Fix vertical align of user avatar initials](https://github.com/wekan/wekan/pull/1714);
* [Submit inline form on click outside](https://github.com/wekan/wekan/pull/1717), fixes
["You have an unsaved description" doesn't go away after saving](https://github.com/wekan/wekan/issues/1287);
* [Fix "Error: title is required" by removing find() from all of migrations](https://github.com/wekan/wekan/commit/97922c90cb42be6c6615639bb164173748982f56).
Thanks to GitHub users pravdomil, xet7 and zypA13510 for their contributions.
# v1.07 2018-06-14 Wekan release
This release adds the following new features:
* [Regex for Advanced filter. It aims to solve search in bigger text fields, and using wildcards.
A change to translations was made for adding info about regex and escaping characters
with \\](https://github.com/wekan/wekan/pull/1702).
Thanks to GitHub users feuerball11 and xet7 for their contributions.
# v1.06 2018-06-14 Wekan release
This release fixes the following bugs:
* [Fix CardDetail of Mobile View](https://github.com/wekan/wekan/pull/1701).
Thanks to GitHub users feuerball11 and xet7 for their contributions.
# v1.05 2018-06-14 Wekan release
This release adds the following new features:
* [Markdown support in Custom Fields, and view on minicard](https://github.com/wekan/wekan/pull/1699);
* [Fixes to Advanced Filter, you are now able to filter for Dropdown and Numbers,
also Dropdown are now correctly displayed on minicard](https://github.com/wekan/wekan/pull/1699).
and fixes the following bugs:
* [Fix data colour changes on cards](https://github.com/wekan/wekan/pull/1698);
* [Fix for migration error "title is required" and breaking of Standalone and
Sandstorm Wekan](https://github.com/wekan/wekan/commit/8d5cbf1e6c2b6d467fe1c0708cd794fd11b98a2e#commitcomment-29362180);
* [Fix Issue with custom fields shown on card](https://github.com/wekan/wekan/issues/1659);
* [Fix showing public board in list mode](https://github.com/wekan/wekan/issues/1623);
* [Fix for not able to remove Custom Field "Show on Card"](https://github.com/wekan/wekan/pull/1699);
* [Fix minicardReceivedDate typo in 1.04 regression: Socket connection error and boards
not loading](https://github.com/wekan/wekan/issues/1694).
Thanks to GitHub users feuerball11, Fran-KTA, oec, rjevnikar and xet7 for their contributions.
# v1.04 2018-06-12 Wekan release
This release adds the following new features:
* [Add Khmer language](https://github.com/wekan/wekan/commit/2156e458690d0dc34a761a48fd7fa3b54af79031);
* [Change label text colour to black for specific label colours for better
visibility](https://github.com/wekan/wekan/pull/1689).
and fixes the following bugs:
* [SECURITY FIX: Do not publish all of people collection. This bug has probably been present
since addition of Admin Panel](https://github.com/wekan/wekan/commit/dda49d2f07f9c50d5d57acfd5c7eee6492f93b33);
* [Modify card covers/mini-cards so that: 1) received date is shown unless there is a start date
2) due date is shown, unless there is an end date](https://github.com/wekan/wekan/pull/1685).
Thanks to GitHub users rjevnikar and xet7 for their contributions.
Thanks to Adrian Genaid for security fix, he's now added to [Hall of Fame](https://wekan.github.io/hall-of-fame/).
Thanks to translators.
# v1.03 2018-06-08 Wekan release
This release adds the following new features:
* [Update to newest Sandstorm fork of Node.js that includes performance
etc fixes](https://github.com/wekan/wekan/commit/90d55777f7298d243ed0de03c934cea239a31272);
* [Additional label colors. Assigned By and Requested By text fields
on card. Delete board from Recycle Bin](https://github.com/wekan/wekan/pull/1679).
and possibly fixes the following bugs, please test:
* [Try to fix: Missing board-view-lists Field after DB updated to
Wekan 1.02](https://github.com/wekan/wekan/issues/1675).
Thanks to GitHub users JamesLavin, rjevnikar and xet7 for their contributions.
# v1.02 2018-05-26 Wekan release
This release fixes the following bugs:
* [Remove binary version of bcrypt](https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac)
because of [vulnerability](https://nodesecurity.io/advisories/612) that has [issue that is not fixed
yet](https://github.com/kelektiv/node.bcrypt.js/issues/604)
and [not yet merged pull request](https://github.com/kelektiv/node.bcrypt.js/pull/606).
This may cause some slowdown;
* [Snap: Filtering out swap file created at build time, adding stage package](https://github.com/wekan/wekan/pull/1660);
* [Fix Received Date and End Date on Cards](https://github.com/wekan/wekan/issues/1654).
Thanks to GitHub users kubiko, xadagaras and xet7 for their contributions.
# v1.01 2018-05-23 Wekan release
This release possibly fixes the following bugs, please test:
* [Possible quickfix for all customFields Import errors, please test](https://github.com/wekan/wekan/pull/1653).
Thanks to GitHub users feuerball11 and xet7 for their contributions.
# v1.00 2018-05-21 Wekan release
This release fixes the following bugs:
* [Typo in English translation: brakets to brackets](https://github.com/wekan/wekan/issues/1647).
Thanks to GitHub user yarons for contributions.
# v0.99 2018-05-21 Wekan release
This release adds the following new features:
* [Advanced Filter for Custom Fields](https://github.com/wekan/wekan/pull/1646).
Thanks to GitHub users feuerball11 and xet7 for their contributions.
# v0.98 2018-05-19 Wekan release
This release adds the following new features:
* [Filtering by Custom Field](https://github.com/wekan/wekan/pull/1645);
* Update to NPM 6.0.1 and MongoDB 3.2.20.
Thanks to GitHub users feuerball11 and xet7 for their contributions.
# v0.97 2018-05-19 Wekan release
Updated translations.
# v0.96 2018-05-19 Wekan release
This release adds the following new features:
* [Custom Fields](https://github.com/wekan/wekan/issues/807). Note: Import/Export is not implemented yet.
and fixes the following bugs:
* [Fix: checklistItems broken after upgrade](https://github.com/wekan/wekan/issues/1636).
Thanks to GitHub users feuerball11, franksiler, papoola and xet7 for their contributions.
# v0.95 2018-05-08 Wekan release
This release adds the following new features:
* [REST API Edit Card Labels](https://github.com/wekan/wekan/pull/1626);
* [Add a new API route to create a new label in a given board](https://github.com/wekan/wekan/pull/1630);
* [Admin Panel: Option to block username change](https://github.com/wekan/wekan/pull/1627).
and fixes the following bugs:
* [Error: title is required](https://github.com/wekan/wekan/issues/1576).
Thanks to GitHub users Shahar-Y, thiagofernando and ThisNeko for their contributions.
# v0.94 2018-05-03 Wekan release
This release adds the following new features:
* [REST API POST /cards: allow setting card members](https://github.com/wekan/wekan/pull/1622).
Thanks to GitHub user couscous3 for contributions.
# v0.93 2018-05-02 Wekan release
This release adds the following new features:
* [Checklist items lineheight to 18px, and positioning
improvements](https://github.com/wekan/wekan/issues/1619).
Thanks to GitHub user lichtamberg for contributions.
# v0.92 2018-05-01 Wekan release
This release tries to fix the following bugs, please test:
* [Users who register with an invitation code can't see lists/cards](https://github.com/wekan/wekan/issues/1610).
Thanks to GitHub user andresmanelli for contributions.
# v0.91 2018-05-01 Wekan release
This release fixes the following bugs:
- [Fix Wekan Import / Export lists not being sortable](https://github.com/wekan/wekan/commit/539c1ab87a098a7ddfd23cdbd663441bd609b73d).
Thanks to GitHub user zebby76 for contributions.
# v0.90 2018-05-01 Wekan release
This release adds the following new features:
- [Remove space from between checklist items, so longer checklists can be seen
at once](https://github.com/wekan/wekan/commit/1124f4120cd77622c0a6313e228e1a00690ff566).
Thanks to GitHub user xet7 for contributions.
# v0.89 2018-04-29 Wekan release
This release fixes the following bugs:
- [Fix Wekan import / Export for ChecklistItems](https://github.com/wekan/wekan/pull/1613).
Thanks to GitHub user zebby76 for contributions.
# v0.88 2018-04-27 Wekan release
This release fixes the following bugs:
- [Fix Trello import of ChecklistItems](https://github.com/wekan/wekan/pull/1611).
Thanks to GitHub user zebby76 for contributions.
# v0.87 2018-04-27 Wekan release
This release fixes the following bugs:
- [Sandstorm: Copy Card, Move Card and Copy Checklist Template to Many Cards - No longer works in
menu](https://github.com/wekan/wekan/commit/db80e738048e2729917c5e8fc18cf8ee44df7992);
- [Snap: Use override-build instead of old deprecated
prepare/build/install](https://github.com/wekan/wekan/commit/075ea1c43d827099e0030c750a4c156bd3340fed);
- [Removed not-used plugins part of Caddy download
URL](https://github.com/wekan/wekan/commit/7b91b341fe9c0cde42f91bf14d228820653c883d).
Thanks to GitHub users kyrofa and xet7 for their contributions.
# v0.86 2018-04-20 Wekan release
This release adds the following new features:
- Updated translations: German and Turkish;
- Updated Caddy to newest version for Snap.
Thanks to translators and Caddy developers.
# v0.85 2018-04-18 Wekan release
This release fixes the following bugs:
- [Fix Switch List/swimlane view only working with admin privileges](https://github.com/wekan/wekan/issues/1567);
- [Fix Wekan logo positioning](https://github.com/wekan/wekan/issues/1378);
- [Tried to fix, but fix did not work: Fix checklists items migration error "title is required"](https://github.com/wekan/wekan/issues/1576);
- [Removed paxctl alpine fix #1303 , because it did not work anymore, so Docker container
did not build correctly](https://github.com/wekan/wekan/commit/ce659632174ba25ca9b5e85b053fde02fd9c3928);
- [Use curl to download 100% CPU fibers fixed node in snap, and remove paxctl from
snap package](https://github.com/wekan/wekan/commit/179ff7a12457be1592f04e1bdc15a5bb4fe9d398).
Thanks to GitHub users andresmanelli, iwkse and xet7 for their contributions.
# v0.84 2018-04-16 Wekan release
This release adds the following new features:
- [Add Checklist Items REST API](https://github.com/wekan/wekan/commit/9eef5112dc1c1c30590d19fbfd2f615714112a3f).
and fixes the following bugs:
- [Fix Node Fibers 100% CPU issue](https://github.com/wekan/wekan/commit/e26a4824cfb119a15767c4827190a6b9ab65b904);
- [Plus button on a Swimlane row, always add an element on the first row](https://github.com/wekan/wekan/issues/1577);
- [Fix Checklist REST API](https://github.com/wekan/wekan/commit/9eef5112dc1c1c30590d19fbfd2f615714112a3f);
- [Fix Disabling "show cards count" not possible, now zero means disable](https://github.com/wekan/wekan/issues/1570);
- [Fix Checklist not copied when copied a card and Copy Checklist Template to Many Cards](https://github.com/wekan/wekan/issues/1565);
- [Fix Filter cards hides checklist items](https://github.com/wekan/wekan/issues/1561).
Thanks to GitHub users andresmanelli, kentonv and xet7 for their contributions.
# v0.83 2018-04-12 Wekan release
- Updated translations: Czech and French.
Thanks to translators!
# v0.82 2018-04-11 Wekan release
- [Restore original font and font sizes. Admin panel people and version texts
to darker](https://github.com/wekan/wekan/commit/db74c86e555f45a5aaaef84d2f3d4128cec77782).
Thanks to GitHub users apn3a and xet7 for their contributions.
# v0.81 2018-04-10 Wekan release
This release adds the following new features:
- [Removed checkbox from checklist name to have more of material design look](https://github.com/wekan/wekan/issues/1568);
- [Renamed Archives to Recycle Bin](https://github.com/wekan/wekan/issues/1429);
- [Separate translations for cards in Recycle Bin and cards count](https://github.com/wekan/wekan/commit/49c7a6c223061b9c1769143fea32fecc7d0f3c3e);
- [Use lighter and smaller font sizes](https://github.com/wekan/wekan/commit/7b94b0470198bc22b6a52db6661f35076f7c6388);
- [Board title as markdown in board view](https://github.com/wekan/wekan/commit/7b94b0470198bc22b6a52db6661f35076f7c6388).
and fixes the following bugs:
- [Removed forcing "cards" translations to lowercase in count of cards](https://github.com/wekan/wekan/issues/1571).
Thanks to GitHub users BruceZCQ, Chartman123, quantazelle and xet7 for their contributions.
# v0.80 2018-04-04 Wekan release
This release adds the following new features:
- [Changed icon of checklist name to unchecked](https://github.com/wekan/wekan/pull/1559/commits/f9539aa2a8d806e5a158d1c32f74788d051d40cb);
- [Added meteor packages](https://github.com/wekan/wekan/commit/40d438a517f0d807894e04873358aecf44fa7c4d)
for security: [browser-policy](https://atmospherejs.com/meteor/browser-policy) and
[eluck:accounts-lockout](https://atmospherejs.com/eluck/accounts-lockout).
Thanks to GitHub users quantazelle and xet7 for their contributions.
# v0.79 2018-03-31 Wekan release
This release adds the following new features:
- [Checklist items sort fix, and checklist sort capability](https://github.com/wekan/wekan/pull/1543);
- [Add Received Date and End Date. Between them is already existing Start and Due Date](https://github.com/wekan/wekan/pull/1550).
and fixes the following bugs:
- [Fix drag in lists view](https://github.com/wekan/wekan/pull/1559/commits/679e50af6449a680f958256570e8b9f1944a3a92);
- [Set fixed width for swimlane header](https://github.com/wekan/wekan/pull/1559/commits/2e8f8924dd0d985ae4634450cfbef04e88e5d954).
Thanks to GitHub users andresmanelli, rjevnikar and xet7 for their contributions.
# v0.78 2018-03-17 Wekan release
This release adds the following new features:
+4
View File
@@ -0,0 +1,4 @@
To get started, [please sign the Contributor License Agreement](https://www.clahub.com/agreements/wekan/wekan).
[Then, please read documentation at wiki](https://github.com/wekan/wekan/wiki).
-5
View File
@@ -1,5 +0,0 @@
# Contributing
Please see wiki for all documentation:
<https://github.com/wekan/wekan/wiki>
+83 -38
View File
@@ -1,5 +1,5 @@
FROM debian:buster-slim
MAINTAINER wekan
LABEL maintainer="wekan"
# Declare Arguments
ARG NODE_VERSION
@@ -10,18 +10,47 @@ ARG NPM_VERSION
ARG FIBERS_VERSION
ARG ARCHITECTURE
ARG SRC_PATH
ARG WITH_API
ARG MATOMO_ADDRESS
ARG MATOMO_SITE_ID
ARG MATOMO_DO_NOT_TRACK
ARG MATOMO_WITH_USERNAME
ARG BROWSER_POLICY_ENABLED
ARG TRUSTED_URL
ARG WEBHOOKS_ATTRIBUTES
ARG OAUTH2_CLIENT_ID
ARG OAUTH2_SECRET
ARG OAUTH2_SERVER_URL
ARG OAUTH2_AUTH_ENDPOINT
ARG OAUTH2_USERINFO_ENDPOINT
ARG OAUTH2_TOKEN_ENDPOINT
# Set the environment variables (defaults where required)
# paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
ENV BUILD_DEPS="apt-utils gnupg gosu wget curl bzip2 build-essential python git ca-certificates gcc-7 paxctl"
ENV NODE_VERSION ${NODE_VERSION:-v8.9.3}
ENV METEOR_RELEASE ${METEOR_RELEASE:-1.6.0.1}
ENV USE_EDGE ${USE_EDGE:-false}
ENV METEOR_EDGE ${METEOR_EDGE:-1.5-beta.17}
ENV NPM_VERSION ${NPM_VERSION:-5.5.1}
ENV FIBERS_VERSION ${FIBERS_VERSION:-2.0.0}
ENV ARCHITECTURE ${ARCHITECTURE:-linux-x64}
ENV SRC_PATH ${SRC_PATH:-./}
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
# ENV BUILD_DEPS="paxctl"
ENV BUILD_DEPS="apt-utils gnupg gosu wget curl bzip2 build-essential python git ca-certificates gcc-7" \
NODE_VERSION=v8.12.0 \
METEOR_RELEASE=1.6.0.1 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
FIBERS_VERSION=2.0.0 \
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
MATOMO_ADDRESS="" \
MATOMO_SITE_ID="" \
MATOMO_DO_NOT_TRACK=true \
MATOMO_WITH_USERNAME=false \
BROWSER_POLICY_ENABLED=true \
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_CLIENT_ID="" \
OAUTH2_SECRET="" \
OAUTH2_SERVER_URL="" \
OAUTH2_AUTH_ENDPOINT="" \
OAUTH2_USERINFO_ENDPOINT="" \
OAUTH2_TOKEN_ENDPOINT=""
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
@@ -34,34 +63,46 @@ RUN \
apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
\
# Download nodejs
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
#wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
#wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
#---------------------------------------------------------------------------------------------
# Node Fibers 100% CPU usage issue:
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
# https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
# https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
# Also see beginning of wekan/server/authentication.js
# import Fiber from "fibers";
# Fiber.poolSize = 1e9;
# Download node version 8.12.0 prerelease that has fix included,
# Description at https://releases.wekan.team/node.txt
wget https://releases.wekan.team/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
echo "1ed54adb8497ad8967075a0b5d03dd5d0a502be43d4a4d84e5af489c613d7795 node-v8.12.0-linux-x64.tar.gz" >> SHASUMS256.txt.asc && \
\
# Verify nodejs authenticity
grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
export GNUPGHOME="$(mktemp -d)" && \
\
#export GNUPGHOME="$(mktemp -d)" && \
#\
# Try other key servers if ha.pool.sks-keyservers.net is unreachable
# Code from https://github.com/chorrell/docker-node/commit/2b673e17547c34f17f24553db02beefbac98d23c
# gpg keys listed at https://github.com/nodejs/node#release-team
# and keys listed here from previous version of this Dockerfile
for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \
gpg --keyserver pgp.mit.edu --recv-keys "$key" || \
gpg --keyserver keyserver.pgp.com --recv-keys "$key" ; \
done && \
gpg --verify SHASUMS256.txt.asc && \
#for key in \
#9554F04D7259F04124DE6B476D5A82AC7E37093B \
#94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
#FD3A5288F042B6850C66B31F09FE44734EB7990E \
#71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
#DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
#C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
#B9AE9905FFD7803F25714661B63B535A4C206CA9 \
#; do \
#gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \
#gpg --keyserver pgp.mit.edu --recv-keys "$key" || \
#gpg --keyserver keyserver.pgp.com --recv-keys "$key" ; \
#done && \
#gpg --verify SHASUMS256.txt.asc && \
# Ignore socket files then delete files then delete directories
find "$GNUPGHOME" -type f | xargs rm -f && \
find "$GNUPGHOME" -type d | xargs rm -fR && \
#find "$GNUPGHOME" -type f | xargs rm -f && \
#find "$GNUPGHOME" -type d | xargs rm -fR && \
rm -f SHASUMS256.txt.asc && \
\
# Install Node
@@ -71,8 +112,8 @@ RUN \
ln -s /opt/nodejs/bin/node /usr/bin/node && \
ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
\
# paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
paxctl -mC `which node` && \
#DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
#paxctl -mC `which node` && \
\
# Install Node dependencies
npm install -g npm@${NPM_VERSION} && \
@@ -111,12 +152,15 @@ RUN \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
cd /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
gosu wekan:wekan rm -rf node_modules/bcrypt && \
gosu wekan:wekan npm install bcrypt && \
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
#cd /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
#gosu wekan:wekan rm -rf node_modules/bcrypt && \
#gosu wekan:wekan npm install bcrypt && \
cd /home/wekan/app_build/bundle/programs/server/ && \
gosu wekan:wekan npm install && \
gosu wekan:wekan npm install bcrypt && \
#gosu wekan:wekan npm install bcrypt && \
mv /home/wekan/app_build/bundle /build && \
\
# Cleanup
@@ -128,7 +172,8 @@ RUN \
rm -R /home/wekan/app_build && \
rm /home/wekan/install_meteor.sh
ENV PORT=80
ENV PORT=8080
EXPOSE $PORT
USER wekan
CMD ["node", "/build/main.js"]
+12 -11
View File
@@ -1,18 +1,19 @@
# Wekan
[![Translate Wekan at Transifex](https://img.shields.io/badge/Translate%20Wekan-at%20Transifex-brightgreen.svg "Freenode IRC")](https://transifex.com/wekan/wekan)
[![Wekan Vanila Chat][vanila_badge]][vanila_chat]
[![IRC #wekan](https://img.shields.io/badge/IRC%20%23wekan-on%20Freenode-brightgreen.svg "Freenode IRC")](http://webchat.freenode.net?channels=%23wekan&uio=d4)
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan)
<!--
[![Docker Hub container status](https://img.shields.io/docker/build/wekanteam/wekan.svg "Docker Hub container status")](https://hub.docker.com/r/wekanteam/wekan)
[![Docker Hub pulls](https://img.shields.io/docker/pulls/wekanteam/wekan.svg "Docker Hub Pulls")](https://hub.docker.com/r/wekanteam/wekan)
[![Wekan Build Status][travis_badge]][travis_status]
-->
Freenode IRC #wekan
[![Wekan chat][vanila_badge]][vanila_chat]
[Translate Wekan at Transifex][translate_wekan]
[Open Hub analysis of Wekan code](https://www.openhub.net/p/wekan)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/02137ecec4e34c5aa303f57637196a93 "Codacy Badge")](https://www.codacy.com/app/xet7/wekan?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=wekan/wekan&amp;utm_campaign=Badge_Grade)
[![Code Climate](https://codeclimate.com/github/wekan/wekan/badges/gpa.svg "Code Climate")](https://codeclimate.com/github/wekan/wekan)
[![Project Dependencies](https://david-dm.org/wekan/wekan.svg "Project Dependencies")](https://david-dm.org/wekan/wekan)
[![Code analysis at Open Hub](https://img.shields.io/badge/code%20analysis-at%20Open%20Hub-brightgreen.svg "Code analysis at Open Hub")](https://www.openhub.net/p/wekan)
Please read [FAQ](https://github.com/wekan/wekan/wiki/FAQ).
Please don't feed the trolls and spammers that are mentioned in the FAQ :)
+129
View File
@@ -0,0 +1,129 @@
Security is very important to us. If you discover any issue regarding security, please disclose
the information responsibly by sending an email to security (at) wekan.team and not by
creating a GitHub issue. We will respond swiftly to fix verifiable security issues.
We thank you with a place at our hall of fame page, that is
at https://wekan.github.io/hall-of-fame . Others have just posted public GitHub issue,
so they are not at that hall-of-fame page.
## How should reports be formatted?
```
Name: %name
Twitter: %twitter
Bug type: %bugtype
Domain: %domain
Severity: %severity
URL: %url
PoC: %poc
CVSS (optional): %cvss
CWSS (optional): %cwss
```
## Who can participate in the program
Anyone who reports a unique security issue in scope and does not disclose it to
a third party before we have patched and updated may be upon their approval
added to the Wekan Hall of Fame.
## Which domains are in scope?
No public domains, because all those are donated to Wekan Open Source project,
and we don't have any permissions to do security scans on those donated servers
Please don't perform research that could impact other users. Secondly, please keep
the reports short and succinct. If we fail to understand the logics of your bug, we will tell you.
You can [Install Wekan](https://github.com/wekan/wekan/releases) to your own computer
and scan it's vulnerabilities there.
## About Wekan versions
There are only 2 versions of Wekan: Standalone Wekan, and Sandstorm Wekan.
### Standalone Wekan Security
Standalone Wekan includes all non-Sandstorm platforms. Some Standalone Wekan platforms
like Snap and Docker have their own specific sandboxing etc features.
Standalone Wekan by default does not load any files from Internet, like fonts, CSS, etc.
This also means all Standalone Wekan functionality works in offline local networks.
Wekan is used by companies that have [thousands of users](https://github.com/wekan/wekan/wiki/AWS) and at healthcare.
Wekan uses xss package for input fields like cards, as you can see from
[package.json](https://github.com/wekan/wekan/blob/devel/package.json). Other used versions can be seen from
[Meteor versions file](https://github.com/wekan/wekan/blob/devel/.meteor/versions).
Forms can include markdown links, html, image tags etc like you see at https://wekan.github.io .
It's possible to add attachments to cards, and markdown/html links to files.
Wekan attachments are not accessible without logging in. Import from Trello works by copying
Trello export JSON to Wekan Trello import page, and in Trello JSON file there is direct links to all publicly
accessible Trello attachment files, that Standalone Wekan downloads directly to Wekan MongoDB database in
[CollectionFS](https://github.com/wekan/wekan/pull/875) format. When Wekan board is exported in
Wekan JSON format, all board attachments are included in Wekan JSON file as base64 encoded text.
That Wekan JSON format file can be imported to Sandstorm Wekan with all the attachments, when we get
latest Wekan version working on Sandstorm, only couple of bugs are left before that. In Sandstorm it's not
possible yet to import from Trello with attachments, because Wekan does not implement Sandstorm-compatible
access to outside of Wekan grain.
Standalone Wekan only has password auth currently, there is work in progress to add
[oauth2](https://github.com/wekan/wekan/pull/1578), [Openid](https://github.com/wekan/wekan/issues/538),
[LDAP](https://github.com/wekan/wekan/issues/119) etc. If you need more login security for Standalone Wekan now,
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
like for example [AWS WAF](https://aws.amazon.com/waf/).
[All Wekan Platforms](https://github.com/wekan/wekan/wiki/Platforms)
### Sandstorm Wekan Security
On Sandstorm platform using environment variable Standalone Wekan features like Admin Panel etc are
turned off, because Sandstorm platform provides SSO for all apps running on Sandstorm.
[Sandstorm](https://sandstorm.io) is separate Open Source platform that has been
[security audited](https://sandstorm.io/news/2017-03-02-security-review) and found bugs fixed.
Sandstorm also has passwordless login, LDAP, SAML, Google etc auth options already.
At Sandstorm code is read-only and signed by app maintainers, only grain content can be modified.
Wekan at Sandstorm runs in sandboxed grain, it does not have access elsewhere without user-visible
PowerBox request or opening randomly-generated API key URL.
Also read [Sandstorm Security Practices](https://docs.sandstorm.io/en/latest/using/security-practices/) and
[Sandstorm Security non-events](https://docs.sandstorm.io/en/latest/using/security-non-events/).
For Sandstorm specific security issues you can contact [kentonv](https://github.com/kentonv) by email.
## What Wekan bugs are eligible?
Any typical web security bugs. If any of the previously mentioned is somehow problematic and
a security issue, we'd like to know about it, and also how to fix it:
- Cross-site Scripting
- Open redirect
- Cross-site request forgery
- File inclusion
- Authentication bypass
- Server-side code execution
## What Wekan bugs are NOT eligible?
Typical already known or "no impact" bugs such as:
- Brute force password guessign. Currently there is
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release).
- Security issues related to that Wekan uses Meteor 1.6.0.1 related packages, and upgrading to newer
Meteor 1.6.1 is complicated process that requires lots of changes to many dependency packages.
Upgrading [has been tried many times, spending a lot of time](https://github.com/meteor/meteor/issues/9609)
but there still is issues. Helping with package upgrades is very welcome.
- [Wekan API old tokens not replaced correctly](https://github.com/wekan/wekan/issues/1437)
- Missing Cookie flags on non-session cookies or 3rd party cookies
- Logout CSRF
- Social engineering
- Denial of service
- SSL BEAST/CRIME/etc. Wekan does not have SSL built-in, it uses Caddy/Nginx/Apache etc at front.
Integrated Caddy support is updated often.
- Email spoofing, SPF, DMARC & DKIM. Wekan does not include email server.
Wekan is Open Source with MIT license, and free to use also for commercial use.
We welcome all fixes to improve security by email to security (at) wekan.team .
## Bonus Points
If your Responsible Security Disclosure includes code for fixing security issue,
you get bonus points, as seen on [Hall of Fame](https://wekan.github.io/hall-of-fame).
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "Wekan",
"description": "The open-source Trello-like kanban",
"description": "The open-source kanban",
"repository": "https://github.com/wekan/wekan",
"logo": "https://raw.githubusercontent.com/wekan/wekan/master/meta/icons/wekan-150.png",
"keywords": ["productivity", "tool", "team", "kanban"],
@@ -53,6 +53,9 @@ template(name="boardActivities")
if($eq activityType 'createCard')
| {{{_ 'activity-added' cardLink boardLabel}}}.
if($eq activityType 'createCustomField')
| {{_ 'activity-customfield-created' customField}}.
if($eq activityType 'createList')
| {{_ 'activity-added' list.title boardLabel}}.
+17 -4
View File
@@ -8,16 +8,24 @@ BlazeComponent.extendComponent({
const sidebar = this.parentComponent(); // XXX for some reason not working
sidebar.callFirstWith(null, 'resetNextPeak');
this.autorun(() => {
const mode = this.data().mode;
let mode = this.data().mode;
const capitalizedMode = Utils.capitalize(mode);
const id = Session.get(`current${capitalizedMode}`);
let thisId, searchId;
if (mode === 'linkedcard' || mode === 'linkedboard') {
thisId = Session.get('currentCard');
searchId = Cards.findOne({_id: thisId}).linkedId;
mode = mode.replace('linked', '');
} else {
thisId = Session.get(`current${capitalizedMode}`);
searchId = thisId;
}
const limit = this.page.get() * activitiesPerPage;
const user = Meteor.user();
const hideSystem = user ? user.hasHiddenSystemMessages() : false;
if (id === null)
if (searchId === null)
return;
this.subscribe('activities', mode, id, limit, hideSystem, () => {
this.subscribe('activities', mode, searchId, limit, hideSystem, () => {
this.loadNextPageLocked = false;
// If the sibear peak hasn't increased, that mean that there are no more
@@ -91,6 +99,11 @@ BlazeComponent.extendComponent({
}, attachment.name()));
},
customField() {
const customField = this.currentData().customField();
return customField.name;
},
events() {
return [{
// XXX We should use Popup.afterConfirmation here
+9 -2
View File
@@ -21,11 +21,18 @@ BlazeComponent.extendComponent({
'submit .js-new-comment-form'(evt) {
const input = this.getInput();
const text = input.val().trim();
const card = this.currentData();
let boardId = card.boardId;
let cardId = card._id;
if (card.isLinkedCard()) {
boardId = Cards.findOne(card.linkedId).boardId;
cardId = card.linkedId;
}
if (text) {
CardComments.insert({
text,
boardId: this.currentData().boardId,
cardId: this.currentData()._id,
boardId,
cardId,
});
resetCommentInput(input);
Tracker.flush();
+12 -4
View File
@@ -6,9 +6,17 @@ template(name="archivedBoards")
ul.archived-lists
each archivedBoards
li.archived-lists-item
button.js-restore-board
i.fa.fa-undo
| {{_ 'restore-board'}}
= title
div.board-header-btns
button.board-header-btn.js-delete-board
i.fa.fa-trash-o
| {{_ 'delete-board'}}
button.board-header-btn.js-restore-board
i.fa.fa-undo
| {{_ 'restore-board'}}
= title
else
li.no-items-message {{_ 'no-archived-boards'}}
template(name="boardDeletePopup")
p {{_ 'delete-board-confirm-popup'}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
+11
View File
@@ -29,6 +29,17 @@ BlazeComponent.extendComponent({
board.restore();
Utils.goBoardId(board._id);
},
'click .js-delete-board': Popup.afterConfirm('boardDelete', function() {
Popup.close();
const isSandstorm = Meteor.settings && Meteor.settings.public &&
Meteor.settings.public.sandstorm;
if (isSandstorm && Session.get('currentBoard')) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
Boards.remove(currentBoard._id);
}
Boards.remove(this._id);
FlowRouter.go('home');
}),
}];
},
}).register('archivedBoards');
+8
View File
@@ -25,3 +25,11 @@ template(name="boardBody")
+swimlane(this)
if isViewLists
+listsGroup
if isViewCalendar
+calendarView
template(name="calendarView")
.calendar-view.swimlane
if currentCard
+cardDetails(currentCard)
+fullcalendar(calendarOptions)
+95 -8
View File
@@ -1,5 +1,5 @@
const subManager = new SubsManager();
const { calculateIndex } = Utils;
const { calculateIndex, enableClickOnTouch } = Utils;
BlazeComponent.extendComponent({
onCreated() {
@@ -74,6 +74,9 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-swimlane:not(.placeholder)');
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
}
@@ -87,15 +90,21 @@ BlazeComponent.extendComponent({
},
isViewSwimlanes() {
const currentBoardId = Session.get('currentBoard');
const board = Boards.findOne(currentBoardId);
return (board.view === 'board-view-swimlanes');
const currentUser = Meteor.user();
if (!currentUser) return false;
return (currentUser.profile.boardView === 'board-view-swimlanes');
},
isViewLists() {
const currentBoardId = Session.get('currentBoard');
const board = Boards.findOne(currentBoardId);
return (board.view === 'board-view-lists');
const currentUser = Meteor.user();
if (!currentUser) return true;
return (currentUser.profile.boardView === 'board-view-lists');
},
isViewCalendar() {
const currentUser = Meteor.user();
if (!currentUser) return true;
return (currentUser.profile.boardView === 'board-view-cal');
},
openNewListForm() {
@@ -107,7 +116,6 @@ BlazeComponent.extendComponent({
.childComponents('addListForm')[0].open();
}
},
events() {
return [{
// XXX The board-overlay div should probably be moved to the parent
@@ -140,3 +148,82 @@ BlazeComponent.extendComponent({
},
}).register('boardBody');
BlazeComponent.extendComponent({
onRendered() {
this.autorun(function(){
$('#calendar-view').fullCalendar('refetchEvents');
});
},
calendarOptions() {
return {
id: 'calendar-view',
defaultView: 'agendaDay',
editable: true,
timezone: 'local',
header: {
left: 'title today prev,next',
center: 'agendaDay,listDay,timelineDay agendaWeek,listWeek,timelineWeek month,timelineMonth timelineYear',
right: '',
},
// height: 'parent', nope, doesn't work as the parent might be small
height: 'auto',
/* TODO: lists as resources: https://fullcalendar.io/docs/vertical-resource-view */
navLinks: true,
nowIndicator: true,
businessHours: {
// days of week. an array of zero-based day of week integers (0=Sunday)
dow: [ 1, 2, 3, 4, 5 ], // Monday - Friday
start: '8:00',
end: '18:00',
},
locale: TAPi18n.getLanguage(),
events(start, end, timezone, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const events = [];
currentBoard.cardsInInterval(start.toDate(), end.toDate()).forEach(function(card){
events.push({
id: card._id,
title: card.title,
start: card.startAt,
end: card.endAt,
allDay: Math.abs(card.endAt.getTime() - card.startAt.getTime()) / 1000 === 24*3600,
url: FlowRouter.url('card', {
boardId: currentBoard._id,
slug: currentBoard.slug,
cardId: card._id,
}),
});
});
callback(events);
},
eventResize(event, delta, revertFunc) {
let isOk = false;
const card = Cards.findOne(event.id);
if (card) {
card.setEnd(event.end.toDate());
isOk = true;
}
if (!isOk) {
revertFunc();
}
},
eventDrop(event, delta, revertFunc) {
let isOk = false;
const card = Cards.findOne(event.id);
if (card) {
// TODO: add a flag for allDay events
if (!event.allDay) {
card.setStart(event.start.toDate());
card.setEnd(event.end.toDate());
isOk = true;
}
}
if (!isOk) {
revertFunc();
}
},
};
},
}).register('calendarView');
+3 -2
View File
@@ -15,12 +15,13 @@ position()
.board-wrapper
position: cover
overflow-y: hidden;
overflow-x: hidden
overflow-y: hidden
.board-canvas
position: cover
transition: margin .1s
overflow-y: auto;
overflow-y: auto
&.is-sibling-sidebar-open
margin-right: 248px
+62 -3
View File
@@ -2,7 +2,8 @@ template(name="boardHeaderBar")
h1.header-board-menu
with currentBoard
a(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}")
= title
+viewer
= title
.board-header-btns.left
unless isMiniScreen
@@ -71,7 +72,7 @@ template(name="boardHeaderBar")
title="{{_ 'log-in'}}")
i.fa.fa-sign-in
span {{_ 'log-in'}}
if isSandstorm
if currentUser
a.board-header-btn.js-open-archived-board
@@ -94,7 +95,7 @@ template(name="boardHeaderBar")
a.board-header-btn.js-toggle-board-view(
title="{{_ 'board-view'}}")
i.fa.fa-th-large
span {{_ currentBoard.view}}
span {{_ currentUser.profile.boardView}}
if canModifyBoard
a.board-header-btn.js-multiselection-activate(
@@ -112,6 +113,7 @@ template(name="boardHeaderBar")
template(name="boardMenuPopup")
ul.pop-over-list
li: a.js-custom-fields {{_ 'custom-fields'}}
li: a.js-open-archives {{_ 'archived-items'}}
if currentUser.isBoardAdmin
li: a.js-change-board-color {{_ 'board-change-color'}}
@@ -128,11 +130,18 @@ template(name="boardMenuPopup")
li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
li: a.js-archive-board {{_ 'archive-board'}}
li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}}
hr
ul.pop-over-list
li: a.js-subtask-settings {{_ 'subtask-settings'}}
if isSandstorm
hr
ul.pop-over-list
li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
li: a.js-import-board {{_ 'import-board-c'}}
hr
ul.pop-over-list
li: a.js-subtask-settings {{_ 'subtask-settings'}}
template(name="boardVisibilityList")
ul.pop-over-list
@@ -191,6 +200,56 @@ template(name="boardChangeColorPopup")
if isSelected
i.fa.fa-check
template(name="boardSubtaskSettingsPopup")
form.board-subtask-settings
h3 {{_ 'show-parent-in-minicard'}}
a#prefix-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
.materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
span {{_ 'prefix-with-full-path'}}
a#prefix-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
.materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
span {{_ 'prefix-with-parent'}}
a#subtext-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
.materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
span {{_ 'subtext-with-full-path'}}
a#subtext-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
.materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
span {{_ 'subtext-with-parent'}}
a#no-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
.materialCheckBox(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
span {{_ 'no-parent'}}
div
hr
div.check-div
a.flex.js-field-has-subtasks(class="{{#if allowsSubtasks}}is-checked{{/if}}")
.materialCheckBox(class="{{#if allowsSubtasks}}is-checked{{/if}}")
span {{_ 'show-subtasks-field'}}
label
| {{_ 'deposit-subtasks-board'}}
select.js-field-deposit-board(disabled="{{#unless allowsSubtasks}}disabled{{/unless}}")
each boards
if isBoardSelected
option(value=_id selected="selected") {{title}}
else
option(value=_id) {{title}}
if isNullBoardSelected
option(value='null' selected="selected") {{_ 'custom-field-dropdown-none'}}
else
option(value='null') {{_ 'custom-field-dropdown-none'}}
div
hr
label
| {{_ 'deposit-subtasks-list'}}
select.js-field-deposit-list(disabled="{{#unless hasLists}}disabled{{/unless}}")
each lists
if isListSelected
option(value=_id selected="selected") {{title}}
else
option(value=_id) {{title}}
template(name="createBoard")
form
label
+114 -13
View File
@@ -1,5 +1,9 @@
Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-custom-fields'() {
Sidebar.setView('customFields');
Popup.close();
},
'click .js-open-archives'() {
Sidebar.setView('archives');
Popup.close();
@@ -13,8 +17,15 @@ Template.boardMenuPopup.events({
// confirm that the board was successfully archived.
FlowRouter.go('home');
}),
'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
Popup.close();
Boards.remove(currentBoard._id);
FlowRouter.go('home');
}),
'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'),
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
});
Template.boardMenuPopup.helpers({
@@ -77,19 +88,13 @@ BlazeComponent.extendComponent({
Modal.open('archivedBoards');
},
'click .js-toggle-board-view'() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
if (currentBoard.view === 'board-view-swimlanes') {
Boards.update(currentBoard._id, {
$set: {
view: 'board-view-lists',
},
});
} else if (currentBoard.view === 'board-view-lists') {
Boards.update(currentBoard._id, {
$set: {
view: 'board-view-swimlanes',
},
});
const currentUser = Meteor.user();
if (currentUser.profile.boardView === 'board-view-swimlanes') {
currentUser.setBoardView('board-view-cal');
} else if (currentUser.profile.boardView === 'board-view-lists') {
currentUser.setBoardView('board-view-swimlanes');
} else if (currentUser.profile.boardView === 'board-view-cal') {
currentUser.setBoardView('board-view-lists');
}
},
'click .js-open-filter-view'() {
@@ -149,6 +154,102 @@ BlazeComponent.extendComponent({
},
}).register('boardChangeColorPopup');
BlazeComponent.extendComponent({
onCreated() {
this.currentBoard = Boards.findOne(Session.get('currentBoard'));
},
allowsSubtasks() {
return this.currentBoard.allowsSubtasks;
},
isBoardSelected() {
return this.currentBoard.subtasksDefaultBoardId === this.currentData()._id;
},
isNullBoardSelected() {
return (this.currentBoard.subtasksDefaultBoardId === null) || (this.currentBoard.subtasksDefaultBoardId === undefined);
},
boards() {
return Boards.find({
archived: false,
'members.userId': Meteor.userId(),
}, {
sort: ['title'],
});
},
lists() {
return Lists.find({
boardId: this.currentBoard._id,
archived: false,
}, {
sort: ['title'],
});
},
hasLists() {
return this.lists().count() > 0;
},
isListSelected() {
return this.currentBoard.subtasksDefaultBoardId === this.currentData()._id;
},
presentParentTask() {
let result = this.currentBoard.presentParentTask;
if ((result === null) || (result === undefined)) {
result = 'no-parent';
}
return result;
},
events() {
return [{
'click .js-field-has-subtasks'(evt) {
evt.preventDefault();
this.currentBoard.allowsSubtasks = !this.currentBoard.allowsSubtasks;
this.currentBoard.setAllowsSubtasks(this.currentBoard.allowsSubtasks);
$('.js-field-has-subtasks .materialCheckBox').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
$('.js-field-has-subtasks').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
$('.js-field-deposit-board').prop('disabled', !this.currentBoard.allowsSubtasks);
},
'change .js-field-deposit-board'(evt) {
let value = evt.target.value;
if (value === 'null') {
value = null;
}
this.currentBoard.setSubtasksDefaultBoardId(value);
evt.preventDefault();
},
'change .js-field-deposit-list'(evt) {
this.currentBoard.setSubtasksDefaultListId(evt.target.value);
evt.preventDefault();
},
'click .js-field-show-parent-in-minicard'(evt) {
const value = evt.target.id || $(evt.target).parent()[0].id || $(evt.target).parent()[0].parent()[0].id;
const options = [
'prefix-with-full-path',
'prefix-with-parent',
'subtext-with-full-path',
'subtext-with-parent',
'no-parent'];
options.forEach(function(element) {
if (element !== value) {
$(`#${element} .materialCheckBox`).toggleClass('is-checked', false);
$(`#${element}`).toggleClass('is-checked', false);
}
});
$(`#${value} .materialCheckBox`).toggleClass('is-checked', true);
$(`#${value}`).toggleClass('is-checked', true);
this.currentBoard.setPresentParentTask(value);
evt.preventDefault();
},
}];
},
}).register('boardSubtaskSettingsPopup');
const CreateBoard = BlazeComponent.extendComponent({
template() {
return 'createBoard';
+19
View File
@@ -1,3 +1,22 @@
.integration-form
padding: 5px
border-bottom: 1px solid #ccc
.flex
display: -webkit-box
display: -moz-box
display: -webkit-flex
display: -moz-flex
display: -ms-flexbox
display: flex
.option
@extends .flex
-webkit-border-radius: 3px;
border-radius: 3px;
background: #fff;
text-decoration: none;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2);
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
margin-top: 5px;
padding: 5px;
+2 -2
View File
@@ -44,9 +44,9 @@ $spaceBetweenTiles = 16px
line-height: 22px
.board-list-item-desc
color: rgba(255, 255, 255, .5)
color: #fff
display: block
font-size: 10px
font-size: 14px
font-weight: 400
line-height: 18px
+7 -2
View File
@@ -57,8 +57,13 @@ Template.cardAttachmentsPopup.events({
const card = this;
FS.Utility.eachFile(evt, (f) => {
const file = new FS.File(f);
file.boardId = card.boardId;
file.cardId = card._id;
if (card.isLinkedCard()) {
file.boardId = Cards.findOne(card.linkedId).boardId;
file.cardId = card.linkedId;
} else {
file.boardId = card.boardId;
file.cardId = card._id;
}
file.userId = Meteor.userId();
const attachment = Attachments.insert(file);
@@ -0,0 +1,76 @@
template(name="cardCustomFieldsPopup")
ul.pop-over-list
each board.customFields
li.item(class="")
a.name.js-select-field(href="#")
span.full-name
= name
if hasCustomField
i.fa.fa-check
hr
a.quiet-button.full.js-settings
i.fa.fa-cog
span {{_ 'settings'}}
template(name="cardCustomField")
+Template.dynamic(template=getTemplate)
template(name="cardCustomField-text")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-text")
+editor(autofocus=true)
= value
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if value
+viewer
= value
else
| {{_ 'edit'}}
template(name="cardCustomField-number")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-number")
input(type="number" value=data.value)
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if value
= value
else
| {{_ 'edit'}}
template(name="cardCustomField-date")
if canModifyCard
a.js-edit-date(title="{{showTitle}}" class="{{classes}}")
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
else
| {{_ 'edit'}}
template(name="cardCustomField-dropdown")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-dropdown")
select.inline
each items
if($eq data.value this._id)
option(value=_id selected="selected") {{name}}
else
option(value=_id) {{name}}
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if value
+viewer
= selectedItem
else
| {{_ 'edit'}}
+179
View File
@@ -0,0 +1,179 @@
Template.cardCustomFieldsPopup.helpers({
hasCustomField() {
const card = Cards.findOne(Session.get('currentCard'));
const customFieldId = this._id;
return card.customFieldIndex(customFieldId) > -1;
},
});
Template.cardCustomFieldsPopup.events({
'click .js-select-field'(evt) {
const card = Cards.findOne(Session.get('currentCard'));
const customFieldId = this._id;
card.toggleCustomField(customFieldId);
evt.preventDefault();
},
'click .js-settings'(evt) {
EscapeActions.executeUpTo('detailsPane');
Sidebar.setView('customFields');
evt.preventDefault();
},
});
// cardCustomField
const CardCustomField = BlazeComponent.extendComponent({
getTemplate() {
return `cardCustomField-${this.data().definition.type}`;
},
onCreated() {
const self = this;
self.card = Cards.findOne(Session.get('currentCard'));
self.customFieldId = this.data()._id;
},
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
});
CardCustomField.register('cardCustomField');
// cardCustomField-text
(class extends CardCustomField {
onCreated() {
super.onCreated();
}
events() {
return [{
'submit .js-card-customfield-text'(evt) {
evt.preventDefault();
const value = this.currentComponent().getValue();
this.card.setCustomField(this.customFieldId, value);
},
}];
}
}).register('cardCustomField-text');
// cardCustomField-number
(class extends CardCustomField {
onCreated() {
super.onCreated();
}
events() {
return [{
'submit .js-card-customfield-number'(evt) {
evt.preventDefault();
const value = parseInt(this.find('input').value, 10);
this.card.setCustomField(this.customFieldId, value);
},
}];
}
}).register('cardCustomField-number');
// cardCustomField-date
(class extends CardCustomField {
onCreated() {
super.onCreated();
const self = this;
self.date = ReactiveVar();
self.now = ReactiveVar(moment());
window.setInterval(() => {
self.now.set(moment());
}, 60000);
self.autorun(() => {
self.date.set(moment(self.data().value));
});
}
showDate() {
// this will start working once mquandalle:moment
// is updated to at least moment.js 2.10.5
// until then, the date is displayed in the "L" format
return this.date.get().calendar(null, {
sameElse: 'llll',
});
}
showISODate() {
return this.date.get().toISOString();
}
classes() {
if (this.date.get().isBefore(this.now.get(), 'minute') &&
this.now.get().isBefore(this.data().value)) {
return 'current';
}
return '';
}
showTitle() {
return `${TAPi18n.__('card-start-on')} ${this.date.get().format('LLLL')}`;
}
events() {
return [{
'click .js-edit-date': Popup.open('cardCustomField-date'),
}];
}
}).register('cardCustomField-date');
// cardCustomField-datePopup
(class extends DatePicker {
onCreated() {
super.onCreated();
const self = this;
self.card = Cards.findOne(Session.get('currentCard'));
self.customFieldId = this.data()._id;
this.data().value && this.date.set(moment(this.data().value));
}
_storeDate(date) {
this.card.setCustomField(this.customFieldId, date);
}
_deleteDate() {
this.card.setCustomField(this.customFieldId, '');
}
}).register('cardCustomField-datePopup');
// cardCustomField-dropdown
(class extends CardCustomField {
onCreated() {
super.onCreated();
this._items = this.data().definition.settings.dropdownItems;
this.items = this._items.slice(0);
this.items.unshift({
_id: '',
name: TAPi18n.__('custom-field-dropdown-none'),
});
}
selectedItem() {
const selected = this._items.find((item) => {
return item._id === this.data().value;
});
return (selected) ? selected.name : TAPi18n.__('custom-field-dropdown-unknown');
}
events() {
return [{
'submit .js-card-customfield-dropdown'(evt) {
evt.preventDefault();
const value = this.find('select').value;
this.card.setCustomField(this.customFieldId, value);
},
}];
}
}).register('cardCustomField-dropdown');
-16
View File
@@ -1,19 +1,3 @@
template(name="editCardDate")
.edit-card-date
form.edit-date
.fields
.left
label(for="date") {{_ 'date'}}
input.js-date-field#date(type="text" name="date" value=showDate placeholder=dateFormat autofocus)
.right
label(for="time") {{_ 'time'}}
input.js-time-field#time(type="text" name="time" value=showTime placeholder=timeFormat)
.js-datepicker
if error.get
.warning {{_ error.get}}
button.primary.wide.left.js-submit-date(type="submit") {{_ 'save'}}
button.js-delete-date.negate.wide.right.js-delete-date {{_ 'delete'}}
template(name="dateBadge")
if canModifyCard
a.js-edit-date.card-date(title="{{showTitle}}" class="{{classes}}")
+167 -20
View File
@@ -1,5 +1,5 @@
// Edit start & due dates
const EditCardDate = BlazeComponent.extendComponent({
// Edit received, start, due & end dates
BlazeComponent.extendComponent({
template() {
return 'editCardDate';
},
@@ -92,11 +92,35 @@ Template.dateBadge.helpers({
},
});
// editCardStartDatePopup
(class extends EditCardDate {
// editCardReceivedDatePopup
(class extends DatePicker {
onCreated() {
super.onCreated();
this.data().startAt && this.date.set(moment(this.data().startAt));
this.data().getReceived() && this.date.set(moment(this.data().getReceived()));
}
_storeDate(date) {
this.card.setReceived(date);
}
_deleteDate() {
this.card.setReceived(null);
}
}).register('editCardReceivedDatePopup');
// editCardStartDatePopup
(class extends DatePicker {
onCreated() {
super.onCreated();
this.data().getStart() && this.date.set(moment(this.data().getStart()));
}
onRendered() {
super.onRendered();
if (moment.isDate(this.card.getReceived())) {
this.$('.js-datepicker').datepicker('setStartDate', this.card.getReceived());
}
}
_storeDate(date) {
@@ -104,21 +128,21 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.unsetStart();
this.card.setStart(null);
}
}).register('editCardStartDatePopup');
// editCardDueDatePopup
(class extends EditCardDate {
(class extends DatePicker {
onCreated() {
super.onCreated();
this.data().dueAt && this.date.set(moment(this.data().dueAt));
this.data().getDue() && this.date.set(moment(this.data().getDue()));
}
onRendered() {
super.onRendered();
if (moment.isDate(this.card.startAt)) {
this.$('.js-datepicker').datepicker('setStartDate', this.card.startAt);
if (moment.isDate(this.card.getStart())) {
this.$('.js-datepicker').datepicker('setStartDate', this.card.getStart());
}
}
@@ -127,12 +151,35 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.unsetDue();
this.card.setDue(null);
}
}).register('editCardDueDatePopup');
// editCardEndDatePopup
(class extends DatePicker {
onCreated() {
super.onCreated();
this.data().getEnd() && this.date.set(moment(this.data().getEnd()));
}
// Display start & due dates
onRendered() {
super.onRendered();
if (moment.isDate(this.card.getStart())) {
this.$('.js-datepicker').datepicker('setStartDate', this.card.getStart());
}
}
_storeDate(date) {
this.card.setEnd(date);
}
_deleteDate() {
this.card.setEnd(null);
}
}).register('editCardEndDatePopup');
// Display received, start, due & end dates
const CardDate = BlazeComponent.extendComponent({
template() {
return 'dateBadge';
@@ -161,21 +208,66 @@ const CardDate = BlazeComponent.extendComponent({
},
});
class CardReceivedDate extends CardDate {
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().getReceived()));
});
}
classes() {
let classes = 'received-date ';
const dueAt = this.data().getDue();
const endAt = this.data().getEnd();
const startAt = this.data().getStart();
const theDate = this.date.get();
// if dueAt, endAt and startAt exist & are > receivedAt, receivedAt doesn't need to be flagged
if (((startAt) && (theDate.isAfter(dueAt))) ||
((endAt) && (theDate.isAfter(endAt))) ||
((dueAt) && (theDate.isAfter(dueAt))))
classes += 'long-overdue';
else
classes += 'current';
return classes;
}
showTitle() {
return `${TAPi18n.__('card-received-on')} ${this.date.get().format('LLLL')}`;
}
events() {
return super.events().concat({
'click .js-edit-date': Popup.open('editCardReceivedDate'),
});
}
}
CardReceivedDate.register('cardReceivedDate');
class CardStartDate extends CardDate {
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().startAt));
self.date.set(moment(self.data().getStart()));
});
}
classes() {
let classes = 'start-date' + ' ';
if (this.date.get().isBefore(this.now.get(), 'minute') &&
this.now.get().isBefore(this.data().dueAt)) {
const dueAt = this.data().getDue();
const endAt = this.data().getEnd();
const theDate = this.date.get();
const now = this.now.get();
// if dueAt or endAt exist & are > startAt, startAt doesn't need to be flagged
if (((endAt) && (theDate.isAfter(endAt))) ||
((dueAt) && (theDate.isAfter(dueAt))))
classes += 'long-overdue';
else if (theDate.isBefore(now, 'minute'))
classes += 'almost-due';
else
classes += 'current';
}
return classes;
}
@@ -196,17 +288,26 @@ class CardDueDate extends CardDate {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().dueAt));
self.date.set(moment(self.data().getDue()));
});
}
classes() {
let classes = 'due-date' + ' ';
if (this.now.get().diff(this.date.get(), 'days') >= 2)
const endAt = this.data().getEnd();
const theDate = this.date.get();
const now = this.now.get();
// if the due date is after the end date, green - done early
if ((endAt) && (theDate.isAfter(endAt)))
classes += 'current';
// if there is an end date, don't need to flag the due date
else if (endAt)
classes += '';
else if (now.diff(theDate, 'days') >= 2)
classes += 'long-overdue';
else if (this.now.get().diff(this.date.get(), 'minute') >= 0)
else if (now.diff(theDate, 'minute') >= 0)
classes += 'due';
else if (this.now.get().diff(this.date.get(), 'days') >= -1)
else if (now.diff(theDate, 'days') >= -1)
classes += 'almost-due';
return classes;
}
@@ -223,6 +324,46 @@ class CardDueDate extends CardDate {
}
CardDueDate.register('cardDueDate');
class CardEndDate extends CardDate {
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().getEnd()));
});
}
classes() {
let classes = 'end-date' + ' ';
const dueAt = this.data().getDue();
const theDate = this.date.get();
if (theDate.diff(dueAt, 'days') >= 2)
classes += 'long-overdue';
else if (theDate.diff(dueAt, 'days') >= 0)
classes += 'due';
else if (theDate.diff(dueAt, 'days') >= -2)
classes += 'almost-due';
return classes;
}
showTitle() {
return `${TAPi18n.__('card-end-on')} ${this.date.get().format('LLLL')}`;
}
events() {
return super.events().concat({
'click .js-edit-date': Popup.open('editCardEndDate'),
});
}
}
CardEndDate.register('cardEndDate');
(class extends CardReceivedDate {
showDate() {
return this.date.get().format('l');
}
}).register('minicardReceivedDate');
(class extends CardStartDate {
showDate() {
return this.date.get().format('l');
@@ -234,3 +375,9 @@ CardDueDate.register('cardDueDate');
return this.date.get().format('l');
}
}).register('minicardDueDate');
(class extends CardEndDate {
showDate() {
return this.date.get().format('l');
}
}).register('minicardEndDate');
+10 -19
View File
@@ -1,22 +1,3 @@
.edit-card-date
.fields
.left
width: 56%
.right
width: 38%
.datepicker
width: 100%
table
width: 100%
border: none
border-spacing: 0
border-collapse: collapse
thead
background: none
td, th
box-sizing: border-box
.card-date
display: block
border-radius: 4px
@@ -49,12 +30,22 @@
&:hover, &.is-active
background-color: darken(#fd5d47, 7)
&.end-date
time
&::before
content: "\f253" // symbol: fa-hourglass-end
&.due-date
time
&::before
content: "\f090" // symbol: fa-sign-in
&.start-date
time
&::before
content: "\f251" // symbol: fa-hourglass-start
&.received-date
time
&::before
content: "\f08b" // symbol: fa-sign-out
+169 -49
View File
@@ -10,17 +10,63 @@ template(name="cardDetails")
h2.card-details-title.js-card-title(
class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
+viewer
= title
= getTitle
if isWatching
i.fa.fa-eye.card-details-watch
.card-details-path
each parentList
| &nbsp; &gt; &nbsp;
a.js-parent-card(href=linkForCard) {{title}}
// else
{{_ 'top-level-card'}}
if isLinkedCard
h3.linked-card-location
+viewer
| {{getBoardTitle}} > {{getTitle}}
if archived
p.warning {{_ 'card-archived'}}
if getArchived
if isLinkedBoard
p.warning {{_ 'board-archived'}}
else
p.warning {{_ 'card-archived'}}
.card-details-items
.card-details-item.card-details-item-received
h3.card-details-item-title {{_ 'card-received'}}
if getReceived
+cardReceivedDate
else
if canModifyCard
a.js-received-date {{_ 'add'}}
.card-details-item.card-details-item-start
h3.card-details-item-title {{_ 'card-start'}}
if getStart
+cardStartDate
else
if canModifyCard
a.js-start-date {{_ 'add'}}
.card-details-item.card-details-item-due
h3.card-details-item-title {{_ 'card-due'}}
if getDue
+cardDueDate
else
if canModifyCard
a.js-due-date {{_ 'add'}}
.card-details-item.card-details-item-end
h3.card-details-item-title {{_ 'card-end'}}
if getEnd
+cardEndDate
else
if canModifyCard
a.js-end-date {{_ 'add'}}
.card-details-items
.card-details-item.card-details-item-members
h3.card-details-item-title {{_ 'members'}}
each members
each getMembers
+userAvatar(userId=this cardId=../_id)
| {{! XXX Hack to hide syntaxic coloration /// }}
if canModifyCard
@@ -36,20 +82,17 @@ template(name="cardDetails")
a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}")
i.fa.fa-plus
if startAt
.card-details-item.card-details-item-start
h3.card-details-item-title {{_ 'card-start'}}
+cardStartDate
if dueAt
.card-details-item.card-details-item-due
h3.card-details-item-title {{_ 'card-due'}}
+cardDueDate
.card-details-items
each customFieldsWD
.card-details-item.card-details-item-customfield
h3.card-details-item-title
= definition.name
+cardCustomField
.card-details-items
if spentTime
if getSpentTime
.card-details-item.card-details-item-spent
if isOvertime
if getIsOvertime
h3.card-details-item-title {{_ 'overtime-hours'}}
else
h3.card-details-item-title {{_ 'spent-time-hours'}}
@@ -60,15 +103,15 @@ template(name="cardDetails")
h3.card-details-item-title {{_ 'description'}}
+inlinedCardDescription(classNames="card-description js-card-description")
+editor(autofocus=true)
| {{getUnsavedValue 'cardDescription' _id description}}
| {{getUnsavedValue 'cardDescription' _id getDescription}}
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if description
if getDescription
+viewer
= description
= getDescription
else
| {{_ 'edit'}}
if (hasUnsavedValue 'cardDescription' _id)
@@ -77,44 +120,101 @@ template(name="cardDetails")
a.js-open-inlined-form {{_ 'view-it'}}
= ' - '
a.js-close-inlined-form {{_ 'discard'}}
else if description
else if getDescription
h3.card-details-item-title {{_ 'description'}}
+viewer
= description
= getDescription
.card-details-items
.card-details-item.card-details-item-name
h3.card-details-item-title {{_ 'requested-by'}}
if canModifyCard
+inlinedForm(classNames="js-card-details-requester")
+editCardRequesterForm
else
a.js-open-inlined-form
if getRequestedBy
+viewer
= getRequestedBy
else
| {{_ 'add'}}
else if getRequestedBy
+viewer
= getRequestedBy
.card-details-item.card-details-item-name
h3.card-details-item-title {{_ 'assigned-by'}}
if canModifyCard
+inlinedForm(classNames="js-card-details-assigner")
+editCardAssignerForm
else
a.js-open-inlined-form
if getAssignedBy
+viewer
= getAssignedBy
else
| {{_ 'add'}}
else if getRequestedBy
+viewer
= getAssignedBy
hr
+checklists(cardId = _id)
if currentBoard.allowsSubtasks
hr
+subtasks(cardId = _id)
hr
h2
h3
i.fa.fa-paperclip
| {{_ 'attachments'}}
+attachmentsGalery
hr
.activity-title
h2 {{ _ 'activity'}}
if currentUser.isBoardMember
.material-toggle-switch
span.toggle-switch-title {{_ 'hide-system-messages'}}
if hiddenSystemMessages
input.toggle-switch(type="checkbox" id="toggleButton" checked="checked")
else
input.toggle-switch(type="checkbox" id="toggleButton")
label.toggle-label(for="toggleButton")
unless currentUser.isNoComments
.activity-title
h3 {{ _ 'activity'}}
if currentUser.isBoardMember
.material-toggle-switch
span.toggle-switch-title {{_ 'hide-system-messages'}}
if hiddenSystemMessages
input.toggle-switch(type="checkbox" id="toggleButton" checked="checked")
else
input.toggle-switch(type="checkbox" id="toggleButton")
label.toggle-label(for="toggleButton")
if currentUser.isBoardMember
+commentForm
if isLoaded.get
+activities(card=this mode="card")
unless currentUser.isNoComments
+commentForm
unless currentUser.isNoComments
if isLoaded.get
if isLinkedCard
+activities(card=this mode="linkedcard")
else if isLinkedBoard
+activities(card=this mode="linkedboard")
else
+activities(card=this mode="card")
template(name="editCardTitleForm")
textarea.js-edit-card-title(rows='1' autofocus)
= title
= getTitle
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-card-title-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
template(name="editCardRequesterForm")
input.js-edit-card-requester(type='text' autofocus value=getRequestedBy)
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-card-requester-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
template(name="editCardAssignerForm")
input.js-edit-card-assigner(type='text' autofocus value=getAssignedBy)
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-card-assigner-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
template(name="cardDetailsActionsPopup")
ul.pop-over-list
li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}}
@@ -124,8 +224,11 @@ template(name="cardDetailsActionsPopup")
li: a.js-members {{_ 'card-edit-members'}}
li: a.js-labels {{_ 'card-edit-labels'}}
li: a.js-attachments {{_ 'card-edit-attachments'}}
li: a.js-custom-fields {{_ 'card-edit-custom-fields'}}
li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
li: a.js-end-date {{_ 'editCardEndDatePopup-title'}}
li: a.js-spent-time {{_ 'editCardSpentTimePopup-title'}}
hr
ul.pop-over-list
@@ -141,29 +244,19 @@ template(name="cardDetailsActionsPopup")
li: a.js-more {{_ 'cardMorePopup-title'}}
template(name="moveCardPopup")
if isSandstorm
+boardLists
else
+boardsAndLists
+boardsAndLists
template(name="copyCardPopup")
label(for='copy-card-title') {{_ 'title'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
= title
if isSandstorm
+boardLists
else
+boardsAndLists
= getTitle
+boardsAndLists
template(name="copyChecklistToManyCardsPopup")
label(for='copy-checklist-cards-title') {{_ 'copyChecklistToManyCardsPopup-instructions'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
| {{_ 'copyChecklistToManyCardsPopup-format'}}
if isSandstorm
+boardLists
else
+boardsAndLists
+boardsAndLists
template(name="boardsAndLists")
label {{_ 'boards'}}:
@@ -209,10 +302,37 @@ template(name="cardMorePopup")
button.js-copy-card-link-to-clipboard(class="btn") {{_ 'copy-card-link-to-clipboard'}}
span.clearfix
br
h2 {{_ 'change-card-parent'}}
label {{_ 'source-board'}}:
select.js-field-parent-board
each boards
if isParentBoard
option(value="{{_id}}" selected) {{title}}
else
option(value="{{_id}}") {{title}}
if isTopLevel
option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
else
option(value="none") {{_ 'custom-field-dropdown-none'}}
label {{_ 'parent-card'}}:
select.js-field-parent-card
if isTopLevel
option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
else
each cards
if isParentCard
option(value="{{_id}}" selected) {{title}}
else
option(value="{{_id}}") {{title}}
option(value="none") {{_ 'custom-field-dropdown-none'}}
br
| {{_ 'added'}}
span.date(title=card.createdAt) {{ moment createdAt 'LLL' }}
a.js-delete(title="{{_ 'card-delete-notice'}}") {{_ 'delete'}}
template(name="cardDeletePopup")
p {{_ "card-delete-pop"}}
unless archived
+334 -49
View File
@@ -1,4 +1,5 @@
const subManager = new SubsManager();
const { calculateIndexData, enableClickOnTouch } = Utils;
BlazeComponent.extendComponent({
mixins() {
@@ -19,9 +20,14 @@ BlazeComponent.extendComponent({
},
onCreated() {
this.currentBoard = Boards.findOne(Session.get('currentBoard'));
this.isLoaded = new ReactiveVar(false);
this.parentComponent().parentComponent().showOverlay.set(true);
this.parentComponent().parentComponent().mouseHasEnterCardDetails = false;
const boardBody = this.parentComponent().parentComponent();
//in Miniview parent is Board, not BoardBody.
if (boardBody !== null) {
boardBody.showOverlay.set(true);
boardBody.mouseHasEnterCardDetails = false;
}
this.calculateNextPeak();
Meteor.subscribe('unsaved-edits');
@@ -43,7 +49,8 @@ BlazeComponent.extendComponent({
scrollParentContainer() {
const cardPanelWidth = 510;
const bodyBoardComponent = this.parentComponent().parentComponent();
//On Mobile View Parent is Board, Not Board Body. I cant see how this funciton should work then.
if (bodyBoardComponent === null) return;
const $cardView = this.$(this.firstNode());
const $cardContainer = bodyBoardComponent.$('.js-swimlanes');
const cardContainerScroll = $cardContainer.scrollLeft();
@@ -64,12 +71,128 @@ BlazeComponent.extendComponent({
}
},
presentParentTask() {
let result = this.currentBoard.presentParentTask;
if ((result === null) || (result === undefined)) {
result = 'no-parent';
}
return result;
},
linkForCard() {
const card = this.currentData();
let result = '#';
if (card) {
const board = Boards.findOne(card.boardId);
if (board) {
result = FlowRouter.url('card', {
boardId: card.boardId,
slug: board.slug,
cardId: card._id,
});
}
}
return result;
},
onRendered() {
if (!Utils.isMiniScreen()) this.scrollParentContainer();
const $checklistsDom = this.$('.card-checklist-items');
$checklistsDom.sortable({
tolerance: 'pointer',
helper: 'clone',
handle: '.checklist-title',
items: '.js-checklist',
placeholder: 'checklist placeholder',
distance: 7,
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
},
stop(evt, ui) {
let prevChecklist = ui.item.prev('.js-checklist').get(0);
if (prevChecklist) {
prevChecklist = Blaze.getData(prevChecklist).checklist;
}
let nextChecklist = ui.item.next('.js-checklist').get(0);
if (nextChecklist) {
nextChecklist = Blaze.getData(nextChecklist).checklist;
}
const sortIndex = calculateIndexData(prevChecklist, nextChecklist, 1);
$checklistsDom.sortable('cancel');
const checklist = Blaze.getData(ui.item.get(0)).checklist;
Checklists.update(checklist._id, {
$set: {
sort: sortIndex.base,
},
});
},
});
// ugly touch event hotfix
enableClickOnTouch('.card-checklist-items .js-checklist');
const $subtasksDom = this.$('.card-subtasks-items');
$subtasksDom.sortable({
tolerance: 'pointer',
helper: 'clone',
handle: '.subtask-title',
items: '.js-subtasks',
placeholder: 'subtasks placeholder',
distance: 7,
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
},
stop(evt, ui) {
let prevChecklist = ui.item.prev('.js-subtasks').get(0);
if (prevChecklist) {
prevChecklist = Blaze.getData(prevChecklist).subtask;
}
let nextChecklist = ui.item.next('.js-subtasks').get(0);
if (nextChecklist) {
nextChecklist = Blaze.getData(nextChecklist).subtask;
}
const sortIndex = calculateIndexData(prevChecklist, nextChecklist, 1);
$subtasksDom.sortable('cancel');
const subtask = Blaze.getData(ui.item.get(0)).subtask;
Subtasks.update(subtask._id, {
$set: {
subtaskSort: sortIndex.base,
},
});
},
});
// ugly touch event hotfix
enableClickOnTouch('.card-subtasks-items .js-subtasks');
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember();
}
// Disable sorting if the current user is not a board member
this.autorun(() => {
if ($checklistsDom.data('sortable')) {
$checklistsDom.sortable('option', 'disabled', !userIsMember());
}
if ($subtasksDom.data('sortable')) {
$subtasksDom.sortable('option', 'disabled', !userIsMember());
}
});
},
onDestroyed() {
this.parentComponent().parentComponent().showOverlay.set(false);
const parentComponent = this.parentComponent().parentComponent();
//on mobile view parent is Board, not board body.
if (parentComponent === null) return;
parentComponent.showOverlay.set(false);
},
events() {
@@ -100,12 +223,33 @@ BlazeComponent.extendComponent({
this.data().setTitle(title);
}
},
'submit .js-card-details-assigner'(evt) {
evt.preventDefault();
const assigner = this.currentComponent().getValue().trim();
if (assigner) {
this.data().setAssignedBy(assigner);
}
},
'submit .js-card-details-requester'(evt) {
evt.preventDefault();
const requester = this.currentComponent().getValue().trim();
if (requester) {
this.data().setRequestedBy(requester);
}
},
'click .js-member': Popup.open('cardMember'),
'click .js-add-members': Popup.open('cardMembers'),
'click .js-add-labels': Popup.open('cardLabels'),
'click .js-received-date': Popup.open('editCardReceivedDate'),
'click .js-start-date': Popup.open('editCardStartDate'),
'click .js-due-date': Popup.open('editCardDueDate'),
'click .js-end-date': Popup.open('editCardEndDate'),
'mouseenter .js-card-details' () {
this.parentComponent().parentComponent().showOverlay.set(true);
this.parentComponent().parentComponent().mouseHasEnterCardDetails = true;
const parentComponent = this.parentComponent().parentComponent();
//on mobile view parent is Board, not BoardBody.
if (parentComponent === null) return;
parentComponent.showOverlay.set(true);
parentComponent.mouseHasEnterCardDetails = true;
},
'click #toggleButton'() {
Meteor.call('toggleSystemMessages');
@@ -130,7 +274,7 @@ BlazeComponent.extendComponent({
close(isReset = false) {
if (this.isOpen.get() && !isReset) {
const draft = this.getValue().trim();
if (draft !== Cards.findOne(Session.get('currentCard')).description) {
if (draft !== Cards.findOne(Session.get('currentCard')).getDescription()) {
UnsavedEdits.set(this._getUnsavedEditKey(), this.getValue());
}
}
@@ -165,8 +309,11 @@ Template.cardDetailsActionsPopup.events({
'click .js-members': Popup.open('cardMembers'),
'click .js-labels': Popup.open('cardLabels'),
'click .js-attachments': Popup.open('cardAttachments'),
'click .js-custom-fields': Popup.open('cardCustomFields'),
'click .js-received-date': Popup.open('editCardReceivedDate'),
'click .js-start-date': Popup.open('editCardStartDate'),
'click .js-due-date': Popup.open('editCardDueDate'),
'click .js-end-date': Popup.open('editCardEndDate'),
'click .js-spent-time': Popup.open('editCardSpentTime'),
'click .js-move-card': Popup.open('moveCard'),
'click .js-copy-card': Popup.open('copyCard'),
@@ -210,6 +357,32 @@ Template.editCardTitleForm.events({
},
});
Template.editCardRequesterForm.onRendered(function() {
autosize(this.$('.js-edit-card-requester'));
});
Template.editCardRequesterForm.events({
'keydown .js-edit-card-requester'(evt) {
// If enter key was pressed, submit the data
if (evt.keyCode === 13) {
$('.js-submit-edit-card-requester-form').click();
}
},
});
Template.editCardAssignerForm.onRendered(function() {
autosize(this.$('.js-edit-card-assigner'));
});
Template.editCardAssignerForm.events({
'keydown .js-edit-card-assigner'(evt) {
// If enter key was pressed, submit the data
if (evt.keyCode === 13) {
$('.js-submit-edit-card-assigner-form').click();
}
},
});
Template.moveCardPopup.events({
'click .js-done' () {
// XXX We should *not* get the currentCard from the global state, but
@@ -223,7 +396,6 @@ Template.moveCardPopup.events({
Popup.close();
},
});
BlazeComponent.extendComponent({
onCreated() {
subManager.subscribe('board', Session.get('currentBoard'));
@@ -260,6 +432,21 @@ BlazeComponent.extendComponent({
},
}).register('boardsAndLists');
function cloneCheckList(_id, checklist) {
'use strict';
const checklistId = checklist._id;
checklist.cardId = _id;
checklist._id = null;
const newChecklistId = Checklists.insert(checklist);
ChecklistItems.find({checklistId}).forEach(function(item) {
item._id = null;
item.checklistId = newChecklistId;
item.cardId = _id;
ChecklistItems.insert(item);
});
}
Template.copyCardPopup.events({
'click .js-done'() {
const card = Cards.findOne(Session.get('currentCard'));
@@ -288,12 +475,18 @@ Template.copyCardPopup.events({
// copy checklists
let cursor = Checklists.find({cardId: oldId});
cursor.forEach(function() {
cloneCheckList(_id, arguments[0]);
});
// copy subtasks
cursor = Cards.find({parentId: oldId});
cursor.forEach(function() {
'use strict';
const checklist = arguments[0];
checklist.cardId = _id;
checklist._id = null;
Checklists.insert(checklist);
const subtask = arguments[0];
subtask.parentId = _id;
subtask._id = null;
/* const newSubtaskId = */ Cards.insert(subtask);
});
// copy card comments
@@ -311,17 +504,20 @@ Template.copyCardPopup.events({
});
Template.copyChecklistToManyCardsPopup.events({
'click .js-select-list' (evt) {
'click .js-done' () {
const card = Cards.findOne(Session.get('currentCard'));
const oldId = card._id;
card._id = null;
card.listId = this._id;
const list = Lists.findOne(card.listId);
card.boardId = list.boardId;
const textarea = $(evt.currentTarget).parents('.content').find('textarea');
const lSelect = $('.js-select-lists')[0];
card.listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
card.swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
card.boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
const titleEntry = textarea.val().trim();
// insert new card to the bottom of new list
card.sort = Lists.findOne(this._id).cards().count();
card.sort = Lists.findOne(card.listId).cards().count();
if (titleEntry) {
const titleList = JSON.parse(titleEntry);
@@ -339,12 +535,18 @@ Template.copyChecklistToManyCardsPopup.events({
// copy checklists
let cursor = Checklists.find({cardId: oldId});
cursor.forEach(function() {
cloneCheckList(_id, arguments[0]);
});
// copy subtasks
cursor = Cards.find({parentId: oldId});
cursor.forEach(function() {
'use strict';
const checklist = arguments[0];
checklist.cardId = _id;
checklist._id = null;
Checklists.insert(checklist);
const subtask = arguments[0];
subtask.parentId = _id;
subtask._id = null;
/* const newSubtaskId = */ Cards.insert(subtask);
});
// copy card comments
@@ -362,36 +564,119 @@ Template.copyChecklistToManyCardsPopup.events({
},
});
Template.cardMorePopup.events({
'click .js-copy-card-link-to-clipboard' () {
// Clipboard code from:
// https://stackoverflow.com/questions/6300213/copy-selected-text-to-the-clipboard-without-using-flash-must-be-cross-browser
const StringToCopyElement = document.getElementById('cardURL');
StringToCopyElement.select();
if (document.execCommand('copy')) {
StringToCopyElement.blur();
BlazeComponent.extendComponent({
onCreated() {
this.currentCard = this.currentData();
this.parentCard = this.currentCard.parentCard();
if (this.parentCard) {
this.parentBoard = this.parentCard.board();
} else {
document.getElementById('cardURL').selectionStart = 0;
document.getElementById('cardURL').selectionEnd = 999;
document.execCommand('copy');
if (window.getSelection) {
if (window.getSelection().empty) { // Chrome
window.getSelection().empty();
} else if (window.getSelection().removeAllRanges) { // Firefox
window.getSelection().removeAllRanges();
}
} else if (document.selection) { // IE?
document.selection.empty();
}
this.parentBoard = null;
}
},
'click .js-delete': Popup.afterConfirm('cardDelete', function () {
Popup.close();
Cards.remove(this._id);
Utils.goBoardId(this.boardId);
}),
});
boards() {
const boards = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
}, {
sort: ['title'],
});
return boards;
},
cards() {
if (this.parentBoard) {
return this.parentBoard.cards();
} else {
return [];
}
},
isParentBoard() {
const board = this.currentData();
if (this.parentBoard) {
return board._id === this.parentBoard;
}
return false;
},
isParentCard() {
const card = this.currentData();
if (this.parentCard) {
return card._id === this.parentCard;
}
return false;
},
setParentCardId(cardId) {
if (cardId === 'null') {
cardId = null;
this.parentCard = null;
} else {
this.parentCard = Cards.findOne(cardId);
}
this.currentCard.setParentId(cardId);
},
events() {
return [{
'click .js-copy-card-link-to-clipboard' () {
// Clipboard code from:
// https://stackoverflow.com/questions/6300213/copy-selected-text-to-the-clipboard-without-using-flash-must-be-cross-browser
const StringToCopyElement = document.getElementById('cardURL');
StringToCopyElement.select();
if (document.execCommand('copy')) {
StringToCopyElement.blur();
} else {
document.getElementById('cardURL').selectionStart = 0;
document.getElementById('cardURL').selectionEnd = 999;
document.execCommand('copy');
if (window.getSelection) {
if (window.getSelection().empty) { // Chrome
window.getSelection().empty();
} else if (window.getSelection().removeAllRanges) { // Firefox
window.getSelection().removeAllRanges();
}
} else if (document.selection) { // IE?
document.selection.empty();
}
}
},
'click .js-delete': Popup.afterConfirm('cardDelete', function () {
Popup.close();
Cards.remove(this._id);
Utils.goBoardId(this.boardId);
}),
'change .js-field-parent-board'(evt) {
const selection = $(evt.currentTarget).val();
const list = $('.js-field-parent-card');
list.empty();
if (selection === 'none') {
this.parentBoard = null;
list.prop('disabled', true);
} else {
this.parentBoard = Boards.findOne(selection);
this.parentBoard.cards().forEach(function(card) {
list.append(
$('<option></option>').val(card._id).html(card.title)
);
});
list.prop('disabled', false);
}
list.append(
`<option value='none' selected='selected'>${TAPi18n.__('custom-field-dropdown-none')}</option>`
);
this.setParentCardId('null');
},
'change .js-field-parent-card'(evt) {
const selection = $(evt.currentTarget).val();
this.setParentCardId(selection);
},
}];
},
}).register('cardMorePopup');
// Close the card details pane by pressing escape
EscapeActions.register('detailsPane',
+18 -6
View File
@@ -5,7 +5,8 @@
flex-shrink: 0
flex-basis: 470px
will-change: flex-basis
overflow: hidden
overflow-y: scroll
overflow-x: hidden
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 20 !important
@@ -46,6 +47,12 @@
margin: 7px 0 0
padding: 0
.linked-card-location
font-style: italic
font-size: 1em
margin-bottom: 0
& p
margin-bottom: 0
form.inlined-form
margin-top: 5px
@@ -69,6 +76,7 @@
.card-details-items
display: flex
flex-wrap: wrap
margin: 15px 0
.card-details-item
@@ -77,14 +85,18 @@
margin-right: 0
&.card-details-item-labels,
&.card-details-item-members,
&.card-details-item-received,
&.card-details-item-start,
&.card-details-item-due
width: 50%
flex-shrink: 1
&.card-details-item-due,
&.card-details-item-end,
&.card-details-item-customfield,
&.card-details-item-name
max-width: 50%
flex-grow: 1
.card-details-item-title
font-size: 14px
color: darken(white, 45%)
font-size: 16px
color: #000
.card-label
padding-top: 5px
+4 -4
View File
@@ -3,10 +3,10 @@ template(name="editCardSpentTime")
form.edit-time
.fields
label(for="time") {{_ 'time'}}
input.js-time-field#time(type="number" step="0.01" name="time" value="{{card.spentTime}}" placeholder=timeFormat autofocus)
input.js-time-field#time(type="number" step="0.01" name="time" value="{{card.getSpentTime}}" placeholder=timeFormat autofocus)
label(for="overtime") {{_ 'overtime'}}
a.js-toggle-overtime
.materialCheckBox#overtime(class="{{#if card.isOvertime}}is-checked{{/if}}" name="overtime")
.materialCheckBox#overtime(class="{{#if getIsOvertime}}is-checked{{/if}}" name="overtime")
if error.get
.warning {{_ error.get}}
@@ -15,8 +15,8 @@ template(name="editCardSpentTime")
template(name="timeBadge")
if canModifyCard
a.js-edit-time.card-time(title="{{showTitle}}" class="{{#if isOvertime}}card-label-red{{else}}card-label-green{{/if}}")
a.js-edit-time.card-time(title="{{showTitle}}" class="{{#if getIsOvertime}}card-label-red{{else}}card-label-green{{/if}}")
| {{showTime}}
else
a.card-time(title="{{showTitle}}" class="{{#if isOvertime}}card-label-red{{else}}card-label-green{{/if}}")
a.card-time(title="{{showTitle}}" class="{{#if getIsOvertime}}card-label-red{{else}}card-label-green{{/if}}")
| {{showTime}}
+8 -11
View File
@@ -7,17 +7,17 @@ BlazeComponent.extendComponent({
this.card = this.data();
},
toggleOvertime() {
this.card.isOvertime = !this.card.isOvertime;
this.card.setIsOvertime(!this.card.getIsOvertime());
$('#overtime .materialCheckBox').toggleClass('is-checked');
$('#overtime').toggleClass('is-checked');
},
storeTime(spentTime, isOvertime) {
this.card.setSpentTime(spentTime);
this.card.setOvertime(isOvertime);
this.card.setIsOvertime(isOvertime);
},
deleteTime() {
this.card.unsetSpentTime();
this.card.setSpentTime(null);
},
events() {
return [{
@@ -26,7 +26,7 @@ BlazeComponent.extendComponent({
evt.preventDefault();
const spentTime = parseFloat(evt.target.time.value);
const isOvertime = this.card.isOvertime;
const isOvertime = this.card.getIsOvertime();
if (spentTime >= 0) {
this.storeTime(spentTime, isOvertime);
@@ -55,17 +55,14 @@ BlazeComponent.extendComponent({
self.time = ReactiveVar();
},
showTitle() {
if (this.data().isOvertime) {
return `${TAPi18n.__('overtime')} ${this.data().spentTime} ${TAPi18n.__('hours')}`;
if (this.data().getIsOvertime()) {
return `${TAPi18n.__('overtime')} ${this.data().getSpentTime()} ${TAPi18n.__('hours')}`;
} else {
return `${TAPi18n.__('card-spent')} ${this.data().spentTime} ${TAPi18n.__('hours')}`;
return `${TAPi18n.__('card-spent')} ${this.data().getSpentTime()} ${TAPi18n.__('hours')}`;
}
},
showTime() {
return this.data().spentTime;
},
isOvertime() {
return this.data().isOvertime;
return this.data().getSpentTime();
},
events() {
return [{
+21 -21
View File
@@ -1,5 +1,5 @@
template(name="checklists")
h2 {{_ 'checklists'}}
h3 {{_ 'checklists'}}
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+checklistDeleteDialog(checklist = checklistToDelete)
@@ -18,24 +18,24 @@ template(name="checklists")
| {{_ 'add-checklist'}}...
template(name="checklistDetail")
+inlinedForm(classNames="js-edit-checklist-title" checklist = checklist)
+editChecklistItemForm(checklist = checklist)
else
.checklist-title
.checkbox.fa.fa-check-square-o
if canModifyCard
a.js-delete-checklist.toggle-delete-checklist-dialog {{_ "delete"}}...
.js-checklist.checklist
+inlinedForm(classNames="js-edit-checklist-title" checklist = checklist)
+editChecklistItemForm(checklist = checklist)
else
.checklist-title
span
if canModifyCard
a.js-delete-checklist.toggle-delete-checklist-dialog {{_ "delete"}}...
span.checklist-stat(class="{{#if checklist.isFinished}}is-finished{{/if}}") {{checklist.finishedCount}}/{{checklist.itemCount}}
if canModifyCard
h2.title.js-open-inlined-form.is-editable
+viewer
= checklist.title
else
h2.title
+viewer
if canModifyCard
h2.title.js-open-inlined-form.is-editable
+viewer
= checklist.title
+checklistItems(checklist = checklist)
else
h2.title
+viewer
= checklist.title
+checklistItems(checklist = checklist)
template(name="checklistDeleteDialog")
.js-confirm-checklist-delete
@@ -70,11 +70,11 @@ template(name="editChecklistItemForm")
template(name="checklistItems")
.checklist-items.js-checklist-items
each item in checklist.getItemsSorted
each item in checklist.items
+inlinedForm(classNames="js-edit-checklist-item" item = item checklist = checklist)
+editChecklistItemForm(type = 'item' item = item checklist = checklist)
else
+itemDetail(item = item checklist = checklist)
+checklistItemDetail(item = item checklist = checklist)
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-checklist-item" checklist = checklist)
+addChecklistItemForm
@@ -83,8 +83,8 @@ template(name="checklistItems")
i.fa.fa-plus
| {{_ 'add-checklist-item'}}...
template(name='itemDetail')
.item.js-checklist-item
template(name='checklistItemDetail')
.js-checklist-item.checklist-item
if canModifyCard
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
.item-title.js-open-inlined-form.is-editable(class="{{#if item.isFinished }}is-checked{{/if}}")
+65 -56
View File
@@ -1,11 +1,14 @@
const { calculateIndexData, enableClickOnTouch } = Utils;
function initSorting(items) {
items.sortable({
tolerance: 'pointer',
helper: 'clone',
items: '.js-checklist-item:not(.placeholder)',
axis: 'y',
connectWith: '.js-checklist-items',
appendTo: '.board-canvas',
distance: 7,
placeholder: 'placeholder',
placeholder: 'checklist-item placeholder',
scroll: false,
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
@@ -13,57 +16,57 @@ function initSorting(items) {
},
stop(evt, ui) {
const parent = ui.item.parents('.js-checklist-items');
const orderedItems = [];
parent.find('.js-checklist-item').each(function(i, item) {
const checklistItem = Blaze.getData(item).item;
orderedItems.push(checklistItem._id);
});
items.sortable('cancel');
const formerParent = ui.item.parents('.js-checklist-items');
const checklist = Blaze.getData(parent.get(0)).checklist;
const oldChecklist = Blaze.getData(formerParent.get(0)).checklist;
if (oldChecklist._id !== checklist._id) {
const currentItem = Blaze.getData(ui.item.get(0)).item;
for (let i = 0; i < orderedItems.length; i++) {
const itemId = orderedItems[i];
if (itemId !== currentItem._id) continue;
const newItem = {
_id: checklist.getNewItemId(),
title: currentItem.title,
sort: i,
isFinished: currentItem.isFinished,
};
checklist.addFullItem(newItem);
orderedItems[i] = currentItem._id;
oldChecklist.removeItem(itemId);
}
} else {
checklist.sortItems(orderedItems);
const checklistId = Blaze.getData(parent.get(0)).checklist._id;
let prevItem = ui.item.prev('.js-checklist-item').get(0);
if (prevItem) {
prevItem = Blaze.getData(prevItem).item;
}
let nextItem = ui.item.next('.js-checklist-item').get(0);
if (nextItem) {
nextItem = Blaze.getData(nextItem).item;
}
const nItems = 1;
const sortIndex = calculateIndexData(prevItem, nextItem, nItems);
const checklistDomElement = ui.item.get(0);
const checklistData = Blaze.getData(checklistDomElement);
const checklistItem = checklistData.item;
items.sortable('cancel');
checklistItem.move(checklistId, sortIndex.base);
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-checklist-item:not(.placeholder)');
}
Template.checklists.onRendered(function () {
const self = BlazeComponent.getComponentForElement(this.firstNode);
self.itemsDom = this.$('.card-checklist-items');
initSorting(self.itemsDom);
self.itemsDom.mousedown(function(evt) {
evt.stopPropagation();
});
BlazeComponent.extendComponent({
onRendered() {
const self = this;
self.itemsDom = this.$('.js-checklist-items');
initSorting(self.itemsDom);
self.itemsDom.mousedown(function(evt) {
evt.stopPropagation();
});
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember();
}
// Disable sorting if the current user is not a board member
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('sortable')) {
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember();
}
});
});
// Disable sorting if the current user is not a board member
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('sortable')) {
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
}
});
},
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
}).register('checklistDetail');
BlazeComponent.extendComponent({
@@ -71,8 +74,10 @@ BlazeComponent.extendComponent({
event.preventDefault();
const textarea = this.find('textarea.js-add-checklist-item');
const title = textarea.value.trim();
const cardId = this.currentData().cardId;
let cardId = this.currentData().cardId;
const card = Cards.findOne(cardId);
if (card.isLinked())
cardId = card.linkedId;
if (title) {
Checklists.insert({
@@ -95,7 +100,12 @@ BlazeComponent.extendComponent({
const checklist = this.currentData().checklist;
if (title) {
checklist.addItem(title);
ChecklistItems.insert({
title,
checklistId: checklist._id,
cardId: checklist.cardId,
sort: checklist.itemCount(),
});
}
// We keep the form opened, empty it.
textarea.value = '';
@@ -118,7 +128,7 @@ BlazeComponent.extendComponent({
const checklist = this.currentData().checklist;
const item = this.currentData().item;
if (checklist && item && item._id) {
checklist.removeItem(item._id);
ChecklistItems.remove(item._id);
}
},
@@ -135,9 +145,8 @@ BlazeComponent.extendComponent({
const textarea = this.find('textarea.js-edit-checklist-item');
const title = textarea.value.trim();
const itemId = this.currentData().item._id;
const checklist = this.currentData().checklist;
checklist.editItem(itemId, title);
const item = this.currentData().item;
item.setTitle(title);
},
onCreated() {
@@ -200,7 +209,7 @@ Template.checklistDeleteDialog.onDestroyed(() => {
$cardDetails.animate( { scrollTop: this.scrollState.position });
});
Template.itemDetail.helpers({
Template.checklistItemDetail.helpers({
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
@@ -211,12 +220,12 @@ BlazeComponent.extendComponent({
const checklist = this.currentData().checklist;
const item = this.currentData().item;
if (checklist && item && item._id) {
checklist.toggleItem(item._id);
item.toggleItem();
}
},
events() {
return [{
'click .item .check-box': this.toggleItem,
'click .js-checklist-item .check-box': this.toggleItem,
}];
},
}).register('itemDetail');
}).register('checklistItemDetail');
+58 -30
View File
@@ -26,7 +26,7 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.title
font-size: 18px
line-height: 30px
line-height: 25px
.checklist-stat
margin: 0 0.5em
@@ -78,34 +78,62 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
bottom: -600px
right: 0
.checklist-items
.checklist
background: darken(white, 3%)
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
.checklist-item
margin: 0 0 0 0.1em
line-height: 18px
font-size: 1.1em
margin-top: 3px
display: flex
background: darken(white, 3%)
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
&:hover
background-color: darken(white, 8%)
.check-box
margin: 0.1em 0 0 0;
&.is-checked
border-bottom: 2px solid #3cb500
border-right: 2px solid #3cb500
.item-title
flex: 1
padding-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
& .viewer
p
margin-bottom: 2px
.js-delete-checklist-item
margin: 0 0 0.5em 1.33em
@extends .delete-text
padding: 12px 0 0 0
.item
line-height: 25px
font-size: 1.1em
margin-top: 3px
display: flex
&:hover
background-color: darken(white, 8%)
.check-box
margin-top: 5px
&.is-checked
border-bottom: 2px solid #3cb500
border-right: 2px solid #3cb500
.item-title
flex: 1
padding-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
.js-delete-checklist-item
@extends .delete-text
padding: 12px 0 0 0
.add-checklist-item
padding-top: 0.5em
display: inline-block
.add-checklist-item
margin: 0.2em 0 0.5em 1.33em
display: inline-block
+53 -1
View File
@@ -3,7 +3,7 @@
// XXX Use .board-widget-labels as a flexbox container
.card-label
border-radius: 4px
color: white
color: white //Default white text, in select cases, changed to black to improve contrast between label colour and text
display: inline-block
font-weight: 700
font-size: 13px
@@ -48,9 +48,11 @@
.card-label-yellow
background-color: #fad900
color: #000000 //Black text for better visibility
.card-label-orange
background-color: #ff9f19
color: #000000 //Black text for better visibility
.card-label-red
background-color: #eb4646
@@ -63,6 +65,7 @@
.card-label-pink
background-color: #ff78cb
color: #000000 //Black text for better visibility
.card-label-sky
background-color: #00c2e0
@@ -72,6 +75,55 @@
.card-label-lime
background-color: #51e898
color: #000000 //Black text for better visibility
.card-label-silver
background-color: #c0c0c0
color: #000000 //Black text for better visibility
.card-label-peachpuff
background-color: #ffdab9
color: #000000 //Black text for better visibility
.card-label-crimson
background-color: #dc143c
.card-label-plum
background-color: #dda0dd
color: #000000 //Black text for better visibility
.card-label-darkgreen
background-color: #006400
.card-label-slateblue
background-color: #6a5acd
.card-label-magenta
background-color: #ff00ff
.card-label-gold
background-color: #ffd700
color: #000000 //Black text for better visibility
.card-label-navy
background-color: #000080
.card-label-gray
background-color: #808080
.card-label-saddlebrown
background-color: #8b4513
.card-label-paleturquoise
background-color: #afeeee
color: #000000 //Black text for better visibility
.card-label-mistyrose
background-color: #ffe4e1
color: #000000 //Black text for better visibility
.card-label-indigo
background-color: #4b0082
.edit-label,
.create-label
+54 -13
View File
@@ -1,5 +1,7 @@
template(name="minicard")
.minicard
.minicard(
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}")
if cover
.minicard-cover(style="background-image: url('{{cover.url}}');")
if labels
@@ -7,30 +9,69 @@ template(name="minicard")
each labels
.minicard-label(class="card-label-{{color}}" title="{{name}}")
.minicard-title
if $eq 'prefix-with-full-path' currentBoard.presentParentTask
.parent-prefix
| {{ parentString ' > ' }}
if $eq 'prefix-with-parent' currentBoard.presentParentTask
.parent-prefix
| {{ parentCardName }}
if isLinkedBoard
a.js-linked-link
span.linked-icon.fa.fa-folder
else if isLinkedCard
a.js-linked-link
span.linked-icon.fa.fa-id-card
if getArchived
span.linked-icon.linked-archived.fa.fa-archive
+viewer
= title
= getTitle
if $eq 'subtext-with-full-path' currentBoard.presentParentTask
.parent-subtext
| {{ parentString ' > ' }}
if $eq 'subtext-with-parent' currentBoard.presentParentTask
.parent-subtext
| {{ parentCardName }}
.dates
if startAt
if getReceived
unless getStart
unless getDue
unless getEnd
.date
+minicardReceivedDate
if getStart
.date
+minicardStartDate
if dueAt
if getDue
.date
+minicardDueDate
if spentTime
if getSpentTime
.date
+cardSpentTime
if members
.minicard-custom-fields
each customFieldsWD
if definition.showOnCard
.minicard-custom-field
.minicard-custom-field-item
= definition.name
.minicard-custom-field-item
+viewer
= trueValue
if getMembers
.minicard-members.js-minicard-members
each members
each getMembers
+userAvatar(userId=this)
.badges
if comments.count
.badge(title="{{_ 'card-comments-title' comments.count }}")
span.badge-icon.fa.fa-comment-o.badge-comment
span.badge-text= comments.count
if description
.badge.badge-state-image-only(title=description)
unless currentUser.isNoComments
if comments.count
.badge(title="{{_ 'card-comments-title' comments.count }}")
span.badge-icon.fa.fa-comment-o.badge-comment
span.badge-text= comments.count
if getDescription
.badge.badge-state-image-only(title=getDescription)
span.badge-icon.fa.fa-align-left
if attachments.count
.badge
+11
View File
@@ -6,4 +6,15 @@ BlazeComponent.extendComponent({
template() {
return 'minicard';
},
events() {
return [{
'click .js-linked-link' () {
if (this.data().isLinkedCard())
Utils.goCardId(this.data().linkedId);
else if (this.data().isLinkedBoard())
Utils.goBoardId(this.data().linkedId);
},
}];
},
}).register('minicard');
+27 -1
View File
@@ -9,7 +9,7 @@
&.placeholder
background: darken(white, 20%)
border-radius: 2px
border-radius: 9px
&.ui-sortable-helper
cursor: grabbing
@@ -44,6 +44,16 @@
transition: transform 0.2s,
border-radius 0.2s
&.linked-board
&.linked-card
.linked-icon
display: inline-block
margin-right: 11px
vertical-align: baseline
font-size: 0.9em
.linked-archived
color: #937760
.is-selected &
transform: translateX(11px)
border-bottom-right-radius: 0
@@ -77,9 +87,18 @@
height: @width
border-radius: 2px
margin-left: 3px
.minicard-custom-fields
display:block;
.minicard-custom-field
display:flex;
.minicard-custom-field-item
max-width:50%;
flex-grow:1;
.minicard-title
p:last-child
margin-bottom: 0
.viewer
display: inline-block
.dates
display: flex;
flex-direction: row;
@@ -155,6 +174,13 @@
margin-bottom: 20px
overflow-y: auto
.parent-prefix
color: darken(white, 30%)
font-size: 0.9em
.parent-subtext
color: darken(white, 30%)
font-size: 0.9em
@media screen and (max-width: 800px)
.minicard
.is-selected &
+97
View File
@@ -0,0 +1,97 @@
template(name="subtasks")
h3 {{_ 'subtasks'}}
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+subtaskDeleteDialog(subtask = subtaskToDelete)
.card-subtasks-items
each subtask in currentCard.subtasks
+subtaskDetail(subtask = subtask)
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-subtask" cardId = cardId)
+addSubtaskItemForm
else
a.js-open-inlined-form
i.fa.fa-plus
| {{_ 'add-subtask'}}...
template(name="subtaskDetail")
.js-subtasks.subtask
+inlinedForm(classNames="js-edit-subtask-title" subtask = subtask)
+editSubtaskItemForm(subtask = subtask)
else
.subtask-title
span
a.js-view-subtask(title="{{ subtask.title }}") {{_ "view-it"}}
if canModifyCard
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
if canModifyCard
h2.title.js-open-inlined-form.is-editable
+viewer
= subtask.title
else
h2.title
+viewer
= subtask.title
template(name="subtaskDeleteDialog")
.js-confirm-subtask-delete
p
i(class="fa fa-exclamation-triangle" aria-hidden="true")
p
| {{_ 'confirm-subtask-delete-dialog'}}
span {{subtask.title}}
| ?
.js-subtask-delete-buttons
button.confirm-subtask-delete(type="button") {{_ 'delete'}}
button.toggle-delete-subtask-dialog(type="button") {{_ 'cancel'}}
template(name="addSubtaskItemForm")
textarea.js-add-subtask-item(rows='1' autofocus)
.edit-controls.clearfix
button.primary.confirm.js-submit-add-subtask-item-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
template(name="editSubtaskItemForm")
textarea.js-edit-subtask-item(rows='1' autofocus)
if $eq type 'item'
= item.title
else
= subtask.title
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-subtask-item-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-subtask-item {{_ "delete"}}...
template(name="subtasksItems")
.subtasks-items.js-subtasks-items
each item in subtasks.items
+inlinedForm(classNames="js-edit-subtask-item" item = item subtasks = subtasks)
+editSubtaskItemForm(type = 'item' item = item subtasks = subtasks)
else
+subtaskItemDetail(item = item subtasks = subtasks)
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-subtask-item" subtasks = subtasks)
+addSubtaskItemForm
else
a.add-subtask-item.js-open-inlined-form
i.fa.fa-plus
| {{_ 'add-subtask-item'}}...
template(name='subtaskItemDetail')
.js-subtasks-item.subtasks-item
if canModifyCard
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
.item-title.js-open-inlined-form.is-editable(class="{{#if item.isFinished }}is-checked{{/if}}")
+viewer
= item.title
else
.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
.item-title(class="{{#if item.isFinished }}is-checked{{/if}}")
+viewer
= item.title
+146
View File
@@ -0,0 +1,146 @@
BlazeComponent.extendComponent({
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
}).register('subtaskDetail');
BlazeComponent.extendComponent({
addSubtask(event) {
event.preventDefault();
const textarea = this.find('textarea.js-add-subtask-item');
const title = textarea.value.trim();
const cardId = this.currentData().cardId;
const card = Cards.findOne(cardId);
const sortIndex = -1;
const crtBoard = Boards.findOne(card.boardId);
const targetBoard = crtBoard.getDefaultSubtasksBoard();
const listId = targetBoard.getDefaultSubtasksListId();
const swimlaneId = targetBoard.getDefaultSwimline()._id;
if (title) {
const _id = Cards.insert({
title,
parentId: cardId,
members: [],
labelIds: [],
customFields: [],
listId,
boardId: targetBoard._id,
sort: sortIndex,
swimlaneId,
type: 'cardType-card',
});
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
// card will disappear instantly.
// See https://github.com/wekan/wekan/issues/80
Filter.addException(_id);
setTimeout(() => {
this.$('.add-subtask-item').last().click();
}, 100);
}
textarea.value = '';
textarea.focus();
},
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
deleteSubtask() {
const subtask = this.currentData().subtask;
if (subtask && subtask._id) {
subtask.archive();
this.toggleDeleteDialog.set(false);
}
},
editSubtask(event) {
event.preventDefault();
const textarea = this.find('textarea.js-edit-subtask-item');
const title = textarea.value.trim();
const subtask = this.currentData().subtask;
subtask.setTitle(title);
},
onCreated() {
this.toggleDeleteDialog = new ReactiveVar(false);
this.subtaskToDelete = null; //Store data context to pass to subtaskDeleteDialog template
},
pressKey(event) {
//If user press enter key inside a form, submit it
//Unless the user is also holding down the 'shift' key
if (event.keyCode === 13 && !event.shiftKey) {
event.preventDefault();
const $form = $(event.currentTarget).closest('form');
$form.find('button[type=submit]').click();
}
},
events() {
const events = {
'click .toggle-delete-subtask-dialog'(event) {
if($(event.target).hasClass('js-delete-subtask')){
this.subtaskToDelete = this.currentData().subtask; //Store data context
}
this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get());
},
'click .js-view-subtask'(event) {
if($(event.target).hasClass('js-view-subtask')){
const subtask = this.currentData().subtask;
const board = subtask.board();
FlowRouter.go('card', {
boardId: board._id,
slug: board.slug,
cardId: subtask._id,
});
}
},
};
return [{
...events,
'submit .js-add-subtask': this.addSubtask,
'submit .js-edit-subtask-title': this.editSubtask,
'click .confirm-subtask-delete': this.deleteSubtask,
keydown: this.pressKey,
}];
},
}).register('subtasks');
Template.subtaskDeleteDialog.onCreated(() => {
const $cardDetails = this.$('.card-details');
this.scrollState = { position: $cardDetails.scrollTop(), //save current scroll position
top: false, //required for smooth scroll animation
};
//Callback's purpose is to only prevent scrolling after animation is complete
$cardDetails.animate({ scrollTop: 0 }, 500, () => { this.scrollState.top = true; });
//Prevent scrolling while dialog is open
$cardDetails.on('scroll', () => {
if(this.scrollState.top) { //If it's already in position, keep it there. Otherwise let animation scroll
$cardDetails.scrollTop(0);
}
});
});
Template.subtaskDeleteDialog.onDestroyed(() => {
const $cardDetails = this.$('.card-details');
$cardDetails.off('scroll'); //Reactivate scrolling
$cardDetails.animate( { scrollTop: this.scrollState.position });
});
Template.subtaskItemDetail.helpers({
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
});
BlazeComponent.extendComponent({
// ...
}).register('subtaskItemDetail');
+142
View File
@@ -0,0 +1,142 @@
.js-add-subtask
color: #8c8c8c
textarea.js-add-subtask-item, textarea.js-edit-subtask-item
overflow: hidden
word-wrap: break-word
resize: none
height: 34px
.delete-text
color: #8c8c8c
text-decoration: underline
word-wrap: break-word
float: right
padding-top: 6px
&:hover
color: inherit
.subtask-title
.checkbox
float: left
width: 30px
height 30px
font-size: 18px
line-height: 30px
.title
font-size: 18px
line-height: 25px
.subtasks-stat
margin: 0 0.5em
float: right
padding-top: 6px
&.is-finished
color: #3cb500
.js-delete-subtask
@extends .delete-text
margin: 0 0.5em
.js-view-subtask
@extends .delete-text
.js-confirm-subtask-delete
background-color: darken(white, 3%)
position: absolute
float: left;
width: 60%
margin-top: 0
margin-left: 13%
padding-bottom: 2%
padding-left: 3%
padding-right: 3%
z-index: 17
border-radius: 3px
p
position: relative
margin-top: 3%
width: 100%
text-align: center
span
font-weight: bold
i
font-size: 2em
.js-subtask-delete-buttons
position: relative
padding: left 2% right 2%
.confirm-subtask-delete
margin-left: 12%
float: left
.toggle-delete-subtask-dialog
margin-right: 12%
float: right
#card-details-overlay
top: 0
bottom: -600px
right: 0
.subtasks
background: darken(white, 3%)
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
.subtasks-item
margin: 0 0 0 0.1em
line-height: 18px
font-size: 1.1em
margin-top: 3px
display: flex
background: darken(white, 3%)
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
&:hover
background-color: darken(white, 8%)
.check-box
margin: 0.1em 0 0 0;
&.is-checked
border-bottom: 2px solid #3cb500
border-right: 2px solid #3cb500
.item-title
flex: 1
padding-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
& .viewer
p
margin-bottom: 2px
.js-delete-subtask-item
margin: 0 0 0.5em 1.33em
@extends .delete-text
padding: 12px 0 0 0
.add-subtask-item
margin: 0.2em 0 0.5em 1.33em
display: inline-block
+15
View File
@@ -0,0 +1,15 @@
template(name="datepicker")
.datepicker-container
form.edit-date
.fields
.left
label(for="date") {{_ 'date'}}
input.js-date-field#date(type="text" name="date" value=showDate placeholder=dateFormat autofocus)
.right
label(for="time") {{_ 'time'}}
input.js-time-field#time(type="text" name="time" value=showTime placeholder=timeFormat)
.js-datepicker
if error.get
.warning {{_ error.get}}
button.primary.wide.left.js-submit-date(type="submit") {{_ 'save'}}
button.js-delete-date.negate.wide.right.js-delete-date {{_ 'delete'}}
+17
View File
@@ -0,0 +1,17 @@
.datepicker-container
.fields
.left
width: 56%
.right
width: 38%
.datepicker
width: 100%
table
width: 100%
border: none
border-spacing: 0
border-collapse: collapse
thead
background: none
td, th
box-sizing: border-box
+6
View File
@@ -85,6 +85,9 @@ select
width: 256px
margin-bottom: 8px
&.inline
width: 100%
option[disabled]
color: #8c8c8c
@@ -222,9 +225,12 @@ textarea
.edit-controls,
.add-controls
display: flex
align-items: baseline
margin-top: 0
button[type=submit]
input[type=button]
float: left
height: 32px
margin-top: -2px
+4 -1
View File
@@ -1,4 +1,4 @@
const { calculateIndex } = Utils;
const { calculateIndex, enableClickOnTouch } = Utils;
BlazeComponent.extendComponent({
// Proxy
@@ -83,6 +83,9 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
$cards.sortable('option', 'disabled', !userIsMember());
+11
View File
@@ -187,3 +187,14 @@
padding: 7px
top: -@padding
right: 17px
.link-board-wrapper
display: flex
align-items: baseline
.js-link-board
margin-left: 15px
.search-card-results
max-height: 250px
overflow: hidden
+53 -1
View File
@@ -34,8 +34,60 @@ template(name="addCardForm")
.add-controls.clearfix
button.primary.confirm(type="submit") {{_ 'add'}}
a.fa.fa-times-thin.js-close-inlined-form
span.quiet
| {{_ 'or'}}
a.js-link {{_ 'link'}}
span.quiet
| &nbsp;
| /
a.js-search {{_ 'search'}}
template(name="autocompleteLabelLine")
.minicard-label(class="card-label-{{colorName}}" title=labelName)
span(class="{{#if hasNoName}}quiet{{/if}}")= labelName
template(name="linkCardPopup")
label {{_ 'boards'}}:
.link-board-wrapper
select.js-select-boards
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
input.primary.confirm.js-link-board(type="button" value="{{_ 'link'}}")
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each lists
option(value="{{_id}}") {{title}}
label {{_ 'cards'}}:
select.js-select-cards
each cards
option(value="{{getId}}") {{getTitle}}
.edit-controls.clearfix
input.primary.confirm.js-done(type="button" value="{{_ 'link'}}")
template(name="searchCardPopup")
label {{_ 'boards'}}:
.link-board-wrapper
select.js-select-boards
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
form.js-search-term-form
input(type="text" name="searchTerm" placeholder="{{_ 'search-example'}}" autofocus)
.list-body.js-perfect-scrollbar.search-card-results
.minicards.clearfix.js-minicards
each results
a.minicard-wrapper.js-minicard
+minicard(this)
+214 -8
View File
@@ -1,3 +1,5 @@
const subManager = new SubsManager();
BlazeComponent.extendComponent({
mixins() {
return [Mixins.PerfectScrollbar];
@@ -35,24 +37,27 @@ BlazeComponent.extendComponent({
const members = formComponent.members.get();
const labelIds = formComponent.labels.get();
const customFields = formComponent.customFields.get();
const boardId = this.data().board()._id;
const board = Boards.findOne(boardId);
const boardId = this.data().board();
let swimlaneId = '';
if (board.view === 'board-view-swimlanes')
const boardView = Meteor.user().profile.boardView;
if (boardView === 'board-view-swimlanes')
swimlaneId = this.parentComponent().parentComponent().data()._id;
else
swimlaneId = Swimlanes.findOne({boardId})._id;
else if ((boardView === 'board-view-lists') || (boardView === 'board-view-cal'))
swimlaneId = boardId.getDefaultSwimline()._id;
if (title) {
const _id = Cards.insert({
title,
members,
labelIds,
customFields,
listId: this.data()._id,
boardId: this.data().board()._id,
boardId: boardId._id,
sort: sortIndex,
swimlaneId,
type: 'cardType-card',
});
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
@@ -106,8 +111,8 @@ BlazeComponent.extendComponent({
},
idOrNull(swimlaneId) {
const board = Boards.findOne(Session.get('currentBoard'));
if (board.view === 'board-view-swimlanes')
const currentUser = Meteor.user();
if (currentUser.profile.boardView === 'board-view-swimlanes')
return swimlaneId;
return undefined;
},
@@ -146,11 +151,13 @@ BlazeComponent.extendComponent({
onCreated() {
this.labels = new ReactiveVar([]);
this.members = new ReactiveVar([]);
this.customFields = new ReactiveVar([]);
},
reset() {
this.labels.set([]);
this.members.set([]);
this.customFields.set([]);
},
getLabels() {
@@ -193,6 +200,8 @@ BlazeComponent.extendComponent({
events() {
return [{
keydown: this.pressKey,
'click .js-link': Popup.open('linkCard'),
'click .js-search': Popup.open('searchCard'),
}];
},
@@ -264,3 +273,200 @@ BlazeComponent.extendComponent({
});
},
}).register('addCardForm');
BlazeComponent.extendComponent({
onCreated() {
// Prefetch first non-current board id
const boardId = Boards.findOne({
archived: false,
'members.userId': Meteor.userId(),
_id: {$ne: Session.get('currentBoard')},
}, {
sort: ['title'],
})._id;
// Subscribe to this board
subManager.subscribe('board', boardId);
this.selectedBoardId = new ReactiveVar(boardId);
this.selectedSwimlaneId = new ReactiveVar('');
this.selectedListId = new ReactiveVar('');
this.boardId = Session.get('currentBoard');
// In order to get current board info
subManager.subscribe('board', this.boardId);
this.board = Boards.findOne(this.boardId);
// List where to insert card
const list = $(Popup._getTopStack().openerElement).closest('.js-list');
this.listId = Blaze.getData(list[0])._id;
// Swimlane where to insert card
const swimlane = $(Popup._getTopStack().openerElement).closest('.js-swimlane');
this.swimlaneId = '';
const boardView = Meteor.user().profile.boardView;
if (boardView === 'board-view-swimlanes')
this.swimlaneId = Blaze.getData(swimlane[0])._id;
else if (boardView === 'board-view-lists')
this.swimlaneId = Swimlanes.findOne({boardId: this.boardId})._id;
},
boards() {
const boards = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
_id: {$ne: Session.get('currentBoard')},
}, {
sort: ['title'],
});
return boards;
},
swimlanes() {
const swimlanes = Swimlanes.find({boardId: this.selectedBoardId.get()});
if (swimlanes.count())
this.selectedSwimlaneId.set(swimlanes.fetch()[0]._id);
return swimlanes;
},
lists() {
const lists = Lists.find({boardId: this.selectedBoardId.get()});
if (lists.count())
this.selectedListId.set(lists.fetch()[0]._id);
return lists;
},
cards() {
const ownCardsIds = this.board.cards().map((card) => { return card.linkedId || card._id; });
return Cards.find({
boardId: this.selectedBoardId.get(),
swimlaneId: this.selectedSwimlaneId.get(),
listId: this.selectedListId.get(),
archived: false,
linkedId: {$nin: ownCardsIds},
_id: {$nin: ownCardsIds},
});
},
events() {
return [{
'change .js-select-boards'(evt) {
subManager.subscribe('board', $(evt.currentTarget).val());
this.selectedBoardId.set($(evt.currentTarget).val());
},
'change .js-select-swimlanes'(evt) {
this.selectedSwimlaneId.set($(evt.currentTarget).val());
},
'change .js-select-lists'(evt) {
this.selectedListId.set($(evt.currentTarget).val());
},
'click .js-done' (evt) {
// LINK CARD
evt.stopPropagation();
evt.preventDefault();
const _id = Cards.insert({
title: $('.js-select-cards option:selected').text(), //dummy
listId: this.listId,
swimlaneId: this.swimlaneId,
boardId: this.boardId,
sort: Lists.findOne(this.listId).cards().count(),
type: 'cardType-linkedCard',
linkedId: $('.js-select-cards option:selected').val(),
});
Filter.addException(_id);
Popup.close();
},
'click .js-link-board' (evt) {
//LINK BOARD
evt.stopPropagation();
evt.preventDefault();
const impBoardId = $('.js-select-boards option:selected').val();
const _id = Cards.insert({
title: $('.js-select-boards option:selected').text(), //dummy
listId: this.listId,
swimlaneId: this.swimlaneId,
boardId: this.boardId,
sort: Lists.findOne(this.listId).cards().count(),
type: 'cardType-linkedBoard',
linkedId: impBoardId,
});
Filter.addException(_id);
Popup.close();
},
}];
},
}).register('linkCardPopup');
BlazeComponent.extendComponent({
mixins() {
return [Mixins.PerfectScrollbar];
},
onCreated() {
// Prefetch first non-current board id
const boardId = Boards.findOne({
archived: false,
'members.userId': Meteor.userId(),
_id: {$ne: Session.get('currentBoard')},
})._id;
// Subscribe to this board
subManager.subscribe('board', boardId);
this.selectedBoardId = new ReactiveVar(boardId);
this.boardId = Session.get('currentBoard');
// In order to get current board info
subManager.subscribe('board', this.boardId);
const board = Boards.findOne(this.boardId);
// List where to insert card
const list = $(Popup._getTopStack().openerElement).closest('.js-list');
this.listId = Blaze.getData(list[0])._id;
// Swimlane where to insert card
const swimlane = $(Popup._getTopStack().openerElement).closest('.js-swimlane');
this.swimlaneId = '';
if (board.view === 'board-view-swimlanes')
this.swimlaneId = Blaze.getData(swimlane[0])._id;
else
this.swimlaneId = Swimlanes.findOne({boardId: this.boardId})._id;
this.term = new ReactiveVar('');
},
boards() {
const boards = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
_id: {$ne: Session.get('currentBoard')},
}, {
sort: ['title'],
});
return boards;
},
results() {
const board = Boards.findOne(this.selectedBoardId.get());
return board.searchCards(this.term.get(), false);
},
events() {
return [{
'change .js-select-boards'(evt) {
subManager.subscribe('board', $(evt.currentTarget).val());
this.selectedBoardId.set($(evt.currentTarget).val());
},
'submit .js-search-term-form'(evt) {
evt.preventDefault();
this.term.set(evt.target.searchTerm.value);
},
'click .js-minicard'(evt) {
// LINK CARD
const card = Blaze.getData(evt.currentTarget);
const _id = Cards.insert({
title: card.title, //dummy
listId: this.listId,
swimlaneId: this.swimlaneId,
boardId: this.boardId,
sort: Lists.findOne(this.listId).cards().count(),
type: 'cardType-linkedCard',
linkedId: card.linkedId || card._id,
});
Filter.addException(_id);
Popup.close();
},
}];
},
}).register('searchCardPopup');
+2 -2
View File
@@ -16,8 +16,8 @@ template(name="listHeader")
if showCardsCountForList cards.count
= cards.count
span.lowercase
| {{_ 'cards'}}
span
| {{_ 'cards-count'}}
if isMiniScreen
if currentList
if isWatching
+4 -3
View File
@@ -28,14 +28,15 @@ BlazeComponent.extendComponent({
},
showCardsCountForList(count) {
return count > this.limitToShowCardsCount();
const limit = this.limitToShowCardsCount();
return limit > 0 && count > limit;
},
events() {
return [{
'click .js-open-list-menu': Popup.open('listAction'),
'click .js-add-card' () {
const listDom = document.getElementById(`js-list-${this.currentData()._id}`);
'click .js-add-card' (evt) {
const listDom = $(evt.target).parents(`#js-list-${this.currentData()._id}`)[0];
const listComponent = BlazeComponent.getComponentForElement(listDom);
listComponent.openForm({
position: 'top',
-13
View File
@@ -1,13 +0,0 @@
BlazeComponent.extendComponent({
currentCardIsInThisList(listId, swimlaneId) {
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentBoardId = Session.get('currentBoard');
const board = Boards.findOne(currentBoardId);
if (board.view === 'board-view-lists')
return currentCard && currentCard.listId === listId;
else if (board.view === 'board-view-swimlanes')
return currentCard && currentCard.listId === listId && currentCard.swimlaneId === swimlaneId;
else
return false;
},
}).register('listsGroup');
+3 -4
View File
@@ -29,13 +29,12 @@
font-size: 0.9em
margin-right: 10px
.wekan-logo
display: block
margin: 3px auto 0
margin: 3px auto auto
width: 97px
opacity: 0.6
transition: opacity 0.15s
float: right
&:hover
opacity: 0.9
@@ -219,7 +218,7 @@
position: absolute
right: 0px
padding: 10px
margin: -10px
margin: -10px 0 -10px -10px
.announcement,
.offline-warning
+4
View File
@@ -9,6 +9,7 @@ head
packages.
link(rel="shortcut icon" href="/wekan-favicon.png")
link(rel="apple-touch-icon" href="/wekan-favicon.png")
link(rel="mask-icon" href="/wekan-150.svg")
link(rel="manifest" href="/wekan-manifest.json")
template(name="userFormsLayout")
@@ -17,6 +18,9 @@ template(name="userFormsLayout")
img(src="{{pathFor '/wekan-logo.png'}}" alt="Wekan")
section.auth-dialog
+Template.dynamic(template=content)
if isCas
.at-form
button#cas(class='at-btn submit' type='submit') {{casSignInLabel}}
div.at-form-lang
select.select-lang.js-userform-set-language
each languages
+17
View File
@@ -39,6 +39,16 @@ Template.userFormsLayout.helpers({
const curLang = T9n.getLanguage() || 'en';
return t9nTag === curLang;
},
isCas() {
return Meteor.settings.public &&
Meteor.settings.public.cas &&
Meteor.settings.public.cas.loginUrl;
},
casSignInLabel() {
return TAPi18n.__('casSignIn', {}, T9n.getLanguage() || 'en');
},
});
Template.userFormsLayout.events({
@@ -47,6 +57,13 @@ Template.userFormsLayout.events({
T9n.setLanguage(i18nTagToT9n(i18nTag));
evt.preventDefault();
},
'click button#cas'() {
Meteor.loginWithCas(function() {
if (FlowRouter.getRouteName() === 'atSignIn') {
FlowRouter.go('/');
}
});
},
});
Template.defaultLayout.events({
+3
View File
@@ -33,6 +33,9 @@ $popupWidth = 300px
textarea
height: 72px
form a span
padding: 0 0.5rem
.header
height: 36px
position: relative
+11 -7
View File
@@ -1,12 +1,16 @@
const { isTouchDevice } = Utils;
Mixins.PerfectScrollbar = BlazeComponent.extendComponent({
onRendered() {
const component = this.mixinParent();
const domElement = component.find('.js-perfect-scrollbar');
Ps.initialize(domElement);
if (!isTouchDevice()) {
const component = this.mixinParent();
const domElement = component.find('.js-perfect-scrollbar');
Ps.initialize(domElement);
// XXX We should create an event map to be consistent with other components
// but since BlazeComponent doesn't merge Mixins events transparently I
// prefered to use a jQuery event (which is what an event map ends up doing)
component.$(domElement).on('mouseenter', () => Ps.update(domElement));
// XXX We should create an event map to be consistent with other components
// but since BlazeComponent doesn't merge Mixins events transparently I
// prefered to use a jQuery event (which is what an event map ends up doing)
component.$(domElement).on('mouseenter', () => Ps.update(domElement));
}
},
});
+12 -5
View File
@@ -1,6 +1,13 @@
Template.invitationCode.onRendered(() => {
const setting = Settings.findOne();
if (setting || setting.disableRegistration) {
$('#invitationcode').hide();
}
Template.invitationCode.onRendered(function() {
Meteor.subscribe('setting', {
onReady() {
const setting = Settings.findOne();
if (!setting || !setting.disableRegistration) {
$('#invitationcode').hide();
}
return this.stop();
},
});
});
+1 -1
View File
@@ -2,9 +2,9 @@
overflow: scroll;
table
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
color: #000;
td, th
border: 1px solid #d2d0d0;
+10 -2
View File
@@ -72,7 +72,7 @@ template(name='email')
li.smtp-form
.title {{_ 'smtp-password'}}
.form-group
input.form-control#mail-server-password(type="text", placeholder="{{_ 'password'}}" value="{{currentSetting.mailServer.password}}")
input.form-control#mail-server-password(type="text", placeholder="{{_ 'password'}}" value="")
li.smtp-form
.title {{_ 'smtp-tls'}}
.form-group
@@ -94,13 +94,21 @@ template(name='email')
template(name='accountSettings')
ul#account-setting.setting-detail
li.smtp-form
li.accounts-form
.title {{_ 'accounts-allowEmailChange'}}
.form-group.flex
input.form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="true" checked="{{#if allowEmailChange}}checked{{/if}}")
span {{_ 'yes'}}
input.form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="false" checked="{{#unless allowEmailChange}}checked{{/unless}}")
span {{_ 'no'}}
li
li.accounts-form
.title {{_ 'accounts-allowUserNameChange'}}
.form-group.flex
input.form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="true" checked="{{#if allowUserNameChange}}checked{{/if}}")
span {{_ 'yes'}}
input.form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="false" checked="{{#unless allowUserNameChange}}checked{{/unless}}")
span {{_ 'no'}}
li
button.js-accounts-save.primary {{_ 'save'}}
+40 -27
View File
@@ -23,7 +23,7 @@ BlazeComponent.extendComponent({
checkField(selector) {
const value = $(selector).val();
if(!value || value.trim() === ''){
if (!value || value.trim() === '') {
$(selector).parents('li.smtp-form').addClass('has-error');
throw Error('blank field');
} else {
@@ -31,7 +31,7 @@ BlazeComponent.extendComponent({
}
},
currentSetting(){
currentSetting() {
return Settings.findOne();
},
@@ -44,23 +44,23 @@ BlazeComponent.extendComponent({
sort: ['title'],
});
},
toggleRegistration(){
toggleRegistration() {
this.setLoading(true);
const registrationClosed = this.currentSetting().disableRegistration;
Settings.update(Settings.findOne()._id, {$set:{disableRegistration: !registrationClosed}});
Settings.update(Settings.findOne()._id, {$set: {disableRegistration: !registrationClosed}});
this.setLoading(false);
if(registrationClosed){
if (registrationClosed) {
$('.invite-people').slideUp();
}else{
} else {
$('.invite-people').slideDown();
}
},
toggleTLS(){
toggleTLS() {
$('#mail-server-tls').toggleClass('is-checked');
},
switchMenu(event){
switchMenu(event) {
const target = $(event.target);
if(!target.hasClass('active')){
if (!target.hasClass('active')) {
$('.side-menu li.active').removeClass('active');
target.parent().addClass('active');
const targetID = target.data('id');
@@ -71,9 +71,9 @@ BlazeComponent.extendComponent({
}
},
checkBoard(event){
checkBoard(event) {
let target = $(event.target);
if(!target.hasClass('js-toggle-board-choose')){
if (!target.hasClass('js-toggle-board-choose')) {
target = target.parent();
}
const checkboxId = target.attr('id');
@@ -81,7 +81,7 @@ BlazeComponent.extendComponent({
$(`#${checkboxId}`).toggleClass('is-checked');
},
inviteThroughEmail(){
inviteThroughEmail() {
const emails = $('#email-to-invite').val().trim().split('\n').join(',').split(',');
const boardsToInvite = [];
$('.js-toggle-board-choose .materialCheckBox.is-checked').each(function () {
@@ -104,19 +104,23 @@ BlazeComponent.extendComponent({
}
},
saveMailServerInfo(){
saveMailServerInfo() {
this.setLoading(true);
$('li').removeClass('has-error');
try{
try {
const host = this.checkField('#mail-server-host');
const port = this.checkField('#mail-server-port');
const username = $('#mail-server-username').val().trim();
const password = $('#mail-server-password').val().trim();
const from = this.checkField('#mail-server-from');
const tls = $('#mail-server-tls.is-checked').length > 0;
Settings.update(Settings.findOne()._id, {$set:{'mailServer.host':host, 'mailServer.port': port, 'mailServer.username': username,
'mailServer.password': password, 'mailServer.enableTLS': tls, 'mailServer.from': from}});
Settings.update(Settings.findOne()._id, {
$set: {
'mailServer.host': host, 'mailServer.port': port, 'mailServer.username': username,
'mailServer.password': password, 'mailServer.enableTLS': tls, 'mailServer.from': from,
},
});
} catch (e) {
return;
} finally {
@@ -136,11 +140,12 @@ BlazeComponent.extendComponent({
const message = `${TAPi18n.__(err.error)}\n${reason}`;
console.log(message, err);
alert(message);
} /* eslint-enable no-console */
}
/* eslint-enable no-console */
});
},
events(){
events() {
return [{
'click a.js-toggle-registration': this.toggleRegistration,
'click a.js-toggle-tls': this.toggleTLS,
@@ -154,20 +159,28 @@ BlazeComponent.extendComponent({
}).register('setting');
BlazeComponent.extendComponent({
saveAllowEmailChange() {
saveAccountsChange() {
const allowEmailChange = ($('input[name=allowEmailChange]:checked').val() === 'true');
const allowUserNameChange = ($('input[name=allowUserNameChange]:checked').val() === 'true');
AccountSettings.update('accounts-allowEmailChange', {
$set: { 'booleanValue': allowEmailChange },
$set: {'booleanValue': allowEmailChange},
});
AccountSettings.update('accounts-allowUserNameChange', {
$set: {'booleanValue': allowUserNameChange},
});
},
allowEmailChange() {
return AccountSettings.findOne('accounts-allowEmailChange').booleanValue;
},
allowUserNameChange() {
return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue;
},
events() {
return [{
'click button.js-accounts-save': this.saveAllowEmailChange,
'click button.js-accounts-save': this.saveAccountsChange,
}];
},
}).register('accountSettings');
@@ -181,27 +194,27 @@ BlazeComponent.extendComponent({
this.loading.set(w);
},
currentSetting(){
currentSetting() {
return Announcements.findOne();
},
saveMessage() {
const message = $('#admin-announcement').val().trim();
Announcements.update(Announcements.findOne()._id, {
$set: { 'body': message },
$set: {'body': message},
});
},
toggleActive(){
toggleActive() {
this.setLoading(true);
const isActive = this.currentSetting().enabled;
Announcements.update(Announcements.findOne()._id, {
$set:{ 'enabled': !isActive},
$set: {'enabled': !isActive},
});
this.setLoading(false);
if(isActive){
if (isActive) {
$('.admin-announcement').slideUp();
}else{
} else {
$('.admin-announcement').slideDown();
}
},
@@ -22,4 +22,4 @@
+ span
display: inline-block
margin-top: 1px
margin-right: 10px
margin-right: 10px
+11 -4
View File
@@ -23,10 +23,11 @@ template(name='homeSidebar')
hr
+labelsWidget
hr
h3
i.fa.fa-comments-o
| {{_ 'activities'}}
+activities(mode="board")
unless currentUser.isNoComments
h3
i.fa.fa-comments-o
| {{_ 'activities'}}
+activities(mode="board")
template(name="membersWidget")
.board-widget.board-widget-members
@@ -145,6 +146,12 @@ template(name="changePermissionsPopup")
if isNormal
i.fa.fa-check
span.sub-name {{_ 'normal-desc'}}
li
a(class="{{#if isLastAdmin}}disabled{{else}}js-set-no-comments{{/if}}")
| {{_ 'no-comments'}}
if isNoComments
i.fa.fa-check
span.sub-name {{_ 'no-comments-desc'}}
li
a(class="{{#if isLastAdmin}}disabled{{else}}js-set-comment-only{{/if}}")
| {{_ 'comment-only'}}
+13 -3
View File
@@ -6,6 +6,7 @@ const viewTitles = {
filter: 'filter-cards',
search: 'search-cards',
multiselection: 'multi-selection',
customFields: 'custom-fields',
archives: 'archives',
};
@@ -125,8 +126,11 @@ Template.memberPopup.helpers({
if(type === 'normal'){
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const commentOnly = currentBoard.hasCommentOnly(this.userId);
const noComments = currentBoard.hasNoComments(this.userId);
if(commentOnly){
return TAPi18n.__('comment-only').toLowerCase();
} else if(noComments) {
return TAPi18n.__('no-comments').toLowerCase();
} else {
return TAPi18n.__(type).toLowerCase();
}
@@ -323,12 +327,13 @@ BlazeComponent.extendComponent({
}).register('addMemberPopup');
Template.changePermissionsPopup.events({
'click .js-set-admin, click .js-set-normal, click .js-set-comment-only'(event) {
'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only'(event) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const memberId = this.userId;
const isAdmin = $(event.currentTarget).hasClass('js-set-admin');
const isCommentOnly = $(event.currentTarget).hasClass('js-set-comment-only');
currentBoard.setMemberPermission(memberId, isAdmin, isCommentOnly);
const isNoComments = $(event.currentTarget).hasClass('js-set-no-comments');
currentBoard.setMemberPermission(memberId, isAdmin, isNoComments, isCommentOnly);
Popup.back(1);
},
});
@@ -341,7 +346,12 @@ Template.changePermissionsPopup.helpers({
isNormal() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return !currentBoard.hasAdmin(this.userId) && !currentBoard.hasCommentOnly(this.userId);
return !currentBoard.hasAdmin(this.userId) && !currentBoard.hasNoComments(this.userId) && !currentBoard.hasCommentOnly(this.userId);
},
isNoComments() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return !currentBoard.hasAdmin(this.userId) && currentBoard.hasNoComments(this.userId);
},
isCommentOnly() {
+35 -18
View File
@@ -45,28 +45,45 @@
display: flex
flex-direction: column
li > a
display: flex
height: 30px
margin: 0
padding: 4px
border-radius: 3px
align-items: center
li
& > a
display: flex
height: 30px
margin: 0
padding: 4px
border-radius: 3px
align-items: center
&:hover
&, i, .quiet
color white
&:hover
&, i, .quiet
color white
.member, .card-label
margin-right: 7px
margin-top: 5px
.member, .card-label
margin-right: 7px
margin-top: 5px
.sidebar-list-item-description
flex: 1
overflow: ellipsis
.minicard-edit-button
float: right
padding: 8px
border-radius: 3px
.fa.fa-check
margin: 0 4px
.sidebar-list-item-description
flex: 1
overflow: ellipsis
.fa.fa-check
margin: 0 4px
.minicard
padding: 6px 8px 4px
.minicard-edit-button
float: right
padding: 4px
border-radius: 3px
&:hover
background: #dbdbdb
.sidebar-btn
display: block
@@ -0,0 +1,52 @@
template(name="customFieldsSidebar")
ul.sidebar-list
each customFields
li
div.minicard-wrapper.js-minicard
div.minicard
a.fa.fa-pencil.js-edit-custom-field.minicard-edit-button
div.minicard-title
| {{ name }} ({{ type }})
if currentUser.isBoardMember
hr
a.sidebar-btn.js-open-create-custom-field
i.fa.fa-plus
span {{_ 'createCustomField'}}
template(name="createCustomFieldPopup")
form
label
| {{_ 'name'}}
unless _id
input.js-field-name(type="text" autofocus)
else
input.js-field-name(type="text" value=name)
label
| {{_ 'type'}}
select.js-field-type(disabled="{{#if _id}}disabled{{/if}}")
each types
if selected
option(value=value selected="selected") {{name}}
else
option(value=value) {{name}}
div.js-field-settings.js-field-settings-dropdown(class="{{#if isTypeNotSelected 'dropdown'}}hide{{/if}}")
label
| {{_ 'custom-field-dropdown-options'}}
each dropdownItems.get
input.js-dropdown-item(type="text" value=name placeholder="")
input.js-dropdown-item.last(type="text" value="" placeholder="{{_ 'custom-field-dropdown-options-placeholder'}}")
a.flex.js-field-show-on-card(class="{{#if showOnCard}}is-checked{{/if}}")
.materialCheckBox(class="{{#if showOnCard}}is-checked{{/if}}")
span {{_ 'show-field-on-card'}}
button.primary.wide.left(type="button")
| {{_ 'save'}}
if _id
button.negate.wide.right.js-delete-custom-field(type="button")
| {{_ 'delete'}}
template(name="deleteCustomFieldPopup")
p {{_ "custom-field-delete-pop"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
@@ -0,0 +1,131 @@
BlazeComponent.extendComponent({
customFields() {
return CustomFields.find({
boardId: Session.get('currentBoard'),
});
},
events() {
return [{
'click .js-open-create-custom-field': Popup.open('createCustomField'),
'click .js-edit-custom-field': Popup.open('editCustomField'),
}];
},
}).register('customFieldsSidebar');
const CreateCustomFieldPopup = BlazeComponent.extendComponent({
_types: ['text', 'number', 'date', 'dropdown'],
onCreated() {
this.type = new ReactiveVar((this.data().type) ? this.data().type : this._types[0]);
this.dropdownItems = new ReactiveVar((this.data().settings && this.data().settings.dropdownItems) ? this.data().settings.dropdownItems : []);
},
types() {
const currentType = this.data().type;
return this._types.
map((type) => {return {
value: type,
name: TAPi18n.__(`custom-field-${type}`),
selected: type === currentType,
};});
},
isTypeNotSelected(type) {
return this.type.get() !== type;
},
getDropdownItems() {
const items = this.dropdownItems.get();
Array.from(this.findAll('.js-field-settings-dropdown input')).forEach((el, index) => {
//console.log('each item!', index, el.value);
if (!items[index]) items[index] = {
_id: Random.id(6),
};
items[index].name = el.value.trim();
});
return items;
},
getSettings() {
const settings = {};
switch (this.type.get()) {
case 'dropdown': {
const dropdownItems = this.getDropdownItems().filter((item) => !!item.name.trim());
settings.dropdownItems = dropdownItems;
break;
}
}
return settings;
},
events() {
return [{
'change .js-field-type'(evt) {
const value = evt.target.value;
this.type.set(value);
},
'keydown .js-dropdown-item.last'(evt) {
if (evt.target.value.trim() && evt.keyCode === 13) {
const items = this.getDropdownItems();
this.dropdownItems.set(items);
evt.target.value = '';
}
},
'click .js-field-show-on-card'(evt) {
let $target = $(evt.target);
if(!$target.hasClass('js-field-show-on-card')){
$target = $target.parent();
}
$target.find('.materialCheckBox').toggleClass('is-checked');
$target.toggleClass('is-checked');
},
'click .primary'(evt) {
evt.preventDefault();
const data = {
boardId: Session.get('currentBoard'),
name: this.find('.js-field-name').value.trim(),
type: this.type.get(),
settings: this.getSettings(),
showOnCard: this.find('.js-field-show-on-card.is-checked') !== null,
};
// insert or update
if (!this.data()._id) {
CustomFields.insert(data);
} else {
CustomFields.update(this.data()._id, {$set: data});
}
Popup.back();
},
'click .js-delete-custom-field': Popup.afterConfirm('deleteCustomField', function() {
const customFieldId = this._id;
CustomFields.remove(customFieldId);
Popup.close();
}),
}];
},
});
CreateCustomFieldPopup.register('createCustomFieldPopup');
(class extends CreateCustomFieldPopup {
template() {
return 'createCustomFieldPopup';
}
}).register('editCustomFieldPopup');
/*Template.deleteCustomFieldPopup.events({
'submit'(evt) {
const customFieldId = this._id;
CustomFields.remove(customFieldId);
Popup.close();
}
});*/
@@ -40,6 +40,25 @@ template(name="filterSidebar")
| (<span class="username">{{ username }}</span>)
if Filter.members.isSelected _id
i.fa.fa-check
hr
ul.sidebar-list
li(class="{{#if Filter.customFields.isSelected undefined}}active{{/if}}")
a.name.js-toggle-custom-fields-filter
span.sidebar-list-item-description
| {{_ 'filter-no-custom-fields'}}
if Filter.customFields.isSelected undefined
i.fa.fa-check
each currentBoard.customFields
li(class="{{#if Filter.customFields.isSelected _id}}active{{/if}}")
a.name.js-toggle-custom-fields-filter
span.sidebar-list-item-description
| {{ name }}
if Filter.customFields.isSelected _id
i.fa.fa-check
hr
span {{_ 'advanced-filter-label'}}
input.js-field-advanced-filter(type="text")
span {{_ 'advanced-filter-description'}}
if Filter.isActive
hr
a.sidebar-btn.js-clear-all
@@ -11,6 +11,16 @@ BlazeComponent.extendComponent({
Filter.members.toggle(this.currentData()._id);
Filter.resetExceptions();
},
'click .js-toggle-custom-fields-filter'(evt) {
evt.preventDefault();
Filter.customFields.toggle(this.currentData()._id);
Filter.resetExceptions();
},
'change .js-field-advanced-filter'(evt) {
evt.preventDefault();
Filter.advanced.set(this.find('.js-field-advanced-filter').value.trim());
Filter.resetExceptions();
},
'click .js-clear-all'(evt) {
evt.preventDefault();
Filter.reset();
+103 -75
View File
@@ -1,4 +1,88 @@
const { calculateIndex } = Utils;
const { calculateIndex, enableClickOnTouch } = Utils;
function currentCardIsInThisList(listId, swimlaneId) {
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentUser = Meteor.user();
if (currentUser.profile.boardView === 'board-view-lists')
return currentCard && currentCard.listId === listId;
else if (currentUser.profile.boardView === 'board-view-swimlanes')
return currentCard && currentCard.listId === listId && currentCard.swimlaneId === swimlaneId;
else if (currentUser.profile.boardView === 'board-view-cal')
return currentCard;
else
return false;
}
function initSortable(boardComponent, $listsDom) {
// We want to animate the card details window closing. We rely on CSS
// transition for the actual animation.
$listsDom._uihooks = {
removeElement(node) {
const removeNode = _.once(() => {
node.parentNode.removeChild(node);
});
if ($(node).hasClass('js-card-details')) {
$(node).css({
flexBasis: 0,
padding: 0,
});
$listsDom.one(CSSEvents.transitionend, removeNode);
} else {
removeNode();
}
},
};
$listsDom.sortable({
tolerance: 'pointer',
helper: 'clone',
handle: '.js-list-header',
items: '.js-list:not(.js-list-composer)',
placeholder: 'list placeholder',
distance: 7,
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
boardComponent.setIsDragging(true);
},
stop(evt, ui) {
// To attribute the new index number, we need to get the DOM element
// of the previous and the following card -- if any.
const prevListDom = ui.item.prev('.js-list').get(0);
const nextListDom = ui.item.next('.js-list').get(0);
const sortIndex = calculateIndex(prevListDom, nextListDom, 1);
$listsDom.sortable('cancel');
const listDomElement = ui.item.get(0);
const list = Blaze.getData(listDomElement);
Lists.update(list._id, {
$set: {
sort: sortIndex.base,
},
});
boardComponent.setIsDragging(false);
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-list:not(.js-list-composer)');
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
}
// Disable drag-dropping while in multi-selection mode, or if the current user
// is not a board member
boardComponent.autorun(() => {
const $listDom = $listsDom;
if ($listDom.data('sortable')) {
$listsDom.sortable('option', 'disabled',
MultiSelection.isActive() || !userIsMember());
}
});
}
BlazeComponent.extendComponent({
onRendered() {
@@ -9,71 +93,7 @@ BlazeComponent.extendComponent({
boardComponent.scrollLeft();
}
// We want to animate the card details window closing. We rely on CSS
// transition for the actual animation.
$listsDom._uihooks = {
removeElement(node) {
const removeNode = _.once(() => {
node.parentNode.removeChild(node);
});
if ($(node).hasClass('js-card-details')) {
$(node).css({
flexBasis: 0,
padding: 0,
});
$listsDom.one(CSSEvents.transitionend, removeNode);
} else {
removeNode();
}
},
};
$listsDom.sortable({
tolerance: 'pointer',
helper: 'clone',
handle: '.js-list-header',
items: '.js-list:not(.js-list-composer)',
placeholder: 'list placeholder',
distance: 7,
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
boardComponent.setIsDragging(true);
},
stop(evt, ui) {
// To attribute the new index number, we need to get the DOM element
// of the previous and the following card -- if any.
const prevListDom = ui.item.prev('.js-list').get(0);
const nextListDom = ui.item.next('.js-list').get(0);
const sortIndex = calculateIndex(prevListDom, nextListDom, 1);
$listsDom.sortable('cancel');
const listDomElement = ui.item.get(0);
const list = Blaze.getData(listDomElement);
Lists.update(list._id, {
$set: {
sort: sortIndex.base,
},
});
boardComponent.setIsDragging(false);
},
});
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
}
// Disable drag-dropping while in multi-selection mode, or if the current user
// is not a board member
boardComponent.autorun(() => {
const $listDom = $listsDom;
if ($listDom.data('sortable')) {
$listsDom.sortable('option', 'disabled',
MultiSelection.isActive() || !userIsMember());
}
});
initSortable(boardComponent, $listsDom);
},
onCreated() {
this.draggingActive = new ReactiveVar(false);
@@ -87,15 +107,7 @@ BlazeComponent.extendComponent({
},
currentCardIsInThisList(listId, swimlaneId) {
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentBoardId = Session.get('currentBoard');
const board = Boards.findOne(currentBoardId);
if (board.view === 'board-view-lists')
return currentCard && currentCard.listId === listId;
else if (board.view === 'board-view-swimlanes')
return currentCard && currentCard.listId === listId && currentCard.swimlaneId === swimlaneId;
else
return false;
return currentCardIsInThisList(listId, swimlaneId);
},
events() {
@@ -210,3 +222,19 @@ Template.swimlane.helpers({
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
});
BlazeComponent.extendComponent({
currentCardIsInThisList(listId, swimlaneId) {
return currentCardIsInThisList(listId, swimlaneId);
},
onRendered() {
const boardComponent = this.parentComponent();
const $listsDom = this.$('.js-lists');
if (!Session.get('currentCard')) {
boardComponent.scrollLeft();
}
initSortable(boardComponent, $listsDom);
},
}).register('listsGroup');
+1 -1
View File
@@ -39,7 +39,7 @@
margin-top: 50px;
font-weight: bold;
min-height: 9px;
min-width: 30px;
width: 50px;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
+1 -1
View File
@@ -1,7 +1,7 @@
template(name="userAvatar")
a.member.js-member(title="{{userData.profile.fullname}} ({{userData.username}})")
if userData.profile.avatarUrl
img.avatar.avatar-image(src=userData.profile.avatarUrl)
img.avatar.avatar-image(src="{{userData.profile.avatarUrl}}")
else
+userAvatarInitials(userId=userData._id)
+3 -2
View File
@@ -134,8 +134,9 @@ BlazeComponent.extendComponent({
Template.cardMembersPopup.helpers({
isCardMember() {
const cardId = Template.parentData()._id;
const cardMembers = Cards.findOne(cardId).members || [];
const card = Template.parentData();
const cardMembers = card.getMembers();
return _.contains(cardMembers, this.userId);
},
+5 -2
View File
@@ -33,7 +33,10 @@ template(name="editProfilePopup")
| {{_ 'username'}}
span.error.hide.username-taken
| {{_ 'error-username-taken'}}
input.js-profile-username(type="text" value=username)
if allowUserNameChange
input.js-profile-username(type="text" value=username)
else
input.js-profile-username(type="text" value=username readonly)
label
| {{_ 'initials'}}
input.js-profile-initials(type="text" value=profile.initials)
@@ -86,5 +89,5 @@ template(name="changeSettingsPopup")
li
label.bold
| {{_ 'show-cards-minimum-count'}}
input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="1" max="99" onkeydown="return false")
input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false")
input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}")
+3
View File
@@ -24,6 +24,9 @@ Template.editProfilePopup.helpers({
allowEmailChange() {
return AccountSettings.findOne('accounts-allowEmailChange').booleanValue;
},
allowUserNameChange() {
return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue;
},
});
Template.editProfilePopup.events({
+86
View File
@@ -0,0 +1,86 @@
DatePicker = BlazeComponent.extendComponent({
template() {
return 'datepicker';
},
onCreated() {
this.error = new ReactiveVar('');
this.card = this.data();
this.date = new ReactiveVar(moment.invalid());
},
onRendered() {
const $picker = this.$('.js-datepicker').datepicker({
todayHighlight: true,
todayBtn: 'linked',
language: TAPi18n.getLanguage(),
}).on('changeDate', function(evt) {
this.find('#date').value = moment(evt.date).format('L');
this.error.set('');
this.find('#time').focus();
}.bind(this));
if (this.date.get().isValid()) {
$picker.datepicker('update', this.date.get().toDate());
}
},
showDate() {
if (this.date.get().isValid())
return this.date.get().format('L');
return '';
},
showTime() {
if (this.date.get().isValid())
return this.date.get().format('LT');
return '';
},
dateFormat() {
return moment.localeData().longDateFormat('L');
},
timeFormat() {
return moment.localeData().longDateFormat('LT');
},
events() {
return [{
'keyup .js-date-field'() {
// parse for localized date format in strict mode
const dateMoment = moment(this.find('#date').value, 'L', true);
if (dateMoment.isValid()) {
this.error.set('');
this.$('.js-datepicker').datepicker('update', dateMoment.toDate());
}
},
'keyup .js-time-field'() {
// parse for localized time format in strict mode
const dateMoment = moment(this.find('#time').value, 'LT', true);
if (dateMoment.isValid()) {
this.error.set('');
}
},
'submit .edit-date'(evt) {
evt.preventDefault();
// if no time was given, init with 12:00
const time = evt.target.time.value || moment(new Date().setHours(12, 0, 0)).format('LT');
const dateString = `${evt.target.date.value} ${time}`;
const newDate = moment(dateString, 'L LT', true);
if (newDate.isValid()) {
this._storeDate(newDate.toDate());
Popup.close();
}
else {
this.error.set('invalid-date');
evt.target.date.focus();
}
},
'click .js-delete-date'(evt) {
evt.preventDefault();
this._deleteDate();
Popup.close();
},
}];
},
});
+412 -13
View File
@@ -3,17 +3,19 @@
// RangeFilter, dateFilter, etc.). We then define a global `Filter` object whose
// goal is to filter complete documents by using the local filters for each
// fields.
function showFilterSidebar() {
Sidebar.setView('filter');
}
// Use a "set" filter for a field that is a set of documents uniquely
// identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`.
// use "subField" for searching inside object Fields.
// For instance '{ 'customFields._id': ['field1','field2']} (subField would be: _id)
class SetFilter {
constructor() {
constructor(subField = '') {
this._dep = new Tracker.Dependency();
this._selectedElements = [];
this.subField = subField;
}
isSelected(val) {
@@ -61,7 +63,9 @@ class SetFilter {
_getMongoSelector() {
this._dep.depend();
return { $in: this._selectedElements };
return {
$in: this._selectedElements,
};
}
_getEmptySelector() {
@@ -72,10 +76,385 @@ class SetFilter {
includeEmpty = true;
}
});
return includeEmpty ? { $eq: [] } : null;
return includeEmpty ? {
$eq: [],
} : null;
}
}
// Advanced filter forms a MongoSelector from a users String.
// Build by: Ignatz 19.05.2018 (github feuerball11)
class AdvancedFilter {
constructor() {
this._dep = new Tracker.Dependency();
this._filter = '';
this._lastValide = {};
}
set(str) {
this._filter = str;
this._dep.changed();
}
reset() {
this._filter = '';
this._lastValide = {};
this._dep.changed();
}
_isActive() {
this._dep.depend();
return this._filter !== '';
}
_filterToCommands() {
const commands = [];
let current = '';
let string = false;
let regex = false;
let wasString = false;
let ignore = false;
for (let i = 0; i < this._filter.length; i++) {
const char = this._filter.charAt(i);
if (ignore) {
ignore = false;
current += char;
continue;
}
if (char === '/') {
string = !string;
if (string) regex = true;
current += char;
continue;
}
if (char === '\'') {
string = !string;
if (string) wasString = true;
continue;
}
if (char === '\\' && !string) {
ignore = true;
continue;
}
if (char === ' ' && !string) {
commands.push({
'cmd': current,
'string': wasString,
regex,
});
wasString = false;
current = '';
continue;
}
current += char;
}
if (current !== '') {
commands.push({
'cmd': current,
'string': wasString,
regex,
});
}
return commands;
}
_fieldNameToId(field) {
const found = CustomFields.findOne({
'name': field,
});
return found._id;
}
_fieldValueToId(field, value) {
const found = CustomFields.findOne({
'name': field,
});
if (found.settings.dropdownItems && found.settings.dropdownItems.length > 0) {
for (let i = 0; i < found.settings.dropdownItems.length; i++) {
if (found.settings.dropdownItems[i].name === value) {
return found.settings.dropdownItems[i]._id;
}
}
}
return value;
}
_arrayToSelector(commands) {
try {
//let changed = false;
this._processSubCommands(commands);
} catch (e) {
return this._lastValide;
}
this._lastValide = {
$or: commands,
};
return {
$or: commands,
};
}
_processSubCommands(commands) {
const subcommands = [];
let level = 0;
let start = -1;
for (let i = 0; i < commands.length; i++) {
if (commands[i].cmd) {
switch (commands[i].cmd) {
case '(':
{
level++;
if (start === -1) start = i;
continue;
}
case ')':
{
level--;
commands.splice(i, 1);
i--;
continue;
}
default:
{
if (level > 0) {
subcommands.push(commands[i]);
commands.splice(i, 1);
i--;
continue;
}
}
}
}
}
if (start !== -1) {
this._processSubCommands(subcommands);
if (subcommands.length === 1)
commands.splice(start, 0, subcommands[0]);
else
commands.splice(start, 0, subcommands);
}
this._processConditions(commands);
this._processLogicalOperators(commands);
}
_processConditions(commands) {
for (let i = 0; i < commands.length; i++) {
if (!commands[i].string && commands[i].cmd) {
switch (commands[i].cmd) {
case '=':
case '==':
case '===':
{
const field = commands[i - 1].cmd;
const str = commands[i + 1].cmd;
if (commands[i + 1].regex) {
const match = str.match(new RegExp('^/(.*?)/([gimy]*)$'));
let regex = null;
if (match.length > 2)
regex = new RegExp(match[1], match[2]);
else
regex = new RegExp(match[1]);
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': regex,
};
} else {
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': {
$in: [this._fieldValueToId(field, str), parseInt(str, 10)],
},
};
}
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
case '!=':
case '!==':
{
const field = commands[i - 1].cmd;
const str = commands[i + 1].cmd;
if (commands[i + 1].regex) {
const match = str.match(new RegExp('^/(.*?)/([gimy]*)$'));
let regex = null;
if (match.length > 2)
regex = new RegExp(match[1], match[2]);
else
regex = new RegExp(match[1]);
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': {
$not: regex,
},
};
} else {
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': {
$not: {
$in: [this._fieldValueToId(field, str), parseInt(str, 10)],
},
},
};
}
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
case '>':
case 'gt':
case 'Gt':
case 'GT':
{
const field = commands[i - 1].cmd;
const str = commands[i + 1].cmd;
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': {
$gt: parseInt(str, 10),
},
};
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
case '>=':
case '>==':
case 'gte':
case 'Gte':
case 'GTE':
{
const field = commands[i - 1].cmd;
const str = commands[i + 1].cmd;
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': {
$gte: parseInt(str, 10),
},
};
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
case '<':
case 'lt':
case 'Lt':
case 'LT':
{
const field = commands[i - 1].cmd;
const str = commands[i + 1].cmd;
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': {
$lt: parseInt(str, 10),
},
};
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
case '<=':
case '<==':
case 'lte':
case 'Lte':
case 'LTE':
{
const field = commands[i - 1].cmd;
const str = commands[i + 1].cmd;
commands[i] = {
'customFields._id': this._fieldNameToId(field),
'customFields.value': {
$lte: parseInt(str, 10),
},
};
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
}
}
}
}
_processLogicalOperators(commands) {
for (let i = 0; i < commands.length; i++) {
if (!commands[i].string && commands[i].cmd) {
switch (commands[i].cmd) {
case 'or':
case 'Or':
case 'OR':
case '|':
case '||':
{
const op1 = commands[i - 1];
const op2 = commands[i + 1];
commands[i] = {
$or: [op1, op2],
};
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
case 'and':
case 'And':
case 'AND':
case '&':
case '&&':
{
const op1 = commands[i - 1];
const op2 = commands[i + 1];
commands[i] = {
$and: [op1, op2],
};
commands.splice(i - 1, 1);
commands.splice(i, 1);
//changed = true;
i--;
break;
}
case 'not':
case 'Not':
case 'NOT':
case '!':
{
const op1 = commands[i + 1];
commands[i] = {
$not: op1,
};
commands.splice(i + 1, 1);
//changed = true;
i--;
break;
}
}
}
}
}
_getMongoSelector() {
this._dep.depend();
const commands = this._filterToCommands();
return this._arrayToSelector(commands);
}
}
// The global Filter object.
// XXX It would be possible to re-write this object more elegantly, and removing
// the need to provide a list of `_fields`. We also should move methods into the
@@ -86,8 +465,10 @@ Filter = {
// before changing the schema.
labelIds: new SetFilter(),
members: new SetFilter(),
customFields: new SetFilter('_id'),
advanced: new AdvancedFilter(),
_fields: ['labelIds', 'members'],
_fields: ['labelIds', 'members', 'customFields'],
// We don't filter cards that have been added after the last filter change. To
// implement this we keep the id of these cards in this `_exceptions` fields
@@ -98,7 +479,7 @@ Filter = {
isActive() {
return _.any(this._fields, (fieldName) => {
return this[fieldName]._isActive();
});
}) || this.advanced._isActive();
},
_getMongoSelector() {
@@ -111,7 +492,11 @@ Filter = {
this._fields.forEach((fieldName) => {
const filter = this[fieldName];
if (filter._isActive()) {
filterSelector[fieldName] = filter._getMongoSelector();
if (filter.subField !== '') {
filterSelector[`${fieldName}.${filter.subField}`] = filter._getMongoSelector();
} else {
filterSelector[fieldName] = filter._getMongoSelector();
}
emptySelector[fieldName] = filter._getEmptySelector();
if (emptySelector[fieldName] !== null) {
includeEmptySelectors = true;
@@ -119,13 +504,24 @@ Filter = {
}
});
const exceptionsSelector = {_id: {$in: this._exceptions}};
const exceptionsSelector = {
_id: {
$in: this._exceptions,
},
};
this._exceptionsDep.depend();
if (includeEmptySelectors)
return {$or: [filterSelector, exceptionsSelector, emptySelector]};
else
return {$or: [filterSelector, exceptionsSelector]};
const selectors = [exceptionsSelector];
if (_.any(this._fields, (fieldName) => {
return this[fieldName]._isActive();
})) selectors.push(filterSelector);
if (includeEmptySelectors) selectors.push(emptySelector);
if (this.advanced._isActive()) selectors.push(this.advanced._getMongoSelector());
return {
$or: selectors,
};
},
mongoSelector(additionalSelector) {
@@ -133,7 +529,9 @@ Filter = {
if (_.isUndefined(additionalSelector))
return filterSelector;
else
return {$and: [filterSelector, additionalSelector]};
return {
$and: [filterSelector, additionalSelector],
};
},
reset() {
@@ -141,6 +539,7 @@ Filter = {
const filter = this[fieldName];
filter.reset();
});
this.advanced.reset();
this.resetExceptions();
},
+11 -1
View File
@@ -75,6 +75,16 @@ InlinedForm = BlazeComponent.extendComponent({
EscapeActions.register('inlinedForm',
() => { currentlyOpenedForm.get().close(); },
() => { return currentlyOpenedForm.get() !== null; }, {
noClickEscapeOn: '.js-inlined-form',
enabledOnClick: false,
}
);
// submit on click outside
document.addEventListener('click', function(evt) {
const openedForm = currentlyOpenedForm.get();
const isClickOutside = $(evt.target).closest('.js-inlined-form').length === 0;
if (openedForm && isClickOutside) {
$('.js-inlined-form button[type=submit]').click();
openedForm.close();
}
}, true);
+125
View File
@@ -33,6 +33,37 @@ Utils = {
return $(window).width() <= 800;
},
calculateIndexData(prevData, nextData, nItems = 1) {
let base, increment;
// If we drop the card to an empty column
if (!prevData && !nextData) {
base = 0;
increment = 1;
// If we drop the card in the first position
} else if (!prevData) {
base = nextData.sort - 1;
increment = -1;
// If we drop the card in the last position
} else if (!nextData) {
base = prevData.sort + 1;
increment = 1;
}
// In the general case take the average of the previous and next element
// sort indexes.
else {
const prevSortIndex = prevData.sort;
const nextSortIndex = nextData.sort;
increment = (nextSortIndex - prevSortIndex) / (nItems + 1);
base = prevSortIndex + increment;
}
// XXX Return a generator that yield values instead of a base with a
// increment number.
return {
base,
increment,
};
},
// Determine the new sort index
calculateIndex(prevCardDomElement, nextCardDomElement, nCards = 1) {
let base, increment;
@@ -64,6 +95,100 @@ Utils = {
increment,
};
},
// Detect touch device
isTouchDevice() {
const isTouchable = (() => {
const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
const mq = function(query) {
return window.matchMedia(query).matches;
};
if (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch) {
return true;
}
// include the 'heartz' as a way to have a non matching MQ to help terminate the join
// https://git.io/vznFH
const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');
return mq(query);
})();
Utils.isTouchDevice = () => isTouchable;
return isTouchable;
},
calculateTouchDistance(touchA, touchB) {
return Math.sqrt(
Math.pow(touchA.screenX - touchB.screenX, 2) +
Math.pow(touchA.screenY - touchB.screenY, 2)
);
},
enableClickOnTouch(selector) {
let touchStart = null;
let lastTouch = null;
$(document).on('touchstart', selector, function(e) {
touchStart = e.originalEvent.touches[0];
});
$(document).on('touchmove', selector, function(e) {
const touches = e.originalEvent.touches;
lastTouch = touches[touches.length - 1];
});
$(document).on('touchend', selector, function(e) {
if (touchStart && lastTouch && Utils.calculateTouchDistance(touchStart, lastTouch) <= 20) {
e.preventDefault();
const clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent('click', true, true);
e.target.dispatchEvent(clickEvent);
}
});
},
setMatomo(data){
window._paq = window._paq || [];
window._paq.push(['setDoNotTrack', data.doNotTrack]);
if (data.withUserName){
window._paq.push(['setUserId', Meteor.user().username]);
}
window._paq.push(['trackPageView']);
window._paq.push(['enableLinkTracking']);
(function() {
window._paq.push(['setTrackerUrl', `${data.address}piwik.php`]);
window._paq.push(['setSiteId', data.siteId]);
const script = document.createElement('script');
Object.assign(script, {
id: 'scriptMatomo',
type: 'text/javascript',
async: 'true',
defer: 'true',
src: `${data.address}piwik.js`,
});
const s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(script, s);
})();
Session.set('matomo', true);
},
manageMatomo() {
const matomo = Session.get('matomo');
if (matomo === undefined){
Meteor.call('getMatomoConf', (err, data) => {
if (err && err.error[0] === 'var-not-exist'){
Session.set('matomo', false); // siteId || address server not defined
}
if (!err){
Utils.setMatomo(data);
}
});
} else if (matomo) {
window._paq.push(['trackPageView']);
}
},
};
// A simple tracker dependency that we invalidate every time the window is
+4
View File
@@ -0,0 +1,4 @@
module.exports.models = {
connection: 'mongodb',
migrate: 'safe',
};
+6
View File
@@ -14,6 +14,8 @@ FlowRouter.route('/', {
Filter.reset();
EscapeActions.executeAll();
Utils.manageMatomo();
BlazeLayout.render('defaultLayout', {
headerBar: 'boardListHeaderBar',
content: 'boardList',
@@ -38,6 +40,8 @@ FlowRouter.route('/b/:id/:slug', {
EscapeActions.executeUpTo('popup-close');
}
Utils.manageMatomo();
BlazeLayout.render('defaultLayout', {
headerBar: 'boardHeaderBar',
content: 'board',
@@ -53,6 +57,8 @@ FlowRouter.route('/b/:boardId/:slug/:cardId', {
Session.set('currentBoard', params.boardId);
Session.set('currentCard', params.cardId);
Utils.manageMatomo();
BlazeLayout.render('defaultLayout', {
headerBar: 'boardHeaderBar',
content: 'board',
+48 -3
View File
@@ -3,7 +3,7 @@ version: '2'
services:
wekandb:
image: mongo:3.2.18
image: mongo:3.2.20
container_name: wekan-db
restart: always
command: mongod --smallfiles --oplogSize 128
@@ -16,7 +16,7 @@ services:
- wekan-db-dump:/dump
wekan:
image: wekanteam/wekan:latest
image: quay.io/wekan/wekan
container_name: wekan-app
restart: always
networks:
@@ -33,10 +33,55 @@ services:
- METEOR_EDGE=${METEOR_EDGE}
- USE_EDGE=${USE_EDGE}
ports:
- 80:80
# Docker outsideport:insideport
- 80:8080
environment:
- MONGO_URL=mongodb://wekandb:27017/wekan
- ROOT_URL=http://localhost
# Wekan Export Board works when WITH_API='true'.
# If you disable Wekan API with 'false', Export Board does not work.
- WITH_API=true
# Optional: Integration with Matomo https://matomo.org that is installed to your server
# The address of the server where Matomo is hosted.
# example: - MATOMO_ADDRESS=https://example.com/matomo
- MATOMO_ADDRESS=''
# The value of the site ID given in Matomo server for Wekan
# example: - MATOMO_SITE_ID=12345
- MATOMO_SITE_ID=''
# The option do not track which enables users to not be tracked by matomo
# example: - MATOMO_DO_NOT_TRACK=false
- MATOMO_DO_NOT_TRACK=true
# The option that allows matomo to retrieve the username:
# example: MATOMO_WITH_USERNAME=true
- MATOMO_WITH_USERNAME=false
# Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside.
# Setting this to false is not recommended, it also disables all other browser policy protections
# and allows all iframing etc. See wekan/server/policy.js
- BROWSER_POLICY_ENABLED=true
# When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside.
- TRUSTED_URL=''
# What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId .
# example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
- WEBHOOKS_ATTRIBUTES=''
# OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
# OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345
# example: OAUTH2_CLIENT_ID=abcde12345
- OAUTH2_CLIENT_ID=''
# OAuth2 Secret, for example from Rocket.Chat: Example: 54321abcde
# example: OAUTH2_SECRET=54321abcde
- OAUTH2_SECRET=''
# OAuth2 Server URL, for example Rocket.Chat. Example: https://chat.example.com
# example: OAUTH2_SERVER_URL=https://chat.example.com
- OAUTH2_SERVER_URL=''
# OAuth2 Authorization Endpoint. Example: /oauth/authorize
# example: OAUTH2_AUTH_ENDPOINT=/oauth/authorize
- OAUTH2_AUTH_ENDPOINT=''
# OAuth2 Userinfo Endpoint. Example: /oauth/userinfo
# example: OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo
- OAUTH2_USERINFO_ENDPOINT=''
# OAuth2 Token Endpoint. Example: /oauth/token
# example: OAUTH2_TOKEN_ENDPOINT=/oauth/token
- OAUTH2_TOKEN_ENDPOINT=''
depends_on:
- wekandb
+101 -29
View File
@@ -2,17 +2,19 @@
"accept": "اقبلboard",
"act-activity-notify": "[Wekan] اشعار عن نشاط",
"act-addAttachment": "ربط __attachment__ الى __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addComment": "علق على __comment__ : __card__",
"act-createBoard": "احدث __board__",
"act-createCard": "اضاف __card__ الى __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "اضاف __list__ الى __board__",
"act-addBoardMember": "اضاف __member__ الى __board__",
"act-archivedBoard": "قام بأرشفة __board__",
"act-archivedCard": "قام بأرشفة __card__",
"act-archivedList": "قام بأرشفة __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "إستورد __board__",
"act-importCard": "إستورد __card__",
"act-importList": "إستورد __list__",
@@ -27,9 +29,10 @@
"activities": "الأنشطة",
"activity": "النشاط",
"activity-added": "تمت إضافة %s ل %s",
"activity-archived": "إلى الأرشيف %s",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "إرفاق %s ل %s",
"activity-created": "أنشأ %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "استبعاد %s عن %s",
"activity-imported": "imported %s into %s from %s",
"activity-imported-board": "imported %s from %s",
@@ -39,6 +42,7 @@
"activity-removed": "حذف %s إلى %s",
"activity-sent": "إرسال %s إلى %s",
"activity-unjoined": "غادر %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "أضاف قائمة تحقق إلى %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"add": "أضف",
@@ -46,6 +50,7 @@
"add-board": "إضافة لوحة",
"add-card": "إضافة بطاقة",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "إضافة قائمة تدقيق",
"add-checklist-item": "إضافة عنصر إلى قائمة التحقق",
"add-cover": "إضافة غلاف",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "And __count__ other بطاقات",
"apply": "طبق",
"app-is-offline": "يتمّ تحميل ويكان، يرجى الانتظار. سيؤدي تحديث الصفحة إلى فقدان البيانات. إذا لم يتم تحميل ويكان، يرجى التحقق من أن خادم ويكان لم يتوقف. ",
"archive": "أرشيف",
"archive-all": "أرشيف الكل",
"archive-board": "أرشيف اللوحة",
"archive-card": "أرشيف البطاقة",
"archive-list": "قائمة الأرشيفات",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "أرشف المُحدّد",
"archiveBoardPopup-title": "أرشيف اللوحة ؟",
"archived-items": "عناصر مؤرشفة",
"archived-boards": "لوحات مؤرشفة",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "استعادة اللوحة",
"no-archived-boards": "لا توجد لوحات مؤرشفة.",
"archives": "أرشيفات",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "تعيين عضو",
"attached": "أُرفق)",
"attachment": "مرفق",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "قائمة اللوحة",
"boards": "لوحات",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "القائمات",
"bucket-example": "مثل « todo list » على سبيل المثال",
"cancel": "إلغاء",
"card-archived": "هذه البطاقة أُرشفت.",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "%s تعليقات لهذه البطاقة",
"card-delete-notice": "هذا حذف أبديّ . سوف تفقد كل الإجراءات المنوطة بهذه البطاقة",
"card-delete-pop": "سيتم إزالة جميع الإجراءات من تبعات النشاط، وأنك لن تكون قادرا على إعادة فتح البطاقة. لا يوجد التراجع.",
"card-delete-suggest-archive": "يمكنك أرشفة بطاقة لحذفها من اللوحة والمحافظة على النشاط.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "مستحق",
"card-due-on": "مستحق في",
"card-spent": "Spent Time",
"card-edit-attachments": "تعديل المرفقات",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "تعديل العلامات",
"card-edit-members": "تعديل الأعضاء",
"card-labels-title": "تعديل علامات البطاقة.",
@@ -118,12 +126,19 @@
"card-start": "بداية",
"card-start-on": "يبدأ في",
"cardAttachmentsPopup-title": "إرفاق من",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "حذف البطاقة ?",
"cardDetailsActionsPopup-title": "إجراءات على البطاقة",
"cardLabelsPopup-title": "علامات",
"cardMembersPopup-title": "أعضاء",
"cardMorePopup-title": "المزيد",
"cards": "بطاقات",
"cards-count": "بطاقات",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Change",
"change-avatar": "تعديل الصورة الشخصية",
"change-password": "تغيير كلمة المرور",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "تغيير كلمة المرور",
"changePermissionsPopup-title": "تعديل الصلاحيات",
"changeSettingsPopup-title": "تغيير الاعدادات",
"subtasks": "Subtasks",
"checklists": "قوائم التّدقيق",
"click-to-star": "اضغط لإضافة اللوحة للمفضلة.",
"click-to-unstar": "اضغط لحذف اللوحة من المفضلة.",
"clipboard": "Clipboard or drag & drop",
"close": "غلق",
"close-board": "غلق اللوحة",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "black",
"color-blue": "blue",
"color-green": "green",
@@ -155,9 +171,14 @@
"comment-placeholder": "أكتب تعليق",
"comment-only": "التعليق فقط",
"comment-only-desc": "يمكن التعليق على بطاقات فقط.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "حاسوب",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "نسخ رابط البطاقة إلى الحافظة",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "نسخ البطاقة",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "إنشاء لوحة",
"chooseBoardSourcePopup-title": "استيراد لوحة",
"createLabelPopup-title": "إنشاء علامة",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "الحالي",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "تاريخ",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "تاريخ",
"decline": "Decline",
"default-avatar": "صورة شخصية افتراضية",
"delete": "حذف",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "حذف العلامة ?",
"description": "وصف",
"disambiguateMultiLabelPopup-title": "تحديد الإجراء على العلامة",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "تغيير تاريخ البدء",
"editCardDueDatePopup-title": "تغيير تاريخ الاستحقاق",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "تعديل العلامة",
"editNotificationPopup-title": "تصحيح الإشعار",
@@ -221,15 +257,19 @@
"filter-clear": "مسح التصفية",
"filter-no-label": "لا يوجد ملصق",
"filter-no-member": "ليس هناك أي عضو",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "التصفية تشتغل",
"filter-on-desc": "أنت بصدد تصفية بطاقات هذه اللوحة. اضغط هنا لتعديل التصفية.",
"filter-to-selection": "تصفية بالتحديد",
"advanced-filter-label": "Advanced Filter",
"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": "الإسم الكامل",
"header-logo-title": "الرجوع إلى صفحة اللوحات",
"hide-system-messages": "إخفاء رسائل النظام",
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
"home": "الرئيسية",
"import": "Import",
"link": "Link",
"import-board": "استيراد لوحة",
"import-board-c": "استيراد لوحة",
"import-board-title-trello": "Import board from Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "مغادرة اللوحة ؟",
"link-card": "ربط هذه البطاقة",
"list-archive-cards": "أرضفت بطاقات هذه القائمة",
"list-archive-cards-pop": "سيقتضي هذا أرشفة جميع بطاقات هذه القائمة. لمشاهدة أرشيف البطاقات أو إعادتها إلى اللوحة، اضغط على -القائمة- ثم - أرشيف العناصر-",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "نقل بطاقات هذه القائمة",
"list-select-cards": "تحديد بطاقات هذه القائمة",
"listActionPopup-title": "قائمة الإجراءات",
@@ -273,7 +313,7 @@
"listMorePopup-title": "المزيد",
"link-list": "رابط إلى هذه القائمة",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "يمكنك أرشفة قائمة لحذفها من اللوحة والمحافظة على النشاط.",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
"lists": "القائمات",
"swimlanes": "Swimlanes",
"log-out": "تسجيل الخروج",
@@ -293,9 +333,9 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "لوحاتي",
"name": "اسم",
"no-archived-cards": "لا توجد بطاقات مؤرشفة.",
"no-archived-lists": "لا توجد قوائم مؤرشفة.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "لا توجد نتائج",
"normal": "عادي",
"normal-desc": "يمكن مشاهدة و تعديل البطاقات. لا يمكن تغيير إعدادات الضبط.",
@@ -365,6 +405,7 @@
"title": "عنوان",
"tracking": "تتبع",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "إلغاء تعيين العضو",
"unsaved-description": "لديك وصف غير محفوظ",
"unwatch": "غير مُشاهد",
@@ -373,7 +414,7 @@
"uploaded-avatar": "تم رفع الصورة الشخصية",
"username": "اسم المستخدم",
"view-it": "شاهدها",
"warn-list-archived": "انتبه : هذه البطاقة في أرشيف القائمات",
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
"watch": "مُشاهد",
"watching": "مشاهدة",
"watching-info": "You will be notified of any change in this board",
@@ -429,11 +470,42 @@
"hours": "الساعات",
"minutes": "الدقائق",
"seconds": "الثواني",
"show-field-on-card": "Show this field on card",
"yes": "نعم",
"no": "لا",
"accounts": "الحسابات",
"accounts-allowEmailChange": "السماح بتغيير البريد الإلكتروني",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
"verified": "Verified",
"active": "Active"
"active": "Active",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+179 -107
View File
@@ -1,51 +1,56 @@
{
"accept": "Accept",
"act-activity-notify": "[Wekan] Известия за дейности",
"act-addAttachment": "attached __attachment__ to __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addAttachment": "прикачи __attachment__ към __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "добави списък със задачи __checklist__ към __card__",
"act-addChecklistItem": "добави __checklistItem__ към списък със задачи __checklist__ в __card__",
"act-addComment": "Коментира в __card__: __comment__",
"act-createBoard": "created __board__",
"act-createCard": "added __card__ to __list__",
"act-createList": "added __list__ to __board__",
"act-addBoardMember": "added __member__ to __board__",
"act-archivedBoard": "archived __board__",
"act-archivedCard": "archived __card__",
"act-archivedList": "archived __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-importBoard": "imported __board__",
"act-importCard": "imported __card__",
"act-importList": "imported __list__",
"act-joinMember": "added __member__ to __card__",
"act-moveCard": "moved __card__ from __oldList__ to __list__",
"act-removeBoardMember": "removed __member__ from __board__",
"act-restoredCard": "restored __card__ to __board__",
"act-unjoinMember": "removed __member__ from __card__",
"act-createBoard": "създаде __board__",
"act-createCard": "добави __card__ към __list__",
"act-createCustomField": "създаде собствено поле __customField__",
"act-createList": "добави __list__ към __board__",
"act-addBoardMember": "добави __member__ към __board__",
"act-archivedBoard": "__board__ беше преместен в Кошчето",
"act-archivedCard": "__card__ беше преместена в Кошчето",
"act-archivedList": "__list__ беше преместен в Кошчето",
"act-archivedSwimlane": "__swimlane__ беше преместен в Кошчето",
"act-importBoard": "импортира __board__",
"act-importCard": "импортира __card__",
"act-importList": "импортира __list__",
"act-joinMember": "добави __member__ към __card__",
"act-moveCard": "премести __card__ от __oldList__ в __list__",
"act-removeBoardMember": "премахна __member__ от __board__",
"act-restoredCard": "възстанови __card__ в __board__",
"act-unjoinMember": "премахна __member__ от __card__",
"act-withBoardTitle": "[Wekan] __board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
"activities": "Действия",
"activity": "Дейности",
"activity-added": "добави %s към %s",
"activity-archived": "архивира %s",
"activity-archived": "премести %s в Кошчето",
"activity-attached": "прикачи %s към %s",
"activity-created": "създаде %s",
"activity-customfield-created": "създаде собствено поле %s",
"activity-excluded": "изключи %s от %s",
"activity-imported": "импортира %s в/във %s от %s",
"activity-imported-board": "импортира %s от %s",
"activity-joined": "joined %s",
"activity-joined": "се присъедини към %s",
"activity-moved": "премести %s от %s в/във %s",
"activity-on": "на %s",
"activity-removed": "премахна %s от %s",
"activity-sent": "изпрати %s до %s",
"activity-unjoined": "unjoined %s",
"activity-unjoined": "вече не е част от %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "добави списък със задачи към %s",
"activity-checklist-item-added": "добави точка към '%s' в/във %s",
"add": "Добави",
"add-attachment": "Добави прикачен файл",
"add-board": "Добави дъска",
"add-board": "Добави Табло",
"add-card": "Добави карта",
"add-swimlane": "Добави коридор",
"add-subtask": "Add Subtask",
"add-checklist": "Добави списък със задачи",
"add-checklist-item": "Добави точка към списъка със задачи",
"add-cover": "Добави корица",
@@ -58,73 +63,83 @@
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
"admin-announcement": "Съобщение",
"admin-announcement-active": "Active System-Wide Announcement",
"admin-announcement-title": "Announcement from Administrator",
"all-boards": "Всички дъски",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
"admin-announcement-title": "Съобщение от администратора",
"all-boards": "Всички табла",
"and-n-other-card": "И __count__ друга карта",
"and-n-other-card_plural": "И __count__ други карти",
"apply": "Приложи",
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
"archive": "Архив",
"archive-all": "Архивирай всички",
"archive-board": "Архивирай дъската",
"archive-card": "Архивирай картата",
"archive-list": "Архивирай списъка",
"archive-swimlane": "Архивирай коридора",
"archive-selection": "Archive selection",
"archiveBoardPopup-title": "Archive Board?",
"archived-items": "Archived Items",
"archived-boards": "Archived Boards",
"restore-board": "Restore Board",
"no-archived-boards": "No Archived Boards.",
"archives": "Архиви",
"assign-member": "Assign member",
"app-is-offline": "Wekan зарежда, моля изчакайте! Презареждането на страницата може да доведе до загуба на данни. Ако Wekan не се зареди, моля проверете дали сървъра му работи.",
"archive": "Премести в Кошчето",
"archive-all": "Премести всички в Кошчето",
"archive-board": "Премести Таблото в Кошчето",
"archive-card": "Премести Картата в Кошчето",
"archive-list": "Премести Списъка в Кошчето",
"archive-swimlane": "Премести Коридора в Кошчето",
"archive-selection": "Премести избраните в Кошчето",
"archiveBoardPopup-title": "Сигурни ли сте, че искате да преместите Таблото в Кошчето?",
"archived-items": "Кошче",
"archived-boards": "Табла в Кошчето",
"restore-board": "Възстанови Таблото",
"no-archived-boards": "Няма Табла в Кошчето.",
"archives": "Кошче",
"assign-member": "Възложи на член от екипа",
"attached": "прикачен",
"attachment": "Прикаченн файл",
"attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
"attachment-delete-pop": "Изтриването на прикачен файл е завинаги. Няма как да бъде възстановен.",
"attachmentDeletePopup-title": "Желаете ли да изтриете прикачения файл?",
"attachments": "Прикачени файлове",
"auto-watch": "Автоматично наблюдаване на дъските, когато са създадени",
"auto-watch": "Автоматично наблюдаване на таблата, когато са създадени",
"avatar-too-big": "Аватарът е прекалено голям (максимум 70KB)",
"back": "Назад",
"board-change-color": "Промени цвета",
"board-nb-stars": "%s звезди",
"board-not-found": "Board not found",
"board-not-found": "Таблото не е намерено",
"board-private-info": "This board will be <strong>private</strong>.",
"board-public-info": "This board will be <strong>public</strong>.",
"boardChangeColorPopup-title": "Change Board Background",
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeTitlePopup-title": "Промени името на Таблото",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Промени наблюдаването",
"boardMenuPopup-title": "Board Menu",
"boards": "Дъски",
"boardMenuPopup-title": "Меню на Таблото",
"boards": "Табла",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Коридори",
"board-view-lists": "Списъци",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
"card-archived": "Тази карта е архивирана",
"card-archived": "Картата е преместена в Кошчето.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "Тази карта има %s коментар.",
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Готова за",
"card-due-on": "Готова за",
"card-spent": "Изработено време",
"card-edit-attachments": "Промени прикачените файлове",
"card-edit-custom-fields": "Промени собствените полета",
"card-edit-labels": "Промени етикетите",
"card-edit-members": "Промени членовете",
"card-labels-title": "Променете етикетите за тази карта",
"card-members-title": "Add or remove members of the board from the card.",
"card-labels-title": "Промени етикетите за картата.",
"card-members-title": "Добави или премахни членове на Таблото от тази карта.",
"card-start": "Начало",
"card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Attach From",
"card-start-on": "Започва на",
"cardAttachmentsPopup-title": "Прикачи от",
"cardCustomField-datePopup-title": "Промени датата",
"cardCustomFieldsPopup-title": "Промени собствените полета",
"cardDeletePopup-title": "Желаете да изтриете картата?",
"cardDetailsActionsPopup-title": "Опции",
"cardLabelsPopup-title": "Етикети",
"cardMembersPopup-title": "Членове",
"cardMorePopup-title": "Още",
"cards": "Карти",
"change": "Change",
"cards-count": "Карти",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Промени",
"change-avatar": "Промени аватара",
"change-password": "Промени паролата",
"change-permissions": "Change permissions",
@@ -134,63 +149,84 @@
"changePasswordPopup-title": "Промени паролата",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Промяна на настройките",
"subtasks": "Subtasks",
"checklists": "Списъци със задачи",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Натиснете, за да премахнете тази дъска от любими.",
"clipboard": "Clipboard or drag & drop",
"close": "Close",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
"color-black": "black",
"color-blue": "blue",
"color-green": "green",
"color-lime": "lime",
"color-orange": "orange",
"color-pink": "pink",
"color-purple": "purple",
"color-red": "red",
"color-sky": "sky",
"color-yellow": "yellow",
"click-to-unstar": "Натиснете, за да премахнете това табло от любими.",
"clipboard": "Клипборда или с драг & дроп",
"close": "Затвори",
"close-board": "Затвори Таблото",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "черно",
"color-blue": "синьо",
"color-green": "зелено",
"color-lime": "лайм",
"color-orange": "оранжево",
"color-pink": "розово",
"color-purple": "пурпурно",
"color-red": "червено",
"color-sky": "светло синьо",
"color-yellow": "жълто",
"comment": "Коментирай",
"comment-placeholder": "Напиши коментар",
"comment-only": "Само коментар",
"comment-only-desc": "Може да коментира само в карти.",
"computer": "Computer",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Компютър",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Копирай връзката на картата в клипборда",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Копирай картата",
"copyChecklistToManyCardsPopup-title": "Копирай шаблона за чеклисти в много карти",
"copyChecklistToManyCardsPopup-title": "Копирай чеклисти в други карти",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
"create": "Create",
"createBoardPopup-title": "Create Board",
"chooseBoardSourcePopup-title": "Import board",
"createLabelPopup-title": "Create Label",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Чекбокс",
"custom-field-date": "Дата",
"custom-field-dropdown": "Падащо меню",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Номер",
"custom-field-text": "Текст",
"custom-fields": "Собствени полета",
"date": "Дата",
"decline": "Decline",
"decline": "Отказ",
"default-avatar": "Основен аватар",
"delete": "Изтрий",
"deleteCustomFieldPopup-title": "Изтриване на Собственото поле?",
"deleteLabelPopup-title": "Желаете да изтриете етикета?",
"description": "Описание",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
"discard": "Discard",
"done": "Done",
"discard": "Отказ",
"done": "Готово",
"download": "Сваляне",
"edit": "Промени",
"edit-avatar": "Промени аватара",
"edit-profile": "Промяна на профила",
"edit-wip-limit": "Промени WIP лимита",
"soft-wip-limit": "Soft WIP Limit",
"soft-wip-limit": "\"Мек\" WIP лимит",
"editCardStartDatePopup-title": "Промени началната дата",
"editCardDueDatePopup-title": "Промени датата за готовност",
"editCustomFieldPopup-title": "Промени Полето",
"editCardSpentTimePopup-title": "Промени изработеното време",
"editLabelPopup-title": "Change Label",
"editLabelPopup-title": "Промяна на Етикета",
"editNotificationPopup-title": "Промени известията",
"editProfilePopup-title": "Промяна на профила",
"email": "Имейл",
"email-enrollAccount-subject": "An account created for you on __siteName__",
"email-enrollAccount-subject": "Ваш профил беше създаден на __siteName__",
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
"email-fail": "Неуспешно изпращане на имейла",
"email-fail-text": "Възникна грешка при изпращането на имейла",
@@ -203,7 +239,7 @@
"email-sent": "Имейлът е изпратен",
"email-verifyEmail-subject": "Verify your email address on __siteName__",
"email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
"enable-wip-limit": "Enable WIP Limit",
"enable-wip-limit": "Включи WIP лимита",
"error-board-doesNotExist": "This board does not exist",
"error-board-notAdmin": "You need to be admin of this board to do that",
"error-board-notAMember": "You need to be a member of this board to do that",
@@ -219,17 +255,21 @@
"filter": "Филтър",
"filter-cards": "Филтрирай картите",
"filter-clear": "Премахване на филтрите",
"filter-no-label": "No label",
"filter-no-member": "No member",
"filter-no-label": "без етикет",
"filter-no-member": "без член",
"filter-no-custom-fields": "Няма Собствени полета",
"filter-on": "Има приложени филтри",
"filter-on-desc": "В момента филтрирате картите в тази дъска. Моля, натиснете тук, за да промените филтъра.",
"filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
"filter-to-selection": "Филтрирай избраните",
"advanced-filter-label": "Advanced Filter",
"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": "Име",
"header-logo-title": "Go back to your boards page.",
"hide-system-messages": "Скриване на системните съобщения",
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"home": "Начало",
"import": "Import",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
@@ -244,13 +284,13 @@
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
"import-show-user-mapping": "Review members mapping",
"import-user-select": "Pick the Wekan user you want to use as this member",
"importMapMembersAddPopup-title": "Select Wekan member",
"importMapMembersAddPopup-title": "Избери Wekan член",
"info": "Версия",
"initials": "Инициали",
"invalid-date": "Невалидна дата",
"invalid-time": "Невалиден час",
"invalid-user": "Невалиден потребител",
"joined": "joined",
"joined": "присъедини ",
"just-invited": "You are just invited to this board",
"keyboard-shortcuts": "Keyboard shortcuts",
"label-create": "Създай етикет",
@@ -263,17 +303,17 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Връзка към тази карта",
"list-archive-cards": "Архивирай всички карти в този списък",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
"list-archive-cards": "Премести всички карти от този списък в Кошчето",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Премести всички карти в този списък",
"list-select-cards": "Избери всички карти в този списък",
"listActionPopup-title": "List Actions",
"swimlaneActionPopup-title": "Swimlane Actions",
"listImportCardPopup-title": "Import a Trello card",
"listImportCardPopup-title": "Импорт на карта от Trello",
"listMorePopup-title": "Още",
"link-list": "Връзка към този списък",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"list-delete-suggest-archive": "Можете да преместите списък в Кошчето, за да го премахнете от Таблото и запазите активността.",
"lists": "Списъци",
"swimlanes": "Коридори",
"log-out": "Изход",
@@ -291,17 +331,17 @@
"multi-selection-on": "Множественият избор е приложен",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "Моите дъски",
"my-boards": "Моите табла",
"name": "Име",
"no-archived-cards": "No archived cards.",
"no-archived-lists": "No archived lists.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "Няма карти в Кошчето.",
"no-archived-lists": "Няма списъци в Кошчето.",
"no-archived-swimlanes": "Няма коридори в Кошчето.",
"no-results": "No results",
"normal": "Normal",
"normal-desc": "Can view and edit cards. Can't change settings.",
"not-accepted-yet": "Invitation not accepted yet",
"notify-participate": "Получавате информация за всички карти, в които сте отбелязани или сте създали",
"notify-watch": "Получавате информация за всички дъски, списъци и карти, които наблюдавате",
"notify-watch": "Получавате информация за всички табла, списъци и карти, които наблюдавате",
"optional": "optional",
"or": "or",
"page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
@@ -322,12 +362,12 @@
"remove-from-board": "Remove from Board",
"remove-label": "Remove Label",
"listDeletePopup-title": "Желаете да изтриете списъка?",
"remove-member": "Remove Member",
"remove-member-from-card": "Remove from Card",
"remove-member": "Премахни член",
"remove-member-from-card": "Премахни от картата",
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
"removeMemberPopup-title": "Remove Member?",
"rename": "Rename",
"rename-board": "Rename Board",
"rename-board": "Промени името на Таблото",
"restore": "Възстанови",
"save": "Запази",
"search": "Търсене",
@@ -335,8 +375,8 @@
"search-example": "Text to search for?",
"select-color": "Избери цвят",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
"setWipLimitPopup-title": "Set WIP Limit",
"shortcut-assign-self": "Assign yourself to current card",
"setWipLimitPopup-title": "Въведи WIP лимит",
"shortcut-assign-self": "Добави себе си към тази карта",
"shortcut-autocomplete-emoji": "Autocomplete emoji",
"shortcut-autocomplete-members": "Autocomplete members",
"shortcut-clear-filters": "Изчистване на всички филтри",
@@ -350,12 +390,12 @@
"sidebar-close": "Close Sidebar",
"signupPopup-title": "Create an Account",
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
"starred-boards": "Любими дъски",
"starred-boards-description": "Любимите дъски се показват в началото на списъка Ви.",
"starred-boards": "Любими табла",
"starred-boards-description": "Любимите табла се показват в началото на списъка Ви.",
"subscribe": "Subscribe",
"team": "Team",
"this-board": "this board",
"this-card": "тази карта",
"this-card": "картата",
"spent-time-hours": "Изработено време (часа)",
"overtime-hours": "Оувъртайм (часа)",
"overtime": "Оувъртайм",
@@ -365,6 +405,7 @@
"title": "Title",
"tracking": "Следене",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
"unwatch": "Спри наблюдаването",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Качихте аватар",
"username": "Потребителско име",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an archived list",
"warn-list-archived": "внимание: тази карта е в списък, който е в Кошчето",
"watch": "Наблюдавай",
"watching": "Наблюдава",
"watching-info": "You will be notified of any change in this board",
@@ -382,9 +423,9 @@
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-title": "Невалиден WIP лимит",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
"wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
"wipLimitErrorPopup-dialog-pt2": "Моля, преместете някои от задачите от този списък или въведете по-висок WIP лимит.",
"admin-panel": "Администраторски панел",
"settings": "Настройки",
"people": "Хора",
@@ -429,11 +470,42 @@
"hours": "часа",
"minutes": "минути",
"seconds": "секунди",
"show-field-on-card": "Покажи това поле в картата",
"yes": "Да",
"no": "Не",
"accounts": "Профили",
"accounts-allowEmailChange": "Разреши промяна на имейла",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Създаден на",
"verified": "Потвърден",
"active": "Активен"
"active": "Активен",
"card-received": "Получена",
"card-received-on": "Получена на",
"card-end": "Завършена",
"card-end-on": "Завършена на",
"editCardReceivedDatePopup-title": "Промени датата на получаване",
"editCardEndDatePopup-title": "Промени датата на завършване",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+101 -29
View File
@@ -2,17 +2,19 @@
"accept": "Asantiñ",
"act-activity-notify": "[Wekan] Activity Notification",
"act-addAttachment": "attached __attachment__ to __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addComment": "commented on __card__: __comment__",
"act-createBoard": "created __board__",
"act-createCard": "added __card__ to __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "added __list__ to __board__",
"act-addBoardMember": "added __member__ to __board__",
"act-archivedBoard": "archived __board__",
"act-archivedCard": "archived __card__",
"act-archivedList": "archived __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "imported __board__",
"act-importCard": "imported __card__",
"act-importList": "imported __list__",
@@ -27,9 +29,10 @@
"activities": "Oberiantizoù",
"activity": "Oberiantiz",
"activity-added": "%s ouzhpennet da %s",
"activity-archived": "%s diellaouet",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "%s liammet ouzh %s",
"activity-created": "%s krouet",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluded %s from %s",
"activity-imported": "%s enporzhiet eus %s da %s",
"activity-imported-board": "%s enporzhiet da %s",
@@ -39,6 +42,7 @@
"activity-removed": "removed %s from %s",
"activity-sent": "sent %s to %s",
"activity-unjoined": "unjoined %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"add": "Ouzhpenn",
@@ -46,6 +50,7 @@
"add-board": "Add Board",
"add-card": "Add Card",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"add-cover": "Ouzphenn ur golo",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Apply",
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
"archive": "Archive",
"archive-all": "Archive All",
"archive-board": "Archive Board",
"archive-card": "Archive Card",
"archive-list": "Archive List",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Archive selection",
"archiveBoardPopup-title": "Archive Board?",
"archived-items": "Archived Items",
"archived-boards": "Archived Boards",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "Restore Board",
"no-archived-boards": "No Archived Boards.",
"archives": "Archives",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Board Menu",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
"card-archived": "This card is archived.",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "This card has %s comment.",
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
"card-edit-attachments": "Edit attachments",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Edit labels",
"card-edit-members": "Edit members",
"card-labels-title": "Change the labels for the card.",
@@ -118,12 +126,19 @@
"card-start": "Start",
"card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Attach From",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "Diverkañ ar gartenn ?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Izili",
"cardMorePopup-title": "Muioc’h",
"cards": "Kartennoù",
"cards-count": "Kartennoù",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Change",
"change-avatar": "Change Avatar",
"change-password": "Kemmañ ger-tremen",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Kemmañ ger-tremen",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Change Settings",
"subtasks": "Subtasks",
"checklists": "Checklists",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
"clipboard": "Clipboard or drag & drop",
"close": "Close",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "du",
"color-blue": "glas",
"color-green": "gwer",
@@ -155,9 +171,14 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Computer",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Create Board",
"chooseBoardSourcePopup-title": "Import board",
"createLabelPopup-title": "Create Label",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Date",
"decline": "Decline",
"default-avatar": "Default avatar",
"delete": "Diverkañ",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Delete Label?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -221,15 +257,19 @@
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "Filter is on",
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
"filter-to-selection": "Filter to selection",
"advanced-filter-label": "Advanced Filter",
"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.",
"hide-system-messages": "Hide system messages",
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Link to this card",
"list-archive-cards": "Archive all cards in this list",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Move all cards in this list",
"list-select-cards": "Select all cards in this list",
"listActionPopup-title": "List Actions",
@@ -273,7 +313,7 @@
"listMorePopup-title": "Muioc’h",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
"lists": "Lists",
"swimlanes": "Swimlanes",
"log-out": "Log Out",
@@ -293,9 +333,9 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "My Boards",
"name": "Name",
"no-archived-cards": "No archived cards.",
"no-archived-lists": "No archived lists.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "No results",
"normal": "Normal",
"normal-desc": "Can view and edit cards. Can't change settings.",
@@ -365,6 +405,7 @@
"title": "Title",
"tracking": "Tracking",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
"unwatch": "Unwatch",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Uploaded an avatar",
"username": "Username",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an archived list",
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
"watch": "Watch",
"watching": "Watching",
"watching-info": "You will be notified of any change in this board",
@@ -429,11 +470,42 @@
"hours": "hours",
"minutes": "minutes",
"seconds": "seconds",
"show-field-on-card": "Show this field on card",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
"verified": "Verified",
"active": "Active"
"active": "Active",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+101 -29
View File
@@ -2,17 +2,19 @@
"accept": "Accepta",
"act-activity-notify": "[Wekan] Notificació d'activitat",
"act-addAttachment": "adjuntat __attachment__ a __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "afegida la checklist _checklist__ a __card__",
"act-addChecklistItem": "afegit __checklistItem__ a la checklist __checklist__ on __card__",
"act-addComment": "comentat a __card__: __comment__",
"act-createBoard": "creat __board__",
"act-createCard": "afegit/da __card__ a __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "afegit/da __list__ a __board__",
"act-addBoardMember": "afegit/da __member__ a __board__",
"act-archivedBoard": "__board__ arxivat",
"act-archivedCard": "__card__ arxivat/da",
"act-archivedList": "__list__ arxivat/da",
"act-archivedSwimlane": "arxivada __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "__board__ importat",
"act-importCard": "__card__ importat",
"act-importList": "__list__ importat",
@@ -27,9 +29,10 @@
"activities": "Activitats",
"activity": "Activitat",
"activity-added": "ha afegit %s a %s",
"activity-archived": "ha arxivat %s",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "ha adjuntat %s a %s",
"activity-created": "ha creat %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "ha exclòs %s de %s",
"activity-imported": "importat %s dins %s des de %s",
"activity-imported-board": "importat %s des de %s",
@@ -39,6 +42,7 @@
"activity-removed": "ha eliminat %s de %s",
"activity-sent": "ha enviat %s %s",
"activity-unjoined": "desassignat %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "Checklist afegida a %s",
"activity-checklist-item-added": "afegida entrada de checklist de '%s' a %s",
"add": "Afegeix",
@@ -46,6 +50,7 @@
"add-board": "Afegeix Tauler",
"add-card": "Afegeix fitxa",
"add-swimlane": "Afegix Carril de Natació",
"add-subtask": "Add Subtask",
"add-checklist": "Afegeix checklist",
"add-checklist-item": "Afegeix un ítem",
"add-cover": "Afegeix coberta",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Aplica",
"app-is-offline": "Wekan s'està carregant, esperau si us plau. Refrescar la pàgina causarà la pérdua de les dades. Si Wekan no carrega, verificau que el servei de Wekan no estigui aturat",
"archive": "Desa",
"archive-all": "Desa Tot",
"archive-board": "Arxiva tauler",
"archive-card": "Arxiva fitxa",
"archive-list": "Arxiva llista",
"archive-swimlane": "Arxiva Carril de Natació",
"archive-selection": "Arxiva selecció",
"archiveBoardPopup-title": "Arxivar el tauler?",
"archived-items": "Elements arxivats",
"archived-boards": "Taulers Arxivats",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "Restaura Tauler",
"no-archived-boards": "Taulers no arxivats",
"archives": "Arxivats",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "Assignar membre",
"attached": "adjuntat",
"attachment": "Adjunt",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Menú del tauler",
"boards": "Taulers",
"board-view": "Visió del tauler",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Carrils de Natació",
"board-view-lists": "Llistes",
"bucket-example": "Igual que “Bucket List”, per exemple",
"cancel": "Cancel·la",
"card-archived": "Aquesta fitxa està arxivada.",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "Aquesta fitxa té %s comentaris.",
"card-delete-notice": "L'esborrat és permanent. Perdreu totes les accions associades a aquesta fitxa.",
"card-delete-pop": "Totes les accions s'eliminaran de l'activitat i no podreu tornar a obrir la fitxa. No es pot desfer.",
"card-delete-suggest-archive": "Podeu arxivar una fitxa per extreure-la del tauler i preservar l'activitat.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Finalitza",
"card-due-on": "Finalitza a",
"card-spent": "Temps Dedicat",
"card-edit-attachments": "Edita arxius adjunts",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Edita etiquetes",
"card-edit-members": "Edita membres",
"card-labels-title": "Canvia les etiquetes de la fitxa",
@@ -118,12 +126,19 @@
"card-start": "Comença",
"card-start-on": "Comença a",
"cardAttachmentsPopup-title": "Adjunta des de",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "Esborrar fitxa?",
"cardDetailsActionsPopup-title": "Accions de fitxes",
"cardLabelsPopup-title": "Etiquetes",
"cardMembersPopup-title": "Membres",
"cardMorePopup-title": "Més",
"cards": "Fitxes",
"cards-count": "Fitxes",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Canvia",
"change-avatar": "Canvia Avatar",
"change-password": "Canvia la clau",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Canvia la contrasenya",
"changePermissionsPopup-title": "Canvia permisos",
"changeSettingsPopup-title": "Canvia configuració",
"subtasks": "Subtasks",
"checklists": "Checklists",
"click-to-star": "Fes clic per destacar aquest tauler.",
"click-to-unstar": "Fes clic per deixar de destacar aquest tauler.",
"clipboard": "Portaretalls o estirar i amollar",
"close": "Tanca",
"close-board": "Tanca tauler",
"close-board-pop": "Podràs restaurar el tauler, seleccionant \"Arxivats\" de la finistra principal",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "negre",
"color-blue": "blau",
"color-green": "verd",
@@ -155,9 +171,14 @@
"comment-placeholder": "Escriu un comentari",
"comment-only": "Només comentaris",
"comment-only-desc": "Només pots fer comentaris a les fitxes",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Ordinador",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copia l'enllaç de la ftixa al porta-retalls",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copia la fitxa",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Títols de fitxa i Descripcions de destí en aquest format JSON",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Crea tauler",
"chooseBoardSourcePopup-title": "Importa Tauler",
"createLabelPopup-title": "Crea etiqueta",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "Actual",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Data",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Data",
"decline": "Declina",
"default-avatar": "Avatar per defecte",
"delete": "Esborra",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Esborra etiqueta",
"description": "Descripció",
"disambiguateMultiLabelPopup-title": "Desfe l'ambigüitat en les etiquetes",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "Canvia data d'inici",
"editCardDueDatePopup-title": "Canvia data de finalització",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Canvia temps dedicat",
"editLabelPopup-title": "Canvia etiqueta",
"editNotificationPopup-title": "Edita la notificació",
@@ -221,15 +257,19 @@
"filter-clear": "Elimina filtre",
"filter-no-label": "Sense etiqueta",
"filter-no-member": "Sense membres",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "Filtra per",
"filter-on-desc": "Estau filtrant fitxes en aquest tauler. Feu clic aquí per editar el filtre.",
"filter-to-selection": "Filtra selecció",
"advanced-filter-label": "Advanced Filter",
"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": "Nom complet",
"header-logo-title": "Torna a la teva pàgina de taulers",
"hide-system-messages": "Oculta missatges del sistema",
"headerBarCreateBoardPopup-title": "Crea tauler",
"home": "Inici",
"import": "importa",
"link": "Link",
"import-board": "Importa tauler",
"import-board-c": "Importa tauler",
"import-board-title-trello": "Importa tauler des de Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "De debò voleu abandonar __boardTitle__? Se us eliminarà de totes les fitxes d'aquest tauler.",
"leaveBoardPopup-title": "Abandonar Tauler?",
"link-card": "Enllaç a aquesta fitxa",
"list-archive-cards": "Arxiva totes les fitxes d'aquesta llista",
"list-archive-cards-pop": "Això eliminarà totes les fitxes d'aquesta llista del tauler. Per veure les fitxes arxivades i recuperar-les en el tauler, feu clic a \" Menú \"/ \" Articles Arxivat \".",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Mou totes les fitxes d'aquesta llista",
"list-select-cards": "Selecciona totes les fitxes d'aquesta llista",
"listActionPopup-title": "Accions de la llista",
@@ -273,7 +313,7 @@
"listMorePopup-title": "Més",
"link-list": "Enllaça a aquesta llista",
"list-delete-pop": "Totes les accions seran esborrades de la llista d'activitats i no serà possible recuperar la llista",
"list-delete-suggest-archive": "Pots arxivar una llista per eliminar-la del tauler i preservar la seva activitat",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
"lists": "Llistes",
"swimlanes": "Carrils de Natació",
"log-out": "Finalitza la sessió",
@@ -293,9 +333,9 @@
"muted-info": "No seràs notificat dels canvis en aquest tauler",
"my-boards": "Els meus taulers",
"name": "Nom",
"no-archived-cards": "No hi ha fitxes arxivades.",
"no-archived-lists": "No hi ha llistes arxivades.",
"no-archived-swimlanes": "Cap Carril de Natació arxivat",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "Sense resultats",
"normal": "Normal",
"normal-desc": "Podeu veure i editar fitxes. No podeu canviar la configuració.",
@@ -365,6 +405,7 @@
"title": "Títol",
"tracking": "En seguiment",
"tracking-info": "Seràs notificat per cada canvi a aquelles fitxes de les que n'eres creador o membre",
"type": "Type",
"unassign-member": "Desassignar membre",
"unsaved-description": "Tens una descripció sense desar.",
"unwatch": "Suprimeix observació",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Avatar actualitzat",
"username": "Nom d'Usuari",
"view-it": "Vist",
"warn-list-archived": "Avís: aquesta fitxa està en una llista arxivada",
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
"watch": "Observa",
"watching": "En observació",
"watching-info": "Seràs notificat de cada canvi en aquest tauler",
@@ -429,11 +470,42 @@
"hours": "hores",
"minutes": "minuts",
"seconds": "segons",
"show-field-on-card": "Show this field on card",
"yes": "Si",
"no": "No",
"accounts": "Comptes",
"accounts-allowEmailChange": "Permet modificar correu electrònic",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Creat ",
"verified": "Verificat",
"active": "Actiu"
"active": "Actiu",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+203 -131
View File
@@ -2,17 +2,19 @@
"accept": "Přijmout",
"act-activity-notify": "[Wekan] Notifikace aktivit",
"act-addAttachment": "přiložen __attachment__ do __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "přidán checklist __checklist__ do __card__",
"act-addChecklistItem": "přidán __checklistItem__ do checklistu __checklist__ v __card__",
"act-addComment": "komentář k __card__: __comment__",
"act-createBoard": "přidání __board__",
"act-createCard": "přidání __card__ do __list__",
"act-createCustomField": "vytvořeno vlastní pole __customField__",
"act-createList": "přidání __list__ do __board__",
"act-addBoardMember": "přidání __member__ do __board__",
"act-archivedBoard": "archivace __board__",
"act-archivedCard": "archivace __card__",
"act-archivedList": "archivace __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ bylo přesunuto do koše",
"act-archivedCard": "__card__ bylo přesunuto do koše",
"act-archivedList": "__list__ bylo přesunuto do koše",
"act-archivedSwimlane": "__swimlane__ bylo přesunuto do koše",
"act-importBoard": "import __board__",
"act-importCard": "import __card__",
"act-importList": "import __list__",
@@ -27,9 +29,10 @@
"activities": "Aktivity",
"activity": "Aktivita",
"activity-added": "%s přidáno k %s",
"activity-archived": "%s archivováno",
"activity-archived": "%s bylo přesunuto do koše",
"activity-attached": "přiloženo %s k %s",
"activity-created": "%s vytvořeno",
"activity-customfield-created": "vytvořeno vlastní pole %s",
"activity-excluded": "%s vyjmuto z %s",
"activity-imported": "importován %s do %s z %s",
"activity-imported-board": "importován %s z %s",
@@ -39,13 +42,15 @@
"activity-removed": "odstraněn %s z %s",
"activity-sent": "%s posláno na %s",
"activity-unjoined": "odpojen %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "přidán checklist do %s",
"activity-checklist-item-added": "přidána položka checklist do '%s' v %s",
"add": "Přidat",
"add-attachment": "Přidat přílohu",
"add-board": "Přidat tablo",
"add-card": "Přidat kartu",
"add-swimlane": "Add Swimlane",
"add-swimlane": "Přidat Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Přidat zaškrtávací seznam",
"add-checklist-item": "Přidat položku do zaškrtávacího seznamu",
"add-cover": "Přidat obal",
@@ -56,27 +61,27 @@
"addMemberPopup-title": "Členové",
"admin": "Administrátor",
"admin-desc": "Může zobrazovat a upravovat karty, mazat členy a měnit nastavení tabla.",
"admin-announcement": "Announcement",
"admin-announcement-active": "Active System-Wide Announcement",
"admin-announcement-title": "Announcement from Administrator",
"admin-announcement": "Oznámení",
"admin-announcement-active": "Aktivní oznámení v celém systému",
"admin-announcement-title": "Oznámení od administrátora",
"all-boards": "Všechna tabla",
"and-n-other-card": "A __count__ další karta(y)",
"and-n-other-card_plural": "A __count__ dalších karet",
"apply": "Použít",
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
"archive": "Archiv",
"archive-all": "Archivovat vše",
"archive-board": "Archivovat tablo",
"archive-card": "Archivovat kartu",
"archive-list": "Archive List",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Archivovat výběr",
"archiveBoardPopup-title": "Archivovat tablo?",
"archived-items": "Archivované položky",
"archived-boards": "Archivaná tabla",
"app-is-offline": "Wekan se načítá, prosím čekejte. Obnovení stránky způsobí ztrátu dat. Pokud se Wekan nenačte, zkontrolujte prosím, jestli se server s Wekanem nezastavil.",
"archive": "Přesunout do koše",
"archive-all": "Přesunout všechno do koše",
"archive-board": "Přesunout tablo do koše",
"archive-card": "Přesunout kartu do koše",
"archive-list": "Přesunout seznam do koše",
"archive-swimlane": "Přesunout swimlane do koše",
"archive-selection": "Přesunout výběr do koše",
"archiveBoardPopup-title": "Chcete přesunout tablo do koše?",
"archived-items": "Koš",
"archived-boards": "Tabla v koši",
"restore-board": "Obnovit tablo",
"no-archived-boards": "Žádná archivovaná tabla",
"archives": "Archivy",
"no-archived-boards": "Žádná tabla v koši",
"archives": "Koš",
"assign-member": "Přiřadit člena",
"attached": "přiloženo",
"attachment": "Příloha",
@@ -94,23 +99,26 @@
"boardChangeColorPopup-title": "Změnit pozadí tabla",
"boardChangeTitlePopup-title": "Přejmenovat tablo",
"boardChangeVisibilityPopup-title": "Upravit viditelnost",
"boardChangeWatchPopup-title": "Change Watch",
"boardChangeWatchPopup-title": "Změnit sledování",
"boardMenuPopup-title": "Menu tabla",
"boards": "Tabla",
"board-view": "Board View",
"board-view": "Náhled tabla",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Seznamy",
"bucket-example": "Například \"Než mě odvedou\"",
"cancel": "Zrušit",
"card-archived": "Tato karta je archivována.",
"card-archived": "Karta byla přesunuta do koše.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "Tato karta má %s komentářů.",
"card-delete-notice": "Smazání je trvalé. Přijdete o všechny akce asociované s touto kartou.",
"card-delete-pop": "Všechny akce budou odstraněny z kanálu aktivity a nebude možné kartu znovu otevřít. Toto nelze vrátit zpět.",
"card-delete-suggest-archive": "Kartu můžete archivovat a tím ji odstranit z tabla a přitom zachovat aktivity.",
"card-delete-suggest-archive": "Kartu můžete přesunout do koše a tím ji odstranit z tabla a přitom zachovat aktivity.",
"card-due": "Termín",
"card-due-on": "Do",
"card-spent": "Spent Time",
"card-spent": "Strávený čas",
"card-edit-attachments": "Upravit přílohy",
"card-edit-custom-fields": "Upravit vlastní pole",
"card-edit-labels": "Upravit štítky",
"card-edit-members": "Upravit členy",
"card-labels-title": "Změnit štítky karty.",
@@ -118,12 +126,19 @@
"card-start": "Start",
"card-start-on": "Začít dne",
"cardAttachmentsPopup-title": "Přiložit formulář",
"cardCustomField-datePopup-title": "Změnit datum",
"cardCustomFieldsPopup-title": "Upravit vlastní pole",
"cardDeletePopup-title": "Smazat kartu?",
"cardDetailsActionsPopup-title": "Akce karty",
"cardLabelsPopup-title": "Štítky",
"cardMembersPopup-title": "Členové",
"cardMorePopup-title": "Více",
"cards": "Karty",
"cards-count": "Karty",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Změnit",
"change-avatar": "Změnit avatar",
"change-password": "Změnit heslo",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Změnit heslo",
"changePermissionsPopup-title": "Změnit oprávnění",
"changeSettingsPopup-title": "Změnit nastavení",
"subtasks": "Subtasks",
"checklists": "Checklisty",
"click-to-star": "Kliknutím přidat hvězdičku tomuto tablu.",
"click-to-unstar": "Kliknutím odebrat hvězdičku tomuto tablu.",
"clipboard": "Schránka nebo potáhnout a pustit",
"close": "Zavřít",
"close-board": "Zavřít tablo",
"close-board-pop": "Budete moci obnovit tablo kliknutím na tlačítko \"Archivy\" v hlavním menu.",
"close-board-pop": "Kliknutím na tlačítko \"Recyklovat\" budete moci obnovit tablo z koše.",
"color-black": "černá",
"color-blue": "modrá",
"color-green": "zelená",
@@ -153,24 +169,43 @@
"color-yellow": "žlutá",
"comment": "Komentář",
"comment-placeholder": "Text komentáře",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"comment-only": "Pouze komentáře",
"comment-only-desc": "Může přidávat komentáře pouze do karet.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Počítač",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Kopírovat adresu karty do mezipaměti",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Kopírovat kartu",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
"copyChecklistToManyCardsPopup-title": "Kopírovat checklist do více karet",
"copyChecklistToManyCardsPopup-instructions": "Názvy a popisy cílové karty v tomto formátu JSON",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Nadpis první karty\", \"description\":\"Popis druhé karty\"}, {\"title\":\"Nadpis druhé karty\",\"description\":\"Popis druhé karty\"},{\"title\":\"Nadpis poslední kary\",\"description\":\"Popis poslední karty\"} ]",
"create": "Vytvořit",
"createBoardPopup-title": "Vytvořit tablo",
"chooseBoardSourcePopup-title": "Importovat tablo",
"createLabelPopup-title": "Vytvořit štítek",
"createCustomField": "Vytvořit pole",
"createCustomFieldPopup-title": "Vytvořit pole",
"current": "Aktuální",
"date": "Date",
"custom-field-delete-pop": "Nelze vrátit zpět. Toto odebere toto vlastní pole ze všech karet a zničí jeho historii.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Datum",
"custom-field-dropdown": "Rozbalovací seznam",
"custom-field-dropdown-none": "(prázdné)",
"custom-field-dropdown-options": "Seznam možností",
"custom-field-dropdown-options-placeholder": "Stiskněte enter pro přidání více možností",
"custom-field-dropdown-unknown": "(neznámé)",
"custom-field-number": "Číslo",
"custom-field-text": "Text",
"custom-fields": "Vlastní pole",
"date": "Datum",
"decline": "Zamítnout",
"default-avatar": "Výchozí avatar",
"delete": "Smazat",
"deleteCustomFieldPopup-title": "Smazat vlastní pole",
"deleteLabelPopup-title": "Smazat štítek?",
"description": "Popis",
"disambiguateMultiLabelPopup-title": "Dvojznačný štítek akce",
@@ -181,11 +216,12 @@
"edit": "Upravit",
"edit-avatar": "Změnit avatar",
"edit-profile": "Upravit profil",
"edit-wip-limit": "Edit WIP Limit",
"soft-wip-limit": "Soft WIP Limit",
"edit-wip-limit": "Upravit WIP Limit",
"soft-wip-limit": "Mírný WIP limit",
"editCardStartDatePopup-title": "Změnit datum startu úkolu",
"editCardDueDatePopup-title": "Změnit datum dokončení úkolu",
"editCardSpentTimePopup-title": "Change spent time",
"editCustomFieldPopup-title": "Upravit pole",
"editCardSpentTimePopup-title": "Změnit strávený čas",
"editLabelPopup-title": "Změnit štítek",
"editNotificationPopup-title": "Změnit notifikace",
"editProfilePopup-title": "Upravit profil",
@@ -193,7 +229,7 @@
"email-enrollAccount-subject": "Byl vytvořen účet na __siteName__",
"email-enrollAccount-text": "Ahoj __user__,\n\nMůžeš začít používat službu kliknutím na odkaz níže.\n\n__url__\n\nDěkujeme.",
"email-fail": "Odeslání emailu selhalo",
"email-fail-text": "Error trying to send email",
"email-fail-text": "Chyba při pokusu o odeslání emailu",
"email-invalid": "Neplatný email",
"email-invite": "Pozvat pomocí emailu",
"email-invite-subject": "__inviter__ odeslal pozvánku",
@@ -203,7 +239,7 @@
"email-sent": "Email byl odeslán",
"email-verifyEmail-subject": "Ověř svou emailovou adresu na",
"email-verifyEmail-text": "Ahoj __user__,\n\nPro ověření emailové adresy klikni na odkaz níže.\n\n__url__\n\nDěkujeme.",
"enable-wip-limit": "Enable WIP Limit",
"enable-wip-limit": "Povolit WIP Limit",
"error-board-doesNotExist": "Toto tablo neexistuje",
"error-board-notAdmin": "K provedení změny musíš být administrátor tohoto tabla",
"error-board-notAMember": "K provedení změny musíš být členem tohoto tabla",
@@ -213,43 +249,47 @@
"error-user-doesNotExist": "Tento uživatel neexistuje",
"error-user-notAllowSelf": "Nemůžeš pozvat sám sebe",
"error-user-notCreated": "Tento uživatel není vytvořen",
"error-username-taken": "This username is already taken",
"error-email-taken": "Email has already been taken",
"error-username-taken": "Toto uživatelské jméno již existuje",
"error-email-taken": "Tento email byl již použit",
"export-board": "Exportovat tablo",
"filter": "Filtr",
"filter-cards": "Filtrovat karty",
"filter-clear": "Vyčistit filtr",
"filter-no-label": "No label",
"filter-no-member": "No member",
"filter-no-label": "Žádný štítek",
"filter-no-member": "Žádný člen",
"filter-no-custom-fields": "Žádné vlastní pole",
"filter-on": "Filtr je zapnut",
"filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.",
"filter-to-selection": "Filtrovat výběr",
"advanced-filter-label": "Pokročilý filtr",
"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": "Celé jméno",
"header-logo-title": "Jit zpět na stránku s tably.",
"hide-system-messages": "Hide system messages",
"hide-system-messages": "Skrýt systémové zprávy",
"headerBarCreateBoardPopup-title": "Vytvořit tablo",
"home": "Domů",
"import": "Import",
"import-board": "import board",
"link": "Link",
"import-board": "Importovat tablo",
"import-board-c": "Importovat tablo",
"import-board-title-trello": "Import board from Trello",
"import-board-title-wekan": "Import board from Wekan",
"import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
"from-trello": "From Trello",
"from-wekan": "From Wekan",
"import-board-title-wekan": "Importovat tablo z Wekanu",
"import-sandstorm-warning": "Importované tablo spaže všechny existující data v tablu a nahradí je importovaným tablem.",
"from-trello": "Z Trella",
"from-wekan": "Z Wekanu",
"import-board-instruction-trello": "Na svém Trello tablu, otevři 'Menu', pak 'More', 'Print and Export', 'Export JSON', a zkopíruj výsledný text",
"import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
"import-board-instruction-wekan": "Ve vašem Wekan tablu jděte do 'Menu', klikněte na 'Exportovat tablo' a zkopírujte text ze staženého souboru.",
"import-json-placeholder": "Sem vlož validní JSON data",
"import-map-members": "Map members",
"import-map-members": "Mapovat členy",
"import-members-map": "Toto importované tablo obsahuje několik členů. Namapuj členy z importu na uživatelské účty Wekan.",
"import-show-user-mapping": "Zkontrolovat namapování členů",
"import-user-select": "Vyber uživatele Wekan, kterého chceš použít pro tohoto člena",
"importMapMembersAddPopup-title": "Select Wekan member",
"info": "Version",
"importMapMembersAddPopup-title": "Vybrat Wekan uživatele",
"info": "Verze",
"initials": "Iniciály",
"invalid-date": "Invalid date",
"invalid-time": "Invalid time",
"invalid-user": "Invalid user",
"invalid-date": "Neplatné datum",
"invalid-time": "Neplatný čas",
"invalid-user": "Neplatný uživatel",
"joined": "spojeno",
"just-invited": "Právě jsi byl pozván(a) do tohoto tabla",
"keyboard-shortcuts": "Klávesové zkratky",
@@ -260,20 +300,20 @@
"language": "Jazyk",
"last-admin-desc": "Nelze změnit role, protože musí existovat alespoň jeden administrátor.",
"leave-board": "Opustit tablo",
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"leave-board-pop": "Opravdu chcete opustit tablo __boardTitle__? Odstraníte se tím i ze všech karet v tomto tablu.",
"leaveBoardPopup-title": "Opustit tablo?",
"link-card": "Odkázat na tuto kartu",
"list-archive-cards": "Archivovat všechny karty na tomto seznamu",
"list-archive-cards-pop": "Toto odstraní z tabla všechny karty z tohoto seznamu. Pro zobrazení archivovaných karet a jejich opětovné obnovení, klikni v \"Menu\" > \"Archivované položky\".",
"list-archive-cards": "Přesunout všechny karty v tomto seznamu do koše",
"list-archive-cards-pop": "Toto odstraní z tabla všechny karty z tohoto seznamu. Pro zobrazení karet v koši a jejich opětovné obnovení, klikni v \"Menu\" > \"Archivované položky\".",
"list-move-cards": "Přesunout všechny karty v tomto seznamu",
"list-select-cards": "Vybrat všechny karty v tomto seznamu",
"listActionPopup-title": "Vypsat akce",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneActionPopup-title": "Akce swimlane",
"listImportCardPopup-title": "Importovat Trello kartu",
"listMorePopup-title": "Více",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"link-list": "Odkaz na tento seznam",
"list-delete-pop": "Všechny akce budou odstraněny z kanálu aktivity a nebude možné kartu obnovit. Toto nelze vrátit zpět.",
"list-delete-suggest-archive": "Kartu můžete přesunout do koše a tím ji odstranit z tabla a přitom zachovat aktivity.",
"lists": "Seznamy",
"swimlanes": "Swimlanes",
"log-out": "Odhlásit",
@@ -284,31 +324,31 @@
"menu": "Menu",
"move-selection": "Přesunout výběr",
"moveCardPopup-title": "Přesunout kartu",
"moveCardToBottom-title": "Move to Bottom",
"moveCardToTop-title": "Move to Top",
"moveCardToBottom-title": "Přesunout dolu",
"moveCardToTop-title": "Přesunout nahoru",
"moveSelectionPopup-title": "Přesunout výběr",
"multi-selection": "Multi-výběr",
"multi-selection-on": "Multi-výběr je zapnut",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
"muted": "Umlčeno",
"muted-info": "Nikdy nedostanete oznámení o změně v tomto tablu.",
"my-boards": "Moje tabla",
"name": "Jméno",
"no-archived-cards": "Žádné archivované karty.",
"no-archived-lists": "Žádné archivované seznamy.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "Žádné karty v koši",
"no-archived-lists": "Žádné seznamy v koši",
"no-archived-swimlanes": "Žádné swimlane v koši",
"no-results": "Žádné výsledky",
"normal": "Normální",
"normal-desc": "Může zobrazovat a upravovat karty. Nemůže měnit nastavení.",
"not-accepted-yet": "Pozvánka ještě nebyla přijmuta",
"notify-participate": "Receive updates to any cards you participate as creater or member",
"notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"notify-participate": "Dostane aktualizace do všech karet, ve kterých se účastní jako tvůrce nebo člen",
"notify-watch": "Dostane aktualitace to všech tabel, seznamů nebo karet, které sledujete",
"optional": "volitelný",
"or": "nebo",
"page-maybe-private": "Tato stránka může být soukromá. Můžete ji zobrazit po <a href='%s'>přihlášení</a>.",
"page-not-found": "Stránka nenalezena.",
"password": "Heslo",
"paste-or-dragdrop": "vložit, nebo přetáhnout a pustit soubor obrázku (pouze obrázek)",
"participating": "Participating",
"participating": "Zúčastnění",
"preview": "Náhled",
"previewAttachedImagePopup-title": "Náhled",
"previewClipboardImagePopup-title": "Náhled",
@@ -320,8 +360,8 @@
"quick-access-description": "Pro přidání odkazu do této lišty označ tablo hvězdičkou.",
"remove-cover": "Odstranit obal",
"remove-from-board": "Odstranit z tabla",
"remove-label": "Remove Label",
"listDeletePopup-title": "Delete List ?",
"remove-label": "Odstranit štítek",
"listDeletePopup-title": "Smazat seznam?",
"remove-member": "Odebrat uživatele",
"remove-member-from-card": "Odstranit z karty",
"remove-member-pop": "Odstranit __name__ (__username__) z __boardTitle__? Uživatel bude odebrán ze všech karet na tomto tablu. Na tuto skutečnost bude upozorněn.",
@@ -331,13 +371,13 @@
"restore": "Obnovit",
"save": "Uložit",
"search": "Hledat",
"search-cards": "Search from card titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
"setWipLimitPopup-title": "Set WIP Limit",
"search-cards": "Hledat nadpisy a popisy karet v tomto tablu",
"search-example": "Hledaný text",
"select-color": "Vybrat barvu",
"set-wip-limit-value": "Nastaví limit pro maximální počet úkolů v seznamu.",
"setWipLimitPopup-title": "Nastavit WIP Limit",
"shortcut-assign-self": "Přiřadit sebe k aktuální kartě",
"shortcut-autocomplete-emoji": "Autocomplete emoji",
"shortcut-autocomplete-emoji": "Automatické dokončování emoji",
"shortcut-autocomplete-members": "Automatický výběr uživatel",
"shortcut-clear-filters": "Vyčistit všechny filtry",
"shortcut-close-dialog": "Zavřít dialog",
@@ -345,9 +385,9 @@
"shortcut-show-shortcuts": "Otevřít tento seznam odkazů",
"shortcut-toggle-filterbar": "Přepnout lištu filtrování",
"shortcut-toggle-sidebar": "Přepnout lištu tabla",
"show-cards-minimum-count": "Show cards count if list contains more than",
"sidebar-open": "Open Sidebar",
"sidebar-close": "Close Sidebar",
"show-cards-minimum-count": "Zobrazit počet karet pokud seznam obsahuje více než ",
"sidebar-open": "Otevřít boční panel",
"sidebar-close": "Zavřít boční panel",
"signupPopup-title": "Vytvořit účet",
"star-board-title": "Kliknutím přidat tablu hvězdičku. Poté bude zobrazeno navrchu seznamu.",
"starred-boards": "Tabla s hvězdičkou",
@@ -356,64 +396,65 @@
"team": "Tým",
"this-board": "toto tablo",
"this-card": "tuto kartu",
"spent-time-hours": "Spent time (hours)",
"overtime-hours": "Overtime (hours)",
"overtime": "Overtime",
"has-overtime-cards": "Has overtime cards",
"has-spenttime-cards": "Has spent time cards",
"time": "Time",
"spent-time-hours": "Strávený čas (hodiny)",
"overtime-hours": "Přesčas (hodiny)",
"overtime": "Přesčas",
"has-overtime-cards": "Obsahuje karty s přesčasy",
"has-spenttime-cards": "Obsahuje karty se stráveným časem",
"time": "Čas",
"title": "Název",
"tracking": "Tracking",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"tracking": "Pozorující",
"tracking-info": "Budete informováni o všech změnách v kartách, u kterých jste tvůrce nebo člen.",
"type": "Typ",
"unassign-member": "Vyřadit člena",
"unsaved-description": "Popis neni uložen.",
"unwatch": "Unwatch",
"unwatch": "Přestat sledovat",
"upload": "Nahrát",
"upload-avatar": "Nahrát avatar",
"uploaded-avatar": "Avatar nahrán",
"username": "Uživatelské jméno",
"view-it": "Zobrazit",
"warn-list-archived": "varování: tato karta je v archivovaném seznamu",
"watch": "Watch",
"watching": "Watching",
"watching-info": "You will be notified of any change in this board",
"welcome-board": "Welcome Board",
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
"warn-list-archived": "varování: tuto kartu obsahuje seznam v koši",
"watch": "Sledovat",
"watching": "Sledující",
"watching-info": "Bude vám oznámena každá změna v tomto tablu",
"welcome-board": "Uvítací tablo",
"welcome-swimlane": "Milník 1",
"welcome-list1": "Základní",
"welcome-list2": "Pokročilé",
"what-to-do": "Co chcete dělat?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
"wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
"admin-panel": "Admin Panel",
"wipLimitErrorPopup-title": "Neplatný WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "Počet úkolů v tomto seznamu je vyšší než definovaný WIP limit.",
"wipLimitErrorPopup-dialog-pt2": "Přesuňte prosím některé úkoly mimo tento seznam, nebo nastavte vyšší WIP limit.",
"admin-panel": "Administrátorský panel",
"settings": "Nastavení",
"people": "Lidé",
"registration": "Registrace",
"disable-self-registration": "Disable Self-Registration",
"disable-self-registration": "Vypnout svévolnou registraci",
"invite": "Pozvánka",
"invite-people": "Invite People",
"to-boards": "To board(s)",
"invite-people": "Pozvat lidi",
"to-boards": "Do tabel",
"email-addresses": "Emailové adresy",
"smtp-host-description": "The address of the SMTP server that handles your emails.",
"smtp-port-description": "The port your SMTP server uses for outgoing emails.",
"smtp-tls-description": "Enable TLS support for SMTP server",
"smtp-host-description": "Adresa SMTP serveru, který zpracovává vaše emaily.",
"smtp-port-description": "Port, který používá Váš SMTP server pro odchozí emaily.",
"smtp-tls-description": "Zapnout TLS podporu pro SMTP server",
"smtp-host": "SMTP Host",
"smtp-port": "SMTP Port",
"smtp-username": "Uživatelské jméno",
"smtp-password": "Heslo",
"smtp-tls": "TLS support",
"smtp-tls": "podpora TLS",
"send-from": "Od",
"send-smtp-test": "Send a test email to yourself",
"invitation-code": "Invitation Code",
"send-smtp-test": "Poslat si zkušební email.",
"invitation-code": "Kód pozvánky",
"email-invite-register-subject": "__inviter__ odeslal pozvánku",
"email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
"email-smtp-test-subject": "SMTP Test Email From Wekan",
"email-smtp-test-text": "You have successfully sent an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"email-invite-register-text": "Ahoj __user__,\n\n__inviter__ tě přizval ke spolupráci ve Wekanu.\n\nNásleduj prosím odkaz níže:\n\n__url__\n\nKód Tvé pozvánky je: __icode__\n\nDěkujeme.",
"email-smtp-test-subject": "SMTP Testovací email z Wekanu",
"email-smtp-test-text": "Email byl úspěšně odeslán",
"error-invitation-code-not-exist": "Kód pozvánky neexistuje.",
"error-notAuthorized": "Nejste autorizován k prohlížení této stránky.",
"outgoing-webhooks": "Outgoing Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"new-outgoing-webhook": "New Outgoing Webhook",
"outgoing-webhooks": "Odchozí Webhooky",
"outgoingWebhooksPopup-title": "Odchozí Webhooky",
"new-outgoing-webhook": "Nové odchozí Webhooky",
"no-name": "(Neznámé)",
"Wekan_version": "Wekan verze",
"Node_version": "Node verze",
@@ -421,19 +462,50 @@
"OS_Cpus": "OS Počet CPU",
"OS_Freemem": "OS Volná paměť",
"OS_Loadavg": "OS Průměrná zátěž systém",
"OS_Platform": "OS Platform",
"OS_Release": "OS Release",
"OS_Platform": "Platforma OS",
"OS_Release": "Verze OS",
"OS_Totalmem": "OS Celková paměť",
"OS_Type": "OS Type",
"OS_Type": "Typ OS",
"OS_Uptime": "OS Doba běhu systému",
"hours": "hodin",
"minutes": "minut",
"seconds": "sekund",
"show-field-on-card": "Ukázat toto pole na kartě",
"yes": "Ano",
"no": "Ne",
"accounts": "Účty",
"accounts-allowEmailChange": "Povolit změnu Emailu",
"createdAt": "Created at",
"verified": "Verified",
"active": "Active"
"accounts-allowUserNameChange": "Povolit změnu uživatelského jména",
"createdAt": "Vytvořeno v",
"verified": "Ověřen",
"active": "Aktivní",
"card-received": "Přijato",
"card-received-on": "Přijaté v",
"card-end": "Konec",
"card-end-on": "Končí v",
"editCardReceivedDatePopup-title": "Změnit datum přijetí",
"editCardEndDatePopup-title": "Změnit datum konce",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Smazat tablo?",
"delete-board": "Smazat tablo",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+120 -48
View File
@@ -2,17 +2,19 @@
"accept": "Akzeptieren",
"act-activity-notify": "[Wekan] Aktivitätsbenachrichtigung",
"act-addAttachment": "hat __attachment__ an __card__ angehängt",
"act-addChecklist": "hat die Checklist __checklist__ zu __card__ hinzugefügt",
"act-addSubtask": "hat die Teilaufgabe __checklist__ zu __card__ hinzugefügt",
"act-addChecklist": "hat die Checkliste __checklist__ zu __card__ hinzugefügt",
"act-addChecklistItem": "hat __checklistItem__ zur Checkliste __checklist__ in __card__ hinzugefügt",
"act-addComment": "hat __card__ kommentiert: __comment__",
"act-createBoard": "hat __board__ erstellt",
"act-createCard": "hat __card__ zu __list__ hinzugefügt",
"act-createCustomField": "benutzerdefiniertes Feld __customField__ angelegt",
"act-createList": "hat __list__ zu __board__ hinzugefügt",
"act-addBoardMember": "hat __member__ zu __board__ hinzugefügt",
"act-archivedBoard": "hat __board__ archiviert",
"act-archivedCard": "hat __card__ archiviert",
"act-archivedList": "hat __list__ archiviert",
"act-archivedSwimlane": "__swimlane__ wurde archiviert",
"act-archivedBoard": "__board__ in den Papierkorb verschoben",
"act-archivedCard": "__card__ in den Papierkorb verschoben",
"act-archivedList": "__list__ in den Papierkorb verschoben",
"act-archivedSwimlane": "__swimlane__ in den Papierkorb verschoben",
"act-importBoard": "hat __board__ importiert",
"act-importCard": "hat __card__ importiert",
"act-importList": "hat __list__ importiert",
@@ -27,9 +29,10 @@
"activities": "Aktivitäten",
"activity": "Aktivität",
"activity-added": "hat %s zu %s hinzugefügt",
"activity-archived": "hat %s archiviert",
"activity-archived": "hat %s in den Papierkorb verschoben",
"activity-attached": "hat %s an %s angehängt",
"activity-created": "hat %s erstellt",
"activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt",
"activity-excluded": "hat %s von %s ausgeschlossen",
"activity-imported": "hat %s in %s von %s importiert",
"activity-imported-board": "hat %s von %s importiert",
@@ -39,15 +42,17 @@
"activity-removed": "hat %s von %s entfernt",
"activity-sent": "hat %s an %s gesendet",
"activity-unjoined": "hat %s verlassen",
"activity-subtask-added": "Teilaufgabe zu %s hinzugefügt",
"activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt",
"activity-checklist-item-added": "hat einen Punkt zur Checkliste '%s' in %s hinzugefügt",
"activity-checklist-item-added": "hat eine Checklistenposition zu '%s' in %s hinzugefügt",
"add": "Hinzufügen",
"add-attachment": "Datei anhängen",
"add-board": "neues Board",
"add-card": "Karte hinzufügen",
"add-swimlane": "Swimlane hinzufügen",
"add-subtask": "Teilaufgabe hinzufügen",
"add-checklist": "Checkliste hinzufügen",
"add-checklist-item": "Punkt zu einer Checkliste hinzufügen",
"add-checklist-item": "Position zu einer Checkliste hinzufügen",
"add-cover": "Cover hinzufügen",
"add-label": "Label hinzufügen",
"add-list": "Liste hinzufügen",
@@ -57,30 +62,30 @@
"admin": "Admin",
"admin-desc": "Kann Karten anzeigen und bearbeiten, Mitglieder entfernen und Boardeinstellungen ändern.",
"admin-announcement": "Ankündigung",
"admin-announcement-active": "Aktive, systemweite Ankündigungen",
"admin-announcement-active": "Aktive systemweite Ankündigungen",
"admin-announcement-title": "Ankündigung des Administrators",
"all-boards": "Alle Boards",
"and-n-other-card": "und eine andere Karte",
"and-n-other-card_plural": "und __count__ andere Karten",
"apply": "Übernehmen",
"app-is-offline": "Wekan lädt gerade, bitte warten Sie. Wenn Sie die Seite neu laden, gehen nicht übertragene Änderungen verloren. Sollte Wekan nicht geladen werden, überprüfen Sie bitte, ob der Server noch läuft.",
"archive": "Archiv",
"archive-all": "Alles archivieren",
"archive-board": "Board archivieren",
"archive-card": "Karte archivieren",
"archive-list": "Liste archivieren",
"archive-swimlane": "Swimlane archivieren",
"archive-selection": "Auswahl archivieren",
"archiveBoardPopup-title": "Board archivieren?",
"archived-items": "Archivierte Einträge",
"archived-boards": "Achivierte Boards",
"archive": "In den Papierkorb verschieben",
"archive-all": "Alles in den Papierkorb verschieben",
"archive-board": "Board in den Papierkorb verschieben",
"archive-card": "Karte in den Papierkorb verschieben",
"archive-list": "Liste in den Papierkorb verschieben",
"archive-swimlane": "Swimlane in den Papierkorb verschieben",
"archive-selection": "Auswahl in den Papierkorb verschieben",
"archiveBoardPopup-title": "Board in den Papierkorb verschieben?",
"archived-items": "Papierkorb",
"archived-boards": "Boards im Papierkorb",
"restore-board": "Board wiederherstellen",
"no-archived-boards": "Keine archivierten Boards",
"archives": "Archive",
"no-archived-boards": "Keine Boards im Papierkorb.",
"archives": "Papierkorb",
"assign-member": "Mitglied zuweisen",
"attached": "angehängt",
"attachment": "Anhang",
"attachment-delete-pop": "Das Löschen eines Anhangs kann nicht wieder rückgängig gemacht werden.",
"attachment-delete-pop": "Das Löschen eines Anhangs kann nicht rückgängig gemacht werden.",
"attachmentDeletePopup-title": "Anhang löschen?",
"attachments": "Anhänge",
"auto-watch": "Neue Boards nach Erstellung automatisch beobachten",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Boardmenü",
"boards": "Boards",
"board-view": "Boardansicht",
"board-view-cal": "Kalender",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Listen",
"bucket-example": "z.B. \"Löffelliste\"",
"cancel": "Abbrechen",
"card-archived": "Diese Karte wurde archiviert.",
"card-archived": "Diese Karte wurde in den Papierkorb verschoben",
"board-archived": "Dieses Board wurde in den Papierkorb verschoben.",
"card-comments-title": "Diese Karte hat %s Kommentar(e).",
"card-delete-notice": "Löschen ist unwiderruflich. Alle Aktionen die dieser Karte zugeordnet sind werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden vom Aktivitätsfeed entfernt und die Karte kann nicht mehr geöffnet werden. Das Löschen kann nicht widerrufen werden!",
"card-delete-suggest-archive": "Sie können eine Karte archivieren, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-due": "Ende",
"card-due-on": "Ende am",
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
"card-delete-suggest-archive": "Sie können eine Karte in den Papierkorb verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-due": "Fällig",
"card-due-on": "Fällig am",
"card-spent": "Aufgewendete Zeit",
"card-edit-attachments": "Anhänge ändern",
"card-edit-custom-fields": "Benutzerdefinierte Felder editieren",
"card-edit-labels": "Labels ändern",
"card-edit-members": "Mitglieder ändern",
"card-labels-title": "Labels für diese Karte ändern.",
@@ -118,12 +126,19 @@
"card-start": "Start",
"card-start-on": "Start am",
"cardAttachmentsPopup-title": "Anhängen von",
"cardCustomField-datePopup-title": "Datum ändern",
"cardCustomFieldsPopup-title": "Benutzerdefinierte Felder editieren",
"cardDeletePopup-title": "Karte löschen?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
"cardMorePopup-title": "Mehr",
"cards": "Karten",
"cards-count": "Karten",
"casSignIn": "Mit CAS anmelden",
"cardType-card": "Karte",
"cardType-linkedCard": "Verknüpfte Karte",
"cardType-linkedBoard": "Verknüpftes Board",
"change": "Ändern",
"change-avatar": "Profilbild ändern",
"change-password": "Passwort ändern",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Passwort ändern",
"changePermissionsPopup-title": "Berechtigungen ändern",
"changeSettingsPopup-title": "Einstellungen ändern",
"subtasks": "Teilaufgaben",
"checklists": "Checklisten",
"click-to-star": "Klicken Sie, um das Board mit einem Stern zu markieren.",
"click-to-unstar": "Klicken Sie, um den Stern vom Board zu entfernen.",
"clipboard": "Zwischenablage oder Drag & Drop",
"close": "Schließen",
"close-board": "Board schließen",
"close-board-pop": "Sie können das Board wiederherstellen, indem Sie den \"Archiv\"-Button in der Kopfzeile der Startseite anklicken.",
"close-board-pop": "Sie können das Board wiederherstellen, indem Sie die Schaltfläche \"Papierkorb\" in der Kopfzeile der Startseite anklicken.",
"color-black": "schwarz",
"color-blue": "blau",
"color-green": "grün",
@@ -153,11 +169,16 @@
"color-yellow": "gelb",
"comment": "Kommentar",
"comment-placeholder": "Kommentar schreiben",
"comment-only": "Nur kommentierbar",
"comment-only-desc": "Kann Karten nur Kommentieren",
"comment-only": "Nur Kommentare",
"comment-only-desc": "Kann Karten nur kommentieren.",
"no-comments": "Keine Kommentare",
"no-comments-desc": "Kann keine Kommentare und Aktivitäten sehen.",
"computer": "Computer",
"confirm-checklist-delete-dialog": "Sind Sie sicher, dass Sie die Checkliste löschen möchten?",
"confirm-subtask-delete-dialog": "Wollen Sie die Teilaufgabe wirklich löschen?",
"confirm-checklist-delete-dialog": "Wollen Sie die Checkliste wirklich löschen?",
"copy-card-link-to-clipboard": "Kopiere Link zur Karte in die Zwischenablage",
"linkCardPopup-title": "Karte verknüpfen",
"searchCardPopup-title": "Karte suchen",
"copyCardPopup-title": "Karte kopieren",
"copyChecklistToManyCardsPopup-title": "Checklistenvorlage in mehrere Karten kopieren",
"copyChecklistToManyCardsPopup-instructions": "Titel und Beschreibungen der Zielkarten im folgenden JSON-Format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Board erstellen",
"chooseBoardSourcePopup-title": "Board importieren",
"createLabelPopup-title": "Label erstellen",
"createCustomField": "Feld erstellen",
"createCustomFieldPopup-title": "Feld erstellen",
"current": "aktuell",
"custom-field-delete-pop": "Dies wird das Feld aus allen Karten entfernen und den dazugehörigen Verlauf löschen. Die Aktion kann nicht rückgängig gemacht werden.",
"custom-field-checkbox": "Kontrollkästchen",
"custom-field-date": "Datum",
"custom-field-dropdown": "Dropdownliste",
"custom-field-dropdown-none": "(keiner)",
"custom-field-dropdown-options": "Listenoptionen",
"custom-field-dropdown-options-placeholder": "Drücken Sie die Eingabetaste, um weitere Optionen hinzuzufügen",
"custom-field-dropdown-unknown": "(unbekannt)",
"custom-field-number": "Zahl",
"custom-field-text": "Text",
"custom-fields": "Benutzerdefinierte Felder",
"date": "Datum",
"decline": "Ablehnen",
"default-avatar": "Standard Profilbild",
"delete": "Löschen",
"deleteCustomFieldPopup-title": "Benutzerdefiniertes Feld löschen?",
"deleteLabelPopup-title": "Label löschen?",
"description": "Beschreibung",
"disambiguateMultiLabelPopup-title": "Labels vereinheitlichen",
@@ -184,7 +219,8 @@
"edit-wip-limit": "WIP-Limit bearbeiten",
"soft-wip-limit": "Soft WIP-Limit",
"editCardStartDatePopup-title": "Startdatum ändern",
"editCardDueDatePopup-title": "Enddatum ändern",
"editCardDueDatePopup-title": "Fälligkeitsdatum ändern",
"editCustomFieldPopup-title": "Feld bearbeiten",
"editCardSpentTimePopup-title": "Aufgewendete Zeit ändern",
"editLabelPopup-title": "Label ändern",
"editNotificationPopup-title": "Benachrichtigung ändern",
@@ -221,15 +257,19 @@
"filter-clear": "Filter entfernen",
"filter-no-label": "Kein Label",
"filter-no-member": "Kein Mitglied",
"filter-no-custom-fields": "Keine benutzerdefinierten Felder",
"filter-on": "Filter ist aktiv",
"filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken Sie, um den Filter zu bearbeiten.",
"filter-to-selection": "Ergebnisse auswählen",
"advanced-filter-label": "Erweiterter Filter",
"advanced-filter-description": "Der erweiterte Filter erlaubt die Eingabe von Zeichenfolgen, die folgende Operatoren enthalten: == != <= >= && || ( ). Ein Leerzeichen wird als Trennzeichen zwischen den Operatoren verwendet. Sie können nach allen benutzerdefinierten Feldern filtern, indem Sie deren Namen und Werte eingeben. Zum Beispiel: Feld1 == Wert1. Hinweis: Wenn Felder oder Werte Leerzeichen enthalten, müssen Sie sie in einfache Anführungszeichen setzen. Zum Beispiel: 'Feld 1' == 'Wert 1'. Um einzelne Steuerzeichen (' \\/) zu überspringen, können Sie \\ verwenden. Zum Beispiel: Feld1 == Ich bin\\'s. Sie können außerdem mehrere Bedingungen kombinieren. Zum Beispiel: F1 == W1 || F1 == W2. Normalerweise werden alle Operatoren von links nach rechts interpretiert. Sie können die Reihenfolge ändern, indem Sie Klammern setzen. Zum Beispiel: F1 == W1 && ( F2 == W2 || F2 == W3 ). Sie können Textfelder auch mithilfe regulärer Ausdrücke durchsuchen: F1 == /Tes.*/i",
"fullname": "Vollständiger Name",
"header-logo-title": "Zurück zur Board Seite.",
"hide-system-messages": "Systemmeldungen ausblenden",
"headerBarCreateBoardPopup-title": "Board erstellen",
"home": "Home",
"import": "Importieren",
"link": "Verknüpfung",
"import-board": "Board importieren",
"import-board-c": "Board importieren",
"import-board-title-trello": "Board von Trello importieren",
@@ -255,7 +295,7 @@
"keyboard-shortcuts": "Tastaturkürzel",
"label-create": "Label erstellen",
"label-default": "%s Label (Standard)",
"label-delete-pop": "Diese Aktion ist unwiderruflich. Das Label wird von allen Karten entfernt und seine Historie wird gelöscht.",
"label-delete-pop": "Aktion kann nicht rückgängig gemacht werden. Das Label wird von allen Karten entfernt und seine Historie gelöscht.",
"labels": "Labels",
"language": "Sprache",
"last-admin-desc": "Sie können keine Rollen ändern, weil es mindestens einen Administrator geben muss.",
@@ -263,8 +303,8 @@
"leave-board-pop": "Sind Sie sicher, dass Sie __boardTitle__ verlassen möchten? Sie werden von allen Karten in diesem Board entfernt.",
"leaveBoardPopup-title": "Board verlassen?",
"link-card": "Link zu dieser Karte",
"list-archive-cards": "Alle Karten in dieser Liste archivieren",
"list-archive-cards-pop": "Alle Karten von dieser Liste werden vom Board entfernt. Um archivierte Karten anzuzeigen und wiederherzustellen, klicken Sie auf \"Menü\" > \"Archivierte Einträge\".",
"list-archive-cards": "Alle Karten dieser Liste in den Papierkorb verschieben",
"list-archive-cards-pop": "Alle Karten dieser Liste werden vom Board entfernt. Um Karten im Papierkorb anzuzeigen und wiederherzustellen, klicken Sie auf \"Menü\" > \"Papierkorb\".",
"list-move-cards": "Alle Karten in dieser Liste verschieben",
"list-select-cards": "Alle Karten in dieser Liste auswählen",
"listActionPopup-title": "Listenaktionen",
@@ -272,8 +312,8 @@
"listImportCardPopup-title": "Eine Trello-Karte importieren",
"listMorePopup-title": "Mehr",
"link-list": "Link zu dieser Liste",
"list-delete-pop": "Alle Aktionen werden aus dem Verlauf gelöscht. Die Liste kann nicht wiederhergestellt werden.",
"list-delete-suggest-archive": "Listen können archiviert werden, um sie aus dem Board zu entfernen und den Verlauf zu erhalten.",
"list-delete-pop": "Alle Aktionen werden aus dem Verlauf gelöscht und die Liste kann nicht wiederhergestellt werden.",
"list-delete-suggest-archive": "Listen können in den Papierkorb verschoben werden, um sie aus dem Board zu entfernen und die Aktivitäten zu behalten.",
"lists": "Listen",
"swimlanes": "Swimlanes",
"log-out": "Ausloggen",
@@ -293,9 +333,9 @@
"muted-info": "Sie werden nicht über Änderungen auf diesem Board benachrichtigt",
"my-boards": "Meine Boards",
"name": "Name",
"no-archived-cards": "Keine archivierten Karten.",
"no-archived-lists": "Keine archivierten Listen.",
"no-archived-swimlanes": "Keine archivierten Swimlanes",
"no-archived-cards": "Keine Karten im Papierkorb.",
"no-archived-lists": "Keine Listen im Papierkorb.",
"no-archived-swimlanes": "Keine Swimlanes im Papierkorb.",
"no-results": "Keine Ergebnisse",
"normal": "Normal",
"normal-desc": "Kann Karten anzeigen und bearbeiten, aber keine Einstellungen ändern.",
@@ -354,17 +394,18 @@
"starred-boards-description": "Markierte Boards erscheinen oben in ihrer Boardliste.",
"subscribe": "Abonnieren",
"team": "Team",
"this-board": "dieses Board",
"this-board": "diesem Board",
"this-card": "diese Karte",
"spent-time-hours": "Aufgewendete Zeit (Stunden)",
"overtime-hours": "Überzeit (Stunden)",
"overtime": "Überzeit",
"has-overtime-cards": "Hat Karten mit Überzeit",
"overtime-hours": "Mehrarbeit (Stunden)",
"overtime": "Mehrarbeit",
"has-overtime-cards": "Hat Karten mit Mehrarbeit",
"has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten",
"time": "Zeit",
"title": "Titel",
"tracking": "Folgen",
"tracking-info": "Sie werden über alle Änderungen an Karten benachrichtigt, an denen Sie als Ersteller oder Mitglied beteiligt sind.",
"type": "Typ",
"unassign-member": "Mitglied entfernen",
"unsaved-description": "Sie haben eine nicht gespeicherte Änderung.",
"unwatch": "Beobachtung entfernen",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Profilbild hochgeladen",
"username": "Benutzername",
"view-it": "Ansehen",
"warn-list-archived": "Warnung: Diese Karte befindet sich in einer archivierten Liste",
"warn-list-archived": "Warnung: Diese Karte befindet sich in einer Liste im Papierkorb!",
"watch": "Beobachten",
"watching": "Beobachten",
"watching-info": "Sie werden über alle Änderungen in diesem Board benachrichtigt",
@@ -429,11 +470,42 @@
"hours": "Stunden",
"minutes": "Minuten",
"seconds": "Sekunden",
"show-field-on-card": "Zeige dieses Feld auf der Karte",
"yes": "Ja",
"no": "Nein",
"accounts": "Konten",
"accounts-allowEmailChange": "Ändern der E-Mailadresse zulassen",
"accounts-allowEmailChange": "Ändern der E-Mailadresse erlauben",
"accounts-allowUserNameChange": "Ändern des Benutzernamens erlauben",
"createdAt": "Erstellt am",
"verified": "Geprüft",
"active": "Aktiv"
"active": "Aktiv",
"card-received": "Empfangen",
"card-received-on": "Empfangen am",
"card-end": "Ende",
"card-end-on": "Endet am",
"editCardReceivedDatePopup-title": "Empfangsdatum ändern",
"editCardEndDatePopup-title": "Enddatum ändern",
"assigned-by": "Zugewiesen von",
"requested-by": "Angefordert von",
"board-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Sie werden alle Listen, Karten und Aktionen, die mit diesem Board verbunden sind, verlieren.",
"delete-board-confirm-popup": "Alle Listen, Karten, Labels und Akivitäten werden gelöscht und Sie können die Inhalte des Boards nicht wiederherstellen! Die Aktion kann nicht rückgängig gemacht werden.",
"boardDeletePopup-title": "Board löschen?",
"delete-board": "Board löschen",
"default-subtasks-board": "Teilaufgabe für __board__ Board",
"default": "Standard",
"queue": "Warteschlange",
"subtask-settings": "Einstellungen für Teilaufgaben",
"boardSubtaskSettingsPopup-title": "Boardeinstellungen für Teilaufgaben",
"show-subtasks-field": "Karten können Teilaufgaben haben",
"deposit-subtasks-board": "Teilaufgaben in diesem Board ablegen:",
"deposit-subtasks-list": "Zielliste für hier abgelegte Teilaufgaben:",
"show-parent-in-minicard": "Übergeordnetes Element auf Minikarte anzeigen:",
"prefix-with-full-path": "Vollständiger Pfad über Titel",
"prefix-with-parent": "Über Titel",
"subtext-with-full-path": "Vollständiger Pfad unter Titel",
"subtext-with-parent": "Unter Titel",
"change-card-parent": "Übergeordnete Karte ändern",
"parent-card": "Übergeordnete Karte",
"source-board": "Quellboard",
"no-parent": "Nicht anzeigen"
}
+101 -29
View File
@@ -2,17 +2,19 @@
"accept": "Accept",
"act-activity-notify": "[Wekan] Activity Notification",
"act-addAttachment": "attached __attachment__ to __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addComment": "commented on __card__: __comment__",
"act-createBoard": "created __board__",
"act-createCard": "added __card__ to __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "added __list__ to __board__",
"act-addBoardMember": "added __member__ to __board__",
"act-archivedBoard": "archived __board__",
"act-archivedCard": "archived __card__",
"act-archivedList": "archived __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "imported __board__",
"act-importCard": "imported __card__",
"act-importList": "imported __list__",
@@ -27,9 +29,10 @@
"activities": "Activities",
"activity": "Activity",
"activity-added": "added %s to %s",
"activity-archived": "archived %s",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "attached %s to %s",
"activity-created": "created %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluded %s from %s",
"activity-imported": "imported %s into %s from %s",
"activity-imported-board": "imported %s from %s",
@@ -39,6 +42,7 @@
"activity-removed": "removed %s from %s",
"activity-sent": "sent %s to %s",
"activity-unjoined": "unjoined %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"add": "Προσθήκη",
@@ -46,6 +50,7 @@
"add-board": "Add Board",
"add-card": "Προσθήκη Κάρτας",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"add-cover": "Add Cover",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Εφαρμογή",
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
"archive": "Archive",
"archive-all": "Archive All",
"archive-board": "Archive Board",
"archive-card": "Archive Card",
"archive-list": "Archive List",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Archive selection",
"archiveBoardPopup-title": "Archive Board?",
"archived-items": "Archived Items",
"archived-boards": "Archived Boards",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "Restore Board",
"no-archived-boards": "No Archived Boards.",
"archives": "Archives",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Board Menu",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Λίστες",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Ακύρωση",
"card-archived": "This card is archived.",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "This card has %s comment.",
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Έως",
"card-due-on": "Έως τις",
"card-spent": "Spent Time",
"card-edit-attachments": "Edit attachments",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Edit labels",
"card-edit-members": "Edit members",
"card-labels-title": "Change the labels for the card.",
@@ -118,12 +126,19 @@
"card-start": "Start",
"card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Attach From",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "Διαγραφή Κάρτας;",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Ετικέτες",
"cardMembersPopup-title": "Μέλοι",
"cardMorePopup-title": "Περισσότερα",
"cards": "Κάρτες",
"cards-count": "Κάρτες",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Αλλαγή",
"change-avatar": "Change Avatar",
"change-password": "Αλλαγή Κωδικού",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Αλλαγή Κωδικού",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Αλλαγή Ρυθμίσεων",
"subtasks": "Subtasks",
"checklists": "Checklists",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
"clipboard": "Clipboard or drag & drop",
"close": "Κλείσιμο",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "μαύρο",
"color-blue": "μπλε",
"color-green": "πράσινο",
@@ -155,9 +171,14 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Υπολογιστής",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Create Board",
"chooseBoardSourcePopup-title": "Import board",
"createLabelPopup-title": "Create Label",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Ημερομηνία",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Ημερομηνία",
"decline": "Decline",
"default-avatar": "Default avatar",
"delete": "Διαγραφή",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Delete Label?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -221,15 +257,19 @@
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "Κανένα μέλος",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "Filter is on",
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
"filter-to-selection": "Filter to selection",
"advanced-filter-label": "Advanced Filter",
"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": "Πλήρες Όνομα",
"header-logo-title": "Go back to your boards page.",
"hide-system-messages": "Hide system messages",
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Εισαγωγή",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Link to this card",
"list-archive-cards": "Archive all cards in this list",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Move all cards in this list",
"list-select-cards": "Select all cards in this list",
"listActionPopup-title": "List Actions",
@@ -273,7 +313,7 @@
"listMorePopup-title": "Περισσότερα",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
"lists": "Λίστες",
"swimlanes": "Swimlanes",
"log-out": "Αποσύνδεση",
@@ -293,9 +333,9 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "My Boards",
"name": "Όνομα",
"no-archived-cards": "No archived cards.",
"no-archived-lists": "No archived lists.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "Κανένα αποτέλεσμα",
"normal": "Normal",
"normal-desc": "Can view and edit cards. Can't change settings.",
@@ -365,6 +405,7 @@
"title": "Τίτλος",
"tracking": "Tracking",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
"unwatch": "Unwatch",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Uploaded an avatar",
"username": "Όνομα Χρήστη",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an archived list",
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
"watch": "Watch",
"watching": "Watching",
"watching-info": "You will be notified of any change in this board",
@@ -429,11 +470,42 @@
"hours": "ώρες",
"minutes": "λεπτά",
"seconds": "δευτερόλεπτα",
"show-field-on-card": "Show this field on card",
"yes": "Ναι",
"no": "Όχι",
"accounts": "Λογαριασμοί",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
"verified": "Verified",
"active": "Active"
"active": "Active",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+103 -31
View File
@@ -2,17 +2,19 @@
"accept": "Accept",
"act-activity-notify": "[Wekan] Activity Notification",
"act-addAttachment": "attached _ attachment _ to _ card _",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addComment": "commented on __card__: __comment__",
"act-createBoard": "created __board__",
"act-createCard": "added __card__ to __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "added __list__ to __board__",
"act-addBoardMember": "added __member__ to __board__",
"act-archivedBoard": "archived __board__",
"act-archivedCard": "archived __card__",
"act-archivedList": "archived __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "imported __board__",
"act-importCard": "imported __card__",
"act-importList": "imported __list__",
@@ -27,9 +29,10 @@
"activities": "Activities",
"activity": "Activity",
"activity-added": "added %s to %s",
"activity-archived": "archived %s",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "attached %s to %s",
"activity-created": "created %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluded %s from %s",
"activity-imported": "imported %s into %s from %s",
"activity-imported-board": "imported %s from %s",
@@ -39,6 +42,7 @@
"activity-removed": "removed %s from %s",
"activity-sent": "sent %s to %s",
"activity-unjoined": "unjoined %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"add": "Add",
@@ -46,6 +50,7 @@
"add-board": "Add Board",
"add-card": "Add Card",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"add-cover": "Add Cover",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Apply",
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
"archive": "Archive",
"archive-all": "Archive All",
"archive-board": "Archive Board",
"archive-card": "Archive Card",
"archive-list": "Archive List",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Archive selection",
"archiveBoardPopup-title": "Archive Board?",
"archived-items": "Archived Items",
"archived-boards": "Archived Boards",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "Restore Board",
"no-archived-boards": "No Archived Boards.",
"archives": "Archives",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -86,7 +91,7 @@
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "The avatar is too large (70KB max)",
"back": "Back",
"board-change-color": "Change color",
"board-change-color": "Change colour",
"board-nb-stars": "%s stars",
"board-not-found": "Board not found",
"board-private-info": "This board will be <strong>private</strong>.",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Board Menu",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
"card-archived": "This card is archived.",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "This card has %s comment.",
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
"card-edit-attachments": "Edit attachments",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Edit labels",
"card-edit-members": "Edit members",
"card-labels-title": "Change the labels for the card.",
@@ -118,12 +126,19 @@
"card-start": "Start",
"card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Attach From",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "Delete Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Change",
"change-avatar": "Change Avatar",
"change-password": "Change Password",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Change Password",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Change Settings",
"subtasks": "Subtasks",
"checklists": "Checklists",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
"clipboard": "Clipboard or drag & drop",
"close": "Close",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "black",
"color-blue": "blue",
"color-green": "green",
@@ -155,9 +171,14 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Computer",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Create Board",
"chooseBoardSourcePopup-title": "Import board",
"createLabelPopup-title": "Create Label",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Date",
"decline": "Decline",
"default-avatar": "Default avatar",
"delete": "Delete",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Delete Label?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -221,15 +257,19 @@
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "Filter is on",
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
"filter-to-selection": "Filter to selection",
"advanced-filter-label": "Advanced Filter",
"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.",
"hide-system-messages": "Hide system messages",
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Link to this card",
"list-archive-cards": "Archive all cards in this list",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Move all cards in this list",
"list-select-cards": "Select all cards in this list",
"listActionPopup-title": "List Actions",
@@ -273,7 +313,7 @@
"listMorePopup-title": "More",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve its activity.",
"lists": "Lists",
"swimlanes": "Swimlanes",
"log-out": "Log Out",
@@ -293,9 +333,9 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "My Boards",
"name": "Name",
"no-archived-cards": "No archived cards.",
"no-archived-lists": "No archived lists.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "No results",
"normal": "Normal",
"normal-desc": "Can view and edit cards. Can't change settings.",
@@ -333,7 +373,7 @@
"search": "Search",
"search-cards": "Search from card titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Select Color",
"select-color": "Select Colour",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
"setWipLimitPopup-title": "Set WIP Limit",
"shortcut-assign-self": "Assign yourself to current card",
@@ -365,6 +405,7 @@
"title": "Title",
"tracking": "Tracking",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
"unwatch": "Unwatch",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Uploaded an avatar",
"username": "Username",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an archived list",
"warn-list-archived": "warning: this card is in a list in the Recycle Bin",
"watch": "Watch",
"watching": "Watching",
"watching-info": "You will be notified of any changes in this board",
@@ -429,11 +470,42 @@
"hours": "hours",
"minutes": "minutes",
"seconds": "seconds",
"show-field-on-card": "Show this field on card",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
"verified": "Verified",
"active": "Active"
"active": "Active",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+102 -29
View File
@@ -2,17 +2,19 @@
"accept": "Accept",
"act-activity-notify": "[Wekan] Activity Notification",
"act-addAttachment": "attached __attachment__ to __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addComment": "commented on __card__: __comment__",
"act-createBoard": "created __board__",
"act-createCard": "added __card__ to __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "added __list__ to __board__",
"act-addBoardMember": "added __member__ to __board__",
"act-archivedBoard": "archived __board__",
"act-archivedCard": "archived __card__",
"act-archivedList": "archived __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "imported __board__",
"act-importCard": "imported __card__",
"act-importList": "imported __list__",
@@ -27,9 +29,10 @@
"activities": "Activities",
"activity": "Activity",
"activity-added": "added %s to %s",
"activity-archived": "archived %s",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "attached %s to %s",
"activity-created": "created %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluded %s from %s",
"activity-imported": "imported %s into %s from %s",
"activity-imported-board": "imported %s from %s",
@@ -39,6 +42,7 @@
"activity-removed": "removed %s from %s",
"activity-sent": "sent %s to %s",
"activity-unjoined": "unjoined %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"add": "Add",
@@ -46,6 +50,7 @@
"add-board": "Add Board",
"add-card": "Add Card",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"add-cover": "Add Cover",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Apply",
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
"archive": "Archive",
"archive-all": "Archive All",
"archive-board": "Archive Board",
"archive-card": "Archive Card",
"archive-list": "Archive List",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Archive selection",
"archiveBoardPopup-title": "Archive Board?",
"archived-items": "Archived Items",
"archived-boards": "Archived Boards",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "Restore Board",
"no-archived-boards": "No Archived Boards.",
"archives": "Archives",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Board Menu",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
"card-archived": "This card is archived.",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "This card has %s comment.",
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
"card-edit-attachments": "Edit attachments",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Edit labels",
"card-edit-members": "Edit members",
"card-labels-title": "Change the labels for the card.",
@@ -118,12 +126,19 @@
"card-start": "Start",
"card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Attach From",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "Delete Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn" : "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Change",
"change-avatar": "Change Avatar",
"change-password": "Change Password",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Change Password",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Change Settings",
"subtasks": "Subtasks",
"checklists": "Checklists",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
"clipboard": "Clipboard or drag & drop",
"close": "Close",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "black",
"color-blue": "blue",
"color-green": "green",
@@ -155,9 +171,14 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Computer",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Create Board",
"chooseBoardSourcePopup-title": "Import board",
"createLabelPopup-title": "Create Label",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Date",
"decline": "Decline",
"default-avatar": "Default avatar",
"delete": "Delete",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Delete Label?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "Change start date",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
@@ -221,15 +257,19 @@
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No member",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "Filter is on",
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
"filter-to-selection": "Filter to selection",
"advanced-filter-label": "Advanced Filter",
"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.",
"hide-system-messages": "Hide system messages",
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Link to this card",
"list-archive-cards": "Archive all cards in this list",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Move all cards in this list",
"list-select-cards": "Select all cards in this list",
"listActionPopup-title": "List Actions",
@@ -273,7 +313,7 @@
"listMorePopup-title": "More",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
"lists": "Lists",
"swimlanes": "Swimlanes",
"log-out": "Log Out",
@@ -293,9 +333,9 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "My Boards",
"name": "Name",
"no-archived-cards": "No archived cards.",
"no-archived-lists": "No archived lists.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "No results",
"normal": "Normal",
"normal-desc": "Can view and edit cards. Can't change settings.",
@@ -365,6 +405,7 @@
"title": "Title",
"tracking": "Tracking",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
"unwatch": "Unwatch",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Uploaded an avatar",
"username": "Username",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an archived list",
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
"watch": "Watch",
"watching": "Watching",
"watching-info": "You will be notified of any change in this board",
@@ -429,11 +470,43 @@
"hours": "hours",
"minutes": "minutes",
"seconds": "seconds",
"show-field-on-card": "Show this field on card",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
"verified": "Verified",
"active": "Active"
"active": "Active",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+101 -29
View File
@@ -2,17 +2,19 @@
"accept": "Akcepti",
"act-activity-notify": "[Wekan] Activity Notification",
"act-addAttachment": "attached __attachment__ to __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "added checklist __checklist__ to __card__",
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
"act-addComment": "commented on __card__: __comment__",
"act-createBoard": "Kreiis __board__",
"act-createCard": "Aldonis __card__ al __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "Aldonis __card__ al __board__",
"act-addBoardMember": "Aldonis __member__ al __board__",
"act-archivedBoard": "archived __board__",
"act-archivedCard": "archived __card__",
"act-archivedList": "archived __list__",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "imported __board__",
"act-importCard": "imported __card__",
"act-importList": "imported __list__",
@@ -27,9 +29,10 @@
"activities": "Aktivaĵoj",
"activity": "Aktivaĵo",
"activity-added": "Aldonis %s al %s",
"activity-archived": "archived %s",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "attached %s to %s",
"activity-created": "Kreiis %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluded %s from %s",
"activity-imported": "imported %s into %s from %s",
"activity-imported-board": "imported %s from %s",
@@ -39,6 +42,7 @@
"activity-removed": "removed %s from %s",
"activity-sent": "Sendis %s al %s",
"activity-unjoined": "unjoined %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"add": "Aldoni",
@@ -46,6 +50,7 @@
"add-board": "Add Board",
"add-card": "Add Card",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"add-cover": "Add Cover",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Apliki",
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
"archive": "Arkivi",
"archive-all": "Arkivi ĉion",
"archive-board": "Archive Board",
"archive-card": "Arkivi karton",
"archive-list": "Archive List",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Arkivi elekton",
"archiveBoardPopup-title": "Archive Board?",
"archived-items": "Archived Items",
"archived-boards": "Archived Boards",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "Restore Board",
"no-archived-boards": "No Archived Boards.",
"archives": "Arkivoj",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Board Menu",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Listoj",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
"card-archived": "Karto arkivita",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "This card has %s comment.",
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Due",
"card-due-on": "Due on",
"card-spent": "Spent Time",
"card-edit-attachments": "Edit attachments",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Redakti etikedojn",
"card-edit-members": "Redakti membrojn",
"card-labels-title": "Change the labels for the card.",
@@ -118,12 +126,19 @@
"card-start": "Komenco",
"card-start-on": "Komencas je la",
"cardAttachmentsPopup-title": "Attach From",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "Delete Card?",
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Etikedoj",
"cardMembersPopup-title": "Membroj",
"cardMorePopup-title": "Pli",
"cards": "Kartoj",
"cards-count": "Kartoj",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Ŝanĝi",
"change-avatar": "Change Avatar",
"change-password": "Ŝangi pasvorton",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Ŝangi pasvorton",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Ŝanĝi agordojn",
"subtasks": "Subtasks",
"checklists": "Checklists",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
"clipboard": "Clipboard or drag & drop",
"close": "Fermi",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "nigra",
"color-blue": "blua",
"color-green": "verda",
@@ -155,9 +171,14 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Komputilo",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Krei tavolon",
"chooseBoardSourcePopup-title": "Import board",
"createLabelPopup-title": "Create Label",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Dato",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Dato",
"decline": "Decline",
"default-avatar": "Default avatar",
"delete": "Delete",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Delete Label?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "Redakti komencdaton",
"editCardDueDatePopup-title": "Change due date",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"editLabelPopup-title": "Ŝanĝi etikedon",
"editNotificationPopup-title": "Edit Notification",
@@ -221,15 +257,19 @@
"filter-clear": "Clear filter",
"filter-no-label": "Nenia etikedo",
"filter-no-member": "Nenia membro",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "Filter is on",
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
"filter-to-selection": "Filter to selection",
"advanced-filter-label": "Advanced Filter",
"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.",
"hide-system-messages": "Hide system messages",
"headerBarCreateBoardPopup-title": "Krei tavolon",
"home": "Hejmo",
"import": "Importi",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Ligi al ĉitiu karto",
"list-archive-cards": "Archive all cards in this list",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Movu ĉiujn kartojn en tiu listo.",
"list-select-cards": "Elektu ĉiujn kartojn en tiu listo.",
"listActionPopup-title": "List Actions",
@@ -273,7 +313,7 @@
"listMorePopup-title": "Pli",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
"lists": "Listoj",
"swimlanes": "Swimlanes",
"log-out": "Elsaluti",
@@ -293,9 +333,9 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "My Boards",
"name": "Nomo",
"no-archived-cards": "No archived cards.",
"no-archived-lists": "No archived lists.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "Neniaj rezultoj",
"normal": "Normala",
"normal-desc": "Can view and edit cards. Can't change settings.",
@@ -365,6 +405,7 @@
"title": "Titolo",
"tracking": "Tracking",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
"unwatch": "Unwatch",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Uploaded an avatar",
"username": "Uzantnomo",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an archived list",
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
"watch": "Rigardi",
"watching": "Rigardante",
"watching-info": "You will be notified of any change in this board",
@@ -429,11 +470,42 @@
"hours": "hours",
"minutes": "minutes",
"seconds": "seconds",
"show-field-on-card": "Show this field on card",
"yes": "Yes",
"no": "No",
"accounts": "Accounts",
"accounts-allowEmailChange": "Allow Email Change",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Created at",
"verified": "Verified",
"active": "Active"
"active": "Active",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+114 -42
View File
@@ -2,17 +2,19 @@
"accept": "Aceptar",
"act-activity-notify": "[Wekan] Notificación de Actividad",
"act-addAttachment": "adjunto __attachment__ a __card__",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "lista de ítems __checklist__ agregada a __card__",
"act-addChecklistItem": " __checklistItem__ agregada a lista de ítems __checklist__ en __card__",
"act-addComment": "comentado en __card__: __comment__",
"act-createBoard": "__board__ creado",
"act-createCard": "agregada __card__ a __list__",
"act-createCustomField": "created custom field __customField__",
"act-createList": "agregada __list__ a __board__",
"act-addBoardMember": "agregado __member__ a __board__",
"act-archivedBoard": "__board__ archivado",
"act-archivedCard": "__card__ archivada",
"act-archivedList": "__list__ archivada",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ movido a Papelera de Reciclaje",
"act-archivedCard": "__card__ movido a Papelera de Reciclaje",
"act-archivedList": "__list__ movido a Papelera de Reciclaje",
"act-archivedSwimlane": "__swimlane__ movido a Papelera de Reciclaje",
"act-importBoard": "__board__ importado",
"act-importCard": "__card__ importada",
"act-importList": "__list__ importada",
@@ -27,9 +29,10 @@
"activities": "Actividades",
"activity": "Actividad",
"activity-added": "agregadas %s a %s",
"activity-archived": "archivadas %s",
"activity-archived": "%s movido a Papelera de Reciclaje",
"activity-attached": "adjuntadas %s a %s",
"activity-created": "creadas %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluidas %s de %s",
"activity-imported": "importadas %s en %s de %s",
"activity-imported-board": "importadas %s de %s",
@@ -39,13 +42,15 @@
"activity-removed": "eliminadas %s de %s",
"activity-sent": "enviadas %s a %s",
"activity-unjoined": "separadas %s",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "agregada lista de tareas a %s",
"activity-checklist-item-added": "agregado item de lista de tareas a '%s' en %s",
"add": "Agregar",
"add-attachment": "Agregar Adjunto",
"add-board": "Agregar Tablero",
"add-card": "Agregar Tarjeta",
"add-swimlane": "Add Swimlane",
"add-swimlane": "Agregar Calle",
"add-subtask": "Add Subtask",
"add-checklist": "Agregar Lista de Tareas",
"add-checklist-item": "Agregar ítem a lista de tareas",
"add-cover": "Agregar Portadas",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "Y __count__ otras tarjetas",
"apply": "Aplicar",
"app-is-offline": "Wekan está cargándose, por favor espere. Refrescar la página va a causar pérdida de datos. Si Wekan no se carga, por favor revise que el servidor de Wekan no se haya detenido.",
"archive": "Archivar",
"archive-all": "Archivar Todo",
"archive-board": "Archivar Tablero",
"archive-card": "Archivar Tarjeta",
"archive-list": "Archivar Lista",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Archivar selección",
"archiveBoardPopup-title": "Archivar Tablero?",
"archived-items": "Items Archivados",
"archived-boards": "Tableros Archivados",
"archive": "Mover a Papelera de Reciclaje",
"archive-all": "Mover Todo a la Papelera de Reciclaje",
"archive-board": "Mover Tablero a la Papelera de Reciclaje",
"archive-card": "Mover Tarjeta a la Papelera de Reciclaje",
"archive-list": "Mover Lista a la Papelera de Reciclaje",
"archive-swimlane": "Mover Calle a la Papelera de Reciclaje",
"archive-selection": "Mover selección a la Papelera de Reciclaje",
"archiveBoardPopup-title": "¿Mover Tablero a la Papelera de Reciclaje?",
"archived-items": "Papelera de Reciclaje",
"archived-boards": "Tableros en la Papelera de Reciclaje",
"restore-board": "Restaurar Tablero",
"no-archived-boards": "Tableros no archivados.",
"archives": "Archivos",
"no-archived-boards": "No hay tableros en la Papelera de Reciclaje",
"archives": "Papelera de Reciclaje",
"assign-member": "Asignar miembro",
"attached": "adjunto(s)",
"attachment": "Adjunto",
@@ -97,20 +102,23 @@
"boardChangeWatchPopup-title": "Alternar Seguimiento",
"boardMenuPopup-title": "Menú del Tablero",
"boards": "Tableros",
"board-view": "Board View",
"board-view-swimlanes": "Swimlanes",
"board-view": "Vista de Tablero",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Calles",
"board-view-lists": "Listas",
"bucket-example": "Como \"Lista de Contenedores\" por ejemplo",
"cancel": "Cancelar",
"card-archived": "Esta tarjeta está archivada",
"card-archived": "Esta tarjeta es movida a la Papelera de Reciclaje",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "Esta tarjeta tiene %s comentario.",
"card-delete-notice": "Borrar es permanente. Perderás todas las acciones asociadas con esta tarjeta.",
"card-delete-pop": "Todas las acciones van a ser eliminadas del agregador de actividad y no podrás re-abrir la tarjeta. No hay deshacer.",
"card-delete-suggest-archive": "Tu puedes archivar una tarjeta para removerla del tablero y preservar la actividad.",
"card-delete-suggest-archive": "Tu puedes mover una tarjeta a la Papelera de Reciclaje para removerla del tablero y preservar la actividad.",
"card-due": "Vence",
"card-due-on": "Vence en",
"card-spent": "Tiempo Empleado",
"card-edit-attachments": "Editar adjuntos",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Editar etiquetas",
"card-edit-members": "Editar miembros",
"card-labels-title": "Cambiar las etiquetas de la tarjeta.",
@@ -118,12 +126,19 @@
"card-start": "Empieza",
"card-start-on": "Empieza el",
"cardAttachmentsPopup-title": "Adjuntar De",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "¿Borrar Tarjeta?",
"cardDetailsActionsPopup-title": "Acciones de la Tarjeta",
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Miembros",
"cardMorePopup-title": "Mas",
"cards": "Tarjetas",
"cards-count": "Tarjetas",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Cambiar",
"change-avatar": "Cambiar Avatar",
"change-password": "Cambiar Contraseña",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Cambiar Contraseña",
"changePermissionsPopup-title": "Cambiar Permisos",
"changeSettingsPopup-title": "Cambiar Opciones",
"subtasks": "Subtasks",
"checklists": "Listas de ítems",
"click-to-star": "Clickeá para darle una estrella a este tablero.",
"click-to-unstar": "Clickeá para sacarle la estrella al tablero.",
"clipboard": "Portapapeles o arrastrar y soltar",
"close": "Cerrar",
"close-board": "Cerrar Tablero",
"close-board-pop": "Podrás restaurar el tablero apretando el botón \"Archivos\" del encabezado en inicio.",
"close-board-pop": "Podrás restaurar el tablero apretando el botón \"Papelera de Reciclaje\" del encabezado en inicio.",
"color-black": "negro",
"color-blue": "azul",
"color-green": "verde",
@@ -155,22 +171,41 @@
"comment-placeholder": "Comentar",
"comment-only": "Comentar solamente",
"comment-only-desc": "Puede comentar en tarjetas solamente.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Computadora",
"confirm-checklist-delete-dialog": "¿Estás segur@ que querés borrar la lista de ítems?",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copiar enlace a tarjeta en el portapapeles",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copiar Tarjeta",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
"copyChecklistToManyCardsPopup-title": "Copiar Plantilla Checklist a Muchas Tarjetas",
"copyChecklistToManyCardsPopup-instructions": "Títulos y Descripciones de la Tarjeta Destino en este formato JSON",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Título de primera tarjeta\", \"description\":\"Descripción de primera tarjeta\"}, {\"title\":\"Título de segunda tarjeta\",\"description\":\"Descripción de segunda tarjeta\"},{\"title\":\"Título de última tarjeta\",\"description\":\"Descripción de última tarjeta\"} ]",
"create": "Crear",
"createBoardPopup-title": "Crear Tablero",
"chooseBoardSourcePopup-title": "Importar tablero",
"createLabelPopup-title": "Crear Etiqueta",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "actual",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Fecha",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Fecha",
"decline": "Rechazar",
"default-avatar": "Avatar por defecto",
"delete": "Borrar",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "¿Borrar Etiqueta?",
"description": "Descripción",
"disambiguateMultiLabelPopup-title": "Desambiguación de Acción de Etiqueta",
@@ -185,9 +220,10 @@
"soft-wip-limit": "Límite TEP suave",
"editCardStartDatePopup-title": "Cambiar fecha de inicio",
"editCardDueDatePopup-title": "Cambiar fecha de vencimiento",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Cambiar tiempo empleado",
"editLabelPopup-title": "Cambiar Etiqueta",
"editNotificationPopup-title": "Editar Notificació",
"editNotificationPopup-title": "Editar Notificación",
"editProfilePopup-title": "Editar Perfil",
"email": "Email",
"email-enrollAccount-subject": "Una cuenta creada para vos en __siteName__",
@@ -221,15 +257,19 @@
"filter-clear": "Sacar filtro",
"filter-no-label": "Sin etiqueta",
"filter-no-member": "No es miembro",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "El filtro está activado",
"filter-on-desc": "Estás filtrando cartas en este tablero. Clickeá acá para editar el filtro.",
"filter-to-selection": "Filtrar en la selección",
"advanced-filter-label": "Advanced Filter",
"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": "Nombre Completo",
"header-logo-title": "Retroceder a tu página de tableros.",
"hide-system-messages": "Esconder mensajes del sistema",
"headerBarCreateBoardPopup-title": "Crear Tablero",
"home": "Inicio",
"import": "Importar",
"link": "Link",
"import-board": "importar tablero",
"import-board-c": "Importar tablero",
"import-board-title-trello": "Importar tablero de Trello",
@@ -263,19 +303,19 @@
"leave-board-pop": "¿Estás seguro que querés dejar __boardTitle__? Vas a salir de todas las tarjetas en este tablero.",
"leaveBoardPopup-title": "¿Dejar Tablero?",
"link-card": "Enlace a esta tarjeta",
"list-archive-cards": "Archivar todas las tarjetas en esta lista",
"list-archive-cards-pop": "Esto va a eliminar las tarjetas en esta lista del tablero. Para ver tarjetas archivadas y traerlas de vuelta al tablero, clickeá \"Menú\" > \"Items Archivados\".",
"list-archive-cards": "Mover todas las tarjetas en esta lista a la Papelera de Reciclaje",
"list-archive-cards-pop": "Esto va a remover las tarjetas en esta lista del tablero. Para ver tarjetas en la Papelera de Reciclaje y traerlas de vuelta al tablero, clickeá \"Menú\" > \"Papelera de Reciclaje\".",
"list-move-cards": "Mueve todas las tarjetas en esta lista",
"list-select-cards": "Selecciona todas las tarjetas en esta lista",
"listActionPopup-title": "Listar Acciones",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneActionPopup-title": "Acciones de la Calle",
"listImportCardPopup-title": "Importar una tarjeta Trello",
"listMorePopup-title": "Mas",
"link-list": "Enlace a esta lista",
"list-delete-pop": "Todas las acciones van a ser eliminadas del agregador de actividad y no podás recuperar la lista. No se puede deshacer.",
"list-delete-suggest-archive": "Podés archivar la lista para eliminarla del tablero y preservar la actividad.",
"list-delete-suggest-archive": "Podés mover la lista a la Papelera de Reciclaje para remvoerla del tablero y preservar la actividad.",
"lists": "Listas",
"swimlanes": "Swimlanes",
"swimlanes": "Calles",
"log-out": "Salir",
"log-in": "Entrar",
"loginPopup-title": "Entrar",
@@ -293,9 +333,9 @@
"muted-info": "No serás notificado de ningún cambio en este tablero",
"my-boards": "Mis Tableros",
"name": "Nombre",
"no-archived-cards": "No hay tarjetas archivadas.",
"no-archived-lists": "No hay listas archivadas.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No hay tarjetas en la Papelera de Reciclaje",
"no-archived-lists": "No hay listas en la Papelera de Reciclaje",
"no-archived-swimlanes": "No hay calles en la Papelera de Reciclaje",
"no-results": "No hay resultados",
"normal": "Normal",
"normal-desc": "Puede ver y editar tarjetas. No puede cambiar opciones.",
@@ -331,8 +371,8 @@
"restore": "Restaurar",
"save": "Grabar",
"search": "Buscar",
"search-cards": "Search from card titles and descriptions on this board",
"search-example": "Text to search for?",
"search-cards": "Buscar en títulos y descripciones de tarjeta en este tablero",
"search-example": "¿Texto a buscar?",
"select-color": "Seleccionar Color",
"set-wip-limit-value": "Fijar un límite para el número máximo de tareas en esta lista",
"setWipLimitPopup-title": "Establecer Límite TEP",
@@ -360,11 +400,12 @@
"overtime-hours": "Sobretiempo (horas)",
"overtime": "Sobretiempo",
"has-overtime-cards": "Tiene tarjetas con sobretiempo",
"has-spenttime-cards": "Has spent time cards",
"has-spenttime-cards": "Ha gastado tarjetas de tiempo",
"time": "Hora",
"title": "Título",
"tracking": "Seguimiento",
"tracking-info": "Serás notificado de cualquier cambio a aquellas tarjetas en las que seas creador o miembro.",
"type": "Type",
"unassign-member": "Desasignar miembro",
"unsaved-description": "Tienes una descripción sin guardar.",
"unwatch": "Dejar de seguir",
@@ -373,12 +414,12 @@
"uploaded-avatar": "Cargado un avatar",
"username": "Nombre de usuario",
"view-it": "Verlo",
"warn-list-archived": "cuidado; esta tarjeta está en una lista archivada",
"warn-list-archived": "cuidado; esta tarjeta está en la Papelera de Reciclaje",
"watch": "Seguir",
"watching": "Siguiendo",
"watching-info": "Serás notificado de cualquier cambio en este tablero",
"welcome-board": "Tablero de Bienvenida",
"welcome-swimlane": "Milestone 1",
"welcome-swimlane": "Hito 1",
"welcome-list1": "Básicos",
"welcome-list2": "Avanzado",
"what-to-do": "¿Qué querés hacer?",
@@ -429,11 +470,42 @@
"hours": "horas",
"minutes": "minutos",
"seconds": "segundos",
"show-field-on-card": "Show this field on card",
"yes": "Si",
"no": "No",
"accounts": "Cuentas",
"accounts-allowEmailChange": "Permitir Cambio de Email",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Creado en",
"verified": "Verificado",
"active": "Activo"
"active": "Activo",
"card-received": "Recibido",
"card-received-on": "Recibido en",
"card-end": "Termino",
"card-end-on": "Termina en",
"editCardReceivedDatePopup-title": "Cambiar fecha de recepción",
"editCardEndDatePopup-title": "Cambiar fecha de término",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+132 -60
View File
@@ -2,34 +2,37 @@
"accept": "Aceptar",
"act-activity-notify": "[Wekan] Notificación de actividad",
"act-addAttachment": "ha adjuntado __attachment__ a __card__",
"act-addSubtask": "ha añadido la subtarea __checklist__ a __card__",
"act-addChecklist": "ha añadido la lista de verificación __checklist__ a __card__",
"act-addChecklistItem": "ha añadido __checklistItem__ a la lista de verificación __checklist__ en __card__",
"act-addComment": "ha comentado en __card__: __comment__",
"act-createBoard": "ha creado __board__",
"act-createCard": "ha añadido __card__ a __list__",
"act-createCustomField": "creado el campo personalizado __customField__",
"act-createList": "ha añadido __list__ a __board__",
"act-addBoardMember": "ha añadido a __member__ a __board__",
"act-archivedBoard": "ha archivado __board__",
"act-archivedCard": "ha archivado __card__",
"act-archivedList": "ha archivado __list__",
"act-archivedSwimlane": "ha archivado __swimlane__",
"act-archivedBoard": "__board__ se ha enviado a la papelera de reciclaje",
"act-archivedCard": "__card__ se ha enviado a la papelera de reciclaje",
"act-archivedList": "__list__ se ha enviado a la papelera de reciclaje",
"act-archivedSwimlane": "__swimlane__ se ha enviado a la papelera de reciclaje",
"act-importBoard": "ha importado __board__",
"act-importCard": "ha importado __card__",
"act-importList": "ha importado __list__",
"act-joinMember": "ha añadido a __member__ a __card__",
"act-moveCard": "ha movido __card__ desde __oldList__ a __list__",
"act-removeBoardMember": "ha desvinculado a __member__ de __board__",
"act-removeBoardMember": "ha eliminado a __member__ de __board__",
"act-restoredCard": "ha restaurado __card__ en __board__",
"act-unjoinMember": "ha desvinculado a __member__ de __card__",
"act-unjoinMember": "ha eliminado a __member__ de __card__",
"act-withBoardTitle": "[Wekan] __board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Acciones",
"activities": "Actividades",
"activity": "Actividad",
"activity-added": "ha añadido %s a %s",
"activity-archived": "ha archivado %s",
"activity-archived": "%s se ha enviado a la papelera de reciclaje",
"activity-attached": "ha adjuntado %s a %s",
"activity-created": "ha creado %s",
"activity-customfield-created": "creado el campo personalizado %s",
"activity-excluded": "ha excluido %s de %s",
"activity-imported": "ha importado %s a %s desde %s",
"activity-imported-board": "ha importado %s desde %s",
@@ -39,6 +42,7 @@
"activity-removed": "ha eliminado %s de %s",
"activity-sent": "ha enviado %s a %s",
"activity-unjoined": "se ha desvinculado de %s",
"activity-subtask-added": "ha añadido la subtarea a %s",
"activity-checklist-added": "ha añadido una lista de verificación a %s",
"activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s",
"add": "Añadir",
@@ -46,6 +50,7 @@
"add-board": "Añadir tablero",
"add-card": "Añadir una tarjeta",
"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",
"add-cover": "Añadir portada",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "y otras __count__ tarjetas",
"apply": "Aplicar",
"app-is-offline": "Wekan se está cargando, por favor espere. Actualizar la página provocará la pérdida de datos. Si Wekan no se carga, por favor verifique que el servidor de Wekan no está detenido.",
"archive": "Archivar",
"archive-all": "Archivar todo",
"archive-board": "Archivar el tablero",
"archive-card": "Archivar la tarjeta",
"archive-list": "Archivar la lista",
"archive-swimlane": "Archivar el carril de flujo",
"archive-selection": "Archivar la selección",
"archiveBoardPopup-title": "¿Archivar el tablero?",
"archived-items": "Elementos archivados",
"archived-boards": "Tableros archivados",
"archive": "Enviar a la papelera de reciclaje",
"archive-all": "Enviar todo a la papelera de reciclaje",
"archive-board": "Enviar el tablero a la papelera de reciclaje",
"archive-card": "Enviar la tarjeta a la papelera de reciclaje",
"archive-list": "Enviar la lista a la papelera de reciclaje",
"archive-swimlane": "Enviar el carril de flujo a la papelera de reciclaje",
"archive-selection": "Enviar la selección a la papelera de reciclaje",
"archiveBoardPopup-title": "Enviar el tablero a la papelera de reciclaje",
"archived-items": "Papelera de reciclaje",
"archived-boards": "Tableros en la papelera de reciclaje",
"restore-board": "Restaurar el tablero",
"no-archived-boards": "No hay tableros archivados.",
"archives": "Archivos",
"no-archived-boards": "No hay tableros en la papelera de reciclaje",
"archives": "Papelera de reciclaje",
"assign-member": "Asignar miembros",
"attached": "adjuntado",
"attachment": "Adjunto",
@@ -97,33 +102,43 @@
"boardChangeWatchPopup-title": "Cambiar vigilancia",
"boardMenuPopup-title": "Menú del tablero",
"boards": "Tableros",
"board-view": "Vista de tablero",
"board-view-swimlanes": "Carriles de flujo",
"board-view": "Vista del tablero",
"board-view-cal": "Calendario",
"board-view-swimlanes": "Carriles",
"board-view-lists": "Listas",
"bucket-example": "Como “Cosas por hacer” por ejemplo",
"cancel": "Cancelar",
"card-archived": "Esta tarjeta está ahora archivada.",
"card-archived": "Esta tarjeta se ha enviado a la papelera de reciclaje.",
"board-archived": "Este tablero se ha enviado a la papelera de reciclaje.",
"card-comments-title": "Esta tarjeta tiene %s comentarios.",
"card-delete-notice": "la eliminación es permanente. Perderás todas las acciones asociadas a esta tarjeta.",
"card-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la tarjeta. Esta acción no puede deshacerse.",
"card-delete-suggest-archive": "Puede archivar una tarjeta para eliminarla del tablero y conservar la actividad.",
"card-due": "Finalizar",
"card-delete-suggest-archive": "Puedes enviar una tarjeta a la papelera de reciclaje para eliminarla del tablero y conservar la actividad.",
"card-due": "Vence",
"card-due-on": "Vence el",
"card-spent": "Tiempo consumido",
"card-edit-attachments": "Editar los adjuntos",
"card-edit-custom-fields": "Editar los campos personalizados",
"card-edit-labels": "Editar las etiquetas",
"card-edit-members": "Editar los miembros",
"card-labels-title": "Cambia las etiquetas de la tarjeta",
"card-members-title": "Añadir o eliminar miembros del tablero desde la tarjeta.",
"card-start": "Empezar",
"card-start-on": "Empieza el",
"card-start": "Comienza",
"card-start-on": "Comienza el",
"cardAttachmentsPopup-title": "Adjuntar desde",
"cardCustomField-datePopup-title": "Cambiar la fecha",
"cardCustomFieldsPopup-title": "Editar los campos personalizados",
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Miembros",
"cardMorePopup-title": "Más",
"cards": "Tarjetas",
"cards-count": "Tarjetas",
"casSignIn": "Iniciar sesión con CAS",
"cardType-card": "Tarjeta",
"cardType-linkedCard": "Tarjeta enlazada",
"cardType-linkedBoard": "Tablero enlazado",
"change": "Cambiar",
"change-avatar": "Cambiar el avatar",
"change-password": "Cambiar la contraseña",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Cambiar la contraseña",
"changePermissionsPopup-title": "Cambiar los permisos",
"changeSettingsPopup-title": "Cambiar las preferencias",
"subtasks": "Subtareas",
"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.",
"clipboard": "el portapapeles o con arrastrar y soltar",
"close": "Cerrar",
"close-board": "Cerrar el tablero",
"close-board-pop": "Podrá restaurar el tablero haciendo clic en el botón 'Archivos' en el encabezado al inicio.",
"close-board-pop": "Podrás restaurar el tablero haciendo clic en el botón \"Papelera de reciclaje\" en la cabecera.",
"color-black": "negra",
"color-blue": "azul",
"color-green": "verde",
@@ -154,37 +170,57 @@
"comment": "Comentar",
"comment-placeholder": "Escribir comentario",
"comment-only": "Sólo comentarios",
"comment-only-desc": "Solo se puede comentar en las tarjetas.",
"comment-only-desc": "Solo puedes comentar en las tarjetas.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "el ordenador",
"confirm-checklist-delete-dialog": "¿Seguro que desea eliminar la lista de verificación?",
"confirm-subtask-delete-dialog": "¿Seguro que quieres eliminar la subtarea?",
"confirm-checklist-delete-dialog": "¿Seguro que quieres eliminar la lista de verificación?",
"copy-card-link-to-clipboard": "Copiar el enlace de la tarjeta al portapapeles",
"linkCardPopup-title": "Enlazar tarjeta",
"searchCardPopup-title": "Buscar tarjeta",
"copyCardPopup-title": "Copiar la tarjeta",
"copyChecklistToManyCardsPopup-title": "Copiar la plantilla de la lista de verificación en varias tarjetas.",
"copyChecklistToManyCardsPopup-title": "Copiar la plantilla de la lista de verificación en varias tarjetas",
"copyChecklistToManyCardsPopup-instructions": "Títulos y descripciones de las tarjetas de destino en formato JSON",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Título de la primera tarjeta\", \"description\":\"Descripción de la primera tarjeta\"}, {\"title\":\"Título de la segunda tarjeta\",\"description\":\"Descripción de la segunda tarjeta\"},{\"title\":\"Título de la última tarjeta\",\"description\":\"Descripción de la última tarjeta\"} ]",
"create": "Crear",
"createBoardPopup-title": "Crear tablero",
"chooseBoardSourcePopup-title": "Importar un tablero",
"createLabelPopup-title": "Crear etiqueta",
"createCustomField": "Crear un campo",
"createCustomFieldPopup-title": "Crear un campo",
"current": "actual",
"custom-field-delete-pop": "Se eliminará este campo personalizado de todas las tarjetas y se destruirá su historial. Esta acción no puede deshacerse.",
"custom-field-checkbox": "Casilla de verificación",
"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-placeholder": "Pulsa Intro para añadir más opciones",
"custom-field-dropdown-unknown": "(desconocido)",
"custom-field-number": "Número",
"custom-field-text": "Texto",
"custom-fields": "Campos personalizados",
"date": "Fecha",
"decline": "Declinar",
"default-avatar": "Avatar por defecto",
"delete": "Eliminar",
"deleteCustomFieldPopup-title": "¿Borrar el campo personalizado?",
"deleteLabelPopup-title": "¿Eliminar la etiqueta?",
"description": "Descripción",
"disambiguateMultiLabelPopup-title": "Desambiguar la acción de etiqueta",
"disambiguateMultiMemberPopup-title": "Desambiguar la acción de miembro",
"discard": "Descartar",
"discard": "Descartarla",
"done": "Hecho",
"download": "Descargar",
"edit": "Editar",
"edit-avatar": "Cambiar el avatar",
"edit-profile": "Editar el perfil",
"edit-wip-limit": "Cambiar el límite del TEP",
"soft-wip-limit": "Límite del TEP flexible",
"editCardStartDatePopup-title": "Cambiar la fecha de inicio",
"edit-wip-limit": "Cambiar el límite del trabajo en proceso",
"soft-wip-limit": "Límite del trabajo en proceso flexible",
"editCardStartDatePopup-title": "Cambiar la fecha de comienzo",
"editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
"editCustomFieldPopup-title": "Editar el campo",
"editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
"editLabelPopup-title": "Cambiar la etiqueta",
"editNotificationPopup-title": "Editar las notificaciones",
@@ -203,7 +239,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-wip-limit": "Activar el límite del TEP",
"enable-wip-limit": "Activar 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",
"error-board-notAMember": "Es necesario ser miembro de este tablero para hacer eso",
@@ -216,20 +252,24 @@
"error-username-taken": "Este nombre de usuario ya está en uso",
"error-email-taken": "Esta dirección de correo ya está en uso",
"export-board": "Exportar el tablero",
"filter": "Filtro",
"filter": "Filtrar",
"filter-cards": "Filtrar tarjetas",
"filter-clear": "Limpiar filtro",
"filter-clear": "Limpiar el filtro",
"filter-no-label": "Sin etiqueta",
"filter-no-member": "Sin miembro",
"filter-on": "Filtro activado",
"filter-no-custom-fields": "Sin campos personalizados",
"filter-on": "Filtrado activado",
"filter-on-desc": "Estás filtrando tarjetas en este tablero. Haz clic aquí para editar el filtro.",
"filter-to-selection": "Filtrar la selección",
"advanced-filter-label": "Filtrado avanzado",
"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",
"hide-system-messages": "Ocultar las notificaciones de actividad",
"headerBarCreateBoardPopup-title": "Crear tablero",
"home": "Inicio",
"import": "Importar",
"link": "Enlace",
"import-board": "importar un tablero",
"import-board-c": "Importar un tablero",
"import-board-title-trello": "Importar un tablero desde Trello",
@@ -238,7 +278,7 @@
"from-trello": "Desde Trello",
"from-wekan": "Desde Wekan",
"import-board-instruction-trello": "En tu tablero de Trello, ve a 'Menú', luego 'Más' > 'Imprimir y exportar' > 'Exportar JSON', y copia el texto resultante.",
"import-board-instruction-wekan": "En tu tablero Wekan, ve a 'Menú', luego 'Exportar el tablero', y copia el texto del fichero descargado.",
"import-board-instruction-wekan": "En tu tablero de Wekan, ve a 'Menú del tablero', luego 'Exportar el tablero', y copia aquí el texto del fichero descargado.",
"import-json-placeholder": "Pega tus datos JSON válidos aquí",
"import-map-members": "Mapa de miembros",
"import-members-map": "El tablero importado tiene algunos miembros. Por favor mapea los miembros que deseas importar a los usuarios de Wekan",
@@ -255,31 +295,31 @@
"keyboard-shortcuts": "Atajos de teclado",
"label-create": "Crear una etiqueta",
"label-default": "etiqueta %s (por defecto)",
"label-delete-pop": "Esto eliminará esta etiqueta de todas las tarjetas y destruirá su historial. Esta acción no puede deshacerse.",
"label-delete-pop": "Se eliminará esta etiqueta de todas las tarjetas y se destruirá su historial. Esta acción no puede deshacerse.",
"labels": "Etiquetas",
"language": "Cambiar el idioma",
"last-admin-desc": "No puedes cambiar roles porque debe haber al menos un administrador.",
"leave-board": "Abandonar el tablero",
"leave-board-pop": "¿Seguro que quieres abandonar __boardTitle__? Serás desvinculado de todas las tarjetas en este tablero.",
"leaveBoardPopup-title": "¿Abandonar el tablero?",
"link-card": "Enlace a esta tarjeta",
"list-archive-cards": "Archivar todas las tarjetas de esta lista",
"list-archive-cards-pop": "Esto eliminara todas las tarjetas de esta lista del tablero. Para ver las tarjetas archivadas y recuperarlas en el tablero, haz clic en 'Menú' > 'Elementos archivados'.",
"link-card": "Enlazar a esta tarjeta",
"list-archive-cards": "Enviar todas las tarjetas de esta lista a la papelera de reciclaje",
"list-archive-cards-pop": "Esto eliminará todas las tarjetas de esta lista del tablero. Para ver las tarjetas en la papelera de reciclaje y devolverlas al tablero, haga clic en \"Menú\" > \"Papelera de reciclaje\".",
"list-move-cards": "Mover todas las tarjetas de esta lista",
"list-select-cards": "Seleccionar todas las tarjetas de esta lista",
"listActionPopup-title": "Acciones de la lista",
"swimlaneActionPopup-title": "Acciones del carril de flujo",
"listImportCardPopup-title": "Importar una tarjeta de Trello",
"listMorePopup-title": "Más",
"link-list": "Enlace a esta lista",
"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-suggest-archive": "Puede archivar una lista para quitarla del tablero y preservar así sus actividades.",
"list-delete-suggest-archive": "Puedes enviar una lista a la papelera de reciclaje para eliminarla del tablero y conservar la actividad.",
"lists": "Listas",
"swimlanes": "Carriles de flujo",
"swimlanes": "Carriles",
"log-out": "Finalizar la sesión",
"log-in": "Iniciar sesión",
"loginPopup-title": "Iniciar sesión",
"memberMenuPopup-title": "Mis preferencias",
"memberMenuPopup-title": "Preferencias de miembro",
"members": "Miembros",
"menu": "Menú",
"move-selection": "Mover la selección",
@@ -293,9 +333,9 @@
"muted-info": "No serás notificado de ningún cambio en este tablero",
"my-boards": "Mis tableros",
"name": "Nombre",
"no-archived-cards": "No hay tarjetas archivadas.",
"no-archived-lists": "No hay listas archivadas.",
"no-archived-swimlanes": "No hay carriles de flujo archivados.",
"no-archived-cards": "No hay tarjetas en la papelera de reciclaje",
"no-archived-lists": "No hay listas en la papelera de reciclaje",
"no-archived-swimlanes": "No hay carriles de flujo en la papelera de reciclaje",
"no-results": "Sin resultados",
"normal": "Normal",
"normal-desc": "Puedes ver y editar tarjetas. No puedes cambiar la configuración.",
@@ -329,13 +369,13 @@
"rename": "Renombrar",
"rename-board": "Renombrar el tablero",
"restore": "Restaurar",
"save": "Guardar",
"save": "Añadir",
"search": "Buscar",
"search-cards": "Buscar entre los títulos y las descripciones de las tarjetas en este tablero.",
"search-example": "¿Texto a buscar?",
"select-color": "Selecciona un color",
"set-wip-limit-value": "Fija un límite para el número máximo de tareas en esta lista.",
"setWipLimitPopup-title": "Fijar el límite del TEP",
"setWipLimitPopup-title": "Fijar el límite del trabajo en proceso",
"shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual",
"shortcut-autocomplete-emoji": "Autocompletar emoji",
"shortcut-autocomplete-members": "Autocompletar miembros",
@@ -363,17 +403,18 @@
"has-spenttime-cards": "Se ha excedido el tiempo de las tarjetas",
"time": "Hora",
"title": "Título",
"tracking": "Seguimiento",
"tracking": "Siguiendo",
"tracking-info": "Serás notificado de cualquier cambio en las tarjetas en las que participas como creador o miembro.",
"type": "Tipo",
"unassign-member": "Desvincular al miembro",
"unsaved-description": "Tienes una descripción sin guardar.",
"unsaved-description": "Tienes una descripción por añadir.",
"unwatch": "Dejar de vigilar",
"upload": "Cargar",
"upload-avatar": "Cargar un avatar",
"uploaded-avatar": "Avatar cargado",
"username": "Nombre de usuario",
"view-it": "Verlo",
"warn-list-archived": "advertencia: esta tarjeta está en una lista archivada",
"view-it": "Verla",
"warn-list-archived": "advertencia: esta tarjeta está en una lista en la papelera de reciclaje",
"watch": "Vigilar",
"watching": "Vigilando",
"watching-info": "Serás notificado de cualquier cambio en este tablero",
@@ -382,9 +423,9 @@
"welcome-list1": "Básicos",
"welcome-list2": "Avanzados",
"what-to-do": "¿Qué deseas hacer?",
"wipLimitErrorPopup-title": "Límite del TEP no válido",
"wipLimitErrorPopup-dialog-pt1": "El número de tareas en esta lista es mayor que el límite del TEP que has definido.",
"wipLimitErrorPopup-dialog-pt2": "Por favor, mueve algunas tareas fuera de esta lista, o fija un límite del TEP más alto.",
"wipLimitErrorPopup-title": "El límite del trabajo en proceso no es válido.",
"wipLimitErrorPopup-dialog-pt1": "El número de tareas en esta lista es mayor que el límite del trabajo en proceso que has definido.",
"wipLimitErrorPopup-dialog-pt2": "Por favor, mueve algunas tareas fuera de esta lista, o fija un límite del trabajo en proceso más alto.",
"admin-panel": "Panel del administrador",
"settings": "Ajustes",
"people": "Personas",
@@ -429,11 +470,42 @@
"hours": "horas",
"minutes": "minutos",
"seconds": "segundos",
"show-field-on-card": "Mostrar este campo en la tarjeta",
"yes": "Sí",
"no": "No",
"accounts": "Cuentas",
"accounts-allowEmailChange": "Permitir cambiar el correo electrónico",
"accounts-allowUserNameChange": "Permitir el cambio del nombre de usuario",
"createdAt": "Creado en",
"verified": "Verificado",
"active": "Activo"
"active": "Activo",
"card-received": "Recibido",
"card-received-on": "Recibido el",
"card-end": "Finalizado",
"card-end-on": "Finalizado el",
"editCardReceivedDatePopup-title": "Cambiar la fecha de recepción",
"editCardEndDatePopup-title": "Cambiar la fecha de finalización",
"assigned-by": "Asignado por",
"requested-by": "Solicitado por",
"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": "¿Borrar el tablero?",
"delete-board": "Borrar el tablero",
"default-subtasks-board": "Subtareas para el tablero __board__",
"default": "Por defecto",
"queue": "Cola",
"subtask-settings": "Subtareas del tablero",
"boardSubtaskSettingsPopup-title": "Configuración de las subtareas del tablero",
"show-subtasks-field": "Las tarjetas pueden tener subtareas",
"deposit-subtasks-board": "Depositar subtareas en este tablero:",
"deposit-subtasks-list": "Lista de destino para subtareas depositadas aquí:",
"show-parent-in-minicard": "Mostrar el padre en una minitarjeta:",
"prefix-with-full-path": "Prefijo con ruta completa",
"prefix-with-parent": "Prefijo con el padre",
"subtext-with-full-path": "Subtexto con ruta completa",
"subtext-with-parent": "Subtexto con el padre",
"change-card-parent": "Cambiar la tarjeta padre",
"parent-card": "Tarjeta padre",
"source-board": "Tablero de origen",
"no-parent": "No mostrar la tarjeta padre"
}
+101 -29
View File
@@ -2,17 +2,19 @@
"accept": "Onartu",
"act-activity-notify": "[Wekan] Jarduera-jakinarazpena",
"act-addAttachment": "__attachment__ __card__ txartelera erantsita",
"act-addSubtask": "added subtask __checklist__ to __card__",
"act-addChecklist": "gehituta checklist __checklist__ __card__ -ri",
"act-addChecklistItem": "gehituta __checklistItem__ checklist __checklist__ on __card__ -ri",
"act-addComment": "__card__ txartelean iruzkina: __comment__",
"act-createBoard": "__board__ sortuta",
"act-createCard": "__card__ __list__ zerrrendara gehituta",
"act-createCustomField": "created custom field __customField__",
"act-createList": "__list__ __board__ arbelera gehituta",
"act-addBoardMember": "__member__ __board__ arbelera gehituta",
"act-archivedBoard": "__board__ artxibatuta",
"act-archivedCard": "__card__ artxibatuta",
"act-archivedList": "__list__ artxibatuta",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ moved to Recycle Bin",
"act-archivedCard": "__card__ moved to Recycle Bin",
"act-archivedList": "__list__ moved to Recycle Bin",
"act-archivedSwimlane": "__swimlane__ moved to Recycle Bin",
"act-importBoard": "__board__ inportatuta",
"act-importCard": "__card__ inportatuta",
"act-importList": "__list__ inportatuta",
@@ -27,9 +29,10 @@
"activities": "Jarduerak",
"activity": "Jarduera",
"activity-added": "%s %s(e)ra gehituta",
"activity-archived": "%s artxibatu du",
"activity-archived": "%s moved to Recycle Bin",
"activity-attached": "%s %s(e)ra erantsita",
"activity-created": "%s sortuta",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "%s %s(e)tik kanpo utzita",
"activity-imported": "%s inportatuta %s(e)ra %s(e)tik",
"activity-imported-board": "%s inportatuta %s(e)tik",
@@ -39,6 +42,7 @@
"activity-removed": "%s %s(e)tik kenduta",
"activity-sent": "%s %s(e)ri bidalita",
"activity-unjoined": "%s utzita",
"activity-subtask-added": "added subtask to %s",
"activity-checklist-added": "egiaztaketa zerrenda %s(e)ra gehituta",
"activity-checklist-item-added": "egiaztaketa zerrendako elementuak '%s'(e)ra gehituta %s(e)n",
"add": "Gehitu",
@@ -46,6 +50,7 @@
"add-board": "Gehitu arbela",
"add-card": "Gehitu txartela",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Gehitu egiaztaketa zerrenda",
"add-checklist-item": "Gehitu elementu bat egiaztaketa zerrendara",
"add-cover": "Gehitu azala",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "Eta beste __count__ txartel",
"apply": "Aplikatu",
"app-is-offline": "Wekan kargatzen ari da, itxaron mesedez. Orria freskatzeak datuen galera ekarriko luke. Wekan kargatzen ez bada, egiaztatu Wekan zerbitzaria gelditu ez dela.",
"archive": "Artxibatu",
"archive-all": "Artxibatu guztiak",
"archive-board": "Artxibatu arbela",
"archive-card": "Artxibatu txartela",
"archive-list": "Artxibatu zerrenda",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "Artxibatu hautaketa",
"archiveBoardPopup-title": "Artxibatu arbela?",
"archived-items": "Artxibatutako elementuak",
"archived-boards": "Artxibatu arbelak",
"archive": "Move to Recycle Bin",
"archive-all": "Move All to Recycle Bin",
"archive-board": "Move Board to Recycle Bin",
"archive-card": "Move Card to Recycle Bin",
"archive-list": "Move List to Recycle Bin",
"archive-swimlane": "Move Swimlane to Recycle Bin",
"archive-selection": "Move selection to Recycle Bin",
"archiveBoardPopup-title": "Move Board to Recycle Bin?",
"archived-items": "Recycle Bin",
"archived-boards": "Boards in Recycle Bin",
"restore-board": "Berreskuratu arbela",
"no-archived-boards": "Ez dago artxibatutako arbelik",
"archives": "Artxiboak",
"no-archived-boards": "No Boards in Recycle Bin.",
"archives": "Recycle Bin",
"assign-member": "Esleitu kidea",
"attached": "erantsita",
"attachment": "Eranskina",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Arbelaren menua",
"boards": "Arbelak",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Zerrendak",
"bucket-example": "Esaterako \"Pertz zerrenda\"",
"cancel": "Utzi",
"card-archived": "Txartel hau artxibatuta dago.",
"card-archived": "This card is moved to Recycle Bin.",
"board-archived": "This board is moved to Recycle Bin.",
"card-comments-title": "Txartel honek iruzkin %s dauka.",
"card-delete-notice": "Ezabaketa behin betiko da. Txartel honi lotutako ekintza guztiak galduko dituzu.",
"card-delete-pop": "Ekintza guztiak ekintza jariotik kenduko dira eta ezin izango duzu txartela berrireki. Ez dago desegiterik.",
"card-delete-suggest-archive": "Txartel bat artxibatu dezakezu arbeletik kendu nahi baduzu bere jarduera gordez.",
"card-delete-suggest-archive": "You can move a card to Recycle Bin to remove it from the board and preserve the activity.",
"card-due": "Epemuga",
"card-due-on": "Epemuga",
"card-spent": "Erabilitako denbora",
"card-edit-attachments": "Editatu eranskinak",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-labels": "Editatu etiketak",
"card-edit-members": "Editatu kideak",
"card-labels-title": "Aldatu txartelaren etiketak",
@@ -118,12 +126,19 @@
"card-start": "Hasiera",
"card-start-on": "Hasiera",
"cardAttachmentsPopup-title": "Erantsi hemendik",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "Ezabatu txartela?",
"cardDetailsActionsPopup-title": "Txartel-ekintzak",
"cardLabelsPopup-title": "Etiketak",
"cardMembersPopup-title": "Kideak",
"cardMorePopup-title": "Gehiago",
"cards": "Txartelak",
"cards-count": "Txartelak",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"change": "Aldatu",
"change-avatar": "Aldatu avatarra",
"change-password": "Aldatu pasahitza",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Aldatu pasahitza",
"changePermissionsPopup-title": "Aldatu baimenak",
"changeSettingsPopup-title": "Aldatu ezarpenak",
"subtasks": "Subtasks",
"checklists": "Egiaztaketa zerrenda",
"click-to-star": "Egin klik arbel honi izarra jartzeko",
"click-to-unstar": "Egin klik arbel honi izarra kentzeko",
"clipboard": "Kopiatu eta itsatsi edo arrastatu eta jaregin",
"close": "Itxi",
"close-board": "Itxi arbela",
"close-board-pop": "Arbela berrezarri ahal izango duzu hasiera orriko goiburuko \"Artxiboak\" botoia sakatuz",
"close-board-pop": "You will be able to restore the board by clicking the “Recycle Bin” button from the home header.",
"color-black": "beltza",
"color-blue": "urdina",
"color-green": "berdea",
@@ -155,9 +171,14 @@
"comment-placeholder": "Idatzi iruzkin bat",
"comment-only": "Iruzkinak besterik ez",
"comment-only-desc": "Iruzkinak txarteletan soilik egin ditzake",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Ordenagailua",
"confirm-checklist-delete-dialog": "Ziur zaude kontrol-zerrenda ezabatu nahi duzula",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Kopiatu txartela arbelera",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Kopiatu txartela",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Sortu arbela",
"chooseBoardSourcePopup-title": "Inportatu arbela",
"createLabelPopup-title": "Sortu etiketa",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"current": "unekoa",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-date": "Data",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"date": "Data",
"decline": "Ukatu",
"default-avatar": "Lehenetsitako avatarra",
"delete": "Ezabatu",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteLabelPopup-title": "Ezabatu etiketa?",
"description": "Deskripzioa",
"disambiguateMultiLabelPopup-title": "Argitu etiketaren ekintza",
@@ -185,6 +220,7 @@
"soft-wip-limit": "WIP muga malgua",
"editCardStartDatePopup-title": "Aldatu hasiera data",
"editCardDueDatePopup-title": "Aldatu epemuga data",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Aldatu erabilitako denbora",
"editLabelPopup-title": "Aldatu etiketa",
"editNotificationPopup-title": "Editatu jakinarazpena",
@@ -221,15 +257,19 @@
"filter-clear": "Garbitu iragazkia",
"filter-no-label": "Etiketarik ez",
"filter-no-member": "Kiderik ez",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "Iragazkia gaituta dago",
"filter-on-desc": "Arbel honetako txartela iragazten ari zara. Egin klik hemen iragazkia editatzeko.",
"filter-to-selection": "Iragazketa aukerara",
"advanced-filter-label": "Advanced Filter",
"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": "Izen abizenak",
"header-logo-title": "Itzuli zure arbelen orrira.",
"hide-system-messages": "Ezkutatu sistemako mezuak",
"headerBarCreateBoardPopup-title": "Sortu arbela",
"home": "Hasiera",
"import": "Inportatu",
"link": "Link",
"import-board": "inportatu arbela",
"import-board-c": "Inportatu arbela",
"import-board-title-trello": "Inportatu arbela Trellotik",
@@ -263,8 +303,8 @@
"leave-board-pop": "Ziur zaude __boardTitle__ utzi nahi duzula? Arbel honetako txartel guztietatik ezabatua izango zara.",
"leaveBoardPopup-title": "Arbela utzi?",
"link-card": "Lotura txartel honetara",
"list-archive-cards": "Artxibatu zerrendako txartel guztiak",
"list-archive-cards-pop": "Honek zerrenda honetako txartel guztiak arbeletik ezabatuko ditu. Artxibatutako txartelak ikusteko eta arbelera berreskuratzeko, zoaz \"Menua > Artxibatutako elementuak\" atalera.",
"list-archive-cards": "Move all cards in this list to Recycle Bin",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "Lekuz aldatu zerrendako txartel guztiak",
"list-select-cards": "Aukeratu zerrenda honetako txartel guztiak",
"listActionPopup-title": "Zerrendaren ekintzak",
@@ -273,7 +313,7 @@
"listMorePopup-title": "Gehiago",
"link-list": "Lotura zerrenda honetara",
"list-delete-pop": "Ekintza guztiak ekintza jariotik kenduko dira eta ezin izango duzu zerrenda berreskuratu. Ez dago desegiterik.",
"list-delete-suggest-archive": "Zerrenda bat artxibatu dezakezu arbeletik kendu nahi baduzu bere jarduera gordez.",
"list-delete-suggest-archive": "You can move a list to Recycle Bin to remove it from the board and preserve the activity.",
"lists": "Zerrendak",
"swimlanes": "Swimlanes",
"log-out": "Itxi saioa",
@@ -293,9 +333,9 @@
"muted-info": "Ez zaizkizu jakinaraziko arbel honi egindako aldaketak",
"my-boards": "Nire arbelak",
"name": "Izena",
"no-archived-cards": "Artxibatutako txartelik ez.",
"no-archived-lists": "Artxibatutako zerrendarik ez.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "No cards in Recycle Bin.",
"no-archived-lists": "No lists in Recycle Bin.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "Emaitzarik ez",
"normal": "Arrunta",
"normal-desc": "Txartelak ikusi eta editatu ditzake. Ezin ditu ezarpenak aldatu.",
@@ -365,6 +405,7 @@
"title": "Izenburua",
"tracking": "Jarraitzen",
"tracking-info": "Sortzaile edo kide gisa parte-hartzen duzun txartelei egindako aldaketak jakinaraziko zaizkizu.",
"type": "Type",
"unassign-member": "Kendu kidea",
"unsaved-description": "Gorde gabeko deskripzio bat duzu",
"unwatch": "Utzi ikuskatzeari",
@@ -373,7 +414,7 @@
"uploaded-avatar": "Avatar bat igo da",
"username": "Erabiltzaile-izena",
"view-it": "Ikusi",
"warn-list-archived": "abisua: txartel hau artxibatutako zerrenda batean dago",
"warn-list-archived": "warning: this card is in an list at Recycle Bin",
"watch": "Ikuskatu",
"watching": "Ikuskatzen",
"watching-info": "Arbel honi egindako aldaketak jakinaraziko zaizkizu",
@@ -429,11 +470,42 @@
"hours": "ordu",
"minutes": "minutu",
"seconds": "segundo",
"show-field-on-card": "Show this field on card",
"yes": "Bai",
"no": "Ez",
"accounts": "Kontuak",
"accounts-allowEmailChange": "Baimendu e-mail aldaketa",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Noiz sortua",
"verified": "Egiaztatuta",
"active": "Gaituta"
"active": "Gaituta",
"card-received": "Received",
"card-received-on": "Received on",
"card-end": "End",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
"assigned-by": "Assigned By",
"requested-by": "Requested By",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?",
"delete-board": "Delete Board",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "Default",
"queue": "Queue",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+105 -33
View File
@@ -2,17 +2,19 @@
"accept": "پذیرش",
"act-activity-notify": "[wekan] اطلاع فعالیت",
"act-addAttachment": "پیوست __attachment__ به __card__",
"act-addSubtask": "زیر وظیفه __checklist__ به __card__ اضافه شد",
"act-addChecklist": "سیاهه __checklist__ به __card__ افزوده شد",
"act-addChecklistItem": "__checklistItem__ به سیاهه __checklist__ در __card__ افزوده شد",
"act-addComment": "درج نظر برای __card__: __comment__",
"act-createBoard": "__board__ ایجاد شد",
"act-createCard": "__card__ به __list__ اضافه شد",
"act-createCustomField": "فیلد __customField__ ایجاد شد",
"act-createList": "__list__ به __board__ اضافه شد",
"act-addBoardMember": "__member__ به __board__ اضافه شد",
"act-archivedBoard": "__board__ بایگانی شد",
"act-archivedCard": "__card__ بایگانی شد",
"act-archivedList": "__list__ بایگانی شد",
"act-archivedSwimlane": "archived __swimlane__",
"act-archivedBoard": "__board__ به بازیافتی ریخته شد",
"act-archivedCard": "__card__ به بازیافتی منتقل شد",
"act-archivedList": "__list__ به بازیافتی منتقل شد",
"act-archivedSwimlane": "__swimlane__ به بازیافتی منتقل شد",
"act-importBoard": "__board__ وارد شده",
"act-importCard": "__card__ وارد شده",
"act-importList": "__list__ وارد شده",
@@ -24,12 +26,13 @@
"act-withBoardTitle": "[Wekan] __board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "اعمال",
"activities": "فعالیت ها",
"activities": "فعالیت‌ها",
"activity": "فعالیت",
"activity-added": "%s به %s اضافه شد",
"activity-archived": "%s بایگانی شد",
"activity-archived": "%s به بازیافتی منتقل شد",
"activity-attached": "%s به %s پیوست شد",
"activity-created": "%s ایجاد شد",
"activity-customfield-created": "%s فیلدشخصی ایجاد شد",
"activity-excluded": "%s از %s مستثنی گردید",
"activity-imported": "%s از %s وارد %s شد",
"activity-imported-board": "%s از %s وارد شد",
@@ -39,6 +42,7 @@
"activity-removed": "%s از %s حذف شد",
"activity-sent": "ارسال %s به %s",
"activity-unjoined": "قطع اتصال %s",
"activity-subtask-added": "زیروظیفه به %s اضافه شد",
"activity-checklist-added": "سیاهه به %s اضافه شد",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"add": "افزودن",
@@ -46,6 +50,7 @@
"add-board": "افزودن برد",
"add-card": "افزودن کارت",
"add-swimlane": "Add Swimlane",
"add-subtask": "افزودن زیر وظیفه",
"add-checklist": "افزودن چک لیست",
"add-checklist-item": "افزودن مورد به سیاهه",
"add-cover": "جلد کردن",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "و __count__ کارت دیگر",
"apply": "اعمال",
"app-is-offline": "Wekan در حال بارگذاری است. لطفا صبر کنید. نوسازی صفحه، منجر به از دست رفتن داده‌ها می‌شود. اگر Wekan بارگذاری نشد، لطفا بررسی کنید که سرور Wekan متوقف نشده باشد.",
"archive": "بایگانی",
"archive-all": "بایگانی کردن همه",
"archive-board": "بایگانی تخته",
"archive-card": "بایگانی کارت",
"archive-list": "فهرست بایگانی",
"archive-swimlane": "Archive Swimlane",
"archive-selection": "بایگانی موارد انتخاب شده",
"archiveBoardPopup-title": "بایگانی تخته؟",
"archived-items": "موارد بایگانی شده",
"archived-boards": "تخته‌های بایگانی شده",
"archive": "انتقال به بازیافتی",
"archive-all": "ریختن همه به سطل زباله",
"archive-board": "ریختن تخته به سطل زباله",
"archive-card": "ریختن کارت به سطل زباله",
"archive-list": "ریختن لیست به سطل زباله",
"archive-swimlane": "ریختن مسیرشنا به سطل زباله",
"archive-selection": "انتخاب شده ها را به سطل زباله بریز",
"archiveBoardPopup-title": "آیا تخته به سطل زباله ریخته شود؟",
"archived-items": "سطل زباله",
"archived-boards": "تخته هایی که به زباله ریخته شده است",
"restore-board": "بازیابی تخته",
"no-archived-boards": "تخته بایگانی شده وجود ندارد.",
"archives": "بایگانی‌ها",
"no-archived-boards": "هیچ تخته ای در سطل زباله وجود ندارد",
"archives": "سطل زباله",
"assign-member": "تعیین عضو",
"attached": "ضمیمه شده",
"attachment": "ضمیمه",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "منوی تخته",
"boards": "تخته‌ها",
"board-view": "نمایش تخته",
"board-view-cal": "تقویم",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "فهرست‌ها",
"bucket-example": "برای مثال چیزی شبیه \"لیست سبدها\"",
"cancel": "انصراف",
"card-archived": "این کارت بایگانی شد.",
"card-archived": "این کارت به سطل زباله ریخته شده است",
"board-archived": "این تخته به بازیافتی انتقال یافت.",
"card-comments-title": "این کارت دارای %s نظر است.",
"card-delete-notice": "حذف دائمی. تمامی موارد مرتبط با این کارت از بین خواهند رفت.",
"card-delete-pop": "همه اقدامات از این پردازه (خوراک) حذف خواهد شد و امکان بازگرداندن کارت وجود نخواهد داشت.",
"card-delete-suggest-archive": "شما می توانید یک کارت را با حفظ فعالیت های آن بایگانی کنید.",
"card-due": "ناشی از",
"card-due-on": "مقتضی بر",
"card-delete-suggest-archive": "شما میتوانید این کارت را به سطل بازیافت انتقال دهید تا از تخته پاک و فعالیت ها حفظ شود",
"card-due": "تا",
"card-due-on": "تا",
"card-spent": "زمان صرف شده",
"card-edit-attachments": "ویرایش ضمائم",
"card-edit-custom-fields": "ویرایش فیلدهای شخصی",
"card-edit-labels": "ویرایش برچسب",
"card-edit-members": "ویرایش اعضا",
"card-labels-title": "تغییر برچسب کارت",
@@ -118,12 +126,19 @@
"card-start": "شروع",
"card-start-on": "شروع از",
"cardAttachmentsPopup-title": "ضمیمه از",
"cardCustomField-datePopup-title": "تغییر تاریخ",
"cardCustomFieldsPopup-title": "ویرایش فیلدهای شخصی",
"cardDeletePopup-title": "آیا می خواهید کارت را حذف کنید؟",
"cardDetailsActionsPopup-title": "اعمال کارت",
"cardLabelsPopup-title": "برچسب ها",
"cardMembersPopup-title": "اعضا",
"cardMorePopup-title": "بیشتر",
"cards": "کارت‌ها",
"cards-count": "کارت‌ها",
"casSignIn": "ورود با استفاده از CAS",
"cardType-card": "کارت",
"cardType-linkedCard": "کارت‌های مرتبط",
"cardType-linkedBoard": "تخته‌های مرتبط",
"change": "تغییر",
"change-avatar": "تغییر تصویر",
"change-password": "تغییر کلمه عبور",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "تغییر کلمه عبور",
"changePermissionsPopup-title": "تغییر دسترسی‌ها",
"changeSettingsPopup-title": "تغییر تنظیمات",
"subtasks": "زیر وظیفه",
"checklists": "سیاهه‌ها",
"click-to-star": "با کلیک کردن ستاره بدهید",
"click-to-unstar": "با کلیک کردن ستاره را کم کنید",
"clipboard": "ذخیره در حافظه ویا بردار-رهاکن",
"close": "بستن",
"close-board": "بستن برد",
"close-board-pop": "شما می توانید با کلیک بر دکمه \"بایگانی\" از قسمت بالای خانه، تخته را بازآوری نمایید.",
"close-board-pop": "شما با کلیک روی دکمه \"سطل زباله\" در قسمت خانه می توانید تخته را بازیابی کنید.",
"color-black": "مشکی",
"color-blue": "آبی",
"color-green": "سبز",
@@ -155,9 +171,14 @@
"comment-placeholder": "درج نظر",
"comment-only": "فقط نظر",
"comment-only-desc": "فقط می‌تواند روی کارت‌ها نظر دهد.",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"computer": "رایانه",
"confirm-checklist-delete-dialog": "مطمئنید که می‌خواهید سیاهه را حذف کنید؟",
"confirm-subtask-delete-dialog": "از حذف این زیر وظیفه اطمینان دارید؟",
"confirm-checklist-delete-dialog": "مطمئنا چک لیست پاک شود؟",
"copy-card-link-to-clipboard": "درج پیوند کارت در حافظه",
"linkCardPopup-title": "ارتباط دادن کارت",
"searchCardPopup-title": "جستجوی کارت",
"copyCardPopup-title": "کپی کارت",
"copyChecklistToManyCardsPopup-title": "کپی قالب کارت به کارت‌های متعدد",
"copyChecklistToManyCardsPopup-instructions": "عنوان و توضیحات کارت مقصد در این قالب JSON",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "ایجاد تخته",
"chooseBoardSourcePopup-title": "بارگذاری تخته",
"createLabelPopup-title": "ایجاد برچسب",
"createCustomField": "ایجاد فیلد",
"createCustomFieldPopup-title": "ایجاد فیلد",
"current": "جاری",
"custom-field-delete-pop": "این اقدام فیلدشخصی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد",
"custom-field-checkbox": "جعبه انتخابی",
"custom-field-date": "تاریخ",
"custom-field-dropdown": "لیست افتادنی",
"custom-field-dropdown-none": "(هیچ)",
"custom-field-dropdown-options": "لیست امکانات",
"custom-field-dropdown-options-placeholder": "کلید Enter را جهت افزودن امکانات بیشتر فشار دهید",
"custom-field-dropdown-unknown": "(ناشناخته)",
"custom-field-number": "عدد",
"custom-field-text": "متن",
"custom-fields": "فیلدهای شخصی",
"date": "تاریخ",
"decline": "رد",
"default-avatar": "تصویر پیش فرض",
"delete": "حذف",
"deleteCustomFieldPopup-title": "آیا فیلدشخصی پاک شود؟",
"deleteLabelPopup-title": "آیا می خواهید برچسب را حذف کنید؟",
"description": "توضیحات",
"disambiguateMultiLabelPopup-title": "عمل ابهام زدایی از برچسب",
@@ -184,7 +219,8 @@
"edit-wip-limit": "Edit WIP Limit",
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "تغییر تاریخ آغاز",
"editCardDueDatePopup-title": "تغییر تاریخ بدلیل",
"editCardDueDatePopup-title": "تغییر تاریخ پایان",
"editCustomFieldPopup-title": "ویرایش فیلد",
"editCardSpentTimePopup-title": "تغییر زمان صرف شده",
"editLabelPopup-title": "تغیر برچسب",
"editNotificationPopup-title": "اصلاح اعلان",
@@ -221,15 +257,19 @@
"filter-clear": "حذف صافی ـFilterـ",
"filter-no-label": "بدون برچسب",
"filter-no-member": "بدون عضو",
"filter-no-custom-fields": "هیچ فیلدشخصی ای وجود ندارد",
"filter-on": "صافی ـFilterـ فعال است",
"filter-on-desc": "شما صافی ـFilterـ برای کارتهای تخته را روشن کرده اید. جهت ویرایش کلیک نمایید.",
"filter-to-selection": "صافی ـFilterـ برای موارد انتخابی",
"advanced-filter-label": "صافی پیشرفته",
"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": "نام و نام خانوادگی",
"header-logo-title": "بازگشت به صفحه تخته.",
"hide-system-messages": "عدم نمایش پیامهای سیستمی",
"headerBarCreateBoardPopup-title": "ایجاد تخته",
"home": "خانه",
"import": "وارد کردن",
"link": "ارتباط",
"import-board": "وارد کردن تخته",
"import-board-c": "وارد کردن تخته",
"import-board-title-trello": "وارد کردن تخته از Trello",
@@ -263,8 +303,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "ارجاع به این کارت",
"list-archive-cards": "بایگانی تمامی کارتهای این لیست",
"list-archive-cards-pop": "این اقدام، همه کارت های این لیست از تخته راحذف خواهد کرد. جهت مشاهده کارت های بایگانی و بازگرداندن آنها ، \"Menu\",\"Archived Item\" را کلیک کنید.",
"list-archive-cards": "همه‌ کارت‌های این لیست را به بازیافتی انتقال بده",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Recycle Bin and bring them back to the board, click “Menu” > “Recycle Bin”.",
"list-move-cards": "انتقال تمام کارت های این لیست",
"list-select-cards": "انتخاب تمام کارت های این لیست",
"listActionPopup-title": "لیست اقدامات",
@@ -273,7 +313,7 @@
"listMorePopup-title": "بیشتر",
"link-list": "پیوند به این فهرست",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
"list-delete-suggest-archive": "با انتقال سیاهه به سطل ذباله می‌توانید ضمن حفظ فعالیت، سیاهه را از تخته حذف کنید.",
"lists": "لیست ها",
"swimlanes": "Swimlanes",
"log-out": "خروج",
@@ -293,9 +333,9 @@
"muted-info": "شما هیچگاه از تغییرات این تخته مطلع نخواهید شد",
"my-boards": "تخته‌های من",
"name": "نام",
"no-archived-cards": "کارتی در بایگانی نیست",
"no-archived-lists": "فهرستی در بایگانی نیست.",
"no-archived-swimlanes": "No archived swimlanes.",
"no-archived-cards": "کارتی در سطل ذباله نیست.",
"no-archived-lists": "سیاهه‌ای در سطل ذباله نیست.",
"no-archived-swimlanes": "No swimlanes in Recycle Bin.",
"no-results": "بدون نتیجه",
"normal": "عادی",
"normal-desc": "امکان نمایش و تنظیم کارت بدون امکان تغییر تنظیمات",
@@ -365,6 +405,7 @@
"title": "عنوان",
"tracking": "پیگردی",
"tracking-info": "شما از هرگونه تغییر در کارتهایی که بعنوان ایجاد کننده ویا عضو آن هستید، آگاه خواهید شد",
"type": "نوع",
"unassign-member": "عدم انتصاب کاربر",
"unsaved-description": "شما توضیحات ذخیره نشده دارید.",
"unwatch": "عدم دیده بانی",
@@ -373,7 +414,7 @@
"uploaded-avatar": "تصویر ارسال شد",
"username": "نام کاربری",
"view-it": "مشاهده",
"warn-list-archived": "هشدار: این کارت در یک لیست بایگانی شده است",
"warn-list-archived": "هشدار: این کارت در سیاهه‌ای داخل سطح ذباله است",
"watch": "دیده بانی",
"watching": "درحال دیده بانی",
"watching-info": "شما از هر تغییری دراین تخته آگاه خواهید شد",
@@ -429,11 +470,42 @@
"hours": "ساعت",
"minutes": "دقیقه",
"seconds": "ثانیه",
"show-field-on-card": "Show this field on card",
"yes": "بله",
"no": "خیر",
"accounts": "حساب‌ها",
"accounts-allowEmailChange": "اجازه تغییر رایانامه",
"accounts-allowUserNameChange": "اجازه تغییر نام کاربری",
"createdAt": "ساخته شده در",
"verified": "معتبر",
"active": "فعال"
"active": "فعال",
"card-received": "رسیده",
"card-received-on": "رسیده در",
"card-end": "پایان",
"card-end-on": "پایان در",
"editCardReceivedDatePopup-title": "تغییر تاریخ رسید",
"editCardEndDatePopup-title": "تغییر تاریخ پایان",
"assigned-by": "محول شده توسط",
"requested-by": "تقاضا شده توسط",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "حذف تخته؟",
"delete-board": "حذف تخته",
"default-subtasks-board": "Subtasks for __board__ board",
"default": "پیش‌فرض",
"queue": "صف",
"subtask-settings": "Subtasks Settings",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
"show-subtasks-field": "Cards can have subtasks",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Change card's parent",
"parent-card": "Parent card",
"source-board": "Source board",
"no-parent": "Don't show parent"
}
+103 -31
View File
@@ -2,17 +2,19 @@
"accept": "Hyväksy",
"act-activity-notify": "[Wekan] Toimintailmoitus",
"act-addAttachment": "liitetty __attachment__ kortille __card__",
"act-addSubtask": "lisätty alitehtävä __checklist__ kortille __card__",
"act-addChecklist": "lisätty tarkistuslista __checklist__ kortille __card__",
"act-addChecklistItem": "lisätty kohta __checklistItem__ tarkistuslistaan __checklist__ kortilla __card__",
"act-addComment": "kommentoitu __card__: __comment__",
"act-createBoard": "luotu __board__",
"act-createCard": "lisätty __card__ listalle __list__",
"act-createCustomField": "luotu mukautettu kenttä __customField__",
"act-createList": "lisätty __list__ taululle __board__",
"act-addBoardMember": "lisätty __member__ taululle __board__",
"act-archivedBoard": "arkistoitu __board__",
"act-archivedCard": "arkistoitu __card__",
"act-archivedList": "arkistoitu __list__",
"act-archivedSwimlane": "arkistoitu __swimlane__",
"act-archivedBoard": "__board__ siirretty roskakoriin",
"act-archivedCard": "__card__ siirretty roskakoriin",
"act-archivedList": "__list__ siirretty roskakoriin",
"act-archivedSwimlane": "__swimlane__ siirretty roskakoriin",
"act-importBoard": "tuotu __board__",
"act-importCard": "tuotu __card__",
"act-importList": "tuotu __list__",
@@ -27,9 +29,10 @@
"activities": "Toimet",
"activity": "Toiminta",
"activity-added": "lisätty %s kohteeseen %s",
"activity-archived": "arkistoitu %s",
"activity-archived": "%s siirretty roskakoriin",
"activity-attached": "liitetty %s kohteeseen %s",
"activity-created": "luotu %s",
"activity-customfield-created": "luotu mukautettu kenttä %s",
"activity-excluded": "poistettu %s kohteesta %s",
"activity-imported": "tuotu %s kohteeseen %s lähteestä %s",
"activity-imported-board": "tuotu %s lähteestä %s",
@@ -39,6 +42,7 @@
"activity-removed": "poistettu %s kohteesta %s",
"activity-sent": "lähetetty %s kohteeseen %s",
"activity-unjoined": "peruttu %s liittyminen",
"activity-subtask-added": "lisätty alitehtävä kohteeseen %s",
"activity-checklist-added": "lisätty tarkistuslista kortille %s",
"activity-checklist-item-added": "lisäsi kohdan tarkistuslistaan '%s' kortilla %s",
"add": "Lisää",
@@ -46,6 +50,7 @@
"add-board": "Lisää taulu",
"add-card": "Lisää kortti",
"add-swimlane": "Lisää Swimlane",
"add-subtask": "Lisää alitehtävä",
"add-checklist": "Lisää tarkistuslista",
"add-checklist-item": "Lisää kohta tarkistuslistaan",
"add-cover": "Lisää kansi",
@@ -64,19 +69,19 @@
"and-n-other-card_plural": "Ja __count__ muuta korttia",
"apply": "Käytä",
"app-is-offline": "Wekan latautuu, odota. Sivun uudelleenlataus aiheuttaa tietojen menettämisen. Jos Wekan ei lataudu, tarkista että Wekan palvelin ei ole pysähtynyt.",
"archive": "Arkistoi",
"archive-all": "Arkistoi kaikki",
"archive-board": "Arkistoi taulu",
"archive-card": "Arkistoi kortti",
"archive-list": "Arkistoi lista",
"archive-swimlane": "Arkistoi Swimlane",
"archive-selection": "Arkistoi valinta",
"archiveBoardPopup-title": "Arkistoi taulu?",
"archived-items": "Arkistoidut kohteet",
"archived-boards": "Arkistoidut taulut",
"archive": "Siirrä roskakoriin",
"archive-all": "Siirrä kaikki roskakoriin",
"archive-board": "Siirrä taulu roskakoriin",
"archive-card": "Siirrä kortti roskakoriin",
"archive-list": "Siirrä lista roskakoriin",
"archive-swimlane": "Siirrä Swimlane roskakoriin",
"archive-selection": "Siirrä valinta roskakoriin",
"archiveBoardPopup-title": "Siirrä taulu roskakoriin?",
"archived-items": "Roskakori",
"archived-boards": "Taulut roskakorissa",
"restore-board": "Palauta taulu",
"no-archived-boards": "Ei arkistoituja tauluja.",
"archives": "Arkistot",
"no-archived-boards": "Ei tauluja roskakorissa",
"archives": "Roskakori",
"assign-member": "Valitse jäsen",
"attached": "liitetty",
"attachment": "Liitetiedosto",
@@ -98,19 +103,22 @@
"boardMenuPopup-title": "Taulu valikko",
"boards": "Taulut",
"board-view": "Taulu näkymä",
"board-view-cal": "Kalenteri",
"board-view-swimlanes": "Swimlanet",
"board-view-lists": "Listat",
"bucket-example": "Kuten “Laatikko lista” esimerkiksi",
"cancel": "Peruuta",
"card-archived": "Tämä kortti on arkistoitu.",
"card-archived": "Tämä kortti on siirretty roskakoriin.",
"board-archived": "Tämä taulu on siirretty roskakoriin.",
"card-comments-title": "Tässä kortissa on %s kommenttia.",
"card-delete-notice": "Poistaminen on lopullista. Menetät kaikki toimet jotka on liitetty tähän korttiin.",
"card-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja et tule pystymään uudelleenavaamaan korttia. Tätä ei voi peruuttaa.",
"card-delete-suggest-archive": "Voit arkistoida kortin poistaaksesi sen taululta ja säilyttääksesi toimet.",
"card-delete-suggest-archive": "Voit siirtää kortin roskakoriin poistaaksesi sen taululta ja säilyttääksesi toimintalokin.",
"card-due": "Erääntyy",
"card-due-on": "Erääntyy",
"card-spent": "Käytetty aika",
"card-edit-attachments": "Muokkaa liitetiedostoja",
"card-edit-custom-fields": "Muokkaa mukautettuja kenttiä",
"card-edit-labels": "Muokkaa tunnisteita",
"card-edit-members": "Muokkaa jäseniä",
"card-labels-title": "Muokkaa kortin tunnisteita.",
@@ -118,12 +126,19 @@
"card-start": "Alkaa",
"card-start-on": "Alkaa",
"cardAttachmentsPopup-title": "Liitä mistä",
"cardCustomField-datePopup-title": "Muokkaa päivää",
"cardCustomFieldsPopup-title": "Muokkaa mukautettuja kenttiä",
"cardDeletePopup-title": "Poista kortti?",
"cardDetailsActionsPopup-title": "Kortti toimet",
"cardLabelsPopup-title": "Tunnisteet",
"cardMembersPopup-title": "Jäsenet",
"cardMorePopup-title": "Lisää",
"cards": "Kortit",
"cards-count": "korttia",
"casSignIn": "CAS kirjautuminen",
"cardType-card": "Kortti",
"cardType-linkedCard": "Linkitetty kortti",
"cardType-linkedBoard": "Linkitetty taulu",
"change": "Muokkaa",
"change-avatar": "Muokkaa profiilikuvaa",
"change-password": "Vaihda salasana",
@@ -134,13 +149,14 @@
"changePasswordPopup-title": "Vaihda salasana",
"changePermissionsPopup-title": "Muokkaa oikeuksia",
"changeSettingsPopup-title": "Muokkaa asetuksia",
"subtasks": "Alitehtävät",
"checklists": "Tarkistuslistat",
"click-to-star": "Klikkaa merkataksesi tämä taulu tähdellä.",
"click-to-unstar": "Klikkaa poistaaksesi tähtimerkintä taululta.",
"clipboard": "Leikepöytä tai raahaa ja pudota",
"close": "Sulje",
"close-board": "Sulje taulu",
"close-board-pop": "Voit palauttaa taulun klikkaamalla “Arkistot” painiketta kotiotsikosta.",
"close-board-pop": "Voit palauttaa taulun klikkaamalla “Roskakori” painiketta taululistan yläpalkista.",
"color-black": "musta",
"color-blue": "sininen",
"color-green": "vihreä",
@@ -155,9 +171,14 @@
"comment-placeholder": "Kirjoita kommentti",
"comment-only": "Vain kommentointi",
"comment-only-desc": "Voi vain kommentoida kortteja",
"no-comments": "Ei kommentteja",
"no-comments-desc": "Ei voi nähdä kommentteja ja toimintaa.",
"computer": "Tietokone",
"confirm-checklist-delete-dialog": "Haluatko varmasti poistaa tarkistuslistan",
"confirm-subtask-delete-dialog": "Oletko varma että haluat poistaa alitehtävän?",
"confirm-checklist-delete-dialog": "Oletko varma että haluat poistaa tarkistuslistan?",
"copy-card-link-to-clipboard": "Kopioi kortin linkki leikepöydälle",
"linkCardPopup-title": "Linkitä kortti",
"searchCardPopup-title": "Etsi kortti",
"copyCardPopup-title": "Kopioi kortti",
"copyChecklistToManyCardsPopup-title": "Kopioi tarkistuslistan malli monille korteille",
"copyChecklistToManyCardsPopup-instructions": "Kohde korttien otsikot ja kuvaukset JSON muodossa",
@@ -166,11 +187,25 @@
"createBoardPopup-title": "Luo taulu",
"chooseBoardSourcePopup-title": "Tuo taulu",
"createLabelPopup-title": "Luo tunniste",
"createCustomField": "Luo kenttä",
"createCustomFieldPopup-title": "Luo kenttä",
"current": "nykyinen",
"custom-field-delete-pop": "Tätä ei voi peruuttaa. Tämä poistaa tämän mukautetun kentän kaikista korteista ja poistaa sen historian.",
"custom-field-checkbox": "Valintaruutu",
"custom-field-date": "Päivämäärä",
"custom-field-dropdown": "Pudotusvalikko",
"custom-field-dropdown-none": "(ei mitään)",
"custom-field-dropdown-options": "Luettelon vaihtoehdot",
"custom-field-dropdown-options-placeholder": "Paina Enter lisätäksesi lisää vaihtoehtoja",
"custom-field-dropdown-unknown": "(tuntematon)",
"custom-field-number": "Numero",
"custom-field-text": "Teksti",
"custom-fields": "Mukautetut kentät",
"date": "Päivämäärä",
"decline": "Kieltäydy",
"default-avatar": "Oletus profiilikuva",
"delete": "Poista",
"deleteCustomFieldPopup-title": "Poista mukautettu kenttä?",
"deleteLabelPopup-title": "Poista tunniste?",
"description": "Kuvaus",
"disambiguateMultiLabelPopup-title": "Yksikäsitteistä tunniste toiminta",
@@ -185,6 +220,7 @@
"soft-wip-limit": "Pehmeä WIP raja",
"editCardStartDatePopup-title": "Muokkaa aloituspäivää",
"editCardDueDatePopup-title": "Muokkaa eräpäivää",
"editCustomFieldPopup-title": "Muokkaa kenttää",
"editCardSpentTimePopup-title": "Muuta käytettyä aikaa",
"editLabelPopup-title": "Muokkaa tunnistetta",
"editNotificationPopup-title": "Muokkaa ilmoituksia",
@@ -221,15 +257,19 @@
"filter-clear": "Poista suodatin",
"filter-no-label": "Ei tunnistetta",
"filter-no-member": "Ei jäseniä",
"filter-no-custom-fields": "Ei mukautettuja kenttiä",
"filter-on": "Suodatus on päällä",
"filter-on-desc": "Suodatat kortteja tällä taululla. Klikkaa tästä muokataksesi suodatinta.",
"filter-to-selection": "Suodata valintaan",
"advanced-filter-label": "Edistynyt suodatin",
"advanced-filter-description": "Edistynyt suodatin mahdollistaa merkkijonon, joka sisältää seuraavat operaattorit: == != <= >= && || ( ) Operaattorien välissä käytetään välilyöntiä. Voit suodattaa kaikki mukautetut kentät kirjoittamalla niiden nimet ja arvot. Esimerkiksi: Field1 == Value1. Huom: Jos kentillä tai arvoilla on välilyöntejä, sinun on sijoitettava ne yksittäisiin lainausmerkkeihin. Esimerkki: 'Kenttä 1' == 'Arvo 1'. Voit hypätä yksittäisen kontrollimerkkien (' \\/) yli käyttämällä \\. Esimerkki: Field1 = I\\'m. Voit myös yhdistää useita ehtoja. Esimerkiksi: F1 == V1 || F1 == V2. Yleensä kaikki operaattorit tulkitaan vasemmalta oikealle. Voit muuttaa järjestystä asettamalla sulkuja. Esimerkiksi: F1 == V1 && (F2 == V2 || F2 == V3). Voit myös etsiä tekstikentistä regexillä: F1 == /Tes.*/i",
"fullname": "Koko nimi",
"header-logo-title": "Palaa taulut sivullesi.",
"hide-system-messages": "Piilota järjestelmäviestit",
"headerBarCreateBoardPopup-title": "Luo taulu",
"home": "Koti",
"import": "Tuo",
"link": "Linkitä",
"import-board": "tuo taulu",
"import-board-c": "Tuo taulu",
"import-board-title-trello": "Tuo taulu Trellosta",
@@ -263,8 +303,8 @@
"leave-board-pop": "Haluatko varmasti poistua taululta __boardTitle__? Sinut poistetaan kaikista tämän taulun korteista.",
"leaveBoardPopup-title": "Jää pois taululta ?",
"link-card": "Linkki tähän korttiin",
"list-archive-cards": "Arkistoi kaikki kortit tässä listassa",
"list-archive-cards-pop": "Tämä poistaa kaikki tämän listan kortit tältä taululta. Nähdäksesi arkistoidut kortit ja tuodaksesi ne takaisin taululle, klikkaa “Valikko” > “Arkistoidut kohteet”.",
"list-archive-cards": "Siirrä kaikki tämän listan kortit roskakoriin",
"list-archive-cards-pop": "Tämä poistaa kaikki tämän listan kortit taululta. Nähdäksesi roskakorissa olevat kortit ja tuodaksesi ne takaisin taululle, klikkaa “Valikko” > “Roskakori”.",
"list-move-cards": "Siirrä kaikki kortit tässä listassa",
"list-select-cards": "Valitse kaikki kortit tässä listassa",
"listActionPopup-title": "Listaa toimet",
@@ -273,7 +313,7 @@
"listMorePopup-title": "Lisää",
"link-list": "Linkki tähän listaan",
"list-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja listan poistaminen on lopullista. Tätä ei pysty peruuttamaan.",
"list-delete-suggest-archive": "Voit arkistoida listan jolloin sen voi palauttaa sisältöineen.",
"list-delete-suggest-archive": "Voit siirtää listan roskakoriin poistaaksesi sen taululta ja säilyttääksesi toimintalokin.",
"lists": "Listat",
"swimlanes": "Swimlanet",
"log-out": "Kirjaudu ulos",
@@ -293,9 +333,9 @@
"muted-info": "Et saa koskaan ilmoituksia tämän taulun muutoksista",
"my-boards": "Tauluni",
"name": "Nimi",
"no-archived-cards": "Ei arkistoituja kortteja.",
"no-archived-lists": "Ei arkistoituja listoja.",
"no-archived-swimlanes": "Ei arkistoituja swimlaneja.",
"no-archived-cards": "Ei kortteja roskakorissa.",
"no-archived-lists": "Ei listoja roskakorissa.",
"no-archived-swimlanes": "Ei Swimlaneja roskakorissa.",
"no-results": "Ei tuloksia",
"normal": "Normaali",
"normal-desc": "Voi nähdä ja muokata kortteja. Ei voi muokata asetuksia.",
@@ -365,15 +405,16 @@
"title": "Otsikko",
"tracking": "Ilmoitukset",
"tracking-info": "Sinulle ilmoitetaan muutoksista korteissa joihin olet osallistunut luojana tai jäsenenä.",
"type": "Tyyppi",
"unassign-member": "Peru jäsenvalinta",
"unsaved-description": "Sinulla on tallentamaton kuvaus.",
"unwatch": "Lopeta seuraaminen",
"upload": "Lähetä",
"upload-avatar": "Lähetä profiilikuva",
"uploaded-avatar": "Profiilikuva lähetetty",
"username": "Käyttäjänimi",
"username": "Käyttäjätunnus",
"view-it": "Näytä se",
"warn-list-archived": "varoitus: tämä kortti on arkistoitujen listalla",
"warn-list-archived": "varoitus: tämä kortti on roskakorissa olevassa listassa",
"watch": "Seuraa",
"watching": "Seurataan",
"watching-info": "Sinulle ilmoitetaan tämän taulun muutoksista",
@@ -399,7 +440,7 @@
"smtp-tls-description": "Ota käyttöön TLS tuki SMTP palvelimelle",
"smtp-host": "SMTP isäntä",
"smtp-port": "SMTP portti",
"smtp-username": "Käyttäjänimi",
"smtp-username": "Käyttäjätunnus",
"smtp-password": "Salasana",
"smtp-tls": "TLS tuki",
"send-from": "Lähettäjä",
@@ -429,11 +470,42 @@
"hours": "tuntia",
"minutes": "minuuttia",
"seconds": "sekuntia",
"show-field-on-card": "Näytä tämä kenttä kortilla",
"yes": "Kyllä",
"no": "Ei",
"accounts": "Tilit",
"accounts-allowEmailChange": "Salli sähköpostiosoitteen muuttaminen",
"accounts-allowUserNameChange": "Salli käyttäjätunnuksen muuttaminen",
"createdAt": "Luotu",
"verified": "Varmistettu",
"active": "Aktiivinen"
"active": "Aktiivinen",
"card-received": "Vastaanotettu",
"card-received-on": "Vastaanotettu",
"card-end": "Loppuu",
"card-end-on": "Loppuu",
"editCardReceivedDatePopup-title": "Vaihda vastaanottamispäivää",
"editCardEndDatePopup-title": "Vaihda loppumispäivää",
"assigned-by": "Tehtävänantaja",
"requested-by": "Pyytäjä",
"board-delete-notice": "Poistaminen on lopullista. Menetät kaikki listat, kortit ja toimet tällä taululla.",
"delete-board-confirm-popup": "Kaikki listat, kortit, tunnisteet ja toimet poistetaan ja et pysty palauttamaan taulun sisältöä. Tätä ei voi peruuttaa.",
"boardDeletePopup-title": "Poista taulu?",
"delete-board": "Poista taulu",
"default-subtasks-board": "Alitehtävät __board__ taululle",
"default": "Oletus",
"queue": "Jono",
"subtask-settings": "Alitehtävä asetukset",
"boardSubtaskSettingsPopup-title": "Taulu alitehtävien asetukset",
"show-subtasks-field": "Korteilla voi olla alitehtäviä",
"deposit-subtasks-board": "Tallenta alitehtävät tälle taululle:",
"deposit-subtasks-list": "Laskeutumislista alatehtäville tallennettu tänne:",
"show-parent-in-minicard": "Näytä ylätehtävä minikortilla:",
"prefix-with-full-path": "Etuliite koko polulla",
"prefix-with-parent": "Etuliite ylätehtävällä",
"subtext-with-full-path": "Aliteksti koko polulla",
"subtext-with-parent": "Aliteksti ylätehtävällä",
"change-card-parent": "Muuta kortin ylätehtävää",
"parent-card": "Ylätehtävä kortti",
"source-board": "Lähdetaulu",
"no-parent": "Älä näytä ylätehtävää"
}
Loaded 100 of 167 files, more files were not shown because too many files have changed in this diff. Show more