Compare commits

...
390 Commits
Author SHA1 Message Date
Lauri Ojansivu ee118d26b6 v4.70 2021-01-04 23:47:42 +02:00
Lauri Ojansivu 1dfe406ff9 Update translations. 2021-01-04 23:46:35 +02:00
Lauri Ojansivu 5549c49326 Update ChangeLog. 2021-01-04 23:41:49 +02:00
Lauri Ojansivu 754a91dbdc Show Admin Panel / People and Version also on mobile MiniScreen.
Thanks to xet7 !
2021-01-04 23:36:42 +02:00
Lauri Ojansivu e3b90fb579 Update ChangeLog. 2021-01-04 22:26:36 +02:00
Lauri Ojansivu 4bfe017b08 Upgrade to Node 12.20.1
Thanks to Node developers !
2021-01-04 22:18:26 +02:00
Lauri Ojansivu 1a1d6da451 Update ChangeLog. 2021-01-04 21:58:14 +02:00
Lauri Ojansivu 763dc9c8e0 Added markdown and emoji to My Cards board, swimlane and list names.
Thanks to xet7 !
2021-01-04 21:49:51 +02:00
Lauri Ojansivu 0d3805d10a Wekan is translated to about 60 languages. 2021-01-04 20:21:21 +02:00
Lauri Ojansivu 7b8b132062 Update ChangeLog. 2021-01-04 20:13:15 +02:00
Lauri Ojansivu d171f4088f Added many new translations to Wekan, now there is total 60 translations in Wekan. Updated translations. Organized pull-translations.sh alphabetically by language name.
Thanks to translators and xet7 !
2021-01-04 20:05:23 +02:00
Lauri Ojansivu 46e47e3fc9 v4.69 2021-01-02 18:10:15 +02:00
Lauri Ojansivu d4b3dc7472 Update translations. 2021-01-02 17:54:13 +02:00
Lauri Ojansivu df47dcc3f3 Update ChangeLog. 2021-01-02 17:53:31 +02:00
Lauri Ojansivu bfc16fc544 Reorder My Cards to be first at menu.
Thanks to xet7 !
2021-01-02 17:50:05 +02:00
Lauri Ojansivu 991e1baffd Update translations. 2021-01-02 16:56:25 +02:00
Lauri Ojansivu cd54ced1b2 Update ChangeLog. 2021-01-02 16:55:58 +02:00
Lauri Ojansivu f88c3755e0 Merge branch 'jrsupplee-master' 2021-01-02 16:43:31 +02:00
Lauri Ojansivu 0592b0c56a Moved Public/Archive/Templates/etc options to click right top username Member Settings menu, where My Cards also is.
Thanks to xet7 !
2021-01-02 16:39:58 +02:00
John R. Supplee a0b72d0287 Merge branch 'master' of https://github.com/wekan/wekan 2021-01-02 00:17:31 +02:00
John R. Supplee 7a419c1563 My Cards development
* only find client side cards of the user
2021-01-02 00:17:03 +02:00
Lauri Ojansivu ea42a3763f Update translations. 2021-01-01 23:13:56 +02:00
John R. Supplee 0f6a60fa69 Merge branch 'master' of https://github.com/wekan/wekan 2021-01-01 22:04:04 +02:00
John R. Supplee a58b27e9b0 My Cards development
* always go to page
* use minicard for displaying cards
* change the icon for my cards menu option
2021-01-01 22:03:29 +02:00
Lauri Ojansivu cfdeaf2f5d Update ChangeLog. 2021-01-01 15:02:10 +02:00
Lauri Ojansivu b64cd358ed Teams/Organizations to Admin Panel. In Progress. Part 3.
Thanks to xet7 !

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

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

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

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

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

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

Thanks to mfilser and xet7 !

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

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

Thanks to airtraxx and xet7.

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

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

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

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

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

Thanks to Samunosuke, pgh2357 and xet7 !

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

Thanks to Samunosuke, pgh2357 and xet7 !

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

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-11 19:53:26 +00:00
Lauri Ojansivu f6c0700633 v4.59 2020-12-10 12:16:44 +02:00
Lauri Ojansivu dece7ddf13 Update translations. 2020-12-10 12:11:13 +02:00
Lauri Ojansivu d06bcd9dcc Update ChangeLog. 2020-12-10 12:08:27 +02:00
Lauri Ojansivu ee7d82c006 Merge pull request #3389 from daniel-eder/fix/clone-board-checklist-items
Fix not all checklist items being imported/cloned
2020-12-10 12:06:28 +02:00
Daniel Eder b777f7f2af Fix not all checklist items being imported/cloned 2020-12-10 10:47:57 +02:00
Lauri Ojansivu fe87b9928c v4.58 2020-12-09 16:20:55 +02:00
Lauri Ojansivu fb36709047 Update translations. 2020-12-09 16:13:45 +02:00
Lauri Ojansivu 73aaccb6dd Update ChangeLog. 2020-12-09 16:10:39 +02:00
Lauri Ojansivu 1fe0059402 Merge branch 'daniel-eder-fix/clone-board' 2020-12-09 16:07:19 +02:00
Daniel Eder 0c12c45080 Fix missing subtasks when cloning board 2020-12-09 15:51:45 +02:00
Daniel Eder a6c48329ef Fix missing assignee assignment when cloning or importing board 2020-12-09 15:06:56 +02:00
Daniel Eder a3cd1b89ff Fix missing member assignments when cloning board 2020-12-09 15:02:50 +02:00
Daniel Eder 7a08f42edb Fix missing custom fields when cloning board 2020-12-09 14:01:33 +02:00
Lauri Ojansivu e8722b56e3 v4.57 2020-12-08 21:49:56 +02:00
Lauri Ojansivu 052948f6eb Update ChangeLog. 2020-12-08 21:41:10 +02:00
Lauri Ojansivu cd03395e05 Merge pull request #3385 from mfilser/minicard_space_after_assignees
Minicard, reduce space after assignees label
2020-12-08 21:37:16 +02:00
Lauri Ojansivu 61caf18fd4 Update ChangeLog. 2020-12-08 20:40:22 +02:00
Lauri Ojansivu 015f4d671d Upgrade to Node 12.20.0
Thanks to Node developers!
2020-12-08 20:38:31 +02:00
Lauri Ojansivu c13e828c79 Update ChangeLog. 2020-12-08 20:30:42 +02:00
Lauri Ojansivu 7a6abaac44 Update to Meteor 1.12
Thanks to Meteor developers!
2020-12-08 20:27:58 +02:00
Lauri Ojansivu 58dffd0a33 Update ChangeLog. 2020-12-08 20:17:13 +02:00
Lauri Ojansivu fe0232a4e8 Update translations. 2020-12-08 20:11:08 +02:00
Lauri Ojansivu 8dff6c2e2a Merge branch 'mfilser-drag_handle_checklistitem' 2020-12-08 19:27:32 +02:00
Martin Filser 3a6e2813a6 Minicard, reduce space after assignees label 2020-12-08 17:45:57 +01:00
Martin Filser 8005640b77 Drag handles at checklist items on mobile view #3240 2020-12-08 17:44:36 +01:00
Lauri Ojansivu bc929fb7e0 Update translations. 2020-12-08 00:08:40 +02:00
Lauri Ojansivu 019874b6af Update ChangeLog. 2020-12-08 00:06:05 +02:00
Lauri Ojansivu a7977a8fc7 Hide duplicate create board button, because it did not show board templates correctly.
Thanks to xet7 !

Fixes #2728
2020-12-08 00:02:51 +02:00
Lauri Ojansivu 62f6cc7198 Update translations. 2020-12-03 07:18:00 +02:00
Lauri Ojansivu ad331ee122 Update ChangeLog. 2020-12-03 07:16:06 +02:00
Lauri Ojansivu 387f0600ce REST API: Fix typos, remove extra code.
Thanks to xet7 !
2020-12-03 07:14:06 +02:00
Lauri Ojansivu 0801e33f97 Update ChangeLog. 2020-12-03 07:03:18 +02:00
Lauri Ojansivu f576d2f356 Merge pull request #3382 from ThoreKr/helm-secretenv
Helm: Introduce secretEnv for secret value provisioning
2020-12-03 07:00:07 +02:00
Lauri Ojansivu 051f7b2769 REST API: Added Wekan REST API Python CLI, for adding card, downloading attachments etc.
Thanks to xet7 !

Related #1482
2020-12-03 06:54:25 +02:00
Lauri Ojansivu 1f207c493d Update ChangeLog. 2020-12-03 06:36:10 +02:00
Thore 03f565bf95 Introduce secretEnv for secret value provisioning 2020-12-03 05:35:11 +01:00
Lauri Ojansivu 36e29a405e REST API: Added file download URL to listing of attachments of a board. Part 2.
Thanks to xet7 !

Related #1482
2020-12-03 06:30:27 +02:00
Lauri Ojansivu 2ec53b27d1 REST API: Added file download URL to listing of attachments of a board.
Thanks to xet7 !

Related #1482
2020-12-03 06:21:46 +02:00
Lauri Ojansivu 152a0b50f2 Update ChangeLog. 2020-12-03 01:53:10 +02:00
Lauri Ojansivu c09758fb91 Try to fix Docker. 2020-12-03 01:40:56 +02:00
Lauri Ojansivu 2b2884d996 Try to fix Docker. 2020-12-03 01:00:10 +02:00
Lauri Ojansivu 4537971300 Try to fix Docker on Quay.
Thanks to xet7 !

Related #3380
2020-12-02 20:06:34 +02:00
Lauri Ojansivu 0b43e8b42a Remove old text. 2020-11-30 20:48:19 +02:00
Lauri Ojansivu bf94161f30 REST API: List attachments of a board.
For using this, Python code example:
https://github.com/wekan/wekan/wiki/New-card-with-Python3-and-REST-API

Thanks to xet7 !

Related #1482
2020-11-30 20:41:54 +02:00
Lauri Ojansivu 573426899a v4.56 2020-11-30 00:05:41 +02:00
Lauri Ojansivu 3816227837 Update translations. 2020-11-29 23:34:24 +02:00
Lauri Ojansivu fe5e311673 Update translations. 2020-11-29 05:18:39 +02:00
Lauri Ojansivu bec0b7ec56 Update ChangeLog. Fix lint. 2020-11-29 04:24:53 +02:00
Lauri Ojansivu 9d2a9ee70b Fix lint. 2020-11-29 04:19:28 +02:00
Lauri Ojansivu baf652a569 Merge pull request #3374 from helioguardabaxo/master
Improvements in activities design
2020-11-29 04:17:38 +02:00
helioguardabaxo 9f340bcecd Improvements in activities design 2020-11-28 21:50:01 -03:00
Lauri Ojansivu cc0a866166 Update ChangeLog. 2020-11-28 01:42:35 +02:00
Lauri Ojansivu d39b62503f Merge pull request #3373 from helioguardabaxo/master
Fixed end date return
2020-11-28 01:40:55 +02:00
helioguardabaxo e9b9af4616 Fixed end date return 2020-11-27 20:02:49 -03:00
Lauri Ojansivu 7d88ef7ab2 Update translations. 2020-11-27 22:56:51 +02:00
Lauri Ojansivu 5a49bd6f8c Update ChangeLog. 2020-11-27 22:38:57 +02:00
Lauri Ojansivu a255fc8524 Merge pull request #3372 from helioguardabaxo/master
Attempt to implement date activities notification
2020-11-27 22:37:08 +02:00
Lauri Ojansivu d1b5c42d42 Update ChangeLog. 2020-11-27 21:33:56 +02:00
Lauri Ojansivu d957768a39 Merge pull request #3369 from jiangytcn/helm
fix: update helm mongodb dependency
2020-11-27 21:17:44 +02:00
Lauri Ojansivu 999630aed5 Update ChangeLog. 2020-11-27 19:15:39 +00:00
Lauri Ojansivu cf7efccde5 Merge branch 'progressify-master' 2020-11-27 19:11:03 +00:00
Lauri Ojansivu 7b82a80fb4 Fix typo. 2020-11-27 19:08:57 +00:00
helioguardabaxo cfe500794c Attempt to implement date activities notification 2020-11-27 14:41:20 -03:00
progressify a2d298f493 sticky swimlane again :) 2020-11-26 18:25:33 +01:00
progressify 4687a866f5 sticky swimlane 2020-11-25 22:54:17 +01:00
Jiang Yi Tao ff08aff131 fix: update helm mongodb dependency
1. removed unused test pod
2. update chart dependency with bitnami repo
3. removed unused configurations in default values

Signed-off-by: Jiang Yi Tao <jiangyt.cn@gmail.com>
2020-11-25 19:53:56 +08:00
Lauri Ojansivu 5510c2a37d 1) New default: sudo snap set wekan mongo-log-destination='devnull'. Other options: syslog/snapcommon.
This should lower amount of disk usage and logs.
2) Tried to fix command: sudo snap set wekan mongo-url='...'

Thanks to xet7 !

Fixes #3059,
fixes #2364,
fixes wekan/wekan-snap#138,
fixes wekan/wekan-snap#113
2020-11-23 20:40:37 +02:00
Lauri Ojansivu 608a084b94 Update ChangeLog. 2020-11-23 17:47:14 +02:00
Lauri Ojansivu 9e47abdaa3 Merge pull request #3366 from helioguardabaxo/master
Added date notification icons
2020-11-23 17:44:26 +02:00
Lauri Ojansivu 4d7bd455c9 Update ChangeLog. 2020-11-23 17:42:23 +02:00
Lauri Ojansivu 05a72f7c62 Fix typo on MONGO_URL on Snap.
Thanks to xet7 !
2020-11-23 17:40:26 +02:00
helioguardabaxo 4e23429cb8 Added date notification icons 2020-11-23 12:10:38 -03:00
Lauri Ojansivu b67d3e91af v4.55 2020-11-21 18:07:31 +02:00
Lauri Ojansivu 636487502d Update translations. 2020-11-21 17:57:06 +02:00
Lauri Ojansivu 3207f457d4 Update ChangeLog. 2020-11-21 04:32:44 +02:00
Lauri Ojansivu af0cb1d6e7 Merge pull request #3359 from jghaanstra/master
Modern Dark: card details as lightbox
2020-11-21 04:31:18 +02:00
Lauri Ojansivu 06c16b79e3 Update ChangeLog. 2020-11-21 04:30:46 +02:00
Lauri Ojansivu 09617e17d9 Merge pull request #3360 from centralhardware/increase_avatar_size
Increase avatar size
2020-11-20 20:38:01 +02:00
jghaanstra 94f50dd6b6 Modern Dark: card details as lightbox 2020-11-20 09:51:25 +01:00
Alexey Fedechkin d667554686 Update en.i18n.json 2020-11-20 14:04:16 +07:00
Alexey Fedechkin cbf3bcfe1c Update en-GB.i18n.json 2020-11-20 14:03:46 +07:00
Alexey Fedechkin 3d82323eaa Update avatars.js
increase the maximum avatar size
2020-11-20 13:51:34 +07:00
Lauri Ojansivu 83cd5e7494 Update translations. 2020-11-18 22:46:39 +02:00
Lauri Ojansivu e1e5554b88 Update ChangeLog. 2020-11-18 22:44:23 +02:00
Lauri Ojansivu 6193a0b64e Set minimum height to icons at All Boards page.
Thanks to xet7 !
2020-11-18 22:42:00 +02:00
Lauri Ojansivu d1c8917cd2 v4.54 2020-11-17 16:02:53 +02:00
Lauri Ojansivu 7e17db4feb Update translations. 2020-11-17 15:49:49 +02:00
Lauri Ojansivu c214510087 Update translations. 2020-11-17 14:16:07 +02:00
Lauri Ojansivu 9bac5aa58e Update ChangeLog. 2020-11-17 14:00:43 +02:00
Lauri Ojansivu 9dbb10c59b Added back variable auto height of icons at All Boards page.
Thanks to xet7 !
2020-11-17 13:59:02 +02:00
Lauri Ojansivu d5325cc830 Update translations. 2020-11-17 13:53:44 +02:00
Lauri Ojansivu 1539da75ed Update ChangeLog. 2020-11-17 12:52:15 +02:00
Lauri Ojansivu f786afc4b9 Upgrade to Node.js 12.19.1
Thanks to Node.js developers!
2020-11-17 12:50:34 +02:00
Lauri Ojansivu 37ae4d5302 Update ChangeLog. 2020-11-17 12:46:13 +02:00
Lauri Ojansivu 37b0543ed6 Merge branch 'helioguardabaxo-master' 2020-11-17 12:44:02 +02:00
helioguardabaxo 69fc2cd8f8 Add keyboard shortcut for search 2020-11-16 19:20:57 -03:00
Lauri Ojansivu 5e03507eba Update translations. 2020-11-16 19:24:12 +02:00
Lauri Ojansivu 01fea212ec v4.53 2020-11-15 00:34:07 +02:00
Lauri Ojansivu 81ff3ec5b1 Update translations. 2020-11-15 00:26:12 +02:00
Lauri Ojansivu 393464f2d8 Update ChangeLog. 2020-11-15 00:23:59 +02:00
Lauri Ojansivu 17867159ea Merge pull request #3351 from danger89/patch-1
Missing bottom padding on lists
2020-11-15 00:21:27 +02:00
Lauri Ojansivu 7b064ce448 Update ChangeLog. 2020-11-15 00:20:49 +02:00
Lauri Ojansivu bf403cacf8 Merge pull request #3348 from jghaanstra/master
Minor improvements to Modern Dark theme
2020-11-15 00:19:10 +02:00
Melroy van den Berg a08bc8bb81 Missing bottom padding on lists
Add some padding to the bottom of the list, much better!
2020-11-14 20:32:52 +01:00
jghaanstra 554e01a172 Minor improvements to Modern Dark theme 2020-11-14 08:35:08 +01:00
Lauri Ojansivu ed4260dd38 Removed not working fix-download-unicode/cfs_access-point.txt from build script.
Thanks to xet7 !
2020-11-13 03:22:28 +02:00
Lauri Ojansivu 9e56cd5ea3 Update ChangeLog. 2020-11-12 20:33:01 +02:00
Lauri Ojansivu 8db8766a48 Merge branch 'master' of github.com:wekan/wekan 2020-11-12 20:23:43 +02:00
Lauri Ojansivu 222fca3ad7 Update markdown-it and markdown-it-emoji dependencies.
Thanks to developers of markdown-it and markdown-it-emoji !
2020-11-12 20:22:54 +02:00
jghaanstra efc50aec07 Minor improvements to Modern Dark theme 2020-11-12 19:17:34 +01:00
Lauri Ojansivu 21aebe845f Uncomment chown. 2020-11-12 16:47:12 +02:00
Lauri Ojansivu 345e2357c8 Install npm. 2020-11-12 16:45:58 +02:00
Lauri Ojansivu 8250cbcf6e Use latest MongoDB on Docker. 2020-11-12 15:57:53 +02:00
Lauri Ojansivu d0040754ea Update Docker upgrade info. 2020-11-12 15:51:23 +02:00
Lauri Ojansivu 22501749da Note: Docker Hub buils are broken. Only Quay works. 2020-11-12 15:43:21 +02:00
Lauri Ojansivu c30bc77eea v4.52 2020-11-12 01:10:38 +02:00
Lauri Ojansivu f74bac4f6b Update ChangeLog. 2020-11-12 00:54:27 +02:00
Lauri Ojansivu f54036225d Merge pull request #3346 from jghaanstra/master
Some more small improvements to Modern Dark theme
2020-11-12 00:52:47 +02:00
jghaanstra f1b680119f Some more small improvements to Modern Dark theme 2020-11-11 23:47:11 +01:00
Lauri Ojansivu 9ffdb83004 v4.51 2020-11-11 14:34:58 +02:00
Lauri Ojansivu 7080a0ce7d Merge branch 'master' of github.com:wekan/wekan 2020-11-11 13:44:20 +02:00
Lauri Ojansivu de4f1aa8c4 Update ChangeLog. 2020-11-11 13:44:04 +02:00
Lauri Ojansivu fa6182b979 Merge pull request #3344 from jghaanstra/master
Improvements Modern Dark Theme
2020-11-11 13:42:49 +02:00
Lauri Ojansivu a457e337ac Update ChangeLog. 2020-11-11 13:41:54 +02:00
Lauri Ojansivu ba2c280d56 Merge pull request #3341 from mfilser/drag_handle_checklist
Drag handles for checklist #3240
2020-11-11 13:39:18 +02:00
Lauri Ojansivu c8ed4947e1 Update ChangeLog. 2020-11-11 13:38:30 +02:00
Lauri Ojansivu 5b700a30d9 Merge branch 'brian-j-master' 2020-11-11 13:36:37 +02:00
Lauri Ojansivu d62f9a716e Merge branch 'master' of https://github.com/brian-j/wekan into brian-j-master 2020-11-11 13:32:29 +02:00
Lauri Ojansivu 949f22acf0 Update ChangeLog. 2020-11-11 13:31:08 +02:00
Lauri Ojansivu 358c411255 Merge pull request #3340 from mfilser/admin_modify_comments
board admin can edit and delete comments as well #3201
2020-11-11 13:27:50 +02:00
jghaanstra cfec612704 Improvements Modern Dark Theme 2020-11-11 12:19:36 +01:00
brian-j 1741808e53 Replace tabs with spaces 2020-11-10 22:01:04 -03:00
Martin Filser fd41e8ba45 Drag handles for checklist #3240 2020-11-11 00:13:26 +01:00
Martin Filser 01285ba10d board admin can edit and delete comments as well #3201 2020-11-10 23:36:30 +01:00
brian-j 0180196d7e Alter call to sanitizeXss
Addressing feature: Custom URL Schemes autolinked #3218

Create a custom SafeAttrValue function which can allow non-standard protocols such as thunderlink: cbthunderlink: and aodroplink: to operate correctly without getting the value stripped away. Any other protocols and code remain to be processed by the default safeAttrValue routine.
2020-11-10 18:03:17 -03:00
Lauri Ojansivu 167d9d34eb v4.50 2020-11-10 13:57:27 +02:00
Lauri Ojansivu ab288f1593 Update translations. 2020-11-10 08:04:11 +02:00
Lauri Ojansivu 5813ad95cf Update ChangeLog. 2020-11-10 07:34:09 +02:00
Lauri Ojansivu 6801c960b1 Fix typo. 2020-11-10 07:23:59 +02:00
Lauri Ojansivu 76d1148a98 Merge pull request #3335 from helioguardabaxo/master
Add 'Modern Dark' theme
2020-11-10 07:22:46 +02:00
Lauri Ojansivu f63ed78f5b Update ChangeLog. 2020-11-10 07:20:21 +02:00
Lauri Ojansivu 0ef248574c Fix edit description to require only one click.
Thanks to uusijani and xet7 !

Fixes #3338
2020-11-10 07:16:14 +02:00
helioguardabaxo 415fac8a25 Add 'Modern Dark' theme 2020-11-08 16:45:15 -03:00
Lauri Ojansivu 6cbb77b591 v4.49 2020-11-04 19:40:11 +02:00
Lauri Ojansivu 65ea8edea7 Update translations. 2020-11-04 19:34:27 +02:00
Lauri Ojansivu c87fbfd3f8 Update ChangeLog. 2020-11-04 17:54:03 +02:00
Lauri Ojansivu faad739f97 Fix Trello import.
Thanks to elct9620 and xet7 !

Fixes #3330
2020-11-04 17:51:17 +02:00
Lauri Ojansivu 38bcb8a724 Update translations. 2020-11-04 17:27:37 +02:00
Lauri Ojansivu 82237f2e79 Update ChangeLog. 2020-11-04 17:20:09 +02:00
Lauri Ojansivu fd363c69cc Translate some part of Gantt chart of Wekan Gantt GPL version.
This only adds translations to all Wekan versions,
not any GPL code to MIT version.

Thanks to xet7 !
2020-11-04 17:15:55 +02:00
Lauri Ojansivu e7769ce467 Update ChangeLog. 2020-11-04 16:32:34 +02:00
Lauri Ojansivu 76273300e7 Changed board icons bigger at All Boards page.
Thanks to xet7 !
2020-11-04 16:28:51 +02:00
Lauri Ojansivu cb6d74d7d9 Update ChangeLog. 2020-11-04 16:21:56 +02:00
Lauri Ojansivu cfe78471aa Merge pull request #3329 from cloudron-io/ldap_sync_email
ldap: sync email address
2020-11-04 16:19:42 +02:00
Girish Ramakrishnan e79e0cfb66 ldap: sync email address 2020-11-03 14:25:42 -08:00
Lauri Ojansivu a74bc81ff8 v4.48 2020-11-02 23:47:50 +02:00
Lauri Ojansivu b10b7a713e Update translations. 2020-11-02 22:13:30 +02:00
Lauri Ojansivu c9a2120c54 Update ChangeLog. 2020-11-02 22:03:56 +02:00
Lauri Ojansivu 4e2d337620 When RICHER_CARD_COMMENT_EDITOR=true, use richer editor
also when editing card description.

Thanks to xet7 !
2020-11-02 21:58:13 +02:00
Lauri Ojansivu ec33cdcb29 Update ChangeLog. 2020-11-02 17:55:28 +02:00
Lauri Ojansivu 4cfddf1d8d Admin Panel / Settings / Layout / Custom Top Left Corner Logo Height.
Thanks to xet7 !
2020-11-02 17:53:01 +02:00
Lauri Ojansivu 3f9b86d8e7 Update ChangeLog. 2020-11-02 16:28:43 +02:00
Lauri Ojansivu f4fdb94a3f Fix Clone Board.
Thanks to e-gaulue and xet7 !

Fixes #3326
2020-11-02 16:25:01 +02:00
Lauri Ojansivu 02856877a6 Update ChangeLog. 2020-11-02 15:53:27 +02:00
Lauri Ojansivu 0a5f9307d2 Smaller board icons to All Boards Page, and use full page width, so more board icons fit visible at once.
Removed variable height, because different heights made it look a little unbalanced.

Thanks to xet7 !
2020-11-02 15:47:00 +02:00
Lauri Ojansivu 579968143c Update ChangeLog. 2020-11-02 15:46:29 +02:00
Lauri Ojansivu aa454a5542 Removed hot-module-replacement and mdg:meteor-apm-agent.
Thanks to xet7 !
2020-11-02 15:43:52 +02:00
Lauri Ojansivu ce563085b5 v4.47 2020-11-01 23:24:24 +02:00
Lauri Ojansivu 6f99b22dc6 Update translations. 2020-11-01 23:22:09 +02:00
Lauri Ojansivu b08f228191 Update ChangeLog. 2020-11-01 23:20:02 +02:00
Lauri Ojansivu 55252300c6 Add settings for OAUTH2_CA_CERT that is
Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299

Thanks to xet7 !

Related #3299 ,
related https://github.com/wekan/wekan/pull/3325
2020-11-01 23:14:20 +02:00
Lauri Ojansivu f99934b994 Update ChangeLog. 2020-11-01 23:02:17 +02:00
Lauri Ojansivu cd16fa43a0 Merge pull request #3325 from faust64/oidc-custom-ca
fix(oidc): wekan/wekan#3299
2020-11-01 22:53:43 +02:00
Samuel MARTIN MORO ae9d82430a fix(oidc): wekan/wekan#3299 2020-11-01 20:48:50 +01:00
Lauri Ojansivu d75ca0c8f0 Added Thanks. 2020-10-31 00:20:36 +02:00
Lauri Ojansivu 66a4b1c2df v4.46 2020-10-30 22:53:06 +02:00
Lauri Ojansivu 6fe39d99ac Update translations. 2020-10-30 22:42:44 +02:00
Lauri Ojansivu 388c249212 Update ChangeLog. 2020-10-30 22:39:37 +02:00
Lauri Ojansivu af583145ed Upgrade to Meteor 2.0-beta.4 .
Thanks to Meteor developers!
2020-10-30 22:37:11 +02:00
Lauri Ojansivu 9c8b7b324f Update ChangeLog. 2020-10-30 22:34:57 +02:00
Lauri Ojansivu a3f5ef1a54 Merge pull request #3323 from jtbairdsr/master
fix: use current boardId when a worker moves a card
2020-10-30 22:32:53 +02:00
Jonathan Baird 305658da3a fix: use current boardId when a worker moves a card 2020-10-30 13:20:29 -06:00
Lauri Ojansivu 2b24ebf539 v4.45 2020-10-30 13:16:18 +02:00
Lauri Ojansivu 13d5015fc3 Update translations. 2020-10-30 13:02:55 +02:00
Lauri Ojansivu 13cf1a687e Update ChangeLog. 2020-10-30 13:00:35 +02:00
Lauri Ojansivu d2f434879c Fix can not upload and download files, by changing back to Node.js 12.19.0 and adding fast-render.
Current file storing to MongoDB code was not yet compatible with newer Node.js.

Thanks to eskogito and xet7 !

Fixes #3320
2020-10-30 12:53:41 +02:00
Lauri Ojansivu c3ffaa7ce2 v4.44 2020-10-28 18:53:31 +02:00
Lauri Ojansivu 2955c167c2 Update ChangeLog. 2020-10-28 18:49:35 +02:00
Lauri Ojansivu 81d1bf6d27 Merge branch 'jtbairdsr-master' 2020-10-28 18:46:08 +02:00
Lauri Ojansivu 46ce345203 Merge branch 'master' of https://github.com/jtbairdsr/wekan into jtbairdsr-master 2020-10-28 18:02:14 +02:00
Jonathan Baird 363e69f01c fix: expose moving cards on mobile to workers
this fix also hides the move to another board functionality in the
submenu (only from the worker) so that the worker is still constrained
to a single board.
2020-10-28 09:38:41 -06:00
Lauri Ojansivu 9b0875169b Update ChangeLog. 2020-10-28 16:34:58 +02:00
Lauri Ojansivu e616247254 For development, add Meteor 2.0 Hot Module Replacement
https://forums.meteor.com/t/meteor-2-0-beta-with-hot-module-replacement-hmr/54313/8

Thanks to zodern!
2020-10-28 16:31:59 +02:00
Lauri Ojansivu cc5f22df79 Update ChangeLog. 2020-10-28 16:18:48 +02:00
Lauri Ojansivu 3448467953 Merge pull request #3312 from helioguardabaxo/master
Fix Modern theme board canvas background
2020-10-28 16:16:19 +02:00
Lauri Ojansivu 74dbb96d85 Update translations. 2020-10-28 16:15:16 +02:00
Lauri Ojansivu d2cfe76a28 Update ChangeLog. 2020-10-28 16:06:27 +02:00
Lauri Ojansivu 045e9db7b8 Upgrade to Node.js 14.15.0
Thanks to Node.js and Meteor.js developers!
2020-10-28 15:57:38 +02:00
Lauri Ojansivu 460b1d3a66 Changed public board changing Swimlanes/Lists/Calendar view
and changing Hide minicard label text
from using cookies to using browser localStorage.

Thanks to xet7 !
2020-10-28 15:45:37 +02:00
Lauri Ojansivu a463f2a855 Upgrade to Meteor 2.0-beta.3. Removed fast-render and ostrio:cookies.
Thanks to xet7 !
2020-10-28 15:44:47 +02:00
helioguardabaxo 8b3399b8f6 Fix Moder theme board canvas background 2020-10-26 19:58:51 -03:00
Lauri Ojansivu ef59d6dcb9 Update ChangeLog. 2020-10-21 19:30:38 +03:00
Lauri Ojansivu 1b429b3f99 Fixed: With ORACLE_OIM_ENABLED, allow setting OAUTH2_REQUEST_PERMISSIONS with environment variable.
Thanks to xet7 !
2020-10-21 19:20:48 +03:00
Lauri Ojansivu 5098f7dee1 v4.43 2020-10-20 19:11:48 +03:00
Lauri Ojansivu c509aaf246 Update translations. 2020-10-20 19:04:18 +03:00
Lauri Ojansivu d7333dec84 Fixed CSV/TSV export. Please test.
Thanks to xet7 !

Related #3173
2020-10-20 18:59:41 +03:00
Lauri Ojansivu 9d97494cfc Update ChangeLog. 2020-10-16 23:58:54 +03:00
Lauri Ojansivu acf9e7caea Allow more than one assignee.
Thanks to xet7 !

Fixes #3302
2020-10-16 23:56:20 +03:00
Lauri Ojansivu f6d000b26a Update translations. 2020-10-16 23:42:12 +03:00
Lauri Ojansivu ba5b35d0cc v4.42 2020-10-14 21:51:51 +03:00
Lauri Ojansivu 1eae8222c4 Update translations. 2020-10-14 21:40:32 +03:00
Lauri Ojansivu 9b5a519bc7 Update ChangeLog. 2020-10-12 16:42:26 +03:00
Lauri Ojansivu b8a209249e Updagrade to Node.js 12.19.0.
Thanks to Node.js developers !
2020-10-12 16:39:47 +03:00
Lauri Ojansivu ecc1b69f5c Update translations. 2020-10-12 16:19:25 +03:00
Lauri Ojansivu 6253bc6c14 Merge branch 'master' of github.com:wekan/wekan 2020-10-11 01:50:44 +03:00
Lauri Ojansivu 7768a4c1ba Reverted systemd changes that caused Snap to fail building.
Thanks to xet7 !
2020-10-11 01:50:24 +03:00
Lauri Ojansivu cd1bc7a695 Reverted systemd changed that caused Snap to fail building. 2020-10-11 01:49:55 +03:00
Lauri Ojansivu 42f45f9a83 Update translations. 2020-10-10 20:13:45 +03:00
Lauri Ojansivu d081eb0a2e Update dependencies. 2020-10-10 20:10:08 +03:00
Lauri Ojansivu 504533991b Update translations. 2020-10-04 23:25:23 +03:00
Lauri Ojansivu 44a5976b85 Update ChangeLog. 2020-10-03 23:51:54 +03:00
Lauri Ojansivu ac65b93b43 Added restart on failure delay of 10 seconds to Snap.
Thanks to xet7 !

Related #3293
2020-10-03 23:48:11 +03:00
Lauri Ojansivu e9d27c521e Update translations. 2020-10-03 23:23:26 +03:00
Lauri Ojansivu dc86ae21de v4.41 2020-10-03 00:34:30 +03:00
Lauri Ojansivu befb0f18b6 Update ChangeLog. 2020-10-03 00:28:41 +03:00
Lauri Ojansivu b796a6cbf4 Update dependencies. 2020-10-03 00:27:22 +03:00
Lauri Ojansivu 9336a55a50 Update ChangeLog. 2020-10-03 00:24:39 +03:00
Lauri Ojansivu 26749442fd Update translations. 2020-10-03 00:23:03 +03:00
Lauri Ojansivu 7223d6e750 At Admin Panel / Layout: Text below custom login logo. Can have markdown formatting.
Thanks to xet7 !
2020-10-03 00:21:19 +03:00
Lauri Ojansivu 41a8e79e0e Update ChangeLog. 2020-10-02 23:35:16 +03:00
Lauri Ojansivu ec8a78537f Login with OIDC OAuth2 Oracle on premise identity manager OIM, with setting ORACLE_OIM_ENABLED=true.
Thanks to xet7 !
2020-10-02 23:15:39 +03:00
Lauri Ojansivu 4eb7597aa9 Update translations. 2020-10-02 21:14:45 +03:00
Lauri Ojansivu 3d13fa3a26 Update translations. 2020-09-20 15:05:21 +03:00
Lauri Ojansivu 655fe8afd3 v4.40 2020-09-18 19:50:40 +03:00
Lauri Ojansivu 855c66976e Update ChangeLog. 2020-09-18 19:46:27 +03:00
Lauri Ojansivu 185cf163b2 Upgrade to Meteor v1.11.1 .
Thanks to Meteor developers !
2020-09-18 19:42:34 +03:00
Lauri Ojansivu 45b7365025 Update translations. 2020-09-18 19:34:56 +03:00
Lauri Ojansivu ed5f64ccd6 Update ChangeLog. 2020-09-18 19:23:16 +03:00
Lauri Ojansivu 3fc80e1145 Better translation: Target URL to Link URL. 2020-09-18 19:20:16 +03:00
Lauri Ojansivu 05e3fc31b4 Remove extra translation that is not used. 2020-09-18 19:06:02 +03:00
Lauri Ojansivu d5e1c4bfa5 Update ChangeLog. 2020-09-18 18:58:22 +03:00
Lauri Ojansivu a7c3317ed6 Custom Logo for Login and Top Left Corner. Optional link when clicking logo. Settings at Admin Panel / Layout.
Thanks to xet7 !

Fixes #1493,
fixes #2721,
fixes #2681,
fixes #1583,
fixes #1196,
fixes #336,
fixes wekan/wekan-snap#130
2020-09-18 18:45:48 +03:00
Lauri Ojansivu 7db08082bc v4.39 2020-09-17 00:19:45 +03:00
Lauri Ojansivu 32836d42c9 Update ChangeLog. 2020-09-16 23:26:38 +03:00
Lauri Ojansivu 789c4b480a Update translations. 2020-09-16 23:23:22 +03:00
Lauri Ojansivu abe291837a Merge branch 'Akuket-feature/impersonate-user' 2020-09-16 23:12:25 +03:00
Lauri Ojansivu 81ac0fdba9 Add translations strings for impersonate user feature.
Thanks to xet7 !
2020-09-16 23:11:43 +03:00
Guillaume d19cc972e0 Add admin ability : Impersonate one user. 2020-09-16 18:11:19 +00:00
Lauri Ojansivu 8f6c3550e3 v4.38 2020-09-16 05:52:19 +03:00
Lauri Ojansivu 40681ccda4 Update translations. 2020-09-16 05:43:58 +03:00
Lauri Ojansivu 4f76e1e1eb Update ChangeLog. 2020-09-16 05:42:15 +03:00
Lauri Ojansivu 5cd9f89b21 Upgrade to Node.js v12.18.4.
Thanks to Node developers !
2020-09-16 05:35:21 +03:00
Lauri Ojansivu b24685e38d v4.37 2020-09-15 23:19:51 +03:00
Lauri Ojansivu 5d7aa373fd Update translations. 2020-09-15 23:17:44 +03:00
Lauri Ojansivu e79b7fad0a Update release scripts. 2020-09-15 23:14:05 +03:00
Lauri Ojansivu e05541da88 Update translations. 2020-09-15 22:51:51 +03:00
Lauri Ojansivu 0ccbfcfc9e Merge branch 'master' of github.com:wekan/wekan 2020-09-15 22:39:29 +03:00
Lauri Ojansivu 8e6a570d47 Update ChangeLog. 2020-09-15 22:39:13 +03:00
Lauri Ojansivu 129a884a4e Merge branch 'helioguardabaxo-master' 2020-09-15 22:34:49 +03:00
Lauri Ojansivu 2d278f303a Fix linting.
Thanks to xet7 !
2020-09-15 22:34:19 +03:00
Lauri Ojansivu dd67bd4b5e Merge branch 'master' of https://github.com/helioguardabaxo/wekan into helioguardabaxo-master 2020-09-15 22:29:00 +03:00
Lauri Ojansivu 17239fe052 Merge pull request #3278 from devilmengcry/patch-1
Update docker-compose.yml
2020-09-15 22:26:01 +03:00
helioguardabaxo 389908be7c Adjut cardPanelWidth for card details 2020-09-15 16:00:23 -03:00
helioguardabaxo 33cf589c05 UI improvements in filter, multi-selection and rules 2020-09-15 12:47:07 -03:00
李李李 d961355016 Update docker-compose.yml
yaml.parser.ParserError
2020-09-15 20:16:42 +08:00
Lauri Ojansivu 9a72cf7ac2 v4.36 2020-09-15 04:32:12 +03:00
Lauri Ojansivu 53027559cd Update translations. 2020-09-15 04:27:59 +03:00
Lauri Ojansivu 2e5545491b Update ChangeLog. 2020-09-15 04:26:36 +03:00
Lauri Ojansivu f9b0da65f1 Added translations for date selection popups.
Thanks to xet7 !

Fixes #1670
2020-09-15 04:21:23 +03:00
Lauri Ojansivu 4c734ee70f v4.35 2020-09-14 21:29:59 +03:00
Lauri Ojansivu 7173e293ef Try to fix Snap. 2020-09-14 21:26:35 +03:00
Lauri Ojansivu 19ff17b3a5 v4.34 2020-09-14 21:04:01 +03:00
Lauri Ojansivu d2b84c7773 Try to fix Snap. 2020-09-14 20:55:04 +03:00
Lauri Ojansivu 623d6c09c4 v4.33 2020-09-14 20:31:24 +03:00
Lauri Ojansivu 8ae80138a0 Update ChangeLog. 2020-09-14 20:28:17 +03:00
Lauri Ojansivu cca041e21a Update dependencies.
Thanks to developers of dependencies !
2020-09-14 20:26:32 +03:00
Lauri Ojansivu b333061de7 Update translations. 2020-09-14 20:20:45 +03:00
Lauri Ojansivu abf4322b6c Add dot. 2020-09-14 20:17:36 +03:00
Lauri Ojansivu 4e1a73fa27 Update ChangeLog. 2020-09-14 20:17:02 +03:00
Lauri Ojansivu 214c86cc22 Added some CAS and SAML settings. Not tested. Please test and send pull requests if it does not work.
See https://github.com/wekan/wekan/wiki/SAML and https://github.com/wekan/wekan/wiki/CAS

Thanks to xet7 !

Related #3204,
related #708
2020-09-14 19:57:50 +03:00
Lauri Ojansivu e0192f570e Update translations. 2020-09-13 17:10:03 +03:00
Lauri Ojansivu f5b5ab6331 Update translations. 2020-09-13 12:57:34 +03:00
Lauri Ojansivu d1c83b28f3 Update translations. 2020-09-13 12:46:58 +03:00
Lauri Ojansivu aa12b3f162 v4.32 2020-09-13 12:31:56 +03:00
Lauri Ojansivu 754087b5cf v4.31 2020-09-13 11:58:54 +03:00
Lauri Ojansivu e656e36a92 Update translations. 2020-09-13 11:55:56 +03:00
Lauri Ojansivu 0bf138281e Update ChangeLog. 2020-09-13 11:53:58 +03:00
Lauri Ojansivu fe62e12ab4 Try to fix Snap.
Thanks to xet7 !
2020-09-13 11:51:56 +03:00
Lauri Ojansivu 3c64c504c8 Add missing text. 2020-09-13 11:17:03 +03:00
190 changed files with 11995 additions and 2301 deletions

No files matched your search

+23 -3
View File
@@ -1,12 +1,16 @@
FROM ubuntu:rolling
FROM quay.io/wekan/ubuntu:groovy-20201125.2
LABEL maintainer="sgr"
# 2020-12-03:
# - Above Ubuntu base image copied from Docker Hub ubuntu:groovy-20201125.2
# to Quay to avoid Docker Hub rate limits.
ENV BUILD_DEPS="gnupg gosu bsdtar wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v12.18.3 \
NODE_VERSION=v12.20.1 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -39,6 +43,7 @@ ENV \
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
OAUTH2_CLIENT_ID="" \
@@ -113,7 +118,22 @@ ENV \
CORS_ALLOW_HEADERS="" \
CORS_EXPOSE_HEADERS="" \
DEFAULT_AUTHENTICATION_METHOD="" \
PASSWORD_LOGIN_ENABLED=true
PASSWORD_LOGIN_ENABLED=true \
CAS_ENABLED=false \
CAS_BASE_URL="" \
CAS_LOGIN_URL="" \
CAS_VALIDATE_URL="" \
SAML_ENABLED=false \
SAML_PROVIDER="" \
SAML_ENTRYPOINT="" \
SAML_ISSUER="" \
SAML_CERT="" \
SAML_IDPSLO_REDIRECTURL="" \
SAML_PRIVATE_KEYFILE="" \
SAML_PUBLIC_CERTFILE="" \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES=""
# Install OS
RUN set -o xtrace \
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.18.3
node-engine: 12.20.1
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.18.3
node-engine: 12.20.1
node-packages:
- node-gyp
- node-pre-gyp
+1
View File
@@ -5,6 +5,7 @@
tmp/
node_modules/
npm-debug.log
.gitmodules
.vscode/
.idea/
.build/*
+56 -8
View File
@@ -6,8 +6,8 @@
meteor-base@1.4.0
# Build system
ecmascript@0.14.3
standard-minifier-css@1.6.0
ecmascript@0.14.4
standard-minifier-css@1.7.1
standard-minifier-js@2.6.0
mquandalle:jade
coffeescript@2.4.1!
@@ -23,7 +23,7 @@ dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
mongo@1.10.0
mongo@1.10.1
mquandalle:collection-mutations
# Account system
@@ -72,17 +72,15 @@ simple:rest-accounts-password
useraccounts:core
email@2.0.0
horka:swipebox
dynamic-import@0.5.2
staringatlights:fast-render
dynamic-import@0.5.4
accounts-password@1.6.2
accounts-password@1.6.3
cfs:gridfs
rzymek:fullcalendar
momentjs:moment@2.22.2
browser-policy-framing@1.1.0
mquandalle:moment
msavin:usercache
mdg:meteor-apm-agent@3.2.0-rc.0!
# Keep stylus in 1.1.0, because building v2 takes extra 52 minutes.
coagmano:stylus@1.1.0!
lucasantoniassi:accounts-lockout
@@ -95,5 +93,55 @@ konecty:mongo-counter
percolate:synced-cron
easylogic:summernote
cfs:filesystem
ostrio:cookies
tmeasday:check-npm-versions
steffo:meteor-accounts-saml
rajit:bootstrap3-datepicker-fi
rajit:bootstrap3-datepicker-ar
rajit:bootstrap3-datepicker-bg
rajit:bootstrap3-datepicker-br
rajit:bootstrap3-datepicker-ca
rajit:bootstrap3-datepicker-cs
rajit:bootstrap3-datepicker-da
rajit:bootstrap3-datepicker-de
rajit:bootstrap3-datepicker-el
rajit:bootstrap3-datepicker-en-gb
rajit:bootstrap3-datepicker-eo
rajit:bootstrap3-datepicker-es
rajit:bootstrap3-datepicker-eu
rajit:bootstrap3-datepicker-fa
rajit:bootstrap3-datepicker-fr
rajit:bootstrap3-datepicker-gl
rajit:bootstrap3-datepicker-he
rajit:bootstrap3-datepicker-hi
rajit:bootstrap3-datepicker-hu
rajit:bootstrap3-datepicker-hy
rajit:bootstrap3-datepicker-id
rajit:bootstrap3-datepicker-it
rajit:bootstrap3-datepicker-ja
rajit:bootstrap3-datepicker-ka
rajit:bootstrap3-datepicker-km
rajit:bootstrap3-datepicker-ko
rajit:bootstrap3-datepicker-lv
rajit:bootstrap3-datepicker-mk
rajit:bootstrap3-datepicker-mn
rajit:bootstrap3-datepicker-nb
rajit:bootstrap3-datepicker-nl
rajit:bootstrap3-datepicker-oc
rajit:bootstrap3-datepicker-pl
rajit:bootstrap3-datepicker-pt-br
rajit:bootstrap3-datepicker-pt
rajit:bootstrap3-datepicker-ro
rajit:bootstrap3-datepicker-ru
rajit:bootstrap3-datepicker-sl
rajit:bootstrap3-datepicker-sr
rajit:bootstrap3-datepicker-sv
rajit:bootstrap3-datepicker-sw
rajit:bootstrap3-datepicker-ta
rajit:bootstrap3-datepicker-th
rajit:bootstrap3-datepicker-tr
rajit:bootstrap3-datepicker-uk
rajit:bootstrap3-datepicker-vi
rajit:bootstrap3-datepicker-zh-cn
rajit:bootstrap3-datepicker-zh-tw
staringatlights:fast-render
spacebars
+1 -1
View File
@@ -1 +1 @@
METEOR@1.11
METEOR@1.12
+61 -14
View File
@@ -1,7 +1,7 @@
3stack:presence@1.1.2
accounts-base@1.7.0
accounts-base@1.7.1
accounts-oauth@1.2.0
accounts-password@1.6.2
accounts-password@1.6.3
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
@@ -11,7 +11,7 @@ allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.6.0
babel-compiler@7.5.3
babel-compiler@7.5.4
babel-runtime@1.5.0
base64@1.0.12
binary-heap@1.0.11
@@ -55,9 +55,9 @@ ddp-rate-limiter@1.0.9
ddp-server@2.3.2
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.5.2
dynamic-import@0.5.4
easylogic:summernote@0.8.8
ecmascript@0.14.3
ecmascript@0.14.4
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.11.0
ecmascript-runtime-server@0.10.0
@@ -91,7 +91,6 @@ logging@1.1.20
lucasantoniassi:accounts-lockout@1.0.0
matb33:collection-hooks@0.9.1
matteodem:easy-search@1.6.4
mdg:meteor-apm-agent@3.3.0
mdg:validation-error@0.5.1
meteor@1.9.3
meteor-base@1.4.0
@@ -104,14 +103,14 @@ meteorspark:util@0.2.0
minifier-css@1.5.3
minifier-js@2.6.0
minifiers@1.1.8-faster-rebuild.0
minimongo@1.6.0
minimongo@1.6.1
mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.15.0
modules-runtime@0.12.0
momentjs:moment@2.27.0
mongo@1.10.0
mongo-decimal@0.1.1
momentjs:moment@2.29.1
mongo@1.10.1
mongo-decimal@0.1.2
mongo-dev-server@1.1.0
mongo-id@1.0.7
mongo-livedata@1.0.12
@@ -127,12 +126,11 @@ mquandalle:mousetrap-bindglobal@0.0.1
msavin:usercache@1.8.0
npm-bcrypt@0.9.3
npm-mongo@3.8.1
oauth@1.3.0
oauth@1.3.2
oauth2@1.3.0
observe-sequence@1.0.16
ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
ostrio:cookies@2.6.0
peerlibrary:assert@0.3.0
peerlibrary:base-component@0.16.0
peerlibrary:blaze-components@0.15.1
@@ -143,11 +141,59 @@ promise@0.11.2
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
rajit:bootstrap3-datepicker@1.7.1_1
rajit:bootstrap3-datepicker-ar@1.7.1
rajit:bootstrap3-datepicker-bg@1.7.1
rajit:bootstrap3-datepicker-br@1.7.1
rajit:bootstrap3-datepicker-ca@1.7.1
rajit:bootstrap3-datepicker-cs@1.7.1
rajit:bootstrap3-datepicker-da@1.7.1
rajit:bootstrap3-datepicker-de@1.7.1
rajit:bootstrap3-datepicker-el@1.7.1
rajit:bootstrap3-datepicker-en-gb@1.7.1
rajit:bootstrap3-datepicker-eo@1.7.1
rajit:bootstrap3-datepicker-es@1.7.1
rajit:bootstrap3-datepicker-eu@1.7.1
rajit:bootstrap3-datepicker-fa@1.7.1
rajit:bootstrap3-datepicker-fi@1.7.1
rajit:bootstrap3-datepicker-fr@1.7.1
rajit:bootstrap3-datepicker-gl@1.7.1
rajit:bootstrap3-datepicker-he@1.7.1
rajit:bootstrap3-datepicker-hi@1.7.1
rajit:bootstrap3-datepicker-hu@1.7.1
rajit:bootstrap3-datepicker-hy@1.7.1
rajit:bootstrap3-datepicker-id@1.7.1
rajit:bootstrap3-datepicker-it@1.7.1
rajit:bootstrap3-datepicker-ja@1.7.1
rajit:bootstrap3-datepicker-ka@1.7.1
rajit:bootstrap3-datepicker-km@1.7.1
rajit:bootstrap3-datepicker-ko@1.7.1
rajit:bootstrap3-datepicker-lv@1.7.1
rajit:bootstrap3-datepicker-mk@1.7.1
rajit:bootstrap3-datepicker-mn@1.7.1
rajit:bootstrap3-datepicker-nb@1.7.1
rajit:bootstrap3-datepicker-nl@1.7.1
rajit:bootstrap3-datepicker-oc@1.7.1
rajit:bootstrap3-datepicker-pl@1.7.1
rajit:bootstrap3-datepicker-pt@1.7.1
rajit:bootstrap3-datepicker-pt-br@1.7.1
rajit:bootstrap3-datepicker-ro@1.7.1
rajit:bootstrap3-datepicker-ru@1.7.1
rajit:bootstrap3-datepicker-sl@1.7.1
rajit:bootstrap3-datepicker-sr@1.7.1
rajit:bootstrap3-datepicker-sv@1.7.1
rajit:bootstrap3-datepicker-sw@1.7.1
rajit:bootstrap3-datepicker-ta@1.7.1
rajit:bootstrap3-datepicker-th@1.7.1
rajit:bootstrap3-datepicker-tr@1.7.1
rajit:bootstrap3-datepicker-uk@1.7.1
rajit:bootstrap3-datepicker-vi@1.7.1
rajit:bootstrap3-datepicker-zh-cn@1.7.1
rajit:bootstrap3-datepicker-zh-tw@1.7.1
random@1.2.0
rate-limit@1.0.9
reactive-dict@1.3.0
reactive-var@1.0.11
reload@1.3.0
reload@1.3.1
retry@1.1.0
routepolicy@1.1.0
rzymek:fullcalendar@3.8.0
@@ -166,10 +212,11 @@ softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
srp@1.1.0
standard-minifier-css@1.6.0
standard-minifier-css@1.7.1
standard-minifier-js@2.6.0
staringatlights:fast-render@3.3.0
staringatlights:inject-data@2.3.0
steffo:meteor-accounts-saml@0.0.18
tap:i18n@1.8.2
templates:tabs@2.3.0
templating@1.3.2
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.18.3
TRAVIS_NODE_VERSION: 12.20.1
TRAVIS_NPM_VERSION: latest
before_install:
+1 -1
View File
@@ -39,7 +39,7 @@ host = https://www.transifex.com
# tap:i18n requires us to use `-` separator in the language identifiers whereas
# Transifex uses a `_` separator, without an option to customize it on one side
# or the other, so we need to do a Manual mapping.
lang_map = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_PE:es-PE, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
lang_map = bg_BG:bg, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
[wekan.application]
file_filter = i18n/<lang>.i18n.json
+633 -1
View File
@@ -1,3 +1,635 @@
# v4.70 2021-01-04 Wekan release
This release adds the following CRITICAL SECURITY FIXES:
- [Upgrade to Node.js 12.20.1](https://github.com/wekan/wekan/commit/4bfe017b08f573991fd1f9229ae53573798f475e).
Thanks to Node developers.
and adds the following new features:
- [Added many new translations to Wekan, now there is total 60 translations in Wekan. Updated translations. Organized pull-translations.sh alphabetically by
language name](https://github.com/wekan/wekan/commit/d171f4088f40512d321969df3f0c280a620c0c5f).
Thanks to translators and xet7.
- [Added markdown and emoji to My Cards board, swimlane and list names](https://github.com/wekan/wekan/commit/763dc9c8e0122990c5f496392f2cce980c535dce).
Thanks to xet7.
- [Show Admin Panel / People and Version also on mobile MiniScreen](https://github.com/wekan/wekan/commit/754a91dbdc3d7111c367cb5dd0a02250a837e42a).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.69 2021-01-02 Wekan release
This release adds the following new features:
- Teams/Organizations to Admin Panel. In Progress.
[Part 2](https://github.com/wekan/wekan/commit/ad482d5cfb72591f1b5c749c3c0156000dbf660a).
[Part 3](https://github.com/wekan/wekan/commit/b64cd358ed0af4395357423ad172b8dac9dc3178).
Thanks to xet7.
- [My Cards](https://github.com/wekan/wekan/pull/3413).
Thanks to jrsupplee.
and adds the following UI changes:
- [Moved Public/Archive/Templates/etc options to click right top username Member Settings menu, where My Cards also
is](https://github.com/wekan/wekan/commit/0592b0c56ac372c87dea17f0a090e7d7569430d1).
Thanks to xet7.
- [Reorder My Cards to be first at menu](https://github.com/wekan/wekan/commit/bfc16fc5442e8cc8c3cc03df992d5b1d1724338b).
Thanks to xet7.
and fixes the following bugs:
- [New Checklistitems are now autoresized too](https://github.com/wekan/wekan/pull/3411).
Thanks to mfilser.
- [Swimlane + and = Icons resized for better handling at mobile view](https://github.com/wekan/wekan/pull/3412).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.68 2020-12-29 Wekan release
This release fixes the following bugs:
- [Checklist-Items, Drag-Drop Handle now at the left side](https://github.com/wekan/wekan/pull/3407).
Thanks to mfilser.
- [Checklist-Items, Autoresize the textarea vertically to fit the user-input](https://github.com/wekan/wekan/pull/3408).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.67 2020-12-29 Wekan release
This release adds the following new features:
- Teams/Organizations to Admin Panel. In Progress.
[Part 1](https://github.com/wekan/wekan/commit/9e2093d6aed38e66fc4d63823315c9382e013a32).
Thanks to xet7.
and fixes the following bugs:
- [Checklist Mini-Screen, appendTo: 'parent' not necessary anymore](https://github.com/wekan/wekan/pull/3405).
Thanks to mfilser.
- [Allow to edit email verified and initials at Admin Panel/People/People](https://github.com/wekan/wekan/commit/d03e2170dd10741bd78722cc35b52cffa220a2e7).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.66 2020-12-27 Wekan release
This release fixes the following bugs:
- [Fix Mobile miniscreen: Drag handle not visible in long checklist item
text](https://github.com/wekan/wekan/commit/a8453657c95a4bde2ae86b4c77e55bb2174adf26).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.65 2020-12-26 Wekan release
This release fixes the following bugs:
- [Fixed Drag and drop between checklists closes the card sometimes on
Firefox](https://github.com/wekan/wekan/commit/c7808c5c03f98eae709e5ef89e8e17af4689cb2e).
xet7 thanks mfilser about [similar fix of appendTo parent](https://github.com/wekan/wekan/pull/3342)
that did work here too to fix this.
Thanks to mfilser and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.64 2020-12-24 Wekan release
This release fixes the following bugs:
- [Dark theme button background fix](https://github.com/wekan/wekan/pull/3401).
Thanks to jasontamez.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.63 2020-12-21 Wekan release
This release fixes the following bugs:
- [Fixed Remove Cover button gives JS error](https://github.com/wekan/wekan/commit/28850e5510f2aaefcae404efac1973c12f1cca65).
Thanks to tsukasa1989 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.62 2020-12-18 Wekan release
This release fixes the following bugs:
- [Treat unknown attachment types as binary on board
import/clone](https://github.com/wekan/wekan/pull/3395).
Thanks to daniel-eder.
- [Fix Move card from a board to another does not work anymore](https://github.com/wekan/wekan/commit/9dd0fb88d6cb3378a8fc96aaf60214020efeaed1).
Thanks to lezioul and xet7.
- [Add some permission code, to see does it fix something](https://github.com/wekan/wekan/commit/7f3c4acf62deefa2f7b36b986e06336fd3b2754f).
Thanks to xet7.
- [Fix delete board button not visible](https://github.com/wekan/wekan/commit/53a925cf7ff95167cbf2f65f7c7e169e18b14b44).
Thanks to airtraxx and xet7.
- [Board: When removing member from board, remove also from assignees.
Admin Panel/People: 1) Allow edit user that does not have email address.
2) When creating new user, require username and email address, and save also fullname.
3) Some in progress code for deleting user, that does not work correctly yet, so deleting user is not enabled
yet](https://github.com/wekan/wekan/commit/61ae62a83aaddb2c6f679ce9d05b675c845ba8bf).
Thanks to airtraxx and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.61 2020-12-16 Wekan release
This release fixes the following bugs:
- [Removed cookie code that is not in use](https://github.com/wekan/wekan/commit/3c406d955ec602d4b86c164acb9e94e715086f8e).
Thanks to xet7.
- [Allow normal user to delete checklist item](https://github.com/wekan/wekan/commit/f9ba17177e8f1146be1e571f47d26c13a9337034).
Thanks to Samunosuke and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.60 2020-12-15 Wekan release
This release adds the following updates:
- Update dependencies.
[Part 1](https://github.com/wekan/wekan/commit/2e1e703e3591258462b3167f72e2b2319bf57bec),
[Part 2](https://github.com/wekan/wekan/commit/a75c162483795775db1631686f8e7017b42c87ca).
Thanks to developers of dependencies.
and fixes the following bugs:
- Prevent normal user deleting or modifying too much. Allow normal user to export board.
[Part1](https://github.com/wekan/wekan/commit/4a205fcfcb40438faead3bf8973b10b8e42974f0),
[Part2](https://github.com/wekan/wekan/commit/6cb4b9fe4a086202d642de54464088e0a1122ec0).
Thanks to Samunosuke, pgh2357 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.59 2020-12-10 Wekan release
This release fixes the following bugs:
- [Fix not all checklist items being imported/cloned](https://github.com/wekan/wekan/pull/3389).
Thanks to daniel-eder.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.58 2020-12-09 Wekan release
This release fixes the following bugs:
- [Fix issues when duplicating board](https://github.com/wekan/wekan/pull/3387).
Thanks to daniel-eder.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.57 2020-12-08 Wekan release
This release adds the following new features:
- [Helm: Introduce secretEnv for secret value provisioning](https://github.com/wekan/wekan/pull/3382).
Thanks to ThoreKr.
- REST API: List attachments of a board, with download URLs of attachments. In Progress.
[Part 1](https://github.com/wekan/wekan/commit/bf94161f30adf9dec6aa41af6946ba54c1573a44),
[Part 2](https://github.com/wekan/wekan/commit/2ec53b27d14049bc9622861492cac301512a1e33),
[Part 3](https://github.com/wekan/wekan/commit/36e29a405ee943d15e6e1bd9ac02ecefb7a7a06f).
For using this, Python code example:
https://github.com/wekan/wekan/wiki/New-card-with-Python3-and-REST-API .
Thanks to xet7.
- REST API: Added Wekan REST API Python CLI, for adding card, etc. In Progress,
downloading attachments does not work yet.
[Part1](https://github.com/wekan/wekan/commit/051f7b2769c51404063e7f0ddf85fbd0f9508a88),
[Part2](https://github.com/wekan/wekan/commit/387f0600ce1389aab955cc125d331dcd5eeeafdd).
Thanks to xet7.
- [Drag handles at checklist items on mobile view](https://github.com/wekan/wekan/pull/3342).
Thanks to mfilser.
and adds the following updates:
- [Upgrade to Meteor 1.12](https://github.com/wekan/wekan/commit/7a6abaac44b1235021dc7cc25e3224515c64a068).
Thanks to Meteor developers.
- [Upgrade to Node 12.20.0](https://github.com/wekan/wekan/commit/015f4d671d136a4a344fe82e2a6bcbe0c2be6cfd).
Thanks to Node developers.
and fixes the following bugs:
- [Fixed Quay Docker builds that failed](https://github.com/wekan/wekan/issues/3380)
because of Docker Hub rate limits by copying base images from Docker Hub to Quay.
[Part1](https://github.com/wekan/wekan/commit/4537971300c6ffcc85b7dd930867eb942bd22f86),
[Part2](https://github.com/wekan/wekan/commit/2b2884d996b8fc6101eff50db058639631eb5945),
[Part3](https://github.com/wekan/wekan/commit/c09758fb913d73e9229f43d17663b3c4715a62b9).
Thanks to xet7.
- [Hide duplicate create board button, because it did not show board templates
correctly](https://github.com/wekan/wekan/commit/a7977a8fc7f171d046a228f81fb0cd481b0ccc41).
Thanks to xet7.
- [Minicard, reduce space after assignees label](https://github.com/wekan/wekan/pull/3385).
Thanks to mfilser.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.56 2020-11-30 Wekan release
This release adds the following new features:
- [Added date notification icons](https://github.com/wekan/wekan/pull/3366).
This partially resolves [#3363](https://github.com/wekan/wekan/issues/3363).
Thanks to helioguardabaxo.
- Attempt to implement date activities notification [Part1](https://github.com/wekan/wekan/pull/3372)
and [Part2](https://github.com/wekan/wekan/pull/3373).
Thanks to helioguardabaxo.
- [Sticky swimlane](https://github.com/wekan/wekan/pull/3370).
Thanks to progressify and xet7.
- [1) New default: sudo snap set wekan mongo-log-destination='devnull'.
Other options: syslog/snapcommon.
This should lower amount of disk usage and logs.
2) Tried to fix command:
`sudo snap set wekan mongo-url='...'`](https://github.com/wekan/wekan/commit/5510c2a37dc6bcfa0ec588eceb8dc9f32cec9851).
Thanks to xet7.
and adds the following improvements:
- [Improvements in activities design](https://github.com/wekan/wekan/pull/3374).
Thanks to helioguardabaxo.
and fixes the following bugs:
- [Fix typo on MONGO_URL on Snap](https://github.com/wekan/wekan/commit/05a72f7c627e05ac4ce38cb9588f2aac45273ce8).
Thanks to xet7.
- [Fix: Update helm mongodb dependency](https://github.com/wekan/wekan/pull/3369).
Thanks to jiangytcn.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.55 2020-11-21 Wekan release
This release adds the following improvements:
- [Set minimum height to icons at All Boards page](https://github.com/wekan/wekan/commit/6193a0b64e85df2f2353192e7efb16680b436622).
Thanks to xet7.
- [Increase avatar size](https://github.com/wekan/wekan/pull/3360).
Thanks to centralhardware.
- [Modern Dark theme: card details as lightbox](https://github.com/wekan/wekan/pull/3359).
Thanks to jghaanstra.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.54 2020-11-17 Wekan release
This release adds the following new features:
- [Add keyboard shortcut / for search](https://github.com/wekan/wekan/pull/3354).
Thanks to helioguardabaxo.
- [Added back variable auto height of icons at All Boards page](https://github.com/wekan/wekan/commit/9dbb10c59b4bb1b16b7942cc0b60741a1fbe9110).
Thanks to xet7.
and adds the following updates:
- [Upgrade to Node.js 12.19.1](https://github.com/wekan/wekan/commit/f786afc4b9d0e5e4a057b5f3d7995377873022cf).
Thanks to Node.js developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.53 2020-11-15 Wekan release
This release adds the following updates:
- [Use Quay for Docker builds, because Docker Hub builds show ENOMEM error](https://github.com/wekan/wekan/commit/22501749da708a51b89ef9ff0aee4ac6ba529ed9).
Thanks to xet7.
- [Update Docker upgrade info](https://github.com/wekan/wekan/commit/d0040754ea75a26926a187ce47dbe529a15e0926).
Thanks to xet7.
- [Use latest MongoDB on Docker](https://github.com/wekan/wekan/commit/8250cbcf6e417d21ffdc4f14495792768b0bc9ef).
Thanks to xet7.
- [In rebuild-wekan.sh install dependencies, Install npm](https://github.com/wekan/wekan/commit/345e2357c8fd030e943f9729f790db980d3a727c).
Thanks to xet7.
- [In rebuild-wekan.sh install dependencies, uncomment chown](https://github.com/wekan/wekan/commit/21aebe845f3f4911d9bb824f0f33bdb19a3a9af6).
Thanks to xet7.
- [Update markdown-it and markdown-it-emoji dependencies](https://github.com/wekan/wekan/commit/222fca3ad7aa2b67329dca64e84eb72899fd8137).
Thanks to developers of markdown-it and markdown-it-emoji.
and adds the following improvements:
- [Minor improvements to Modern Dark theme](https://github.com/wekan/wekan/pull/3348).
Thanks to jghaanstra.
- [Added missing bottom padding to lists](https://github.com/wekan/wekan/pull/3351).
Thanks to danger89.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.52 2020-11-12 Wekan release
This release adds the following improvements:
- [Some more small improvements to Modern Dark theme](https://github.com/wekan/wekan/pull/3346).
Thanks to jghaanstra.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.51 2020-11-11 Wekan release
This release adds the following new features:
- [Board admin can edit and delete comments as well](https://github.com/wekan/wekan/pull/3340).
Thanks to mfilser.
- [Drag handles for checklist](https://github.com/wekan/wekan/pull/3341).
Thanks to mfilser.
- [Custom URL Schemes autolinked](https://github.com/wekan/wekan/pull/3339).
Thanks to brian-j.
and adds the following improvements:
- [Improvements to Modern Dark Theme](https://github.com/wekan/wekan/pull/3344).
Thanks to jghaanstra.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.50 2020-11-10 Wekan release
This release adds the following new features:
- Add 'Modern Dark' theme [Part1](https://github.com/wekan/wekan/pulls/3335)
and [Part2](https://github.com/wekan/wekan/commit/6801c960b115be4265bf18ba05c444ac79aef887).
Thanks to jghaanstra, helioguardabaxo and xet7.
and fixes the following bugs:
- [Fix edit description to require only one click](https://github.com/wekan/wekan/commit/0ef248574c2751be1245c5748a9cbbe5ba2969b5).
Thanks to uusijani and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.49 2020-11-04 Wekan release
This release adds the following new features:
- [LDAP: Sync email address](https://github.com/wekan/wekan/pull/3329).
Thanks to gramakri.
and adds the following changes:
- [Changed board icons bigger at All Boards page](https://github.com/wekan/wekan/commit/76273300e749ebe3b1d711dee84336d03b31ed49).
Thanks to xet7.
and adds the following translations:
- [Translate some part of Gantt chart of Wekan Gantt GPL version](https://github.com/wekan/wekan/commit/fd363c69cc6e1cf3a283e3dbcc323edb1eae896e).
This only adds translations to all Wekan versions, not any GPL code to MIT version.
Thanks to xet7.
and fixes the following bugs:
- [Fix Trello import](https://github.com/wekan/wekan/commit/faad739f974a0392ca73e4db03e5267edcc5dec7).
Thanks to elct9620 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.48 2020-11-02 Wekan release
This release adds the following new features:
- [Smaller board icons to All Boards Page, and use full page width, so more board icons fit visible at once.
Removed variable height, because different heights made it look a little unbalanced](https://github.com/wekan/wekan/commit/0a5f9307d27a4b77aa7ff005701fea8ce0d50ec8).
Thanks to xet7.
- [Admin Panel / Settings / Layout / Custom Top Left Corner Logo Height](https://github.com/wekan/wekan/commit/4cfddf1d8d37bdbbb58c050333ee6ea2afc3e6f9).
Thanks to xet7.
- [When RICHER_CARD_COMMENT_EDITOR=true, use richer editor also when editing card description](https://github.com/wekan/wekan/commit/4e2d337620ac490b8e99ee968e6f92477e09b900).
Thanks to xet7.
and removes the following dependencies:
- [Removed hot-module-replacement and mdg:meteor-apm-agent](https://github.com/wekan/wekan/commit/aa454a5542e5ab1d581eef50cdb5c96ac2ada940).
Thanks to xet7.
and fixes the following bugs:
- [Fix Clone Board](https://github.com/wekan/wekan/commit/f4fdb94a3fcd63432ef7ded4df970b3491700020).
Thanks to e-gaulue and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.47 2020-11-01 Wekan release
This release fixes the following bugs:
- [Fix: OAuth2 fails with self-signed server certificate](https://github.com/wekan/wekan/pull/3325) and
[Added related settings for OAUTH2_CA_CERT that is optional OAuth2 CA Cert](https://github.com/wekan/wekan/commit/55252300c601ea40dc8adad1887397b31ceb0bb2).
Thanks to faust64 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.46 2020-10-30 Wekan release
This release adds the following updates:
- [Upgrade to Meteor 2.0-beta.4](https://github.com/wekan/wekan/commit/af583145ed2b36af8e6c72765fd35d70a292fad6).
Thanks to Meteor developers.
and fixes the following bugs:
- [Fix: Use current boardId when a worker moves a card](https://github.com/wekan/wekan/pull/3323).
Thanks to jtbairdsr.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.45 2020-10-30 Wekan release
This release fixes the following bugs:
- [Fix can not upload and download files, by changing back to Node.js 12.19.0 and adding
fast-render](https://github.com/wekan/wekan/commit/d2f434879caa20d69651f23fa2124074f55c9893).
Current file storing to MongoDB code was not yet compatible with newer Node.js.
Thanks to eskogito and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.44 2020-10-28 Wekan release
This release adds the following new features:
- For development, [add Meteor 2.0 Hot Module Replacement](https://github.com/wekan/wekan/commit/e6162472548d9dff497dd76e82d23044f779f757).
More info at https://forums.meteor.com/t/meteor-2-0-beta-with-hot-module-replacement-hmr/54313/8 .
Thanks to zodern.
and adds the following updates:
- [Upgrade to Node.js 14.15.0](https://github.com/wekan/wekan/commit/045e9db7b8f0de852ef4486cb1ad200d6ca7296d).
Thanks to Node.js and Meteor.js developers.
- [Upgrade to Meteor 2.0-beta.3. Removed fast-render and ostrio:cookies](https://github.com/wekan/wekan/commit/a463f2a855498935db5b66e5fad446ce465adab1).
Thanks to Meteor.js developers and xet7.
and fixes the following bugs:
- [Fixed: With ORACLE_OIM_ENABLED, allow setting OAUTH2_REQUEST_PERMISSIONS with environment variable](https://github.com/wekan/wekan/commit/1b429b3f99c32840ebb0ff9a29015aa8c28ec644).
Thanks to xet7.
- [Changed public board changing Swimlanes/Lists/Calendar view and changing Hide minicard label text
from using cookies to using browser localStorage](https://github.com/wekan/wekan/commit/460b1d3a664b648bc03c40422b9d175401e229c1),
to remove some errors from browser inspect console.
Thanks to xet7.
- [Fix Modern theme board canvas background](https://github.com/wekan/wekan/pull/3312).
Thanks to helioguardabaxo.
- [Fix: 1) Expose moving cards on mobile to workers. 2) Hide the move to another board functionality
in the submenu (only from the worker) so that the worker is still constrained to a single
board](https://github.com/wekan/wekan/pull/3315).
Thanks to jtbairdsr.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.43 2020-10-20 Wekan release
This release adds the following new features:
- [Allow more than one assignee](https://github.com/wekan/wekan/commit/acf9e7caeaf59e1030ae1014c0cb2fb7dae27147).
Thanks to xet7.
and fixes the following bugs:
- [Fixed CSV/TSV export](https://github.com/wekan/wekan/commit/d7333dec84328ca191f430d96aaf9e550840631a).
Please test and report any problems [at issue #3173](https://github.com/wekan/wekan/issues/3173).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.42 2020-10-14 Wekan release
This release adds the following updates:
- [Upgrade to Node.js 12.19.0](https://github.com/wekan/wekan/commit/b8a209249e968b90917af319adf24fedf2157396).
Thanks to Node.js developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.41 2020-10-03 Wekan release
This release adds the following new features:
- [Login with OIDC OAuth2 Oracle on premise identity manager OIM, with setting ORACLE_OIM_ENABLED=true](https://github.com/wekan/wekan/commit/ec8a78537f1dc40e967de36a02ea09cf7398318a).
More info [at wiki](https://github.com/wekan/wekan/wiki/Oracle-OIM).
Thanks to xet7.
- [At Admin Panel / Layout: Text below Custom Login Logo. Can have markdown formatting](https://github.com/wekan/wekan/commit/7223d6e75057d1412862a97b8a43c34ec23b16e9).
Thanks to xet7.
and adds the following updates:
- [Update dependencies](https://github.com/wekan/wekan/commit/b796a6cbf4911c14ff036a51db0252e08d3a5ef8).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.40 2020-09-18 Wekan release
This release adds the following new features:
- Custom Logo for Login and Top Left Corner. Optional link when clicking logo.
Settings at Admin Panel / Layout.
[Part 1](https://github.com/wekan/wekan/commit/a7c3317ed696fad8e211b22afbb3012f3a4f2ddb),
[Part 2](https://github.com/wekan/wekan/commit/05e3fc31b4633978a6b002a0325aad8e74d57ec4),
[Part 3](https://github.com/wekan/wekan/commit/3fc80e1145b23f8e6c7492ef4e3313b02f3d8772).
Thanks to xet7.
and adds the following updates:
- [Upgrade to Meteor v1.11.1](https://github.com/wekan/wekan/commit/185cf163b23280af5a7910381209984e2362a452).
Thanks to Meteor developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.39 2020-09-17 Wekan release
This release adds the following new features:
- [Impersonate one user](https://github.com/wekan/wekan/pull/3280) and
[related translatable strings](https://github.com/wekan/wekan/commit/81ac0fdba9b52477dbbe7b6ed01b6d299288bcca).
Thanks to Akuket and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.38 2020-09-16 Wekan release
This release fixes the following CRITICAL VULNERABILITIES:
- [Upgrade to Node.js v12.18.4](https://github.com/wekan/wekan/commit/5cd9f89b21e6f800c2b78da49a1c0cf7f6fba955).
Thanks to Node.js developers.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.37 2020-09-15 Wekan release
This release adds the following UI improvements:
- [UI improvements in filter, multi-selection and rules](https://github.com/wekan/wekan/pull/3279).
Thanks to helioguardabaxo and xet7.
and adds the following updates:
- [Update release scripts](https://github.com/wekan/wekan/commit/e79b7fad0a35f29020c48a4a4eedb435573c9bf1).
Thanks to xet7.
and fixes the following bugs:
- [Fix parse error in docker-compose.yml](https://github.com/wekan/wekan/pull/3278).
Thanks to devilmengcry.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.36 2020-09-15 Wekan release
This release adds the following new features:
- [Added translations for date selection popups](https://github.com/wekan/wekan/commit/f9b0da65f1de48a2af11aa7afbd767559ba95b79).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.35 2020-09-14 Wekan release
This release tries to fix the following bugs:
- [Try to fix Snap](https://github.com/wekan/wekan/commit/7173e293ef6b0d3c1fe82b5320340589c72c9326).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.34 2020-09-14 Wekan release
This release tries to fix the following bugs:
- [Try to fix Snap](https://github.com/wekan/wekan/commit/d2b84c7773f20b34bca8be23078469a8809005a6).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.33 2020-09-14 Wekan release
This release adds the following login settings:
- [Added some CAS and SAML settings](https://github.com/wekan/wekan/commit/214c86cc22f4c721a79ec0a4a4f3bbd90d673f93).
Not tested. Please test and send pull requests if it does not work.
See https://github.com/wekan/wekan/wiki/SAML and https://github.com/wekan/wekan/wiki/CAS .
Thanks to xet7.
and updates some dependencies:
- [Update dependencies](https://github.com/wekan/wekan/commit/cca041e21a66087ca4008a22cb0f5b4176801101).
Thanks to developers of dependencies.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.32 2020-09-13 Wekan release
This release tried to fix the following bugs:
- [Try to fix Snap](https://github.com/wekan/wekan/commit/).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.31 2020-09-13 Wekan release
This release tried to fix the following bugs:
- [Try to fix Snap](https://github.com/wekan/wekan/commit/fe62e12ab46c41ea30ba79795b0dc39b3451d4a2).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.30 2020-09-13 Wekan release
This release adds the following new features and improvements:
@@ -23,7 +655,7 @@ and adds the following updates:
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.29 2020-09-11
# v4.29 2020-09-11 Wekan release
This release adds the following new features:
+24 -3
View File
@@ -1,6 +1,10 @@
FROM ubuntu:rolling
FROM quay.io/wekan/ubuntu:groovy-20201125.2
LABEL maintainer="wekan"
# 2020-12-03:
# - Above Ubuntu base image copied from Docker Hub ubuntu:groovy-20201125.2
# to Quay to avoid Docker Hub rate limits.
# Set the environment variables (defaults where required)
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
# ENV BUILD_DEPS="paxctl"
@@ -8,7 +12,7 @@ ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
NODE_VERSION=v12.18.3 \
NODE_VERSION=v12.20.1 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -41,6 +45,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
OAUTH2_CLIENT_ID="" \
@@ -115,7 +120,23 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
CORS_ALLOW_HEADERS="" \
CORS_EXPOSE_HEADERS="" \
DEFAULT_AUTHENTICATION_METHOD="" \
PASSWORD_LOGIN_ENABLED=true
PASSWORD_LOGIN_ENABLED=true \
CAS_ENABLED=false \
CAS_BASE_URL="" \
CAS_LOGIN_URL="" \
CAS_VALIDATE_URL="" \
SAML_ENABLED=false \
SAML_PROVIDER="" \
SAML_ENTRYPOINT="" \
SAML_ISSUER="" \
SAML_CERT="" \
SAML_IDPSLO_REDIRECTURL="" \
SAML_PRIVATE_KEYFILE="" \
SAML_PUBLIC_CERTFILE="" \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
ORACLE_OIM_ENABLED=false
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
+2 -2
View File
@@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.18.3 \
NODE_VERSION=v12.20.1 \
WEKAN_VERSION=3.96 \
WEKAN_ARCHITECTURE=arm64
@@ -40,7 +40,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.18.3 \
NODE_VERSION=v12.20.1 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
+7 -3
View File
@@ -4,8 +4,6 @@
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan)
[![Docker Hub container status](https://img.shields.io/docker/build/wekanteam/wekan.svg "Docker Hub container status")](https://hub.docker.com/r/wekanteam/wekan)
[![Docker Hub pulls](https://img.shields.io/docker/pulls/wekanteam/wekan.svg "Docker Hub Pulls")](https://hub.docker.com/r/wekanteam/wekan)
[![Wekan Build Status][travis_badge]][travis_status]
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/02137ecec4e34c5aa303f57637196a93 "Codacy Badge")](https://www.codacy.com/app/xet7/wekan?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=wekan/wekan&amp;utm_campaign=Badge_Grade)
[![Code Climate](https://codeclimate.com/github/wekan/wekan/badges/gpa.svg "Code Climate")](https://codeclimate.com/github/wekan/wekan)
@@ -13,6 +11,12 @@
[![Code analysis at Open Hub](https://img.shields.io/badge/code%20analysis-at%20Open%20Hub-brightgreen.svg "Code analysis at Open Hub")](https://www.openhub.net/p/wekan)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_shield)
NOTE: Docker Hub builds are broken with error ENOMEM. Only Quay works, see docker-compose.yml .
<!--
[![Docker Hub container status](https://img.shields.io/docker/build/wekanteam/wekan.svg "Docker Hub container sta>
[![Docker Hub pulls](https://img.shields.io/docker/pulls/wekanteam/wekan.svg "Docker Hub Pulls")](https://hub.doc>
-->
## [Translate Wekan at Transifex](https://transifex.com/wekan/wekan)
Translations to non-English languages are accepted only at [Transifex](https://transifex.com/wekan/wekan) using webbrowser.
@@ -52,7 +56,7 @@ that by providing one-click installation on various platforms.
- Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
- Wekan largest user has 13k users using Wekan in their company.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 50 languages.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 60 languages.
- [Features][features]: Wekan has real-time user interface.
- [Platforms][platforms]: Wekan supports many platforms.
Wekan is critical part of new platforms Wekan is currently being integrated to.
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v4.30.0"
appVersion: "v4.70.0"
files:
userUploads:
- README.md
Executable
+251
View File
@@ -0,0 +1,251 @@
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# vi:ts=4:et
# Wekan API Python CLI, originally from here, where is more details:
# https://github.com/wekan/wekan/wiki/New-card-with-Python3-and-REST-API
try:
# python 3
from urllib.parse import urlencode
except ImportError:
# python 2
from urllib import urlencode
import json
import requests
import sys
arguments = len(sys.argv) - 1
if arguments == 0:
print("=== Wekan API Python CLI: Shows IDs for addcard ===")
print("AUTHORID is USERID that writes card.")
print("If *nix: chmod +x api.py => ./api.py users")
print("Syntax:")
print(" python3 api.py users # All users")
print(" python3 api.py boards USERID # Boards of USERID")
print(" python3 api.py board BOARDID # Info of BOARDID")
print(" python3 api.py swimlanes BOARDID # Swimlanes of BOARDID")
print(" python3 api.py lists BOARDID # Lists of BOARDID")
print(" python3 api.py createlist BOARDID LISTTITLE # Create list")
print(" python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION")
print(" python3 api.py listattachments BOARDID # List attachments")
# TODO:
# print(" python3 api.py attachmentdownload BOARDID ATTACHMENTID # One attachment as file")
# print(" python3 api.py attachmentsdownload BOARDID # All attachments as files")
exit
# ------- SETTINGS START -------------
# Username is your Wekan username or email address.
# OIDC/OAuth2 etc uses email address as username.
username = 'testtest'
password = 'testtest'
wekanurl = 'http://localhost:4000/'
# ------- SETTINGS END -------------
"""
EXAMPLE:
python3 api.py
OR:
chmod +x api.py
./api.py
=== Wekan API Python CLI: Shows IDs for addcard ===
AUTHORID is USERID that writes card.
Syntax:
python3 api.py users # All users
python3 api.py boards USERID # Boards of USERID
python3 api.py board BOARDID # Info of BOARDID
python3 api.py swimlanes BOARDID # Swimlanes of BOARDID
python3 api.py lists BOARDID # Lists of BOARDID
python3 api.py createlist BOARDID LISTTITLE # Create list
python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
python3 api.py listattachments BOARDID # List attachments
python3 api.py attachmentjson BOARDID ATTACHMENTID # One attachment as JSON base64
python3 api.py attachmentbinary BOARDID ATTACHMENTID # One attachment as binary file
=== USERS ===
python3 api.py users
=> abcd1234
=== BOARDS ===
python3 api.py boards abcd1234
=== SWIMLANES ===
python3 api.py swimlanes dYZ
[{"_id":"Jiv","title":"Default"}
]
=== LISTS ===
python3 api.py lists dYZ
[]
There is no lists, so create a list:
=== CREATE LIST ===
python3 api.py createlist dYZ 'Test'
{"_id":"7Kp"}
# python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
python3 api.py addcard ppg dYZ Jiv 7Kp 'Test card' 'Test description'
=== LIST ATTACHMENTS WITH DOWNLOAD URLs ====
python3 api.py listattachments BOARDID
"""
# ------- API URL GENERATION START -----------
loginurl = 'users/login'
wekanloginurl = wekanurl + loginurl
apiboards = 'api/boards/'
apiattachments = 'api/attachments/'
apiusers = 'api/users'
e = 'export'
s = '/'
l = 'lists'
sw = 'swimlane'
sws = 'swimlanes'
cs = 'cards'
bs = 'boards'
atl = 'attachmentslist'
at = 'attachment'
ats = 'attachments'
users = wekanurl + apiusers
# ------- API URL GENERATION END -----------
# ------- LOGIN TOKEN START -----------
data = {"username": username, "password": password}
body = requests.post(wekanloginurl, data=data)
d = body.json()
apikey = d['token']
# ------- LOGIN TOKEN END -----------
if arguments == 7:
if sys.argv[1] == 'addcard':
# ------- WRITE TO CARD START -----------
authorid = sys.argv[2]
boardid = sys.argv[3]
swimlaneid = sys.argv[4]
listid = sys.argv[5]
cardtitle = sys.argv[6]
carddescription = sys.argv[7]
cardtolist = wekanurl + apiboards + boardid + s + l + s + listid + s + cs
# Write to card
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'authorId': '{}'.format(authorid), 'title': '{}'.format(cardtitle), 'description': '{}'.format(carddescription), 'swimlaneId': '{}'.format(swimlaneid)}
body = requests.post(cardtolist, data=post_data, headers=headers)
print(body.text)
# ------- WRITE TO CARD END -----------
if arguments == 3:
if sys.argv[1] == 'createlist':
# ------- CREATE LIST START -----------
boardid = sys.argv[2]
listtitle = sys.argv[3]
list = wekanurl + apiboards + boardid + s + l
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'title': '{}'.format(listtitle)}
body = requests.post(list, data=post_data, headers=headers)
print("=== CREATE LIST ===\n")
print(body.text)
# ------- CREATE LIST END -----------
if arguments == 2:
# ------- BOARDS LIST START -----------
userid = sys.argv[2]
boards = users + s + userid + s + bs
if sys.argv[1] == 'boards':
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
#post_data = {'userId': '{}'.format(userid)}
body = requests.get(boards, headers=headers)
print("=== BOARDS ===\n")
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- BOARDS LIST END -----------
if sys.argv[1] == 'board':
# ------- BOARD INFO START -----------
boardid = sys.argv[2]
board = wekanurl + apiboards + boardid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
body = requests.get(board, headers=headers)
print("=== BOARD ===\n")
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- BOARD INFO END -----------
if sys.argv[1] == 'swimlanes':
boardid = sys.argv[2]
swimlanes = wekanurl + apiboards + boardid + s + sws
# ------- SWIMLANES OF BOARD START -----------
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== SWIMLANES ===\n")
body = requests.get(swimlanes, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- SWIMLANES OF BOARD END -----------
if sys.argv[1] == 'lists':
# ------- LISTS OF BOARD START -----------
boardid = sys.argv[2]
attachments = wekanurl + apiboards + boardid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== LISTS ===\n")
body = requests.get(lists, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF BOARD END -----------
if sys.argv[1] == 'listattachments':
# ------- LISTS OF ATTACHMENTS START -----------
boardid = sys.argv[2]
listattachments = wekanurl + apiboards + boardid + s + ats
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== LIST OF ATTACHMENTS ===\n")
body = requests.get(listattachments, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF ATTACHMENTS END -----------
if arguments == 1:
if sys.argv[1] == 'users':
# ------- LIST OF USERS START -----------
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print(users)
print("=== USERS ===\n")
body = requests.get(users, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LIST OF USERS END -----------
+39 -6
View File
@@ -15,11 +15,18 @@ template(name="cardActivities")
each activityData in currentCard.activities
+activity(activity=activityData card=card mode=mode)
template(name="editOrDeleteComment")
= ' - '
a.js-open-inlined-form {{_ "edit"}}
= ' - '
a.js-delete-comment {{_ "delete"}}
template(name="activity")
.activity
+userAvatar(userId=activity.user._id)
p.activity-desc
+memberName(user=activity.user)
span.activity-member
+memberName(user=activity.user)
//- attachment activity -------------------------------------------------
if($eq activity.activityType 'deleteAttachment')
@@ -118,11 +125,10 @@ template(name="activity")
+viewer
= activity.comment.text
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
if ($eq currentUser._id activity.comment.userId)
= ' - '
a.js-open-inlined-form {{_ "edit"}}
= ' - '
a.js-delete-comment {{_ "delete"}}
if($eq currentUser._id activity.comment.userId)
+editOrDeleteComment
else if currentUser.isBoardAdmin
+editOrDeleteComment
if($eq activity.activityType 'deleteComment')
| {{{_ 'activity-deleteComment' currentData.commentId}}}.
@@ -137,6 +143,33 @@ template(name="activity")
+viewer
= activity.comment.text
//- date activity ------------------------------------------------
if($eq mode 'card')
if($eq activity.activityType 'a-receivedAt')
| {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}.
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
if($eq activity.activityType 'a-endAt')
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
if($eq mode 'board')
if($eq activity.activityType 'a-receivedAt')
| {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}.
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
if($eq activity.activityType 'a-endAt')
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
//- customField activity ------------------------------------------------
if($eq mode 'board')
if($eq activity.activityType 'createCustomField')
@@ -81,6 +81,30 @@ BlazeComponent.extendComponent({
return createCardLink(this.currentData().activity.card());
},
receivedDate() {
const receivedDate = this.currentData().activity.card();
if (!receivedDate) return null;
return receivedDate.receivedAt;
},
startDate() {
const startDate = this.currentData().activity.card();
if (!startDate) return null;
return startDate.startAt;
},
dueDate() {
const dueDate = this.currentData().activity.card();
if (!dueDate) return null;
return dueDate.dueAt;
},
endDate() {
const endDate = this.currentData().activity.card();
if (!endDate) return null;
return endDate.endAt;
},
lastLabel() {
const lastLabelId = this.currentData().activity.labelId;
if (!lastLabelId) return null;
+5 -1
View File
@@ -10,12 +10,16 @@
.activity
margin: 0.5px 0
padding: 6px 0;
display: flex
.member
width: 24px
width: 32px
height: @width
.activity-member
font-weight: 700
.activity-desc
word-wrap: break-word
overflow: hidden
+4
View File
@@ -3,6 +3,10 @@ BlazeComponent.extendComponent({
this.subscribe('archivedBoards');
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
archivedBoards() {
return Boards.find(
{ archived: true },
+13 -8
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const subManager = new SubsManager();
const { calculateIndex } = Utils;
const swimlaneWhileSortingHeight = 150;
@@ -197,7 +195,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
@@ -213,7 +211,12 @@ BlazeComponent.extendComponent({
}
// Disable drag-dropping if the current user is not a board member
$swimlanesDom.sortable('option', 'disabled', !userIsMember());
//$swimlanesDom.sortable('option', 'disabled', !userIsMember());
$swimlanesDom.sortable(
'option',
'disabled',
!Meteor.user().isBoardAdmin(),
);
});
function userIsMember() {
@@ -237,7 +240,9 @@ BlazeComponent.extendComponent({
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-swimlanes';
} else {
return cookies.get('boardView') === 'board-view-swimlanes';
return (
window.localStorage.getItem('boardView') === 'board-view-swimlanes'
);
}
},
@@ -246,7 +251,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-lists';
} else {
return cookies.get('boardView') === 'board-view-lists';
return window.localStorage.getItem('boardView') === 'board-view-lists';
}
},
@@ -255,7 +260,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-cal';
} else {
return cookies.get('boardView') === 'board-view-cal';
return window.localStorage.getItem('boardView') === 'board-view-cal';
}
},
@@ -417,7 +422,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
return (currentUser.profile || {}).boardView === 'board-view-cal';
} else {
return cookies.get('boardView') === 'board-view-cal';
return window.localStorage.getItem('boardView') === 'board-view-cal';
}
},
}).register('calendarView');
+289 -5
View File
@@ -15,7 +15,8 @@ setBoardColor(color)
.is-selected .minicard
border-left: 3px solid color
button[type=submit].primary, input[type=submit].primary
button[type=submit].primary, input[type=submit].primary,
.sidebar .sidebar-content .sidebar-btn
background-color: darken(color, 20%)
&.pop-over .pop-over-list li a:not(.disabled):hover,
@@ -589,22 +590,25 @@ setBoardClear(color1,color2)
position relative
&#header-quick-access #header-user-bar .header-user-bar-name
margin: 5px 3px 0 0;
margin: 5px 3px 0 0
section#notifications-drawer
top: 46px;
top: 46px
box-shadow: 0 4px 20px rgba(0,0,0,.1)
max-width: 100%
section#notifications-drawer .header
top: 46px;
top: 46px
border-radius: 0 3px
height: 21px
background: #f7f7f7
.board-canvas
background: #f5f5f5
/* Swimlane */
.swimlane
background: #f5f5f5
background: none
.swimlane .swimlane-header-wrap .swimlane-header
font-family: Poppins
@@ -739,3 +743,283 @@ setBoardClear(color1,color2)
section#notifications-drawer .header .toggle-read
top: 18px
/*
Alternate "Modern Dark" Styling
*/
.board-color-moderndark
setBoardColor(#2a2a2a)
/* General */
body
background: #2a2a2a
.board-wrapper .board-canvas .board-overlay
opacity: .6
/* Forms */
button[type=submit].primary, .board-color-modern input[type=submit].primary
background-color: #819C5D
.toggle-switch:checked~.toggle-label
background-color: #D2E9B4
.toggle-label:after, .board-color-modern .toggle-switch:checked~.toggle-label:after
background-color: #819C5D !important
/* Headers */
&#header-quick-access, .background-box, #header
background-color: #333333
&#header-quick-access
padding: 4px
font-size: 14px
&#header #header-main-bar
height: 30px
padding-top: 3px
padding-bottom: 3px
&#header
box-shadow: 0 6px 6px -6px rgba(0,0,0,0.8)
&#header-quick-access ul
overflow: visible
&#header-quick-access ul li.current
border: 0 !important
font-weight: bold
&#header-quick-access ul li.separator
display: none
&#header-quick-access ul li:nth-child(3)
margin-right: 10px
&#header-quick-access ul li a
padding: 5px 10px
border-radius: 2px
&#header-quick-access ul li.current a
border-radius: 2px
background: rgba(255,255,255,.2)
&#header #header-main-bar h1
font-family: Poppins
font-weight: bold
line-height: 0.8em
padding-top: 10px
/* Content */
.board-canvas
background: #2a2a2a
padding: 10px 10px 0
/* Swimlanes */
.swimlane .swimlane-header-wrap
background-color: #666666
color: #cccccc
padding: 4px 0
margin-bottom: 10px
.swimlane .swimlane-header-wrap .swimlane-header
font-family: Poppins
.swimlane
background: #2a2a2a
line-height: 15px
max-height: 100%
/* Lists */
.swimlane .list
background: #666666
border-radius: 0
border: 0px solid #666666
flex: 0 0 265px;
.swimlane .list:nth-child(even)
background: #5f5f5f
.list-header
background: #333333
padding-top: 10px
border-bottom: 6px solid #333333
.list-header .viewer
padding-left: 10px
.list-header .list-header-name
line-height: 14px
color: #eeeeee
.list-header .list-header-menu
padding-top: 17px
.list-body
scrollbar-width: thin
scrollbar-color: #343434 #999999
.list-body::-webkit-scrollbar
width: 10px
.list-body::-webkit-scrollbar-track
background: #343434
border-radius: 3px
margin: 4px 0
.list-body::-webkit-scrollbar-thumb
background-color: #999999
border-radius: 6px
border: 3px solid #343434
.list-body .open-minicard-composer:hover
background: none
box-shadow: none
border-bottom: 0
.list-body a.open-minicard-composer, .list-body a.open-minicard-composer i, .list .list-composer .open-list-composer i
color: #bbbbbb
.list-body a.open-minicard-composer:hover, .list-body a.open-minicard-composer:hover i, .list .list-composer .open-list-composer:hover i
color: #ffffff
/* Mini Card */
.minicard
background-color: #444444
color: #cccccc
border-radius: 2px
font-size: 0.9em
padding: 10px
box-shadow: 0 4px 3px -3px rgba(0,0,0,0.8)
border-bottom: 1px solid #666666
.minicard:hover
background-color: #555555 !important
.minicard .card-label
font-size: 11px
font-weight: 400
padding: 2px 6px 0
.minicard .badges
color: #bbbbbb
.minicard .date
margin-top: 7px
font-size: 11px
.card-date
color: #555555
.card-date.almost-due
color: #666666
.minicard.minicard-composer textarea.minicard-composer-textarea:focus
background-color: #eeeeee
color: #333333
padding: 6px
.is-selected .minicard
background-color: #666666
/* Card Details */
.card-details
position: absolute
top: 30px
left: calc(50% - 384px)
width: 768px
max-height: calc(100% - 60px)
background-color: #454545
color: #cccccc
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)
border: 1px solid #111111
z-index: 100 !important
.card-details
scrollbar-width: thin
scrollbar-color: #343434 #999999
.card-details::-webkit-scrollbar
width: 16px
.card-details::-webkit-scrollbar-track
background: #343434
.card-details::-webkit-scrollbar-thumb
background-color: #999999
border-radius: 6px
border: 4px solid #343434
.card-details .card-details-header
background: #333333
color: #cccccc
border-bottom: 2px solid #2d2d2d
.card-details hr
background: #2d2d2d
.card-details .card-details-item-title
color: #ffffff
.card-details .new-description textarea, .card-details .new-comment textarea
background-color: #dddddd
color: #111111
.card-details .checklist
background-color: transparent
margin-bottom: 10px
.card-details .checklist-item
background-color: rgba(255,255,255,0.1)
padding: 2px 8px
border-radius: 3px
font-size: 13px
margin-top: 5px
.card-details .check-box.materialCheckBox
border-color: #ffffff
.card-details .check-box.materialCheckBox.is-checked
border-bottom: 2px solid #819C5D
border-right: 2px solid #819C5D
border-top: 0
border-left: 0
.card-details .js-add-checklist-item
margin-top: 4px
.checklist-items .add-checklist-item
margin-top: .7em
.card-details .activities .activity .activity-desc .activity-comment
background-color: #cccccc
color: #222222
/* Sidebar */
.sidebar .sidebar-shadow
background-color: #222222
box-shadow: -10px 0 5px -10px #444444
border-left: 1px solid #333333
color: #cccccc
.activities .activity .activity-desc .activity-comment
background-color: #cccccc
color: #222222
/* Pop-Ups for "Modern Dark" */
.pop-over.board-color-moderndark
background-color: #454545
color: #cccccc
border: 1px solid #111111
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)
.pop-over.board-color-moderndark .header
background-color: #333333
.pop-over.board-color-moderndark .header-title
font-family: Poppins
font-size: 16px
color: #cccccc
.pop-over.board-color-moderndark .pop-over-list li:hover > a
background-color: #819C5D !important
+7 -7
View File
@@ -60,10 +60,10 @@ template(name="boardList")
template(name="boardListHeaderBar")
h1 {{_ title }}
.board-header-btns.right
a.board-header-btn.js-open-archived-board
i.fa.fa-archive
span {{_ 'archives'}}
a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
i.fa.fa-clone
span {{_ 'templates'}}
//.board-header-btns.right
// a.board-header-btn.js-open-archived-board
// i.fa.fa-archive
// span {{_ 'archives'}}
// a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
// i.fa.fa-clone
// span {{_ 'templates'}}
+2 -3
View File
@@ -7,7 +7,7 @@ $spaceBetweenTiles = 16px
li
float: left
width: 25%
width: 20%
box-sizing: border-box
position: relative
@@ -33,13 +33,12 @@ $spaceBetweenTiles = 16px
overflow: hidden;
background-color: #999
color: #f6f6f6
height: auto
min-height: 100px
font-size: 16px
line-height: 22px
border-radius: 3px
display: block
font-weight: 700
min-height: 18px
padding: 8px
margin: ($spaceBetweenTiles/2)
position: relative
+4 -3
View File
@@ -46,9 +46,10 @@ template(name="attachmentsGalery")
| {{_ 'remove-cover'}}
else
| {{_ 'add-cover'}}
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
if currentUser.isBoardAdmin
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
if currentUser.isBoardMember
unless currentUser.isCommentOnly
+6
View File
@@ -45,6 +45,12 @@ Template.attachmentsGalery.events({
},
});
Template.attachmentsGalery.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
Template.previewAttachedImagePopup.events({
'click .js-large-image-clicked'() {
Popup.close();
@@ -0,0 +1,7 @@
template(name="descriptionForm")
.new-description.js-new-description(
class="{{#if descriptionFormIsOpen}}is-open{{/if}}")
form.js-new-description-form
+editor(class="js-new-description-input" data-meteor-emoji-large="true" autofocus="autofocus")
| {{getUnsavedValue 'cardDescription' _id getDescription}}
@@ -0,0 +1,33 @@
const descriptionFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
onDestroyed() {
descriptionFormIsOpen.set(false);
},
descriptionFormIsOpen() {
return descriptionFormIsOpen.get();
},
getInput() {
return this.$('.js-new-description-input');
},
events() {
return [
{
'submit .js-card-description'(event) {
event.preventDefault();
const description = this.currentComponent().getValue();
this.data().setDescription(description);
},
// Pressing Ctrl+Enter should submit the form
'keydown form textarea'(evt) {
if (evt.keyCode === 13 && (evt.metaKey || evt.ctrlKey)) {
this.find('button[type=submit]').click();
}
},
},
];
},
}).register('descriptionForm');
@@ -0,0 +1,60 @@
@import 'nib'
.new-description
position: relative
margin: 0 0 20px 0
&.is-open
.helper
display: inline-block
textarea
min-height: 100px
color: #4d4d4d
cursor: auto
overflow: hidden
word-wrap: break-word
.too-long
margin-top: 8px
textarea
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
color: #8c8c8c
height: 36px
margin: 4px 4px 6px 0
padding: 9px 11px
width: 100%
&:hover,
&:is-open
background-color: #fff
box-shadow: 0 1px 3px rgba(0, 0, 0, .33)
border: 0
cursor: pointer
&:is-open
cursor: auto
.description-item
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
color: #8c8c8c
height: 36px
margin: 4px 4px 6px 0
width: 92%
&:hover
background: darken(white, 12%)
&.add-description
display: flex
margin: 5px
a
display: block
margin: auto
+25 -20
View File
@@ -42,12 +42,12 @@ template(name="cardDetails")
else
p.warning {{_ 'card-archived'}}
.card-details-items
.card-details-items
if currentBoard.allowsLabels
.card-details-item.card-details-item-labels
h3.card-details-item-title
i.fa.fa-tags
| {{_ 'labels'}}
| {{_ 'labels'}}
a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
each labels
span.card-label(class="card-label-{{color}}" title=name)
@@ -57,7 +57,7 @@ template(name="cardDetails")
unless currentUser.isWorker
a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}")
i.fa.fa-plus
if currentBoard.allowsReceivedDate
hr
.card-details-item.card-details-item-received
@@ -245,8 +245,7 @@ template(name="cardDetails")
| {{_ 'description'}}
if currentBoard.allowsDescriptionText
+inlinedCardDescription(classNames="card-description js-card-description")
+editor(autofocus=true)
| {{getUnsavedValue 'cardDescription' _id getDescription}}
+descriptionForm
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
@@ -355,10 +354,11 @@ template(name="cardDetailsActionsPopup")
a.js-start-voting
i.fa.fa-thumbs-up
| {{_ 'card-edit-voting'}}
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'card-edit-custom-fields'}}
if currentUser.isBoardAdmin
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'card-edit-custom-fields'}}
//li: a.js-received-date {{_ 'editCardReceivedDatePopup-title'}}
//li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
//li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
@@ -381,17 +381,19 @@ template(name="cardDetailsActionsPopup")
a.js-move-card-to-bottom
i.fa.fa-arrow-down
| {{_ 'moveCardToBottom-title'}}
unless currentUser.isWorker
hr
ul.pop-over-list
ul.pop-over-list
if currentUser.isBoardAdmin
li
a.js-move-card
i.fa.fa-arrow-right
| {{_ 'moveCardPopup-title'}}
unless currentUser.isWorker
li
a.js-copy-card
i.fa.fa-copy
| {{_ 'copyCardPopup-title'}}
unless currentUser.isWorker
hr
ul.pop-over-list
li
@@ -430,13 +432,14 @@ template(name="copyChecklistToManyCardsPopup")
+boardsAndLists
template(name="boardsAndLists")
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
unless currentUser.isWorker
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
@@ -561,7 +564,8 @@ template(name="cardMorePopup")
br
| {{_ 'added'}}
span.date(title=card.createdAt) {{ moment createdAt 'LLL' }}
a.js-delete(title="{{_ 'card-delete-notice'}}") {{_ 'delete'}}
if currentUser.isBoardAdmin
a.js-delete(title="{{_ 'card-delete-notice'}}") {{_ 'delete'}}
template(name="setCardColorPopup")
form.edit-label
@@ -608,7 +612,8 @@ template(name="cardStartVotingPopup")
button.primary.js-submit {{_ 'save'}}
if getVoteQuestion
button.js-remove-vote.negate.wide.right {{_ 'delete'}}
if currentUser.isBoardAdmin
button.js-remove-vote.negate.wide.right {{_ 'delete'}}
template(name="positiveVoteMembersPopup")
ul.pop-over-list.js-card-member-list
+14 -3
View File
@@ -57,7 +57,7 @@ BlazeComponent.extendComponent({
},
scrollParentContainer() {
const cardPanelWidth = 510;
const cardPanelWidth = 600;
const parentComponent = this.parentComponent();
// TODO sometimes parentComponent is not available, maybe because it's not
// yet created?!
@@ -250,12 +250,15 @@ BlazeComponent.extendComponent({
// Disable sorting if the current user is not a board member
this.autorun(() => {
const disabled = !userIsMember() || Utils.isMiniScreen();
const disabled = !userIsMember();
if (
$checklistsDom.data('uiSortable') ||
$checklistsDom.data('sortable')
) {
$checklistsDom.sortable('option', 'disabled', disabled);
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$checklistsDom.sortable({ handle: '.checklist-handle' });
}
}
if ($subtasksDom.data('uiSortable') || $subtasksDom.data('sortable')) {
$subtasksDom.sortable('option', 'disabled', disabled);
@@ -564,6 +567,10 @@ Template.cardDetailsActionsPopup.helpers({
return this.findWatcher(Meteor.userId());
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
canModifyCard() {
return (
Meteor.user() &&
@@ -668,7 +675,11 @@ Template.moveCardPopup.events({
// instead from a “component” state.
const card = Cards.findOne(Session.get('currentCard'));
const bSelect = $('.js-select-boards')[0];
const boardId = bSelect.options[bSelect.selectedIndex].value;
let boardId;
// if we are a worker, we won't have a board select so we just use the
// current boardId of the card.
if (bSelect) boardId = bSelect.options[bSelect.selectedIndex].value;
else boardId = card.boardId;
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
+4
View File
@@ -41,6 +41,8 @@ template(name="checklistDetail")
if canModifyCard
h2.title.js-open-inlined-form.is-editable
if isMiniScreenOrShowDesktopDragHandles
span.fa.checklist-handle(class="fa-arrows" title="{{_ 'dragChecklist'}}")
+viewer
= checklist.title
else
@@ -100,6 +102,8 @@ template(name='checklistItemDetail')
if canModifyCard
.check-box-container
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
span.fa.checklistitem-handle(class="fa-arrows" title="{{_ 'dragChecklistItem'}}")
.item-title.js-open-inlined-form.is-editable(class="{{#if item.isFinished }}is-checked{{/if}}")
+viewer
= item.title
+15 -6
View File
@@ -6,7 +6,7 @@ function initSorting(items) {
helper: 'clone',
items: '.js-checklist-item:not(.placeholder)',
connectWith: '.js-checklist-items',
appendTo: '.board-canvas',
appendTo: 'parent',
distance: 7,
placeholder: 'checklist-item placeholder',
scroll: false,
@@ -55,11 +55,12 @@ BlazeComponent.extendComponent({
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
$(self.itemsDom).sortable(
'option',
'disabled',
!userIsMember() || Utils.isMiniScreen(),
);
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$(self.itemsDom).sortable({
handle: 'span.fa.checklistitem-handle',
});
}
}
});
},
@@ -222,6 +223,14 @@ Template.checklists.helpers({
},
});
Template.addChecklistItemForm.onRendered(() => {
autosize($('textarea.js-add-checklist-item'));
});
Template.editChecklistItemForm.onRendered(() => {
autosize($('textarea.js-edit-checklist-item'));
});
Template.checklistDeleteDialog.onCreated(() => {
const $cardDetails = this.$('.card-details');
this.scrollState = {
+10 -2
View File
@@ -42,6 +42,11 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.js-delete-checklist
@extends .delete-text
span.fa.checklist-handle
padding-right: 20px
padding-top: 6px
float: right
.js-confirm-checklist-delete
background-color: darken(white, 3%)
@@ -129,7 +134,7 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
background-color: darken(white, 8%)
.check-box-container
padding-right: 1px;
padding-right: 10px;
.check-box
margin: 0.1em 0 0 0;
@@ -139,7 +144,6 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
.item-title
flex: 1
margin-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
@@ -151,6 +155,10 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
word-wrap: break-word
max-width: 420px
span.fa.checklistitem-handle
padding-top: 2px
padding-right: 10px;
.js-delete-checklist-item
margin: 0 0 0.5em 1.33em
@extends .delete-text
-1
View File
@@ -85,7 +85,6 @@ template(name="minicard")
.minicard-assignees.js-minicard-assignees
each getAssignees
+userAvatar(userId=this)
hr
if getMembers
.minicard-members.js-minicard-members
+5 -7
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
// Template.cards.events({
// 'click .member': Popup.open('cardMember')
// });
@@ -34,10 +32,10 @@ BlazeComponent.extendComponent({
},
{
'click .js-toggle-minicard-label-text'() {
if (cookies.has('hiddenMinicardLabelText')) {
cookies.remove('hiddenMinicardLabelText'); //true
if (window.localStorage.getItem('hiddenMinicardLabelText')) {
window.localStorage.removeItem('hiddenMinicardLabelText'); //true
} else {
cookies.set('hiddenMinicardLabelText', 'true'); //true
window.localStorage.setItem('hiddenMinicardLabelText', 'true'); //true
}
},
},
@@ -50,7 +48,7 @@ Template.minicard.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
@@ -60,7 +58,7 @@ Template.minicard.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).hiddenMinicardLabelText;
} else if (cookies.has('hiddenMinicardLabelText')) {
} else if (window.localStorage.getItem('hiddenMinicardLabelText')) {
return true;
} else {
return false;
+1 -1
View File
@@ -165,7 +165,7 @@
.minicard-members,
.minicard-assignees
float: right
margin: 2px -8px 12px 0
margin: 2px -8px 2px 0
.member
float: right
+8 -6
View File
@@ -2,10 +2,10 @@ template(name="subtasks")
h3.card-details-item-title
i.fa.fa-sitemap
| {{_ 'subtasks'}}
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+subtaskDeleteDialog(subtask = subtaskToDelete)
if currentUser.isBoardAdmin
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+subtaskDeleteDialog(subtask = subtaskToDelete)
.card-subtasks-items
each subtask in currentCard.subtasks
@@ -28,7 +28,8 @@ template(name="subtaskDetail")
span
a.js-view-subtask(title="{{ subtask.title }}") {{_ "view-it"}}
if canModifyCard
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
if currentUser.isBoardAdmin
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
if canModifyCard
h2.title.js-open-inlined-form.is-editable
@@ -68,7 +69,8 @@ template(name="editSubtaskItemForm")
a.fa.fa-times-thin.js-close-inlined-form
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-subtask-item {{_ "delete"}}...
if currentUser.isBoardAdmin
a.js-delete-subtask-item {{_ "delete"}}...
template(name="subtasksItems")
.subtasks-items.js-subtasks-items
+1 -1
View File
@@ -1,4 +1,4 @@
export function getMembersToMap(data) {
export function csvGetMembersToMap(data) {
// we will work on the list itself (an ordered array of objects) when a
// mapping is done, we add a 'wekan' field to the object representing the
// imported member
+6 -6
View File
@@ -1,6 +1,6 @@
import trelloMembersMapper from './trelloMembersMapper';
import wekanMembersMapper from './wekanMembersMapper';
import csvMembersMapper from './csvMembersMapper';
import { trelloGetMembersToMap } from './trelloMembersMapper';
import { wekanGetMembersToMap } from './wekanMembersMapper';
import { csvGetMembersToMap } from './csvMembersMapper';
const Papa = require('papaparse');
@@ -99,13 +99,13 @@ BlazeComponent.extendComponent({
let membersToMap;
switch (importSource) {
case 'trello':
membersToMap = trelloMembersMapper.getMembersToMap(dataObject);
membersToMap = trelloGetMembersToMap(dataObject);
break;
case 'wekan':
membersToMap = wekanMembersMapper.getMembersToMap(dataObject);
membersToMap = wekanGetMembersToMap(dataObject);
break;
case 'csv':
membersToMap = csvMembersMapper.getMembersToMap(dataObject);
membersToMap = csvGetMembersToMap(dataObject);
break;
}
return membersToMap;
@@ -1,4 +1,4 @@
export function getMembersToMap(data) {
export function trelloGetMembersToMap(data) {
// we will work on the list itself (an ordered array of objects) when a
// mapping is done, we add a 'wekan' field to the object representing the
// imported member
@@ -1,4 +1,4 @@
export function getMembersToMap(data) {
export function wekanGetMembersToMap(data) {
// we will work on the list itself (an ordered array of objects) when a
// mapping is done, we add a 'wekan' field to the object representing the
// imported member
+2 -4
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const { calculateIndex } = Utils;
BlazeComponent.extendComponent({
@@ -124,7 +122,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
@@ -185,7 +183,7 @@ Template.list.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
+6 -4
View File
@@ -43,8 +43,9 @@ template(name="listHeader")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
if showDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
if currentUser.isBoardAdmin
if showDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
.list-composer
@@ -115,8 +116,9 @@ template(name="listMorePopup")
input.inline-input(type="text" readonly value="{{ rootUrl }}")
| {{_ 'added'}}
span.date(title=list.createdAt) {{ moment createdAt 'LLL' }}
unless currentUser.isWorker
a.js-delete {{_ 'delete'}}
//unless currentUser.isWorker
// if currentUser.isBoardAdmin
// a.js-delete {{_ 'delete'}}
template(name="listDeletePopup")
p {{_ "list-delete-pop"}}
+15 -3
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
let listsColors;
Meteor.startup(() => {
listsColors = Lists.simpleSchema()._schema.color.allowedValues;
@@ -106,11 +104,15 @@ BlazeComponent.extendComponent({
}).register('listHeader');
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
@@ -119,6 +121,10 @@ Template.listHeader.helpers({
});
Template.listActionPopup.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
isWipLimitEnabled() {
return Template.currentData().getWipLimit('enabled');
},
@@ -256,6 +262,12 @@ Template.listMorePopup.events({
}),
});
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
BlazeComponent.extendComponent({
onCreated() {
this.currentList = this.currentData();
+27 -2
View File
@@ -91,6 +91,7 @@ Template.editor.onRendered(() => {
};
const editor = '.editor';
const selectors = [
`.js-new-description-form ${editor}`,
`.js-new-comment-form ${editor}`,
`.js-edit-comment ${editor}`,
].join(','); // only new comment and edit comment
@@ -264,6 +265,29 @@ Template.editor.onRendered(() => {
import sanitizeXss from 'xss';
// Additional safeAttrValue function to allow for other specific protocols
// See https://github.com/leizongmin/js-xss/issues/52#issuecomment-241354114
function mySafeAttrValue(tag, name, value, cssFilter) {
// only when the tag is 'a' and attribute is 'href'
// then use your custom function
if (tag === 'a' && name === 'href') {
// only filter the value if starts with 'cbthunderlink:' or 'aodroplink'
if (
/^thunderlink:/gi.test(value) ||
/^cbthunderlink:/gi.test(value) ||
/^aodroplink:/gi.test(value)
) {
return value;
} else {
// use the default safeAttrValue function to process all non cbthunderlinks
return sanitizeXss.safeAttrValue(tag, name, value, cssFilter);
}
} else {
// use the default safeAttrValue function to process it
return sanitizeXss.safeAttrValue(tag, name, value, cssFilter);
}
}
// XXX I believe we should compute a HTML rendered field on the server that
// would handle markdown and user mentions. We can simply have two
// fields, one source, and one compiled version (in HTML) and send only the
@@ -277,7 +301,8 @@ Blaze.Template.registerHelper(
const view = this;
let content = Blaze.toHTML(view.templateContentBlock);
const currentBoard = Boards.findOne(Session.get('currentBoard'));
if (!currentBoard) return HTML.Raw(sanitizeXss(content));
if (!currentBoard)
return HTML.Raw(sanitizeXss(content, { safeAttrValue: mySafeAttrValue }));
const knowedUsers = currentBoard.members.map(member => {
const u = Users.findOne(member.userId);
if (u) {
@@ -321,7 +346,7 @@ Blaze.Template.registerHelper(
content = content.replace(fullMention, Blaze.toHTML(link));
}
return HTML.Raw(sanitizeXss(content));
return HTML.Raw(sanitizeXss(content, { safeAttrValue: mySafeAttrValue }));
}),
);
+24 -17
View File
@@ -19,16 +19,29 @@ template(name="header")
= title
#header-new-board-icon
else
//-
On sandstorm, the logo shouldn't be clickable, because we only have one
page/document on it, and we don't want to see the home page containing
the list of all boards.
unless currentSetting.hideLogo
if currentSetting.customTopLeftCornerLogoImageUrl
if currentSetting.customTopLeftCornerLogoLinkUrl
a(href="{{currentSetting.customTopLeftCornerLogoLinkUrl}}")
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="{{#if currentSetting.customTopLeftCornerLogoHeight}}#{currentSetting.customTopLeftCornerLogoHeight}{{else}}27{{/if}}" width="auto" margin="0" padding="0")
unless currentSetting.customTopLeftCornerLogoLinkUrl
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="{{#if currentSetting.customTopLeftCornerLogoHeight}}#{currentSetting.customTopLeftCornerLogoHeight}{{else}}27{{/if}}" width="auto" margin="0" padding="0")
unless currentSetting.customTopLeftCornerLogoImageUrl
img(src="{{pathFor '/logo-header.png'}}" alt="")
ul
li
a(href="{{pathFor 'home'}}")
span.fa.fa-home
| {{_ 'all-boards'}}
li.separator -
li
a(href="{{pathFor 'public'}}")
span.fa.fa-globe
| {{_ 'public'}}
//li
// a(href="{{pathFor 'public'}}")
// span.fa.fa-globe
// | {{_ 'public'}}
each currentUser.starredBoards
li.separator -
li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
@@ -37,8 +50,13 @@ template(name="header")
else
li.current {{_ 'quick-access-description'}}
a#header-new-board-icon.js-create-board
i.fa.fa-plus(title="Create a new board")
// Next line is used only for spacing at header,
// there is no visible clickable icon.
#header-new-board-icon
// Hide duplicate create board button,
// because it did not show board templates correctly.
//a#header-new-board-icon.js-create-board
// i.fa.fa-plus(title="Create a new board")
+notifications
@@ -52,17 +70,6 @@ template(name="header")
#header-main-bar(class="{{#if wrappedHeader}}wrapper{{/if}}")
+Template.dynamic(template=headerBar)
//unless hideLogo
//-
On sandstorm, the logo shouldn't be clickable, because we only have one
page/document on it, and we don't want to see the home page containing
the list of all boards.
// unless currentSetting.hideLogo
// a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}")
// img(src="{{pathFor '/logo-header.png'}}" alt="")
if appIsOffline
+offlineWarning
+21
View File
@@ -19,6 +19,27 @@ head
template(name="userFormsLayout")
section.auth-layout
if currentSetting.hideLogo
h1.at-form-landing-logo
br
br
unless currentSetting.hideLogo
h1.at-form-landing-logo
if currentSetting.customLoginLogoImageUrl
if currentSetting.customLoginLogoLinkUrl
a(href="{{currentSetting.customLoginLogoLinkUrl}}")
img(src="{{currentSetting.customLoginLogoImageUrl}}" width="300" height="auto")
br
unless currentSetting.customLoginLogoLinkUrl
img(src="{{currentSetting.customLoginLogoImageUrl}}" width="300" height="auto")
br
unless currentSetting.customLoginLogoImageUrl
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
br
if currentSetting.textBelowCustomLoginLogo
+viewer
| {{currentSetting.textBelowCustomLoginLogo}}
br
section.auth-dialog
if isLoading
+loader
+13
View File
@@ -169,6 +169,19 @@ async function authentication(event, templateInstance) {
});
});
case 'saml':
return new Promise(resolve => {
const provider = Meteor.settings.public.SAML_PROVIDER;
Meteor.loginWithSaml(
{
provider,
},
function() {
resolve(FlowRouter.go('/'));
},
);
});
case 'cas':
return new Promise(resolve => {
Meteor.loginWithCas(match, password, function() {
+3 -2
View File
@@ -276,7 +276,7 @@ kbd
padding-bottom: 0
.wrapper
max-width: 1200px
width: calc(100% - 20px)
margin: 0 auto
.relative
@@ -388,10 +388,12 @@ a
ol
list-style-type: decimal
padding-left: 20px
padding-bottom: 10px
ul
list-style-type: initial
padding-left: 20px
padding-bottom: 10px
em
font-style : italic
@@ -447,7 +449,6 @@ a
flex-direction: column
align-items: center
justify-content: center
height: 100%
.auth-dialog
margin: 0 !important
+31
View File
@@ -0,0 +1,31 @@
template(name="myCardsHeaderBar")
h1
a.back-btn(href="{{pathFor 'home'}}")
i.fa.fa-chevron-left
| {{_ 'my-cards'}}
template(name="myCardsModalTitle")
h2
i.fa.fa-keyboard-o
| {{_ 'my-cards'}}
template(name="myCards")
.wrapper
each board in cardsFind
.board-title
| {{_ 'board' }}:
+viewer
= board.title
each swimlane in board.swimlanes
.swimlane-title
| {{_ 'swimlane' }}:
+viewer
= swimlane.title
each list in swimlane.lists
.list-title
| {{_ 'list' }}:
+viewer
= list.title
each card in list.cards
a.minicard-wrapper.card-title(href="{{pathFor 'card' boardId=board.id slug=board.slug cardId=card._id }}")
+minicard(card)
+154
View File
@@ -0,0 +1,154 @@
const subManager = new SubsManager();
Meteor.subscribe('myCards');
Meteor.subscribe('mySwimlanes');
Meteor.subscribe('myLists');
Template.myCardsHeaderBar.events({
'click .js-open-archived-board'() {
Modal.open('archivedBoards');
},
});
Template.myCardsHeaderBar.helpers({
title() {
return FlowRouter.getRouteName() === 'home' ? 'my-boards' : 'public';
},
templatesUser() {
return Meteor.user();
},
});
Template.myCards.helpers({
userId() {
return Meteor.userId();
},
});
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('setting');
// subManager.subscribe('myCards');
},
cardsFind() {
const userId = Meteor.userId();
const boards = [];
let board = null;
let swimlane = null;
let list = null;
const cursor = Cards.find(
{
archived: false,
$or: [{ members: userId }, { assignees: userId }],
},
{
sort: {
boardId: 1,
swimlaneId: 1,
listId: 1,
sort: 1,
},
},
);
// eslint-disable-next-line no-console
// console.log('cursor:', cursor);
let newBoard = false;
let newSwimlane = false;
let newList = false;
cursor.forEach(card => {
// eslint-disable-next-line no-console
// console.log('card:', card.title);
if (list === null || list.id !== card.listId) {
// eslint-disable-next-line no-console
// console.log('new list');
let l = Lists.findOne(card.listId);
if (!l) {
l = {
_id: card.listId,
title: 'undefined list',
};
}
// eslint-disable-next-line no-console
// console.log('list:', l);
list = {
id: l._id,
title: l.title,
cards: [card],
};
newList = true;
}
if (swimlane === null || card.swimlaneId !== swimlane.id) {
// eslint-disable-next-line no-console
// console.log('new swimlane');
let s = Swimlanes.findOne(card.swimlaneId);
if (!s) {
s = {
_id: card.swimlaneId,
title: 'undefined swimlane',
};
}
// eslint-disable-next-line no-console
// console.log('swimlane:', s);
swimlane = {
id: s._id,
title: s.title,
lists: [list],
};
newSwimlane = true;
}
if (board === null || card.boardId !== board.id) {
// eslint-disable-next-line no-console
// console.log('new board');
const b = Boards.findOne(card.boardId);
// eslint-disable-next-line no-console
// console.log('board:', b, b._id, b.title);
board = {
id: b._id,
title: b.title,
slug: b.slug,
swimlanes: [swimlane],
};
newBoard = true;
}
if (newBoard) {
boards.push(board);
} else if (newSwimlane) {
board.swimlanes.push(swimlane);
} else if (newList) {
swimlane.lists.push(list);
} else {
list.cards.push(card);
}
newBoard = false;
newSwimlane = false;
newList = false;
});
// eslint-disable-next-line no-console
// console.log('boards:', boards);
return boards;
},
events() {
return [
{
'click .js-my-card'(evt) {
const card = this.currentData().card;
// eslint-disable-next-line no-console
console.log('currentData():', this.currentData());
// eslint-disable-next-line no-console
console.log('card:', card);
if (card) {
Utils.goCardId(card._id);
}
evt.preventDefault();
},
},
];
},
}).register('myCards');
+40
View File
@@ -0,0 +1,40 @@
.my-cards-list
.my-cards-list-item
border-bottom: 1px solid darken(white, 25%)
padding: 10px 5px
&:last-child
border-bottom: none
.my-cards-list-item-keys
margin-top: 5px
float: right
kbd
padding: 5px 8px
margin: 5px
font-size: 18px
.my-cards-list-item-action
font-size: 1.4em
margin: 5px
.board-title
font-size: 1.4rem
font-weight: bold
.swimlane-title
font-size: 1.2rem
font-weight: bold
margin-left: 1em
margin-top: 10px
.list-title
margin-top: 5px
font-weight: bold
margin-left: 1.6rem
.card-title
margin-top: 5px
margin-left: 1.8rem
max-width: 350px;
@@ -26,6 +26,10 @@ template(name='notificationIcon')
i.fa.fa-code.activity-type(title="custom field")
else if($in activityType 'addedLabel' 'removedLabel')
i.fa.fa-tag.activity-type(title="label")
else if($in activityType 'a-startAt' 'a-receivedAt')
i.fa.fa-clock-o.activity-type(title="date")
else if($in activityType 'a-dueAt' 'a-endAt')
i.fa.fa-clock-o.activity-type(title="date")
else if($in activityType 'createList' 'removeList' 'archivedList')
+listNotificationIcon
+2
View File
@@ -2,10 +2,12 @@
overflow:hidden
overflow-y:scroll
max-height: 400px
padding-right: 5px
.rules-lists-item
display: block
position: relative
overflow: auto
border-bottom: 1px solid #bfbfbf
p
display: inline-block
float: left
+343 -25
View File
@@ -5,34 +5,105 @@ template(name="people")
else
.content-title.ext-box
.ext-box-left
span
i.fa.fa-users
| {{_ 'people'}}
input#searchInput(placeholder="{{_ 'search'}}")
button#searchButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{_ 'people-number'}} #{peopleNumber}
if loading.get
+spinner
else if orgSetting.get
span
i.fa.fa-sitemap
unless isMiniScreen
| {{_ 'organizations'}}
input#searchOrgInput(placeholder="{{_ 'search'}}")
button#searchOrgButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{#unless isMiniScreen}}{{_ 'org-number'}}{{/unless}} #{orgNumber}
else if teamSetting.get
span
i.fa.fa-users
unless isMiniScreen
| {{_ 'teams'}}
input#searchTeamInput(placeholder="{{_ 'search'}}")
button#searchTeamButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{#unless isMiniScreen}}{{_ 'team-number'}}{{/unless}} #{teamNumber}
else if peopleSetting.get
span
i.fa.fa-user
unless isMiniScreen
| {{_ 'people'}}
input#searchInput(placeholder="{{_ 'search'}}")
button#searchButton
i.fa.fa-search
| {{_ 'search'}}
.ext-box-right
span {{#unless isMiniScreen}}{{_ 'people-number'}}{{/unless}} #{peopleNumber}
.content-body
.side-menu
ul
li.active
a.js-setting-menu(data-id="people-setting")
a.js-org-menu(data-id="org-setting")
i.fa.fa-sitemap
| {{_ 'organizations'}}
li
a.js-team-menu(data-id="team-setting")
i.fa.fa-users
| {{_ 'teams'}}
li
a.js-people-menu(data-id="people-setting")
i.fa.fa-user
| {{_ 'people'}}
.main-body
if loading.get
+spinner
else if people.get
else if orgSetting.get
+orgGeneral
else if teamSetting.get
+teamGeneral
else if peopleSetting.get
+peopleGeneral
template(name="orgGeneral")
table
tbody
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
th {{_ 'shortName'}}
th {{_ 'website'}}
th {{_ 'teams'}}
th {{_ 'createdAt'}}
th {{_ 'active'}}
th
+newOrgRow
each org in orgList
+orgRow(orgId=org._id)
template(name="teamGeneral")
table
tbody
tr
th {{_ 'displayName'}}
th {{_ 'description'}}
th {{_ 'shortName'}}
th {{_ 'website'}}
th {{_ 'createdAt'}}
th {{_ 'active'}}
th
+newTeamRow
each team in teamList
+teamRow(teamId=team._id)
template(name="peopleGeneral")
table
tbody
tr
th {{_ 'username'}}
th {{_ 'fullname'}}
th {{_ 'initials'}}
th {{_ 'admin'}}
th {{_ 'email'}}
th {{_ 'verified'}}
@@ -44,11 +115,93 @@ template(name="peopleGeneral")
each user in peopleList
+peopleRow(userId=user._id)
template(name="newOrgRow")
a.new-org
i.fa.fa-edit
| {{_ 'new'}}
template(name="newTeamRow")
a.new-team
i.fa.fa-edit
| {{_ 'new'}}
template(name="newUserRow")
a.new-user
i.fa.fa-edit
| {{_ 'new'}}
template(name="orgRow")
tr
if orgData.loginDisabled
td <s>{{ orgData.displayName }}</s>
else
td {{ orgData.displayName }}
if orgData.loginDisabled
td <s>{{ orgData.orgDesc }}</s>
else
td {{ orgData.desc }}
if orgData.loginDisabled
td <s>{{ orgData.name }}</s>
else
td {{ orgData.name }}
if orgData.loginDisabled
td <s>{{ orgData.website }}</s>
else
td {{ orgData.website }}
if orgData.loginDisabled
td <s>{{ orgData.teams }}</s>
else
td {{ orgData.teams }}
if orgData.loginDisabled
td <s>{{ moment orgData.createdAt 'LLL' }}</s>
else
td {{ moment orgData.createdAt 'LLL' }}
td
if orgData.loginDisabled
| {{_ 'no'}}
else
| {{_ 'yes'}}
td
a.edit-org
i.fa.fa-edit
| {{_ 'edit'}}
a.more-settings-org
i.fa.fa-ellipsis-h
template(name="teamRow")
tr
if teamData.loginDisabled
td <s>{{ teamData.displayName }}</s>
else
td {{ teamData.displayName }}
if teamData.loginDisabled
td <s>{{ teamData.desc }}</s>
else
td {{ teamData.desc }}
if teamData.loginDisabled
td <s>{{ teamData.dame }}</s>
else
td {{ teamData.name }}
if teamData.loginDisabled
td <s>{{ teamData.website }}</s>
else
td {{ teamData.website }}
if orgData.loginDisabled
td <s>{{ moment teamData.createdAt 'LLL' }}</s>
else
td {{ moment teamData.createdAt 'LLL' }}
td
if teamData.loginDisabled
| {{_ 'no'}}
else
| {{_ 'yes'}}
td
a.edit-team
i.fa.fa-edit
| {{_ 'edit'}}
a.more-settings-team
i.fa.fa-ellipsis-h
template(name="peopleRow")
tr
if userData.loginDisabled
@@ -59,6 +212,10 @@ template(name="peopleRow")
td <s>{{ userData.profile.fullname }}</s>
else
td {{ userData.profile.fullname }}
if userData.loginDisabled
td <s>{{ userData.profile.initials }}</s>
else
td {{ userData.profile.initials }}
if userData.loginDisabled
td
if userData.isAdmin
@@ -104,13 +261,64 @@ template(name="peopleRow")
a.edit-user
i.fa.fa-edit
| {{_ 'edit'}}
a.more-settings-user
i.fa.fa-ellipsis-h
template(name="editOrgPopup")
form
label.hide.orgId(type="text" value=org._id)
label
| {{_ 'orgDisplayName'}}
input.js-orgDisplayName(type="text" value=org.displayName required)
span.error.hide.orgname-taken
| {{_ 'error-orgname-taken'}}
label
| {{_ 'orgDesc'}}
input.js-orgDesc(type="text" value=org.desc required)
label
| {{_ 'orgName'}}
input.js-orgName(type="text" value=org.name required)
label
| {{_ 'orgWebsite'}}
input.js-orgWebsite(type="text" value=org.website required)
label
| {{_ 'active'}}
select.select-active.js-org-isactive
option(value="false") {{_ 'yes'}}
option(value="true" selected="{{org.loginDisabled}}") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="editTeamPopup")
form
label.hide.teamId(type="text" value=team._id)
label
| {{_ 'displayName'}}
input.js-teamDisplayName(type="text" value=team.displayName required)
span.error.hide.teamname-taken
| {{_ 'error-teamname-taken'}}
label
| {{_ 'description'}}
input.js-orgDesc(type="text" value=org.desc required)
label
| {{_ 'name'}}
input.js-orgName(type="text" value=org.name required)
label
| {{_ 'website'}}
input.js-orgWebsite(type="text" value=org.website required)
label
| {{_ 'active'}}
select.select-active.js-team-isactive
option(value="false") {{_ 'yes'}}
option(value="true" selected="{{team.loginDisabled}}") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="editUserPopup")
form
label.hide.userId(type="text" value=user._id)
label
| {{_ 'fullname'}}
input.js-profile-fullname(type="text" value=user.profile.fullname)
label
| {{_ 'username'}}
span.error.hide.username-taken
@@ -118,7 +326,18 @@ template(name="editUserPopup")
if isLdap
input.js-profile-username(type="text" value=user.username readonly)
else
input.js-profile-username(type="text" value=user.username)
input.js-profile-username(type="text" value=user.username required)
label
| {{_ 'fullname'}}
input.js-profile-fullname(type="text" value=user.profile.fullname required)
label
| {{_ 'initials'}}
input.js-profile-initials(type="text" value=user.profile.initials)
label
| {{_ 'admin'}}
select.select-role.js-profile-isadmin
option(value="false") {{_ 'no'}}
option(value="true" selected="{{user.isAdmin}}") {{_ 'yes'}}
label
| {{_ 'email'}}
span.error.hide.email-taken
@@ -126,12 +345,12 @@ template(name="editUserPopup")
if isLdap
input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
else
input.js-profile-email(type="email" value="{{user.emails.[0].address}}")
input.js-profile-email(type="email" value="{{user.emails.[0].address}}" required)
label
| {{_ 'admin'}}
select.select-role.js-profile-isadmin
| {{_ 'verified'}}
select.select-verified.js-profile-email-verified
option(value="false") {{_ 'no'}}
option(value="true" selected="{{user.isAdmin}}") {{_ 'yes'}}
option(value="true" selected="{{userData.emails.[0].verified}}") {{_ 'yes'}}
label
| {{_ 'active'}}
select.select-active.js-profile-isactive
@@ -151,15 +370,64 @@ template(name="editUserPopup")
input.js-profile-password(type="password")
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
// div
// input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}")
template(name="newOrgPopup")
form
//label.hide.userId(type="text" value=user._id)
label
| {{_ 'displayName'}}
input.js-displayName(type="text" value="" required)
label
| {{_ 'description'}}
input.js-desc(type="text" value="" required)
label
| {{_ 'shortName'}}
input.js-name(type="text" value="")
label
| {{_ 'teams'}}
input.js-teams(type="text" value="")
label
| {{_ 'website'}}
input.js-website(type="text" value="")
label
| {{_ 'active'}}
select.select-active.js-profile-isactive
option(value="false" selected="selected") {{_ 'yes'}}
option(value="true") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="newTeamPopup")
form
//label.hide.teamId(type="text" value=team._id)
label
| {{_ 'displayName'}}
input.js-teamDisplayName(type="text" value="" required)
label
| {{_ 'description'}}
input.js-teamDesc(type="text" value="" required)
label
| {{_ 'shortName'}}
input.js-teamName(type="text" value="")
label
| {{_ 'website'}}
input.js-teamWebsite(type="text" value="")
label
| {{_ 'active'}}
select.select-active.js-profile-isactive
option(value="false" selected="selected") {{_ 'yes'}}
option(value="true") {{_ 'no'}}
hr
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="newUserPopup")
form
//label.hide.userId(type="text" value=user._id)
label
| {{_ 'fullname'}}
input.js-profile-fullname(type="text" value="")
input.js-profile-fullname(type="text" value="" required)
label
| {{_ 'username'}}
span.error.hide.username-taken
@@ -167,7 +435,7 @@ template(name="newUserPopup")
//if isLdap
// input.js-profile-username(type="text" value=user.username readonly)
//else
input.js-profile-username(type="text" value="")
input.js-profile-username(type="text" value="" required)
label
| {{_ 'email'}}
span.error.hide.email-taken
@@ -175,7 +443,7 @@ template(name="newUserPopup")
//if isLdap
// input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly)
//else
input.js-profile-email(type="email" value="")
input.js-profile-email(type="email" value="" required)
label
| {{_ 'admin'}}
select.select-role.js-profile-isadmin
@@ -197,6 +465,56 @@ template(name="newUserPopup")
hr
label
| {{_ 'password'}}
input.js-profile-password(type="password")
input.js-profile-password(type="password" required)
div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="settingsOrgPopup")
ul.pop-over-list
li
a.impersonate-org
i.fa.fa-user
| {{_ 'impersonate-org'}}
// Delete is not enabled yet, because it does leave empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
// that does now remove member from board, card members and assignees correctly,
// but that should be used to remove user from all boards similarly
// - wekan/models/users.js Delete is not enabled
//li
// br
// br
// hr
//li
// form
// label.hide.userId(type="text" value=user._id)
// div.buttonsContainer
// input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
template(name="settingsUserPopup")
ul.pop-over-list
li
a.impersonate-user
i.fa.fa-user
| {{_ 'impersonate-user'}}
// Delete is not enabled yet, because it does leave empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
// that does now remove member from board, card members and assignees correctly,
// but that should be used to remove user from all boards similarly
// - wekan/models/users.js Delete is not enabled
//li
// br
// br
// hr
//li
// form
// label.hide.userId(type="text" value=user._id)
// div.buttonsContainer
// input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
+345 -27
View File
@@ -1,3 +1,5 @@
const orgsPerPage = 25;
const teamsPerPage = 25;
const usersPerPage = 25;
BlazeComponent.extendComponent({
@@ -7,17 +9,45 @@ BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
this.people = new ReactiveVar(true);
this.orgSetting = new ReactiveVar(true);
this.teamSetting = new ReactiveVar(true);
this.peopleSetting = new ReactiveVar(true);
this.findOrgsOptions = new ReactiveVar({});
this.findTeamsOptions = new ReactiveVar({});
this.findUsersOptions = new ReactiveVar({});
this.number = new ReactiveVar(0);
this.numberOrgs = new ReactiveVar(0);
this.numberTeams = new ReactiveVar(0);
this.numberPeople = new ReactiveVar(0);
this.page = new ReactiveVar(1);
this.loadNextPageLocked = false;
this.callFirstWith(null, 'resetNextPeak');
this.autorun(() => {
const limit = this.page.get() * usersPerPage;
const limitOrgs = this.page.get() * orgsPerPage;
const limitTeams = this.page.get() * teamsPerPage;
const limitUsers = this.page.get() * usersPerPage;
this.subscribe('people', this.findUsersOptions.get(), limit, () => {
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {
this.loadNextPageLocked = false;
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
this.calculateNextPeak();
const nextPeakAfter = this.callFirstWith(null, 'getNextPeak');
if (nextPeakBefore === nextPeakAfter) {
this.callFirstWith(null, 'resetNextPeak');
}
});
this.subscribe('team', this.findTeamsOptions.get(), limitTeams, () => {
this.loadNextPageLocked = false;
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
this.calculateNextPeak();
const nextPeakAfter = this.callFirstWith(null, 'getNextPeak');
if (nextPeakBefore === nextPeakAfter) {
this.callFirstWith(null, 'resetNextPeak');
}
});
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {
this.loadNextPageLocked = false;
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
this.calculateNextPeak();
@@ -31,6 +61,22 @@ BlazeComponent.extendComponent({
events() {
return [
{
'click #searchOrgButton'() {
this.filterOrg();
},
'keydown #searchOrgInput'(event) {
if (event.keyCode === 13 && !event.shiftKey) {
this.filterOrg();
}
},
'click #searchTeamButton'() {
this.filterTeam();
},
'keydown #searchTeamInput'(event) {
if (event.keyCode === 13 && !event.shiftKey) {
this.filterTeam();
}
},
'click #searchButton'() {
this.filterPeople();
},
@@ -39,9 +85,18 @@ BlazeComponent.extendComponent({
this.filterPeople();
}
},
'click #newOrgButton'() {
Popup.open('newOrg');
},
'click #newTeamButton'() {
Popup.open('newTeam');
},
'click #newUserButton'() {
Popup.open('newUser');
},
'click a.js-org-menu': this.switchMenu,
'click a.js-team-menu': this.switchMenu,
'click a.js-people-menu': this.switchMenu,
},
];
},
@@ -84,18 +139,63 @@ BlazeComponent.extendComponent({
setLoading(w) {
this.loading.set(w);
},
orgList() {
const orgs = Org.find(this.findOrgsOptions.get(), {
fields: { _id: true },
});
this.numberOrgs.set(org.count(false));
return orgs;
},
teamList() {
const teams = Team.find(this.findTeamsOptions.get(), {
fields: { _id: true },
});
this.numberTeams.set(team.count(false));
return teams;
},
peopleList() {
const users = Users.find(this.findUsersOptions.get(), {
fields: { _id: true },
});
this.number.set(users.count(false));
this.numberPeople.set(users.count(false));
return users;
},
orgNumber() {
return this.numberOrgs.get();
},
teamNumber() {
return this.numberTeams.get();
},
peopleNumber() {
return this.number.get();
return this.numberPeople.get();
},
switchMenu(event) {
const target = $(event.target);
if (!target.hasClass('active')) {
$('.side-menu li.active').removeClass('active');
target.parent().addClass('active');
const targetID = target.data('id');
this.orgSetting.set('org-setting' === targetID);
this.teamSetting.set('team-setting' === targetID);
this.peopleSetting.set('people-setting' === targetID);
}
},
}).register('people');
Template.orgRow.helpers({
orgData() {
const orgCollection = this.esSearch ? ESSearchResults : Org;
return orgCollection.findOne(this.orgId);
},
});
Template.teamRow.helpers({
teamData() {
const teamCollection = this.esSearch ? ESSearchResults : Team;
return teamCollection.findOne(this.teamId);
},
});
Template.peopleRow.helpers({
userData() {
const userCollection = this.esSearch ? ESSearchResults : Users;
@@ -122,6 +222,24 @@ Template.editUserPopup.onCreated(function() {
});
});
Template.editOrgPopup.helpers({
org() {
return Org.findOne(this.orgId);
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.editTeamPopup.helpers({
team() {
return Team.findOne(this.teamId);
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.editUserPopup.helpers({
user() {
return Users.findOne(this.userId);
@@ -144,6 +262,14 @@ Template.editUserPopup.helpers({
},
});
Template.newOrgPopup.onCreated(function() {
this.errorMessage = new ReactiveVar('');
});
Template.newTeamPopup.onCreated(function() {
this.errorMessage = new ReactiveVar('');
});
Template.newUserPopup.onCreated(function() {
this.authenticationMethods = new ReactiveVar([]);
this.errorMessage = new ReactiveVar('');
@@ -163,28 +289,76 @@ Template.newUserPopup.onCreated(function() {
});
});
Template.newUserPopup.helpers({
//user() {
// return Users.findOne(this.userId);
//},
authentications() {
return Template.instance().authenticationMethods.get();
Template.newOrgPopup.helpers({
org() {
return Org.findOne(this.orgId);
},
//isSelected(match) {
// const userId = Template.instance().data.userId;
// const selected = Users.findOne(userId).authenticationMethod;
// return selected === match;
//},
//isLdap() {
// const userId = Template.instance().data.userId;
// const selected = Users.findOne(userId).authenticationMethod;
// return selected === 'ldap';
//},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.newTeamPopup.helpers({
team() {
return Team.findOne(this.teamId);
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
Template.newUserPopup.helpers({
user() {
return Users.findOne(this.userId);
},
authentications() {
return Template.instance().authenticationMethods.get();
},
isSelected(match) {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === match;
},
isLdap() {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === 'ldap';
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
BlazeComponent.extendComponent({
onCreated() {},
org() {
return Org.findOne(this.orgId);
},
events() {
return [
{
'click a.edit-org': Popup.open('editOrg'),
'click a.more-settings-org': Popup.open('settingsOrg'),
},
];
},
}).register('orgRow');
BlazeComponent.extendComponent({
onCreated() {},
team() {
return Team.findOne(this.teamId);
},
events() {
return [
{
'click a.edit-team': Popup.open('editTeam'),
'click a.more-settings-team': Popup.open('settingsTeam'),
},
];
},
}).register('teamRow');
BlazeComponent.extendComponent({
onCreated() {},
user() {
@@ -194,11 +368,32 @@ BlazeComponent.extendComponent({
return [
{
'click a.edit-user': Popup.open('editUser'),
'click a.more-settings-user': Popup.open('settingsUser'),
},
];
},
}).register('peopleRow');
BlazeComponent.extendComponent({
events() {
return [
{
'click a.new-org': Popup.open('newOrg'),
},
];
},
}).register('newOrgRow');
BlazeComponent.extendComponent({
events() {
return [
{
'click a.new-team': Popup.open('newTeam'),
},
];
},
}).register('newTeamRow');
BlazeComponent.extendComponent({
events() {
return [
@@ -213,20 +408,32 @@ Template.editUserPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const user = Users.findOne(this.userId);
const fullname = templateInstance.find('.js-profile-fullname').value.trim();
const username = templateInstance.find('.js-profile-username').value.trim();
const fullname = templateInstance.find('.js-profile-fullname').value.trim();
const initials = templateInstance.find('.js-profile-initials').value.trim();
const password = templateInstance.find('.js-profile-password').value;
const isAdmin = templateInstance.find('.js-profile-isadmin').value.trim();
const isActive = templateInstance.find('.js-profile-isactive').value.trim();
const email = templateInstance.find('.js-profile-email').value.trim();
const verified = templateInstance
.find('.js-profile-email-verified')
.value.trim();
const authentication = templateInstance
.find('.js-authenticationMethod')
.value.trim();
const isChangePassword = password.length > 0;
const isChangeUserName = username !== user.username;
const isChangeInitials = initials.length > 0;
const isChangeEmailVerified = verified !== user.emails[0].verified;
// If previously email address has not been set, it is undefined,
// check for undefined, and allow adding email address.
const isChangeEmail =
email.toLowerCase() !== user.emails[0].address.toLowerCase();
email.toLowerCase() !==
(typeof user.emails !== 'undefined'
? user.emails[0].address.toLowerCase()
: false);
Users.update(this.userId, {
$set: {
@@ -241,6 +448,14 @@ Template.editUserPopup.events({
Meteor.call('setPassword', password, this.userId);
}
if (isChangeEmailVerified) {
Meteor.call('setEmailVerified', email, verified === 'true', this.userId);
}
if (isChangeInitials) {
Meteor.call('setInitials', initials, this.userId);
}
if (isChangeUserName && isChangeEmail) {
Meteor.call(
'setUsernameAndEmail',
@@ -296,11 +511,47 @@ Template.editUserPopup.events({
});
} else Popup.close();
},
});
'click #deleteButton': Popup.afterConfirm('userDelete', function() {
Users.remove(this.userId);
Template.newOrgPopup.events({
submit(event, templateInstance) {
event.preventDefault();
const displayName = templateInstance.find('.js-displayName').value.trim();
const desc = templateInstance.find('.js-desc').value.trim();
const name = templateInstance.find('.js-name').value.trim();
const teams = templateInstance.find('.js-teams').value.trim();
const website = templateInstance.find('.js-website').value.trim();
const isActive = templateInstance.find('.js-profile-isactive').value.trim();
Meteor.call(
'setCreateOrg',
displayName,
desc,
name,
teams,
website,
isActive,
email.toLowerCase(),
function(error) {
const nameMessageElement = templateInstance.$('.name-taken');
if (error) {
const errorElement = error.error;
if (errorElement === 'name-already-taken') {
nameMessageElement.show();
emailMessageElement.hide();
} else if (errorElement === 'email-already-taken') {
usernameMessageElement.hide();
emailMessageElement.show();
}
} else {
usernameMessageElement.hide();
emailMessageElement.hide();
Popup.close();
}
},
);
Popup.close();
}),
},
});
Template.newUserPopup.events({
@@ -343,3 +594,70 @@ Template.newUserPopup.events({
Popup.close();
},
});
Template.settingsUserPopup.events({
'click .impersonate-user'(event) {
event.preventDefault();
Meteor.call('impersonate', this.userId, err => {
if (!err) {
FlowRouter.go('/');
Meteor.connection.setUserId(this.userId);
}
});
},
'click #deleteButton'(event) {
event.preventDefault();
/*
// Delete is not enabled yet, because it does leave empty user avatars
// to boards: boards members, card members and assignees have
// empty users. See:
// - wekan/client/components/settings/peopleBody.jade deleteButton
// - wekan/client/components/settings/peopleBody.js deleteButton
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
// that does now remove member from board, card members and assignees correctly,
// but that should be used to remove user from all boards similarly
// - wekan/models/users.js Delete is not enabled
//
//console.log('user id: ' + this.userId);
//Popup.afterConfirm('userDelete', function(event) {
//Boards.find({ members: this.userId }).forEach(board => {
// console.log('board id: ' + board._id);
//Cards.find({ boardId: board._id, members: this.userId }).forEach(card => {
// card.unassignMember(this.userId);
//});
//Cards.find({ boardId: board._id, members: this.userId }).forEach(card => {
// card.unassignMember(this.userId);
//});
//Cards.find({ boardId: board._id, assignees: this.userId }).forEach(card => {
// card.unassignAssignee(this.userId);
//});
//Boards.findOne({ boardId: board._id }).removeMember(this.userId);
//});
//Users.remove(this.userId);
*/
Popup.close();
},
});
Template.settingsUserPopup.helpers({
user() {
return Users.findOne(this.userId);
},
authentications() {
return Template.instance().authenticationMethods.get();
},
isSelected(match) {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === match;
},
isLdap() {
const userId = Template.instance().data.userId;
const selected = Users.findOne(userId).authenticationMethod;
return selected === 'ldap';
},
errorMessage() {
return Template.instance().errorMessage.get();
},
});
+4 -1
View File
@@ -21,7 +21,7 @@ table
.ext-box-left
display: flex;
width: 40%
width: 100%
span
vertical-align: center;
@@ -46,3 +46,6 @@ table
div
margin: auto
.more-settings-user,.more-settings-team,.more-settings-org
margin-left: 10px;
+31 -8
View File
@@ -163,13 +163,6 @@ template(name='announcementSettings')
template(name='layoutSettings')
ul#layout-setting.setting-detail
//li.layout-form
.title {{_ 'hide-logo'}}
.form-group.flex
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="true" checked="{{#if currentSetting.hideLogo}}checked{{/if}}")
span {{_ 'yes'}}
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
span {{_ 'no'}}
li.layout-form
.title {{_ 'display-authentication-method'}}
.form-group.flex
@@ -184,10 +177,40 @@ template(name='layoutSettings')
.title {{_ 'custom-product-name'}}
.form-group
input.wekan-form-control#product-name(type="text", placeholder="" value="{{currentSetting.productName}}")
li.layout-form
.title {{_ 'hide-logo'}}
.form-group.flex
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="true" checked="{{#if currentSetting.hideLogo}}checked{{/if}}")
span {{_ 'yes'}}
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
span {{_ 'no'}}
li.layout-form
.title {{_ 'custom-login-logo-image-url'}}
.form-group
input.wekan-form-control#custom-login-logo-image-url(type="text", placeholder="" value="{{currentSetting.customLoginLogoImageUrl}}")
li.layout-form
.title {{_ 'custom-login-logo-link-url'}}
.form-group
input.wekan-form-control#custom-login-logo-link-url(type="text", placeholder="" value="{{currentSetting.customLoginLogoLinkUrl}}")
li.layout-form
.title {{_ 'text-below-custom-login-logo'}}
.form-group
textarea#text-below-custom-login-logo.wekan-form-control= currentSetting.textBelowCustomLoginLogo
li.layout-form
.title {{_ 'custom-top-left-corner-logo-image-url'}}
.form-group
input.wekan-form-control#custom-top-left-corner-logo-image-url(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoImageUrl}}")
li.layout-form
.title {{_ 'custom-top-left-corner-logo-link-url'}}
.form-group
input.wekan-form-control#custom-top-left-corner-logo-link-url(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoLinkUrl}}")
li.layout-form
.title {{_ 'custom-top-left-corner-logo-height'}}
.form-group
input.wekan-form-control#custom-top-left-corner-logo-height(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoHeight}}")
li
button.js-save-layout.primary {{_ 'save'}}
template(name='selectAuthenticationMethod')
select#defaultAuthenticationMethod
each authentications
+30
View File
@@ -167,6 +167,30 @@ BlazeComponent.extendComponent({
const productName = $('#product-name')
.val()
.trim();
const customLoginLogoImageUrl = $('#custom-login-logo-image-url')
.val()
.trim();
const customLoginLogoLinkUrl = $('#custom-login-logo-link-url')
.val()
.trim();
const textBelowCustomLoginLogo = $('#text-below-custom-login-logo')
.val()
.trim();
const customTopLeftCornerLogoImageUrl = $(
'#custom-top-left-corner-logo-image-url',
)
.val()
.trim();
const customTopLeftCornerLogoLinkUrl = $(
'#custom-top-left-corner-logo-link-url',
)
.val()
.trim();
const customTopLeftCornerLogoHeight = $(
'#custom-top-left-corner-logo-height',
)
.val()
.trim();
const hideLogoChange = $('input[name=hideLogo]:checked').val() === 'true';
const displayAuthenticationMethod =
$('input[name=displayAuthenticationMethod]:checked').val() === 'true';
@@ -177,6 +201,12 @@ BlazeComponent.extendComponent({
$set: {
productName,
hideLogo: hideLogoChange,
customLoginLogoImageUrl,
customLoginLogoLinkUrl,
textBelowCustomLoginLogo,
customTopLeftCornerLogoImageUrl,
customTopLeftCornerLogoLinkUrl,
customTopLeftCornerLogoHeight,
displayAuthenticationMethod,
defaultAuthenticationMethod,
},
+15 -16
View File
@@ -3,22 +3,21 @@ template(name="settingHeaderBar")
span {{_ 'admin-panel'}}
.setting-header-btns.left
unless isMiniScreen
if currentUser
a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
i.fa(class="fa-cog")
span {{_ 'settings'}}
if currentUser
a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
i.fa(class="fa-cog")
span {{_ 'settings'}}
a.setting-header-btn.people(href="{{pathFor 'people'}}")
i.fa(class="fa-users")
span {{_ 'people'}}
a.setting-header-btn.people(href="{{pathFor 'people'}}")
i.fa(class="fa-users")
span {{_ 'people'}}
a.setting-header-btn.informations(href="{{pathFor 'information'}}")
i.fa(class="fa-info-circle")
span {{_ 'info'}}
a.setting-header-btn.informations(href="{{pathFor 'information'}}")
i.fa(class="fa-info-circle")
span {{_ 'info'}}
else
a.setting-header-btn.js-log-in(
title="{{_ 'log-in'}}")
i.fa.fa-sign-in
span {{_ 'log-in'}}
else
a.setting-header-btn.js-log-in(
title="{{_ 'log-in'}}")
i.fa.fa-sign-in
span {{_ 'log-in'}}
+44 -39
View File
@@ -269,14 +269,16 @@ template(name="outgoingWebhooksPopup")
template(name="boardMenuPopup")
ul.pop-over-list
li
a.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
| {{_ 'rules'}}
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'custom-fields'}}
if currentUser.isBoardAdmin
li
a.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
| {{_ 'rules'}}
if currentUser.isBoardAdmin
li
a.js-custom-fields
i.fa.fa-list-alt
| {{_ 'custom-fields'}}
li
a.js-open-archives
i.fa.fa-archive
@@ -297,14 +299,14 @@ template(name="boardMenuPopup")
i.fa.fa-flag
| {{_ 'language'}}
unless isSandstorm
if currentUser.isBoardAdmin
hr
ul.pop-over-list
if withApi
li
a.js-export-board
i.fa.fa-share-alt
| {{_ 'export-board'}}
hr
ul.pop-over-list
if withApi
li
a.js-export-board
i.fa.fa-share-alt
| {{_ 'export-board'}}
if currentUser.isBoardAdmin
li
a.js-outgoing-webhooks
i.fa.fa-globe
@@ -317,7 +319,8 @@ template(name="boardMenuPopup")
a.js-subtask-settings
i.fa.fa-sitemap
| {{_ 'subtask-settings'}}
unless currentBoard.isTemplatesBoard
unless currentBoard.isTemplatesBoard
if currentUser.isBoardAdmin
hr
ul.pop-over-list
li
@@ -329,20 +332,22 @@ template(name="boardMenuPopup")
if isSandstorm
hr
ul.pop-over-list
li
a.js-export-board
i.fa.fa-share-alt
| {{_ 'export-board'}}
li
a.js-import-board
i.fa.fa-share-alt
i.fa.fa-sign-in
| {{_ 'import-board-c'}}
li
a.js-archive-board
i.fa.fa-arrow-right
i.fa.fa-archive
| {{_ 'archive-board'}}
if currentUser.isMember
li
a.js-export-board
i.fa.fa-share-alt
| {{_ 'export-board'}}
li
a.js-import-board
i.fa.fa-share-alt
i.fa.fa-sign-in
| {{_ 'import-board-c'}}
if currentUser.isBoardAdmin
li
a.js-archive-board
i.fa.fa-arrow-right
i.fa.fa-archive
| {{_ 'archive-board'}}
li
a.js-outgoing-webhooks
i.fa.fa-globe
@@ -366,14 +371,14 @@ template(name="exportBoard")
a.download-json-link(href="{{exportUrl}}", download="{{exportJsonFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-json'}}
//li
// a(href="{{exportCsvUrl}}", download="{{exportCsvFilename}}")
// i.fa.fa-share-alt
// | {{_ 'export-board-csv'}}
//li
// a(href="{{exportTsvUrl}}", download="{{exportTsvFilename}}")
// i.fa.fa-share-alt
// | {{_ 'export-board-tsv'}}
li
a(href="{{exportCsvUrl}}", download="{{exportCsvFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-csv'}}
li
a(href="{{exportTsvUrl}}", download="{{exportTsvFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-tsv'}}
li
a.html-export-board
i.fa.fa-archive
+25 -6
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
Sidebar = null;
const defaultView = 'home';
@@ -112,10 +110,12 @@ BlazeComponent.extendComponent({
currentUser = Meteor.user();
if (currentUser) {
Meteor.call('toggleMinicardLabelText');
} else if (cookies.has('hiddenMinicardLabelText')) {
cookies.remove('hiddenMinicardLabelText');
} else if (window.localStorage.getItem('hiddenMinicardLabelText')) {
window.localStorage.removeItem('hiddenMinicardLabelText');
location.reload();
} else {
cookies.set('hiddenMinicardLabelText', 'true');
window.localStorage.setItem('hiddenMinicardLabelText', 'true');
location.reload();
}
},
'click .js-shortcuts'() {
@@ -133,7 +133,7 @@ Template.homeSidebar.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).hiddenMinicardLabelText;
} else if (cookies.has('hiddenMinicardLabelText')) {
} else if (window.localStorage.getItem('hiddenMinicardLabelText')) {
return true;
} else {
return false;
@@ -155,6 +155,9 @@ Template.memberPopup.helpers({
user() {
return Users.findOne(this.userId);
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
memberType() {
const type = Users.findOne(this.userId).isBoardAdmin() ? 'admin' : 'normal';
if (type === 'normal') {
@@ -224,6 +227,9 @@ Template.boardMenuPopup.onCreated(function() {
});
Template.boardMenuPopup.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
withApi() {
return Template.instance().apiEnabled.get();
},
@@ -249,11 +255,15 @@ Template.memberPopup.events({
},
'click .js-change-role': Popup.open('changePermissions'),
'click .js-remove-member': Popup.afterConfirm('removeMember', function() {
// This works from removing member from board, card members and assignees.
const boardId = Session.get('currentBoard');
const memberId = this.userId;
Cards.find({ boardId, members: memberId }).forEach(card => {
card.unassignMember(memberId);
});
Cards.find({ boardId, assignees: memberId }).forEach(card => {
card.unassignAssignee(memberId);
});
Boards.findOne(boardId).removeMember(memberId);
Popup.close();
}),
@@ -294,6 +304,9 @@ Template.membersWidget.helpers({
return false;
}
},
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
Template.membersWidget.events({
@@ -475,6 +488,12 @@ Template.labelsWidget.events({
'click .js-add-label': Popup.open('createLabel'),
});
Template.labelsWidget.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
// Board members can assign people or labels by drag-dropping elements from the
// sidebar to the cards on the board. In order to re-initialize the jquery-ui
// plugin any time a draggable member or label is modified or removed we use a
+3 -2
View File
@@ -34,6 +34,7 @@
color: darken(white, 50%)
font-size: 1em
margin-bottom: 10px
font-weight: bold
i.fa
margin-right: 3px
@@ -167,8 +168,8 @@
button
float: right
margin: 0
margin-bottom: 5px
padding: 0 2px 0 10px
margin: 0 0 5px 5px
padding: 0 10px 0 10px
@media screen and (max-width: 800px)
.board-sidebar
+18 -12
View File
@@ -5,8 +5,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-all-cards {{_ 'restore-all'}}
| -
a.js-delete-all-cards {{_ 'delete-all'}}
if currentUser.isBoardAdmin
| -
a.js-delete-all-cards {{_ 'delete-all'}}
each archivedCards
.minicard-wrapper.js-minicard
+minicard(this)
@@ -14,8 +15,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-card {{_ 'restore'}}
| -
a.js-delete-card {{_ 'delete'}}
if currentUser.isBoardAdmin
| -
a.js-delete-card {{_ 'delete'}}
if cardIsInArchivedList
p.quiet.small ({{_ 'warn-list-archived'}})
else
@@ -25,8 +27,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-all-lists {{_ 'restore-all'}}
| -
a.js-delete-all-lists {{_ 'delete-all'}}
if currentUser.isBoardAdmin
| -
a.js-delete-all-lists {{_ 'delete-all'}}
ul.archived-lists
each archivedLists
li.archived-lists-item
@@ -35,8 +38,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-list {{_ 'restore'}}
| -
a.js-delete-list {{_ 'delete'}}
if currentUser.isBoardAdmin
| -
a.js-delete-list {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-lists'}}
@@ -44,8 +48,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-all-swimlanes {{_ 'restore-all'}}
| -
a.js-delete-all-swimlanes {{_ 'delete-all'}}
if currentUser.isBoardAdmin
| -
a.js-delete-all-swimlanes {{_ 'delete-all'}}
ul.archived-lists
each archivedSwimlanes
li.archived-lists-item
@@ -54,8 +59,9 @@ template(name="archivesSidebar")
unless isWorker
p.quiet
a.js-restore-swimlane {{_ 'restore'}}
| -
a.js-delete-swimlane {{_ 'delete'}}
if currentUser.isBoardAdmin
| -
a.js-delete-swimlane {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-swimlanes'}}
else
@@ -141,6 +141,9 @@ BlazeComponent.extendComponent({
}).register('archivesSidebar');
Template.archivesSidebar.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
isWorker() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return (
+24 -4
View File
@@ -4,10 +4,14 @@
and #each x in y constructors to fix this.
template(name="filterSidebar")
h3 {{_ 'list-filter-label'}}
ul.sidebar-list
span {{_ 'list-filter-label'}}
form.js-list-filter
input(type="text")
hr
h3
i.fa.fa-tags
| {{_ 'filter-labels-label'}}
ul.sidebar-list
li(class="{{#if Filter.labelIds.isSelected undefined}}active{{/if}}")
a.name.js-toggle-label-filter
@@ -27,6 +31,9 @@ template(name="filterSidebar")
if Filter.labelIds.isSelected _id
i.fa.fa-check
hr
h3
i.fa.fa-users
| {{_ 'filter-member-label'}}
ul.sidebar-list
li(class="{{#if Filter.members.isSelected undefined}}active{{/if}}")
a.name.js-toggle-member-filter
@@ -45,6 +52,9 @@ template(name="filterSidebar")
if Filter.members.isSelected _id
i.fa.fa-check
hr
h3
i.fa.fa-user
| {{_ 'filter-assignee-label'}}
ul.sidebar-list
li(class="{{#if Filter.assignees.isSelected undefined}}active{{/if}}")
a.name.js-toggle-assignee-filter
@@ -63,6 +73,9 @@ template(name="filterSidebar")
if Filter.assignees.isSelected _id
i.fa.fa-check
hr
h3
i.fa.fa-list-alt
| {{_ 'filter-custom-fields-label'}}
ul.sidebar-list
li(class="{{#if Filter.customFields.isSelected undefined}}active{{/if}}")
a.name.js-toggle-custom-fields-filter
@@ -78,6 +91,8 @@ template(name="filterSidebar")
if Filter.customFields.isSelected _id
i.fa.fa-check
hr
h3
| {{_ 'other-filters-label'}}
ul.sidebar-list
li(class="{{#if Filter.archive.isSelected _id}}active{{/if}}")
a.name.js-toggle-archive-filter
@@ -85,7 +100,6 @@ template(name="filterSidebar")
| {{_ 'filter-show-archive'}}
if Filter.archive.isSelected _id
i.fa.fa-check
hr
ul.sidebar-list
li(class="{{#if Filter.hideEmpty.isSelected _id}}active{{/if}}")
a.name.js-toggle-hideEmpty-filter
@@ -94,7 +108,7 @@ template(name="filterSidebar")
if Filter.hideEmpty.isSelected _id
i.fa.fa-check
hr
span {{_ 'advanced-filter-label'}}
h3 {{_ 'advanced-filter-label'}}
input.js-field-advanced-filter(type="text")
span {{_ 'advanced-filter-description'}}
if Filter.isActive
@@ -107,6 +121,9 @@ template(name="filterSidebar")
span {{_ 'filter-to-selection'}}
template(name="multiselectionSidebar")
h3
i.fa.fa-tags
| {{_ 'multi-selection-label'}}
ul.sidebar-list
each currentBoard.labels
li
@@ -122,6 +139,9 @@ template(name="multiselectionSidebar")
else if someSelectedElementHave 'label' _id
i.fa.fa-ellipsis-h
hr
h3
i.fa.fa-users
| {{_ 'multi-selection-member'}}
ul.sidebar-list
each currentBoard.activeMembers
with getUser userId
@@ -135,7 +155,7 @@ template(name="multiselectionSidebar")
i.fa.fa-check
else if someSelectedElementHave 'member' _id
i.fa.fa-ellipsis-h
unless currentUser.isWorker
if currentUser.isBoardAdmin
hr
a.sidebar-btn.js-move-selection
i.fa.fa-share
@@ -134,6 +134,15 @@ BlazeComponent.extendComponent({
},
}).register('multiselectionSidebar');
Template.multiselectionSidebar.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
isCommentOnly() {
return Meteor.user().isCommentOnly();
},
});
Template.disambiguateMultiLabelPopup.events({
'click .js-remove-label'() {
mutateSelectedCards('removeLabel', this._id);
@@ -15,8 +15,9 @@ template(name="swimlaneFixedHeader")
= title
.swimlane-header-menu
unless currentUser.isCommentOnly
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
a.fa.fa-navicon.js-open-swimlane-menu
if currentUser.isBoardAdmin
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
a.fa.fa-navicon.js-open-swimlane-menu
unless isMiniScreen
if showDesktopDragHandles
a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle
+13 -3
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const { calculateIndexData } = Utils;
let swimlaneColors;
@@ -35,7 +33,7 @@ Template.swimlaneHeader.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
@@ -43,6 +41,12 @@ Template.swimlaneHeader.helpers({
},
});
Template.swimlaneFixedHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
});
Template.swimlaneActionPopup.events({
'click .js-set-swimlane-color': Popup.open('setSwimlaneColor'),
'click .js-close-swimlane'(event) {
@@ -52,6 +56,12 @@ Template.swimlaneActionPopup.events({
},
});
Template.swimlaneActionPopup.helpers({
isCommentOnly() {
return Meteor.user().isCommentOnly();
},
});
BlazeComponent.extendComponent({
onCreated() {
this.currentSwimlane = this.currentData();
+16 -15
View File
@@ -45,18 +45,19 @@ template(name="listsGroup")
template(name="addListForm")
unless currentUser.isWorker
.list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}")
.list-header-add
+inlinedForm(autoclose=false)
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
autocomplete="off" autofocus)
.edit-controls.clearfix
button.primary.confirm(type="submit") {{_ 'save'}}
unless currentBoard.isTemplatesBoard
unless currentBoard.isTemplateBoard
span.quiet
| {{_ 'or'}}
a.js-list-template {{_ 'template'}}
else
a.open-list-composer.js-open-inlined-form
i.fa.fa-plus
| {{_ 'add-list'}}
if currentUser.isBoardAdmin
.list-header-add
+inlinedForm(autoclose=false)
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
autocomplete="off" autofocus)
.edit-controls.clearfix
button.primary.confirm(type="submit") {{_ 'save'}}
unless currentBoard.isTemplatesBoard
unless currentBoard.isTemplateBoard
span.quiet
| {{_ 'or'}}
a.js-list-template {{_ 'template'}}
else
a.open-list-composer.js-open-inlined-form
i.fa.fa-plus
| {{_ 'add-list'}}
+8 -8
View File
@@ -1,5 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const { calculateIndex } = Utils;
function currentListIsInThisSwimlane(swimlaneId) {
@@ -102,7 +100,7 @@ function initSortable(boardComponent, $listsDom) {
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
@@ -124,7 +122,8 @@ function initSortable(boardComponent, $listsDom) {
'option',
'disabled',
// Disable drag-dropping when user is not member/is worker
!userIsMember() || Meteor.user().isWorker(),
//!userIsMember() || Meteor.user().isWorker(),
!Meteor.user().isBoardAdmin(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
@@ -178,7 +177,7 @@ BlazeComponent.extendComponent({
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
@@ -269,19 +268,20 @@ Template.swimlane.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
},
canSeeAddList() {
return (
return Meteor.user().isBoardAdmin();
/*
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
*/
},
});
+11 -1
View File
@@ -36,6 +36,10 @@
// Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp
*/
[class=swimlane]
position: sticky
left: 0
.swimlane
// Even if this background color is the same as the body we can't leave it
// transparent, because that won't work during a swimlane drag.
@@ -81,10 +85,16 @@
.swimlane-header-menu
position: absolute
padding: 5px 5px
font-size: 22px
.swimlane-header-plus-icon
margin-left: 5px
margin-right: 10px
padding-right: 20px
font-size: 22px
.swimlane-header-menu-icon
padding-right: 20px
font-size: 22px
.swimlane-header-handle
position: absolute
+28 -12
View File
@@ -13,6 +13,34 @@ template(name="headerUserBar")
template(name="memberMenuPopup")
ul.pop-over-list
with currentUser
li
a.js-my-cards(href="{{pathFor 'my-cards'}}")
i.fa.fa-list
| {{_ 'my-cards'}}
li
a(href="{{pathFor 'home'}}")
span.fa.fa-home
| {{_ 'all-boards'}}
li
a(href="{{pathFor 'public'}}")
span.fa.fa-globe
| {{_ 'public'}}
li
a.board-header-btn.js-open-archived-board
i.fa.fa-archive
span {{_ 'archives'}}
unless currentUser.isWorker
ul.pop-over-list
li
a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
i.fa.fa-clone
| {{_ 'templates'}}
if currentUser.isAdmin
li
a.js-go-setting(href="{{pathFor 'setting'}}")
i.fa.fa-lock
| {{_ 'admin-panel'}}
hr
li
a.js-edit-profile
i.fa.fa-user
@@ -34,18 +62,6 @@ template(name="memberMenuPopup")
a.js-change-language
i.fa.fa-flag
| {{_ 'changeLanguagePopup-title'}}
if currentUser.isAdmin
li
a.js-go-setting(href="{{pathFor 'setting'}}")
i.fa.fa-lock
| {{_ 'admin-panel'}}
unless currentUser.isWorker
hr
ul.pop-over-list
li
a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
i.fa.fa-clone
| {{_ 'templates'}}
unless isSandstorm
hr
ul.pop-over-list
+18 -15
View File
@@ -1,6 +1,3 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
Template.headerUserBar.events({
'click .js-open-header-member-menu': Popup.open('memberMenu'),
'click .js-change-avatar': Popup.open('changeAvatar'),
@@ -28,6 +25,12 @@ Template.memberMenuPopup.helpers({
});
Template.memberMenuPopup.events({
'click .js-my-cards'() {
Popup.close();
},
'click .js-open-archived-board'() {
Modal.open('archivedBoards');
},
'click .js-edit-profile': Popup.open('editProfile'),
'click .js-change-settings': Popup.open('changeSettings'),
'click .js-change-avatar': Popup.open('changeAvatar'),
@@ -200,7 +203,7 @@ Template.changeSettingsPopup.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (cookies.has('showDesktopDragHandles')) {
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
@@ -210,7 +213,7 @@ Template.changeSettingsPopup.helpers({
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).hasHiddenSystemMessages;
} else if (cookies.has('hasHiddenSystemMessages')) {
} else if (window.localStorage.getItem('hasHiddenSystemMessages')) {
return true;
} else {
return false;
@@ -221,7 +224,7 @@ Template.changeSettingsPopup.helpers({
if (currentUser) {
return Meteor.user().getLimitToShowCardsCount();
} else {
return cookies.get('limitToShowCardsCount');
return window.localStorage.getItem('limitToShowCardsCount');
}
},
weekDays(startDay) {
@@ -242,7 +245,7 @@ Template.changeSettingsPopup.helpers({
if (currentUser) {
return currentUser.getStartDayOfWeek();
} else {
return cookies.get('startDayOfWeek');
return window.localStorage.getItem('startDayOfWeek');
}
},
});
@@ -252,20 +255,20 @@ Template.changeSettingsPopup.events({
currentUser = Meteor.user();
if (currentUser) {
Meteor.call('toggleDesktopDragHandles');
} else if (cookies.has('showDesktopDragHandles')) {
cookies.remove('showDesktopDragHandles');
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
window.localStorage.removeItem('showDesktopDragHandles');
} else {
cookies.set('showDesktopDragHandles', 'true');
window.localStorage.setItem('showDesktopDragHandles', 'true');
}
},
'click .js-toggle-system-messages'() {
currentUser = Meteor.user();
if (currentUser) {
Meteor.call('toggleSystemMessages');
} else if (cookies.has('hasHiddenSystemMessages')) {
cookies.remove('hasHiddenSystemMessages');
} else if (window.localStorage.getItem('hasHiddenSystemMessages')) {
window.localStorage.removeItem('hasHiddenSystemMessages');
} else {
cookies.set('hasHiddenSystemMessages', 'true');
window.localStorage.setItem('hasHiddenSystemMessages', 'true');
}
},
'click .js-apply-user-settings'(event, templateInstance) {
@@ -283,14 +286,14 @@ Template.changeSettingsPopup.events({
if (currentUser) {
Meteor.call('changeLimitToShowCardsCount', minLimit);
} else {
cookies.set('limitToShowCardsCount', minLimit);
window.localStorage.setItem('limitToShowCardsCount', minLimit);
}
}
if (!isNaN(startDay)) {
if (currentUser) {
Meteor.call('changeStartDayOfWeek', startDay);
} else {
cookies.set('startDayOfWeek', startDay);
window.localStorage.setItem('startDayOfWeek', startDay);
}
}
Popup.back();
+8
View File
@@ -30,3 +30,11 @@ Blaze.registerHelper('getUser', userId => Users.findOne(userId));
Blaze.registerHelper('concat', (...args) => args.slice(0, -1).join(''));
Blaze.registerHelper('isMiniScreen', () => Utils.isMiniScreen());
Blaze.registerHelper('isShowDesktopDragHandles', () =>
Utils.isShowDesktopDragHandles(),
);
Blaze.registerHelper('isMiniScreenOrShowDesktopDragHandles', () =>
Utils.isMiniScreenOrShowDesktopDragHandles(),
);
+12
View File
@@ -45,6 +45,14 @@ Mousetrap.bind('f', () => {
}
});
Mousetrap.bind('/', () => {
if (Sidebar.isOpen() && Sidebar.getView() === 'search') {
Sidebar.toggle();
} else {
Sidebar.setView('search');
}
});
Mousetrap.bind(['down', 'up'], (evt, key) => {
if (!Session.get('currentCard')) {
return;
@@ -118,6 +126,10 @@ Template.keyboardShortcuts.helpers({
keys: ['f'],
action: 'shortcut-toggle-filterbar',
},
{
keys: ['/'],
action: 'shortcut-toggle-searchbar',
},
{
keys: ['x'],
action: 'shortcut-clear-filters',
+29 -13
View File
@@ -1,43 +1,44 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
Utils = {
setBoardView(view) {
currentUser = Meteor.user();
if (currentUser) {
Meteor.user().setBoardView(view);
} else if (view === 'board-view-swimlanes') {
cookies.set('boardView', 'board-view-swimlanes'); //true
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
location.reload();
} else if (view === 'board-view-lists') {
cookies.set('boardView', 'board-view-lists'); //true
window.localStorage.setItem('boardView', 'board-view-lists'); //true
location.reload();
} else if (view === 'board-view-cal') {
cookies.set('boardView', 'board-view-cal'); //true
window.localStorage.setItem('boardView', 'board-view-cal'); //true
location.reload();
} else {
cookies.set('boardView', 'board-view-swimlanes'); //true
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
location.reload();
}
},
unsetBoardView() {
cookies.remove('boardView');
cookies.remove('collapseSwimlane');
window.localStorage.removeItem('boardView');
window.localStorage.removeItem('collapseSwimlane');
},
boardView() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).boardView;
} else if (cookies.get('boardView') === 'board-view-swimlanes') {
} else if (
window.localStorage.getItem('boardView') === 'board-view-swimlanes'
) {
return 'board-view-swimlanes';
} else if (cookies.get('boardView') === 'board-view-lists') {
} else if (
window.localStorage.getItem('boardView') === 'board-view-lists'
) {
return 'board-view-lists';
} else if (cookies.get('boardView') === 'board-view-cal') {
} else if (window.localStorage.getItem('boardView') === 'board-view-cal') {
return 'board-view-cal';
} else {
cookies.set('boardView', 'board-view-swimlanes'); //true
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
location.reload();
return 'board-view-swimlanes';
}
@@ -189,6 +190,21 @@ Utils = {
//return false;
},
// returns if desktop drag handles are enabled
isShowDesktopDragHandles() {
const currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else {
return false;
}
},
// returns if mini screen or desktop drag handles
isMiniScreenOrShowDesktopDragHandles() {
return this.isMiniScreen() || this.isShowDesktopDragHandles();
},
calculateIndexData(prevData, nextData, nItems = 1) {
let base, increment;
// If we drop the card to an empty column
+26
View File
@@ -113,6 +113,32 @@ FlowRouter.route('/shortcuts', {
},
});
FlowRouter.route('/my-cards', {
name: 'my-cards',
action() {
const myCardsTemplate = 'myCards';
Filter.reset();
// EscapeActions.executeAll();
EscapeActions.executeUpTo('popup-close');
Utils.manageCustomUI();
Utils.manageMatomo();
// if (previousPath) {
// Modal.open(myCardsTemplate, {
// header: 'myCardsModalTitle',
// onCloseGoTo: previousPath,
// });
// } else {
BlazeLayout.render('defaultLayout', {
headerBar: 'myCardsHeaderBar',
content: myCardsTemplate,
});
// }
},
});
FlowRouter.route('/import/:source', {
name: 'import',
triggersEnter: [AccountsTemplates.ensureSignedIn],
+42 -23
View File
@@ -13,13 +13,12 @@ version: '2'
# see https://github.com/wekan/wekan/wiki/Backup
# 1) Stop Wekan:
# docker-compose stop
# 2) Download new version:
# docker-compose pull wekan
# 3) If you have more networks for VPN etc as described at bottom of
# this config, download for them too:
# docker-compose pull wekan2
# 2) Remove old Wekan app (wekan-app only, not that wekan-db container that has all your data)
# docker rm wekan-app
# 3) Get newest docker-compose.yml from https://github.com/wekan/wekan to have correct image,
# for example: "image: quay.io/wekan/wekan" or version tag "image: quay.io/wekan/wekan:v4.52"
# 4) Start Wekan:
# docker-compose start
# docker-compose up -d
#----------------------------------------------------------------------------------
# ==== OPTIONAL: DEDICATED DOCKER USER ====
# 1) Optionally create a dedicated user for Wekan, for example:
@@ -92,17 +91,18 @@ services:
wekandb:
#-------------------------------------------------------------------------------------
# ==== MONGODB AND METEOR VERSION ====
# a) For Wekan Meteor 1.8.x version at master branch, use mongo 4.x
# DOES NOT WORK: mongo 4.4, see https://github.com/wekan/wekan/issues/3247
# WORKS: mongo 3.x and 4.2
image: mongo:4.2
# b) For Wekan Meteor 1.6.x version at devel branch.
# Only for Snap and Sandstorm while they are not upgraded yet to Meteor 1.8.x
#image: mongo:3.2.21
# a) mongodb latest, like 3.2 - 4.4 or newer https://hub.docker.com/_/mongo?tab=description
# 2020-12-03:
# - Mongo image copied from Docker Hub mongo:4.4.2-bionic to Quay
# to avoid Docker Hub rate limits.
image: quay.io/wekan/mongo:4.4.2-bionic
#-------------------------------------------------------------------------------------
container_name: wekan-db
restart: always
command: mongod --oplogSize 128
# command: mongod --oplogSize 128
# Syslog: mongod --syslog --oplogSize 128 --quiet
# Disable MongoDB logs:
command: mongod --logpath /dev/null --oplogSize 128 --quiet
networks:
- wekan-tier
expose:
@@ -114,15 +114,12 @@ services:
wekan:
#-------------------------------------------------------------------------------------
# ==== MONGODB AND METEOR VERSION ====
# NOTE: Quay is currently not updated, use Docker Hub image below c)
# a) For Wekan Meteor 1.8.x version at master branch,
# using https://quay.io/wekan/wekan automatic builds
#image: quay.io/wekan/wekan
# b) Using specific Meteor 1.6.x version tag:
# image: quay.io/wekan/wekan:v1.95
# c) Using Docker Hub automatic builds https://hub.docker.com/r/wekanteam/wekan
image: wekanteam/wekan
# image: wekanteam/wekan:v2.99
# a) Quay automatic builds do work, https://quay.io/wekan7wekan
image: quay.io/wekan/wekan
# b) Using specific version tag:
# image: quay.io/wekan/wekan:v4.52
# c) Docker Hub builds are broken with error ENOMEM https://hub.docker.com/r/wekanteam/wekan
# image: wekanteam/wekan
#-------------------------------------------------------------------------------------
container_name: wekan-app
restart: always
@@ -323,6 +320,9 @@ services:
# ==== Debug OIDC OAuth2 etc ====
#- DEBUG=true
#-----------------------------------------------------------------
# ==== OAUTH2 ORACLE on premise identity manager OIM ====
#- ORACLE_OIM_ENABLED=true
#-----------------------------------------------------------------
# ==== OAUTH2 AZURE ====
# https://github.com/wekan/wekan/wiki/Azure
# 1) Register the application with Azure. Make sure you capture
@@ -330,6 +330,8 @@ services:
# 2) Configure the environment variables. This differs slightly
# by installation type, but make sure you have the following:
#- OAUTH2_ENABLED=true
# Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299
#- OAUTH2_CA_CERT=ABCD1234
# Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting.
#- OAUTH2_ADFS_ENABLED=false
# OAuth2 login style: popup or redirect.
@@ -601,6 +603,23 @@ services:
# Hide password login form
# - PASSWORD_LOGIN_ENABLED=true
#-------------------------------------------------------------------
#- CAS_ENABLED=true
#- CAS_BASE_URL=https://cas.example.com/cas
#- CAS_LOGIN_URL=https://cas.example.com/login
#- CAS_VALIDATE_URL=https://cas.example.com/cas/p3/serviceValidate
#---------------------------------------------------------------------
#- SAML_ENABLED=true
#- SAML_PROVIDER=
#- SAML_ENTRYPOINT=
#- SAML_ISSUER=
#- SAML_CERT=
#- SAML_IDPSLO_REDIRECTURL=
#- SAML_PRIVATE_KEYFILE=
#- SAML_PUBLIC_CERTFILE=
#- SAML_IDENTIFIER_FORMAT=
#- SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE=
#- SAML_ATTRIBUTES=
#---------------------------------------------------------------------
depends_on:
- wekandb
+4 -3
View File
@@ -1,7 +1,6 @@
name: wekan
version: 1.0.0
appVersion: 2.x.x
kubeVersion: "^1.8.0-0"
version: 1.0.2
apiVersion: v1
description: Open Source kanban
home: https://wekan.github.io/
icon: https://wekan.github.io/wekan-logo.svg
@@ -10,4 +9,6 @@ sources:
maintainers:
- name: technotaff
email: github@randall.cc
- name: jiangytcn
email: jiangyt.cn@gmail.com
engine: gotpl
+4 -4
View File
@@ -1,5 +1,5 @@
dependencies:
- name: mongodb-replicaset
version: 3.11.x
repository: "https://kubernetes-charts.storage.googleapis.com/"
condition: mongodb-replicaset.enabled
- name: mongodb
version: 10.0.x
repository: "https://charts.bitnami.com/bitnami"
condition: mongodb.enabled
+13 -7
View File
@@ -62,21 +62,27 @@ Create the name of the service account to use for the api component
Create a default fully qualified mongodb-replicaset name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}}
{{- define "wekan.mongodb-replicaset.fullname" -}}
{{- $name := default "mongodb-replicaset" (index .Values "mongodb-replicaset" "nameOverride") -}}
{{- define "wekan.mongodb.svcname" -}}
{{- $name := default "mongodb" (index .Values "mongodb" "nameOverride") -}}
{{- if eq .Values.mongodb.architecture "replicaset" }}
{{- printf "%s-%s-headless" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{/*
Create the MongoDB URL. If MongoDB is installed as part of this chart, use k8s service discovery,
else use user-provided URL.
*/}}
{{- define "mongodb-replicaset.url" -}}
{{- if (index .Values "mongodb-replicaset" "enabled") -}}
{{- $count := (int (index .Values "mongodb-replicaset" "replicas")) -}}
{{- define "mongodb.url" -}}
{{- if (index .Values "mongodb" "enabled") -}}
{{- $count := (int (index .Values "mongodb" "replicaCount")) -}}
{{- $release := .Release.Name -}}
mongodb://{{ $release }}-mongodb-replicaset:27017/admin?replicaSet={{ index .Values "mongodb-replicaset" "replicaSetName" }}
{{- $replicaSetName := (index .Values "mongodb" "replicaSetName") -}}
{{- $mongodbSvcName := include "wekan.mongodb.svcname" . -}}
mongodb://{{- range $v := until $count }}{{ $release }}-mongodb-{{ $v }}.{{ $mongodbSvcName }}:27017{{ if ne $v (sub $count 1) }},{{- end -}}{{- end -}}?replicaSet={{ $replicaSetName }}
{{- else -}}
{{- index .Values "mongodb-replicaset" "url" -}}
{{- index .Values "mongodb" "url" -}}
{{- end -}}
{{- end -}}
+7 -1
View File
@@ -36,13 +36,19 @@ spec:
- name: ROOT_URL
value: {{ .Values.root_url | default "https://wekan.local" | quote }}
- name: MONGO_URL
value: "{{ template "mongodb-replicaset.url" . }}"
value: "{{ template "mongodb.url" . }}"
{{- range $key := .Values.env }}
{{- if .value }}
- name: {{ .name }}
value: {{ .value | quote }}
{{- end }}
{{- end }}
{{- range $key := .Values.secretEnv }}
{{- if .value }}
- name: {{ .name }}
value: {{ .value | quote }}
{{- end }}
{{- end }}
livenessProbe:
httpGet:
path: /
+5 -2
View File
@@ -2,7 +2,7 @@
{{- $fullName := include "wekan.fullname" . -}}
{{- $servicePort := .Values.service.port -}}
{{- $ingressPath := .Values.ingress.path -}}
apiVersion: extensions/v1beta1
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ $fullName }}
@@ -27,6 +27,9 @@ spec:
secretName: {{ .secretName }}
{{- end }}
{{- end }}
backend:
serviceName: {{ $fullName }}
servicePort: 8080
rules:
{{- range .Values.ingress.hosts }}
- host: {{ . }}
@@ -35,6 +38,6 @@ spec:
- path: {{ $ingressPath }}
backend:
serviceName: {{ $fullName }}
servicePort: 80
servicePort: 8080
{{- end }}
{{- end }}
-14
View File
@@ -1,14 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: {{ template "wekan.fullname" . }}
labels:
app: {{ template "wekan.name" . }}
chart: {{ template "wekan.chart" . }}
component: wekan
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
type: Opaque
data:
accessKey: {{ .Values.credentials.accessKey | b64enc }}
secretKey: {{ .Values.credentials.secretKey | b64enc }}
@@ -1,27 +0,0 @@
apiVersion: v1
kind: Pod
metadata:
name: {{ template "wekan.fullname" . }}-test
annotations:
"helm.sh/hook": test-success
spec:
containers:
- name: {{ template "wekan.fullname" . }}-test
imagePullPolicy: IfNotPresent
image: "docker.io/mesosphere/aws-cli:1.14.5"
command:
- sh
- -c
- aws s3 --endpoint-url=http://{{ include "wekan.fullname" . }} --region=us-east-1 ls
env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: {{ template "wekan.fullname" . }}
key: accessKey
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ template "wekan.fullname" . }}
key: secretKey
restartPolicy: Never
+14 -15
View File
@@ -22,21 +22,23 @@ image:
replicaCount: 1
## Specify wekan credentials
##
credentials:
accessKey: access-key
secretKey: secret-key
## Specify additional environmental variables for the Deployment
##
env:
- name: ""
value: ""
## Specify additional secret environmental variables for the
## Deployment. These can e.g. be provided by a Secret and allow
## to store passwords separately
##
secretEnv:
- name: ""
value: ""
service:
type: NodePort
port: 80
port: 8080
annotations: {}
# prometheus.io/scrape: "true"
# prometheus.io/port: "8000"
@@ -104,13 +106,10 @@ autoscaling:
# MongoDB:
# ------------------------------------------------------------------------------
mongodb-replicaset:
mongodb:
enabled: true
replicas: 3
architecture: replicaset
replicaCount: 3
replicaSetName: rs0
securityContext:
runAsUser: 1000
fsGroup: 1000
runAsNonRoot: true
#image:
# tag: 3.2.21
auth:
enabled: false
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "تعليق محذوف %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "إضافة مرفق",
"add-board": "إضافة لوحة",
"add-card": "إضافة بطاقة",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "تريد حذف المرفق ?",
"attachments": "المرفقات",
"auto-watch": "مراقبة لوحات تلقائيا عندما يتم إنشاؤها",
"avatar-too-big": "الصورة الرمزية كبيرة جدا (70 كيلوبايت كحد أقصى)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "رجوع",
"board-change-color": "تغيير اللومr",
"board-nb-stars": "%s نجوم",
@@ -138,6 +142,7 @@
"board-view-cal": "التقويم",
"board-view-swimlanes": "خطوط السباحة",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "القائمات",
"bucket-example": "مثل « todo list » على سبيل المثال",
"cancel": "إلغاء",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "مسح التصفية",
"filter-labels-label": "Filter by label",
"filter-no-label": "لا يوجد ملصق",
"filter-member-label": "Filter by member",
"filter-no-member": "ليس هناك أي عضو",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"filter-on": "التصفية تشتغل",
"filter-on-desc": "أنت بصدد تصفية بطاقات هذه اللوحة. اضغط هنا لتعديل التصفية.",
"filter-to-selection": "تصفية بالتحديد",
"other-filters-label": "Other Filters",
"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": "الإسم الكامل",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "إنشاء لوحة",
"home": "الرئيسية",
"import": "Import",
"impersonate-user": "Impersonate user",
"link": "رابط",
"import-board": "استيراد لوحة",
"import-board-c": "استيراد لوحة",
@@ -398,6 +409,7 @@
"list-select-cards": "تحديد بطاقات هذه القائمة",
"set-color-list": "Set Color",
"listActionPopup-title": "قائمة الإجراءات",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import a Trello card",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "التحرك إلى الأعلى",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "تحديد أكثر من واحدة",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-Selection is on",
"muted": "مكتوم",
"muted-info": "You will never be notified of any changes in this board",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "اختيار اللون",
"select-board": "Select Board",
"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",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "تصفية بطاقاتي",
"shortcut-show-shortcuts": "عرض قائمة الإختصارات ،تلك",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "إظهار-إخفاء الشريط الجانبي للوحة",
"show-cards-minimum-count": "إظهار عدد البطاقات إذا كانت القائمة تتضمن أكثر من",
"sidebar-open": "فتح الشريط الجانبي",
@@ -505,6 +521,12 @@
"upload": "Upload",
"upload-avatar": "رفع صورة شخصية",
"uploaded-avatar": "تم رفع الصورة الشخصية",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "اسم المستخدم",
"view-it": "شاهدها",
"warn-list-archived": "warning: this card is in an list at Archive",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "بطاقة",
"list": "List",
"board": "Board"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "\"отзавърши\" чеклистта %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Добави прикачен файл",
"add-board": "Добави Табло",
"add-card": "Добави карта",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Желаете ли да изтриете прикачения файл?",
"attachments": "Прикачени файлове",
"auto-watch": "Автоматично наблюдаване на таблата, когато са създадени",
"avatar-too-big": "Аватарът е прекалено голям (максимум 70KB)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Назад",
"board-change-color": "Промени цвета",
"board-nb-stars": "%s звезди",
@@ -138,6 +142,7 @@
"board-view-cal": "Календар",
"board-view-swimlanes": "Коридори",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "Списъци",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Премахване на филтрите",
"filter-labels-label": "Filter by label",
"filter-no-label": "без етикет",
"filter-member-label": "Filter by member",
"filter-no-member": "без член",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "Няма Собствени полета",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"filter-on": "Има приложени филтри",
"filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
"filter-to-selection": "Филтрирай избраните",
"other-filters-label": "Other Filters",
"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": "Име",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Създай Табло",
"home": "Начало",
"import": "Импорт",
"impersonate-user": "Impersonate user",
"link": "Връзка",
"import-board": "Импортирай Табло",
"import-board-c": "Импортирай Табло",
@@ -398,6 +409,7 @@
"list-select-cards": "Избери всички карти в този списък",
"set-color-list": "Set Color",
"listActionPopup-title": "List Actions",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Импорт на карта от Trello",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Премести в началото",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Множествен избор",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Множественият избор е приложен",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Избери цвят",
"select-board": "Select Board",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
"setWipLimitPopup-title": "Въведи WIP лимит",
"shortcut-assign-self": "Добави себе си към тази карта",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Филтрирай моите карти",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Отвори/затвори сайдбара с филтри",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
"show-cards-minimum-count": "Покажи бройката на картите, ако списъка съдържа повече от",
"sidebar-open": "Open Sidebar",
@@ -505,6 +521,12 @@
"upload": "Upload",
"upload-avatar": "Качване на аватар",
"uploaded-avatar": "Качихте аватар",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Потребителско име",
"view-it": "View it",
"warn-list-archived": "внимание: тази карта е в списък в Архива",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Карта",
"list": "List",
"board": "Board"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-card": "Add Card",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Delete Attachment?",
"attachments": "Attachments",
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "The avatar is too large (70KB max)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Back",
"board-change-color": "Kemmañ al liv",
"board-nb-stars": "%s stered",
@@ -138,6 +142,7 @@
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-labels-label": "Filter by label",
"filter-no-label": "No label",
"filter-member-label": "Filter by member",
"filter-no-member": "No member",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"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",
"other-filters-label": "Other Filters",
"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",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
"impersonate-user": "Impersonate user",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
@@ -398,6 +409,7 @@
"list-select-cards": "Select all cards in this list",
"set-color-list": "Set Color",
"listActionPopup-title": "List Actions",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import a Trello card",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Multi-Selection",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-Selection is on",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Select Color",
"select-board": "Select Board",
"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",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filter my cards",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
"show-cards-minimum-count": "Show cards count if list contains more than",
"sidebar-open": "Open Sidebar",
@@ -505,6 +521,12 @@
"upload": "Upload",
"upload-avatar": "Upload an avatar",
"uploaded-avatar": "Uploaded an avatar",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Username",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an list at Archive",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Card",
"list": "List",
"board": "Board"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Afegeix adjunt",
"add-board": "Afegeix Tauler",
"add-card": "Afegeix Fitxa",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Esborrar adjunt?",
"attachments": "Adjunts",
"auto-watch": "Segueix automàticament el taulers quan són creats",
"avatar-too-big": "L'avatar es massa gran (70KM max)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Enrere",
"board-change-color": "Canvia el color",
"board-nb-stars": "%s estrelles",
@@ -138,6 +142,7 @@
"board-view-cal": "Calendari",
"board-view-swimlanes": "Carrils de Natació",
"board-view-collapse": "Contraure",
"board-view-gantt": "Gantt",
"board-view-lists": "Llistes",
"bucket-example": "Igual que “Bucket List”, per exemple",
"cancel": "Cancel·la",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Elimina filtre",
"filter-labels-label": "Filter by label",
"filter-no-label": "Sense etiqueta",
"filter-member-label": "Filter by member",
"filter-no-member": "Sense membres",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"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ó",
"other-filters-label": "Other Filters",
"advanced-filter-label": "Filtre avançat",
"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",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Crea tauler",
"home": "Inici",
"import": "importa",
"impersonate-user": "Impersonate user",
"link": "Enllaç",
"import-board": "Importa tauler",
"import-board-c": "Importa tauler",
@@ -398,6 +409,7 @@
"list-select-cards": "Selecciona totes les fitxes d'aquesta llista",
"set-color-list": "Set Color",
"listActionPopup-title": "Accions de la llista",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Accions de Carril de Natació",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "importa una fitxa de Trello",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Mou a la part superior",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Multi-Selecció",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-Selecció està activada",
"muted": "En silenci",
"muted-info": "No seràs notificat dels canvis en aquest tauler",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Selecciona color",
"select-board": "Select Board",
"set-wip-limit-value": "Limita el màxim nombre de tasques en aquesta llista",
"setWipLimitPopup-title": "Configura el Límit de Treball en Progrès",
"shortcut-assign-self": "Assigna't la ftixa actual",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filtra les meves fitxes",
"shortcut-show-shortcuts": "Mostra aquesta lista d'accessos directes",
"shortcut-toggle-filterbar": "Canvia la barra lateral del tauler",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Canvia Sidebar del Tauler",
"show-cards-minimum-count": "Mostra contador de fitxes si la llista en conté més de",
"sidebar-open": "Mostra barra lateral",
@@ -505,6 +521,12 @@
"upload": "Puja",
"upload-avatar": "Actualitza avatar",
"uploaded-avatar": "Avatar actualitzat",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Nom d'Usuari",
"view-it": "Vist",
"warn-list-archived": "warning: this card is in an list at Archive",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Afegiu una descripció més detallada",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Fitxa",
"list": "List",
"board": "Board"
}
+85 -44
View File
@@ -17,14 +17,14 @@
"act-completeChecklist": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-uncompleteChecklist": "zrušil(a) dokončení zaškrtávacího seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-addComment": "přidal(a) komentář na kartě __card__: __comment__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-editComment": "editoval(a) komentář na kartě __card__:__comment__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-deleteComment": "smazal(a) komentář na kartě __card__:__comment__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-createBoard": "přidal(a) tablo __board__",
"act-createSwimlane": "created swimlane __swimlane__ to board __board__",
"act-createCard": "přidal(a) kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
"act-createCustomField": "přidal(a) pole __customField__ na tablo __board__",
"act-deleteCustomField": "odebral(a) pole __customField__ na tablu __board__",
"act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-setCustomField": "editoval(a) pole __customField__:__customFieldValue__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-createList": "přidal(a) sloupec __list__ do tabla __board__",
"act-addBoardMember": "přidal(a) člena __member__ do tabla __board__",
"act-archivedBoard": "Tablo __board__ přesunuto do Archivu",
@@ -64,7 +64,7 @@
"activity-unchecked-item": "nedokončen %s v seznamu %s z %s",
"activity-checklist-added": "přidán checklist do %s",
"activity-checklist-removed": "odstraněn checklist z %s",
"activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-completed": "dokončen %s zaškrtávací seznam z %s",
"activity-checklist-uncompleted": "nedokončen seznam %s z %s",
"activity-checklist-item-added": "přidána položka checklist do '%s' v %s",
"activity-checklist-item-removed": "odstraněna položka seznamu do '%s' v %s",
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "nedokončený seznam %s",
"activity-editComment": "upravit komentář %s",
"activity-deleteComment": "smazat komentář %s",
"activity-receivedDate": "editoval(a) datum přijetí na %s z %s",
"activity-startDate": "editoval(a) datum zahájení na %s z %s",
"activity-dueDate": "editoval(a) termín dokončení na %s z %s",
"activity-endDate": "editoval(a) datum ukončení na %s z %s",
"add-attachment": "Přidat přílohu",
"add-board": "Přidat tablo",
"add-card": "Přidat kartu",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Smazat přílohu?",
"attachments": "Přílohy",
"auto-watch": "Automaticky sleduj tabla když jsou vytvořena",
"avatar-too-big": "Avatar obrázek je příliš velký (70KB max)",
"avatar-too-big": "Avatar je příliš velký (520KB max)",
"back": "Zpět",
"board-change-color": "Změnit barvu",
"board-nb-stars": "%s hvězdiček",
@@ -138,6 +142,7 @@
"board-view-cal": "Kalendář",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Sbalit",
"board-view-gantt": "Gannt",
"board-view-lists": "Sloupce",
"bucket-example": "Například \"O čem sním\"",
"cancel": "Zrušit",
@@ -236,7 +241,7 @@
"no-comments": "Žádné komentáře",
"no-comments-desc": "Nemůže vidět komentáře a aktivity",
"worker": "Pracovník",
"worker-desc": "Can only move cards, assign itself to card and comment.",
"worker-desc": "Je možné pouze přesouvat karty, přiřazovat ke kartám a komentovat.",
"computer": "Počítač",
"confirm-subtask-delete-dialog": "Opravdu chcete smazat tento podúkol?",
"confirm-checklist-delete-dialog": "Opravdu chcete smazat tento checklist?",
@@ -246,7 +251,7 @@
"copyCardPopup-title": "Kopírovat kartu",
"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\"} ]",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Nadpis první karty\", \"description\":\"Popis první 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",
@@ -311,7 +316,7 @@
"error-board-notAMember": "K provedení změny musíš být členem tohoto tabla",
"error-json-malformed": "Tvůj text není validní JSON",
"error-json-schema": "Tato JSON data neobsahují správné informace v platném formátu",
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format",
"error-csv-schema": "Vaše CSV (hodnoty oddělené čárkami) / TSV (hodnoty oddělené tabulátory) neobsahují ssprávné informace ve správném formátu",
"error-list-doesNotExist": "Tento sloupec ;neexistuje",
"error-user-doesNotExist": "Tento uživatel neexistuje",
"error-user-notAllowSelf": "Nemůžeš pozvat sám sebe",
@@ -337,15 +342,20 @@
"filter-cards": "Filtrovat karty nebo seznamy",
"list-filter-label": "Filtrovat seznam podle názvu",
"filter-clear": "Vyčistit filtr",
"filter-labels-label": "Filtrovat podle štítku",
"filter-no-label": "Žádný štítek",
"filter-member-label": "Filtrovat podle člena",
"filter-no-member": "Žádný člen",
"filter-assignee-label": "Filtrovat podle řešitele",
"filter-no-assignee": "Bez řešitele",
"filter-custom-fields-label": "Filtrovat podle polí",
"filter-no-custom-fields": "Žádné vlastní pole",
"filter-show-archive": "Zobrazit archivované listy",
"filter-hide-empty": "Skrýt prázdné listy",
"filter-on": "Filtr je zapnut",
"filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.",
"filter-to-selection": "Filtrovat výběr",
"other-filters-label": "Ostatní filtry",
"advanced-filter-label": "Pokročilý filtr",
"advanced-filter-description": "Pokročilý filtr dovoluje zapsat řetězec následujících operátorů: == != <= >= && || () Operátory jsou odděleny mezerou. Můžete filtrovat všechny vlastní pole zadáním jejich názvů nebo hodnot. Například: Pole1 == Hodnota1. Poznámka: Pokud pole nebo hodnoty obsahují mezery, je potřeba je obalit v jednoduchých uvozovkách. Například: 'Pole 1' == 'Hodnota 1'. Pro ignorovaní kontrolních znaků (' \\ /) je možné použít \\. Například Pole1 == I\\'m. Můžete také kombinovat více podmínek. Například P1 == H1 || P1 == H2. Obvykle jsou operátory interpretovány zleva doprava. Jejich pořadí můžete měnit pomocí závorek. Například: P1 == H1 && ( P2 == H2 || P2 == H3 )",
"fullname": "Celé jméno",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Vytvořit tablo",
"home": "Domů",
"import": "Import",
"impersonate-user": "Napodobit uživatele",
"link": "Propojit",
"import-board": "Importovat tablo",
"import-board-c": "Importovat tablo",
@@ -398,6 +409,7 @@
"list-select-cards": "Vybrat všechny karty v tomto sloupci",
"set-color-list": "Nastavit barvu",
"listActionPopup-title": "Vypsat akce",
"settingsUserPopup-title": "Nastavení uživatele",
"swimlaneActionPopup-title": "Akce swimlane",
"swimlaneAddPopup-title": "Přidat swimlane dolů",
"listImportCardPopup-title": "Importovat Trello kartu",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Přesunout nahoru",
"moveSelectionPopup-title": "Přesunout výběr",
"multi-selection": "Multi-výběr",
"multi-selection-label": "Vyberte štítek",
"multi-selection-member": "Vyberte člena",
"multi-selection-on": "Multi-výběr je zapnut",
"muted": "Umlčeno",
"muted-info": "Nikdy nedostanete oznámení o změně v tomto tablu.",
@@ -465,8 +479,9 @@
"search": "Hledat",
"rules": "Pravidla",
"search-cards": "Hledání napříč názvy karet/seznamů, popisy a vlasními poli tohoto tabla",
"search-example": "Write text you search and press Enter",
"search-example": "Napište hledaný text a stiskněte Enter",
"select-color": "Vybrat barvu",
"select-board": "Vybrat tablo",
"set-wip-limit-value": "Nastaví limit pro maximální počet úkolů ve sloupci.",
"setWipLimitPopup-title": "Nastavit WIP Limit",
"shortcut-assign-self": "Přiřadit sebe k aktuální kartě",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filtrovat mé karty",
"shortcut-show-shortcuts": "Otevřít tento seznam odkazů",
"shortcut-toggle-filterbar": "Přepnout lištu filtrování",
"shortcut-toggle-searchbar": "Přepnout lištu vyhledávání",
"shortcut-toggle-sidebar": "Přepnout lištu tabla",
"show-cards-minimum-count": "Zobrazit počet karet pokud sloupec obsahuje více než",
"sidebar-open": "Otevřít boční panel",
@@ -505,6 +521,12 @@
"upload": "Nahrát",
"upload-avatar": "Nahrát avatar",
"uploaded-avatar": "Avatar nahrán",
"custom-top-left-corner-logo-image-url": "URL obrázku vlastního loga v levém horním rohu",
"custom-top-left-corner-logo-link-url": "URL odkazu vlastního loga v levém horním rohu",
"custom-top-left-corner-logo-height": "Výška vlastního loga v horním levém rohu. Defaultně: 27",
"custom-login-logo-image-url": "URL vlastního loga přihlášení",
"custom-login-logo-link-url": "URL odkazu vlastního loga přihlášení",
"text-below-custom-login-logo": "Text pod vlastním logem přihlášení",
"username": "Uživatelské jméno",
"view-it": "Zobrazit",
"warn-list-archived": "varování: tato karta je v seznamu v Archivu",
@@ -548,21 +570,21 @@
"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.",
"webhook-title": "Webhook Name",
"webhook-title": "Název webhooku",
"webhook-token": "Token (Volitelné pro autentizaci)",
"outgoing-webhooks": "Odchozí Webhooky",
"bidirectional-webhooks": "Two-Way Webhooks",
"bidirectional-webhooks": "Dvousměrné webhooky",
"outgoingWebhooksPopup-title": "Odchozí Webhooky",
"boardCardTitlePopup-title": "Filtr názvů karet",
"disable-webhook": "Disable This Webhook",
"global-webhook": "Global Webhooks",
"disable-webhook": "Zakázat tento webhook",
"global-webhook": "Globální webhooks",
"new-outgoing-webhook": "Nové odchozí Webhooky",
"no-name": "(Neznámé)",
"Node_version": "Node verze",
"Meteor_version": "Meteor version",
"Meteor_version": "Verze Meteor",
"MongoDB_version": "MongoDB verze",
"MongoDB_storage_engine": "MongoDB storage engine",
"MongoDB_Oplog_enabled": "MongoDB Oplog enabled",
"MongoDB_Oplog_enabled": "MongoDB Oplog povolen",
"OS_Arch": "OS Architektura",
"OS_Cpus": "OS Počet CPU",
"OS_Freemem": "OS Volná paměť",
@@ -638,12 +660,12 @@
"r-delete-rule": "Smazat pravidlo",
"r-new-rule-name": "Nový název pravidla",
"r-no-rules": "Žádná pravidla",
"r-trigger": "Trigger",
"r-action": "Action",
"r-trigger": "Spouštěč",
"r-action": "Akce",
"r-when-a-card": "Pokud karta",
"r-is": "je",
"r-is-moved": "je přesunuto",
"r-added-to": "Added to",
"r-added-to": "Přidáno",
"r-removed-from": "Odstraněno z",
"r-the-board": "tablo",
"r-list": "sloupce",
@@ -691,7 +713,7 @@
"r-of-checklist": "ze zaškrtávacího seznamu",
"r-send-email": "Odeslat e-mail",
"r-to": "komu",
"r-of": "of",
"r-of": "z",
"r-subject": "předmět",
"r-rule-details": "Podrobnosti pravidla",
"r-d-move-to-top-gen": "Přesunout kartu na začátek toho sloupce",
@@ -728,14 +750,14 @@
"r-board-note": "Note: leave a field empty to match every possible value.",
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
"r-when-a-card-is-moved": "Když je karta přesunuta do jiného sloupce",
"r-set": "Set",
"r-set": "Nastavit",
"r-update": "Aktualizovat",
"r-datefield": "pole datum",
"r-df-start-at": "začátek",
"r-df-due-at": "do",
"r-df-end-at": "konec",
"r-df-received-at": "přijato",
"r-to-current-datetime": "to current date/time",
"r-to-current-datetime": "stávající datum/čas",
"r-remove-value-from": "Odstranit hodnotu z",
"ldap": "LDAP",
"oauth2": "OAuth2",
@@ -752,39 +774,45 @@
"display-authentication-method": "Zobraz způsob ověřování",
"default-authentication-method": "Zobraz způsob ověřování",
"duplicate-board": "Duplikovat tablo",
"org-number": "Počet organizací je:",
"team-number": "Počet týmů je:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlaneDeletePopup-title": "Smazat Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
"restore-all": "Restore all",
"delete-all": "Delete all",
"loading": "Loading, please wait.",
"previous_as": "naposledy bylo",
"act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__",
"act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)",
"act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)",
"act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)",
"a-dueAt": "modified due time to be",
"a-endAt": "modified ending time to be",
"a-startAt": "modified starting time to be",
"a-receivedAt": "modified received time to be",
"almostdue": "current due time %s is approaching",
"pastdue": "current due time %s is past",
"duenow": "current due time %s is today",
"act-newDue": "__list__/__card__ has 1st due reminder [__board__]",
"act-withDue": "__list__/__card__ due reminders [__board__]",
"act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching",
"act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past",
"act-duenow": "was reminding the current due (__timeValue__) of __card__ is now",
"act-atUserComment": "You were mentioned in [__board__] __list__/__card__",
"act-a-dueAt": "změnil(a) termín dokončení\nKdy: __timeValue__\nKde: __card__\n předchozí termín dokončení byl __timeOldValue__",
"act-a-endAt": "změnil(a) čas ukončení na __timeValue__ z (__timeOldValue__)",
"act-a-startAt": "změnil(a) čas zahájení na __timeValue__ z (__timeOldValue__)",
"act-a-receivedAt": "změnil(a) čas přijetí na __timeValue__ z (__timeOldValue__)",
"a-dueAt": "Změnil(a) požadovaný termín dokončení ",
"a-endAt": "změnil(a) čas ukončení",
"a-startAt": "změnil(a) čas zahájení",
"a-receivedAt": "změnil(a) čas přijetí",
"almostdue": "Stávající termín dokončení %s se blíží",
"pastdue": "Stávající termín dokončení %s je v minulosti",
"duenow": "Stávající termín dokončení %s je dnes",
"act-newDue": "__list__/__card__ má první připomínku termínu dokončení [__board__]",
"act-withDue": "__list__/__card__ připomínky termínu dokončení [__board__]",
"act-almostdue": "připomínal(a) , že stávající termín dokončení (__timeValue__) __card__ se blíží",
"act-pastdue": "připomínal(a), že stávající termín dokončení (__timeValue__) __card__ byl v minulosti",
"act-duenow": "připomínal(a), že stávající termín dokončení (__timeValue__) __card__ je teď",
"act-atUserComment": "Byli jste zmíněni v [__board__] __list__/__card__",
"delete-user-confirm-popup": "Jste si jisti, že chcete smazat tento účet? Tuto akci nelze vrátit zpět.",
"accounts-allowUserDelete": "Dovolit uživatelům smazat vlastní účet",
"hide-minicard-label-text": "Hide minicard label text",
"show-desktop-drag-handles": "Show desktop drag handles",
"hide-minicard-label-text": "Skrýt text popisku minikarty",
"show-desktop-drag-handles": "Zobrazit okraje pro přesun plochy",
"assignee": "Řešitel",
"cardAssigneesPopup-title": "Řešitel",
"addmore-detail": "Přidat detailnější popis",
"show-on-card": "Zobrazit na kartě",
"new": "Nový",
"editOrgPopup-title": "Editovat organizaci",
"newOrgPopup-title": "Nová organizace",
"editTeamPopup-title": "Editovat tým",
"newTeamPopup-title": "Nový tým",
"editUserPopup-title": "Editovat uživatele",
"newUserPopup-title": "Nový uživatel",
"notifications": "Upozornění",
@@ -809,7 +837,20 @@
"last-activity": "Poslední aktivita",
"voting": "Hlasování",
"archived": "Archivováno",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Skrýt zvolené položky"
"delete-linked-card-before-this-card": "Tuto kratu nemůžete odstranit dokud nesmažete přiřazené karty",
"delete-linked-cards-before-this-list": "Tento sloupec nemůžete smazat dokud nesmažete propojené karty, které jsou navázány na karty v tomto sloupci",
"hide-checked-items": "Skrýt zvolené položky",
"task": "Úkol",
"create-task": "Vytvořit úkol",
"ok": "OK",
"organizations": "Organizace",
"teams": "Týmy",
"displayName": "Zobrazovaný název",
"shortName": "Krátký název",
"website": "Webová stránka",
"person": "Osoba",
"my-cards": "Moje karty",
"card": "Karta",
"list": "Seznam",
"board": "Tablo"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "gjorde tjeklisten ukomplet %s",
"activity-editComment": "redigerede kommentar %s",
"activity-deleteComment": "slettede kommentar %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Tilføj vedhæftning",
"add-board": "Tilføj tavle",
"add-card": "Tilføj kort",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Slet vedhæftning?",
"attachments": "Vedhæftninger",
"auto-watch": "Følg automatisk tavler når de oprettes ",
"avatar-too-big": "Avataren fylder for meget (maks. 70KB)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Tilbage",
"board-change-color": "Skift farve",
"board-nb-stars": "%s stjerner",
@@ -138,6 +142,7 @@
"board-view-cal": "Kalender",
"board-view-swimlanes": "Svømmebaner",
"board-view-collapse": "Sammenfold",
"board-view-gantt": "Gantt",
"board-view-lists": "Lister",
"bucket-example": "Eksempelvis \"Bucked-liste\"",
"cancel": "Annullér",
@@ -337,15 +342,20 @@
"filter-cards": "Filtrér kort eller lister",
"list-filter-label": "Filtrér lister efter titel",
"filter-clear": "Ryd filter",
"filter-labels-label": "Filter by label",
"filter-no-label": "Ingen etikette",
"filter-member-label": "Filter by member",
"filter-no-member": "Ingen medlemmer",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "Utildelt",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "Ingen brugerdefinerede felter",
"filter-show-archive": "Vis arkiverede lister",
"filter-hide-empty": "Skjul tomme lister",
"filter-on": "Filter er slået til",
"filter-on-desc": "Du filtrerer kort på denne tavle. Klik her for at redigere filteret.",
"filter-to-selection": "Filtrér til valgte",
"other-filters-label": "Other Filters",
"advanced-filter-label": "Avanceret filter",
"advanced-filter-description": "Avanceret filter gør det muligt at skrive en tekststreng indeholdende følgende operatører: == != <= >= && || ( ) Mellemrum anvendes som adskillelsestegn mellem operatørerne. Du kan filtrere alle Brugerdefinerede felter ved at taste deres navne og værdier. Som eksempel: Felt1 == Værdi1. Bemærk: Hvis felter eller værdier indeholder mellemrum, så skal du indkapsle dem i enkeltcitationstegn. Som eksempel: 'Felt 1' == 'Værdi1'. For at springe over enkelte kontroltegn (' \\/), så kan \\ benyttes. Som eksempel: Felt1 == Så\\'n. Du kan også kombinere flere betingelser. Som eksempel: F1 == V1 || F1 == V2. Normalt vil alle operatører blive fortolket fra venstre mod højre. Du kan ændre rækkefølgen ved brug af parenteser. Som eksempel: F1 == V1 && (F2 == V2 || F2 == V3). Du kan også søge i tekstfelter med brug af regulære udtryk: F1 == /Tes.*/i",
"fullname": "Fuldt navn",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Opret tavle",
"home": "Hjem",
"import": "Importér",
"impersonate-user": "Impersonate user",
"link": "Link",
"import-board": "importér tavle",
"import-board-c": "Importér tavle",
@@ -398,6 +409,7 @@
"list-select-cards": "Vælg alle kort i denne liste",
"set-color-list": "Angiv farve",
"listActionPopup-title": "Handlinger for liste",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Handlinger for svømmebane",
"swimlaneAddPopup-title": "Tilføj en svømmebane nedenfor",
"listImportCardPopup-title": "Importér et Trello-kort",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Flyt til toppen",
"moveSelectionPopup-title": "Flyt valgte",
"multi-selection": "Multivalg",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multivalg er slået til",
"muted": "Slukket",
"muted-info": "Du vil aldrig få notifikationer om ændringer i denne tavle",
@@ -467,6 +481,7 @@
"search-cards": "Søg ud fra titler i kort/lister, beskrivelser og brugerdefinerede felter på denne tavle. ",
"search-example": "Write text you search and press Enter",
"select-color": "Vælg farve",
"select-board": "Select Board",
"set-wip-limit-value": "Angiv en grænse for det maksimale antal opgaver i denne liste",
"setWipLimitPopup-title": "Angiv WIP-begrænsning",
"shortcut-assign-self": "Tilknyt dig selv til nuværende kort?",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filtrer mine kort",
"shortcut-show-shortcuts": "Fremvis denne liste med genveje",
"shortcut-toggle-filterbar": "Slå filter-sidebjælke til/fra",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Slå tavle-sidebjælke til/fra",
"show-cards-minimum-count": "Vis antal kort når listen indeholder mere end",
"sidebar-open": "Åbn sidebjælke",
@@ -505,6 +521,12 @@
"upload": "Overfør",
"upload-avatar": "Overfør en avatar",
"uploaded-avatar": "Overførte en avatar",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Brugernavn",
"view-it": "Vis den",
"warn-list-archived": "advarsel: dette kort er i en liste i arkivet",
@@ -752,6 +774,8 @@
"display-authentication-method": "Vis godkendelsesmetode",
"default-authentication-method": "Standard for godkendelsesmetode",
"duplicate-board": "Duplikér tavle",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "Antallet af personer er:",
"swimlaneDeletePopup-title": "Slet svømmebane?",
"swimlane-delete-pop": "Alle handlinger vil blive fjernet fra aktivitetsfeedet, og du vil ikke kunne genskabe svømmebanen. Dette kan ikke fortrydes.",
@@ -785,6 +809,10 @@
"addmore-detail": "Tilføj en mere detaljeret beskrivelse",
"show-on-card": "Vis på kort",
"new": "Ny",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Redigér bruger",
"newUserPopup-title": "Ny bruger",
"notifications": "Notifikationer",
@@ -811,5 +839,18 @@
"archived": "Arkiveret",
"delete-linked-card-before-this-card": "Du kan ikke slette dette kort før der slettes sammenkædede kort som har",
"delete-linked-cards-before-this-list": "Du kan ikke slette denne liste før der slettes sammenkædede kort, der peger til kort i denne liste",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Kort",
"list": "List",
"board": "Board"
}
+44 -3
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "unvervollständigte die Checkliste %s",
"activity-editComment": "editierte Kommentar",
"activity-deleteComment": "löschte Kommentar",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Datei anhängen",
"add-board": "neues Board",
"add-card": "Karte hinzufügen",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Anhang löschen?",
"attachments": "Anhänge",
"auto-watch": "Neue Boards nach Erstellung automatisch beobachten",
"avatar-too-big": "Das Profilbild ist zu groß (max. 70KB)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Zurück",
"board-change-color": "Farbe ändern",
"board-nb-stars": "%s Sterne",
@@ -138,6 +142,7 @@
"board-view-cal": "Kalender",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Einklappen",
"board-view-gantt": "Gantt",
"board-view-lists": "Listen",
"bucket-example": "z.B. \"Löffelliste\"",
"cancel": "Abbrechen",
@@ -337,15 +342,20 @@
"filter-cards": "Karten oder Listen filtern",
"list-filter-label": "Liste nach Titel filtern",
"filter-clear": "Filter entfernen",
"filter-labels-label": "Nach Label filtern",
"filter-no-label": "Kein Label",
"filter-member-label": "Nach Nutzer filtern",
"filter-no-member": "Kein Mitglied",
"filter-assignee-label": "Nach Zuordnung filtern",
"filter-no-assignee": "Nicht zugewiesen",
"filter-custom-fields-label": "Filtern nach benutzerdefinierten Feldern",
"filter-no-custom-fields": "Keine benutzerdefinierten Felder",
"filter-show-archive": "Archivierte Listen anzeigen",
"filter-hide-empty": "Leere Listen verstecken",
"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",
"other-filters-label": "Andere Filter",
"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",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Board erstellen",
"home": "Home",
"import": "Importieren",
"impersonate-user": "Impersonate user",
"link": "Verknüpfung",
"import-board": "Board importieren",
"import-board-c": "Board importieren",
@@ -398,6 +409,7 @@
"list-select-cards": "Alle Karten in dieser Liste auswählen",
"set-color-list": "Lege Farbe fest",
"listActionPopup-title": "Listenaktionen",
"settingsUserPopup-title": "Benutzereinstellungen",
"swimlaneActionPopup-title": "Swimlaneaktionen",
"swimlaneAddPopup-title": "Swimlane unterhalb einfügen",
"listImportCardPopup-title": "Eine Trello-Karte importieren",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Zum Anfang verschieben",
"moveSelectionPopup-title": "Auswahl verschieben",
"multi-selection": "Mehrfachauswahl",
"multi-selection-label": "Label für die Auswahl setzen",
"multi-selection-member": "Mitglied für die Auswahl setzen",
"multi-selection-on": "Mehrfachauswahl ist aktiv",
"muted": "Stumm",
"muted-info": "Sie werden nicht über Änderungen auf diesem Board benachrichtigt",
@@ -467,6 +481,7 @@
"search-cards": "Suche nach Karten-/Listentiteln, Beschreibungen und personalisierten Feldern auf diesem Brett ",
"search-example": "Write text you search and press Enter",
"select-color": "Farbe auswählen",
"select-board": "Select Board",
"set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste",
"setWipLimitPopup-title": "WIP-Limit setzen",
"shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Meine Karten filtern",
"shortcut-show-shortcuts": "Liste der Tastaturkürzel anzeigen",
"shortcut-toggle-filterbar": "Filter-Seitenleiste ein-/ausblenden",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Seitenleiste ein-/ausblenden",
"show-cards-minimum-count": "Zeigt die Kartenanzahl an, wenn die Liste mehr enthält als",
"sidebar-open": "Seitenleiste öffnen",
@@ -505,6 +521,12 @@
"upload": "Upload",
"upload-avatar": "Profilbild hochladen",
"uploaded-avatar": "Profilbild hochgeladen",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text unterhalb benutzerdefiniertem Login Logo",
"username": "Benutzername",
"view-it": "Ansehen",
"warn-list-archived": "Warnung: Diese Karte befindet sich in einer Liste im Archiv",
@@ -752,6 +774,8 @@
"display-authentication-method": "Anzeige Authentifizierungsverfahren",
"default-authentication-method": "Standardauthentifizierungsverfahren",
"duplicate-board": "Board duplizieren",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "Anzahl der Personen:",
"swimlaneDeletePopup-title": "Swimlane löschen?",
"swimlane-delete-pop": "Alle Aktionen werden aus dem Aktivitätenfeed entfernt und die Swimlane kann nicht wiederhergestellt werden. Die Aktion kann nicht rückgängig gemacht werden.",
@@ -785,6 +809,10 @@
"addmore-detail": "Eine detailliertere Beschreibung hinzufügen",
"show-on-card": "Zeige auf Karte",
"new": "Neu",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Benutzer ändern",
"newUserPopup-title": "Neuer Benutzer",
"notifications": "Benachrichtigungen",
@@ -809,7 +837,20 @@
"last-activity": "Letzte Aktivität",
"voting": "Abstimunng",
"archived": "Archiviert",
"delete-linked-card-before-this-card": "Sie können diese Karte erst löschen, wenn Sie alle verbundenen Karten gelöscht haben.",
"delete-linked-card-before-this-card": "Sie können diese Karte nicht löschen, bevor verbundene Karten nicht gelöscht wurden.",
"delete-linked-cards-before-this-list": "Sie können diese Liste erst löschen, wenn Sie alle Karten gelöscht haben, die auf Karten in dieser Liste verweisen.",
"hide-checked-items": "Erledigte ausblenden"
"hide-checked-items": "Erledigte ausblenden",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Karte",
"list": "List",
"board": "Board"
}
+44 -3
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Προσθήκη Πίνακα",
"add-card": "Προσθήκη Κάρτας",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Διαγραφή Συννημένου;",
"attachments": "Συννημένα",
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "The avatar is too large (70KB max)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Πίσω",
"board-change-color": "Αλλαγή χρώματος",
"board-nb-stars": "%s stars",
@@ -138,6 +142,7 @@
"board-view-cal": "Ημερολόγιο",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "Λίστες",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Ακύρωση",
@@ -167,7 +172,7 @@
"card-edit-voting": "Edit voting",
"editVoteEndDatePopup-title": "Change vote end date",
"allowNonBoardMembers": "Allow all logged in users",
"vote-question": "Voting question",
"vote-question": "Ερώτηση ψηφοφορίας",
"vote-public": "Show who voted what",
"vote-for-it": "for it",
"vote-against": "against",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-labels-label": "Filter by label",
"filter-no-label": "No label",
"filter-member-label": "Filter by member",
"filter-no-member": "Κανένα μέλος",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"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",
"other-filters-label": "Other Filters",
"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": "Πλήρες Όνομα",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Εισαγωγή",
"impersonate-user": "Impersonate user",
"link": "Link",
"import-board": "import board",
"import-board-c": "Εισαγωγή πίνακα",
@@ -398,6 +409,7 @@
"list-select-cards": "Select all cards in this list",
"set-color-list": "Set Color",
"listActionPopup-title": "List Actions",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Εισαγωγή μιας κάρτας Trello",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Multi-Selection",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-Selection is on",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Επιλέξτε Χρώμα",
"select-board": "Select Board",
"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",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Φιλτράρισμα των καρτών μου",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
"show-cards-minimum-count": "Show cards count if list contains more than",
"sidebar-open": "Open Sidebar",
@@ -505,6 +521,12 @@
"upload": "Upload",
"upload-avatar": "Upload an avatar",
"uploaded-avatar": "Uploaded an avatar",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Όνομα Χρήστη",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an list at Archive",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Card",
"list": "List",
"board": "Board"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-card": "Add Card",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Delete Attachment?",
"attachments": "Attachments",
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "The avatar is too large (70KB max)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Back",
"board-change-color": "Change colour",
"board-nb-stars": "%s stars",
@@ -138,6 +142,7 @@
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-labels-label": "Filter by label",
"filter-no-label": "No label",
"filter-member-label": "Filter by member",
"filter-no-member": "No member",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"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",
"other-filters-label": "Other Filters",
"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",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
"impersonate-user": "Impersonate user",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
@@ -398,6 +409,7 @@
"list-select-cards": "Select all cards in this list",
"set-color-list": "Set Color",
"listActionPopup-title": "List Actions",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import a Trello card",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Multi-Selection",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-Selection is on",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Select Colour",
"select-board": "Select Board",
"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",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filter my cards",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
"show-cards-minimum-count": "Show cards count if list contains more than",
"sidebar-open": "Open Sidebar",
@@ -505,6 +521,12 @@
"upload": "Upload",
"upload-avatar": "Upload an avatar",
"uploaded-avatar": "Uploaded an avatar",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Username",
"view-it": "View it",
"warn-list-archived": "warning: this card is in a list in the Archive",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Card",
"list": "List",
"board": "Board"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-card": "Add Card",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Delete Attachment?",
"attachments": "Attachments",
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "The avatar is too large (70KB max)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Back",
"board-change-color": "Change color",
"board-nb-stars": "%s stars",
@@ -138,6 +142,7 @@
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-labels-label": "Filter by label",
"filter-no-label": "No label",
"filter-member-label": "Filter by member",
"filter-no-member": "No member",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"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",
"other-filters-label": "Other Filters",
"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",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
"impersonate-user": "Impersonate user",
"link": "Link",
"import-board": "import board",
"import-board-c": "Import board",
@@ -398,6 +409,7 @@
"list-select-cards": "Select all cards in this list",
"set-color-list": "Set Color",
"listActionPopup-title": "List Actions",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import a Trello card",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Multi-Selection",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-Selection is on",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Select Color",
"select-board": "Select Board",
"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",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filter my cards",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
"show-cards-minimum-count": "Show cards count if list contains more than",
"sidebar-open": "Open Sidebar",
@@ -505,6 +521,12 @@
"upload": "Upload",
"upload-avatar": "Upload an avatar",
"uploaded-avatar": "Uploaded an avatar",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Username",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an list at Archive",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is: ",
"team-number": "The number of teams is: ",
"people-number": "The number of people is: ",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Card",
"list": "List",
"board": "Board"
}
+47 -6
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-card": "Add Card",
@@ -93,7 +97,7 @@
"admin-announcement": "Announcement",
"admin-announcement-active": "Active System-Wide Announcement",
"admin-announcement-title": "Announcement from Administrator",
"all-boards": "All boards",
"all-boards": "Ĉiuj tabuloj",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
"apply": "Apliki",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "Delete Attachment?",
"attachments": "Attachments",
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "The avatar is too large (70KB max)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Reen",
"board-change-color": "Ŝanĝi koloron",
"board-nb-stars": "%s stars",
@@ -138,6 +142,7 @@
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "Listoj",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Clear filter",
"filter-labels-label": "Filter by label",
"filter-no-label": "Nenia etikedo",
"filter-member-label": "Filter by member",
"filter-no-member": "Nenia membro",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"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",
"other-filters-label": "Other Filters",
"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": "Plena nomo",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Krei tavolon",
"home": "Hejmo",
"import": "Importi",
"impersonate-user": "Impersonate user",
"link": "Ligilo",
"import-board": "import board",
"import-board-c": "Import board",
@@ -398,6 +409,7 @@
"list-select-cards": "Elektu ĉiujn kartojn en tiu listo.",
"set-color-list": "Set Color",
"listActionPopup-title": "List Actions",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import a Trello card",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Movi supren",
"moveSelectionPopup-title": "Movi elekton",
"multi-selection": "Multi-Selection",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-Selection is on",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Select Color",
"select-board": "Select Board",
"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",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filter my cards",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
"show-cards-minimum-count": "Show cards count if list contains more than",
"sidebar-open": "Open Sidebar",
@@ -485,7 +501,7 @@
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
"starred-boards": "Starred Boards",
"starred-boards-description": "Starred boards show up at the top of your boards list.",
"subscribe": "Subscribe",
"subscribe": "Aboni",
"team": "Teamo",
"this-board": "this board",
"this-card": "this card",
@@ -505,6 +521,12 @@
"upload": "Alŝuti",
"upload-avatar": "Upload an avatar",
"uploaded-avatar": "Uploaded an avatar",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Uzantnomo",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an list at Archive",
@@ -523,7 +545,7 @@
"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",
"settings": "Settings",
"settings": "Agordoj",
"people": "People",
"registration": "Registration",
"disable-self-registration": "Disable Self-Registration",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -804,12 +832,25 @@
"sunday": "Sunday",
"status": "Status",
"swimlane": "Swimlane",
"owner": "Owner",
"owner": "Posedanto",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"voting": "Voting",
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Card",
"list": "List",
"board": "Board"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"activity-editComment": "comentario %s editado",
"activity-deleteComment": "comentario %s eliminado",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Agregar Adjunto",
"add-board": "Agregar Tablero",
"add-card": "Agregar Tarjeta",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "¿Borrar Adjunto?",
"attachments": "Adjuntos",
"auto-watch": "Seguir tableros automáticamente al crearlos",
"avatar-too-big": "El avatar es muy grande (70KB max)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Atrás",
"board-change-color": "Cambiar color",
"board-nb-stars": "%s estrellas",
@@ -138,6 +142,7 @@
"board-view-cal": "Calendario",
"board-view-swimlanes": "Calles",
"board-view-collapse": "Collapse",
"board-view-gantt": "Gantt",
"board-view-lists": "Listas",
"bucket-example": "Como \"Lista de Contenedores\" por ejemplo",
"cancel": "Cancelar",
@@ -337,15 +342,20 @@
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-clear": "Sacar filtro",
"filter-labels-label": "Filter by label",
"filter-no-label": "Sin etiqueta",
"filter-member-label": "Filter by member",
"filter-no-member": "No es miembro",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No assignee",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "No Custom Fields",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"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",
"other-filters-label": "Other Filters",
"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",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Crear Tablero",
"home": "Inicio",
"import": "Importar",
"impersonate-user": "Impersonate user",
"link": "Link",
"import-board": "importar tablero",
"import-board-c": "Importar tablero",
@@ -398,6 +409,7 @@
"list-select-cards": "Selecciona todas las tarjetas en esta lista",
"set-color-list": "Set Color",
"listActionPopup-title": "Listar Acciones",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Acciones de la Calle",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Importar una tarjeta Trello",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Mover al Tope",
"moveSelectionPopup-title": "Mover selección",
"multi-selection": "Multi-Selección",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Multi-selección está activo",
"muted": "Silenciado",
"muted-info": "No serás notificado de ningún cambio en este tablero",
@@ -467,6 +481,7 @@
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-example": "Write text you search and press Enter",
"select-color": "Seleccionar Color",
"select-board": "Select Board",
"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",
"shortcut-assign-self": "Asignarte a vos mismo en la tarjeta actual",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filtrar mis tarjetas",
"shortcut-show-shortcuts": "Traer esta lista de atajos",
"shortcut-toggle-filterbar": "Activar/Desactivar Barra Lateral de Filtros",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Activar/Desactivar Barra Lateral de Tableros",
"show-cards-minimum-count": "Mostrar cuenta de tarjetas si la lista contiene más que",
"sidebar-open": "Abrir Barra Lateral",
@@ -505,6 +521,12 @@
"upload": "Cargar",
"upload-avatar": "Cargar un avatar",
"uploaded-avatar": "Cargado un avatar",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Nombre de usuario",
"view-it": "Verlo",
"warn-list-archived": "warning: this card is in an list at Archive",
@@ -752,6 +774,8 @@
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method",
"duplicate-board": "Duplicate Board",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
@@ -785,6 +809,10 @@
"addmore-detail": "Add a more detailed description",
"show-on-card": "Show on Card",
"new": "New",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Tarjeta",
"list": "List",
"board": "Board"
}
+43 -2
View File
@@ -75,6 +75,10 @@
"activity-checklist-uncompleted-card": "no completó la lista de verificación %s",
"activity-editComment": "comentario editado",
"activity-deleteComment": "comentario eliminado",
"activity-receivedDate": "edited received date to %s of %s",
"activity-startDate": "edited start date to %s of %s",
"activity-dueDate": "edited due date to %s of %s",
"activity-endDate": "edited end date to %s of %s",
"add-attachment": "Añadir adjunto",
"add-board": "Añadir tablero",
"add-card": "Añadir una tarjeta",
@@ -120,7 +124,7 @@
"attachmentDeletePopup-title": "¿Eliminar el adjunto?",
"attachments": "Adjuntos",
"auto-watch": "Suscribirse automáticamente a los tableros cuando son creados",
"avatar-too-big": "El avatar es muy grande (70KB máx.)",
"avatar-too-big": "The avatar is too large (520KB max)",
"back": "Atrás",
"board-change-color": "Cambiar el color",
"board-nb-stars": "%s destacados",
@@ -138,6 +142,7 @@
"board-view-cal": "Calendario",
"board-view-swimlanes": "Carriles",
"board-view-collapse": "Contraer",
"board-view-gantt": "Gantt",
"board-view-lists": "Listas",
"bucket-example": "Como “Cosas por hacer” por ejemplo",
"cancel": "Cancelar",
@@ -337,15 +342,20 @@
"filter-cards": "Filtrar tarjetas o listas",
"list-filter-label": "Filtrar listas por título",
"filter-clear": "Limpiar el filtro",
"filter-labels-label": "Filter by label",
"filter-no-label": "Sin etiqueta",
"filter-member-label": "Filter by member",
"filter-no-member": "Sin miembro",
"filter-assignee-label": "Filter by assignee",
"filter-no-assignee": "No asignado",
"filter-custom-fields-label": "Filter by Custom Fields",
"filter-no-custom-fields": "Sin campos personalizados",
"filter-show-archive": "Mostrar las listas archivadas",
"filter-hide-empty": "Ocultar las listas vacías",
"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",
"other-filters-label": "Other Filters",
"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",
@@ -354,6 +364,7 @@
"headerBarCreateBoardPopup-title": "Crear tablero",
"home": "Inicio",
"import": "Importar",
"impersonate-user": "Impersonate user",
"link": "Enlace",
"import-board": "importar un tablero",
"import-board-c": "Importar un tablero",
@@ -398,6 +409,7 @@
"list-select-cards": "Seleccionar todas las tarjetas de esta lista",
"set-color-list": "Cambiar el color",
"listActionPopup-title": "Acciones de la lista",
"settingsUserPopup-title": "User Settings",
"swimlaneActionPopup-title": "Acciones del carril de flujo",
"swimlaneAddPopup-title": "Añadir un carril de flujo debajo",
"listImportCardPopup-title": "Importar una tarjeta de Trello",
@@ -420,6 +432,8 @@
"moveCardToTop-title": "Mover al principio",
"moveSelectionPopup-title": "Mover la selección",
"multi-selection": "Selección múltiple",
"multi-selection-label": "Set label for selection",
"multi-selection-member": "Set member for selection",
"multi-selection-on": "Selección múltiple activada",
"muted": "Silenciado",
"muted-info": "No serás notificado de ningún cambio en este tablero",
@@ -467,6 +481,7 @@
"search-cards": "Buscar entre los títulos, las descripciones de las tarjetas/listas y los campos personalizados en este tablero.",
"search-example": "Write text you search and press Enter",
"select-color": "Seleccionar el color",
"select-board": "Select Board",
"set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.",
"setWipLimitPopup-title": "Cambiar el límite del trabajo en proceso",
"shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual",
@@ -477,6 +492,7 @@
"shortcut-filter-my-cards": "Filtrar mis tarjetas",
"shortcut-show-shortcuts": "Mostrar esta lista de atajos",
"shortcut-toggle-filterbar": "Conmutar la barra lateral del filtro",
"shortcut-toggle-searchbar": "Toggle Search Sidebar",
"shortcut-toggle-sidebar": "Conmutar la barra lateral del tablero",
"show-cards-minimum-count": "Mostrar recuento de tarjetas si la lista contiene más de",
"sidebar-open": "Abrir la barra lateral",
@@ -505,6 +521,12 @@
"upload": "Cargar",
"upload-avatar": "Cargar un avatar",
"uploaded-avatar": "Avatar cargado",
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
"custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27",
"custom-login-logo-image-url": "Custom Login Logo Image URL",
"custom-login-logo-link-url": "Custom Login Logo Link URL",
"text-below-custom-login-logo": "Text below Custom Login Logo",
"username": "Nombre de usuario",
"view-it": "Verla",
"warn-list-archived": "advertencia: esta tarjeta está en una lista en el Archivo",
@@ -752,6 +774,8 @@
"display-authentication-method": "Mostrar el método de autenticación",
"default-authentication-method": "Método de autenticación por defecto",
"duplicate-board": "Duplicar tablero",
"org-number": "The number of organizations is:",
"team-number": "The number of teams is:",
"people-number": "El número de personas es:",
"swimlaneDeletePopup-title": "¿Eliminar el carril de flujo?",
"swimlane-delete-pop": "Todas las acciones serán eliminadas del historial de actividades y no se podrá recuperar el carril de flujo. Esta acción no puede deshacerse.",
@@ -785,6 +809,10 @@
"addmore-detail": "Añadir una descripción detallada",
"show-on-card": "Mostrar en la tarjeta",
"new": "Nuevo",
"editOrgPopup-title": "Edit Organization",
"newOrgPopup-title": "New Organization",
"editTeamPopup-title": "Edit Team",
"newTeamPopup-title": "New Team",
"editUserPopup-title": "Editar el usuario",
"newUserPopup-title": "Nuevo usuario",
"notifications": "Notificaciones",
@@ -811,5 +839,18 @@
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list",
"hide-checked-items": "Hide checked items"
"hide-checked-items": "Hide checked items",
"task": "Task",
"create-task": "Create Task",
"ok": "OK",
"organizations": "Organizations",
"teams": "Teams",
"displayName": "Display Name",
"shortName": "Short Name",
"website": "Website",
"person": "Person",
"my-cards": "My Cards",
"card": "Tarjeta",
"list": "List",
"board": "Board"
}
Loaded 100 of 190 files, more files were not shown because too many files have changed in this diff. Show more