Compare commits

...
1246 Commits
Author SHA1 Message Date
Lauri Ojansivu 2e996712f8 v6.47 2022-09-16 19:55:21 +03:00
Lauri Ojansivu 13992072f3 Updated translations. 2022-09-16 19:33:33 +03:00
Lauri Ojansivu 659263f97e Updated ChangeLog. 2022-09-16 18:52:39 +03:00
Lauri Ojansivu c5f57e1522 Merge pull request #4691 from helioguardabaxo/master
Added hide/show to show counters and members on All Boards (Admin Panel)
2022-09-16 18:48:17 +03:00
helioguardabaxo 9dff09fbcf Added hide/show to show counters and members on All Boards (Admin Panel) 2022-09-16 11:02:25 -03:00
Lauri Ojansivu c307aa6354 Updated ChangeLog. 2022-09-15 19:46:38 +03:00
Lauri Ojansivu 627d183015 Removed Azeri/Azerbaijani from RTL list.
Thanks to yarons.

Related https://github.com/wekan/php/pull/2
2022-09-15 19:43:48 +03:00
Lauri Ojansivu 5ae1c3de1e Updated translations. 2022-09-15 19:40:03 +03:00
Lauri Ojansivu 3e25c307ce v6.46 2022-09-14 22:44:21 +03:00
Lauri Ojansivu 3bb8b0d601 Updated ChangeLog. 2022-09-14 22:40:17 +03:00
Lauri Ojansivu 080cec07c0 Updated Snap Candidate MongoDB to 5.0.12.
Thanks to MongoDB developers!
2022-09-14 22:38:54 +03:00
Lauri Ojansivu 9c8a631662 Updated translations. 2022-09-14 22:36:39 +03:00
Lauri Ojansivu f875139d7c Updated ChangeLog. 2022-09-14 22:36:18 +03:00
Lauri Ojansivu 94b0d7783c Merge pull request #4686 from helioguardabaxo/master
Added titles to add and edit checklist items
2022-09-14 22:17:04 +03:00
Hélio Guardabaxo 26a52c424c Merge pull request #4 from helioguardabaxo/checklist-accessibility
Added titles to add and edit checklist items
2022-09-14 13:58:04 -03:00
helioguardabaxo 207276e7ec Added titles to add and edit checklist items 2022-09-14 13:54:44 -03:00
Lauri Ojansivu f1fa1580b1 Merge pull request #4685 from helioguardabaxo/minicard-description
Added limit description on minicard to three lines
2022-09-14 18:58:21 +03:00
Hélio Guardabaxo 2754c29772 Merge branch 'wekan:master' into minicard-description 2022-09-14 12:27:02 -03:00
Lauri Ojansivu 5a3fab4f65 v6.45 2022-09-14 16:25:07 +03:00
Lauri Ojansivu 0a3d2c2868 Updated translations. 2022-09-14 16:18:10 +03:00
Lauri Ojansivu 57166b891a Updated ChangeLog. 2022-09-14 16:11:17 +03:00
Lauri Ojansivu a805eb09df Merge pull request #4681 from helioguardabaxo/master
Added help button with custom URL.
2022-09-14 16:08:34 +03:00
Lauri Ojansivu 6cb84673d4 Updated ChangeLog. 2022-09-14 16:06:53 +03:00
Lauri Ojansivu aa2c3774a2 Fixed WeKan api.py . WeKan API now works in newest WeKan and n8n.
Thanks to DimDz and Joffcom.

Fixes #4595
2022-09-14 16:02:50 +03:00
Lauri Ojansivu b485c7304f Updated translations. 2022-09-14 16:01:11 +03:00
helioguardabaxo ab56f51dc0 Added limit description on minicard to three lines. 2022-09-13 11:45:55 -03:00
Hélio Guardabaxo bbc6d0955c Merge branch 'wekan:master' into master 2022-09-13 11:25:26 -03:00
helioguardabaxo d610d03423 Added help button with custom URL. 2022-09-12 21:36:31 -03:00
Lauri Ojansivu 58e1084ba5 Updated ChangeLog. 2022-09-12 19:47:42 +03:00
Lauri Ojansivu cf7c051242 Add info about RTL languages to Meteor WeKan. Not used in Meteor WeKan yet.
Thanks to xet7 !

Related #3376
2022-09-12 19:45:18 +03:00
Lauri Ojansivu a92eafce80 Updated translations. 2022-09-12 18:24:50 +03:00
Lauri Ojansivu b62bce388c Updated translations. 2022-09-12 18:22:47 +03:00
Lauri Ojansivu e309b53ded Updated translations. 2022-09-12 04:46:37 +03:00
Lauri Ojansivu 1813400ecf Updated translations. 2022-09-12 04:27:55 +03:00
Lauri Ojansivu 5d09fca481 Updated translations. 2022-09-12 04:21:12 +03:00
Lauri Ojansivu c99a86cdb0 Added translation Password (again).
Thanks to xet7 !
2022-09-12 03:58:03 +03:00
Lauri Ojansivu 072d239a85 Updated ChangeLog. 2022-09-12 03:03:38 +03:00
Lauri Ojansivu 9e44ccaf5d Merge pull request #4680 from helioguardabaxo/master
Heading hierarchy fixed on checklist title to simplify screen reader.
2022-09-12 02:58:00 +03:00
helioguardabaxo 86d86b30e9 Heading hierarchy fixed to simplify screen reader. 2022-09-11 20:53:30 -03:00
Lauri Ojansivu b2edacbd12 Merge pull request #4677 from helioguardabaxo/master
Add ARIA in checklist items
2022-09-08 22:27:03 +03:00
helioguardabaxo a6ec394730 Add ARIA in checklist items 2022-09-08 16:17:07 -03:00
Lauri Ojansivu 4ae0d49431 Merge pull request #4675 from bronger/master
Avoid non-terminating containers
2022-09-06 13:37:19 +03:00
Torsten Bronger eaea1936a0 Avoid non-terminating containers
The process 1 in the container does not shut down gracefully after having
received a TERM signal.  Therefore, we send a SIGKILL immediately.  This is a
kludge as long as node/meteor has no proper SIGTERM handler enabled.  See
<https://github.com/wekan/wekan/issues/4668>.
2022-09-06 12:30:32 +02:00
Lauri Ojansivu 315597dcff Updated ChangeLog. 2022-09-05 15:10:49 +03:00
Lauri Ojansivu 51ed0acc4f Add starting wekan test to arm64/s390x/ppc64el release scripts.
Thanks to xet7 !
2022-09-05 15:08:03 +03:00
Lauri Ojansivu a06e971a53 v6.44 2022-09-05 14:54:10 +03:00
Lauri Ojansivu 33f39d047f Updated translations. 2022-09-05 14:43:41 +03:00
Lauri Ojansivu 98de6ae0db Updated ChangeLog. 2022-09-05 13:36:53 +03:00
Lauri Ojansivu 6b4613d3ed Fix 2) Due date is not created nor changed, when cards are moved in the calendar view.
Thanks to DimDz !

Related #2917
2022-09-05 13:35:14 +03:00
Lauri Ojansivu eace04db8e Updated ChangeLog. 2022-09-04 11:38:41 +03:00
Lauri Ojansivu 3772ce3aca Fix building Dockerfile on Mac M1 etc.
Thanks to willman42 and xet7 !

Fixes #4666
2022-09-04 11:33:57 +03:00
Lauri Ojansivu 663e2823fa Updated ChangeLog. 2022-09-04 10:27:44 +03:00
Lauri Ojansivu 77927a1ca4 Removed old stuff from Dockerfile.
Thanks to xet7 !
2022-09-04 10:26:23 +03:00
Lauri Ojansivu 6bf1fcbbc7 Updated ChangeLog. 2022-09-04 09:13:48 +03:00
Lauri Ojansivu 0f6d84d69f Updated matb33:collection-hooks.
Thanks to developers of dependencies !
2022-09-04 09:12:14 +03:00
Lauri Ojansivu 9d6cb7fbdb Updated translations. 2022-09-04 09:04:56 +03:00
Lauri Ojansivu 29572de2e7 Updated ChangeLog. 2022-09-04 08:40:08 +03:00
Lauri Ojansivu 3a0269640b Added missing currentUser.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4672
2022-09-04 08:32:05 +03:00
Lauri Ojansivu 9a15750e7c Merge pull request #4672 from helioguardabaxo/master
Added tab view to board members (people, orgs and teams)
2022-09-04 08:02:40 +03:00
helioguardabaxo ebfabba284 Added tab view to board members (people, orgs and teams) 2022-09-03 19:36:53 -03:00
Lauri Ojansivu 05c34cefde v6.43 2022-09-01 12:24:17 +03:00
Lauri Ojansivu 4097301e60 Updated translations. 2022-09-01 12:17:45 +03:00
Lauri Ojansivu 04827fd8f0 Updated ChangeLog. 2022-09-01 12:14:15 +03:00
Lauri Ojansivu 1e4fba3ec8 Added back autologin, because reverting it broke Google OIDC login.
Thanks to xet7 !
2022-09-01 12:12:30 +03:00
Lauri Ojansivu ba1d04b99f Updated ChangeLog. 2022-09-01 12:05:19 +03:00
Lauri Ojansivu ed72ef0e5e Merge pull request #4667 from willman42/willman42-revert-pr-4663
Willman42 revert pr 4663
2022-09-01 12:01:34 +03:00
William Trelawny 2287758fdc Update docker-compose.yml
revert change made in ca35970f3f
2022-08-31 20:59:25 -04:00
William Trelawny c6fa37640a Update Dockerfile
revert changes made in f26f86dd3f
2022-08-31 20:55:20 -04:00
Lauri Ojansivu 4907bf5030 6.42 2022-08-31 22:22:54 +03:00
Lauri Ojansivu 85edae924e v6.42 2022-08-31 22:15:51 +03:00
Lauri Ojansivu e6561462e9 Updated ChangeLog. 2022-08-31 22:02:35 +03:00
Lauri Ojansivu 0d3b7ca041 Try to fix EasySearch. Part 3.
Thanks to danielkaiser and xet7 !
2022-08-31 22:00:09 +03:00
Lauri Ojansivu 8fc23429a0 Updated ChangeLog. 2022-08-31 04:13:27 +03:00
Lauri Ojansivu bfffe58672 Merge pull request #4663 from willman42/master
Remove hard-coded port 8080 binding in Dockerfile
2022-08-31 04:09:37 +03:00
William Trelawny ca35970f3f Update docker-compose.yml
Added default `PORT=8080` environment variable setting as well as user guidance
2022-08-30 20:24:36 -04:00
William Trelawny f26f86dd3f Update Dockerfile
Removed hardcoding port 8080 in image, allowing more flexibility for complex docker deployments.
2022-08-30 20:03:28 -04:00
Lauri Ojansivu 63d000fbbb Updated ChangeLog. 2022-08-31 00:09:41 +03:00
Lauri Ojansivu 17f97f6acc Added translations: English (Malaysia) (en_MY), Japanese (Hiragana) (ja-Hira), Malay (ms).
Thanks to dimanLubis !
2022-08-31 00:07:07 +03:00
Lauri Ojansivu 33657a9ed1 Updated ChangeLog. 2022-08-30 23:15:23 +03:00
Lauri Ojansivu 43a7096753 Revert autologin, because it broke OIDC login with Keycloak.
Thanks to wb9688 and xet7 !

Fixes #4660,
related https://github.com/wekan/wekan/pull/4588
2022-08-30 23:12:23 +03:00
Lauri Ojansivu fbe1f5f948 Updated ChangeLog. 2022-08-30 22:44:29 +03:00
Lauri Ojansivu a21883e3a1 Try 2 to fix EasySearch.
Thanks to xet7 !
2022-08-30 22:43:09 +03:00
Lauri Ojansivu af2da93423 Updated ChangeLog. 2022-08-30 22:40:08 +03:00
Lauri Ojansivu 14f832f955 Merge pull request #4662 from mfilser/master
00checkStartup, userInfo was missing
2022-08-30 22:29:49 +03:00
Lauri Ojansivu 6ec81ccbc1 Updated ChangeLog. 2022-08-30 22:26:29 +03:00
Lauri Ojansivu d470a74a9f Comment out CentOS 7 specific settings.
Thanks to williamtrelawny and xet7 !

Related https://github.com/wekan/wekan/commit/054d420dc97cadee6ed7896c608d95a6fe09dc9d
2022-08-30 22:24:09 +03:00
Martin Filser cee1dd94ee 00checkStartup, userInfo was missing
fixes: https://github.com/wekan/wekan/issues/4566#issuecomment-1231906040
2022-08-30 19:18:30 +02:00
Lauri Ojansivu c587d34158 Updated ChangeLog. 2022-08-28 20:36:25 +03:00
Lauri Ojansivu 68e4e6f049 Fix check for current user at card details.
Thanks to xet7 !
2022-08-28 20:34:45 +03:00
Lauri Ojansivu 5c81cfbd7b v6.41 2022-08-28 19:35:22 +03:00
Lauri Ojansivu edc610d019 Updated ChangeLog. 2022-08-28 12:28:10 -04:00
Lauri Ojansivu 5ca84d2930 Try to fix EasySearch syntax.
Thanks to xet7 !
2022-08-28 12:26:22 -04:00
Lauri Ojansivu 6f864c5022 v6.40 2022-08-25 21:42:15 +03:00
Lauri Ojansivu 3c3adef26a Updated translations. 2022-08-25 21:36:01 +03:00
Lauri Ojansivu f533aa8d8e Updated ChangeLog. 2022-08-25 21:34:48 +03:00
Lauri Ojansivu c1d449d3bd Merge pull request #4657 from mfilser/move_copy_card_didnt_set_the_last_selected_board_right
Move/Copy Card dialog didn't set the last selected board right
2022-08-25 21:12:29 +03:00
Martin Filser 2c2f906c8b Move/Copy Card dialog didn't set the last selected board right
- fixes: #4655
2022-08-24 22:46:50 +02:00
Lauri Ojansivu 9e0d7ee00f Updated translations. 2022-08-22 20:23:21 +03:00
Lauri Ojansivu 11e467618d v6.39 2022-08-21 20:16:03 +03:00
Lauri Ojansivu f315721fef Updated ChangeLog. 2022-08-21 19:33:25 +03:00
Lauri Ojansivu 8eb4ffea89 Merge pull request #4650 from mfilser/attachment_using_new_feature_of_meteor-files-2.3.0
Attachment using new feature of Meteor Files 2.3.0
2022-08-21 19:09:52 +03:00
Lauri Ojansivu f20ca31a3f Merge pull request #4649 from repmovs/master
set miniscreen to 250px
2022-08-21 19:09:28 +03:00
Martin Filser f4e11ff7c5 Avatars, use same namingFunction as Attachments 2022-08-21 11:10:27 +02:00
Martin Filser f6fbd0a5c2 Attachment, rename not needed anymore since Meteor-Files 2.3.0
Thanks to @dr-dimitru
https://github.com/wekan/wekan/pull/4638#issuecomment-1217883870

https://github.com/veliovgroup/Meteor-Files/commit/00ab6f723b84eb596b366c5d26e6981a00377809
2022-08-21 11:10:27 +02:00
Martin Filser 25443926d3 Attachment, path was wrong if the file hasn't a extension 2022-08-21 11:10:27 +02:00
Repmovs 03a75c9c05 set miniscreen to 250px 2022-08-20 17:08:50 +00:00
Lauri Ojansivu 6a20f6dc70 Updated translations. 2022-08-20 16:50:55 +03:00
Lauri Ojansivu 3d2fbf1397 Updated ChangeLog. 2022-08-20 16:50:25 +03:00
Lauri Ojansivu d0f1382055 Upgraded Snap candidate MongoDB versions.
Thanks to MongoDB developers !
2022-08-20 16:48:43 +03:00
Lauri Ojansivu 0de353508a Updated ChangeLog. 2022-08-20 16:45:49 +03:00
Lauri Ojansivu c291b9ebb8 Merge pull request #4648 from NotTheEvilOne/pr/support-upload-avatar-validation
Add support to validate avatar uploads by type, size and external program
2022-08-20 16:43:46 +03:00
Tobias Wolf 24566ce853 Reset avatar if removed 2022-08-20 09:01:18 +02:00
Tobias Wolf c64a221453 Add support to validate uploaded avatars 2022-08-20 08:46:41 +02:00
Tobias Wolf 469d81f8a5 Separate uploaded file validation logic from the model "Attachments" 2022-08-19 14:30:22 +02:00
Lauri Ojansivu 503f6128bd v6.38 2022-08-18 20:25:58 +03:00
Lauri Ojansivu e1398d04da Updated ChangeLog. 2022-08-18 20:14:31 +03:00
Lauri Ojansivu 79add98aa7 Updated parse-ms.
Thanks to developers of dependencies !
2022-08-18 20:13:01 +03:00
Lauri Ojansivu 7a6098774d Updated ChangeLog. 2022-08-18 19:45:00 +03:00
Lauri Ojansivu ce1f8b674d Updated to ostrio:files 2.3.0 and standard-minifier-js 2.8.1.
Thanks to developers of dependencies !
2022-08-18 19:42:50 +03:00
Lauri Ojansivu 11e666f229 Updated ChangeLog. 2022-08-18 19:37:53 +03:00
Lauri Ojansivu c131b983b3 Updated translations. 2022-08-18 19:30:30 +03:00
Lauri Ojansivu a9334b3bf4 Merge pull request #4647 from mfilser/copy_and_move_card_checklists_same_code
Copy / move card and checklists using same code
2022-08-18 18:52:00 +03:00
Martin Filser c437c0d3f1 get all cards sometimes failed because the list was undefined 2022-08-18 17:45:56 +02:00
Martin Filser 97109df673 copy/move checklist uses now the same code as copy/move card 2022-08-18 17:45:56 +02:00
Martin Filser d4338dd5cc Moving DialogWithBoardSwimlaneList class to it's own file 2022-08-18 17:45:56 +02:00
Martin Filser 15ce816ec6 Convert checklist-item to card uses now the same code as copy card / move card 2022-08-18 17:45:55 +02:00
Lauri Ojansivu 3e921da314 Merge pull request #4646 from mfilser/copy_card-attachments
"Copy card" copies now attachments too
2022-08-18 18:44:40 +03:00
Martin Filser dc210dc53b Copy checklists to many cards copies the whole card now (+attachments)
- renamed copyChecklistToManyCards changed to copyManyCards because the whole card is copied
2022-08-18 17:31:41 +02:00
Martin Filser 43135ffc8d Copy many cards now also copies attachments 2022-08-18 17:31:41 +02:00
Martin Filser 1516615934 Copy attachment copies now all versions
- for now only the version "original" exists, but as other method already
  consider that other version's can exist
2022-08-18 17:31:41 +02:00
Martin Filser e37bf2b51d Copy card at card details copies now attachments 2022-08-18 17:31:41 +02:00
Lauri Ojansivu 0553e36bfb Merge pull request #4643 from mfilser/move_copy_card_dialog_remember_last_selected_board
Move and copy card dialog remember last selected board
2022-08-18 14:50:20 +03:00
Martin Filser 03deeb6729 Copy many card dialog remembers now the last selected board 2022-08-16 23:26:37 +02:00
Martin Filser a06d1806df Copy card dialog remembers now the last selected board 2022-08-16 23:26:32 +02:00
Martin Filser 0a4e472601 Move card dialog remembers now the last selected board 2022-08-16 23:24:10 +02:00
Lauri Ojansivu f320069ec8 Merge pull request #4641 from mfilser/attachment_upload_progress_bar
Attachment upload progress bar + multiple files upload
2022-08-17 00:01:16 +03:00
Martin Filser 20c2679dc8 Attachment size, changed calculation to npm filesize (Version Info) 2022-08-16 22:35:19 +02:00
Martin Filser 464bc2f87b Attachment size, changed calculation to npm filesize (Attachment Move) 2022-08-16 22:35:18 +02:00
Martin Filser 3aba91885f Attachment size, changed calculation to npm filesize (Admin Reports) 2022-08-16 22:35:18 +02:00
Martin Filser 110a83a736 Attachment size, changed calculation to npm filesize (Card Details) 2022-08-16 22:35:18 +02:00
Martin Filser af120f2e0b Attachment uploads show's all uploading files 2022-08-16 22:35:18 +02:00
Martin Filser ea937810f2 Attachment, simple upload progress bar 2022-08-16 22:35:18 +02:00
Martin Filser a6b4a698af Attachment, upload all selected files
- until now only the first attachment was uploaded
2022-08-16 22:35:18 +02:00
Lauri Ojansivu 778084e934 Updated ChangeLog. 2022-08-16 22:29:22 +03:00
Lauri Ojansivu c23f5dc858 Fix Validate attachment error at PR Meteor files 2.2.1 fixes + attachment view.
Thanks to xet7 !

Fixes #4640
2022-08-16 22:27:22 +03:00
Lauri Ojansivu 2cd8cfc9b9 Updated ChangeLog. 2022-08-16 22:05:22 +03:00
Lauri Ojansivu 2bb1feee51 Updated dependencies. 2022-08-16 22:02:56 +03:00
Lauri Ojansivu 0e6a1a171e Merge pull request #4638 from mfilser/meteor_files_2.2.1
Meteor files 2.2.1 fixes + attachment view
2022-08-16 21:33:55 +03:00
Martin Filser f833d1288f fixed wrong @import reset.css 2022-08-16 19:42:12 +02:00
Martin Filser cfccee897e Fix "Attachments view (gallery) was missing" 2022-08-16 19:38:07 +02:00
Martin Filser ea5025595a Server side code don't need a Meteor.call 2022-08-16 18:34:27 +02:00
Martin Filser 344aeb4051 Meteor-Files 2.2.1 changed the function "namingFunction"
See also:
https://github.com/veliovgroup/Meteor-Files/commit/f872569be282e3abfd1d812ab72cdd1b446273fa
2022-08-16 18:34:26 +02:00
Martin Filser db8e707049 Attachment filename was truncated to 28 characters since Meteor-Files 2.1.0. Fixed this
See also:
https://github.com/veliovgroup/Meteor-Files/commit/e3a347c432b1296c2f6ee9ce48d356b631d2ce14#diff-4d4d0cea7e443590b59dddca4fc34faa6f37fbfd94a251d8d0047b8aa8ca19eeR4-R6
2022-08-16 18:34:26 +02:00
Lauri Ojansivu f6f5c7ccf0 Updated ChangeLog. 2022-08-16 14:41:05 +03:00
Lauri Ojansivu 43f380c17a Merge pull request #4637 from NotTheEvilOne/pr/support-upload-anti-virus-verification
Add support to validate attachment uploads by an external program
2022-08-16 14:35:28 +03:00
Tobias Wolf e6b705be26 Remove leftover unused arguments parsing for external execution 2022-08-16 12:01:25 +02:00
Tobias Wolf b5d311c00c Add support to validate attachment uploads by an external program 2022-08-15 21:09:46 +02:00
Lauri Ojansivu 91b1713bf7 v6.37 2022-08-15 15:41:33 +03:00
Lauri Ojansivu 9274501939 Updated ChangeLog. 2022-08-15 15:26:41 +03:00
Lauri Ojansivu 7c619859fc Updated dependencies like ostrio:files etc.
Thanks to developers of dependencies and xet7 !

Related https://github.com/veliovgroup/Meteor-Files/issues/847
2022-08-15 15:24:16 +03:00
Lauri Ojansivu c091fa5993 Updated ChangeLog. 2022-08-15 14:29:14 +03:00
Lauri Ojansivu f9934eeec9 Merge pull request #4635 from repmovs/miniscreen-issues
fixing issue #4634
2022-08-15 14:25:08 +03:00
Repmovs 98b7953d7f fixing issue #4634 2022-08-15 11:20:09 +00:00
Lauri Ojansivu feb6fb72f4 6.36 2022-08-14 15:31:46 +03:00
Lauri Ojansivu c63c84e2ea v6.36 2022-08-14 15:29:21 +03:00
Lauri Ojansivu b334a4ee00 Updated ChangeLog. 2022-08-14 14:43:57 +03:00
Lauri Ojansivu 8566f32bbd Revert Fix URLs to favicons etc for sub-urls, because it broke favicons on subdomain URLs.
Thanks to dsvk and xet7 !

Related #2094
2022-08-14 14:29:40 +03:00
Lauri Ojansivu af4bcb47e7 Updated ChangeLog. 2022-08-14 14:14:33 +03:00
Lauri Ojansivu 8560b36a5a Revert Fix Open card links in current tab. So now links open in new tab.
Thanks to dvsk, mfilser and xet7 !

Fixes https://github.com/wekan/wekan/discussions/3534
2022-08-14 14:10:44 +03:00
Lauri Ojansivu 6fbd817e83 v6.35 2022-08-13 14:18:05 +03:00
Lauri Ojansivu a86ea22303 Updated ChangeLog. 2022-08-13 13:59:07 +03:00
Lauri Ojansivu 54e6e32ab2 Fix Users can delete Boards from global archive (w/o permission).
Thanks to Meeques and xet7 !

Fixes #4631
2022-08-13 13:55:40 +03:00
Lauri Ojansivu dbcc8539bc Updated translations. 2022-08-13 13:38:20 +03:00
Lauri Ojansivu 65dee38150 Updated ChangeLog. 2022-08-13 12:59:13 +03:00
Lauri Ojansivu ee3c5cbb6a Fix Open card links in current tab. Not in new tab anymore.
Thanks to bronger, ManZosh and xet7 !

Fixes https://github.com/wekan/wekan/discussions/3534
2022-08-13 12:54:37 +03:00
Lauri Ojansivu f480f945c5 Updated ChangeLog. 2022-08-13 12:43:23 +03:00
Lauri Ojansivu 9824b90e69 Merge pull request #4630 from wekan/dependabot/github_actions/docker/build-push-action-3.1.1
Bump docker/build-push-action from 3.1.0 to 3.1.1
2022-08-13 12:12:59 +03:00
Lauri Ojansivu e6c3995713 Updated ChangeLog. 2022-08-12 22:20:27 +03:00
Repmovs d7bb0b4cc0 Set drag handle on touch screen not miniscreen 2022-08-12 17:21:45 +00:00
dependabot[bot] 3762768ed3 Bump docker/build-push-action from 3.1.0 to 3.1.1
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/1cb9d22b932e4832bb29793b7777ec860fc1cde0...c84f38281176d4c9cdb1626ffafcd6b3911b5d94)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-08 20:25:06 +00:00
Lauri Ojansivu 61d2fd0308 Updated ChangeLog. 2022-08-05 15:29:15 -04:00
Lauri Ojansivu 458b372b1b Merge pull request #4625 from mfilser/master
_getTopStack(), comment type error
2022-08-05 22:13:40 +03:00
Martin Filser 6eb1495c3b _getTopStack(), comment type error 2022-08-05 20:53:12 +02:00
Lauri Ojansivu e9a251d6a8 Merge pull request #4624 from mfilser/master
Fix Typo in CHANGELOG
2022-08-05 21:49:49 +03:00
Martin Filser b712380661 Fix Typo in CHANGELOG 2022-08-05 20:41:41 +02:00
Lauri Ojansivu abf76b92d4 v6.34 2022-08-05 17:47:21 +03:00
Lauri Ojansivu 43360c103b Updated dependencies.
Thanks to developers of dependencies !
2022-08-05 17:41:44 +03:00
Lauri Ojansivu ec4564d994 Updated ChangeLog. 2022-08-05 17:32:39 +03:00
Lauri Ojansivu 49a023733a Merge pull request #4623 from danielkaiser/master
Fix and update easysearch
2022-08-05 17:25:05 +03:00
Daniel Kaiser 339e044a30 Fix and update easysearch 2022-08-05 13:06:02 +02:00
Lauri Ojansivu 01c938d6b2 v6.33 2022-08-05 02:10:50 +03:00
Lauri Ojansivu cb42fa37b1 Updated ChangeLog. 2022-08-05 01:58:55 +03:00
Lauri Ojansivu 37f9de8b9b Try 2 to fix missing variable in WeKan fails to get MongoDB server version.
Thanks to simon816 and xet7 !

Fixes #4596
2022-08-05 01:54:08 +03:00
Lauri Ojansivu 08e18200c6 v6.32 2022-08-05 00:49:50 +03:00
Lauri Ojansivu 3ddb97c8c9 Updated ChangeLog. 2022-08-04 02:40:16 +03:00
Lauri Ojansivu 4941fd183c Try to fix missing variable in WeKan fails to get MongoDB server version.
Thanks to simon816 and xet7 !

Fixes #4596
2022-08-04 02:37:34 +03:00
Lauri Ojansivu 2be017cf4a Updated ChangeLog. 2022-08-04 02:19:47 +03:00
Lauri Ojansivu 1b30485e68 Added dependencies for attachments file size and type.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4618
2022-08-04 02:17:45 +03:00
Lauri Ojansivu 0c224a0a7f Added attachments file type and size snap settings and help text.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4618
2022-08-04 02:12:49 +03:00
Lauri Ojansivu d7292690bd Merge branch 'pr/support-upload-validation' of https://github.com/NotTheEvilOne/wekan 2022-08-04 00:33:15 +03:00
Lauri Ojansivu 1467f3de31 Updated ChangeLog. 2022-08-04 00:31:00 +03:00
Lauri Ojansivu 063ad08e9e Fix In Lists view, Card Details pop-up does not appear in 6.31 release.
Thanks to Sdub76, niels, m4teh, r4nc0r, mfilser, medjedovicm and xet7 !

Fixes #4616
2022-08-04 00:26:42 +03:00
Tobias Wolf ed3223fedc Add support to validate attachment uploads by type and size 2022-08-03 13:06:23 +02:00
Lauri Ojansivu a551f2bcc7 Updated translations. 2022-08-02 00:18:26 +03:00
Lauri Ojansivu 0efc9aca15 Updated ChangeLog. 2022-08-02 00:06:33 +03:00
Lauri Ojansivu 73ea39466b Updated build scripts.
Thanks to xet7 !
2022-08-02 00:05:36 +03:00
Lauri Ojansivu ec2b008552 Updated ChangeLog. 2022-08-01 23:45:00 +03:00
Lauri Ojansivu 86d6d2d19a Update release scripts.
Thanks to xet7 !
2022-08-01 23:43:14 +03:00
Lauri Ojansivu 26f8df2995 Updated translations. 2022-07-31 23:04:52 +03:00
Lauri Ojansivu b0758449bc Updated ChangeLog. 2022-07-31 04:38:25 +03:00
Lauri Ojansivu b433fbdda8 Try to fix Snap. 2022-07-31 04:37:07 +03:00
Lauri Ojansivu 2e1ca73379 Updated ChangeLog. 2022-07-31 04:30:28 +03:00
Lauri Ojansivu 14e5d08a19 Updated release build scripts to reinstall bcrypt, upload Windows version etc.
Thanks to xet7 !
2022-07-31 04:27:53 +03:00
Lauri Ojansivu aeb29a4f95 v6.31 2022-07-31 02:19:02 +03:00
Lauri Ojansivu 27198c4064 Snap Candidate to MongoDB 5.0.10 etc.
Thanks to xet7 !
2022-07-31 02:12:23 +03:00
Lauri Ojansivu bba1f9e133 Merge pull request #4611 from wekan/dependabot/npm_and_yarn/moment-2.29.4
Bump moment from 2.29.3 to 2.29.4
2022-07-30 17:34:27 +03:00
dependabot[bot] fd6f2132af Bump moment from 2.29.3 to 2.29.4
Bumps [moment](https://github.com/moment/moment) from 2.29.3 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.3...2.29.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-30 14:33:28 +00:00
Lauri Ojansivu a24c47901f Updated ChangeLog. 2022-07-30 10:32:52 -04:00
Lauri Ojansivu d37adbb046 Fix Login Page Error, Lists can't move anymore, reverted incomplete Change Lists Width.
Thanks to johnnytolengo, gda140 and xet7 !

Fixes #4592,
related #4558
2022-07-30 10:29:19 -04:00
Lauri Ojansivu 0f0fab28b0 Updated ChangeLog. 2022-07-29 13:19:22 -04:00
Lauri Ojansivu 69c3bdf553 Updated ChangeLog. 2022-07-29 13:17:29 -04:00
Lauri Ojansivu 6594795f39 Reverted incomplete fix about bug where opening card scrolls to wrong place.
Thanks to danceb, DimDz, mfilser, Emile840, derbolle, xplodwild and xet7 !

Fixes #4572
2022-07-29 13:10:51 -04:00
Lauri Ojansivu 36ae118afc Updated translations. 2022-07-29 13:07:27 -04:00
Lauri Ojansivu b062eb8af4 Merge pull request #4610 from Emile840/master
Fix the bug that displayed a card popup to all swimlanes for public board (when a user is not logged)
2022-07-29 19:41:52 +03:00
Emile840 404fbacc41 Fix the bug that displayed a card popup to all swimlanes for public board (when a user is not logged) 2022-07-28 19:15:15 +02:00
Lauri Ojansivu 986b8e0463 Updated translations. 2022-07-28 17:37:35 +03:00
Lauri Ojansivu 6289dcf4c2 Updated ChangeLog. 2022-07-28 17:32:54 +03:00
Lauri Ojansivu 5b883f4ea6 Merge pull request #4598 from Viehlieb/feature/save_description_on_card_exit
Feature/save description on card exit
2022-07-28 17:11:35 +03:00
Lauri Ojansivu 58da4e4004 Merge pull request #4604 from wekan/dependabot/github_actions/docker/build-push-action-3.1.0
Bump docker/build-push-action from 3.0.0 to 3.1.0
2022-07-28 17:09:08 +03:00
Lauri Ojansivu c2dc80c452 Merge pull request #4599 from wekan/dependabot/npm_and_yarn/jquery-ui-1.13.2
Bump jquery-ui from 1.13.1 to 1.13.2
2022-07-28 17:08:57 +03:00
Lauri Ojansivu 1b95f9f167 Fix URLs to favicons etc.
Thanks to letmp, Meeques and xet7 !

Fixes #2094
2022-07-28 05:34:00 -04:00
dependabot[bot] 72c44e703f Bump docker/build-push-action from 3.0.0 to 3.1.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/e551b19e49efd4e98792db7592c17c09b89db8d8...1cb9d22b932e4832bb29793b7777ec860fc1cde0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 20:54:30 +00:00
Lauri Ojansivu 8e17177331 Updated translations. 2022-07-24 15:04:37 -04:00
dependabot[bot] e825480b57 Bump jquery-ui from 1.13.1 to 1.13.2
Bumps [jquery-ui](https://github.com/jquery/jquery-ui) from 1.13.1 to 1.13.2.
- [Release notes](https://github.com/jquery/jquery-ui/releases)
- [Commits](https://github.com/jquery/jquery-ui/compare/1.13.1...1.13.2)

---
updated-dependencies:
- dependency-name: jquery-ui
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-18 17:22:11 +00:00
viehlieb b2a555f996 revert changeson rebuild-wekan.sh 2022-07-18 15:56:04 +02:00
viehlieb b2fd576f36 added space before text 2022-07-18 15:54:49 +02:00
viehlieb 1c4b54d1ad revert tiny change on input event keydown <-> keyup 2022-07-18 15:11:19 +02:00
viehlieb b36920e657 merge with master 2022-07-18 15:09:18 +02:00
viehlieb b3056626f3 add option to get asked whether unsaved card descriptions should be saved to db on e.g. unintentional click out of card details pane 2022-07-18 15:05:22 +02:00
Lauri Ojansivu 760dde2c10 Updated translations. 2022-07-16 08:26:37 +03:00
Lauri Ojansivu e7a2e8302c Updated ChangeLog. 2022-07-13 23:14:10 +03:00
Lauri Ojansivu e81900178e Added LaTex support to all input fields with markdown-it-mathjax3.
Examples: https://github.com/wekan/wekan/wiki/LaTeX

Thanks to DoktorScience !

Fixes #4589
2022-07-13 23:12:16 +03:00
Lauri Ojansivu 648adb414e Updated ChangeLog. 2022-07-11 20:30:49 +03:00
Lauri Ojansivu e3149289db v6.30 2022-07-11 20:07:17 +03:00
Lauri Ojansivu b680cf4938 Updated ChangeLog. 2022-07-11 19:59:29 +03:00
Lauri Ojansivu 69d454dd03 Fix uploading attachments.
Thanks to BabyFnord and xet7 !

Related #4585
2022-07-11 19:54:28 +03:00
Lauri Ojansivu 703c849482 Updated ChangeLog. 2022-07-11 17:47:05 +03:00
Lauri Ojansivu 284f440136 OIDC/OAuth2 autologin settings for Docker/Snap/Source/Bundle platforms.
Thanks to xet7 !
2022-07-11 17:44:58 +03:00
viehlieb b00169d24f wipon card description - prevention of unintentional exit deletesunsaved description 2022-07-11 16:15:40 +02:00
Lauri Ojansivu 267becdb9a Updated ChangeLog. 2022-07-11 17:06:34 +03:00
Lauri Ojansivu 054d420dc9 On CentOS 7 Docker there is seccomp issue with glibc 6, so setting it to unconfined to get WeKan working.
Thanks to m-brangeon !

Related #4585,
related #4587
2022-07-11 17:02:05 +03:00
Lauri Ojansivu 0fbc6efbcf Updated ChangeLog. 2022-07-11 16:47:04 +03:00
Lauri Ojansivu 63f5c88a15 Updated ChangeLog. 2022-07-11 16:20:03 +03:00
Lauri Ojansivu 24598eaf00 Merge pull request #4588 from Viehlieb/feature/direct_login_from_oidc
Feature/direct login from OIDC
2022-07-11 16:10:29 +03:00
viehlieb aa067b777a merge with master 2022-07-11 14:58:27 +02:00
viehlieb 2e9fca93ec remove unneccessary line in layout.js 2022-07-11 14:48:05 +02:00
Lauri Ojansivu c2f5355f9a Updated ChangeLog. 2022-07-11 00:23:58 -04:00
Lauri Ojansivu 9fdf739695 Updated ChangeLog. 2022-07-11 02:21:44 +03:00
Lauri Ojansivu 17f8f8f14f Try to fix Snap.
Thanks to xet7 !
2022-07-11 02:18:48 +03:00
Lauri Ojansivu 9a68c96585 v6.29 2022-07-11 01:20:31 +03:00
Lauri Ojansivu ed2a725a2c Updated dependencies. 2022-07-11 00:52:32 +03:00
Lauri Ojansivu 8914d4404e Updated dependencies. 2022-07-08 23:33:08 +03:00
viehlieb c5dd0b729d get ServiceConfiguration from server 2022-07-08 16:48:06 +02:00
Lauri Ojansivu f4f9c501d1 Updated ChangeLog. 2022-07-08 10:13:24 -04:00
Lauri Ojansivu 239dd1a341 Updated to Node.js v14.20.0. Thanks to Node.js developers. 2022-07-08 10:10:34 -04:00
viehlieb ee254cb9c8 wait for service config load to redirect to oidc provider 2022-07-08 15:09:39 +02:00
viehlieb 05a98fa88b Merge branch 'master' of https://github.com/wekan/wekan into feature/direct_login_from_oidc 2022-07-08 12:01:57 +02:00
viehlieb 5df5c7f5d7 merge master changes 2022-07-08 11:55:32 +02:00
Lauri Ojansivu ccea223ef7 Updated ChangeLog. 2022-07-06 00:34:27 +03:00
Lauri Ojansivu 25f9963645 Merge pull request #4582 from mfilser/move_copy_card_closes_popup_if_done
Move/Copy card closes now the popup if done
2022-07-06 00:33:31 +03:00
Lauri Ojansivu b1c41518df Updated ChangeLog. 2022-07-06 00:32:37 +03:00
Lauri Ojansivu ae09f0f008 Updated dependencies. 2022-07-06 00:31:13 +03:00
Martin Filser 490ad65b6e Move/Copy card closes now the popup if done
- Resolves discussion: #4337
2022-07-05 23:15:52 +02:00
Lauri Ojansivu cb78501b04 Updated ChangeLog. 2022-07-05 23:40:28 +03:00
Lauri Ojansivu 65a031f29d Merge pull request #4581 from mfilser/checkStartup-details_of_wekan_user
00checkStartup, on error give more details on current user which run's wekan
2022-07-05 23:21:22 +03:00
Martin Filser 6c94b57cfc 00checkStartup, on error give more details on current user which run's Wekan 2022-07-05 21:35:59 +02:00
Lauri Ojansivu 7ae15cae27 Updated translations. 2022-07-04 17:54:59 +03:00
Lauri Ojansivu 0596595284 Updated ChangeLog. 2022-07-04 17:47:54 +03:00
Lauri Ojansivu 724d1386f6 Comment out unused CSS.
Thanks to xet7 !
2022-07-04 17:46:36 +03:00
Lauri Ojansivu 920b32735f Updated ChangeLog. 2022-07-04 17:46:20 +03:00
Lauri Ojansivu 86aa7ff353 Merge pull request #4577 from JonasPfeiferb1/master
fixed one Typo in CSS Style Sheet
2022-07-04 17:04:13 +03:00
Jonas Pfeifer 20d87f2299 fixed Typo 2022-07-04 15:24:21 +02:00
Lauri Ojansivu 88f05e8c4e Updated ChangeLog. 2022-06-30 18:45:11 +03:00
Lauri Ojansivu c3bfcb78e9 Updated ostrio:files .
Thanks to developers of dependencies !
2022-06-30 18:43:37 +03:00
Lauri Ojansivu 83a78c792a Updated ChangeLog. 2022-06-30 18:40:04 +03:00
Lauri Ojansivu 99b2fdbf99 Added translations: Arabic (Algeria) (ar_DZ), Azerbaijani (az), Azerbaijani (Azerbaijan) (az_AZ), Azerbaijani (Latin) (az@latin).
Thanks to translators !
2022-06-30 18:35:37 +03:00
Lauri Ojansivu 7ca9e8f4d3 Updated ChangeLog. 2022-06-25 21:58:00 +03:00
Lauri Ojansivu dac85c0a03 Merge pull request #4574 from helioguardabaxo/master
Fix div max-width on My Cards table view
2022-06-25 21:54:47 +03:00
helioguardabaxo 04e04ead92 Add display timestamp on 'Boards in Archive' 2022-06-24 22:19:40 -03:00
helioguardabaxo 008fc806e8 Fix div max-width on My Cards table view 2022-06-24 21:50:07 -03:00
Lauri Ojansivu af7874b700 Merge pull request #4565 from wekan/dependabot/github_actions/actions/dependency-review-action-2
Bump actions/dependency-review-action from 1 to 2
2022-06-24 23:59:03 +03:00
Lauri Ojansivu 94e1fa79b3 Merge pull request #4573 from helioguardabaxo/master
Do not show archived lists on All Boards
2022-06-24 23:58:29 +03:00
helioguardabaxo 6694088ac7 Do not show archived lists on All Boards 2022-06-24 16:40:03 -03:00
dependabot[bot] b4c74b8d4c Bump actions/dependency-review-action from 1 to 2
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 1 to 2.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v1...v2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-20 20:34:39 +00:00
Lauri Ojansivu 28612612bd Update README.md
Fix typos
2022-06-20 08:21:21 +03:00
Lauri Ojansivu f2f834e810 Update README.md
Fix typos
2022-06-20 08:18:23 +03:00
Lauri Ojansivu 3e5f8f458c Update README.md
Fix typos
2022-06-20 08:14:05 +03:00
Lauri Ojansivu cffb5baa68 Updated ChangeLog. 2022-06-19 09:30:47 +03:00
Lauri Ojansivu 01d0dd3b1d Resizeable size of list width and height. Size is not saved yet. In Progress.
Thanks to NLBlackEagle and xet7 !

Related #4558
2022-06-19 09:28:50 +03:00
Lauri Ojansivu c8bb3c7353 Try migrate mongo 3 to mongo 5. 2022-06-16 03:11:56 +03:00
Lauri Ojansivu 709b17805b Try to fix Snap. 2022-06-16 02:00:54 +03:00
Lauri Ojansivu e9982e34ed Try to fix Snap. 2022-06-16 01:57:51 +03:00
Lauri Ojansivu 1c2c3d9dea Try to fix Snap: Add wget 2022-06-16 01:04:17 +03:00
Lauri Ojansivu bd26ed7f7a Try to fix Snap. 2022-06-16 00:56:54 +03:00
Lauri Ojansivu c48299c0dd Try to fix nap 2022-06-14 09:11:27 +03:00
Lauri Ojansivu 753c54a741 Try to fix Snap. 2022-06-14 08:49:00 +03:00
Lauri Ojansivu 48a9fe3440 Try to fix Snap. 2022-06-14 08:22:25 +03:00
Lauri Ojansivu be1893e66a Updated ChangeLog. 2022-06-13 13:59:07 +03:00
Lauri Ojansivu 0d67a86f2c Updated ostrio:files.
Thanks to developers of dependencies !
2022-06-13 13:57:47 +03:00
Lauri Ojansivu 6e979beb01 Updated ChangeLog. 2022-06-13 13:56:47 +03:00
Lauri Ojansivu 12615fef5d Added translation Asturia (Spain).
Thanks to translators !
2022-06-13 13:54:54 +03:00
Lauri Ojansivu 403e2f4cbd Updated ChangeLog. 2022-06-13 13:41:57 +03:00
Lauri Ojansivu 6b4ffa69c6 Docker base image to Ubuntu 22.04 .
Thanks to Ubuntu developers !
2022-06-13 13:39:35 +03:00
viehlieb 0f65e06338 wip card description save 2022-06-10 17:57:15 +02:00
viehlieb 84d51393e4 enable redirect to oidc provider to empower sso solutions even further 2022-06-10 17:52:52 +02:00
Lauri Ojansivu 51fb490c22 v6.28 2022-06-08 09:42:53 +03:00
Lauri Ojansivu f9e25e028e Updated ChangeLog. 2022-06-08 09:36:24 +03:00
Lauri Ojansivu 937797356c Updated dependencies. Try to fix Binary release on releases.wekan.team lacks the CSS.
Thanks to znerol, mrcancer91, BabyFnord and xet7 !

Fixes #4545
2022-06-08 09:32:34 +03:00
Lauri Ojansivu 21ae1b59d6 Updated ChangeLog. 2022-06-08 07:54:26 +03:00
Lauri Ojansivu e25050316f Try to detect Japanese (Japan) better.
Thanks to takenoko14 at Transifex and xet7 !
2022-06-08 07:52:20 +03:00
Lauri Ojansivu 2e06d466b9 Updated ChangeLog. 2022-06-08 07:44:55 +03:00
Lauri Ojansivu 5739b5d93c Merge pull request #4557 from mfilser/move_and_copy_card_set_sorting
Move and copy card set sorting
2022-06-08 07:43:21 +03:00
Martin Filser 6b6bdddce6 Move card to top/bottom using now the same internal code logic 2022-06-07 06:32:52 +02:00
Martin Filser dcff70c983 Copy card is now at the top too (same as move card) 2022-06-07 06:32:52 +02:00
Martin Filser ad5167de55 Card Details, move card between lists moves now the card to the top by default
- mostly the card is sorted anywhere and you have to scroll the list,
  now, the card is always at the top
2022-06-07 06:32:52 +02:00
Lauri Ojansivu 947692693c Merge pull request #4552 from wekan/dependabot/github_actions/VeryGoodOpenSource/very_good_coverage-1.2.1
Bump VeryGoodOpenSource/very_good_coverage from 1.1.1 to 1.2.1
2022-06-07 00:37:24 +03:00
Lauri Ojansivu 0c8e812991 Merge pull request #4555 from wekan/dependabot/github_actions/helm/chart-releaser-action-1.4.0
Bump helm/chart-releaser-action from 1.1.0 to 1.4.0
2022-06-07 00:35:01 +03:00
Lauri Ojansivu fb1742b149 Merge pull request #4554 from wekan/dependabot/github_actions/docker/build-push-action-3
Bump docker/build-push-action from 2.5.0 to 3
2022-06-07 00:34:37 +03:00
Lauri Ojansivu 054915031e Merge pull request #4553 from wekan/dependabot/github_actions/actions/download-artifact-3
Bump actions/download-artifact from 2 to 3
2022-06-07 00:34:19 +03:00
Lauri Ojansivu ada6b8ee9c Merge pull request #4556 from wekan/dependabot/github_actions/actions/upload-artifact-3
Bump actions/upload-artifact from 2 to 3
2022-06-07 00:34:01 +03:00
dependabot[bot] 63e0597c68 Bump actions/upload-artifact from 2 to 3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:26 +00:00
dependabot[bot] c71cedf9f4 Bump helm/chart-releaser-action from 1.1.0 to 1.4.0
Bumps [helm/chart-releaser-action](https://github.com/helm/chart-releaser-action) from 1.1.0 to 1.4.0.
- [Release notes](https://github.com/helm/chart-releaser-action/releases)
- [Commits](https://github.com/helm/chart-releaser-action/compare/v1.1.0...v1.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:23 +00:00
dependabot[bot] f6ee321d0f Bump docker/build-push-action from 2.5.0 to 3
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.5.0 to 3.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/ad44023a93711e3deb337508980b4b5e9bcdc5dc...e551b19e49efd4e98792db7592c17c09b89db8d8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:19 +00:00
dependabot[bot] 2a24720fad Bump actions/download-artifact from 2 to 3
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v2...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:14 +00:00
dependabot[bot] a7fd512124 Bump VeryGoodOpenSource/very_good_coverage from 1.1.1 to 1.2.1
Bumps [VeryGoodOpenSource/very_good_coverage](https://github.com/VeryGoodOpenSource/very_good_coverage) from 1.1.1 to 1.2.1.
- [Release notes](https://github.com/VeryGoodOpenSource/very_good_coverage/releases)
- [Changelog](https://github.com/VeryGoodOpenSource/very_good_coverage/blob/main/CHANGELOG.md)
- [Commits](https://github.com/VeryGoodOpenSource/very_good_coverage/compare/v1.1.1...v1.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:20:09 +00:00
Lauri Ojansivu b7f62cf5f2 Updated ChangeLog. 2022-06-06 15:00:22 +03:00
Lauri Ojansivu dfea3d0e73 Removed lightbox that caused bugs like Maximum stack size exceeded. TODO later: Add a new way to open attachment image bigger.
Thanks to xet7 !

Related #4545
2022-06-06 14:58:45 +03:00
Lauri Ojansivu e4e1a8f4e6 Updated ChangeLog. 2022-06-06 10:45:56 +03:00
Lauri Ojansivu 43b2d71404 Upgraded to Meteor 2.7.3 .
Thanks to Meteor developers !
2022-06-06 10:41:49 +03:00
Lauri Ojansivu c9f8e111c5 Updated ChangeLog. 2022-06-06 10:34:48 +03:00
Lauri Ojansivu 67596602d7 Merge branch 'master' of github.com:wekan/wekan 2022-06-06 10:33:13 +03:00
Lauri Ojansivu 5af4f54f4c Added translations: Moroccan Arabic (ary) and Standard Moroccan Tamazight (zgh).
Thanks to translators!
2022-06-06 10:32:36 +03:00
Lauri Ojansivu 0d7d38b358 Merge pull request #4543 from turrisxyz/Dependency-GitHub 2022-06-02 05:51:49 +03:00
naveen 680770a7df chore(deps): Included dependency review
> Dependency Review GitHub Action in your repository to enforce dependency
> reviews on your pull requests.
> The action scans for vulnerable versions of dependencies introduced by package version
> changes in pull requests,
> and warns you about the associated security vulnerabilities.
> This gives you better visibility of what's changing in a pull request,
> and helps prevent vulnerabilities being added to your repository.

https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
Signed-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com>
2022-06-01 23:35:00 +00:00
Lauri Ojansivu 14c3432896 Merge pull request #4539 from wekan/dependabot/github_actions/github/codeql-action-2
Bump github/codeql-action from 1 to 2
2022-05-31 05:17:43 +03:00
Lauri Ojansivu 34fc724d95 Merge pull request #4537 from wekan/dependabot/github_actions/docker/login-action-2
Bump docker/login-action from 1.9.0 to 2
2022-05-31 05:17:11 +03:00
dependabot[bot] 1ed2c3b45a Bump docker/login-action from 1.9.0 to 2
Bumps [docker/login-action](https://github.com/docker/login-action) from 1.9.0 to 2.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/28218f9b04b4f3f62068d7b6ce6ca5b26e35336c...49ed152c8eca782a232dede0303416e8f356c37b)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:16:56 +00:00
Lauri Ojansivu 81f74f4db6 Merge pull request #4536 from wekan/dependabot/github_actions/docker/metadata-action-4.0.1
Bump docker/metadata-action from 3.3.0 to 4.0.1
2022-05-31 05:16:33 +03:00
Lauri Ojansivu b5bc07d2e7 Merge pull request #4535 from wekan/dependabot/github_actions/actions/checkout-3
Bump actions/checkout from 2 to 3
2022-05-31 05:15:57 +03:00
Lauri Ojansivu 85fcaff678 Merge pull request #4538 from wekan/dependabot/github_actions/actions/cache-3
Bump actions/cache from 2 to 3
2022-05-31 05:15:11 +03:00
dependabot[bot] d5247daf8a Bump github/codeql-action from 1 to 2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:27 +00:00
dependabot[bot] 9ff87d189f Bump actions/cache from 2 to 3
Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v2...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:24 +00:00
dependabot[bot] 2d36116823 Bump docker/metadata-action from 3.3.0 to 4.0.1
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 3.3.0 to 4.0.1.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](https://github.com/docker/metadata-action/compare/98669ae865ea3cffbcbaa878cf57c20bbf1c6c38...69f6fc9d46f2f8bf0d5491e4aabe0bb8c6a4678a)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:17 +00:00
dependabot[bot] 9f0b9b29a5 Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-31 02:12:13 +00:00
Lauri Ojansivu 1d7e08390c Merge pull request #4534 from turrisxyz/Dependabot-GitHub-Actions
chore: Included githubactions in the dependabot config
2022-05-31 05:11:48 +03:00
naveen bbffa2eb6b chore: Included githubactions in the dependabot config
This should help with keeping the GitHub actions updated on new releases. This will also help with keeping it secure.

Dependabot helps in keeping the supply chain secure https://docs.github.com/en/code-security/dependabot

GitHub actions up to date https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot

https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool
Signed-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com>
2022-05-31 01:40:38 +00:00
Lauri Ojansivu 52ea940265 Merge pull request #4533 from turrisxyz/Pinned-Dependencies-GitHub
chore: Set permissions for GitHub actions
2022-05-30 04:15:47 +03:00
neilnaveen 355b358fe2 chore: Set permissions for GitHub actions
Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won’t be able to do much.

- Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions

https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs

[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)

Signed-off-by: neilnaveen <42328488+neilnaveen@users.noreply.github.com>
2022-05-30 01:09:08 +00:00
Lauri Ojansivu d74662bfd7 Updated ChangeLog. 2022-05-29 00:26:23 +03:00
Lauri Ojansivu e151da7163 Updated ChangeLog. 2022-05-29 00:24:42 +03:00
Lauri Ojansivu 1c71baec81 Update package-lock.json 2022-05-28 23:17:03 +03:00
Lauri Ojansivu 9382c2cd04 v6.27 2022-05-28 23:10:25 +03:00
Lauri Ojansivu 25e50e3908 Upgraded to Meteor 2.7.3-beta.0 .
Thanks to Meteor developers !
2022-05-28 22:58:04 +03:00
Lauri Ojansivu c6331830d4 Updated translations. 2022-05-28 22:38:17 +03:00
Lauri Ojansivu 4226a0bc37 Updated ChangeLog. 2022-05-24 00:47:35 +03:00
Lauri Ojansivu 693a49f852 Try to fix Snap. Part 8.
Thanks to xet7 !
2022-05-24 00:46:41 +03:00
Lauri Ojansivu 0b797ceb7e Updated ChangeLog. 2022-05-24 00:33:06 +03:00
Lauri Ojansivu 2587e2f00a Try to fix Snap. Part 7.
Thanks to xet7 !
2022-05-24 00:32:20 +03:00
Lauri Ojansivu 6ad83bcaeb Updated ChangeLog. 2022-05-24 00:15:29 +03:00
Lauri Ojansivu f2815a9039 Try to fix Snap. Part 6.
Thanks to xet7 !
2022-05-24 00:14:12 +03:00
Lauri Ojansivu 6d7e69cc9f Updated ChangeLog. 2022-05-24 00:02:19 +03:00
Lauri Ojansivu fac1ba5952 Try to fix Snap. Part 5.
Thanks to xet7 !
2022-05-24 00:01:13 +03:00
Lauri Ojansivu 3db14ad03a Updated ChangeLog. 2022-05-23 23:45:16 +03:00
Lauri Ojansivu 9ca26d22d0 Try to fix Snap. Part 4.
Thanks to xet7 !
2022-05-23 23:44:16 +03:00
Lauri Ojansivu 7640c7c04d Updated ChangeLog. 2022-05-23 23:23:34 +03:00
Lauri Ojansivu ea66eca60d Try to fix Snap. Part 3: Added --unsafe-perm to npm install.
Thanks to xet7 !

Related https://github.com/wekan/wekan/issues/4505#issuecomment-1135101672
2022-05-23 23:22:00 +03:00
Lauri Ojansivu 0ae8de4c04 Updated ChangeLog. 2022-05-23 22:58:45 +03:00
Lauri Ojansivu e50d69cfb7 Try to fix Snap. Part 2.
Thanks to xet7 !
2022-05-23 22:57:36 +03:00
Lauri Ojansivu d95436df51 Updated ChangeLog. 2022-05-23 22:34:39 +03:00
Lauri Ojansivu 3b419848d1 Try to fix Snap.
Thanks to xet7 !

Related #4524,
related #4423
2022-05-23 22:32:45 +03:00
Lauri Ojansivu 8efc8605a1 Updated ChangeLog. 2022-05-23 14:09:07 +03:00
Lauri Ojansivu 4f44c5bf87 Removed wekan-accounts-sandstorm .test-app directory, that could not be git cloned on Windows.
Thanks to xet7 !
2022-05-23 13:39:55 +03:00
Lauri Ojansivu 4b12245537 Updated ChangeLog. 2022-05-23 00:53:17 +03:00
Lauri Ojansivu adcc33ed7f Fix opening card scrolls to wrong position when many swimlanes and card at bottom of board.
Thanks to xet7 !
2022-05-23 00:50:21 +03:00
Lauri Ojansivu f1482cfa94 Updated translations. 2022-05-22 23:38:13 +03:00
Lauri Ojansivu 148ef0eb65 v6.26 2022-05-21 04:34:57 +03:00
Lauri Ojansivu 6c8563d02f Updated to Node.js v14.19.3. Thanks to Node.js developers. 2022-05-21 04:29:30 +03:00
Lauri Ojansivu 60ac208ec2 v6.25 2022-05-21 04:06:18 +03:00
Lauri Ojansivu dde98c8870 Updated ChangeLog. 2022-05-21 03:53:12 +03:00
Lauri Ojansivu 990477e9c6 Fixed images not showing correctly, by updating packages, removing handlebars,
and changing image attachment view big image popup from swipebox to lightbox.

Thanks to xet7 !

Fixes #4507
2022-05-21 03:42:29 +03:00
Lauri Ojansivu b4d46f3016 Updated translations. 2022-05-20 22:56:39 +03:00
Lauri Ojansivu 24bed7bdb2 Updated translations. 2022-05-20 22:47:17 +03:00
Lauri Ojansivu ddca4b55a7 Update translations. 2022-05-20 22:43:24 +03:00
Lauri Ojansivu cf727a08df Merge pull request #4521 from mfilser/attachment_rename
Attachment rename
2022-05-20 22:25:44 +03:00
Martin Filser b6374dac3d Attachment selection, simpler code logic 2022-05-20 12:38:46 +02:00
Martin Filser 11f8b17a05 Attachment rename now without filename extension 2022-05-20 12:38:46 +02:00
Martin Filser 26e1c1dc4a Attachment file rename is now possible
- Relates to: #2099
2022-05-20 12:38:46 +02:00
Lauri Ojansivu 21c09c67e4 Updated ChangeLog. 2022-05-19 08:06:24 +03:00
Lauri Ojansivu 985c2cdbfd Fix Bullets in label selection popup. Related to import nib css reset.
Thanks to AuspeXeu, mfilser and xet7 !

Fixes #4516

Related #4512
2022-05-19 08:02:23 +03:00
Lauri Ojansivu a2968d74d7 v6.24 2022-05-18 12:29:28 +03:00
Lauri Ojansivu 1dd7388783 Updated ChangeLog. 2022-05-18 12:19:28 +03:00
Lauri Ojansivu 8964a18e76 Added missing 'import nib' stylesheet reset that removes extra li bullet points.
Thanks to mfilser and xet7 !

Related https://github.com/wekan/wekan/issues/4512#issuecomment-1129347536
2022-05-18 12:12:45 +03:00
Lauri Ojansivu 58da992a0c Updated ChangeLog. 2022-05-18 11:49:27 +03:00
Lauri Ojansivu 3ed1fc3e6b Fix redirects needs to be done in sync.
Thanks to nebulade and xet7 !

Fixes #4514
2022-05-18 11:46:01 +03:00
Lauri Ojansivu f4fe33fb05 v6.23 2022-05-17 13:46:35 +03:00
Lauri Ojansivu 55815aac71 Updated ChangeLog. 2022-05-17 13:23:07 +03:00
Lauri Ojansivu 77d72ae20a Use MongoDB 5 at docker-compose.yml.
Thanks to MongoDB !
2022-05-17 13:21:34 +03:00
Lauri Ojansivu 6af581422c Updated translations. 2022-05-17 12:44:46 +03:00
Lauri Ojansivu 27f8356b54 Updated ChangeLog. 2022-05-17 12:40:24 +03:00
Lauri Ojansivu 072778b9aa Converted Stylus to CSS. Removed Stylus. This change removed many error messages.
Thanks to xet7 !
2022-05-17 12:36:10 +03:00
Lauri Ojansivu 01a1a2cdce Updated ChangeLog. 2022-05-16 23:40:10 +03:00
Lauri Ojansivu 7e43a6f4fb Merge branch 'master' into upgrade-meteor 2022-05-16 21:44:48 +03:00
Lauri Ojansivu 907013228d Updated to Node.js v14.19.2. Thanks to Node.js developers. 2022-05-16 21:22:16 +03:00
Lauri Ojansivu 00768b4392 Added back WeKan lockout, ldap, oidc, cas.
Thanks to xet7 !
2022-05-16 21:12:27 +03:00
Lauri Ojansivu a73a4c1e5b When developing with Meteor on macOS, get current IP address.
Thanks to xet7 !
2022-05-16 20:43:40 +03:00
Lauri Ojansivu 963a4711db Upgrade to Meteor 2.7.2.
Thanks to Meteor developers!
2022-05-16 19:55:07 +03:00
viehlieb 2e354f9b1e wip redirect on landing page and logout to oidc provider 2022-05-11 09:05:43 +02:00
Lauri Ojansivu bc8b8cbdbe v6.22 2022-05-09 07:52:54 +03:00
Lauri Ojansivu 4a78c718d3 Updated ChangeLog. 2022-05-09 07:30:02 +03:00
Lauri Ojansivu bfef7844ba Updated to Node.js v14.19.2. Thanks to Node.js developers. 2022-05-09 07:27:30 +03:00
Lauri Ojansivu ca0dfe160f Updated translations. 2022-05-09 07:20:42 +03:00
Lauri Ojansivu 303cebef63 Merge pull request #4500 from mfilser/upgrade-meteor-2.7.2-fix_sandstorm_login
Upgrade meteor 2.7.2 fix sandstorm login + merge branch master into upgrade-meteor
2022-05-04 21:12:43 +03:00
Martin Filser 2856cf9baa Upgrade wekan-accounts-sandstorm to Meteor 2.7 dependencies
Clone of Repository:
https://github.com/wekan/meteor-accounts-sandstorm/commit/3ba279df9265d955d2aa8a79e1b796165acb128c
2022-05-03 21:55:04 +02:00
Martin Filser 1fc3ed407a Merge remote-tracking branch 'origin/upgrade-meteor' into upgrade-meteor 2022-05-03 17:50:30 +02:00
Martin Filser 28b478d14f Merge remote-tracking branch 'origin/master' into upgrade-meteor 2022-05-03 17:50:14 +02:00
Lauri Ojansivu 38d26fa7e3 Improvements to future WeKan Snap core20. Does not work yet. In Progress.
Thanks to xet7 !
2022-05-03 15:55:27 +03:00
Lauri Ojansivu 5ddf88bca1 Updated translations. 2022-05-03 13:19:23 +03:00
Lauri Ojansivu 255eac9f98 Fix typos. 2022-05-02 23:40:19 +03:00
Lauri Ojansivu f260b7ba88 Added Sandstorm Accounts. 2022-05-02 23:30:01 +03:00
Lauri Ojansivu 40aae378b6 Updated translations. 2022-05-02 02:58:40 +03:00
Lauri Ojansivu 0865f3597a Merge pull request #4496 from mfilser/upgrade-meteor-2.7.2-fix_copy_board
Upgrade meteor 2.7.2 - fix copy board
2022-05-02 00:25:02 +03:00
Martin Filser b9d6fe8146 Merge remote-tracking branch 'origin/master' into 'upgrade-meteor' 2022-05-01 10:54:19 +02:00
Martin Filser 000e27a4a1 Board copy moves the attachments to the "copied from board storage" 2022-04-30 21:05:04 +02:00
Martin Filser fbb0ed5ec1 Board copy work now again
- there was an error at attachment copy
- fixes: https://github.com/wekan/wekan/issues/4485#issue-1211353265
2022-04-30 21:04:37 +02:00
Martin Filser 58d760a615 FileStoreStrategy, moveToStorage, wrong variable in error handling 2022-04-30 21:04:21 +02:00
viehlieb b97c51abde Revert "Updated ChangeLog."
This reverts commit 75525c2215.
2022-04-29 10:13:59 +02:00
viehlieb 8c8560cfc2 add i18n to gitignote rm i18n from git tracking for faster development 2022-04-29 09:41:14 +02:00
Lauri Ojansivu 567be456be Upgraded to Meteor 2.7.2-rc.0 .
Thanks to Meteor developers !

Related https://github.com/meteor/meteor/pull/11999#issuecomment-1112461873
2022-04-28 20:22:16 +03:00
Lauri Ojansivu 454fd6e95a Updated dependencies. 2022-04-28 18:56:46 +03:00
Lauri Ojansivu 8c6dd6a4a9 v6.21 2022-04-28 17:43:05 +03:00
Lauri Ojansivu b5a8260086 Updated ChangeLog. 2022-04-28 17:36:12 +03:00
Lauri Ojansivu 7dd5fa4ac4 Try to fix Snap. 2022-04-28 17:32:58 +03:00
Lauri Ojansivu 75525c2215 Updated ChangeLog. 2022-04-27 20:26:39 +03:00
Lauri Ojansivu 31449167be Merge pull request #4490 from TheExo/darktheme-improvements
this should fix everything talked about in #4472
2022-04-27 20:24:06 +03:00
Martin Filser 441b3e9c0a Change date format to L (include 0 on short days/month) 2022-04-27 17:24:42 +02:00
Martin Filser 2e5ec0308f Adjust all other moment imports to moment-with-locales 2022-04-27 17:24:42 +02:00
Martin Filser d1714abc6a Card Details dates in user language format 2022-04-27 17:24:42 +02:00
Martin Filser 3f250a17fd .devcontainer changed for Meteor 2.7.1 build 2022-04-27 17:18:53 +02:00
Martin Filser 3fad014e91 Multi-File Storage code was missing after merge
- Merge commit was: 68e8155805
- Partially resolved by this commit: a34cbf95e8
2022-04-27 17:18:53 +02:00
derexo 86115887af this should fix everything talked about in #4472 2022-04-27 10:04:29 +02:00
Lauri Ojansivu 7778dcc3fc Updated translations. 2022-04-27 02:27:18 +03:00
Lauri Ojansivu 65434876eb v6.20 2022-04-25 11:41:01 +03:00
Lauri Ojansivu 4c146141f9 Updated ChangeLog. 2022-04-25 11:26:32 +03:00
Lauri Ojansivu 1705b46f39 Merge pull request #4486 from mfilser/FileStoreStrategyFactory-attachments_sometimes_doesnt_load
FileStoreStrategyFactory, added logic to determine the right file storage strategy to use
2022-04-25 11:25:07 +03:00
Lauri Ojansivu 3aca5bc3e4 Updated ChangeLog. 2022-04-25 11:24:17 +03:00
Lauri Ojansivu 79a866e238 Fix Dockerfile: Ubuntu 22.04 causes Python trouble.
Thanks to bronger !

Fixes #4488
2022-04-25 11:20:11 +03:00
Martin Filser efc19ea88c FileStoreStrategyFactory, added logic to determine the right file storage strategy to use 2022-04-23 09:58:59 +02:00
Lauri Ojansivu 79051e5779 v6.19 2022-04-22 18:59:54 +03:00
Lauri Ojansivu 456fa270cf Updated translations. 2022-04-22 18:42:42 +03:00
Lauri Ojansivu d271678ef4 Fix syntax in myCards.jade.
Thanks to xet7 !
2022-04-22 18:05:48 +03:00
Lauri Ojansivu a9390a9897 Updated translations. 2022-04-22 17:36:06 +03:00
Lauri Ojansivu a196a5ed63 Updated MongoDB 5 rawCollection deprecated update to updateMany (or updateOne).
Thanks to xet7 !
2022-04-22 16:32:28 +03:00
Lauri Ojansivu 3fb709ed70 Added --trace-warnings to meteor dev.
Thanks to xet7 !
2022-04-22 16:23:14 +03:00
Lauri Ojansivu 50ce0ce442 Added --trace-warnings to start-wekan.sh.
Thanks to xet7 !
2022-04-22 16:18:48 +03:00
Lauri Ojansivu fbb4f0c933 Updated dependencies. 2022-04-22 02:06:58 +03:00
Lauri Ojansivu a34cbf95e8 Add missing code. 2022-04-22 01:19:43 +03:00
Lauri Ojansivu 68e8155805 Multi-File Storage.
Thanks to mfilser !

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

Merge branch 'master' into upgrade-meteor
2022-04-22 00:55:42 +03:00
Lauri Ojansivu 9f723b5863 Updated translations. 2022-04-22 00:28:27 +03:00
Lauri Ojansivu e726b9be7d Updated translations. 2022-04-22 00:23:19 +03:00
Lauri Ojansivu 0e6b31b636 Updated translations. 2022-04-21 23:59:56 +03:00
Lauri Ojansivu 7607090bdf Updated translations. 2022-04-21 23:16:58 +03:00
Lauri Ojansivu 5a3bc74daf Updated translations. 2022-04-21 21:50:26 +03:00
Lauri Ojansivu d8702b2ca1 Updated translations. 2022-04-21 21:47:06 +03:00
Lauri Ojansivu 2dfbb48114 Updated translations. 2022-04-21 21:35:11 +03:00
Lauri Ojansivu 5a3778fd5a Updated translations. 2022-04-21 21:33:51 +03:00
Lauri Ojansivu 43d6900ecb Updated translations. 2022-04-21 21:30:31 +03:00
Lauri Ojansivu 2193c86766 Updated translations. 2022-04-21 21:26:35 +03:00
Lauri Ojansivu 8d395e6cb1 Updated translations. 2022-04-21 20:50:18 +03:00
Lauri Ojansivu 6b2209c8e1 Updated translations. 2022-04-21 19:53:08 +03:00
Denis Perov 8f43b74bbc Fix language auto-detection 2022-04-21 19:41:56 +03:00
Denis Perov 566527dfad Fix broken useraccounts UI i18n 2022-04-21 19:27:59 +03:00
Denis Perov c858e0b796 Rename isoCode to tag (cause they are IETF tags actually) 2022-04-21 19:14:30 +03:00
Denis Perov f40b0d495d Add missing language names 2022-04-21 19:11:16 +03:00
Lauri Ojansivu 28317c7cf3 Translated to 105 languages. 2022-04-21 17:34:40 +03:00
Lauri Ojansivu 3bea047499 Updated translations. 2022-04-21 17:32:58 +03:00
Lauri Ojansivu 958d94e1d3 Updated translations. 2022-04-21 01:13:53 +03:00
Lauri Ojansivu 64afe811a7 Updated ChangeLog. 2022-04-21 00:58:25 +03:00
Lauri Ojansivu e91e4b5329 Merge pull request #4484 from mfilser/multi_file_storage
Multi file storage
2022-04-21 00:28:06 +03:00
Martin Filser b7ab79efef Admin Reports, more detailed column header + add boardId and cardId to table 2022-04-20 20:50:42 +02:00
Martin Filser f1a52c99c5 Admin Panel, add seperator line at attachments 2022-04-20 20:50:42 +02:00
Martin Filser d1efd1f493 Admin Panel, use full screen height 2022-04-20 20:50:41 +02:00
Martin Filser bd8eda2351 Admin Panel, right table scrollbar is now visible 2022-04-20 20:50:41 +02:00
Martin Filser 5e567365f3 .gitignore, ignore all vim swap files 2022-04-20 20:50:41 +02:00
Martin Filser a167d8ff3f table width 100% isn't necessary at Admin Panel "People"
- also it was set global to Wekan, not really a good practise ...
2022-04-20 20:50:41 +02:00
Martin Filser 9367ef8c41 Admin Panel, use flex "gap" instead of "margin" and "padding" 2022-04-20 20:50:41 +02:00
Martin Filser 5c890e4cc3 Flex-Box Layout of "Move Attachment" buttons 2022-04-20 20:50:41 +02:00
Martin Filser c6212c7d62 Initial attachment upload set's now "original" in filename too
- later if the file is moving to filesystem, it has "original" in the filename too.
2022-04-20 20:50:41 +02:00
Martin Filser b8d14abe0c Attachment Management at Admin Console 2022-04-20 20:50:41 +02:00
Martin Filser a064e03fc7 Store file on filesystem renew's the storage path 2022-04-20 20:50:41 +02:00
Martin Filser 9d587e76ab Remove filesCollection from FileStoreStrategy classes 2022-04-20 20:50:41 +02:00
Martin Filser e75f423edd Removed "Orphaned Files" from Admin-Reports
- not necessary with Meteor-Files
2022-04-20 20:50:41 +02:00
Martin Filser dace63d4dc Files Report works now with Meteor-Files (needed migration to new code) 2022-04-20 20:50:41 +02:00
Martin Filser cfb88baa7f removed createInterceptDownload file and use existing code for http download 2022-04-20 20:50:41 +02:00
Martin Filser 72b8672e62 Move storage names for filesystem and gridfs to constants 2022-04-20 20:50:41 +02:00
Martin Filser 99c37bd521 removed createOnAfterRemove file and use existing code for remove file from GridFS 2022-04-20 20:50:41 +02:00
Martin Filser 9ef45a75af removed createOnAfterUpload file and use existing code for initial file move to GridFS 2022-04-20 20:50:41 +02:00
Martin Filser fe018225b4 Attachment property "meta.source" had wrong value 2022-04-20 20:50:41 +02:00
Martin Filser 927f155078 WRITABLE_PATH is mandatory, so simplify the code logic 2022-04-20 20:50:41 +02:00
Martin Filser d63f1b740c Avatars are using the FileStoreStrategyFactory too 2022-04-20 20:50:41 +02:00
Martin Filser 883beba9ed Split AttachmentStoreStrategy classes to new FileStoreStrategy classes 2022-04-20 20:50:41 +02:00
Martin Filser dd0d5dbe9f Output error if bucket.delete fails 2022-04-20 20:50:41 +02:00
Martin Filser 0fcfd8e168 Attachment filename contains now the filename of the uploaded file 2022-04-20 20:50:41 +02:00
Martin Filser 44fd652b05 Move Attachment to other storages now possible 2022-04-20 20:50:41 +02:00
Martin Filser 536fb00d61 Attachment Details Action Menu, more space to previous item
- better clickable, especially on mobile devices
2022-04-20 20:48:32 +02:00
Martin Filser 8c7ed1855e Create Attachment Popup Menu 2022-04-20 20:48:32 +02:00
Martin Filser 54cf71ce1b Activity at attachment deleting had an error (name is undefined)
- introduced by commit: e702f17c7b
2022-04-20 20:47:01 +02:00
Martin Filser 0e768ff363 Attachment Migration had wrong typed source 2022-04-20 20:47:01 +02:00
Denis Perov 42a8f04058 Revery migrations regression appeared after the merge 2022-04-19 15:41:44 +03:00
Denis Perov 25f8dd5141 Remove outdated gridfs-stream NPM dependency 2022-04-19 15:28:15 +03:00
Denis Perov 2a802ec986 Make testing NPM dependencies appear in development mode only 2022-04-19 15:26:59 +03:00
Denis Perov 41837aac74 Remove outdated moment Meteor dependencies 2022-04-19 15:17:50 +03:00
Lauri Ojansivu 74fc42a08c Upgraded to Meteor 2.7.2-beta.0 .
Thanks to denihs !

Related https://github.com/meteor/meteor/pull/11999,
related https://github.com/wekan/wekan/pull/4482
2022-04-18 23:28:33 +03:00
Lauri Ojansivu c79b766b58 Merge branch 'master' into upgrade-meteor 2022-04-18 22:47:58 +03:00
Lauri Ojansivu 42b05b263d Updated translations. 2022-04-18 22:46:54 +03:00
Lauri Ojansivu d30e52d336 Updated ChangeLog. 2022-04-18 22:39:53 +03:00
Lauri Ojansivu 59531f785a Updated translations. 2022-04-18 22:29:27 +03:00
Lauri Ojansivu c0979fffbd Updated moment. 2022-04-18 21:27:44 +03:00
Lauri Ojansivu 0c3ca14699 Merge branch 'upgrade-meteor-2.6' of https://github.com/majus/wekan into upgrade-meteor 2022-04-18 21:25:47 +03:00
Denis Perov 6b7cbd9d81 Add VSCode debugging configuration for an automated testing 2022-04-18 18:18:50 +03:00
Denis Perov 44dbca5e05 Fix automated tests 2022-04-18 18:18:50 +03:00
Denis Perov 855be80572 Add missing simple:rest-accounts-password dependency 2022-04-18 18:18:50 +03:00
Denis Perov 1b83399236 Fix errant escape-string-regexp importing 2022-04-18 18:18:28 +03:00
Denis Perov 2b579372c3 Disable Organisation name i18n 2022-04-18 18:18:16 +03:00
Denis Perov a4732bacce Support WRITEABLE_PATH envrionemnt variable 2022-04-18 18:18:15 +03:00
David Arnold 1cddd607ec Revert "use tempdirs"
This reverts commit a7d51cf21b663d87f83e2585502ed9323b3d3788.
2022-04-18 18:18:01 +03:00
David Arnold 80d0ec0898 use tempdirs 2022-04-18 18:18:01 +03:00
David Arnold 06b812b590 fixup: migration 2022-04-18 18:18:01 +03:00
David Arnold 2288c8ac15 hack: Nasty hack for covercard auth 2022-04-18 18:18:01 +03:00
David Arnold 2265d726ae Revert "Adios cfs:* | Hello ostrio:file"
This reverts commit 093819e33cc513db6f06aa30d5e37e3fc758d6e8.
2022-04-18 18:18:00 +03:00
David Arnold 09553b7672 migration: extract files from old storage and load into new storage 2022-04-18 18:17:21 +03:00
David Arnold 3d6085157e Fix: access denied on second load 2022-04-18 18:17:21 +03:00
David Arnold efcca9739a fix: user avatar images & upload 2022-04-18 18:17:21 +03:00
David Arnold 1875551a93 Ref: pass through image size error message (correctly) 2022-04-18 18:17:21 +03:00
David Arnold 72abf50b36 Fix: image download dont open -> download 2022-04-18 18:17:21 +03:00
David Arnold 31d7fbe5fb Rem: upload spinner.
attachmentGalery would need refactoring to an individual attachment
component with component state that could be set on the onUpdated event.

I'm not capable of doing this within reasonable time.
2022-04-18 18:17:21 +03:00
David Arnold 71b82e0049 Rem: unused previewAttachedImagePopup 2022-04-18 18:17:21 +03:00
David Arnold f847439e10 fix: thumbnail images now wrok 2022-04-18 18:17:21 +03:00
David Arnold 94bf192f12 fixup! fix: cover image - works now 2022-04-18 18:17:21 +03:00
David Arnold bb780976e9 fixup! Hello gridfs lib + fsHooks for mongodb bucket storage 2022-04-18 18:17:21 +03:00
David Arnold 0d97b1314d fix: activity download link 2022-04-18 18:17:21 +03:00
David Arnold e4e8da4718 fix: cover image - works now 2022-04-18 18:17:20 +03:00
David Arnold 5dcf7f55fd fixup! Ref: original & and use fileObj.meta 2022-04-18 18:17:20 +03:00
David Arnold 0f272b1e66 fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-04-18 18:17:20 +03:00
David Arnold b05fa636ea fixup! Ref: original & and use fileObj.meta 2022-04-18 18:17:20 +03:00
David Arnold 74deeeaaa6 Revert "Do those imports!"
This reverts commit 64dcc70bd271d827c1639f8c847543a6d2ede713.
2022-04-18 18:17:20 +03:00
David Arnold dcac00696e fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-04-18 18:17:01 +03:00
David Arnold 48cd554229 fixup! Ref: Avatars to use modern gridfs 2022-04-18 18:17:01 +03:00
David Arnold 4929653367 fixup! Ref: original & and use fileObj.meta 2022-04-18 18:17:01 +03:00
David Arnold 4158334c2d fixup! Ref: Avatars to use modern gridfs 2022-04-18 18:17:01 +03:00
David Arnold 5e131f4c76 fixup! Ref: original & and use fileObj.meta 2022-04-18 18:17:01 +03:00
David Arnold 50990b6e6a fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-04-18 18:17:01 +03:00
David Arnold 2cddcd60a1 Do those imports! 2022-04-18 18:17:00 +03:00
David Arnold c29393dd7e fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-04-18 18:16:24 +03:00
David Arnold 6f995a5bdd fixup! Ref: Avatars to use modern gridfs 2022-04-18 18:16:24 +03:00
David Arnold 21a9ab72c2 fixup! Mig: add migration cfs:* -> ostrio:files 2022-04-18 18:16:24 +03:00
David Arnold 3bfe5c284f fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-04-18 18:16:24 +03:00
David Arnold ef712a700e fixup! Ref: Avatars to use modern gridfs 2022-04-18 18:16:24 +03:00
David Arnold fa9ed55d7d fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-04-18 18:16:24 +03:00
David Arnold 075a9016d4 fixup! Ref: Avatars to use modern gridfs 2022-04-18 18:16:24 +03:00
David Arnold 2d53cd13b6 fixup! rm fix-download-unicode 2022-04-18 18:16:24 +03:00
David Arnold 47397e5be3 Fixup(ostrio-files): wrong export 2022-04-18 18:16:24 +03:00
David Arnold 5af78c6990 Mig: add migration cfs:* -> ostrio:files 2022-04-18 18:16:23 +03:00
David Arnold 97356603aa Ref: original & and use fileObj.meta
fileObj.meta is part of the ostrio:files API and be passed to the
constructor. This is less hacky than trying tu update a persistet object
after the fact.
2022-04-18 18:16:23 +03:00
David Arnold 6a9433593b Ref: Attachment upload handlers 2022-04-18 18:16:23 +03:00
David Arnold 3813554918 Ref: Avatar upload handler 2022-04-18 18:16:23 +03:00
David Arnold 76ffdd70d0 Ref: attachment image paste 2022-04-18 18:16:23 +03:00
David Arnold f8d927c61a Ref: trello & wekan importers 2022-04-18 18:16:23 +03:00
David Arnold ccbc53cb9b Ref: Attachment upload handlers 2022-04-18 18:16:23 +03:00
David Arnold b49aaf8e68 Ref: Avatar upload handler 2022-04-18 18:16:23 +03:00
David Arnold 3f8a3f26d6 rm ATTACHMENTS_STORE_PATH 2022-04-18 18:16:23 +03:00
David Arnold c1dba52720 Ref: Attachments to use modern gridfs (rm localstore) 2022-04-18 18:16:22 +03:00
David Arnold 1ae5bc482b Ref: Avatars to use modern gridfs 2022-04-18 18:16:11 +03:00
David Arnold 96f8b5c9f4 Hello gridfs lib + fsHooks for mongodb bucket storage 2022-04-18 18:15:42 +03:00
David Arnold 85480a6cae rm fix-download-unicode 2022-04-18 18:15:42 +03:00
Denis Perov 6e1bf061f8 Adios cfs:* | Hello ostrio:file 2022-04-18 18:15:40 +03:00
Denis Perov 4277d89514 Fix various bugs 2022-04-18 18:09:46 +03:00
Lauri Ojansivu 3071152978 Updated dependencies. 2022-04-18 18:09:46 +03:00
Lauri Ojansivu 010aed98a8 Upgraded to Meteor v2.6
Thanks to Meteor developers!
2022-04-18 18:09:46 +03:00
Lauri Ojansivu 9294eac642 Upgraded to Meteor v2.5.6 2022-04-18 18:09:46 +03:00
Lauri Ojansivu 393be58a94 Updated dependencies. 2022-04-18 18:09:46 +03:00
Martin Filser c8656afc1e .devcontainer, user MongoDB 5.0 2022-04-18 18:09:46 +03:00
Martin Filser 6d0f0c3606 meteor-autosize, on_use replaced with onUse, add_files replaced with addFiles 2022-04-18 18:09:46 +03:00
Martin Filser 815e2db0ae .devcontainer, use python3 instead of python
- see also: c3a27f6d17
2022-04-18 18:09:45 +03:00
Martin Filser 3eb72c6c48 .devcontainer, update image to ubuntu:rolling
- see also: 8446640060
2022-04-18 18:09:45 +03:00
Lauri Ojansivu e3daa37c5a Upgraded to Meteor 2.5.3 2022-04-18 18:09:44 +03:00
Lauri Ojansivu 4e72dadc6f Updated dependencies. 2022-04-18 18:09:20 +03:00
Lauri Ojansivu 3c39953b42 Commented out extra index because of IndexOptionsConflict.
Thanks to xet7 !
2022-04-18 18:08:15 +03:00
Lauri Ojansivu c926475eb1 Fixed _ensureIndex to createIndex for MongoDB 5. Updated to latest Meteor beta. 2022-04-18 18:08:12 +03:00
Lauri Ojansivu 4bbe63365c Fix typos. 2022-04-18 18:06:53 +03:00
Lauri Ojansivu c696c8eed0 Updated dependencies. 2022-04-18 18:06:52 +03:00
Jan Dvorak 2b9f555f31 Update Blaze components 2022-04-18 18:02:43 +03:00
Jan Dvorak eb745106d8 Replace Picker for community packages version & small 2022-04-18 18:02:41 +03:00
Denis Perov 4ba2a23c72 Cover custom TAPi18n implementation with tests 2022-04-18 18:02:30 +03:00
Jan Küster 60af7766bf Switch tap:i18n to custom TAPi18n implementation 2022-04-18 18:02:14 +03:00
Lauri Ojansivu ae700d64f7 Updated translations. 2022-04-18 17:12:43 +03:00
Lauri Ojansivu 95b39f6d47 Merge pull request #4479 from helioguardabaxo/master
Added Table View to My Cards
2022-04-18 14:53:10 +03:00
helioguardabaxo 147a3d99cb Added Table View to My Cards 2022-04-17 22:23:29 -03:00
Lauri Ojansivu 19c54720c6 Updated ChangeLog. 2022-04-16 03:30:51 +03:00
Lauri Ojansivu 77085daaa8 Fix Board Settings / All Boards Settings options has some bug.
Thanks to helioguardabaxo !

Fixes #4478
2022-04-16 03:27:33 +03:00
Lauri Ojansivu 2b1675847c All Boards settings improvements. 2022-04-16 01:28:19 +03:00
Lauri Ojansivu 3ae777f2c9 Updated translations. 2022-04-16 00:32:07 +03:00
Lauri Ojansivu 89c521c20e Updated translations. 2022-04-16 00:28:30 +03:00
Lauri Ojansivu be8b12457c Updated ChangeLog. 2022-04-16 00:18:38 +03:00
Lauri Ojansivu 95a4b4fd91 Added to Board Settings: Minicard Settings and All Boards Settings improvements.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4477
2022-04-16 00:15:15 +03:00
Lauri Ojansivu 8dcdfce0ec Updated translations. 2022-04-16 00:14:39 +03:00
Lauri Ojansivu 6d31f493bd Updated translations. 2022-04-16 00:10:17 +03:00
Lauri Ojansivu fb48c746ae Updated translations. 2022-04-16 00:02:53 +03:00
Lauri Ojansivu e018dfe541 Updated ChangeLog. 2022-04-15 22:00:46 +03:00
Lauri Ojansivu 023deb6c95 Added All Boards Settings popup title.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4477
2022-04-15 21:58:34 +03:00
Lauri Ojansivu 5654c411fe Updated translations. 2022-04-15 21:50:11 +03:00
Lauri Ojansivu ce55d84fd8 Updated All Boards Settings icon.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/4477
2022-04-15 21:46:22 +03:00
Lauri Ojansivu cb749ff614 Updated translations. 2022-04-15 21:45:00 +03:00
Lauri Ojansivu 3c9a4f6ffa Updated ChangeLog. 2022-04-15 21:28:40 +03:00
Lauri Ojansivu 45642911a9 Added to All Boards MiniScreen: members list and board card count per list.
Fixes https://github.com/wekan/wekan/pull/4477

Thanks to xet7 !
2022-04-15 21:24:36 +03:00
Lauri Ojansivu 36305f64c5 Updated ChangeLog. 2022-04-15 21:03:15 +03:00
Lauri Ojansivu 4677081725 Updated ChangeLog. 2022-04-15 20:11:49 +03:00
Lauri Ojansivu 359692a564 Updated dependencies.
Thanks to developers of dependencies !
2022-04-15 20:10:34 +03:00
Lauri Ojansivu 555d42d05e Updated translations. 2022-04-15 20:09:51 +03:00
Lauri Ojansivu e7fa9598e3 Updated translations. 2022-04-15 20:03:06 +03:00
Lauri Ojansivu 9ed1105e7e Merge pull request #4477 from helioguardabaxo/master
Added members list and board card count per list on My Boards
2022-04-15 19:52:29 +03:00
helioguardabaxo ab077e7eb9 Fix strings to be translate 2022-04-15 13:38:24 -03:00
helioguardabaxo 5f2820d7e0 Added members list and board card count per list on My Boards 2022-04-15 13:19:37 -03:00
Lauri Ojansivu b1ea3fef00 Updated ChangeLog. 2022-04-15 18:57:14 +03:00
Lauri Ojansivu 1360517af8 Updated meteor-spk.
Thanks to meteor-spk developers !
2022-04-15 18:55:04 +03:00
Lauri Ojansivu 43d324d138 Updated translations. 2022-04-13 20:14:07 +03:00
Lauri Ojansivu b81dcf1dc8 Updated ChangeLog. 2022-04-13 20:07:43 +03:00
Lauri Ojansivu f87cb10d09 Merge pull request #4471 from wekan/dependabot/npm_and_yarn/moment-2.29.2
Bump moment from 2.29.1 to 2.29.2
2022-04-12 12:00:10 +03:00
dependabot[bot] 626a7f83fc Bump moment from 2.29.1 to 2.29.2
Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.2.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.1...2.29.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-09 09:53:11 +00:00
Lauri Ojansivu a825b2fe81 v6.18 2022-04-08 18:43:08 +03:00
Lauri Ojansivu 12448ab473 Removed browser contect policy so that attachments would be visible. Part 2.
Thanks to xet7 !

Fixes #4468
2022-04-08 18:37:51 +03:00
Lauri Ojansivu f824eab198 Updated ChangeLog. 2022-04-08 18:26:02 +03:00
Lauri Ojansivu 4057bb6372 Show logo on tab.
Thanks to Meeques, helioguardabaxo and xet7 !

Fixes #4381
2022-04-08 18:23:05 +03:00
Lauri Ojansivu 15e3c72430 Updated ChangeLog. 2022-04-08 17:54:48 +03:00
Lauri Ojansivu 8a39a52d5d Removed browser contect policy so that attachments would be visible.
Thanks to xet7 !

Fixes #4468
2022-04-08 17:52:27 +03:00
Lauri Ojansivu 939976ce88 Updated ChangeLog. 2022-04-07 21:32:21 +03:00
Lauri Ojansivu 8b2cf30754 Merge pull request #4466 from TheExo/dark-theme-stylefix
deployed a stylefix for #4465 (this time)
2022-04-07 21:30:21 +03:00
Lauri Ojansivu 5bcde1e9a7 Updated ChangeLog. 2022-04-07 21:29:25 +03:00
Lauri Ojansivu 534559c5a9 Merge pull request #4464 from TheExo/master
created a new theme called "exodark"
2022-04-07 21:24:28 +03:00
derexo cb99b66023 deployed a stylefix for #4465 (this time) 2022-04-07 12:21:36 +02:00
TheExo 12c9317e15 Merge branch 'wekan:master' into master 2022-04-07 12:02:46 +02:00
derexo 7d5ed14419 Revert "deployed a stylefix for #4465"
This reverts commit dfbad25986.
2022-04-07 11:58:44 +02:00
derexo dfbad25986 deployed a stylefix for #4465 2022-04-07 11:53:39 +02:00
derexo 00e21ae88e finalized the theme exodark 2022-04-07 08:17:05 +02:00
derexo dbf034cd87 tweaks for a new theme 2022-04-06 22:31:25 +02:00
derexo 031d6a22df added a general style to make the all-boards button a bit more visible 2022-04-06 19:11:59 +02:00
Lauri Ojansivu 37fdde1835 v6.17 2022-04-06 19:37:49 +03:00
Lauri Ojansivu f613a5875f Updated dependencies. 2022-04-06 19:33:34 +03:00
Lauri Ojansivu 6dc858d790 v6.16 2022-04-06 19:15:51 +03:00
Lauri Ojansivu 4ca7b0dad7 Try to fix Snap WRITABLE_FILES.
Thanks to xet7 !
2022-04-06 19:09:25 +03:00
Lauri Ojansivu 5b31e2f2fb Updated ChangeLog. 2022-04-06 18:49:55 +03:00
Lauri Ojansivu 49a996624f Comment out Trello attachment import until it's implemented with API key.
Thanks to xet7 !

Related #4418
2022-04-06 18:47:27 +03:00
Lauri Ojansivu b7aaff5313 Updated translations. 2022-04-06 18:21:49 +03:00
Lauri Ojansivu 0e3d8e8607 Updated ChangeLog. 2022-04-06 17:57:53 +03:00
Lauri Ojansivu 5eca3de00f Try to fix Trello import Attachment and links not defined.
Thanks to akhudushin, hatl, 2447254731 and xet7 !

Fixes #4418
2022-04-06 17:54:20 +03:00
Lauri Ojansivu e7a11c5733 Try to fix Duplicate Board.
Thanks to xet7 !

Fixes #4459
2022-04-06 17:52:11 +03:00
Lauri Ojansivu 5744aac7bf Updated ChangeLog. 2022-04-06 17:30:05 +03:00
Lauri Ojansivu 0d9c37b006 Fix Can't add attachments because of Content-Security-Policy.
Thanks to Ben0it-T and xet7 !

Fixes #4461
2022-04-06 17:26:39 +03:00
Lauri Ojansivu 7eb04897ab Updated translations. 2022-04-06 15:01:06 +03:00
Lauri Ojansivu 7c637e71f0 Updated translations. 2022-04-06 14:32:57 +03:00
Lauri Ojansivu f8d86923b4 Updated ChangeLog. 2022-04-06 14:32:37 +03:00
Lauri Ojansivu 6b6fde834c Merge pull request #4455 from ocdtrekkie/remove-extra-changelogs
Remove incomplete translated changelogs
2022-04-06 14:31:15 +03:00
Lauri Ojansivu bc61d1c205 Updated ChangeLog. 2022-04-06 14:30:02 +03:00
Lauri Ojansivu 66b733a11e Merge pull request #4457 from helioguardabaxo/master
Added HTML tags escape to description on minicard.
2022-04-06 14:25:00 +03:00
helioguardabaxo 536021107e Added HTML tags escape to description on minicard. 2022-04-06 07:25:34 -03:00
Jacob Weisz a96d18454a Remove extra changelogs 2022-04-06 00:36:25 -05:00
Lauri Ojansivu 0c5f9aa167 v6.15 2022-04-06 01:17:25 +03:00
Lauri Ojansivu 30dbab2577 v6.15 2022-04-06 01:15:12 +03:00
Lauri Ojansivu 8c68d631d4 Updated translations. 2022-04-06 01:11:50 +03:00
Lauri Ojansivu c6cb6f270e Updated translations. 2022-04-06 00:42:00 +03:00
Lauri Ojansivu 4534177f47 Merge pull request #4454 from helioguardabaxo/master
Show description text on minicard
2022-04-05 23:14:56 +03:00
helioguardabaxo 2576127b10 Complemented previous commit 2022-04-05 17:06:26 -03:00
helioguardabaxo db4421c7b8 Show description on minicard 2022-04-05 17:00:39 -03:00
Lauri Ojansivu 51094a3c46 Updated translations. 2022-04-05 21:03:15 +03:00
Lauri Ojansivu f2378fcff6 Updated ChangeLog. 2022-04-05 03:54:34 +03:00
Lauri Ojansivu c18f531915 Added missing characters to Subtasks jade template.
Thanks to xet7 !
2022-04-05 03:52:30 +03:00
Lauri Ojansivu 1a117d1941 Fix LDAP authentication doesn't support multiple emails in LDAP accounts.
Thanks to buzztiaan and NURDspace !

Fixes #4452,
related https://github.com/wekan/wekan/commit/3394f54fb47ce2830dd72f67fba4f281246c156f#commitcomment-70467719
2022-04-05 02:40:06 +03:00
Lauri Ojansivu bf449c5864 Updated translations. 2022-04-05 02:07:37 +03:00
Lauri Ojansivu 7b428fa8cb Updated ChangeLog. 2022-04-05 02:02:45 +03:00
Lauri Ojansivu 325899f7f5 Updated ChangeLog. 2022-04-05 01:59:30 +03:00
Lauri Ojansivu 3394f54fb4 Fixed LDAP authentication doesn't support mutliple emails in LDAP accounts.
Thanks to buzztiaan !

Fixes #4452
2022-04-05 01:56:40 +03:00
Lauri Ojansivu a91e274785 Merge branch 'master' of github.com:wekan/wekan 2022-04-05 00:25:59 +03:00
Lauri Ojansivu 4f970eee26 Updated ChangeLog. 2022-04-05 00:25:51 +03:00
Lauri Ojansivu 08f188c45f Merge pull request #4450 from danielkaiser/fix-oidc-no-groups-in-userinfo
Fix oidc login when no group data is present
2022-04-05 00:24:33 +03:00
Lauri Ojansivu 9df99435a0 Updated ChangeLog. 2022-04-05 00:20:03 +03:00
Lauri Ojansivu 266af19716 Merge pull request #4446 from helioguardabaxo/master
UI improvements on maximized card header
2022-04-05 00:17:28 +03:00
helioguardabaxo 470645193e Removed coments 2022-04-04 15:43:42 -03:00
helioguardabaxo 128a7ee777 Convert subtask dialogs from modal box to popup. 2022-04-04 15:38:31 -03:00
Daniel Kaiser ada770c9e6 Update oidc_server.js 2022-04-04 14:22:47 +02:00
helioguardabaxo a76eb9da03 Changed maximized card header to use width 100%. Added border to split left and right sides. 2022-04-03 14:32:59 -03:00
Lauri Ojansivu 2a362a2e85 Updated ChangeLog. 2022-04-03 14:12:35 +03:00
Lauri Ojansivu 35837a6b24 Merge pull request #4444 from mfilser/card_details_list_dropdown_filled_opened_from_global_search
Card Details List-Dropdown is now filled too if the card is opened from global search
2022-04-03 14:09:18 +03:00
Martin Filser c99d069b0d Card Details List-Dropdown is now filled too if the card is opened from global search 2022-04-03 11:53:07 +02:00
Lauri Ojansivu 10b8612ed9 v6.14 2022-04-03 00:21:39 +03:00
Lauri Ojansivu 0ecaf58515 Updated ChangeLog. 2022-04-03 00:03:21 +03:00
Lauri Ojansivu 25dc378c46 Snap: Try to delete incomplete uploads when starting.
Thanks to xet7 !

Related: #1298
2022-04-03 00:01:12 +03:00
Lauri Ojansivu c8f4fe3da5 Updated ChangeLog. 2022-04-02 22:50:50 +03:00
Lauri Ojansivu 1e42aebd70 Fixed torodb. Part 2.
Thanks to xet7 !
2022-04-02 22:49:10 +03:00
Lauri Ojansivu 266d5dda15 Updated ChangeLog. 2022-04-02 22:16:08 +03:00
Lauri Ojansivu 74d468ea79 Try to fix Snap WRITABLE_PATH.
Thanks to xet7 !

Related #4439
2022-04-02 22:12:01 +03:00
Lauri Ojansivu 14aeef8d96 Updated ChangeLog. 2022-04-02 21:58:01 +03:00
Lauri Ojansivu 10555e1514 Updated WRITABLE_PATH at start-wekan.sh and start-wekan.bat .
Thanks to xet7 !
2022-04-02 21:56:32 +03:00
Lauri Ojansivu 437b139490 Updated ChangeLog. 2022-04-02 21:54:06 +03:00
Lauri Ojansivu 9238b6620c Fixed docker-compose.yml WRITABLE_PATH.
Thanks to xet7 !
2022-04-02 21:51:39 +03:00
Lauri Ojansivu d90ef2ebd8 Updated ChangeLog. 2022-04-02 19:29:27 +03:00
Lauri Ojansivu 5d3d5e4b2d Fix list color too close with moderndark theme on mobile view.
Thanks to gerald41, Meeques, Go-rom, mfilser, jghaanstra and xet7 !

Fixes #4436,
fixes #4254
2022-04-02 19:28:14 +03:00
Lauri Ojansivu c3faa99491 Updated ChangeLog. 2022-04-02 17:30:01 +03:00
Lauri Ojansivu 9ab2d5fab0 Added WRITABLE_PATH to rebuild-wekan.sh meteor commands.
Thanks to xet7 !
2022-04-02 17:27:52 +03:00
Lauri Ojansivu c359733270 Updated ChangeLog. 2022-04-02 17:00:48 +03:00
Lauri Ojansivu 747a3b17d5 Not ZFS, it uses many gigabytes of RAM. 2022-04-02 16:59:35 +03:00
Lauri Ojansivu b9670a50eb Updated ChangeLog. 2022-04-02 16:40:17 +03:00
Lauri Ojansivu 02e977f512 Try to fix Attachments.insert is not a function.
Thanks to ChrisMagnuson and xet7 !

Fixes #4432
2022-04-02 16:38:15 +03:00
Lauri Ojansivu dd89afff4d Updated ChangeLog. 2022-04-02 16:37:17 +03:00
Lauri Ojansivu 2b655f4b67 Merge pull request #4442 from mfilser/check_environment-WRITABLE_PATH-better_layout
Better error message layout if Wekan can not start
2022-04-02 13:03:03 +03:00
Martin Filser f8b2237274 Better error message layout if Wekan can not start 2022-04-02 11:53:24 +02:00
Lauri Ojansivu 84d94079cc Updated ChangeLog. 2022-04-02 12:22:46 +03:00
Lauri Ojansivu edb4db30bb Some torodb fixes. In Progress.
Thanks to xet7 !
2022-04-02 12:20:59 +03:00
Lauri Ojansivu 9509269622 Updated ChangeLog. 2022-04-02 12:17:43 +03:00
Lauri Ojansivu ffba683c84 Merge pull request #4440 from mfilser/check_environment-WRITABLE_PATH
WRITABLE_PATH must be writable, otherwise abort starting Wekan
2022-04-02 12:00:03 +03:00
Martin Filser 0426e09cd7 WRITABLE_PATH must be writable, otherwise abort starting Wekan 2022-04-02 00:24:53 +02:00
Lauri Ojansivu 5fc5500845 v6.13 2022-04-01 22:08:31 +03:00
Lauri Ojansivu 971391eae9 Updated dependencies.
Thanks to developers of dependencies !
2022-04-01 22:03:21 +03:00
Lauri Ojansivu a19e1b3400 Updated translations. 2022-04-01 21:24:38 +03:00
Lauri Ojansivu 9be6312ce1 Updated ChangeLog. 2022-03-30 22:41:55 +03:00
Lauri Ojansivu c397b5eda8 Merge pull request #4435 from wekan/dependabot/npm_and_yarn/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6
2022-03-30 22:40:25 +03:00
Lauri Ojansivu 3251c8f419 Updated ChangeLog. 2022-03-30 20:04:51 +03:00
Lauri Ojansivu f2f3b76eda Updated URL to meteor-spk. 2022-03-30 20:03:48 +03:00
dependabot[bot] 402fe5528f Bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-29 13:55:44 +00:00
Lauri Ojansivu e2f8989939 Updated ChangeLog. 2022-03-29 00:14:00 +03:00
Lauri Ojansivu 1da0786211 Added WRITABLE_PATH to Windows start-wekan.bat .
Thanks to BabyFnord and xet7 !

Related https://github.com/wekan/wekan/pull/4405
2022-03-29 00:12:07 +03:00
Lauri Ojansivu 744e90d680 Updated ChangeLog. 2022-03-29 00:08:49 +03:00
Lauri Ojansivu ca15e060bb Added translations: English (Brazil) en-BR and Czech (Czech Republic) cs-CZ.
Thanks to translators !
2022-03-29 00:07:01 +03:00
Lauri Ojansivu 1431e4fd48 Updated ChangeLog. 2022-03-28 22:00:33 +03:00
Lauri Ojansivu e61e9bb508 Added some more info about building on Windows, not tested yet. 2022-03-28 21:59:29 +03:00
Lauri Ojansivu 1cb52a60c1 Updated ChangeLog. 2022-03-28 21:55:46 +03:00
Lauri Ojansivu 9099e20b80 Changed from volta to n. Added info about developing on Ubuntu 22.04. 2022-03-28 21:54:20 +03:00
Lauri Ojansivu 0b6e6491f9 Updated translations. 2022-03-25 12:39:34 +02:00
Lauri Ojansivu 0fb00bb18f Updated to Node.js v14.19.1. Thanks to Node.js developers. 2022-03-22 16:46:03 +02:00
Lauri Ojansivu aa3f133f56 Updated ChangeLog. 2022-03-22 16:07:09 +02:00
Lauri Ojansivu bf023e8218 Merge pull request #4424 from helioguardabaxo/master
Add get list and board cards count to API
2022-03-22 16:03:11 +02:00
Lauri Ojansivu 60466612b6 Updated ChangeLog. 2022-03-22 15:44:23 +02:00
Lauri Ojansivu 376bcbb373 Added Perl scripts for Asana export to WeKan ®.
Thanks to GeekRuthie !
2022-03-22 15:41:07 +02:00
helioguardabaxo 556507705a Add get list and board cards count to API 2022-03-20 19:00:03 -03:00
Lauri Ojansivu 825bc4cf25 Updated readme about largest user. 2022-03-19 00:32:19 +02:00
Lauri Ojansivu 68c958a890 Updated translations. 2022-03-19 00:31:48 +02:00
Lauri Ojansivu d2414670fa Updated ChangeLog. 2022-03-16 22:44:25 +02:00
Lauri Ojansivu 2f4e201d55 Merge pull request #4413 from Ben0it-T/fix-duplicate-board-create-board
Fix Duplicate board and create board from template doesn't open board
2022-03-16 22:42:46 +02:00
Lauri Ojansivu 278a8e49b9 Updated ChangeLog. 2022-03-16 22:41:22 +02:00
Lauri Ojansivu 5514c357ca Merge pull request #4411 from Ben0it-T/fix-import-Done-Button-do-not-redirect
fix Import Done Button do not redirect
2022-03-16 22:38:13 +02:00
Ben0it-T 8280ed2d3e Create Board from template now open board 2022-03-14 22:04:38 +01:00
Ben0it-T 9fa5b59d7c Duplicate Board now open board 2022-03-14 21:46:11 +01:00
Ben0it-T f9b6978303 fix Import Done Button do not redirect 2022-03-13 17:18:32 +01:00
Lauri Ojansivu 90be8ff936 Merge branch 'master' of github.com:wekan/wekan 2022-03-12 13:17:43 +02:00
Lauri Ojansivu 221d90f34b Updated ChangeLog. 2022-03-12 13:17:35 +02:00
Lauri Ojansivu 850aef41a4 Merge pull request #4408 from mfilser/attachment_migration_remove_cardId_on_cloudron_fix
Attachment migration, try to ignore error on Cloudron on removing old index cardId
2022-03-12 13:14:59 +02:00
Martin Filser d18da20cdf Attachment migration, try to ignore error on Cloudron on removing old index cardId
- should fix: https://github.com/wekan/wekan/issues/4407#issuecomment-1065782781
2022-03-12 09:40:35 +01:00
Lauri Ojansivu 62ea3cd4bf v6.12 2022-03-11 19:51:48 +02:00
Lauri Ojansivu 8a014dbfae Updated ChangeLog. 2022-03-11 19:44:35 +02:00
Lauri Ojansivu 01a91f3a36 Docs for Snap WRITABLE_PATH.
Thanks to xet7 !
2022-03-11 19:41:50 +02:00
Lauri Ojansivu 9f807c59d7 Added Snap WRITABLE_PATH.
Thanks to xet7 !
2022-03-11 19:36:35 +02:00
Lauri Ojansivu ab0faf9b52 Updated ChangeLog. 2022-03-11 12:16:00 +02:00
Lauri Ojansivu 272aa34083 Merge pull request #4405 from mfilser/attachments_fixes_after_migration_to_meteor_files
Attachments fixes after migration to meteor files (image preview, global search)
2022-03-11 12:14:04 +02:00
Martin Filser 1f277af722 remove old attachment storagePath log message 2022-03-10 23:17:06 +01:00
Martin Filser bfef9fc14d Attachment preview on card details again 2022-03-10 23:07:57 +01:00
Martin Filser 4603948442 Global search didn't work because of wrong Attachment search 2022-03-10 23:07:57 +01:00
Martin Filser 27ea306c1c Attachments count is now visible on minicard again 2022-03-10 23:07:57 +01:00
Martin Filser 6d5651e53f Attachments, ensure index of cardId exists 2022-03-10 23:07:57 +01:00
Lauri Ojansivu ada7b3dd2d Updated ChangeLog. 2022-03-10 19:31:01 +02:00
Lauri Ojansivu 34c2c87307 Merge pull request #4404 from Viehlieb/feature/empower_sso_oicd_data_propagation
Feature/empower sso oicd data propagation
2022-03-10 19:25:08 +02:00
viehlieb 9179e5ea71 added Readme 2022-03-10 16:02:47 +01:00
viehlieb f90875d8ef updating teams from oidc possible, fixed undefined error, no need for extra login to assign/create teams/orgs 2022-03-10 15:56:35 +01:00
Lauri Ojansivu c4bf99a9b9 Updated translations. 2022-03-10 00:59:35 +02:00
Lauri Ojansivu 87ec6a1076 Updated ChangeLog. 2022-03-10 00:57:17 +02:00
Lauri Ojansivu e450337b62 Merge pull request #4402 from Ben0it-T/fix-Boards.uniqueTitle-2
fix Boards.uniqueTitle not working as expected - part 2
2022-03-10 00:54:19 +02:00
Ben0it-T a45d1fa855 fix Boards.uniqueTitle 2022-03-08 22:25:07 +01:00
Lauri Ojansivu 0712309266 Updated ChangeLog. 2022-03-06 17:52:47 +02:00
Lauri Ojansivu f8b60de988 Merge pull request #4401 from Ben0it-T/fix-Boards.uniqueTitle
fix Boards.uniqueTitle not working as expected #4400
2022-03-06 17:51:02 +02:00
Lauri Ojansivu 3887c6f412 Updated ChangeLog. 2022-03-06 17:50:23 +02:00
Lauri Ojansivu a2beaa6e83 Merge pull request #4396 from Ben0it-T/add-linkedBoard-activities-to-sidebar
Add linkedBoard Activities to sidebar
2022-03-06 17:48:19 +02:00
Lauri Ojansivu 2d30b62b70 Updated ChangeLog. 2022-03-06 17:47:51 +02:00
Ben0it-T e1550e9172 fix Boards.uniqueTitle 2022-03-06 12:14:47 +01:00
Ben0it-T 0565f58165 adjust Activities display 2022-03-05 22:17:59 +01:00
Ben0it-T bf6bfc8ed6 add linkedBoard Activities to selector 2022-03-05 22:03:41 +01:00
Lauri Ojansivu d52e0bcb6e Merge pull request #4392 from Viehlieb/feature/empower_sso_oicd_data_propagation
Feature/empower sso oicd data propagation
2022-03-05 09:06:45 +02:00
viehlieb 263b405fc8 minor changes to README 2022-03-04 18:53:43 +01:00
viehlieb a0dbfa1f7e add README and functionality for more control through oidc - create teams/orgs if not exist and addto user - make user admin when flag is set 2022-03-04 18:29:29 +01:00
viehlieb 5b60efbe82 fix weird behavior where freshly created teams/orgs as active are crossed, recreated consistency with database 2022-03-04 18:24:11 +01:00
Lauri Ojansivu 00f2b77468 v6.11 2022-03-03 00:12:03 +02:00
Lauri Ojansivu a7e510412d Updated ChangeLog. 2022-03-03 00:05:29 +02:00
Lauri Ojansivu dc6bc9ed54 Updated In Progress future snapcraft configs.
Thanks to xet7 !
2022-03-03 00:02:22 +02:00
Lauri Ojansivu 82129139a2 Updated ChangeLog. 2022-03-02 23:56:57 +02:00
Lauri Ojansivu e5cfcc84fa Try to fix Snap.
Thanks to xet7 !
2022-03-02 23:54:14 +02:00
Lauri Ojansivu 5d5605754c v6.10 2022-03-02 21:31:42 +02:00
Lauri Ojansivu 9b4179e163 Updated dependencies. 2022-03-02 21:23:59 +02:00
Lauri Ojansivu ab33866d1a Use Node 14 at rebuild-wekan.sh
Thanks to xet7 !
2022-03-02 20:50:42 +02:00
Lauri Ojansivu 41ba67538b Updated ChangeLog. 2022-03-02 20:20:38 +02:00
Lauri Ojansivu e0d8ddf003 Added WRITABLE_PATH to be usable when developing with meteor command, and to torodb.
Thanks to xet7 !
2022-03-02 20:18:22 +02:00
Lauri Ojansivu 1a7a41698c Updated dependencies.
Thanks to developers of dependencies !
2022-03-02 20:16:30 +02:00
Lauri Ojansivu 2b999d2836 Updated ChangeLog. 2022-03-02 19:47:00 +02:00
Lauri Ojansivu dc99218e4e Enabled building Sandstorm WeKan, now that file uploading with Meteor-Files works.
Thanks to imajus, mfilser and xet7 !
2022-03-02 19:44:57 +02:00
Lauri Ojansivu bec440360a Merge branch 'feature-meteor-files' of github.com:wekan/wekan into feature-meteor-files 2022-03-02 17:34:20 +02:00
Lauri Ojansivu cc0658a225 Added Meteor-Files WRITEABLE_PATH for Sandstorm, Snap and Source.
Thanks to xet7 !

Related export WRITABLE_PATH=$SNAP_COMMON/wekan-uploads/
2022-03-02 17:33:14 +02:00
Lauri Ojansivu 00b99cda73 Added Meteor-Files WRITEABLE_PATH for Sandstorm, Snap and Source.
Thanks to xet7 !
2022-03-02 17:32:34 +02:00
Lauri Ojansivu b378bb55ac Merge remote-tracking branch 'remotes/origin/master' into feature-meteor-files 2022-03-01 21:09:55 +02:00
Lauri Ojansivu 7d5eac6876 Updated translations. 2022-03-01 20:42:59 +02:00
Lauri Ojansivu 4d539f369a Updated translations. 2022-02-28 17:02:55 +02:00
Lauri Ojansivu 5dadb4f0a1 v6.09 2022-02-28 01:46:57 +02:00
Lauri Ojansivu 1629e6aae6 Updated ChangeLog. 2022-02-28 01:40:52 +02:00
Lauri Ojansivu 0775e2a3e5 Try to fix Admin Panel / Disable Registration and Disable Forgot Password.
Thanks to urmel1960, Ben0it-T and xet7 !

Fixes #4384
2022-02-28 01:34:57 +02:00
Lauri Ojansivu 454d0b270d v6.08 2022-02-27 23:19:29 +02:00
Lauri Ojansivu 3076547cee Try to allow register and login.
Thanks to xet7 !

Related #4383
2022-02-27 23:13:20 +02:00
Lauri Ojansivu 4bcddcc98a Updated translations. 2022-02-26 19:26:51 +02:00
Lauri Ojansivu 099085b416 v6.07 2022-02-26 04:20:53 +02:00
Lauri Ojansivu 9bd6879455 Fix Forgot Password to be optional.
Thanks to xet7 !
2022-02-26 04:16:16 +02:00
Lauri Ojansivu 00efbf00d3 v6.06 2022-02-26 04:03:32 +02:00
Lauri Ojansivu 5c214c143d Updated translations. 2022-02-26 03:59:33 +02:00
Lauri Ojansivu 3418b97faa Updated translations. 2022-02-26 02:02:32 +02:00
Lauri Ojansivu a484101abf Updated ChangeLog. 2022-02-26 01:47:14 +02:00
Lauri Ojansivu 2f79432e4e Merge pull request #4379 from Viehlieb/feature/propagate_oidc_data
Feature/propagate OIDC data
2022-02-26 01:43:25 +02:00
Lauri Ojansivu f71728ae16 Merge pull request #4377 from Viehlieb/feature/shortcuts_for_label_assignment
Feature/shortcuts for label assignment
2022-02-26 01:37:09 +02:00
Lauri Ojansivu e7e4296b02 Updated ChangeLog. 2022-02-26 01:35:16 +02:00
Lauri Ojansivu b85db43c47 Fixed Disable Self-Registration. Added Disable Forgot Password to same Admin Panel page.
Thanks to xet7 !

Fixes #3971,
fixes #2839
2022-02-26 01:29:40 +02:00
viehlieb db6fc57515 fix userwas used before assignment 2022-02-24 13:08:55 +01:00
viehlieb 6b404da9f8 add functionality for oidc login to change MongoDB data for email, fullname, username, user.teams 2022-02-23 15:09:03 +01:00
viehlieb 4d31985eb9 enable add/remove labels for multiselect via shortcut 2022-02-23 14:58:13 +01:00
viehlieb 0e9aa2eeed translation files de + en for shortcut overview 2022-02-23 12:49:46 +01:00
viehlieb 7d73f2bbba bring back functionality for selectedCard which is currentCard and assigned functionality to numpad for label shortcuts 2022-02-23 12:49:08 +01:00
Lauri Ojansivu 4929979221 Updated to Node.js v14.19.0. Thanks to Node.js developers. 2022-02-23 11:51:56 +02:00
Lauri Ojansivu 90cc96302d Try to fix rebuild-wekan.sh .
Thanks to xet7 !
2022-02-23 10:30:30 +02:00
Lauri Ojansivu 4a074836fd Try to fix exception: Cannot read property title of undefined.
Thanks to xet7 !
2022-02-23 10:18:11 +02:00
Lauri Ojansivu 0e0bea0139 Merged meteor-files changes PR and removed wekan-cfs. 2022-02-23 09:38:28 +02:00
Lauri Ojansivu d00596f88a Merge branch 'feature-ostrio-files' of https://github.com/majus/wekan 2022-02-23 08:42:20 +02:00
Lauri Ojansivu 9ca8d78514 Updated translations. 2022-02-23 08:37:16 +02:00
Lauri Ojansivu 11d8096b8d Merge branch 'master' of github.com:wekan/wekan 2022-02-23 08:34:33 +02:00
Lauri Ojansivu a49a918547 Updated ChangeLog. 2022-02-23 08:34:25 +02:00
Lauri Ojansivu 4ebd113bf0 Merge pull request #4375 from pablo-ng/master
add subscription to announcements collection
2022-02-23 08:31:38 +02:00
Lauri Ojansivu 14df71de5b Updated ChangeLog. 2022-02-23 08:30:41 +02:00
Lauri Ojansivu 9f459a37b8 Merge pull request #4358 from mfilser/card_details_fix_header
Card details, fix header while scrolling
2022-02-23 08:29:03 +02:00
pablo-ng 5487c015db add subscription to announcements collection 2022-02-22 18:20:34 +01:00
Martin Filser 47ca6829eb Attachment migration, add error logs 2022-02-18 10:59:12 +03:00
Martin Filser 368fe24956 Ensure to create the upload directory 2022-02-18 10:59:12 +03:00
Martin Filser 086cb9c067 Don't add activity while the attachment migration 2022-02-18 10:59:12 +03:00
Martin Filser 25a2ad1144 Fix undefined list at activities / watchers 2022-02-18 10:59:12 +03:00
Martin Filser 926b617f33 .devcontainer, update image to ubuntu:rolling
- see also: 8446640060
2022-02-18 10:59:12 +03:00
Martin Filser f94ae76609 Adding WRITABLE_PATH to docker config 2022-02-18 10:59:12 +03:00
Lauri Ojansivu f46173077b Updated translations. 2022-02-17 20:31:12 +02:00
Lauri Ojansivu 40265144af Upgrade to Meteor 2.3.4
Thanks to xet7 !
2022-02-15 13:16:27 +03:00
Martin Filser c373013134 Card Details Header always at top of all other scrollable elements 2022-02-14 23:07:30 +01:00
Martin Filser 12c5d2324d Card Details, fix card header while scrolling 2022-02-14 23:07:30 +01:00
Lauri Ojansivu e6dc20f6c7 Updated ChangeLog. 2022-02-12 20:22:50 +02:00
Lauri Ojansivu ea658842a2 Merge pull request #4352 from mfilser/card_details_popup_not_maximized
Global search: Card Details popup opens now in normal view even if maximized card is configured
2022-02-12 20:20:22 +02:00
Martin Filser 12f0c85546 Global search: Card Details popup opens now in normal view even if maximized card is configured
Fixes: #4346
2022-02-12 11:02:30 +01:00
Lauri Ojansivu 033a5d8186 Updated translations. 2022-02-10 15:01:14 +02:00
Lauri Ojansivu b769a71af3 v6.05 2022-02-07 18:56:10 +02:00
Lauri Ojansivu ad35e7b7bd Update release scripts to merge latest changes.
Thanks to xet7 !
2022-02-07 18:36:03 +02:00
Lauri Ojansivu a9e56f2b09 Updated ChangeLog. 2022-02-07 18:30:21 +02:00
Lauri Ojansivu 5f807b80fe Merge pull request #4345 from mfilser/fix_copy_move_card
Fix copy move card
2022-02-07 18:27:58 +02:00
Martin Filser 4d89eb6083 Add protection to change the list of the card 2022-02-07 16:56:35 +01:00
Martin Filser bd2739e78d Fix Copy/Move Card
Fixes: #4341, #4343
2022-02-07 16:51:55 +01:00
Martin Filser 265ee9ab83 Added back Dropdown field "List" to card details 2022-02-07 16:51:45 +01:00
Lauri Ojansivu 065485168a v6.04 2022-02-07 17:00:42 +02:00
Lauri Ojansivu 7d609ef0b1 Updated ChangeLog. 2022-02-07 16:35:04 +02:00
Lauri Ojansivu dc7b97c178 Fixed Problem with selecting action in rule window.
Thanks to Meeques and xet7 !

Fixes #4342
2022-02-07 16:31:01 +02:00
Lauri Ojansivu a5b376e6b5 Fixed Copy card to list does not work, by reverting clientside changes of PR 4333.
Thanks to Meeques, PaulITsoft and xet7 !

Fixes #4341,
fixes #4343
2022-02-07 15:15:24 +02:00
Lauri Ojansivu 993e99330f Updated translations. 2022-02-07 14:47:42 +02:00
Lauri Ojansivu e563212475 v6.03 2022-02-07 04:06:40 +02:00
Lauri Ojansivu cc54867976 Updated to Node.js v12.22.10. Thanks to Node.js developers. 2022-02-07 03:35:28 +02:00
Lauri Ojansivu 36250f83b9 v6.02 2022-02-06 16:10:25 +02:00
Lauri Ojansivu e715106d65 Updated translations. 2022-02-06 16:06:57 +02:00
Lauri Ojansivu f888b5cb23 Updated dependencies. 2022-02-06 15:58:30 +02:00
Denis Perov 59823a0661 Support WRITEABLE_PATH envrionemnt variable 2022-02-06 13:19:58 +03:00
David Arnold 6a9bc12664 Revert "use tempdirs"
This reverts commit a7d51cf21b663d87f83e2585502ed9323b3d3788.
2022-02-06 13:19:58 +03:00
David Arnold e99130d3ea use tempdirs 2022-02-06 13:19:58 +03:00
David Arnold 036fb3e794 fixup: migration 2022-02-06 13:19:58 +03:00
David Arnold a15ee068d1 hack: Nasty hack for covercard auth 2022-02-06 13:19:58 +03:00
David Arnold 1da242ae35 Revert "Adios cfs:* | Hello ostrio:file"
This reverts commit 093819e33cc513db6f06aa30d5e37e3fc758d6e8.
2022-02-06 13:19:58 +03:00
David Arnold addf669d44 migration: extract files from old storage and load into new storage 2022-02-06 13:19:58 +03:00
David Arnold 1c2dbe5149 Fix: access denied on second load 2022-02-06 13:19:58 +03:00
David Arnold 77cb5d88de fix: user avatar images & upload 2022-02-06 13:19:58 +03:00
David Arnold 1b591dcda9 Ref: pass through image size error message (correctly) 2022-02-06 13:19:58 +03:00
David Arnold 545fe96c30 Fix: image download dont open -> download 2022-02-06 13:19:58 +03:00
David Arnold d8d8a6a64d Rem: upload spinner.
attachmentGalery would need refactoring to an individual attachment
component with component state that could be set on the onUpdated event.

I'm not capable of doing this within reasonable time.
2022-02-06 13:19:58 +03:00
David Arnold 5a74d98795 Rem: unused previewAttachedImagePopup 2022-02-06 13:19:58 +03:00
David Arnold 0e8a02ee2c fix: thumbnail images now wrok 2022-02-06 13:19:58 +03:00
David Arnold 2c175f2be6 fixup! fix: cover image - works now 2022-02-06 13:19:58 +03:00
David Arnold e080aea61d fixup! Hello gridfs lib + fsHooks for mongodb bucket storage 2022-02-06 13:19:58 +03:00
David Arnold 59a936ae90 fix: activity download link 2022-02-06 13:19:58 +03:00
David Arnold c7500661b8 fix: cover image - works now 2022-02-06 13:19:58 +03:00
David Arnold 0ad7eb4753 fixup! Ref: original & and use fileObj.meta 2022-02-06 13:19:58 +03:00
David Arnold 0254282daf fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-02-06 13:19:58 +03:00
David Arnold d0a27aaec2 fixup! Ref: original & and use fileObj.meta 2022-02-06 13:19:58 +03:00
David Arnold be712541d5 Revert "Do those imports!"
This reverts commit 64dcc70bd271d827c1639f8c847543a6d2ede713.
2022-02-06 13:19:58 +03:00
David Arnold 9471eb327e fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-02-06 13:19:58 +03:00
David Arnold c41335a967 fixup! Ref: Avatars to use modern gridfs 2022-02-06 13:19:58 +03:00
David Arnold 9de430fdc1 fixup! Ref: original & and use fileObj.meta 2022-02-06 13:19:58 +03:00
David Arnold 13a6067081 fixup! Ref: Avatars to use modern gridfs 2022-02-06 13:19:58 +03:00
David Arnold e2f7b94cde fixup! Ref: original & and use fileObj.meta 2022-02-06 13:19:58 +03:00
David Arnold ac7d16c40f fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-02-06 13:19:58 +03:00
David Arnold 3da88ed858 Do those imports! 2022-02-06 13:19:58 +03:00
David Arnold c85f710e74 fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-02-06 13:19:58 +03:00
David Arnold 7b64c8b235 fixup! Ref: Avatars to use modern gridfs 2022-02-06 13:19:58 +03:00
David Arnold f244125cd3 fixup! Mig: add migration cfs:* -> ostrio:files 2022-02-06 13:19:58 +03:00
David Arnold 692d853eca fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-02-06 13:19:58 +03:00
David Arnold eb747ef8e9 fixup! Ref: Avatars to use modern gridfs 2022-02-06 13:19:58 +03:00
David Arnold 412b60f794 fixup! Ref: Attachments to use modern gridfs (rm localstore) 2022-02-06 13:19:58 +03:00
David Arnold 0f91eaa0a0 fixup! Ref: Avatars to use modern gridfs 2022-02-06 13:19:58 +03:00
David Arnold 386828fe3e fixup! rm fix-download-unicode 2022-02-06 13:19:58 +03:00
David Arnold 9b1ff4dd6d Fixup(ostrio-files): wrong export 2022-02-06 13:19:58 +03:00
David Arnold 2dc6e15024 Mig: add migration cfs:* -> ostrio:files 2022-02-06 13:19:58 +03:00
David Arnold e702f17c7b Ref: original & and use fileObj.meta
fileObj.meta is part of the ostrio:files API and be passed to the
constructor. This is less hacky than trying tu update a persistet object
after the fact.
2022-02-06 13:19:58 +03:00
David Arnold 16506e7a6a Ref: Attachment upload handlers 2022-02-06 13:19:58 +03:00
David Arnold 08cc308992 Ref: Avatar upload handler 2022-02-06 13:19:58 +03:00
David Arnold ae8d4c1bbd Ref: attachment image paste 2022-02-06 13:19:58 +03:00
David Arnold e2934b9b09 Ref: trello & wekan importers 2022-02-06 13:19:58 +03:00
David Arnold 55acce9f0c Ref: Attachment upload handlers 2022-02-06 13:19:57 +03:00
Lauri Ojansivu 627d7d9456 v6.01 2022-02-06 11:30:52 +02:00
Lauri Ojansivu b62dd5782a Updated ChangeLog. 2022-02-06 11:05:03 +02:00
Lauri Ojansivu 0460a7d9d3 Added building fibers.
Thanks to xet7 !
2022-02-06 11:03:04 +02:00
Lauri Ojansivu 45d53dede4 Updated translations. 2022-02-06 10:28:03 +02:00
Lauri Ojansivu ce3c87f767 Updated ChangeLog. 2022-02-06 10:25:54 +02:00
Lauri Ojansivu ceed865e30 Updated to Node.js v14.19.0. Thanks to Node.js developers. 2022-02-06 10:09:17 +02:00
David Arnold 9c3043d40a Ref: Avatar upload handler 2022-02-06 10:56:32 +03:00
David Arnold a38a78d9a3 rm ATTACHMENTS_STORE_PATH 2022-02-06 10:56:31 +03:00
David Arnold 966541704c Ref: Attachments to use modern gridfs (rm localstore) 2022-02-06 10:55:54 +03:00
David Arnold 52a63c5423 Ref: Avatars to use modern gridfs 2022-02-06 10:55:54 +03:00
David Arnold 18bd797ab9 Hello gridfs lib + fsHooks for mongodb bucket storage 2022-02-06 10:55:54 +03:00
David Arnold d75fd69406 rm fix-download-unicode 2022-02-06 10:55:54 +03:00
Denis Perov 337470cbd0 Adios cfs:* | Hello ostrio:file 2022-02-06 10:55:54 +03:00
Lauri Ojansivu a9bd5c7496 v6.00 2022-02-05 14:34:36 +02:00
Lauri Ojansivu e1730c9912 Updated translations. 2022-02-05 14:25:43 +02:00
Lauri Ojansivu 8f1754be50 Updated ChangeLog. 2022-02-05 14:24:11 +02:00
Lauri Ojansivu 4ace1db9b0 Merge pull request #4333 from mfilser/card_details_list_select
Adding list select at card details
2022-02-05 14:15:36 +02:00
Lauri Ojansivu eff636ddd6 Updated ChangeLog. 2022-02-05 00:43:17 +02:00
Lauri Ojansivu 9b7bf1ba28 Updated release scripts.
Thanks to xet7 !
2022-02-05 00:41:29 +02:00
Lauri Ojansivu 7190057d0c Updated translations. 2022-02-04 19:16:34 +02:00
Martin Filser bb5b723520 Migrations, set "Show Lists" on card details on every board 2022-02-04 13:46:56 +01:00
Martin Filser a2e6f01469 Changed "List Icon" 2022-02-04 13:46:56 +01:00
Martin Filser 12ee7efc5f Always add space between "card details items" 2022-02-04 13:46:56 +01:00
Martin Filser 7c7640e63e Added Dropdown field "List" to card details 2022-02-04 13:46:56 +01:00
Lauri Ojansivu e668fdc500 v5.99 2022-02-04 13:08:30 +02:00
Lauri Ojansivu f02478d57c Updated ChangeLog. 2022-02-04 12:44:44 +02:00
Lauri Ojansivu 8fc117eb53 Updated ChangeLog. 2022-02-04 12:43:38 +02:00
Lauri Ojansivu af598b13e8 Remove not working options from rebuild-wekan.sh
Thanks to xet7 !
2022-02-04 12:42:03 +02:00
Lauri Ojansivu f00f164078 Updated translations. 2022-02-04 12:35:09 +02:00
Lauri Ojansivu 70ac18a7e6 Updated ChangeLog. 2022-02-04 12:31:39 +02:00
Lauri Ojansivu e461c4a018 Merge pull request #4332 from jghaanstra/master
Revert rounded corners minicard on moderndark theme
2022-02-04 12:25:54 +02:00
Jelger Haanstra 186364f227 Revert rounded corners minicard on moderndark theme 2022-02-04 08:36:27 +01:00
Lauri Ojansivu 72f9d45bbe Updated ChangeLog. 2022-02-03 22:24:50 +02:00
Lauri Ojansivu 6392e06a36 v5.98 2022-02-03 22:02:18 +02:00
Lauri Ojansivu c879e63fc2 Updated ChangeLog. 2022-02-03 21:30:44 +02:00
Lauri Ojansivu 290a6dfb6e Updated to Node.js v12.22.10. Thanks to Node.js developers. 2022-02-03 21:28:32 +02:00
Lauri Ojansivu 94c82d121c Updated translations. 2022-02-03 21:01:43 +02:00
Lauri Ojansivu 3e92d6f6a3 Merge pull request #4331 from mfilser/copy_checklist
Copy checklist
2022-02-03 20:53:25 +02:00
Martin Filser 3a2b50720e Copy Checklist added to checklist action popup
Relates to: #4306
2022-02-03 19:37:49 +01:00
Lauri Ojansivu 8f47e65684 Updated ChangeLog. 2022-02-03 20:36:37 +02:00
Martin Filser 95ebf3bda8 Extract class of current "Move Checklist Option" Component 2022-02-03 19:34:34 +01:00
Martin Filser ea95357ae4 Move Checklist, getBoardData only resets the swimlane and list if the board id was changed 2022-02-03 19:34:34 +01:00
Martin Filser 7501e255dd Move Checklist, Swimlane, Lists and Cards are now correctly loaded of the last Board wasn't the current Board 2022-02-03 19:34:34 +01:00
Lauri Ojansivu ff13571c71 Add more stack and heap to Node.js at all WeKan platforms.
Thanks to xet7 !

Related #3585
2022-02-03 20:33:58 +02:00
Lauri Ojansivu 6501173ce4 Updated ChangeLog. 2022-02-03 18:45:35 +02:00
Lauri Ojansivu 1d13040305 Merge pull request #4330 from mfilser/list_not_moveable_when_lists_require_scrolling
Lists now moveable when swimlane requires scrolling
2022-02-03 18:44:34 +02:00
Lauri Ojansivu af1439b274 Updated ChangeLog. 2022-02-03 18:43:26 +02:00
Martin Filser 32af18b33d Lists now moveable when swimlane requires scrolling
Fixes: #4322
2022-02-03 17:29:20 +01:00
Martin Filser a48e537b2d List sorting show's now the drag/drop placeholder 2022-02-03 17:29:20 +01:00
Martin Filser 424bc0e7c5 Swimlanes scrolls right/left while sorting the list column at the screen end 2022-02-03 17:29:20 +01:00
Lauri Ojansivu e98821fafc Merge pull request #4329 from mfilser/removed_space_new_checklists
Removed unnecessary space between checklist title and first checklist item if checklist progress is 0%
2022-02-03 16:43:03 +02:00
Lauri Ojansivu 2d61fcdef4 Updated ChangeLog. 2022-02-03 12:42:16 +02:00
Lauri Ojansivu 045160c7bb Make card corners round.
Thanks to Meeques and xet7 !

Fixes #4326
2022-02-03 12:39:19 +02:00
Martin Filser f98b03bee5 Removed unnecessary space between checklist title and first checklist item if checklist progress is 0% 2022-02-01 22:49:15 +01:00
Lauri Ojansivu 703baf4ce9 Updated ChangeLog. 2022-01-30 01:56:54 +02:00
Lauri Ojansivu 1bf1ed79e8 Try to fix tests by adding correct version of puppeteer, because newest puppeteer did not work.
Thanks to xet7 !
2022-01-30 01:55:03 +02:00
Lauri Ojansivu a7888f0c66 Updated ChangeLog. 2022-01-30 01:49:13 +02:00
Lauri Ojansivu 7122f59c51 Try to fix tests by adding puppeteer back.
Thanks to xet7 !
2022-01-30 01:48:11 +02:00
Lauri Ojansivu 839266903a Updated ChangeLog. 2022-01-30 01:44:28 +02:00
Lauri Ojansivu a8e3dc06fe Part 3: Added translation: Galician (Spain).
Thanks to translators!
2022-01-30 01:43:05 +02:00
Lauri Ojansivu 7e0bc91a44 Updated ChangeLog. 2022-01-30 01:34:12 +02:00
Lauri Ojansivu 62efb67d06 Fix typo in tests. 2022-01-30 01:32:52 +02:00
Lauri Ojansivu 00fd47105d Updated translations. 2022-01-30 01:26:42 +02:00
Lauri Ojansivu 1bee24fa68 Updated ChangeLog. 2022-01-30 01:24:20 +02:00
Lauri Ojansivu 9a539fb414 Updated translations. 2022-01-30 01:21:19 +02:00
Lauri Ojansivu c0828f2d00 Added translation: Galician (Spain).
Thanks to translators!
2022-01-30 01:13:22 +02:00
Lauri Ojansivu 90c70aef96 Updated dependencies. 2022-01-23 13:21:24 +02:00
Lauri Ojansivu dfc736b064 v5.97 2022-01-23 11:39:10 +02:00
Lauri Ojansivu af53afb9f8 Updated ChangeLog. 2022-01-23 11:30:56 +02:00
Lauri Ojansivu df61e471a1 Merge pull request #4319 from Ben0it-T/fix-comments-for-cards-that-link-to-a-board-are-not-shown-2538
Fix comments for cards that link to a board are not shown
2022-01-23 11:26:56 +02:00
Ben0it-T 3e364c4f35 fix comments on cardType-linkedBoard 2022-01-23 10:21:29 +01:00
Lauri Ojansivu 3fb63b518f Updated ChangeLog. 2022-01-23 11:20:02 +02:00
Lauri Ojansivu 4bf6b457ae Fix Snap OAUTH2_REQUEST_PERMISSIONS of Google/OAuth2/OIDC login.
Thanks to xet7 !

Fixes #4316
2022-01-23 11:16:47 +02:00
Lauri Ojansivu 71c575d4b5 Updated ChangeLog. 2022-01-23 11:10:14 +02:00
Lauri Ojansivu 8b2c9cc74f Merge pull request #4318 from Ben0it-T/fix-cant-add-checklist-to-cardType-linkedBoard
fix can't add Checklist on cardType-linkedBoard
2022-01-23 10:53:32 +02:00
Ben0it-T fc7c70bdc0 add checklist to cardType-linkedBoard 2022-01-23 09:44:19 +01:00
Lauri Ojansivu dd18fd2477 v5.96 2022-01-23 00:07:30 +02:00
Lauri Ojansivu 2512ea1715 Updated ChangeLog. 2022-01-22 23:30:35 +02:00
Lauri Ojansivu d63fa4aa89 Merge pull request #4315 from Ben0it-T/fix-cardType-linkedBoard-comments-not-loading
Fix comments not loading on cardType-linkedBoard
2022-01-22 23:27:34 +02:00
Ben0it-T ec51f7cced update Cards.helpers - comments() 2022-01-22 22:20:36 +01:00
Ben0it-T 3eb834c920 add LinkedBoard card comments to cursor 2022-01-22 21:01:49 +01:00
Lauri Ojansivu ba24e4a775 Updated ChangeLog. 2022-01-21 18:42:57 +02:00
Lauri Ojansivu bec25720da Fix notification drawer always on top.
Thanks to Azorimor !

Related https://github.com/wekan/wekan/pull/4301
2022-01-21 18:40:23 +02:00
Lauri Ojansivu 0db7ba5107 Updated ChangeLog. 2022-01-21 18:21:41 +02:00
Lauri Ojansivu 5e65dfc272 Try to fix OAUTH2_REQUEST_PERMISSIONS by removing quotes.
Thanks to pcurie and xet7 !

Related https://github.com/wekan/wekan/commit/892ee605270d583d800ec5ff9e1e4844eae92b38
2022-01-21 18:19:20 +02:00
Lauri Ojansivu 9b56f149e1 Updated ChangeLog. 2022-01-21 00:45:04 +02:00
Lauri Ojansivu a15ed97ab3 Merge pull request #4308 from mfilser/fix_layout_modern_dark
Fix Layout "Modern Dark", Card Color, List Header and mouse hover
2022-01-21 00:41:34 +02:00
Martin Filser d34918b08b Fix Layout "Modern Dark", Card Color, List Header and mouse hover
Fixes: #4254
2022-01-20 23:03:01 +01:00
Lauri Ojansivu e16cc34f6d Updated translations. 2022-01-20 23:38:26 +02:00
Lauri Ojansivu 87fd4880c9 Updated ChangeLog. 2022-01-20 23:28:56 +02:00
Lauri Ojansivu f325fe8436 Merge pull request #4307 from mfilser/move_checklist_and_card_popup_restore_last_selected_board_value
Move checklist and card popup restore last selected board value
2022-01-20 23:27:13 +02:00
Martin Filser 70558d00a7 Move checklist popup restores now the last selected board value in dropdown menu 2022-01-20 22:02:23 +01:00
Martin Filser d86eb74eb0 Move card popup restores now the last selected board value in dropdown menu 2022-01-20 22:02:23 +01:00
Lauri Ojansivu 6adedfd77f Updated translations. 2022-01-19 17:32:22 +02:00
Lauri Ojansivu e1a7c8abb7 Updated translations. 2022-01-18 15:48:16 +02:00
Lauri Ojansivu 8c8fba3c6c v5.95 2022-01-18 03:05:12 +02:00
Lauri Ojansivu a176a58a72 Use different OS for WeKan releases. 2022-01-18 03:00:28 +02:00
Lauri Ojansivu 1db3d9a081 Updated translations. 2022-01-18 02:53:32 +02:00
Lauri Ojansivu 8020aa4b81 Updated ChangeLog. 2022-01-18 01:28:18 +02:00
Lauri Ojansivu bbef2aff8c Merge pull request #4300 from mfilser/custom_field_stringtemplates_fix_ctrl_enter_desktop_view
Custom Field StringTemplates didn't save the last input value on desktop view after pressing Ctrl+Enter
2022-01-18 01:26:45 +02:00
Martin Filser 7e1755c89f Custom Field StringTemplates didn't save the last input value on desktop view after pressing Ctrl+Enter 2022-01-18 00:21:57 +01:00
Lauri Ojansivu 66a4562c91 Updated translations. 2022-01-18 01:21:35 +02:00
Lauri Ojansivu 6ad4e78fa8 Updated ChangeLog. 2022-01-18 01:21:12 +02:00
Lauri Ojansivu 6a92a95414 Merge pull request #4299 from mfilser/checklist_add_progress_bar
Add progress bar to checklist
2022-01-18 01:20:00 +02:00
Martin Filser 1fcc0d2ec2 Only show progress bar percent if there is any checklist item done 2022-01-18 00:16:19 +01:00
Martin Filser e7051c8ecd Smaller progress bar 2022-01-18 00:16:19 +01:00
Martin Filser 1670ba31e8 Changed progress bar layout 2022-01-18 00:16:19 +01:00
Martin Filser ac1f540763 Added progress bar to checklist
- Relates #1847
2022-01-18 00:16:19 +01:00
Lauri Ojansivu 61dd3180a4 Updated ChangeLog. 2022-01-18 01:15:39 +02:00
Lauri Ojansivu 930333d546 Merge branch 'master' of github.com:wekan/wekan 2022-01-18 01:14:45 +02:00
Lauri Ojansivu 2967d13968 Updated translations. 2022-01-18 01:14:33 +02:00
Lauri Ojansivu 56be68fcb7 Merge pull request #4298 from mfilser/add_checklist_item-each_line_becomes_new_item
Add checklist item - each line becomes new item
2022-01-18 01:14:19 +02:00
Martin Filser dbb9ddd7d3 Show "newlineBecomesNewChecklistItem" element only at new checklist items
- before it was shown at new checklists too
2022-01-18 00:09:19 +01:00
Martin Filser 879ab282e1 Adding some space between save button and the next div element 2022-01-18 00:09:19 +01:00
Martin Filser d9a7950fa4 Center all elements of checklist-item form
- before the save button, X and slider element had a strange layout. The
  save button was at the bottom, the X and slider at the top of the flex
  layout
2022-01-18 00:09:19 +01:00
Martin Filser 18e34b7f79 Add checklist item, added newline becomes new checklist item
- Related to #1846
2022-01-18 00:09:19 +01:00
Lauri Ojansivu 4abb26f8bc Updated ChangeLog. 2022-01-18 01:03:52 +02:00
Lauri Ojansivu cd6b4529be Merge pull request #4297 from mfilser/checklist_action_menu_and_move_checklist
Added "move checklist" and created a "Checklist Action Menu"
2022-01-18 01:02:08 +02:00
Lauri Ojansivu 6234fdff18 Updated ChangeLog. 2022-01-18 01:00:40 +02:00
Lauri Ojansivu d4c3f32383 Updated WeKan s390x bundle build script.
Thanks to xet7 !
2022-01-18 00:59:12 +02:00
Martin Filser a72d51d901 Checklist Action-Menu easier clickable
- especially useful at mobile devices
2022-01-17 23:38:21 +01:00
Martin Filser a66257ec21 Added "Move Checklist" to checklist menu action 2022-01-17 23:38:21 +01:00
Martin Filser 395452b54f Added spaces to delete checklist menu action 2022-01-17 23:38:21 +01:00
Martin Filser e40e42103e Delete checklist moved to checklist menu action 2022-01-17 23:38:21 +01:00
Martin Filser 7651c00d57 Add actions menu to checklist 2022-01-17 23:38:21 +01:00
Lauri Ojansivu 764dbb71f0 Updated ChangeLog. 2022-01-18 00:35:56 +02:00
Lauri Ojansivu 83ce43ac52 Merge pull request #4296 from mfilser/move_copy_card_remembers_the_last_confirmed_field_values
Move copy card remembers the last confirmed field values
2022-01-18 00:33:33 +02:00
Martin Filser e528474fc5 Move and Copy Card Popup remembers the last confirmed field values 2022-01-17 23:20:44 +01:00
Martin Filser 73ff4c7966 Use card id from component instead of global state
- was a TODO in the comments
2022-01-17 23:20:44 +01:00
Lauri Ojansivu 01d8058a3f Updated translations. 2022-01-17 18:02:08 +02:00
Lauri Ojansivu b69f08889a Updated ChangeLog. 2022-01-17 17:54:25 +02:00
Lauri Ojansivu edf3573760 Merge pull request #4295 from xeruf/patch-1
Update ISSUE_TEMPLATE.md
2022-01-17 17:51:49 +02:00
Janek 021def818f Update ISSUE_TEMPLATE.md
Use comments and rephrase
2022-01-17 15:45:19 +01:00
Lauri Ojansivu f519d277a5 v5.94 2022-01-16 21:49:48 +02:00
Lauri Ojansivu 218ddf03bc Fix Card, List and Comment colors not visible at some themes.
Thanks to Meeques, Go-rom and xet7 !

Fixes #4254,
fixes #4293
2022-01-16 21:41:49 +02:00
Lauri Ojansivu 31c7539eb9 Updated translations. 2022-01-16 20:27:26 +02:00
Lauri Ojansivu eb8d9955d5 Updated translations. 2022-01-16 19:17:15 +02:00
Lauri Ojansivu 7bcaf71bf0 Updated translations. 2022-01-16 19:13:23 +02:00
Lauri Ojansivu 7afc4638d2 Updated ChangeLog. 2022-01-16 14:27:55 +02:00
Lauri Ojansivu c9b7542a9b Merge branch 'mfilser-card_title_copy_button' 2022-01-16 14:26:15 +02:00
Martin Filser c59c7bd63d Removed unnecessary CSS code of copied tooltip 2022-01-15 18:52:07 +01:00
Martin Filser 574116b058 Reduced height of Copied! tooltip at title copy button 2022-01-15 18:52:06 +01:00
Martin Filser dbcc919768 Added copy button to card title 2022-01-15 18:18:11 +01:00
Lauri Ojansivu bf37737f44 Updated changelog. 2022-01-14 03:56:08 +02:00
Lauri Ojansivu 187b31caa5 v5.93 2022-01-14 02:47:09 +02:00
Lauri Ojansivu f75ab964be Part 2: Try to fix Sandstorm WeKan package.
Thanks to xet7 !

Related https://github.com/wekan/wekan/issues/4280,
related https://github.com/sandstorm-io/sandstorm/issues/3600
2022-01-14 02:42:49 +02:00
Lauri Ojansivu bff43c3f92 Try to fix Sandstorm WeKan package.
Thanks to xet7 !

Related https://github.com/wekan/wekan/issues/4280,
related https://github.com/sandstorm-io/sandstorm/issues/3600
2022-01-14 02:35:39 +02:00
Lauri Ojansivu fb3099eba9 Updated ChangeLog. 2022-01-13 23:58:09 +02:00
Lauri Ojansivu 5d1d90c2ff v5.92 2022-01-13 22:47:08 +02:00
Lauri Ojansivu 4d3c0c60d0 Updated ChangeLog. 2022-01-13 21:24:03 +02:00
Lauri Ojansivu 99d6f7a765 Fixed OpenAPI docs generating has some swagger error.
Thanks to bentiss !

Fixes #4280
2022-01-13 21:22:38 +02:00
Lauri Ojansivu 418b9effa7 Updated ChangeLog. 2022-01-13 21:11:29 +02:00
Lauri Ojansivu 30131ffc20 Part 2: Added translations: Estonian (Estonia) et_EE, Russian (Ukraine) ru_UA, Ukrainian (Ukraine) uk_UA.
Thanks to translators!
2022-01-13 21:05:59 +02:00
Lauri Ojansivu ac85e00e0a Added translations: Estonian (Estonia) et_EE, Russian (Ukraine) ru_UA, Ukrainian (Ukraine) uk_UA.
Thanks to translators!
2022-01-13 14:39:40 +02:00
Lauri Ojansivu 8b2e2e9b1f Merge pull request #4286 from wekan/dependabot/npm_and_yarn/markdown-it-12.3.2
Bump markdown-it from 12.2.0 to 12.3.2
2022-01-13 11:15:55 +00:00
dependabot[bot] 724f9d43b4 Bump markdown-it from 12.2.0 to 12.3.2
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 12.2.0 to 12.3.2.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/12.2.0...12.3.2)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-12 23:15:34 +00:00
Lauri Ojansivu 2ce136ee0a v5.91 2022-01-11 03:53:27 +02:00
Lauri Ojansivu 7495c1bf59 Updated ChangeLog. 2022-01-11 03:19:25 +02:00
Lauri Ojansivu ef685703cf Use volta in local node update script.
Thanks to Volta developers!
2022-01-11 03:13:51 +02:00
Lauri Ojansivu 0218f3266b Updated to Node.js v12.22.9. Thanks to Node.js developers. 2022-01-11 03:09:48 +02:00
Lauri Ojansivu 6a97dfb4b9 Updated ChangeLog. 2022-01-10 23:27:49 +02:00
Lauri Ojansivu 75fdc53746 Updated dependencies.
Thanks to developers of dependencies!
2022-01-10 23:26:41 +02:00
Lauri Ojansivu ed3c53df35 Updated ChangeLog. 2022-01-10 22:46:41 +02:00
Lauri Ojansivu 2efa42b853 In rebuild-wekan.sh, use Volta Node and NPM install manager, made with Rust https://volta.sh . Volta uses home directory also with "npm -g install", no sudo needed.
Thanks to Volta developers!
2022-01-10 22:44:17 +02:00
Lauri Ojansivu cf151b5632 Updated translations. 2022-01-08 22:30:52 +02:00
Lauri Ojansivu 2241c35e55 Updated ChangeLog. 2022-01-08 22:17:04 +02:00
Lauri Ojansivu 6f7292db5e Updated rebuild-wekan.sh 2022-01-08 22:15:48 +02:00
Lauri Ojansivu ce587d23fa Updated ChangeLog. 2022-01-05 18:57:46 +02:00
Lauri Ojansivu 9979193df5 Updated rebuild-wekan.sh script about installing dependencies.
Thanks to xet7 !
2022-01-05 18:56:07 +02:00
Lauri Ojansivu bee9dc8b3e Updated translations. 2022-01-03 21:21:02 +02:00
Lauri Ojansivu 31bf4072d3 Updated translations. 2022-01-03 10:01:19 +02:00
Lauri Ojansivu fbbd3d5174 Updated ChangeLog. 2022-01-03 09:56:35 +02:00
Lauri Ojansivu 65b7d3d50d Merge pull request #4273 from Ben0it-T/user-mentions
Fix user mentions
2022-01-03 07:52:02 +00:00
Ben0it-T 4589c3df15 User mentions now return @username (full name) - part 2 2022-01-02 19:35:47 +01:00
Ben0it-T a160b662ef User mentions now return @username (full name) 2022-01-02 18:44:28 +01:00
Ben0it-T e176410b54 Fix auto-complete username when creating new cards (addCardForm) 2022-01-02 17:22:56 +01:00
Lauri Ojansivu 2ac5f0b2d7 Updated ChangeLog. 2021-12-27 20:42:05 +00:00
Lauri Ojansivu 33f47414bb Added release scripts for starting and stopping services.
Thanks to xet7 !
2021-12-27 20:39:17 +00:00
Lauri Ojansivu fb27ce027c Updated translations. 2021-12-27 16:33:52 +02:00
Lauri Ojansivu ae180c7b85 v5.90 2021-12-26 17:59:38 +02:00
Lauri Ojansivu 95ed3a0ab5 Fix Create Board from Template not opening.
Thanks to Ben0it-T and xet7 !

Related #4263
2021-12-26 17:43:56 +02:00
Lauri Ojansivu dbe0b4922f v5.89 2021-12-26 16:06:12 +02:00
Lauri Ojansivu e69114319f Updated ChangeLog. 2021-12-26 15:57:03 +02:00
Lauri Ojansivu 8db78f8dd4 Updated ChangeLog. 2021-12-26 15:44:35 +02:00
Lauri Ojansivu f2c31f877c Trello api.py: Added additional TODO notes.
Thanks to xet7 !

Related #4261,
related #3950
2021-12-26 15:42:05 +02:00
Lauri Ojansivu a87a591600 Updated ChangeLog. 2021-12-26 15:26:18 +02:00
Lauri Ojansivu 67687110bb Fixed Duplicate board.
Thanks to Ben0it-T and xet7 !

Fixes #4260
2021-12-26 15:24:16 +02:00
Lauri Ojansivu db180fa43e Updated ChangeLog related to Trello api.py .
Thanks to xet7 !

Related #4261,
related #3950
2021-12-26 11:20:57 +02:00
Lauri Ojansivu aff6e361f0 Added api.py for using newest Trello API, to show Trello boards/cards/actions/reactions JSON and download Trello attachments as binary files from S3.
Thanks to xet7 !

Related #4261,
related #3950
2021-12-26 11:16:06 +02:00
Lauri Ojansivu a37856c937 Updated ChangeLog. 2021-12-25 22:05:19 +02:00
Lauri Ojansivu 7f32de3bec Fixed Templates are Missing, Error: Site not Found "/templates" is missing in the URL.
Shared Templates part 5: Make visible Create template board checkbox and templates at All Boards page, In Progress.

Thanks to xet7 !

Fixes #4253,
related #3313
2021-12-25 21:59:43 +02:00
Lauri Ojansivu c46ec4a155 Updated translations. 2021-12-25 21:53:03 +02:00
Lauri Ojansivu 0c38700458 Updated ChangeLog. 2021-12-25 21:35:04 +02:00
Lauri Ojansivu 942065bb29 Merge pull request #4262 from Ben0it-T/fix-getLabels-exception-in-template-helper
Fix getLabels exception in template helper
2021-12-25 21:31:41 +02:00
Ben0it-T 8aa816149f Fix Labels search (Uncaught TypeError: t.name is undefined) 2021-12-25 18:30:41 +01:00
Ben0it-T 27ee16ea1e Fix getLabels exception 2021-12-25 13:34:10 +01:00
Lauri Ojansivu d6b0b0318d Updated translations. 2021-12-25 00:30:18 +02:00
Lauri Ojansivu faf03ae1ce Merge pull request #4259 from jrsupplee/search-debug
Search debug
2021-12-23 21:18:48 +02:00
John Supplee dd3c8394e7 Add i18n of new predicates for debug operator 2021-12-22 23:34:12 +02:00
John Supplee c10f3e97bf Add instructions for searching by team and organization 2021-12-22 23:26:41 +02:00
Lauri Ojansivu ea5b93f97c Updated translations. 2021-12-22 18:50:49 +02:00
Lauri Ojansivu bd08c1a4f1 Merge branch 'master' of github.com:wekan/wekan 2021-12-22 18:47:08 +02:00
Lauri Ojansivu ea17cc8592 Updated ChangeLog. 2021-12-22 18:47:00 +02:00
Lauri Ojansivu d535469163 Merge pull request #4257 from Ben0it-T/update-users.teams.teamDisplayName-users.orgs.orgDisplayName
Edit team/org now update users.teams.teamDisplayName / users.orgs.orgDisplayName
2021-12-22 18:45:05 +02:00
Ben0it-T 349925ad6b be sure user isAdmin 2021-12-22 13:48:37 +01:00
Ben0it-T b876098dc4 Edit team/org DisplayName now update users.teams.teamDisplayName/users.orgs.orgDisplayName 2021-12-22 11:49:50 +01:00
Lauri Ojansivu dc04beb61f Updated dependencies.
Thanks to xet7 !
2021-12-22 05:48:54 +02:00
Lauri Ojansivu 04d8aee86a v5.88 2021-12-22 05:32:20 +02:00
Lauri Ojansivu 8064d203f3 Updated ChangeLog. 2021-12-22 05:22:52 +02:00
Lauri Ojansivu 2fbf411918 Updated translations. 2021-12-22 05:13:26 +02:00
Lauri Ojansivu 1e9695a428 Updated ChangeLog. 2021-12-22 05:08:24 +02:00
Lauri Ojansivu 443b40cff3 Fixed Mermaid Diagram error: Maximum call stack size exceeded.
Thanks to xet7 !

Fixes #4251
2021-12-22 05:04:11 +02:00
Lauri Ojansivu f144f8c90a Updated ChangeLog. 2021-12-22 04:36:22 +02:00
Lauri Ojansivu 998d2f5b44 Part 2: Temporarily remove Mermaid Diagram because even after updating to newest Mermaid it still has bug https://github.com/wekan/wekan/issues/4251
Thanks to xet7 !
2021-12-22 04:34:39 +02:00
Lauri Ojansivu c15c10de97 Updated dependencies. 2021-12-22 04:30:25 +02:00
Lauri Ojansivu 142fa1c73d Updated ChangeLog. 2021-12-22 04:22:04 +02:00
Lauri Ojansivu 23a403644c Temporarily remove Mermaid Diagram because even after updating to newest Mermaid it still has bug https://github.com/wekan/wekan/issues/4251
Thanks to xet7 !
2021-12-22 04:18:52 +02:00
Lauri Ojansivu 89f4cdb7e5 Updated dependencies. 2021-12-22 04:13:33 +02:00
Lauri Ojansivu c650dd2088 Updated ChangeLog. 2021-12-22 01:25:48 +02:00
Lauri Ojansivu 85d51ec403 Updated translations. 2021-12-22 01:20:36 +02:00
Lauri Ojansivu 8804ca84ec Merge pull request #4252 from jrsupplee/search-debug
Search debug
2021-12-22 01:09:38 +02:00
John Supplee aa0dee1fba Bug fix for #3864 searching archived cards and add new operators for organizations and teams 2021-12-22 00:33:13 +02:00
Lauri Ojansivu 27d55a49fb Updated translatins. 2021-12-21 22:19:38 +02:00
John Supplee 6ef612d04e Merge branch 'master' into search-debug 2021-12-21 02:42:54 +02:00
John Supplee 42610d9642 More enhancements to Admin Reports and security fixes
* update Boards Report
* use Boards.userBoards() instead of Boards.find() to make sure user has access permission
2021-12-21 02:39:16 +02:00
John R. Supplee d9c290deda Add Boards Report to Admin Reports 2021-12-20 16:52:18 +02:00
John R. Supplee 49214747cd Add copy to clipboard for debug text and some bug fixes 2021-12-20 14:33:42 +02:00
John Supplee 84d0817894 Merge branch 'master' of https://github.com/wekan/wekan 2021-12-20 10:27:32 +02:00
John Supplee 94525a4d3d Add new debug operator to search and fix some bugs 2021-12-20 10:26:00 +02:00
Lauri Ojansivu 4ded5d2f51 Fixed arm build server paths.
Thanks to xet7 !
2021-12-19 16:12:33 +02:00
Lauri Ojansivu 7f8f3f8f16 v5.87 2021-12-19 15:58:10 +02:00
Lauri Ojansivu 45d7be19b6 Updated ChangeLog. 2021-12-19 15:53:09 +02:00
Lauri Ojansivu 8446640060 Changed Docker base image to ubuntu:rolling .
Thanks to xet7 !
2021-12-19 15:51:46 +02:00
Lauri Ojansivu 184290ce98 v5.86 2021-12-19 15:22:15 +02:00
Lauri Ojansivu 39fb0e4911 Updated ChangeLog. 2021-12-19 14:56:55 +02:00
Lauri Ojansivu 1f65add7b0 Merge pull request #4248 from Ben0it-T/fix-boardadmin-cant-edit-delete-comments
Fix: boardAdmin can't edit or delete others comments on cards #4237
2021-12-19 14:55:06 +02:00
John Supplee 241c3ed8ae Merge branch 'master' of https://github.com/wekan/wekan 2021-12-19 12:18:05 +02:00
Ben0it-T ee2fafb6bc Fix: boardAdmin can't edit or delete others comments on cards #4237 2021-12-18 13:03:37 +01:00
Lauri Ojansivu fee82f7f7a v5.85 2021-12-17 23:40:57 +02:00
Lauri Ojansivu c2340c6508 Updated ChangeLog. 2021-12-17 23:29:24 +02:00
Lauri Ojansivu 5ad9ee1de6 Updated to Node.js v12.22.8. Thanks to Node.js developers. 2021-12-17 23:27:51 +02:00
Lauri Ojansivu ea6551e567 Updated translations. 2021-12-17 23:26:37 +02:00
Lauri Ojansivu 6c9a2319ba Updated ChangeLog. 2021-12-17 23:23:27 +02:00
Lauri Ojansivu e305bf019f Merge pull request #4245 from Emile840/master
fix issue #4222
2021-12-17 23:21:33 +02:00
Emile NDAGIJIMANA 505c2da072 fix issue #4222 2021-12-17 18:56:40 +01:00
Lauri Ojansivu 9085e52446 Updated ChangeLog. 2021-12-15 13:31:26 +02:00
Lauri Ojansivu 9ac5e44a29 Merge pull request #4240 from jghaanstra/master
Fix mobile card details for Modern Dark theme
2021-12-15 13:12:34 +02:00
Jelger Haanstra 3d8e9c8b09 Fix mobile card details for Modern Dark theme 2021-12-15 11:42:49 +01:00
Lauri Ojansivu 5cf352defb v5.84 2021-12-15 00:33:28 +02:00
Lauri Ojansivu 371dd7db9f Updated translations. 2021-12-14 23:52:27 +02:00
Lauri Ojansivu 051de2ea5e Updated ChangeLog. 2021-12-14 23:45:03 +02:00
Lauri Ojansivu 73408c73af Merge pull request #4232 from Ben0it-T/sort_organizations_teams_people
Sort Organizations, Teams and People
2021-12-14 23:44:21 +02:00
Lauri Ojansivu 7079b65cc1 Updated ChangeLog. 2021-12-14 23:43:48 +02:00
Lauri Ojansivu 67676c50ad Merge pull request #4226 from Emile840/master
Add full name if exists in 'email-invite-subject' for user to invite
2021-12-14 23:40:52 +02:00
Lauri Ojansivu e46d10ea4c Updated ChangeLog. 2021-12-14 23:36:31 +02:00
Lauri Ojansivu 331a64f067 Merge pull request #4224 from varac/improve_chart_readme
Add usage docs
2021-12-14 23:35:30 +02:00
Lauri Ojansivu 7f06218877 Updated ChangeLog. 2021-12-14 23:34:51 +02:00
Lauri Ojansivu fc95698953 Merge pull request #4221 from Ben0it-T/master
Fix : Clicking to view Lists or Swimlanes Archive adds temporarily many empty Lists to board
2021-12-14 23:33:52 +02:00
Emile NDAGIJIMANA 2f69501c14 Fix bug regarding non admin users who have an email on a given domain name (field in Admin panel settings) and that can't invite new users for a registration 2021-12-13 19:14:52 +01:00
Ben0it-T 8d2c5a9bbb Board view (sidebar) - sort Organizations and Teams by Display Name (addBoardOrgPopup, addBoardTeamPopup) 2021-12-12 19:07:37 +01:00
Ben0it-T cec05dae47 All boards view (boardsList) - sort Organizations and Teams by Display Name 2021-12-12 18:55:49 +01:00
Ben0it-T 8e6bd81abe People view - sort Organizations and Teams cols 2021-12-12 18:20:59 +01:00
Ben0it-T eb9d44f5f0 People view - sort Organizations and Teams by Display Name (editUserPopup, newUserPopup, modifyTeamsUsers) 2021-12-12 18:10:50 +01:00
Ben0it-T 3a83d48bef Admin Panel - sort Organizations and Teams by Display Name, sort People by username 2021-12-12 17:55:49 +01:00
Emile NDAGIJIMANA 01cd1c0fdc Add full name if exists in 'email-invite-subject' for user to invite 2021-12-09 10:55:47 +01:00
Varac c9ddad5615 Add usage docs 2021-12-08 23:02:42 +01:00
Ben0it-T 9eb6a1d6af Fix : Clicking to view Lists or Swimlanes Archive adds temporarily many empty Lists to board 2021-12-08 06:53:22 +01:00
Lauri Ojansivu 9b22e6da7a Updated ChangeLog. 2021-12-06 18:35:57 +02:00
Lauri Ojansivu 66488b834b Merge pull request #4217 from Emile840/master
Fix legal notice traduction bug when refreshing sign in page
2021-12-06 18:34:54 +02:00
Emile NDAGIJIMANA 8752225409 Fix legal notice traduction bug (when refreshing sign in page, legal notice line was always in english even if a given language isn't english 2021-12-06 15:03:42 +01:00
Lauri Ojansivu 258b31f04a Updated translations. 2021-12-03 14:19:23 +02:00
Lauri Ojansivu 6997dbc6a8 Updated ChangeLog. 2021-12-03 12:23:39 +02:00
Lauri Ojansivu 1c3f42cec1 Update version number. 2021-12-03 12:16:32 +02:00
Lauri Ojansivu fc6c4f85f0 Merge pull request #4208 from varac/kubernetes_1.22
Kubernetes 1.22 support and basic helm test
2021-12-03 12:10:21 +02:00
Lauri Ojansivu 8ad9f2fbea Updated ChangeLog. 2021-12-02 22:17:25 +02:00
Lauri Ojansivu ee5ec45c73 Merge pull request #4203 from mfilser/fix_list_header_title_overlap
List title doesn't overlap with hamburger menu anymore
2021-12-02 22:07:57 +02:00
Varac 710c65a8ae Bump Chart version to 1.1.1 2021-12-01 09:45:42 +01:00
Varac f094dfb84f Add basic helm test
See https://github.com/wekan/charts/pull/2
and https://helm.sh/docs/topics/chart_tests/
2021-12-01 09:42:41 +01:00
Varac b84cc037c1 Support k8s >= 1.22 ingress API
See https://github.com/wekan/charts/pull/1
2021-12-01 09:42:07 +01:00
Martin Filser 7aaa853d1b Edit list title on mobile view uses whole grid layout 2021-11-30 16:26:08 +01:00
Martin Filser e32225e18f Vertical center align list hamburger menu on mobile view 2021-11-30 16:26:08 +01:00
Martin Filser d7f903f3cd Fixed inlined form (title edit) on mobile view 2021-11-30 16:26:08 +01:00
Martin Filser f0ebfb7f58 List header styling on mobile view
- nearly to the same as in desktop view
2021-11-30 16:26:08 +01:00
Martin Filser f660dcaa86 List header menu in the right of "cards count" 2021-11-30 16:26:08 +01:00
Martin Filser daa5de7011 Move list header menu to top
- fix overflow bug if list name is too long
https://github.com/wekan/wekan/pull/4195#issuecomment-981878664
2021-11-30 16:26:08 +01:00
Lauri Ojansivu 2827c0e3ed v5.83 2021-11-30 11:26:03 +02:00
Lauri Ojansivu 00cd8f140c Updated translations. 2021-11-30 11:25:38 +02:00
Lauri Ojansivu 8be1d371cd Updated translations. 2021-11-30 10:39:33 +02:00
Lauri Ojansivu 2252a855dd Updated ChangeLog. 2021-11-29 23:24:00 +02:00
Lauri Ojansivu c1eb175ab8 Merge pull request #4201 from mfilser/fix_dragging_scroll_vertically
Dragging minicards scrolls now vertically at the end of the screen
2021-11-29 23:22:48 +02:00
Martin Filser e7174107e9 Dragging minicards scrolls now vertically at the end of the screen 2021-11-29 22:19:16 +01:00
Lauri Ojansivu 63c838eee9 Updated ChangeLog. 2021-11-29 23:06:40 +02:00
Lauri Ojansivu bd336dddec Updated translations. 2021-11-29 23:06:25 +02:00
Lauri Ojansivu 673e5b1987 Update translations. 2021-11-29 22:58:55 +02:00
Lauri Ojansivu d45bbc2269 Merge pull request #4200 from mfilser/change_delete_checklist_to_popup
Changed delete checklist dialog to a popup
2021-11-29 22:56:37 +02:00
Martin Filser 8884d5b7e0 Changed delete checklist dialog to a popup
- Fixes #4196
- the old "interesting" implementation didn't always show the dialog,
  especially on long and many checklists + on mobiles too. So changing to
  a popup should solve all this issues
2021-11-29 21:19:30 +01:00
Lauri Ojansivu a3b99dd02d v5.82 2021-11-29 21:50:59 +02:00
Lauri Ojansivu e7138772f0 Updated ChangeLog. 2021-11-29 21:45:42 +02:00
Lauri Ojansivu b8a976d4ad Merge pull request #4195 from mfilser/list_header_add_card_to_bottom_of_the_list
List header contains now a button to add the card to the bottom of the list
2021-11-29 21:43:53 +02:00
Lauri Ojansivu ba0fb2d985 Updated ChangeLog. 2021-11-29 21:42:11 +02:00
Lauri Ojansivu ebc7741fcb Revert change from WeKan v5.81: At Sandstorm, every WeKan user is now WeKan Admin and has Admin Panel.
Thank to ocdtrekkie and xet7 !

Related #3423
2021-11-29 21:39:08 +02:00
Lauri Ojansivu d1f8c92a99 v5.81 2021-11-29 20:13:18 +02:00
Lauri Ojansivu 4036abe3c1 Updated ChangeLog. 2021-11-29 19:53:19 +02:00
Lauri Ojansivu 23a2e90f5f At Sandstorm, every WeKan user is now Admin and has Admin Panel. This could help export, board member permissions, etc.
Thanks to PizzaProgram and xet7 !

Fixes #3423
2021-11-29 19:49:11 +02:00
Lauri Ojansivu 5792b21ed1 Updated translations. 2021-11-29 19:41:57 +02:00
Martin Filser 4a4bfef888 Restored padding-left to 4px 2021-11-28 19:49:29 +01:00
Martin Filser a2cefc595e Move "Add card to bottom" to hamburger menu 2021-11-28 17:37:30 +01:00
Martin Filser 892828c02e Restored icon color 2021-11-27 21:52:03 +01:00
Martin Filser 9cf8af0416 Plus and arrow icon as "one icon", no space between them 2021-11-27 21:52:03 +01:00
Martin Filser 2767c444b2 Add arrow up icon in the right of the plus icon 2021-11-27 21:52:03 +01:00
Martin Filser b5ee0649db Changed plus-square icon back to plus icon 2021-11-27 21:52:03 +01:00
Martin Filser a7b7bfafb5 Add arrow down icon in the right of the plus icon
- there isn't a good plus icon which means the card is added at the
  bottom, so i try to use 2 icons for this feature
2021-11-27 11:57:24 +01:00
Martin Filser 861b98ea37 List header contains now a button to add the card to the bottom of the list 2021-11-26 00:24:57 +01:00
John Supplee 52e45211a2 Merge branch 'master' of https://github.com/wekan/wekan 2021-08-08 10:55:20 +02:00
John Supplee cca51628ef Merge branch 'master' of https://github.com/wekan/wekan 2021-07-27 18:13:47 -04:00
John Supplee 506cb696d3 Merge branch 'master' of https://github.com/wekan/wekan 2021-07-26 11:25:27 -04:00
John Supplee a4e02bb8cd Merge branch 'master' of https://github.com/wekan/wekan 2021-07-23 11:14:53 -04:00
John Supplee 6d588130dd Merge branch 'master' of https://github.com/wekan/wekan 2021-07-20 19:25:09 -04:00
John Supplee 0ce2f9ea43 Merge branch 'master' of https://github.com/wekan/wekan 2021-07-20 19:24:40 -04:00
John Supplee 80c4908fcc Merge branch 'master' of https://github.com/wekan/wekan 2021-05-31 13:59:56 -04:00
John Supplee 30a29e23d3 Merge branch 'admin-reports' of supplee.net:wekan
# Conflicts:
#	i18n/en.i18n.json
2021-05-31 13:59:40 -04:00
John R. Supplee 661e80084c Add Cards report 2021-04-17 10:27:16 +02:00
728 changed files with 85387 additions and 43404 deletions

No files matched your search

+36 -11
View File
@@ -1,12 +1,16 @@
FROM quay.io/wekan/ubuntu:groovy-20210115
FROM ubuntu:21.10
LABEL maintainer="sgr"
ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
# 2022-04-25:
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
# so changing to 21.10. https://github.com/wekan/wekan/issues/4488
ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python3 git ca-certificates iproute2"
ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v12.22.7 \
NODE_VERSION=v14.20.0 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -26,6 +30,12 @@ ENV \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
ATTACHMENTS_UPLOAD_MIME_TYPES="" \
ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
AVATARS_UPLOAD_MIME_TYPES="" \
AVATARS_UPLOAD_MAX_SIZE=0 \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
@@ -132,7 +142,16 @@ ENV \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
DEFAULT_WAIT_SPINNER=""
DEFAULT_WAIT_SPINNER="" \
NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
# Install OS
RUN set -o xtrace \
@@ -211,12 +230,6 @@ RUN set -o xtrace \
USER wekan
RUN \
set -o xtrace && \
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
/home/wekan/.meteor/meteor -- help;
RUN \
set -o xtrace && \
# Build app
@@ -229,7 +242,9 @@ RUN \
set -o xtrace && \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w package.json npm-shrinkwrap.json && \
npm install
npm install && \
cd node_modules/fibers && \
node build.js
USER root
# Cleanup
@@ -248,4 +263,14 @@ ENV PORT=3000
EXPOSE $PORT
WORKDIR /home/wekan/app
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
#TODO:
#CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
CMD ["/home/wekan/.meteor/meteor", "run", "--verbose", "--settings", "settings.json"]
+2
View File
@@ -9,4 +9,6 @@ cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/pa
cd .build/bundle/programs/server
rm -rf node_modules
/home/wekan/.meteor/meteor npm install
cd node_modules/fibers
node build.js
cd /home/wekan/app
+4 -2
View File
@@ -3,7 +3,7 @@ version: '3.7'
services:
wekandb-dev:
image: mongo:4.4
image: mongo:5.0
container_name: wekan-dev-db
restart: unless-stopped
command: mongod --oplogSize 128
@@ -33,14 +33,16 @@ services:
- WITH_API=true
- RICHER_CARD_COMMENT_EDITOR=true
- BROWSER_POLICY_ENABLED=true
- WRITABLE_PATH=/data
depends_on:
- wekandb-dev
volumes:
- /etc/localtime:/etc/localtime:ro
- ./volumes/data:/data
- ../client:/home/wekan/app/client
- ../models:/home/wekan/app/models
- ../config:/home/wekan/app/config
- ../i18n:/home/wekan/app/i18n
- ../imports:/home/wekan/app/imports
- ../server:/home/wekan/app/server
- ../public:/home/wekan/app/public
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.7
node-engine: 14.20.0
node-packages:
- node-gyp
- node-pre-gyp
+155
View File
@@ -0,0 +1,155 @@
name: wekan
version: git
summary: The open-source kanban
description: |
Wekan is an open-source and collaborative kanban board application.
Whether you’re maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Depending on target environment, some configuration settings might need to be adjusted.
For full list of configuration options call:
$ wekan.help
confinement: strict
grade: stable
base: core18
architectures:
- amd64
plugs:
mongodb-plug:
interface: content
target: $SNAP_DATA/shared
hooks:
configure:
plugs:
- network
- network-bind
slots:
mongodb-slot:
interface: content
write:
- $SNAP_DATA/share
apps:
wekan:
command: wekan-control
daemon: simple
plugs: [network, network-bind]
mongodb:
command: mongodb-control
daemon: simple
plugs: [network, network-bind]
caddy:
command: caddy-control
daemon: simple
plugs: [network, network-bind]
help:
command: wekan-help
database-backup:
command: mongodb-backup
plugs: [network, network-bind]
database-list-backups:
command: ls -al $SNAP_COMMON/db-backups/
database-restore:
command: mongodb-restore
plugs: [network, network-bind]
parts:
mongodb:
source: https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.2/multiverse/binary-amd64/mongodb-org-server_4.2.2_amd64.deb
#https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.14.tgz
#https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.22.tgz
plugin: dump
stage-packages: [libssl1.0.0, libcurl3]
filesets:
mongo:
- usr
- bin
- lib
stage:
- $mongo
prime:
- $mongo
wekan:
source: .
plugin: nodejs
node-engine: 14.19.0
node-packages:
- node-gyp
- node-pre-gyp
- fibers
build-packages:
- ca-certificates
- apt-utils
- build-essential
- python
- python3
- g++
- capnproto
- curl
- libcurl3
- execstack
- nodejs
- npm
stage-packages:
- libfontconfig1
override-build: |
echo "Cleaning environment first"
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
rm -rf .build
echo "Installing meteor"
curl https://install.meteor.com/ -o install_meteor.sh
chmod +x install_meteor.sh
sh install_meteor.sh
rm install_meteor.sh
rm -rf .build
meteor add standard-minifier-js --allow-superuser
meteor npm install --allow-superuser
meteor npm install --allow-superuser --save babel-runtime
meteor build .build --directory --allow-superuser
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
cd .build/bundle/programs/server
npm install
npm install --allow-superuser --save babel-runtime
# Change back to Wekan source directory
cd ../../../..
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
organize:
README: README.wekan
prime:
- -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp
helpers:
source: snap-src
plugin: dump
caddy:
plugin: dump
source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off
source-type: tar
organize:
caddy: bin/caddy
CHANGES.txt: CADDY_CHANGES.txt
EULA.txt: CADDY_EULA.txt
LICENSES.txt: CADDY_LICENSES.txt
README.txt: CADDY_README.txt
stage:
- -init
+93 -65
View File
@@ -1,8 +1,9 @@
name: wekan
version: git
summary: The open-source kanban
version: '6.21'
base: core20
summary: Open Source kanban
description: |
Wekan is an open-source and collaborative kanban board application.
WeKan ® is an Open Source and collaborative kanban board application.
Whether you’re maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Depending on target environment, some configuration settings might need to be adjusted.
@@ -11,10 +12,19 @@ description: |
confinement: strict
grade: stable
base: core18
architectures:
- amd64
- build-on: amd64
run-on: amd64
- build-on: arm64
run-on: arm64
- build-on: ppc64el
run-on: ppc64el
- build-on: s390x
run-on: s390x
plugs:
mongodb-plug:
@@ -37,12 +47,14 @@ apps:
wekan:
command: wekan-control
daemon: simple
plugs: [network, network-bind]
plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control]
restart-condition: on-failure
mongodb:
command: mongodb-control
daemon: simple
plugs: [network, network-bind]
plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control]
restart-condition: on-failure
caddy:
command: caddy-control
@@ -54,22 +66,27 @@ apps:
database-backup:
command: mongodb-backup
plugs: [network, network-bind]
plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control]
database-list-backups:
command: ls -al $SNAP_COMMON/db-backups/
database-restore:
command: mongodb-restore
plugs: [network, network-bind]
plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control]
parts:
mongodb:
source: https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.2/multiverse/binary-amd64/mongodb-org-server_4.2.2_amd64.deb
#https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.14.tgz
#https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.22.tgz
plugin: dump
stage-packages: [libssl1.0.0, libcurl3]
source:
- on amd64: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-amd64/mongodb-org-server_4.4.13_amd64.deb
- on arm64: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-arm64/mongodb-org-server_4.4.13_arm64.deb
- on ppc64el: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-ppc64el/mongodb-org-server_4.4.13_ppc64el.deb
- on s390x: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-s390x/mongodb-org-server_4.4.13_s390x.deb
stage-packages:
- libssl1.1
- libcurl3-dev
- libcurl4-openssl-dev
filesets:
mongo:
- usr
@@ -81,61 +98,46 @@ parts:
- $mongo
wekan:
source: .
plugin: nodejs
node-engine: 12.22.7
node-packages:
- node-gyp
- node-pre-gyp
- fibers
build-packages:
- ca-certificates
- apt-utils
- build-essential
- python
- python3
- g++
- capnproto
- curl
- libcurl3
- execstack
- nodejs
- npm
stage-packages:
- libfontconfig1
#plugin: npm
plugin: dump
source:
# Fixed URLs to some allowed GitHub releases URL.
# Non-GitHub build server file urls are not allowed at 2022-03-02 and later.
- on amd64: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-amd64.zip
- on arm64: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-arm64.zip
- on ppc64el: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-ppc64el.zip
- on s390x: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-s390x.zip
# npm-node-version: 14.19.1
# node-packages:
# - node-gyp
# - node-pre-gyp
# - fibers
# build-packages:
# - npm
# - build-essential
# - ca-certificates
# - apt-utils
# - python
# - python3
# - g++
# - capnproto
# - curl
# - execstack
# - nodejs
# - npm
# - p7zip-full
# stage-packages:
# - libfontconfig1
override-build: |
echo "Cleaning environment first"
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
rm -rf .build
echo "Installing meteor"
curl https://install.meteor.com/ -o install_meteor.sh
chmod +x install_meteor.sh
sh install_meteor.sh
rm install_meteor.sh
rm -rf .build
meteor add standard-minifier-js --allow-superuser
meteor npm install --allow-superuser
meteor npm install --allow-superuser --save babel-runtime
meteor build .build --directory --allow-superuser
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
cd .build/bundle/programs/server
npm install
npm install --allow-superuser --save babel-runtime
# Change back to Wekan source directory
cd ../../../..
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
cp -r bundle/* $SNAPCRAFT_PART_INSTALL/
cp bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
snapcraftctl build
organize:
README: README.wekan
prime:
- -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp
- -lib/node_modules/weka*
helpers:
source: snap-src
@@ -143,8 +145,34 @@ parts:
caddy:
plugin: dump
source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off
source-type: tar
## Caddy v1 is not developed anymore. TODO: Sometime migrate to Caddy v2.
## https://caddy.community/t/caddyfile-v1-adapter/9129
## https://github.com/caddyserver/caddy/tree/v1
#source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off
#source-type: tar
# Using last working binary that was downloaded from above URL to Wekan Snap,
# and .txt files from https://github.com/caddyserver/caddy/tree/v1/dist
source: https://wekan.github.io/caddy-v1-linux-amd64.7z
source-type: 7z
organize:
caddy: bin/caddy
CHANGES.txt: CADDY_CHANGES.txt
EULA.txt: CADDY_EULA.txt
LICENSES.txt: CADDY_LICENSES.txt
README.txt: CADDY_README.txt
stage:
- -init
caddy2:
plugin: dump
source:
# Fixed URLs to some allowed GitHub releases URL.
# Non-GitHub build server file urls are not allowed at 2022-03-02 and later.
- on amd64: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-amd64.zip
- on arm64: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-arm64.zip
- on ppc64el: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-ppc64el.zip
- on s390x: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-s390x.zip
source-type: zip
organize:
caddy: bin/caddy
CHANGES.txt: CADDY_CHANGES.txt
+23 -25
View File
@@ -1,37 +1,35 @@
## Issue
<!--
**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest WeKan ® before reporting an issue.
Please search existing Open and Closed issues, most questions have already been answered.
**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to newest WeKan ® before adding new issue !!
- We get too many duplicate reports of already fixed bugs. Newest WeKan ® has newest bugfixes and security fixes.
- Please search existing Open and Closed issues, most questions have already been answered many times.
If you can not login for any reason: https://github.com/wekan/wekan/wiki/Forgot-Password
Email settings, only SMTP MAIL_URL and MAIL_FROM are in use: https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
If you can not login for any reason:
- https://github.com/wekan/wekan/wiki/Forgot-Password
Email settings, only SMTP MAIL_URL and MAIL_FROM are in use:
- https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
Add these issues to elsewhere:
The following types of issues should be reported separately:
- SECURITY ISSUES: https://github.com/wekan/wekan/blob/master/SECURITY.md
- UCS: https://github.com/wekan/univention/issues
-->
Other Wekan issues can be added here.
**Server Setup Information**:
* Note: Please anonymize info, and do not add to this public issue any of your Wekan board URLs, passwords, API tokens etc, do you understand?:
### Server Setup Information
<!-- Please anonymize info, and do not any of your Wekan board URLs, passwords, API tokens etc to this public issue. -->
* Did you test in newest Wekan?:
* For new Wekan install, did you configure root-url correctly so Wekan cards open correctly https://github.com/wekan/wekan/wiki/Settings ?
* Did you configure root-url correctly so Wekan cards open correctly (see https://github.com/wekan/wekan/wiki/Settings)?
* Operating System:
* Deployment Method(Snap/Docker/Sandstorm/bundle/source):
* Deployment Method (Snap/Docker/Sandstorm/bundle/source):
* Http frontend if any (Caddy, Nginx, Apache, see config examples from Wekan GitHub wiki first):
* Node.js Version:
* MongoDB Version:
* Wekan works on newest desktop and mobile webbrowsers that support Javascript. What webbrowser version are you using?
* What webbrowser version are you using (Wekan should work on all modern browsers that support Javascript)?
**Problem description**:
- *REQUIRED: Add recorded animated gif about how it works currently, and screenshot mockups how it should work. Use peek to record animgif in Linux https://github.com/phw/peek*
- *Explain steps how to reproduce*
- *In webbrowser, what does show Right Click / Inspect / Console ? Chrome shows more detailed info than Firefox.*
- *If using Snap, what does show command `sudo snap logs wekan.wekan` ? Please anonymize logs.*
- *If using Docker, what does show command `sudo docker logs wekan-app` ? Please anonymize logs.*
- *If logs are very long, attach them in .zip file*
### Problem description
<!-- Add a recorded animated gif (e.g. with https://github.com/phw/peek) about how it works currently, and screenshot mockups how it should work. -->
#### Reproduction Steps
#### Logs
<!-- Check Right Click>Inspect>Console in you browser - generally Chrome shows more detailed info than Firefox. -->
<!-- Please anonymize logs.
Snap: sudo snap logs wekan.wekan
Docker: sudo docker logs wekan-app
If logs are very long, attach them in .zip file -->
+6
View File
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
+11 -4
View File
@@ -9,8 +9,15 @@ on:
schedule:
- cron: '0 16 * * 3'
permissions:
contents: read
jobs:
analyze:
permissions:
actions: read # for github/codeql-action/init to get workflow details
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/autobuild to send a status report
name: Analyze
runs-on: ubuntu-latest
@@ -25,7 +32,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@@ -38,14 +45,14 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
uses: github/codeql-action/autobuild@v2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -59,4 +66,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2
+14
View File
@@ -0,0 +1,14 @@
name: 'Dependency Review'
on: [pull_request]
permissions:
contents: read
jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v3
- name: 'Dependency Review'
uses: actions/dependency-review-action@v2
+4 -4
View File
@@ -32,13 +32,13 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -48,14 +48,14 @@ jobs:
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
uses: docker/metadata-action@69f6fc9d46f2f8bf0d5491e4aabe0bb8c6a4678a
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
uses: docker/build-push-action@c84f38281176d4c9cdb1626ffafcd6b3911b5d94
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
+4 -1
View File
@@ -5,6 +5,9 @@ on:
branches:
- master
permissions:
contents: read
jobs:
build:
@@ -12,6 +15,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v3
- name: Build the Docker image
run: docker build . --file Dockerfile --tag wekan:$(date +%s)
+7 -2
View File
@@ -5,12 +5,17 @@ on:
branches:
- master
permissions:
contents: read
jobs:
release:
permissions:
contents: write # for helm/chart-releaser-action to push chart release and create a release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
fetch-depth: 0
@@ -20,6 +25,6 @@ jobs:
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.1.0
uses: helm/chart-releaser-action@v1.4.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+12 -12
View File
@@ -15,7 +15,7 @@ jobs:
# runs-on: ubuntu-latest
# steps:
# - name: checkout
# uses: actions/checkout@v2
# uses: actions/checkout@v3
#
# - name: setup node
# uses: actions/setup-node@v1
@@ -39,7 +39,7 @@ jobs:
# needs: [lintcode]
# steps:
# - name: checkout
# uses: actions/checkout@v2
# uses: actions/checkout@v3
#
# - name: setup node
# uses: actions/setup-node@v1
@@ -62,7 +62,7 @@ jobs:
# needs: [lintcode,lintstyle]
# steps:
# - name: checkout
# uses: actions/checkout@v2
# uses: actions/checkout@v3
#
# - name: setup node
# uses: actions/setup-node@v1
@@ -87,12 +87,12 @@ jobs:
# CHECKOUTS
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
# CACHING
- name: Install Meteor
id: cache-meteor-install
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ~/.meteor
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
@@ -101,7 +101,7 @@ jobs:
- name: Cache NPM dependencies
id: cache-meteor-npm
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ~/.npm
key: v1-npm-${{ hashFiles('package-lock.json') }}
@@ -110,7 +110,7 @@ jobs:
- name: Cache Meteor build
id: cache-meteor-build
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
.meteor/local/resolver-result-cache.json
@@ -118,7 +118,7 @@ jobs:
.meteor/local/isopacks
.meteor/local/bundler-cache/scanner
key: v1-meteor_build_cache-${{ github.ref }}-${{ github.sha }}
restore-key: |
restore-keys: |
v1-meteor_build_cache-
- name: Setup meteor
@@ -133,7 +133,7 @@ jobs:
run: sh ./test-wekan.sh -cv
- name: Upload coverage
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: coverage-folder
path: .coverage/
@@ -144,17 +144,17 @@ jobs:
needs: [tests]
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Download coverage
uses: actions/download-artifact@v2
uses: actions/download-artifact@v3
with:
name: coverage-folder
path: .coverage/
- name: Coverage Report
uses: VeryGoodOpenSource/very_good_coverage@v1.1.1
uses: VeryGoodOpenSource/very_good_coverage@v1.2.1
with:
path: ".coverage/lcov.info"
min_coverage: 1 # TODO add tests and increase to 95!
+2 -1
View File
@@ -1,5 +1,5 @@
*~
*.swp
*.sw*
.meteor-spk
*.sublime-workspace
tmp/
@@ -38,3 +38,4 @@ ehthumbs.db
# Helm chart
# Chart dependencies
/helm/wekan/**/*.tgz
/helm/wekan/charts
+31 -35
View File
@@ -3,12 +3,11 @@
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
meteor-base@1.4.0
meteor-base@1.5.1
# Build system
ecmascript@0.15.1
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
ecmascript@0.16.2
standard-minifier-js@2.8.0
mquandalle:jade
coffeescript@2.4.1!
@@ -17,22 +16,25 @@ es5-shim@4.8.0
# Collections
aldeed:collection2
wekan-cfs-standard-packages
cfs:standard-packages
cottz:publish-relations
dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
mongo@1.11.0
easy:search
mongo@1.15.0
mquandalle:collection-mutations
# Account system
kenton:accounts-sandstorm
service-configuration@1.0.11
useraccounts:unstyled
accounts-password@2.3.1
useraccounts:core
useraccounts:flow-routing
useraccounts:unstyled
simple:rest-accounts-password
wekan-ldap
wekan-accounts-cas
wekan-accounts-sandstorm
wekan-accounts-lockout
wekan-oidc
wekan-accounts-oidc
# Utilities
@@ -43,7 +45,6 @@ reactive-dict@1.3.0
session@1.2.0
tracker@1.2.0
underscore@1.0.10
3stack:presence
arillo:flow-router-helpers
audit-argument-checks@1.0.7
kadira:blaze-layout
@@ -51,46 +52,36 @@ kadira:dochead
mquandalle:autofocus
ongoworks:speakingurl
raix:handlebar-helpers
tap:i18n
http@1.4.2
http@2.0.0! # force new http package
# UI components
blaze
ostrio:i18n
reactive-var@1.0.11
fortawesome:fontawesome
mousetrap:mousetrap
mquandalle:jquery-textcomplete
mquandalle:mousetrap-bindglobal
peerlibrary:blaze-components@=0.15.1
peerlibrary:blaze-components
templates:tabs
meteor-autosize
simple:json-routes
rajit:bootstrap3-datepicker
shell-server@0.5.0
simple:rest-accounts-password
useraccounts:core
email@2.0.0
email@2.2.1
horka:swipebox
dynamic-import@0.6.0
accounts-password@1.7.0
wekan-cfs-gridfs
dynamic-import@0.7.2
cfs:gridfs
rzymek:fullcalendar
momentjs:moment@2.22.2
browser-policy-framing@1.1.0
mquandalle:moment
msavin:usercache
# Keep stylus in 1.1.0, because building v2 takes extra 52 minutes.
coagmano:stylus@1.1.0!
meteorhacks:subs-manager
meteorhacks:picker
lamhieu:unblock
meteorhacks:aggregate@1.3.0
wekan-markdown
konecty:mongo-counter
percolate:synced-cron
wekan-cfs-filesystem
steffo:meteor-accounts-saml
cfs:filesystem
ostrio:cookies
ostrio:files@2.3.0
rajit:bootstrap3-datepicker-fi
rajit:bootstrap3-datepicker-ar
rajit:bootstrap3-datepicker-bg
@@ -139,10 +130,15 @@ rajit:bootstrap3-datepicker-uk
rajit:bootstrap3-datepicker-vi
rajit:bootstrap3-datepicker-zh-cn
rajit:bootstrap3-datepicker-zh-tw
staringatlights:fast-render
spacebars
easylogic:summernote
pascoual:pdfkit
wekan-accounts-lockout
lmieulet:meteor-coverage
meteortesting:mocha
meteortesting:mocha@2.0.3
aldeed:simple-schema
matb33:collection-hooks
simple:json-routes
kadira:flow-router
spacebars
service-configuration@1.3.0
communitypackages:picker
minifier-css
+1 -1
View File
@@ -1 +1 @@
METEOR@2.2
METEOR@2.7.3
+91 -106
View File
@@ -1,61 +1,76 @@
3stack:presence@1.1.2
accounts-base@1.9.0
accounts-oauth@1.2.0
accounts-password@1.7.1
accounts-base@2.2.4
accounts-oauth@1.4.1
accounts-password@2.3.1
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
aldeed:schema-index@1.1.1
aldeed:simple-schema@1.5.4
allow-deny@1.1.0
allow-deny@1.1.1
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.7.0
babel-compiler@7.6.1
babel-runtime@1.5.0
autoupdate@1.8.0
babel-compiler@7.9.2
babel-runtime@1.5.1
base64@1.0.12
binary-heap@1.0.11
blaze@2.5.0
blaze-tools@1.1.2
blaze@2.6.1
blaze-tools@1.1.3
boilerplate-generator@1.7.1
browser-policy-common@1.0.11
browser-policy-framing@1.1.0
caching-compiler@1.2.2
caching-html-compiler@1.2.0
callback-hook@1.3.0
caching-html-compiler@1.2.1
callback-hook@1.4.0
cfs:access-point@0.1.49
cfs:base-package@0.0.30
cfs:collection@0.5.5
cfs:collection-filters@0.2.4
cfs:data-man@0.0.6
cfs:file@0.1.17
cfs:filesystem@0.1.2
cfs:gridfs@0.0.34
cfs:http-methods@0.0.32
cfs:http-publish@0.0.13
cfs:power-queue@0.9.11
cfs:reactive-list@0.0.9
cfs:reactive-property@0.0.4
cfs:standard-packages@0.5.10
cfs:storage-adapter@0.2.4
cfs:tempstore@0.1.6
cfs:upload-http@0.0.20
cfs:worker@0.1.5
check@1.3.1
chuangbo:cookie@1.1.0
coagmano:stylus@1.1.0
coffeescript@2.4.1
coffeescript-compiler@2.4.1
communitypackages:picker@1.1.0
cottz:publish-relations@2.0.8
dburles:collection-helpers@1.1.0
ddp@1.4.0
ddp-client@2.4.1
ddp-client@2.5.0
ddp-common@1.4.0
ddp-rate-limiter@1.0.9
ddp-server@2.3.3
ddp-rate-limiter@1.1.0
ddp-server@2.5.0
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.6.0
dynamic-import@0.7.2
easy:search@2.2.1
easylogic:summernote@0.8.8
ecmascript@0.15.1
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.11.1
ecmascript-runtime-server@0.10.1
ejson@1.1.1
email@2.0.0
easysearch:components@2.2.2
easysearch:core@2.2.2
ecmascript@0.16.2
ecmascript-runtime@0.8.0
ecmascript-runtime-client@0.12.1
ecmascript-runtime-server@0.11.0
ejson@1.1.2
email@2.2.1
es5-shim@4.8.0
fastclick@1.0.13
fetch@0.1.1
fortawesome:fontawesome@4.7.0
geojson-utils@1.0.10
horka:swipebox@1.0.2
hot-code-push@1.0.4
html-tools@1.1.2
html-tools@1.1.3
htmljs@1.1.1
http@1.4.4
http@2.0.0
id-map@1.1.1
idmontie:migrations@1.0.3
inter-process-messaging@0.1.1
@@ -63,41 +78,33 @@ jquery@1.11.11
kadira:blaze-layout@2.3.0
kadira:dochead@1.5.0
kadira:flow-router@2.12.1
kenton:accounts-sandstorm@0.7.0
konecty:mongo-counter@0.0.5_3
lamhieu:meteorx@2.1.1
lamhieu:unblock@1.0.0
launch-screen@1.2.1
livedata@1.0.18
lmieulet:meteor-coverage@3.2.0
lmieulet:meteor-coverage@1.1.4
localstorage@1.2.0
logging@1.2.0
matb33:collection-hooks@0.9.1
matteodem:easy-search@1.6.4
logging@1.3.1
matb33:collection-hooks@1.1.4
mdg:validation-error@0.5.1
meteor@1.9.3
meteor@1.10.0
meteor-autosize@5.0.1
meteor-base@1.4.0
meteor-platform@1.2.6
meteor-base@1.5.1
meteorhacks:aggregate@1.3.0
meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
meteortesting:browser-tests@1.3.4
meteortesting:mocha@2.0.1
meteortesting:browser-tests@1.3.5
meteortesting:mocha@2.0.3
meteortesting:mocha-core@8.0.1
minifier-css@1.5.4
minifier-js@2.6.0
minifier-css@1.6.1
minifier-js@2.7.5
minifiers@1.1.8-faster-rebuild.0
minimongo@1.6.2
mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.16.0
modules-runtime@0.12.0
momentjs:moment@2.29.1
mongo@1.11.1
mongo-decimal@0.1.2
minimongo@1.8.0
modern-browsers@0.1.8
modules@0.18.0
modules-runtime@0.13.0
momentjs:moment@2.29.3
mongo@1.15.0
mongo-decimal@0.1.3
mongo-dev-server@1.1.0
mongo-id@1.0.8
mongo-livedata@1.0.12
@@ -107,24 +114,27 @@ mquandalle:collection-mutations@0.1.0
mquandalle:jade@0.4.9
mquandalle:jade-compiler@0.4.5
mquandalle:jquery-textcomplete@0.8.0_1
mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1
msavin:usercache@1.8.0
npm-bcrypt@0.9.4
npm-mongo@3.9.0
oauth@1.3.2
oauth2@1.3.0
observe-sequence@1.0.16
npm-mongo@4.3.1
oauth@2.1.2
oauth2@1.3.1
observe-sequence@1.0.20
ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
ostrio:cookies@2.7.2
ostrio:cstorage@4.0.1
ostrio:files@2.3.0
ostrio:i18n@3.2.0
pascoual:pdfkit@1.0.7
peerlibrary:assert@0.3.0
peerlibrary:base-component@0.16.0
peerlibrary:blaze-components@0.15.1
peerlibrary:base-component@0.17.1
peerlibrary:blaze-components@0.23.0
peerlibrary:computed-field@0.10.0
peerlibrary:data-lookup@0.3.0
peerlibrary:reactive-field@0.6.0
percolate:synced-cron@1.3.2
promise@0.11.2
promise@0.12.0
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
rajit:bootstrap3-datepicker@1.7.1_1
@@ -178,70 +188,45 @@ 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
react-fast-refresh@0.1.1
react-fast-refresh@0.2.3
reactive-dict@1.3.0
reactive-var@1.0.11
reload@1.3.1
retry@1.1.0
routepolicy@1.1.0
routepolicy@1.1.1
rzymek:fullcalendar@3.8.0
server-render@0.3.1
service-configuration@1.0.11
service-configuration@1.3.0
session@1.2.0
sha@1.0.9
shell-server@0.5.0
simple:authenticate-user-by-token@1.0.1
simple:json-routes@2.1.0
simple:rest-accounts-password@1.1.2
simple:rest-bearer-token-parser@1.0.1
simple:rest-json-error-handler@1.0.1
socket-stream-client@0.3.3
softwarerero:accounts-t9n@1.3.11
spacebars@1.2.0
spacebars-compiler@1.2.1
srp@1.1.0
standard-minifier-css@1.7.2
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
simple:authenticate-user-by-token@1.2.1
simple:json-routes@2.3.1
simple:rest-accounts-password@1.2.1
simple:rest-bearer-token-parser@1.1.1
simple:rest-json-error-handler@1.1.1
socket-stream-client@0.5.0
spacebars@1.3.0
spacebars-compiler@1.3.1
standard-minifier-js@2.8.1
templates:tabs@2.3.0
templating@1.4.0
templating@1.4.1
templating-compiler@1.4.1
templating-runtime@1.4.0
templating-tools@1.2.0
templating-runtime@1.5.0
templating-tools@1.2.2
tracker@1.2.0
twbs:bootstrap@3.3.6
ui@1.0.13
underscore@1.0.10
url@1.3.2
useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:core@1.16.2
useraccounts:flow-routing@1.15.0
useraccounts:unstyled@1.14.2
webapp@1.10.1
webapp@1.13.1
webapp-hashing@1.1.0
wekan-accounts-cas@0.1.0
wekan-accounts-lockout@1.0.0
wekan-accounts-oidc@1.0.10
wekan-cfs-access-point@0.1.50
wekan-cfs-base-package@0.0.30
wekan-cfs-collection@0.5.5
wekan-cfs-collection-filters@0.2.4
wekan-cfs-data-man@0.0.6
wekan-cfs-file@0.1.17
wekan-cfs-filesystem@0.1.2
wekan-cfs-gridfs@0.0.34
wekan-cfs-http-methods@0.0.32
wekan-cfs-http-publish@0.0.13
wekan-cfs-power-queue@0.9.11
wekan-cfs-reactive-list@0.0.9
wekan-cfs-reactive-property@0.0.4
wekan-cfs-standard-packages@0.5.10
wekan-cfs-storage-adapter@0.2.4
wekan-cfs-tempstore@0.1.6
wekan-cfs-upload-http@0.0.21
wekan-cfs-worker@0.1.5
wekan-accounts-sandstorm@0.8.0
wekan-ldap@0.0.2
wekan-markdown@1.0.9
wekan-oidc@1.0.12
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.22.7
TRAVIS_NODE_VERSION: 14.20.0
TRAVIS_NPM_VERSION: latest
before_install:
+2 -2
View File
@@ -39,10 +39,10 @@ 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 = ar_EG:ar-EG, bg_BG:bg, de_AT:de-AT, de_CH:de-CH, en_DE:en-DE, en_IT:en-IT, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el-GR, fa_IR:fa-IR, fi_FI:fi, fr_FR:fr-FR, fr_CH:fr-CH, gu_IN:gu-IN, hi_IN:hi-IN, hu_HU:hu, id_ID:id, mn_MN:mn, ms_MY:ms-MY, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK
lang_map = ar_DZ:ar-DZ, ar_EG:ar-EG, az_AZ:az-AZ, az@latin:az-LA, bg_BG:bg, cs_CZ:cs-CZ, cy_GB:cy-GB, de_AT:de-AT, de_CH:de-CH, en_BR:en-BR, en_DE:en-DE, en_IT:en-IT, en_GB:en-GB, en_MY:en-MY, et_EE:et-EE, ast_ES:ast-ES, es_AR:es-AR, en@ysv:en-YS, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el-GR, fa_IR:fa-IR, ja-Hira:ja-HI, ja_JP:ja, fi_FI:fi, fr_FR:fr-FR, fr_CH:fr-CH, fy_NL:fy-NL, gl_ES:gl-ES, gu_IN:gu-IN, he_IL:he-IL, hi_IN:hi-IN, hu_HU:hu, id_ID:id, mn_MN:mn, ms_MY:ms-MY, nl_NL:nl-NL, ko_KR:ko-KR, lv_LV:lv, pl_PL:pl-PL, pt_BR:pt-BR, ro_RO:ro, ru_UA:ru-UA, sl_SI:sl, uk_UA:uk-UA, uz@Arab:uz-AR, uz@Latn:uz-LA, uz_UZ:uz-UZ, vec:ve-CC, vep:ve-PP, vls:vl-SS, war:wa-RR, vi_VN:vi-VN, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK, zu_ZA:zu-ZA
[wekan.application]
file_filter = i18n/<lang>.i18n.json
file_filter = imports/i18n/data/<lang>.i18n.json
source_lang = en
type = KEYVALUEJSON
+17
View File
@@ -17,6 +17,23 @@
"outputCapture": "std",
"port": 9229,
"timeout": 60000
},
{
"type": "node",
"request": "launch",
"name": "Test: Node",
"runtimeExecutable": "meteor",
"runtimeArgs": [
"test",
"--inspect-brk=9229",
"--port=4040",
"--exclude-archs=web.browser.legacy,web.cordova",
"--driver-package=meteortesting:mocha",
"--settings=settings.json"
],
"outputCapture": "std",
"port": 9229,
"timeout": 60000
}
],
"compounds": [
+1292 -4
View File
File diff suppressed because it is too large. Load diff
+48 -103
View File
@@ -1,6 +1,15 @@
FROM quay.io/wekan/ubuntu:impish-20211102
FROM --platform=linux/amd64 ubuntu:22.04 as wekan
LABEL maintainer="wekan"
# 2022-09-04:
# - above "--platform=linux/amd64 ubuntu:22.04 as wekan" is needed to build Dockerfile
# correctly on Mac M1 etc, to not get this error:
# https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc
# 2022-04-25:
# - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling,
# so changing to 21.10. https://github.com/wekan/wekan/issues/4488
# 2021-09-18:
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
# to Quay to avoid Docker Hub rate limits.
@@ -12,8 +21,8 @@ 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.22.7 \
METEOR_RELEASE=1.10.2 \
NODE_VERSION=v14.20.0 \
METEOR_RELEASE=2.7.3 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
@@ -29,9 +38,14 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \
ATTACHMENTS_UPLOAD_MIME_TYPES="" \
ATTACHMENTS_UPLOAD_MAX_SIZE=0 \
AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \
AVATARS_UPLOAD_MIME_TYPES="" \
AVATARS_UPLOAD_MAX_SIZE=0 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
MAX_IMAGE_PIXEL="" \
IMAGE_COMPRESS_RATIO="" \
NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \
@@ -47,6 +61,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OIDC_REDIRECTION_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
@@ -140,7 +155,15 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
ORACLE_OIM_ENABLED=false \
WAIT_SPINNER=""
WAIT_SPINNER="" \
NODE_OPTIONS="--max_old_space_size=4096" \
WRITABLE_PATH=/data
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------------------------------
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
@@ -152,7 +175,6 @@ RUN \
\
# OS dependencies
apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
#pip3 install -U pip setuptools wheel && \
\
# Meteor installer doesn't work with the default tar binary, so using bsdtar while installing.
# https://github.com/coreos/bugs/issues/1095#issuecomment-350574389
@@ -163,43 +185,9 @@ RUN \
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
#---------------------------------------------------------------------------------------------
# Node Fibers 100% CPU usage issue:
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
# https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
# https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
# Also see beginning of wekan/server/authentication.js
# import Fiber from "fibers";
# Fiber.poolSize = 1e9;
# OLD: Download node version 8.12.0 prerelease that has fix included, => Official 8.12.0 has been released
# Description at https://releases.wekan.team/node.txt
#wget https://releases.wekan.team/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
#echo "1ed54adb8497ad8967075a0b5d03dd5d0a502be43d4a4d84e5af489c613d7795 node-v8.12.0-linux-x64.tar.gz" >> SHASUMS256.txt.asc && \
\
# Verify nodejs authenticity
grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
#export GNUPGHOME="$(mktemp -d)" && \
#\
# Try other key servers if ha.pool.sks-keyservers.net is unreachable
# Code from https://github.com/chorrell/docker-node/commit/2b673e17547c34f17f24553db02beefbac98d23c
# gpg keys listed at https://github.com/nodejs/node#release-team
# and keys listed here from previous version of this Dockerfile
#for key in \
#9554F04D7259F04124DE6B476D5A82AC7E37093B \
#94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
#FD3A5288F042B6850C66B31F09FE44734EB7990E \
#71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
#DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
#C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
#B9AE9905FFD7803F25714661B63B535A4C206CA9 \
#; do \
#gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \
#gpg --keyserver pgp.mit.edu --recv-keys "$key" || \
#gpg --keyserver keyserver.pgp.com --recv-keys "$key" ; \
#done && \
#gpg --verify SHASUMS256.txt.asc && \
# Ignore socket files then delete files then delete directories
#find "$GNUPGHOME" -type f | xargs rm -f && \
#find "$GNUPGHOME" -type d | xargs rm -fR && \
rm -f SHASUMS256.txt.asc && \
\
# Install Node
@@ -208,7 +196,7 @@ RUN \
mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
ln -s /opt/nodejs/bin/node /usr/bin/node && \
ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/8.16.1 /home/wekan/.config && \
mkdir -p /opt/nodejs/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config && \
chown wekan --recursive /home/wekan/.config && \
\
#DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
@@ -216,89 +204,32 @@ RUN \
\
# Install Node dependencies. Python path for node-gyp.
npm install -g npm@${NPM_VERSION} && \
#npm config set python python2.7 && \
#npm install -g node-gyp && \
#npm install -g fibers@${FIBERS_VERSION} && \
\
# Change user to wekan and install meteor
cd /home/wekan/ && \
chown wekan --recursive /home/wekan && \
#curl "https://install.meteor.com" -o /home/wekan/install_meteor.sh && \
#curl "https://install.meteor.com/?release=${METEOR_RELEASE}" -o /home/wekan/install_meteor.sh && \
# OLD: sed -i "s|RELEASE=.*|RELEASE=${METEOR_RELEASE}\"\"|g" ./install_meteor.sh && \
# Install Meteor forcing its progress
#sed -i 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' ./install_meteor.sh && \
echo "Starting meteor ${METEOR_RELEASE} installation... \n" && \
gosu wekan:wekan curl https://install.meteor.com/ | /bin/sh && \
mv /root/.meteor /home/wekan/ && \
chown wekan --recursive /home/wekan/.meteor && \
\
# Check if opting for a release candidate instead of major release
#if [ "$USE_EDGE" = false ]; then \
#gosu wekan:wekan sh /home/wekan/install_meteor.sh; \
# gosu wekan:wekan curl https://install.meteor.com/ | sh; \
#else \
# gosu wekan:wekan git clone --recursive --depth 1 -b release/METEOR@${METEOR_EDGE} https://github.com/meteor/meteor.git /home/wekan/.meteor; \
#fi; \
#\
# Get additional packages
#mkdir -p /home/wekan/app/packages && \
#chown wekan:wekan --recursive /home/wekan && \
# REPOS BELOW ARE INCLUDED TO WEKAN REPO
#cd /home/wekan/app/packages && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git && \
#gosu wekan:wekan git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git && \
#gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan-accounts-oidc && \
#gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_oidc wekan-oidc && \
#gosu wekan:wekan rm -rf meteor-accounts-oidc && \
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
gosu wekan:wekan /home/wekan/.meteor/meteor -- help; \
\
# extract the OpenAPI specification
#npm install -g api2html@0.3.3 && \
#mkdir -p /home/wekan/python && \
#chown wekan --recursive /home/wekan/python && \
#cd /home/wekan/python && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/Kronuz/esprima-python && \
#cd /home/wekan/python/esprima-python && \
#python3 setup.py install --record files.txt && \
#cd /home/wekan/app && \
#mkdir -p /home/wekan/app/public/api && \
#chown wekan --recursive /home/wekan/app && \
#gosu wekan:wekan python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml && \
#gosu wekan:wekan /opt/nodejs/bin/api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
# Build app
cd /home/wekan/app && \
mkdir -p /home/wekan/.npm && \
chown wekan --recursive /home/wekan/.npm /home/wekan/.config /home/wekan/.meteor && \
#gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
#cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs && \
#chown wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
#cd /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
#gosu wekan:wekan rm -rf node_modules/bcrypt && \
#gosu wekan:wekan npm install bcrypt && \
#
# Delete phantomjs
#cd /home/wekan/app_build/bundle && \
#find . -name "*phantomjs*" | xargs rm -rf && \
#
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
#gosu wekan:wekan npm install bcrypt && \
cd node_modules/fibers && \
node build.js && \
cd ../.. && \
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
mv /home/wekan/app_build/bundle /build && \
@@ -314,7 +245,9 @@ RUN \
rm -R /var/lib/apt/lists/* && \
rm -R /home/wekan/.meteor && \
rm -R /home/wekan/app && \
rm -R /home/wekan/app_build
rm -R /home/wekan/app_build && \
mkdir /data && \
chown wekan --recursive /data
#cat /home/wekan/python/esprima-python/files.txt | xargs rm -R && \
#rm -R /home/wekan/python
#rm /home/wekan/install_meteor.sh
@@ -323,4 +256,16 @@ ENV PORT=8080
EXPOSE $PORT
USER wekan
CMD ["node", "/build/main.js"]
STOPSIGNAL SIGKILL
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
#
# CMD ["node", "/build/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
+24 -4
View File
@@ -4,9 +4,18 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.7 \
NODE_VERSION=v14.20.0 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64
WEKAN_ARCHITECTURE=arm64 \
NODE_OPTIONS="--max_old_space_size=4096"
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
# Install dependencies
RUN apk update && apk add ca-certificates outils-sha1 && \
@@ -40,7 +49,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.7 \
NODE_VERSION=v14.20.0 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
@@ -74,4 +83,15 @@ RUN \
EXPOSE $PORT
USER wekan
CMD ["node", "/home/wekan/bundle/main.js"]
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
#
#CMD ["node", "/home/wekan/bundle/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /home/wekan/bundle/main.js"]
+5 -5
View File
@@ -17,9 +17,9 @@
## [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.
New English strings of new features can be added as PRs to edge branch file wekan/i18n/en.i18n.json .
New English strings of new features can be added as PRs to master branch file wekan/imports/i18n/data/en.i18n.json .
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
## [WeKan ® feature requests and bugs](https://github.com/wekan/wekan/issues)
Please add most of your questions as GitHub issue: [WeKan ® Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
It's better than at chat where details get lost when chat scrolls up.
@@ -28,7 +28,7 @@ It's better than at chat where details get lost when chat scrolls up.
[Discussions][discussions] - WeKan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
[WeKan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
## Docker: Please only use Docker release tags
@@ -56,8 +56,8 @@ install Wekan on your own computer or server. In fact we encourage you to do
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 70 languages.
- WeKan ® largest user has 22k users using WeKan ® in their company.
- WeKan ® has been [translated](https://transifex.com/wekan/wekan) to about 105 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: "v5.80.0"
appVersion: "v6.47.0"
files:
userUploads:
- README.md
+1 -1
View File
@@ -162,7 +162,7 @@ users = wekanurl + apiusers
# ------- LOGIN TOKEN START -----------
data = {"username": username, "password": password}
body = requests.post(wekanloginurl, data=data)
body = requests.post(wekanloginurl, json=data)
d = body.json()
apikey = d['token']
+8
View File
@@ -0,0 +1,8 @@
# v1.0 2022-03-22 Perl Asana export to WeKan ® release
This release adds the following new features:
- [Added Perl scripts for Asana export to WeKan ®](https://github.com/wekan/wekan/commit/376bcbb373d16317060adc2b1154cc20496775cc).
Thanks to GeekRuthie.
Thanks to above GitHub users for their contributions and translators for their translations.
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2022 WeKan ® Team and GeekRuthie
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+178
View File
@@ -0,0 +1,178 @@
#!/usr/local/perl-cbt/bin/perl
use Modern::Perl;
use Carp;
use Data::Dumper;
use HTTP::Request;
use JSON;
use LWP::UserAgent;
use MIME::Base64 qw/encode_base64/;
my $BASE_URL = 'https://app.asana.com/api/1.0';
my $ASANA_API_KEY = 'ASANA_PERSONAL_TOKEN';
my $ua = LWP::UserAgent->new();
open my $input_wekan, '<', 'template.json';
my $wekan_json = readline($input_wekan);
close $input_wekan;
my $wekan_board = decode_json($wekan_json);
my %users;
my %users_by_gid;
# get user IDs from template board
foreach my $user ( @{ $wekan_board->{users} } ) {
$users{ $user->{profile}->{fullname} } = $user->{_id};
}
# get list IDs from template (we ended up not using these)
my %lists;
foreach my $list ( @{ $wekan_board->{lists} } ) {
$lists{ $list->{title} } = $list->{_id};
}
my @headers;
push @headers, ( 'Accept', 'application/json' );
push @headers, ( 'Authorization', "Bearer $ASANA_API_KEY" );
my $projects_req = HTTP::Request->new( "GET", "$BASE_URL/projects", \@headers, );
my $projects_res = $ua->request($projects_req);
my $projects = decode_json( $projects_res->content )->{data};
foreach my $project (@$projects) {
say "Project: ".$project->{name};
my $tasks_url =
'/tasks?project='
. $project->{gid}
. '&opt_fields=completed,name,notes,assignee,created_by,memberships.project.name, memberships.section.name,due_on,created_at,custom_fields';
my $tasks_req = HTTP::Request->new( 'GET', "$BASE_URL$tasks_url", \@headers );
my $tasks_res = $ua->request($tasks_req);
my @output_tasks;
my $tasks = decode_json( $tasks_res->content )->{data};
foreach my $task (@$tasks) {
next if $task->{completed};
say ' - '.$task->{name};
my $git_branch;
my $prio;
foreach my $custom ( @{ $task->{custom_fields} } ) {
if ( $custom->{name} eq 'git branch' ) {
$git_branch = $custom->{text_value};
next;
}
# We ended up not importing these.
if ( $custom->{name} eq 'Priority' && defined $custom->{display_value} ) {
$prio =
$custom->{display_value} eq 'High' ? 'fwccC9'
: $custom->{display_value} eq 'Med' ? 'yPnaFa'
: $custom->{display_value} eq 'Low' ? 'W4vMvm'
: 'ML5drH';
next;
}
}
if ( !defined $users_by_gid{ $task->{created_by}->{gid} } ) {
my $user_req =
HTTP::Request->new( 'GET', "$BASE_URL/users/" . $task->{created_by}->{gid},
\@headers );
my $user_res = $ua->request($user_req);
my $user = decode_json( $user_res->content )->{data};
if ( defined $users{ $user->{name} } ) {
$users_by_gid{ $task->{created_by}->{gid} } = $users{ $user->{name} };
}
}
my $creator = $users_by_gid{ $task->{created_by}->{gid} } // undef;
if ( defined $task->{assignee} && !defined $users_by_gid{ $task->{assignee}->{gid} } ) {
my $user_req =
HTTP::Request->new( 'GET', "$BASE_URL/users/" . $task->{assignee}->{gid},
\@headers );
my $user_res = $ua->request($user_req);
my $user = decode_json( $user_res->content )->{data};
if ( defined $users{ $user->{name} } ) {
$users_by_gid{ $task->{assignee}->{gid} } = $users{ $user->{name} };
}
}
my $assignee = defined $task->{assignee} ? $users_by_gid{ $task->{assignee}->{gid} } : undef;
my $list;
foreach my $membership ( @{ $task->{memberships} } ) {
next if $membership->{project}->{name} ne $project->{name};
$list = $membership->{section}->{name};
}
# I was trying to create JSON that I could use on the import screen in Wekan,
# but for bigger boards, it was just *too* hefty, so I took that JSON and used
# APIs to import.
my %output_task = (
swimlaneId => 'As4SNerx4Y4mMnJ8n', # 'Bugs'
sort => 0,
type => 'cardType-card',
archived => JSON::false,
title => $task->{name},
description => $task->{notes},
createdAt => $task->{created_at},
dueAt => defined $task->{due_on} ? $task->{due_on} . 'T22:00:00.000Z' : undef,
customFields => [
{
_id => 'rL8BpFHp5xxSFbDdr',
value => $git_branch,
},
],
labelIds => [$prio],
listId => $list,
userId => $creator,
assignees => [$assignee],
);
my @final_comments;
my $comments_req =
HTTP::Request->new( 'GET', "$BASE_URL/tasks/" . $task->{gid} . '/stories',
\@headers );
my $comments_res = $ua->request($comments_req);
my $comments = decode_json( $comments_res->content )->{data};
foreach my $comment (@$comments) {
next if $comment->{type} ne 'comment';
if ( !defined $users_by_gid{ $comment->{created_by}->{gid} } ) {
my $user_req =
HTTP::Request->new( 'GET', "$BASE_URL/users/" . $comment->{created_by}->{gid},
\@headers );
my $user_res = $ua->request($user_req);
my $user = decode_json( $user_res->content )->{data};
if ( defined $users{ $user->{name} } ) {
$users_by_gid{ $comment->{created_bye}->{gid} } = $users{ $user->{name} };
}
}
my $commentor = $users_by_gid{ $comment->{created_by}->{gid} };
my %this_comment = (
text => $comment->{text},
createdAt => $comment->{created_at},
userId => $commentor,
);
push @final_comments, \%this_comment;
}
$output_task{comments} = \@final_comments;
my @final_attachments;
my $attachments_req =
HTTP::Request->new( 'GET', "$BASE_URL/tasks/" . $task->{gid} . '/attachments',
\@headers );
my $attachments_res = $ua->request($attachments_req);
my $attachments = decode_json( $attachments_res->content )->{data};
foreach my $attachment (@$attachments) {
my $att_req =
HTTP::Request->new( 'GET', "$BASE_URL/attachments/" . $attachment->{gid},
\@headers );
my $att_res = $ua->request($att_req);
my $att = decode_json( $att_res->content )->{data};
my $file_req=HTTP::Request->new('GET',$att->{download_url});
my $file_res=$ua->request($file_req);
my $file=encode_base64($file_res->content);
my %this_attachment = (
file => $file,
name => $att->{name},
createdAt => $att->{created_at},
);
push @final_attachments, \%this_attachment;
}
$output_task{attachments} = \@final_attachments;
push @output_tasks, \%output_task;
}
my $file_name = $project->{name};
$file_name =~ s/\//_/g;
open my $output_file, '>',$file_name.'_exported.json';
print $output_file encode_json(\@output_tasks);
close $output_file;
}
+122
View File
@@ -0,0 +1,122 @@
#!/usr/local/perl-cbt/bin/perl
use Modern::Perl;
use Carp;
use Data::Dumper;
use HTTP::Request;
use JSON;
use LWP::UserAgent;
use MIME::Base64 qw/decode_base64/;
use Try::Tiny;
my $BASE_URL = 'https://taskboard.example.com/api';
my $TOKEN = 'MY_TOKEN';
my $me = 'MY_USER_ID';
my $ua = LWP::UserAgent->new();
my @headers;
push @headers, ( 'Accept', 'application/json' );
push @headers, ( 'Authorization', "Bearer $TOKEN" );
my @form_headers;
push @form_headers, ( 'Content-Type', 'application/json' );
push @form_headers, ( 'Accept', 'application/json' );
push @form_headers, ( 'Authorization', "Bearer $TOKEN" );
# Prior to running this, I built all the boards, with labels and lists and swimlanes.
# Grabbed the IDs for the boards for each project, and put them here to match up with
# filenames from the Asana export script.
my %board_to_use = (
Project_1 => 'F5ZiCXnf4d7qNBRjp',
Project_2 => 'Shw3tyfC2JWCutBLj',
);
opendir my $files_dir, '.'
or croak "Cannot open input directory: $!";
my @files = readdir $files_dir;
closedir $files_dir;
foreach my $tasks_file (@files) {
next if $tasks_file !~ /_exported.json/;
my $project = $tasks_file;
$project =~ s/_exported.json//;
say "Project - $project";
my $board;
if ( $board_to_use{$project} ) {
$board = $board_to_use{$project};
}
say ' No board!' if !$board;
next if !$board;
my $labels_req = HTTP::Request->new( 'GET', "$BASE_URL/boards/$board", \@headers );
my $labels_res = $ua->request($labels_req);
my $board_data = decode_json( $labels_res->content);
my $labels = $board_data->{labels};
my $label_to_use;
# We're merging several Asana boards onto one Wekan board, with labels per project.
foreach my $label (@$labels) {
$label_to_use = $label->{_id} if $label->{name} eq $project;
}
my $lanes_req = HTTP::Request->new( 'GET', "$BASE_URL/boards/$board/swimlanes", \@headers );
my $lanes_res = $ua->request($lanes_req);
my $lanes = decode_json( $lanes_res->content );
my $lane_to_use;
foreach my $lane (@$lanes) {
# Our Asana didn't use swimlanes; all of our Wekan boards have a "Bugs" lane, so use that.
$lane_to_use = $lane->{_id} if $lane->{title} eq 'Bugs';
}
my $lists_req = HTTP::Request->new( 'GET', "$BASE_URL/boards/$board/lists", \@headers );
my $lists_res = $ua->request($lists_req);
my $lists = decode_json( $lists_res->content );
my %list_to_use;
foreach my $list (@$lists) {
$list_to_use{ $list->{title} } = $list->{_id};
}
open my $task_export_file, '<', $tasks_file;
my $tasks_json = readline($task_export_file);
close $task_export_file;
my $tasks = decode_json($tasks_json);
foreach my $task (@$tasks) {
say ' - ' . $task->{title};
my %body_info = (
swimlaneId => $lane_to_use,
authorId => $task->{userId},
assignees => $task->{assignees},
title => $task->{title},
description => $task->{description},
);
my $body = encode_json( \%body_info );
my $list = $list_to_use{ $task->{listId} } // $list_to_use{'Backlog'};
my $task_req = HTTP::Request->new( 'POST', "$BASE_URL/boards/$board/lists/$list/cards",
\@form_headers, $body );
my $task_res = $ua->request($task_req);
my $res;
try {
$res = decode_json( $task_res->content );
} catch {
# Did these manually afterward.
say "--->UNABLE TO LOAD TASK";
next;
};
my $card = $res->{_id};
if ($label_to_use) {
my $card_edit_body = encode_json( { labelIds => [ $label_to_use ]});
my $card_edit_req = HTTP::Request->new( 'PUT', "$BASE_URL/boards/$board/lists/$list/cards/$card",
\@form_headers, $card_edit_body );
my $card_edit_res = $ua->request($card_edit_req);
}
foreach my $comment ( @{ $task->{comments} } ) {
my $comment_body =
encode_json( { authorId => $comment->{userId}, comment => $comment->{text} } );
my $comment_req =
HTTP::Request->new( 'POST', "$BASE_URL/boards/$board/cards/$card/comments",
\@form_headers, $comment_body );
my $comment_res = $ua->request($comment_req);
}
}
}
+101
View File
@@ -0,0 +1,101 @@
.activity-title {
margin: 0 0.5em 0.8em;
display: flex;
justify-content: space-between;
}
.reactions-popup .add-comment-reaction {
display: inline-block;
cursor: pointer;
border-radius: 5px;
font-size: 22px;
text-align: center;
line-height: 30px;
width: 40px;
}
.reactions-popup .add-comment-reaction:hover {
background-color: #b0c4de;
}
.activities {
clear: both;
}
.activities .activity {
margin: 0.5px 0;
padding: 6px 0;
display: flex;
}
.activities .activity .member {
width: 32px;
height: 32px;
}
.activities .activity .activity-member {
font-weight: 700;
}
.activities .activity .activity-desc {
word-wrap: break-word;
overflow: hidden;
flex: 1;
align-self: center;
margin: 0;
margin-left: 3px;
overflow: hidden;
word-break: break-word;
}
.activities .activity .activity-desc .activity-comment {
display: block;
border-radius: 3px;
background: #fff;
text-decoration: none;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
margin-top: 5px;
padding: 5px;
}
.activities .activity .activity-desc .reactions {
display: flex;
margin-top: 5px;
gap: 5px;
}
.activities .activity .activity-desc .reactions .open-comment-reaction-popup {
display: flex;
align-items: center;
text-decoration: none;
height: 24px;
}
.activities .activity .activity-desc .reactions .open-comment-reaction-popup i.fa.fa-smile-o {
font-size: 17px;
font-weight: 500;
margin-left: 2px;
}
.activities .activity .activity-desc .reactions .open-comment-reaction-popup i.fa.fa-plus {
font-size: 8px;
margin-top: -7px;
margin-left: 1px;
}
.activities .activity .activity-desc .reactions .reaction {
cursor: pointer;
border: 1px solid #808080;
border-radius: 15px;
display: flex;
padding: 2px 5px;
}
.activities .activity .activity-desc .reactions .reaction.selected {
background-color: #b0c4de;
}
.activities .activity .activity-desc .reactions .reaction:hover {
background-color: #b0c4de;
}
.activities .activity .activity-desc .reactions .reaction .reaction-count {
font-size: 12px;
}
.activities .activity .activity-desc .activity-checklist {
display: block;
border-radius: 3px;
background: #fff;
text-decoration: none;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
margin-top: 5px;
padding: 5px;
}
.activities .activity .activity-desc .activity-meta {
font-size: 0.8em;
color: #999;
}
+29 -46
View File
@@ -42,7 +42,7 @@ template(name="addReactionPopup")
span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint}
template(name="activity")
.activity
.activity(data-id=activity._id)
+userAvatar(userId=activity.user._id)
p.activity-desc
span.activity-member
@@ -59,18 +59,17 @@ template(name="activity")
img.attachment-image-preview(src=activity.attachment.url)
//- board activity ------------------------------------------------------
if($eq mode 'board')
if($eq activity.activityType 'createBoard')
| {{{_ 'activity-created' boardLabelLink}}}.
if($eq activity.activityType 'createBoard')
| {{{_ 'activity-created' boardLabelLink}}}.
if($eq activity.activityType 'importBoard')
| {{{_ 'activity-imported-board' boardLabelLink sourceLink}}}.
if($eq activity.activityType 'importBoard')
| {{{_ 'activity-imported-board' boardLabelLink sourceLink}}}.
if($eq activity.activityType 'addBoardMember')
| {{{_ 'activity-added' memberLink boardLabelLink}}}.
if($eq activity.activityType 'addBoardMember')
| {{{_ 'activity-added' memberLink boardLabelLink}}}.
if($eq activity.activityType 'removeBoardMember')
| {{{_ 'activity-excluded' memberLink boardLabelLink}}}.
if($eq activity.activityType 'removeBoardMember')
| {{{_ 'activity-excluded' memberLink boardLabelLink}}}.
//- card activity -------------------------------------------------------
if($eq activity.activityType 'createCard')
@@ -153,10 +152,10 @@ template(name="activity")
+editOrDeleteComment
if($eq activity.activityType 'deleteComment')
| {{{_ 'activity-deleteComment' currentData.commentId}}}.
| {{{_ 'activity-deleteComment' activity.commentId}}}.
if($eq activity.activityType 'editComment')
| {{{_ 'activity-editComment' currentData.commentId}}}.
| {{{_ 'activity-editComment' activity.commentId}}}.
else
//- if we are not in card mode we only display a summary of the comment
if($eq activity.activityType 'addComment')
@@ -166,42 +165,27 @@ template(name="activity")
= 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-receivedAt')
| {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}.
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) 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-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}}}.
if($eq activity.activityType 'a-endAt')
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
//- customField activity ------------------------------------------------
if($eq mode 'board')
if($eq activity.activityType 'createCustomField')
| {{_ 'activity-customfield-created' customField}}.
if($eq activity.activityType 'createCustomField')
| {{_ 'activity-customfield-created' customField}}.
if($eq activity.activityType 'setCustomField')
| {{{_ 'activity-set-customfield' (sanitize lastCustomField) (sanitize lastCustomFieldValue) cardLink}}}.
if($eq activity.activityType 'setCustomField')
| {{{_ 'activity-set-customfield' (sanitize lastCustomField) (sanitize lastCustomFieldValue) cardLink}}}.
if($eq activity.activityType 'unsetCustomField')
| {{{_ 'activity-unset-customfield' (sanitize lastCustomField) cardLink}}}.
if($eq activity.activityType 'unsetCustomField')
| {{{_ 'activity-unset-customfield' (sanitize lastCustomField) cardLink}}}.
//- label activity ------------------------------------------------------
if($eq activity.activityType 'addedLabel')
@@ -238,12 +222,11 @@ template(name="activity")
| {{{_ 'activity-removed' memberLink cardLink}}}.
//- swimlane activity --------------------------------------------------
if($neq mode 'card')
if($eq activity.activityType 'createSwimlane')
| {{_ 'activity-added' (sanitize activity.swimlane.title) boardLabelLink}}.
if($eq activity.activityType 'createSwimlane')
| {{{_ 'activity-added' (sanitize activity.swimlane.title) boardLabelLink}}}.
if($eq activity.activityType 'archivedSwimlane')
| {{_ 'activity-archived' (sanitize activity.swimlane.title)}}.
if($eq activity.activityType 'archivedSwimlane')
| {{{_ 'activity-archived' (sanitize activity.swimlane.title)}}}.
//- I don't understand this part ----------------------------------------
+42 -10
View File
@@ -1,4 +1,5 @@
import DOMPurify from 'dompurify';
import { TAPi18n } from '/imports/i18n';
const activitiesPerPage = 500;
@@ -70,22 +71,51 @@ BlazeComponent.extendComponent({
boardLabelLink() {
const data = this.currentData();
const currentBoardId = Session.get('currentBoard');
if (data.mode !== 'board') {
return createBoardLink(data.activity.board(), data.activity.listName);
// data.mode: card, linkedcard, linkedboard
return createBoardLink(data.activity.board(), data.activity.listName ? data.activity.listName : null);
}
else if (currentBoardId != data.activity.boardId) {
// data.mode: board
// current activitie is linked
return createBoardLink(data.activity.board(), data.activity.listName ? data.activity.listName : null);
}
return TAPi18n.__('this-board');
},
cardLabelLink() {
const data = this.currentData();
if (data.mode !== 'card') {
return createCardLink(data.activity.card());
const currentBoardId = Session.get('currentBoard');
if (data.mode == 'card') {
// data.mode: card
return TAPi18n.__('this-card');
}
return TAPi18n.__('this-card');
else if (data.mode !== 'board') {
// data.mode: linkedcard, linkedboard
return createCardLink(data.activity.card(), null);
}
else if (currentBoardId != data.activity.boardId) {
// data.mode: board
// current activitie is linked
return createCardLink(data.activity.card(), data.activity.board().title);
}
return createCardLink(this.currentData().activity.card(), null);
},
cardLink() {
return createCardLink(this.currentData().activity.card());
const data = this.currentData();
const currentBoardId = Session.get('currentBoard');
if (data.mode !== 'board') {
// data.mode: card, linkedcard, linkedboard
return createCardLink(data.activity.card(), null);
}
else if (currentBoardId != data.activity.boardId) {
// data.mode: board
// current activitie is linked
return createCardLink(data.activity.card(), data.activity.board().title);
}
return createCardLink(this.currentData().activity.card(), null);
},
receivedDate() {
@@ -196,14 +226,14 @@ BlazeComponent.extendComponent({
// trying to display url before file is stored generates js errors
return (
(attachment &&
attachment.url({ download: true }) &&
attachment.path &&
Blaze.toHTML(
HTML.A(
{
href: attachment.url({ download: true }),
href: `${attachment.link()}?download=true`,
target: '_blank',
},
DOMPurify.sanitize(attachment.name()),
DOMPurify.sanitize(attachment.name),
),
)) ||
DOMPurify.sanitize(this.currentData().activity.attachmentName)
@@ -304,8 +334,10 @@ Template.commentReactions.helpers({
}
})
function createCardLink(card) {
function createCardLink(card, board) {
if (!card) return '';
let text = card.title;
if (board) text = `${board} > ` + text;
return (
card &&
Blaze.toHTML(
@@ -314,7 +346,7 @@ function createCardLink(card) {
href: card.originRelativeUrl(),
class: 'action-card',
},
DOMPurify.sanitize(card.title, { ALLOW_UNKNOWN_PROTOCOLS: true }),
DOMPurify.sanitize(text, { ALLOW_UNKNOWN_PROTOCOLS: true }),
),
)
);
@@ -1,105 +0,0 @@
@import 'nib'
.activity-title
margin: 0 0.5em 0.8em
display: flex
justify-content:space-between
.reactions-popup
.add-comment-reaction
display: inline-block
cursor: pointer
border-radius: 5px
font-size: 22px
text-align: center
line-height: 30px
width: 40px
&:hover {
background-color: #b0c4de
}
.activities
clear: both
.activity
margin: 0.5px 0
padding: 6px 0;
display: flex
.member
width: 32px
height: @width
.activity-member
font-weight: 700
.activity-desc
word-wrap: break-word
overflow: hidden
flex: 1
align-self: center
margin: 0
margin-left: 3px
overflow: hidden;
word-break: break-word;
.activity-comment
display: block
border-radius: 3px
background: white
text-decoration: none
box-shadow: 0 1px 2px rgba(0,0,0,.2)
margin-top: 5px
padding: 5px
.reactions
display: flex
margin-top: 5px
gap: 5px
.open-comment-reaction-popup
display: flex
align-items: center
text-decoration: none
height: 24px;
i.fa.fa-smile-o
font-size: 17px
font-weight: 500
margin-left: 2px
i.fa.fa-plus
font-size: 8px;
margin-top: -7px;
margin-left: 1px;
.reaction
cursor: pointer
border: 1px solid grey
border-radius: 15px
display: flex
padding: 2px 5px
&.selected {
background-color: #b0c4de
}
&:hover {
background-color: #b0c4de
}
.reaction-count
font-size: 12px
.activity-checklist
display: block
border-radius: 3px
background: white
text-decoration: none
box-shadow: 0 1px 2px rgba(0,0,0,.2)
margin-top: 5px
padding: 5px
.activity-meta
font-size: 0.8em
color: darken(white, 40%)
+65
View File
@@ -0,0 +1,65 @@
.new-comment {
position: relative;
margin: 0 0 20px 38px;
}
.new-comment .member {
opacity: 0.7;
position: absolute;
top: 1px;
left: -38px;
}
.new-comment.is-open .member {
opacity: 1;
}
.new-comment.is-open .helper {
display: inline-block;
}
.new-comment.is-open textarea {
min-height: 100px;
color: #4d4d4d;
cursor: auto;
overflow: hidden;
word-wrap: break-word;
}
.new-comment .too-long {
margin-top: 8px;
}
.new-comment textarea {
background-color: #fff;
border: 0;
box-shadow: 0 1px 2px rgba(0,0,0,0.23);
height: 36px;
margin: 4px 4px 6px 0;
padding: 9px 11px;
width: 100%;
}
.new-comment textarea:hover,
.new-comment textarea:is-open {
background-color: #fff;
box-shadow: 0 1px 3px rgba(0,0,0,0.33);
border: 0;
cursor: pointer;
}
.new-comment textarea:is-open {
cursor: auto;
}
.comment-item {
background-color: #fff;
border: 0;
box-shadow: 0 1px 2px rgba(0,0,0,0.23);
color: #8c8c8c;
height: 36px;
margin: 4px 4px 6px 0;
width: 92%;
}
.comment-item:hover {
background: #e0e0e0;
}
.comment-item.add-comment {
display: flex;
margin: 5px;
}
.comment-item.add-comment a {
display: block;
margin: auto;
}
+2
View File
@@ -26,6 +26,8 @@ BlazeComponent.extendComponent({
if (card.isLinkedCard()) {
boardId = Cards.findOne(card.linkedId).boardId;
cardId = card.linkedId;
} else if (card.isLinkedBoard()) {
boardId = card.linkedId;
}
if (text) {
CardComments.insert({
@@ -1,67 +0,0 @@
@import 'nib'
.new-comment
position: relative
margin: 0 0 20px 38px
.member
opacity: .7
position: absolute
top: 1px
left: -38px
&.is-open
.member
opacity: 1
.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)
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
.comment-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-comment
display: flex
margin: 5px
a
display: block
margin: auto
@@ -14,6 +14,7 @@ template(name="archivedBoards")
i.fa.fa-undo
| {{_ 'restore-board'}}
= title
span {{ moment archivedAt 'LLL' }}
else
li.no-items-message {{_ 'no-archived-boards'}}
+168
View File
@@ -0,0 +1,168 @@
.board-wrapper {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
overflow-x: hidden;
overflow-y: hidden;
}
.board-wrapper .board-canvas {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
transition: margin 0.1s;
overflow-y: auto;
}
.board-wrapper .board-canvas.is-sibling-sidebar-open {
margin-right: 248px;
}
.board-wrapper .board-canvas .board-overlay {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
top: -100px;
right: -400px;
background: #000;
opacity: 0.33;
animation: fadeIn 0.2s;
z-index: 16;
}
.board-wrapper .board-canvas.is-dragging-active .minicard-wrapper.is-checked {
display: none;
}
@media screen and (max-width: 250px) {
.board-wrapper .board-canvas .swimlane {
border-bottom: 1px solid #ccc;
display: flex;
flex-direction: column;
margin: 0;
padding: 0 0px 0px 0;
overflow-x: hidden;
overflow-y: auto;
}
}
.calendar-event-green {
background: #3cb500 !important;
border-color: #2a8000;
color: #fff !important;
}
.calendar-event-yellow {
background: #fad900 !important;
border-color: #c7ac00;
color: #000 !important;
}
.calendar-event-orange {
background: #ff9f19 !important;
border-color: #cc7c14;
color: #000 !important;
}
.calendar-event-red {
background: #eb4646 !important;
border-color: #b83737;
color: #fff !important;
}
.calendar-event-purple {
background: #a632db !important;
border-color: #7d26a6;
color: #fff !important;
}
.calendar-event-blue {
background: #0079bf !important;
border-color: #005a8a;
color: #fff !important;
}
.calendar-event-pink {
background: #ff78cb !important;
border-color: #cc62a3;
color: #000 !important;
}
.calendar-event-sky {
background: #00c2e0 !important;
border-color: #0094ab;
color: #fff !important;
}
.calendar-event-black {
background: #4d4d4d !important;
border-color: #1a1a1a;
color: #fff !important;
}
.calendar-event-lime {
background: #51e898 !important;
border-color: #3eb375;
color: #000 !important;
}
.calendar-event-silver {
background: #c0c0c0 !important;
border-color: #8c8c8c;
color: #000 !important;
}
.calendar-event-peachpuff {
background: #ffdab9 !important;
border-color: #ccaf95;
color: #000 !important;
}
.calendar-event-crimson {
background: #dc143c !important;
border-color: #a8112f;
color: #fff !important;
}
.calendar-event-plum {
background: #dda0dd !important;
border-color: #a87ba8;
color: #000 !important;
}
.calendar-event-darkgreen {
background: #006400 !important;
border-color: #003000;
color: #fff !important;
}
.calendar-event-slateblue {
background: #6a5acd !important;
border-color: #4f4399;
color: #fff !important;
}
.calendar-event-magenta {
background: #f0f !important;
border-color: #c0c;
color: #fff !important;
}
.calendar-event-gold {
background: #ffd700 !important;
border-color: #ca0;
color: #000 !important;
}
.calendar-event-navy {
background: #000080 !important;
border-color: #003;
color: #fff !important;
}
.calendar-event-gray {
background: #808080 !important;
border-color: #333;
color: #fff !important;
}
.calendar-event-saddlebrown {
background: #8b4513 !important;
border-color: #572b0c;
color: #fff !important;
}
.calendar-event-paleturquoise {
background: #afeeee !important;
border-color: #8ababa;
color: #000 !important;
}
.calendar-event-mistyrose {
background: #ffe4e1 !important;
border-color: #ccb8b6;
color: #000 !important;
}
.calendar-event-indigo {
background: #4b0082 !important;
border-color: #2b004d;
color: #fff !important;
}
+18 -13
View File
@@ -1,3 +1,5 @@
import { TAPi18n } from '/imports/i18n';
const subManager = new SubsManager();
const { calculateIndex } = Utils;
const swimlaneWhileSortingHeight = 150;
@@ -191,7 +193,7 @@ BlazeComponent.extendComponent({
});
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$swimlanesDom.sortable({
handle: '.js-swimlane-header-handle',
});
@@ -226,10 +228,10 @@ BlazeComponent.extendComponent({
}
},
notDisplayThisBoard(){
notDisplayThisBoard() {
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
let currentBoard = Boards.findOne(Session.get('currentBoard'));
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue && currentBoard.permission == 'public'){
if (allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue && currentBoard.permission == 'public') {
return true;
}
@@ -267,9 +269,10 @@ BlazeComponent.extendComponent({
openNewListForm() {
if (this.isViewSwimlanes()) {
this.childComponents('swimlane')[0]
.childComponents('addListAndSwimlaneForm')[0]
.open();
// The form had been removed in 416b17062e57f215206e93a85b02ef9eb1ab4902
// this.childComponents('swimlane')[0]
// .childComponents('addListAndSwimlaneForm')[0]
// .open();
} else if (this.isViewLists()) {
this.childComponents('listsGroup')[0]
.childComponents('addListForm')[0]
@@ -316,7 +319,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onRendered() {
this.autorun(function() {
this.autorun(function () {
$('#calendar-view').fullCalendar('refetchEvents');
});
},
@@ -348,7 +351,7 @@ BlazeComponent.extendComponent({
events(start, end, timezone, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const events = [];
const pushEvent = function(card, title, start, end, extraCls) {
const pushEvent = function (card, title, start, end, extraCls) {
start = start || card.startAt;
end = end || card.endAt;
title = title || card.title;
@@ -372,12 +375,12 @@ BlazeComponent.extendComponent({
};
currentBoard
.cardsInInterval(start.toDate(), end.toDate())
.forEach(function(card) {
.forEach(function (card) {
pushEvent(card);
});
currentBoard
.cardsDueInBetween(start.toDate(), end.toDate())
.forEach(function(card) {
.forEach(function (card) {
pushEvent(
card,
`${card.title} ${TAPi18n.__('card-due')}`,
@@ -385,7 +388,7 @@ BlazeComponent.extendComponent({
new Date(card.dueAt.getTime() + 36e5),
);
});
events.sort(function(first, second) {
events.sort(function (first, second) {
return first.id > second.id ? 1 : -1;
});
callback(events);
@@ -408,8 +411,10 @@ BlazeComponent.extendComponent({
if (card) {
// TODO: add a flag for allDay events
if (!event.allDay) {
card.setStart(event.start.toDate());
card.setEnd(event.end.toDate());
// https://github.com/wekan/wekan/issues/2917#issuecomment-1236753962
//card.setStart(event.start.toDate());
//card.setEnd(event.end.toDate());
card.setDue(event.start.toDate());
isOk = true;
}
}
-133
View File
@@ -1,133 +0,0 @@
@import 'nib'
position()
if arguments[0] == cover || arguments[0] == fixed-cover
if arguments[0] == cover
position: absolute
else
position: fixed
left: 0
right: 0
top: 0
bottom: 0
else
position: arguments
.board-wrapper
position: cover
overflow-x: hidden
overflow-y: hidden
.board-canvas
position: cover
transition: margin .1s
overflow-y: auto
&.is-sibling-sidebar-open
margin-right: 248px
.board-overlay
position: fixed-cover
top: -100px
right: -400px
background: black
opacity: 0.33
animation: fadeIn 0.2s
z-index: 16
&.is-dragging-active
.open-minicard-composer,
.minicard-wrapper.is-checked
display: none
@media screen and (max-width: 800px)
.board-wrapper
.board-canvas
.swimlane
border-bottom: 1px solid #CCC
display: flex
flex-direction: column
margin: 0
padding: 0 0px 0px 0
overflow-x: hidden
overflow-y: auto
calendar-event-color(background, borderColor, color...)
background: background !important
border-color: borderColor
if color
color: color !important //overwrite text for better visibility
.calendar-event-green
calendar-event-color(#3cb500, #2a8000, #ffffff) //White text for better visibility
.calendar-event-yellow
calendar-event-color(#fad900, #c7ac00, #000) //Black text for better visibility
.calendar-event-orange
calendar-event-color(#ff9f19, #cc7c14, #000) //Black text for better visibility
.calendar-event-red
calendar-event-color(#eb4646, #b83737, #ffffff) //White text for better visibility
.calendar-event-purple
calendar-event-color(#a632db, #7d26a6, #ffffff) //White text for better visibility
.calendar-event-blue
calendar-event-color(#0079bf, #005a8a, #ffffff) //White text for better visibility
.calendar-event-pink
calendar-event-color(#ff78cb, #cc62a3, #000) //Black text for better visibility
.calendar-event-sky
calendar-event-color(#00c2e0, #0094ab, #ffffff) //White text for better visibility
.calendar-event-black
calendar-event-color(#4d4d4d, #1a1a1a, #ffffff) //White text for better visibility
.calendar-event-lime
calendar-event-color(#51e898, #3eb375, #000) //Black text for better visibility
.calendar-event-silver
calendar-event-color(#c0c0c0, #8c8c8c, #000) //Black text for better visibility
.calendar-event-peachpuff
calendar-event-color(#ffdab9, #ccaf95, #000) //Black text for better visibility
.calendar-event-crimson
calendar-event-color(#dc143c, #a8112f, #ffffff) //White text for better visibility
.calendar-event-plum
calendar-event-color(#dda0dd, #a87ba8, #000) //Black text for better visibility
.calendar-event-darkgreen
calendar-event-color(#006400, #003000, #ffffff) //White text for better visibility
.calendar-event-slateblue
calendar-event-color(#6a5acd, #4f4399, #ffffff) //White text for better visibility
.calendar-event-magenta
calendar-event-color(#ff00ff, #cc00cc, #ffffff) //White text for better visibility
.calendar-event-gold
calendar-event-color(#ffd700, #ccaa00, #000) //Black text for better visibility
.calendar-event-navy
calendar-event-color(#000080, #000033, #ffffff) //White text for better visibility
.calendar-event-gray
calendar-event-color(#808080, #333333, #ffffff) //White text for better visibility
.calendar-event-saddlebrown
calendar-event-color(#8b4513, #572b0c, #ffffff) //White text for better visibility
.calendar-event-paleturquoise
calendar-event-color(#afeeee, #8ababa, #000) //Black text for better visibility
.calendar-event-mistyrose
calendar-event-color(#ffe4e1, #ccb8b6, #000) //Black text for better visibility
.calendar-event-indigo
calendar-event-color(#4b0082, #2b004d, #ffffff) //White text for better visibility
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+23
View File
@@ -0,0 +1,23 @@
.integration-form {
padding: 5px;
border-bottom: 1px solid #ccc;
}
.flex,
.option {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
}
.option {
-webkit-border-radius: 3px;
border-radius: 3px;
background: #fff;
text-decoration: none;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2);
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
margin-top: 5px;
padding: 5px;
}
+3 -3
View File
@@ -235,9 +235,9 @@ template(name="createBoard")
= " "
| {{{_ 'board-private-info'}}}
a.js-change-visibility {{_ 'change'}}.
//a.flex.js-toggle-add-template-container
// .materialCheckBox#add-template-container
// span {{_ 'add-template-container'}}
a.flex.js-toggle-add-template-container
.materialCheckBox#add-template-container
span {{_ 'add-template-container'}}
input.primary.wide(type="submit" value="{{_ 'create'}}")
span.quiet
| {{_ 'or'}}
+3
View File
@@ -1,3 +1,5 @@
import { TAPi18n } from '/imports/i18n';
/*
const DOWNCLS = 'fa-sort-down';
const UPCLS = 'fa-sort-up';
@@ -32,6 +34,7 @@ Template.boardMenuPopup.events({
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
'click .js-card-settings': Popup.open('boardCardSettings'),
'click .js-minicard-settings': Popup.open('boardMinicardSettings'),
});
Template.boardChangeTitlePopup.events({
-22
View File
@@ -1,22 +0,0 @@
.integration-form
padding: 5px
border-bottom: 1px solid #ccc
.flex
display: -webkit-box
display: -moz-box
display: -webkit-flex
display: -moz-flex
display: -ms-flexbox
display: flex
.option
@extends .flex
-webkit-border-radius: 3px;
border-radius: 3px;
background: #fff;
text-decoration: none;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2);
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
margin-top: 5px;
padding: 5px;
+281
View File
@@ -0,0 +1,281 @@
@import url("/css/reset.css") print, screen;
.board-list {
margin: 0 8px;
}
.board-list li {
float: left;
width: 20%;
box-sizing: border-box;
position: relative;
}
.board-list li.placeholder:after {
content: '';
display: block;
background: #ccc;
border-radius: 3px;
height: 106px;
margin: 8px;
}
.board-list li.ui-sortable-helper {
cursor: grabbing;
transform: rotate(4deg);
display: block !important;
}
.board-list li.starred .fa-star,
.board-list li.starred .fa-star-o {
opacity: 1;
}
.board-list .board-list-item {
overflow: hidden;
background-color: #999;
color: #f6f6f6;
min-height: 100px;
font-size: 16px;
line-height: 22px;
border-radius: 3px;
display: block;
font-weight: 700;
padding: 8px;
margin: 8px;
position: relative;
text-decoration: none;
word-wrap: break-word;
}
.board-list .board-list-item.template-container {
border: 4px solid #fff;
}
.board-list .board-list-item.tile {
background-size: auto;
background-repeat: repeat;
}
.board-list .board-list-item-sub-name {
color: rgba(255,255,255,0.5);
display: block;
font-size: 14px;
font-weight: 400;
line-height: 22px;
}
.board-list .board-list-item-desc {
color: #fff;
display: block;
font-size: 14px;
font-weight: 400;
line-height: 18px;
}
.board-list .js-add-board {
text-align: center;
}
.board-list .js-add-board .label {
font-weight: normal;
line-height: 56px;
}
.board-list .js-add-board :hover {
background-color: #939393;
}
.board-list .fa-star,
.board-list .fa-star-o {
bottom: 0;
font-size: 14px;
height: 18px;
line-height: 18px;
opacity: 0;
padding: 9px 9px;
position: absolute;
right: 0;
top: 0;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list .fa-circle {
bottom: 0;
font-size: 10px;
height: 10px;
line-height: 10px;
padding: 9px 9px;
position: absolute;
right: 0;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list .has-overtime-card-active {
color: #eb4646 !important;
}
.board-list .no-overtime-card-active {
color: #3cb500 !important;
}
.board-list .is-star-active {
color: #fff;
}
.board-list .fa-clone {
position: absolute;
bottom: 0;
font-size: 14px;
height: 18px;
line-height: 18px;
opacity: 0;
right: 0;
padding: 9px 9px;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list .fa-archive {
position: absolute;
bottom: 0;
font-size: 14px;
height: 18px;
line-height: 18px;
opacity: 0;
left: 0;
padding: 9px 9px;
transition-duration: 0.15s;
transition-property: color, font-size, background;
}
.board-list li:hover a:hover .fa-star,
.board-list li:hover a:hover .fa-clone,
.board-list li:hover a:hover .fa-archive,
.board-list li:hover a:hover .fa-star-o {
color: #fff;
}
.board-list li:hover a .fa-star,
.board-list li:hover a .fa-clone,
.board-list li:hover a .fa-archive,
.board-list li:hover a .fa-star-o {
color: #fff;
opacity: 0.75;
}
.board-list li:hover a .fa-star:hover,
.board-list li:hover a .fa-clone:hover,
.board-list li:hover a .fa-archive:hover,
.board-list li:hover a .fa-star-o:hover {
font-size: 18px;
opacity: 1;
}
.board-list li:hover a .fa-star.is-star-active,
.board-list li:hover a .fa-clone.is-star-active,
.board-list li:hover a .fa-archive.is-star-active,
.board-list li:hover a .fa-star-o.is-star-active {
opacity: 1;
}
.board-backgrounds-list .board-background-select {
box-sizing: border-box;
display: block;
float: left;
width: 50%;
padding-top: 12px;
position: relative;
z-index: 1;
}
.board-backgrounds-list .board-background-select:nth-child(-n + 2) {
padding-top: 0;
}
.board-backgrounds-list .board-background-select:nth-child(2n) {
padding-left: 6px;
}
.board-backgrounds-list .board-background-select:nth-child(2n+1) {
padding-right: 6px;
}
.board-backgrounds-list .board-background-select .background-box {
color: #fff;
border-radius: 3px;
background-size: cover;
display: block;
height: 74px;
position: relative;
width: 100%;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
.board-backgrounds-list .board-background-select .background-box i.fa-check {
font-size: 25px;
color: #fff;
}
@media screen and (max-width: 800px) {
.board-list {
height: 100%;
overflow: scroll;
}
.board-list li {
width: 50%;
}
.board-list .board-list-item {
overflow: hidden;
height: 8rem;
}
.board-list .board-list-item-sub-name {
position: relative;
top: -100px;
left: -100px;
}
.board-list .board-handle {
position: absolute;
padding: 7px;
top: 50%;
transform: translateY(-50%);
right: 10px;
font-size: 24px;
}
}
@media screen and (max-width: 360px) {
li {
width: 100%;
}
.board-handle {
position: absolute;
padding: 7px;
top: 50%;
transform: translateY(-50%);
right: 10px;
font-size: 24px;
}
}
.AllBoardTeamsOrgs {
list-style-type: none;
overflow: hidden;
}
.AllBoardTeams,
.AllBoardOrgs,
.AllBoardBtns {
float: left;
}
.js-AllBoardOrgs {
margin-left: 16px;
}
.AllBoardTeams {
margin-left: 16px;
}
.AllBoardButtonsContainer {
margin: 16px;
}
#filterBtn,
#resetBtn {
display: inline;
}
.js-board {
display: block;
}
.minicard-members {
padding: 6px 0 6px 8px;
width: 100%;
margin-bottom: 2px;
margin-left: -4px;
display: inline-block;
}
.minicard-lists {
margin: 0 auto;
max-width: 95%;
height: 100%;
}
.flex {
display: flex;
}
.flex-wrap {
flex-wrap: wrap;
}
.flex-wrap .item {
margin: 2px;
padding-right: 6px;
text-align: center;
}
+23 -3
View File
@@ -13,7 +13,15 @@ template(name="boardList")
select.js-AllBoardOrgs#jsAllBoardOrgs("multiple")
option(value="-1") {{_ 'organizations'}} :
each orgsDatas
option(value="{{orgId}}") {{_ orgDisplayName}}
option(value="{{orgId}}") {{orgDisplayName}}
//li.AllBoardTemplates
// if userHasTemplates
// select.js-AllBoardTemplates#jsAllBoardTemplates("multiple")
// option(value="-1") {{_ 'templates'}} :
// each templatesDatas
// option(value="{{templateId}}") {{_ templateDisplayName}}
li.AllBoardBtns
div.AllBoardButtonsContainer
if userHasOrgsOrTeams
@@ -54,7 +62,7 @@ template(name="boardList")
i.fa.js-has-spenttime-cards(
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
@@ -86,6 +94,18 @@ template(name="boardList")
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
+viewer
= title
unless currentSetting.hideBoardMemberList
if allowsBoardMemberList
.minicard-members
each member in boardMembers _id
a.name
+userAvatar(userId=member noRemove=true)
unless currentSetting.hideCardCounterList
if allowsCardCounterList
.minicard-lists.flex.flex-wrap
each list in boardLists _id
.item
| {{ list }}
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
@@ -96,7 +116,7 @@ template(name="boardList")
i.fa.js-has-spenttime-cards(
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
+95 -48
View File
@@ -1,5 +1,19 @@
import { TAPi18n } from '/imports/i18n';
const subManager = new SubsManager();
Template.boardList.helpers({
currentSetting() {
return Settings.findOne();
},
hideCardCounterList() {
return Utils.isMiniScreen() && Session.get('currentBoard');
},
hideBoardMemberList() {
return Utils.isMiniScreen() && Session.get('currentBoard');
},
})
Template.boardListHeaderBar.events({
'click .js-open-archived-board'() {
Modal.open('archivedBoards');
@@ -8,7 +22,11 @@ Template.boardListHeaderBar.events({
Template.boardListHeaderBar.helpers({
title() {
//if (FlowRouter.getRouteName() === 'template-container') {
// return 'template-container';
//} else {
return FlowRouter.getRouteName() === 'home' ? 'my-boards' : 'public';
//}
},
templatesBoardId() {
return Meteor.user() && Meteor.user().getTemplatesBoardId();
@@ -24,12 +42,11 @@ BlazeComponent.extendComponent({
Meteor.subscribe('tableVisibilityModeSettings');
let currUser = Meteor.user();
let userLanguage;
if(currUser && currUser.profile){
if (currUser && currUser.profile) {
userLanguage = currUser.profile.language
}
if (userLanguage) {
TAPi18n.setLanguage(userLanguage);
T9n.setLanguage(userLanguage);
}
},
@@ -74,46 +91,54 @@ BlazeComponent.extendComponent({
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$boards.sortable({
handle: '.board-handle',
});
}
});
},
userHasTeams(){
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
userHasTeams() {
if (Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
return true;
else
return false;
},
teamsDatas() {
if(Meteor.user().teams)
return Meteor.user().teams;
if (Meteor.user().teams)
return Meteor.user().teams.sort((a, b) => a.teamDisplayName.localeCompare(b.teamDisplayName));
else
return [];
},
userHasOrgs(){
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
userHasOrgs() {
if (Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
return true;
else
return false;
},
/*
userHasTemplates(){
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
return true;
else
return false;
},
*/
orgsDatas() {
if(Meteor.user().orgs)
return Meteor.user().orgs;
if (Meteor.user().orgs)
return Meteor.user().orgs.sort((a, b) => a.orgDisplayName.localeCompare(b.orgDisplayName));
else
return [];
},
userHasOrgsOrTeams(){
userHasOrgsOrTeams() {
let boolUserHasOrgs;
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
if (Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
boolUserHasOrgs = true;
else
boolUserHasOrgs = false;
let boolUserHasTeams;
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
if (Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
boolUserHasTeams = true;
else
boolUserHasTeams = false;
@@ -122,23 +147,22 @@ BlazeComponent.extendComponent({
},
boards() {
let query = {
//archived: false,
////type: { $in: ['board','template-container'] },
//type: 'board',
// { type: 'board' },
// { type: { $in: ['board','template-container'] } },
$and: [
{ archived: false },
{ type: 'board' },
{ $or:[] }
{ type: { $in: ['board', 'template-container'] } },
{ $or: [] }
]
};
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
if (FlowRouter.getRouteName() === 'home'){
query.$and[2].$or.push({'members.userId': Meteor.userId()});
if (FlowRouter.getRouteName() === 'home') {
query.$and[2].$or.push({ 'members.userId': Meteor.userId() });
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue){
query.$and.push({'permission': 'private'});
if (allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue) {
query.$and.push({ 'permission': 'private' });
}
const currUser = Users.findOne(Meteor.userId());
@@ -150,27 +174,27 @@ BlazeComponent.extendComponent({
// });
let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
if(orgIdsUserBelongs && orgIdsUserBelongs != ''){
if (orgIdsUserBelongs && orgIdsUserBelongs != '') {
let orgsIds = orgIdsUserBelongs.split(',');
// for(let i = 0; i < orgsIds.length; i++){
// query.$and[2].$or.push({'orgs.orgId': orgsIds[i]});
// }
//query.$and[2].$or.push({'orgs': {$elemMatch : {orgId: orgsIds[0]}}});
query.$and[2].$or.push({'orgs.orgId': {$in : orgsIds}});
query.$and[2].$or.push({ 'orgs.orgId': { $in: orgsIds } });
}
let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
if(teamIdsUserBelongs && teamIdsUserBelongs != ''){
if (teamIdsUserBelongs && teamIdsUserBelongs != '') {
let teamsIds = teamIdsUserBelongs.split(',');
// for(let i = 0; i < teamsIds.length; i++){
// query.$or[2].$or.push({'teams.teamId': teamsIds[i]});
// }
//query.$and[2].$or.push({'teams': { $elemMatch : {teamId: teamsIds[0]}}});
query.$and[2].$or.push({'teams.teamId': {$in : teamsIds}});
query.$and[2].$or.push({ 'teams.teamId': { $in: teamsIds } });
}
}
else if(allowPrivateVisibilityOnly !== undefined && !allowPrivateVisibilityOnly.booleanValue){
else if (allowPrivateVisibilityOnly !== undefined && !allowPrivateVisibilityOnly.booleanValue) {
query = {
archived: false,
//type: { $in: ['board','template-container'] },
@@ -183,6 +207,26 @@ BlazeComponent.extendComponent({
sort: { sort: 1 /* boards default sorting */ },
});
},
boardLists(boardId) {
let boardLists = [];
const lists = Lists.find({ 'boardId': boardId, 'archived': false },{sort: ['sort','asc']});
lists.forEach(list => {
let cardCount = Cards.find({ 'boardId': boardId, 'listId': list._id }).count()
boardLists.push(`${list.title}: ${cardCount}`);
});
return boardLists
},
boardMembers(boardId) {
let boardMembers = [];
const lists = Boards.findOne({ '_id': boardId })
let members = lists.members
members.forEach(member => {
boardMembers.push(member.userId);
});
return boardMembers
},
isStarred() {
const user = Meteor.user();
return user && user.hasStarred(this.currentData()._id);
@@ -217,6 +261,7 @@ BlazeComponent.extendComponent({
evt.preventDefault();
},
'click .js-clone-board'(evt) {
let title = getSlug(Boards.findOne(this.currentData()._id).title) || 'cloned-board';
Meteor.call(
'copyBoard',
this.currentData()._id,
@@ -227,10 +272,14 @@ BlazeComponent.extendComponent({
},
(err, res) => {
if (err) {
this.setError(err.error);
console.error(err);
} else {
Session.set('fromBoard', null);
Utils.goBoardId(res);
subManager.subscribe('board', res, false);
FlowRouter.go('board', {
id: res,
slug: title,
});
}
},
);
@@ -254,10 +303,10 @@ BlazeComponent.extendComponent({
}
});
},
'click #resetBtn'(event){
'click #resetBtn'(event) {
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
for(let i=0; i < allBoards.length; i++){
for (let i = 0; i < allBoards.length; i++) {
currBoard = allBoards[i];
currBoard.style.display = "block";
}
@@ -265,57 +314,55 @@ BlazeComponent.extendComponent({
'click #filterBtn'(event) {
event.preventDefault();
let selectedTeams = document.querySelectorAll('#jsAllBoardTeams option:checked');
let selectedTeamsValues = Array.from(selectedTeams).map(function(elt){return elt.value});
let selectedTeamsValues = Array.from(selectedTeams).map(function (elt) { return elt.value });
let index = selectedTeamsValues.indexOf("-1");
if (index > -1) {
selectedTeamsValues.splice(index, 1);
}
let selectedOrgs = document.querySelectorAll('#jsAllBoardOrgs option:checked');
let selectedOrgsValues = Array.from(selectedOrgs).map(function(elt){return elt.value});
let selectedOrgsValues = Array.from(selectedOrgs).map(function (elt) { return elt.value });
index = selectedOrgsValues.indexOf("-1");
if (index > -1) {
selectedOrgsValues.splice(index, 1);
}
if(selectedTeamsValues.length > 0 || selectedOrgsValues.length > 0){
if (selectedTeamsValues.length > 0 || selectedOrgsValues.length > 0) {
const query = {
$and: [
{ archived: false },
{ type: 'board' },
{ $or:[] }
{ $or: [] }
]
};
if(selectedTeamsValues.length > 0)
{
query.$and[2].$or.push({'teams.teamId': {$in : selectedTeamsValues}});
if (selectedTeamsValues.length > 0) {
query.$and[2].$or.push({ 'teams.teamId': { $in: selectedTeamsValues } });
}
if(selectedOrgsValues.length > 0)
{
query.$and[2].$or.push({'orgs.orgId': {$in : selectedOrgsValues}});
if (selectedOrgsValues.length > 0) {
query.$and[2].$or.push({ 'orgs.orgId': { $in: selectedOrgsValues } });
}
let filteredBoards = Boards.find(query, {}).fetch();
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
if(filteredBoards.length > 0){
if (filteredBoards.length > 0) {
let currBoardId;
let found;
for(let i=0; i < allBoards.length; i++){
for (let i = 0; i < allBoards.length; i++) {
currBoard = allBoards[i];
currBoardId = currBoard.classList[0];
found = filteredBoards.find(function(board){
found = filteredBoards.find(function (board) {
return board._id == currBoardId;
});
if(found !== undefined)
if (found !== undefined)
currBoard.style.display = "block";
else
currBoard.style.display = "none";
}
}
else{
for(let i=0; i < allBoards.length; i++){
else {
for (let i = 0; i < allBoards.length; i++) {
currBoard = allBoards[i];
currBoard.style.display = "none";
}
-253
View File
@@ -1,253 +0,0 @@
@import 'nib'
$spaceBetweenTiles = 16px
.board-list
margin: 0 ($spaceBetweenTiles/2)
li
float: left
width: 20%
box-sizing: border-box
position: relative
&.placeholder:after
content: '';
display: block;
background: darken(white, 20%)
border-radius: 3px;
height: 106px;
margin: 8px;
&.ui-sortable-helper
cursor: grabbing
transform: rotate(4deg)
display: block !important
&.starred
.fa-star,
.fa-star-o
opacity: 1
.board-list-item
overflow: hidden;
background-color: #999
color: #f6f6f6
min-height: 100px
font-size: 16px
line-height: 22px
border-radius: 3px
display: block
font-weight: 700
padding: 8px
margin: ($spaceBetweenTiles/2)
position: relative
text-decoration: none
word-wrap: break-word
&.template-container
border: 4px solid #fff
&.tile
background-size: auto
background-repeat: repeat
.board-list-item-sub-name
color: rgba(255, 255, 255, .5)
display: block
font-size: 14px
font-weight: 400
line-height: 22px
.board-list-item-desc
color: #fff
display: block
font-size: 14px
font-weight: 400
line-height: 18px
.js-add-board
text-align:center
.label
font-weight: normal
line-height: 56px
:hover
background-color:#939393
.fa-star,
.fa-star-o
bottom: 0
font-size: 14px
height: 18px
line-height: 18px
opacity: 0
padding: 9px 9px
position: absolute
right: 0
top: 0
transition-duration: .15s
transition-property: color, font-size, background
.fa-circle
bottom: 0;
font-size: 10px;
height: 10px;
line-height: 10px;
padding: 9px 9px;
position: absolute;
right: 0;
transition-duration: .15s
transition-property: color, font-size, background
.has-overtime-card-active
color: #eb4646 !important
.no-overtime-card-active
color: #3cb500 !important
.is-star-active
color: white
.fa-clone
position: absolute;
bottom: 0
font-size: 14px
height: 18px
line-height: 18px
opacity: 0
right: 0
padding: 9px 9px
transition-duration: .15s
transition-property: color, font-size, background
.fa-archive
position: absolute;
bottom: 0
font-size: 14px
height: 18px
line-height: 18px
opacity: 0
left: 0
padding: 9px 9px
transition-duration: .15s
transition-property: color, font-size, background
li:hover a
&:hover
.fa-star,
.fa-clone,
.fa-archive,
.fa-star-o
color: white
.fa-star,
.fa-clone,
.fa-archive,
.fa-star-o
color: white
opacity: .75
&:hover
font-size: 18px
opacity: 1
&.is-star-active
opacity: 1
.board-backgrounds-list
.board-background-select
box-sizing: border-box
display: block
float: left
width: 50%
padding-top: 12px
position: relative
z-index: 1
&:nth-child(-n + 2)
padding-top: 0
&:nth-child(2n)
padding-left: 6px
&:nth-child(2n+1)
padding-right: 6px
.background-box
color: white
border-radius: 3px
background-size: cover
display: block
height: 74px
position: relative
width: 100%
cursor: pointer
display: flex
align-items: center
justify-content: center
i.fa-check
font-size: 25px
color: white
@media screen and (max-width: 800px)
.board-list
height: 100%
overflow: scroll
li
width: 50%
.board-list-item
overflow: hidden
height: 8rem
.board-list-item-sub-name
position: relative
top: -100px
left: -100px
.board-handle
position: absolute
padding: 7px
top: 50%
transform: translateY(-50%)
right: 10px
font-size: 24px
@media screen and (max-width: 360px)
li
width: 100%
.board-handle
position: absolute
padding: 7px
top: 50%
transform: translateY(-50%)
right: 10px
font-size: 24px
.AllBoardTeamsOrgs
list-style-type: none;
overflow: hidden;
.AllBoardTeams,.AllBoardOrgs,.AllBoardBtns
float: left;
.js-AllBoardOrgs
margin-left: 16px;
.AllBoardTeams
margin-left : 16px;
.AllBoardButtonsContainer
margin: 16px;
#filterBtn,#resetBtn
display: inline;
.js-board
display: block;
+85
View File
@@ -0,0 +1,85 @@
.attachment-upload {
text-align: center;
font-weight: bold;
}
.attachments-galery {
display: flex;
flex-wrap: wrap;
}
.attachments-galery .attachment-item {
width: 31.33%;
margin: 10px 1% 0;
text-align: center;
border-radius: 3px;
overflow: auto;
background: #ededed;
min-height: 120px;
}
.attachments-galery .attachment-item:hover {
background: #e0e0e0;
}
.attachments-galery .attachment-item.add-attachment {
display: flex;
align-items: center;
}
.attachments-galery .attachment-item.add-attachment a {
display: block;
margin: auto;
}
.attachments-galery .attachment-item .attachment-thumbnail {
height: 80px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
.attachments-galery .attachment-item .attachment-thumbnail .attachment-thumbnail-img {
max-height: 100%;
max-width: 100%;
}
.attachments-galery .attachment-item .attachment-thumbnail .attachment-thumbnail-ext {
text-transform: uppercase;
font-size: 1.6em;
}
.attachments-galery .attachment-item .attachment-details {
font-size: 0.75em;
margin: 3px;
}
.attachments-galery .attachment-item .attachment-details .attachment-details-actions a {
display: block;
}
.attachments-galery .attachment-item .attachment-details .attachment-details-actions a.attachment-details-menu {
padding-top: 10px;
}
.attachment-image-preview {
max-width: 100px;
display: block;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
.preview-clipboard-image {
width: 280px;
max-width: 100%;
height: 200px;
display: block;
border: 1px solid #000;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
@media screen and (max-width: 800px) {
.attachments-galery .attachment-item {
width: 48%;
}
.attachments-galery .attachment-item .attachment-thumbnail {
height: 130px;
}
.attachments-galery .attachment-item .attachment-details {
font-size: 1.1em;
}
}
@media screen and (max-width: 360px) {
.attachments-galery .attachment-item {
width: 100%;
}
.attachments-galery .attachment-item .attachment-thumbnail {
height: 200px;
}
}
+67 -31
View File
@@ -1,19 +1,31 @@
template(name="cardAttachmentsPopup")
ul.pop-over-list
li
input.js-attach-file.hide(type="file" name="file" multiple)
a.js-computer-upload {{_ 'computer'}}
li
a.js-upload-clipboard-image {{_ 'clipboard'}}
if $gt uploads.length 0
.attachment-upload {{_ 'uploading'}}
table
tr
th.upload-file-name-descr {{_ 'name'}}
th.upload-progress-descr {{_ 'progress'}}
th.upload-remaining-descr {{_ 'remaining_time'}}
th.upload-speed-descr {{_ 'speed'}}
each upload in uploads
tr
td.upload-file-name-value {{upload.file.name}}
td.upload-progress-value {{upload.progress.get}}%
td.upload-remaining-value {{getEstimateTime upload}}
td.upload-speed-value {{getEstimateSpeed upload}}
else
ul.pop-over-list
li
input.js-attach-file.hide(type="file" name="file" multiple)
a.js-computer-upload {{_ 'computer'}}
li
a.js-upload-clipboard-image {{_ 'clipboard'}}
template(name="previewClipboardImagePopup")
p <kbd>Ctrl</kbd>+<kbd>V</kbd> {{_ "paste-or-dragdrop"}}
img.preview-clipboard-image()
button.primary.js-upload-pasted-image {{_ 'upload'}}
template(name="previewAttachedImagePopup")
img.preview-large-image.js-large-image-clicked(src="{{url}}")
template(name="attachmentDeletePopup")
p {{_ "attachment-delete-pop"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
@@ -22,47 +34,35 @@ template(name="attachmentsGalery")
.attachments-galery
each attachments
.attachment-item
a.attachment-thumbnail.swipebox(href="{{url}}" title="{{name}}")
if isUploaded
a.attachment-thumbnail.swipebox(href="{{link}}" title="{{name}}")
if link
if isImage
img.attachment-thumbnail-img(src="{{url}}")
img.attachment-thumbnail-img(src="{{link}}")
else if($eq extension 'mp3')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="audio/mpeg")
source(src="{{link}}" type="audio/mpeg")
else if($eq extension 'ogg')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/ogg")
source(src="{{link}}" type="video/ogg")
else if($eq extension 'webm')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/webm")
source(src="{{link}}" type="video/webm")
else if($eq extension 'mp4')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/mp4")
source(src="{{link}}" type="video/mp4")
else
span.attachment-thumbnail-ext= extension
else
+spinner
p.attachment-details
= name
span.file-size ({{fileSize size}} KB)
span.file-size ({{fileSize size}})
span.attachment-details-actions
a.js-download(href="{{url download=true}}")
a.js-download(href="{{link}}?download=true", download="{{name}}")
i.fa.fa-download
| {{_ 'download'}}
if currentUser.isBoardMember
unless currentUser.isCommentOnly
unless currentUser.isWorker
if isImage
a(class="{{#if $eq ../coverId _id}}js-remove-cover{{else}}js-add-cover{{/if}}")
i.fa.fa-thumb-tack
if($eq ../coverId _id)
| {{_ 'remove-cover'}}
else
| {{_ 'add-cover'}}
if currentUser.isBoardAdmin
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
a.fa.fa-navicon.attachment-details-menu.js-open-attachment-menu(title="{{_ 'attachmentActionsPopup-title'}}")
if currentUser.isBoardMember
unless currentUser.isCommentOnly
@@ -70,3 +70,39 @@ template(name="attachmentsGalery")
//li.attachment-item.add-attachment
a.js-add-attachment(title="{{_ 'add-attachment' }}")
i.fa.fa-plus
template(name="attachmentActionsPopup")
ul.pop-over-list
li
if isImage
a(class="{{#if isCover}}js-remove-cover{{else}}js-add-cover{{/if}}")
i.fa.fa-thumb-tack
if isCover
| {{_ 'remove-cover'}}
else
| {{_ 'add-cover'}}
if currentUser.isBoardAdmin
a.js-rename
i.fa.fa-pencil-square-o
| {{_ 'rename'}}
a.js-confirm-delete
i.fa.fa-close
| {{_ 'delete'}}
p.attachment-storage
| {{versions.original.storage}}
if $neq versions.original.storage "fs"
a.js-move-storage-fs
i.fa.fa-arrow-right
| {{_ 'attachment-move-storage-fs'}}
if $neq versions.original.storage "gridfs"
if versions.original.storage
a.js-move-storage-gridfs
i.fa.fa-arrow-right
| {{_ 'attachment-move-storage-gridfs'}}
template(name="attachmentRenamePopup")
input.js-edit-attachment-name(type='text' autofocus value="{{getNameWithoutExtension}}" dir="auto")
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-attachment-name(type="submit") {{_ 'save'}}
+147 -107
View File
@@ -1,48 +1,14 @@
const filesize = require('filesize');
const prettyMilliseconds = require('pretty-ms');
Template.attachmentsGalery.events({
'click .js-add-attachment': Popup.open('cardAttachments'),
'click .js-confirm-delete': Popup.afterConfirm(
'attachmentDelete',
function() {
Attachments.remove(this._id);
Popup.back();
},
),
// If we let this event bubble, FlowRouter will handle it and empty the page
// content, see #101.
'click .js-download'(event) {
event.stopPropagation();
},
'click .js-add-cover'() {
Cards.findOne(this.cardId).setCover(this._id);
},
'click .js-remove-cover'() {
Cards.findOne(this.cardId).unsetCover();
},
'click .js-preview-image'(event) {
Popup.open('previewAttachedImage').call(this, event);
// when multiple thumbnails, if click one then another very fast,
// we might get a wrong width from previous img.
// when popup reused, onRendered() won't be called, so we cannot get there.
// here make sure to get correct size when this img fully loaded.
const img = $('img.preview-large-image')[0];
if (!img) return;
const rePosPopup = () => {
const w = img.width;
const h = img.height;
// if the image is too large, we resize & center the popup.
if (w > 300) {
$('div.pop-over').css({
width: w + 20,
position: 'absolute',
left: (window.innerWidth - w) / 2,
top: (window.innerHeight - h) / 2,
});
}
};
const url = $(event.currentTarget).attr('src');
if (img.src === url && img.complete) rePosPopup();
else img.onload = rePosPopup;
},
'click .js-open-attachment-menu': Popup.open('attachmentActions'),
});
Template.attachmentsGalery.helpers({
@@ -50,63 +16,69 @@ Template.attachmentsGalery.helpers({
return Meteor.user().isBoardAdmin();
},
fileSize(size) {
return Math.round(size / 1024);
const ret = filesize(size);
return ret;
},
});
Template.previewAttachedImagePopup.events({
'click .js-large-image-clicked'() {
Popup.back();
Template.cardAttachmentsPopup.onCreated(function() {
this.uploads = new ReactiveVar([]);
});
Template.cardAttachmentsPopup.helpers({
getEstimateTime(upload) {
const ret = prettyMilliseconds(upload.estimateTime.get());
return ret;
},
getEstimateSpeed(upload) {
const ret = filesize(upload.estimateSpeed.get(), {round: 0}) + "/s";
return ret;
},
uploads() {
return Template.instance().uploads.get();
}
});
Template.cardAttachmentsPopup.events({
'change .js-attach-file'(event) {
'change .js-attach-file'(event, templateInstance) {
const card = this;
const processFile = f => {
Utils.processUploadedAttachment(card, f, attachment => {
if (attachment && attachment._id && attachment.isImage()) {
card.setCover(attachment._id);
}
Popup.back();
});
};
FS.Utility.eachFile(event, f => {
if (
MAX_IMAGE_PIXEL > 0 &&
typeof f.type === 'string' &&
f.type.match(/^image/)
) {
// is image
const reader = new FileReader();
reader.onload = function(e) {
const dataurl = e && e.target && e.target.result;
if (dataurl !== undefined) {
Utils.shrinkImage({
dataurl,
maxSize: MAX_IMAGE_PIXEL,
ratio: COMPRESS_RATIO,
toBlob: true,
callback(blob) {
if (blob === false) {
processFile(f);
} else {
blob.name = f.name;
processFile(blob);
}
},
});
} else {
// couldn't process it let other function handle it?
processFile(f);
}
const files = event.currentTarget.files;
if (files) {
let uploads = [];
for (const file of files) {
const fileId = Random.id();
const config = {
file: file,
fileId: fileId,
meta: Utils.getCommonAttachmentMetaFrom(card),
chunkSize: 'dynamic',
};
reader.readAsDataURL(f);
} else {
processFile(f);
config.meta.fileId = fileId;
const uploader = Attachments.insert(
config,
false,
);
uploader.on('start', function() {
uploads.push(this);
templateInstance.uploads.set(uploads);
});
uploader.on('uploaded', (error, fileRef) => {
if (!error) {
if (fileRef.isImage) {
card.setCover(fileRef._id);
}
}
});
uploader.on('end', (error, fileRef) => {
uploads = uploads.filter(_upload => _upload.config.fileId != fileRef._id);
templateInstance.uploads.set(uploads);
if (uploads.length == 0 ) {
Popup.back();
}
});
uploader.start();
}
});
}
},
'click .js-computer-upload'(event, templateInstance) {
templateInstance.find('.js-attach-file').click();
@@ -154,30 +126,98 @@ Template.previewClipboardImagePopup.onRendered(() => {
Template.previewClipboardImagePopup.events({
'click .js-upload-pasted-image'() {
const results = pastedResults;
if (results && results.file) {
const card = this;
if (pastedResults && pastedResults.file) {
const file = pastedResults.file;
window.oPasted = pastedResults;
const card = this;
const file = new FS.File(results.file);
if (!results.name) {
// if no filename, it's from clipboard. then we give it a name, with ext name from MIME type
if (typeof results.file.type === 'string') {
file.name(results.file.type.replace('image/', 'clipboard.'));
const fileId = Random.id();
const config = {
file,
fileId: fileId,
meta: Utils.getCommonAttachmentMetaFrom(card),
fileName: file.name || file.type.replace('image/', 'clipboard.'),
chunkSize: 'dynamic',
};
config.meta.fileId = fileId;
const uploader = Attachments.insert(
config,
false,
);
uploader.on('uploaded', (error, fileRef) => {
if (!error) {
if (fileRef.isImage) {
card.setCover(fileRef._id);
}
}
}
file.updatedAt(new Date());
file.boardId = card.boardId;
file.cardId = card._id;
file.userId = Meteor.userId();
const attachment = Attachments.insert(file);
if (attachment && attachment._id && attachment.isImage()) {
card.setCover(attachment._id);
}
pastedResults = null;
$(document.body).pasteImageReader(() => {});
Popup.back();
});
uploader.on('end', (error, fileRef) => {
pastedResults = null;
$(document.body).pasteImageReader(() => {});
Popup.back();
});
uploader.start();
}
},
});
BlazeComponent.extendComponent({
isCover() {
const ret = Cards.findOne(this.data().meta.cardId).coverId == this.data()._id;
return ret;
},
events() {
return [
{
'click .js-rename': Popup.open('attachmentRename'),
'click .js-confirm-delete': Popup.afterConfirm('attachmentDelete', function() {
Attachments.remove(this._id);
Popup.back(2);
}),
'click .js-add-cover'() {
Cards.findOne(this.data().meta.cardId).setCover(this.data()._id);
Popup.back();
},
'click .js-remove-cover'() {
Cards.findOne(this.data().meta.cardId).unsetCover();
Popup.back();
},
'click .js-move-storage-fs'() {
Meteor.call('moveAttachmentToStorage', this.data()._id, "fs");
Popup.back();
},
'click .js-move-storage-gridfs'() {
Meteor.call('moveAttachmentToStorage', this.data()._id, "gridfs");
Popup.back();
},
}
]
}
}).register('attachmentActionsPopup');
BlazeComponent.extendComponent({
getNameWithoutExtension() {
const ret = this.data().name.replace(new RegExp("\." + this.data().extension + "$"), "");
return ret;
},
events() {
return [
{
'keydown input.js-edit-attachment-name'(evt) {
// enter = save
if (evt.keyCode === 13) {
this.find('button[type=submit]').click();
}
},
'click button.js-submit-edit-attachment-name'(event) {
// save button pressed
event.preventDefault();
const name = this.$('.js-edit-attachment-name')[0]
.value
.trim() + this.data().extensionWithDot;
Meteor.call('renameAttachment', this.data()._id, name);
Popup.back(2);
},
}
]
}
}).register('attachmentRenamePopup');
-85
View File
@@ -1,85 +0,0 @@
@import 'nib'
.attachments-galery
display: flex
flex-wrap: wrap
.attachment-item
width: 33.33% - 2%
margin: 10px 1% 0
text-align: center
border-radius: 3px
overflow: auto
background: darken(white, 7%)
min-height: 120px
&:hover
background: darken(white, 12%)
&.add-attachment
display: flex
align-items: center
a
display: block
margin: auto
.attachment-thumbnail
height: 80px
display: flex
align-items: center
justify-content: center
position: relative
.attachment-thumbnail-img
max-height: 100%
max-width: 100%
.attachment-thumbnail-ext
text-transform: uppercase
font-size: 1.6em
.attachment-details
font-size: 0.75em
margin: 3px
.attachment-details-actions a
display: block
.attachment-image-preview
max-width: 100px
display: block
box-shadow: 0 1px 2px rgba(0,0,0,.2)
.preview-large-image
max-width: 1000px
display: block
box-shadow: 0 1px 2px rgba(0,0,0,.2)
.preview-clipboard-image
width: 280px
max-width: 100%;
height: 200px
display: block
border: 1px solid black
box-shadow: 0 1px 2px rgba(0,0,0,.2)
@media screen and (max-width: 800px)
.attachments-galery
flex-direction
row
.attachment-item
width: 50% - 2%
.attachment-thumbnail
height: 130px
.attachment-details
font-size: 1.1em
@media screen and (max-width: 360px)
.attachments-galery
.attachment-item
width: 100%
.attachment-thumbnail
height: 200px
+6 -3
View File
@@ -1,3 +1,5 @@
import moment from 'moment/min/moment-with-locales';
import { TAPi18n } from '/imports/i18n';
import { DatePicker } from '/client/lib/datepicker';
import Cards from '/models/cards';
@@ -279,9 +281,7 @@ CardCustomField.register('cardCustomField');
if (event.keyCode === 13) {
event.preventDefault();
if (event.metaKey || event.ctrlKey) {
this.find('button[type=submit]').click();
} else if (event.target.value.trim()) {
if (event.target.value.trim() || event.metaKey || event.ctrlKey) {
const inputLast = this.find('input.last');
let items = this.getItems();
@@ -307,6 +307,9 @@ CardCustomField.register('cardCustomField');
this.stringtemplateItems.set(items);
}
if (event.metaKey || event.ctrlKey) {
this.find('button[type=submit]').click();
}
}
},
+67
View File
@@ -0,0 +1,67 @@
.card-date {
display: block;
border-radius: 4px;
padding: 1px 3px;
background-color: #dbdbdb;
}
.card-date:hover,
.card-date.is-active {
background-color: #b3b3b3;
}
.card-date.current,
.card-date.almost-due,
.card-date.due,
.card-date.long-overdue {
color: #fff;
}
.card-date.current {
background-color: #5ba639;
}
.card-date.current:hover,
.card-date.current.is-active {
background-color: #46802c;
}
.card-date.almost-due {
background-color: #edc909;
}
.card-date.almost-due:hover,
.card-date.almost-due.is-active {
background-color: #bc9f07;
}
.card-date.due {
background-color: #fa3f00;
}
.card-date.due:hover,
.card-date.due.is-active {
background-color: #c73200;
}
.card-date.long-overdue {
background-color: #fd5d47;
}
.card-date.long-overdue:hover,
.card-date.long-overdue.is-active {
background-color: #fd3e24;
}
.card-date.end-date time::before {
content: "\f253";
}
.card-date.due-date time::before {
content: "\f090";
}
.card-date.start-date time::before {
content: "\f251";
}
.card-date.received-date time::before {
content: "\f08b";
}
.card-date time::before {
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
-webkit-font-smoothing: antialiased;
margin-right: 0.3em;
}
.customfield-date {
display: block;
border-radius: 4px;
padding: 1px 3px;
}
+8 -6
View File
@@ -1,3 +1,5 @@
import moment from 'moment/min/moment-with-locales';
import { TAPi18n } from '/imports/i18n';
import { DatePicker } from '/client/lib/datepicker';
Template.dateBadge.helpers({
@@ -317,31 +319,31 @@ CardCustomFieldDate.register('cardCustomFieldDate');
(class extends CardReceivedDate {
showDate() {
return this.date.get().format('l');
return this.date.get().format('L');
}
}.register('minicardReceivedDate'));
(class extends CardStartDate {
showDate() {
return this.date.get().format('l');
return this.date.get().format('L');
}
}.register('minicardStartDate'));
(class extends CardDueDate {
showDate() {
return this.date.get().format('l');
return this.date.get().format('L');
}
}.register('minicardDueDate'));
(class extends CardEndDate {
showDate() {
return this.date.get().format('l');
return this.date.get().format('L');
}
}.register('minicardEndDate'));
(class extends CardCustomFieldDate {
showDate() {
return this.date.get().format('l');
return this.date.get().format('L');
}
}.register('minicardCustomFieldDate'));
@@ -358,7 +360,7 @@ class VoteEndDate extends CardDate {
return classes;
}
showDate() {
return this.date.get().format('l LT');
return this.date.get().format('L LT');
}
showTitle() {
return `${TAPi18n.__('card-end-on')} ${this.date.get().format('LLLL')}`;
-63
View File
@@ -1,63 +0,0 @@
.card-date
display: block
border-radius: 4px
padding: 1px 3px
background-color: #dbdbdb
&:hover, &.is-active
background-color: #b3b3b3
&.current, &.almost-due, &.due, &.long-overdue
color: #fff
&.current
background-color: #5ba639
&:hover, &.is-active
background-color: darken(#5ba639, 10)
&.almost-due
background-color: #edc909
&:hover, &.is-active
background-color: darken(#edc909, 10)
&.due
background-color: #fa3f00
&:hover, &.is-active
background-color: darken(#fa3f00, 10)
&.long-overdue
background-color: #fd5d47
&:hover, &.is-active
background-color: darken(#fd5d47, 7)
&.end-date
time
&::before
content: "\f253" // symbol: fa-hourglass-end
&.due-date
time
&::before
content: "\f090" // symbol: fa-sign-in
&.start-date
time
&::before
content: "\f251" // symbol: fa-hourglass-start
&.received-date
time
&::before
content: "\f08b" // symbol: fa-sign-out
time
&::before
font: normal normal normal 14px/1 FontAwesome
font-size: inherit
-webkit-font-smoothing: antialiased
margin-right: 0.3em
.customfield-date
display: block
border-radius: 4px
padding: 1px 3px
@@ -0,0 +1,56 @@
.new-description {
position: relative;
margin: 0 0 20px 0;
}
.new-description.is-open .helper {
display: inline-block;
}
.new-description.is-open textarea {
min-height: 100px;
color: #4d4d4d;
cursor: auto;
overflow: hidden;
word-wrap: break-word;
}
.new-description .too-long {
margin-top: 8px;
}
.new-description textarea {
background-color: #fff;
border: 0;
box-shadow: 0 1px 2px rgba(0,0,0,0.23);
height: 36px;
margin: 4px 4px 6px 0;
padding: 9px 11px;
width: 100%;
}
.new-description textarea:hover,
.new-description textarea:is-open {
background-color: #fff;
box-shadow: 0 1px 3px rgba(0,0,0,0.33);
border: 0;
cursor: pointer;
}
.new-description textarea:is-open {
cursor: auto;
}
.description-item {
background-color: #fff;
border: 0;
box-shadow: 0 1px 2px rgba(0,0,0,0.23);
color: #8c8c8c;
height: 36px;
margin: 4px 4px 6px 0;
width: 92%;
}
.description-item:hover {
background: #e0e0e0;
}
.description-item.add-description {
display: flex;
margin: 5px;
}
.description-item.add-description a {
display: block;
margin: auto;
}
@@ -1,59 +0,0 @@
@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)
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
+588
View File
@@ -0,0 +1,588 @@
.assignee {
border-radius: 3px;
display: block;
position: relative;
float: left;
height: 30px;
width: 30px;
margin: 0 4px 4px 0;
cursor: pointer;
user-select: none;
z-index: 1;
text-decoration: none;
border-radius: 50%;
}
.assignee .avatar {
overflow: hidden;
border-radius: 50%;
}
.assignee .avatar.avatar-assignee-initials {
height: 70%;
width: 70%;
padding: 15%;
background-color: #dbdbdb;
color: #444;
position: absolute;
}
.assignee .avatar.avatar-image {
object-fit: cover;
object-position: center;
height: 100%;
width: 100%;
}
.assignee .assignee-presence-status {
background-color: #b3b3b3;
border: 1px solid #fff;
border-radius: 50%;
height: 7px;
width: 7px;
position: absolute;
right: -1px;
bottom: -1px;
border: 1px solid #fff;
z-index: 15;
}
.assignee .assignee-presence-status.active {
background: #64c464;
border-color: #daf1da;
}
.assignee .assignee-presence-status.idle {
background: #e4e467;
border-color: #f7f7d4;
}
.assignee .assignee-presence-status.disconnected {
background: #bdbdbd;
border-color: #ededed;
}
.assignee .assignee-presence-status.pending {
background: #e44242;
border-color: #f1dada;
}
.assignee.add-assignee {
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 0 2px #bfbfbf inset;
}
.assignee.add-assignee:hover,
.assignee.add-assignee.is-active {
box-shadow: 0 0 0 2px #666 inset;
}
.copied-tooltip {
display: none;
padding: 0px 10px;
background-color: rgba(0,0,0,0.875);
color: #fff;
border-radius: 5px;
}
.card-details {
padding: 0;
flex-shrink: 0;
flex-basis: 600px;
will-change: flex-basis;
overflow-y: scroll;
overflow-x: hidden;
background: #f7f7f7;
border-radius: bottom 3px;
z-index: 20;
animation: flexGrowIn 0.1s;
box-shadow: 0 0 7px 0 #b3b3b3;
transition: flex-basis 0.1s;
box-sizing: border-box;
}
.card-details .mCustomScrollBox {
padding-left: 0;
}
.card-details .card-details-canvas {
width: auto;
padding: 0 20px;
}
.card-details .card-details-header {
margin: 0 -20px 5px;
padding: 7px 20px;
background: #ededed;
border-bottom: 1px solid #dbdbdb;
position: sticky;
top: 0px;
z-index: 500;
}
.card-details .card-details-header .card-number {
color: #b3b3b3;
display: inline-block;
margin-right: 5px;
}
.card-details .card-details-header .close-card-details,
.card-details .card-details-header .maximize-card-details,
.card-details .card-details-header .minimize-card-details,
.card-details .card-details-header .card-details-menu,
.card-details .card-details-header .card-copy-button,
.card-details .card-details-header .card-copy-mobile-button,
.card-details .card-details-header .close-card-details-mobile-web,
.card-details .card-details-header .card-details-menu-mobile-web,
.card-details .card-details-header .copied-tooltip {
float: right;
}
.card-details .card-details-header .close-card-details,
.card-details .card-details-header .maximize-card-details,
.card-details .card-details-header .minimize-card-details {
font-size: 24px;
padding: 5px 10px 5px 10px;
margin-right: -8px;
}
.card-details .card-details-header .close-card-details-mobile-web {
font-size: 24px;
padding: 5px;
margin-right: 40px;
}
.card-details .card-details-header .card-copy-button {
font-size: 17px;
padding: 10px;
margin-right: 10px;
}
.card-details .card-details-header .card-copy-mobile-button {
font-size: 17px;
padding: 10px;
margin-right: 10px;
}
.card-details .card-details-header .card-details-menu {
font-size: 17px;
padding: 10px;
}
.card-details .card-details-header .card-details-menu-mobile-web {
font-size: 17px;
padding: 10px;
margin-right: 30px;
}
.card-details .card-details-header .card-details-watch {
font-size: 17px;
padding-left: 7px;
color: #a6a6a6;
}
.card-details .card-details-header .card-details-title {
font-weight: bold;
font-size: 1.33em;
margin: 7px 0 0;
padding: 0;
}
.card-details .card-details-header .linked-card-location {
font-style: italic;
font-size: 1em;
margin-bottom: 0;
}
.card-details .card-details-header .linked-card-location p {
margin-bottom: 0;
}
.card-details .card-details-header form.inlined-form {
margin-top: 5px;
margin-bottom: 10px;
}
.card-details .card-details-header form.inlined-form .copied-tooltip {
padding: 0px 10px;
}
.card-details .card-details-header .card-details-list {
font-size: 0.85em;
margin-bottom: 3px;
}
.card-details .card-details-header .card-details-list a.card-details-list-title {
font-weight: bold;
}
.card-details .card-details-header .card-details-list a.card-details-list-title.is-editable {
display: inline-block;
background: #e6e6e6;
border-radius: 3px;
padding: 0px 5px;
}
.card-details .card-details-header .copied-tooltip {
margin-right: 10px;
padding: 10px;
}
.card-details .card-description textarea {
min-height: 100px;
}
.card-details .card-details-items {
display: flex;
flex-wrap: wrap;
margin: 15px 0;
}
.card-details .card-details-items .card-details-item {
margin-right: 0.5em;
flex-grow: 1;
}
.card-details .card-details-items .card-details-item:last-child {
margin-right: 0;
}
.card-details .card-details-items .card-details-item.card-details-item-labels {
display: block;
word-wrap: break-word;
max-width: 95%;
}
.card-details .card-details-items .card-details-item.card-details-item-members,
.card-details .card-details-items .card-details-item.card-details-item-assignees,
.card-details .card-details-items .card-details-item.card-details-item-customfield,
.card-details .card-details-items .card-details-item.card-details-item-name {
display: block;
word-wrap: break-word;
max-width: 36%;
}
.card-details .card-details-items .card-details-item.card-details-item-creator,
.card-details .card-details-items .card-details-item.card-details-item-received,
.card-details .card-details-items .card-details-item.card-details-item-start,
.card-details .card-details-items .card-details-item.card-details-item-due,
.card-details .card-details-items .card-details-item.card-details-item-end {
display: block;
word-wrap: break-word;
max-width: 28%;
}
.card-details .card-details-items .card-details-item.custom-fields {
padding-left: 10px;
}
.card-details .card-details-item-title {
font-size: 16px;
font-weight: bold;
color: #4d4d4d;
}
.card-details .activities {
padding-top: 10px;
}
@media screen and (min-width: 801px) {
.card-details-maximized {
padding: 0;
flex-shrink: 0;
flex-basis: calc(100% - 20px);
will-change: flex-basis;
overflow-y: scroll;
overflow-x: scroll;
background: #f7f7f7;
border-radius: bottom 3px;
z-index: 100;
animation: flexGrowIn 0.1s;
box-shadow: 0 0 7px 0 #b3b3b3;
transition: flex-basis 0.1s;
box-sizing: border-box;
position: absolute;
top: 0;
left: 0;
height: calc(100% - 20px);
width: calc(100% - 20px);
float: left;
}
.card-details-maximized .card-details-left {
float: left;
top: 60px;
left: 20px;
width: 47%;
border-right: solid 2px #dbdbdb;
padding-right: 10px;
}
.card-details-maximized .card-details-right {
position: absolute;
float: right;
left: 50%;
margin: 15px 0;
}
.card-details-maximized .card-details-header {
width: 100%;
}
}
input[type="text"].attachment-add-link-input {
float: left;
margin: 0 0 8px;
width: 80%;
}
input[type="submit"].attachment-add-link-submit {
float: left;
margin: 0 0 8px 4px;
padding: 6px 12px;
width: 18%;
}
@media screen and (max-width: 800px) {
.card-details {
width: calc(100% - 1px);
padding: 0px 20px 0px 20px;
margin: 0px;
transition: none;
overflow-y: revert;
overflow-x: revert;
}
.card-details .card-details-canvas {
width: 100%;
padding-left: 0px;
}
.card-details .card-details-header .close-card-details {
margin-right: 0px;
}
.card-details .card-details-header .card-details-menu {
margin-right: 40px;
}
.card-details .card-details-header .maximize-card-details {
margin-right: 40px;
}
.card-details .card-details-header .minimize-card-details {
margin-right: 40px;
}
.card-details-popup {
padding: 0px 10px;
}
.pop-over > .content-wrapper > .popup-container-depth-0 {
width: 100%;
}
.pop-over > .content-wrapper > .popup-container-depth-0 > .content {
width: calc(100% - 10px);
}
.pop-over > .content-wrapper > .popup-container-depth-0 > .content > .card-details-popup hr {
margin: 15px 0px;
}
.pop-over > .content-wrapper > .popup-container-depth-0 .card-details-header {
margin: 0;
}
}
.card-details-white {
background: unset !important;
color: #000 !important;
border: 1px solid #eee;
}
.card-details-green {
background: #3cb500 !important;
color: #fff !important;
}
.card-details-yellow {
background: #fad900 !important;
color: #000 !important;
}
.card-details-orange {
background: #ff9f19 !important;
color: #000 !important;
}
.card-details-red {
background: #eb4646 !important;
color: #fff !important;
}
.card-details-purple {
background: #a632db !important;
color: #fff !important;
}
.card-details-blue {
background: #0079bf !important;
color: #fff !important;
}
.card-details-pink {
background: #ff78cb !important;
color: #000 !important;
}
.card-details-sky {
background: #00c2e0 !important;
color: #fff !important;
}
.card-details-black {
background: #4d4d4d !important;
color: #fff !important;
}
.card-details-lime {
background: #51e898 !important;
color: #000 !important;
}
.card-details-silver {
background: #c0c0c0 !important;
color: #000 !important;
}
.card-details-peachpuff {
background: #ffdab9 !important;
color: #000 !important;
}
.card-details-crimson {
background: #dc143c !important;
color: #fff !important;
}
.card-details-plum {
background: #dda0dd !important;
color: #000 !important;
}
.card-details-darkgreen {
background: #006400 !important;
color: #fff !important;
}
.card-details-slateblue {
background: #6a5acd !important;
color: #fff !important;
}
.card-details-magenta {
background: #f0f !important;
color: #fff !important;
}
.card-details-gold {
background: #ffd700 !important;
color: #000 !important;
}
.card-details-navy {
background: #000080 !important;
color: #fff !important;
}
.card-details-gray {
background: #808080 !important;
color: #fff !important;
}
.card-details-saddlebrown {
background: #8b4513 !important;
color: #fff !important;
}
.card-details-paleturquoise {
background: #afeeee !important;
color: #000 !important;
}
.card-details-mistyrose {
background: #ffe4e1 !important;
color: #000 !important;
}
.card-details-indigo {
background: #4b0082 !important;
color: #fff !important;
}
.voted {
opacity: 0.7;
}
.vote-title {
display: flex;
justify-content: space-between;
}
.vote-title .js-edit-date {
align-self: baseline;
margin-left: 5px;
}
.vote-result {
display: flex;
}
.js-show-positive-votes {
cursor: pointer;
}
.poker-voted {
opacity: 0.7;
}
.poker-title {
display: flex;
justify-content: space-between;
}
.poker-title .js-edit-date {
align-self: baseline;
margin-left: 5px;
}
.poker-result {
display: flex;
flex-flow: row wrap;
}
.js-show-positive-poker-votes {
cursor: pointer;
}
.poker-deck {
display: grid;
flex-direction: column;
text-align: center;
}
.poker-card-result {
width: 32px;
font-size: 1em;
font-weight: bold;
padding: 4px 2px 4px 2px;
cursor: default;
}
.winner {
font-weight: bold;
outline: #2d2d2d solid 2px;
}
.loser {
opacity: 0.5;
}
.responsive-table {
overflow-x: auto;
}
.poker-table {
display: table;
width: 100%;
padding-top: 10px;
}
.poker-table-row {
display: table-row;
}
.poker-table-heading {
background-color: #eee;
display: table-header-group;
}
.poker-table-cell {
display: table-cell;
padding: 0 0 5px 2px;
border-bottom: 1px solid #d2d0d0;
text-align: center;
min-width: 45px;
}
.poker-table-cell-who {
width: 150px;
vertical-align: middle;
}
.poker-table-heading-left,
.poker-table-heading-right {
display: table-header-group;
font-weight: bold;
border-top: 1px solid #808080;
}
@media (max-width: 400px) {
.poker-table-heading-right {
display: none;
}
}
.poker-table-body {
display: table-row-group;
}
.poker-table-side-left,
.poker-table-side-right {
display: inline-block;
}
.poker-table-side-right {
padding-left: 10px;
}
@media (max-width: 400px) {
.poker-table-side-right {
padding-left: 0px;
}
}
.estimation-add {
display: block;
overflow: auto;
margin-top: 15px;
margin-bottom: 5px;
}
.estimation-add input {
display: inline-block;
float: right;
margin: auto;
margin-right: 10px;
width: 100px;
}
.estimation-add button {
display: inline-block;
float: right;
margin: auto;
}
.poker-card {
width: 48px;
height: 72px;
float: left;
background: #fff;
border-radius: 5px;
display: table;
box-sizing: border-box;
padding: 5px;
margin: 3px;
font-size: 20px;
font-weight: bold;
text-shadow: #2d2d2d 1px 1px 0;
box-shadow: 0 0 5px #aaa;
text-align: center;
position: relative;
cursor: pointer;
}
.poker-card .inner {
display: table-cell;
vertical-align: middle;
border-radius: 5px;
overflow: hidden;
background-color: #cecece;
}
+31 -18
View File
@@ -234,6 +234,15 @@ template(name="cardDetails")
+viewer
= sort
if currentBoard.allowsShowLists
.card-details-item.card-details-show-lists
h3.card-details-item-title
i.fa.fa-list
| {{_ 'list'}}
select.js-select-card-details-lists(disabled="{{#unless canModifyCard}}disabled{{/unless}}")
each currentBoard.lists
option(value="{{_id}}" selected="{{#if isCurrentListId _id}}selected{{/if}}") {{title}}
//.card-details-items
if getSpentTime
.card-details-item.card-details-item-spent
@@ -545,11 +554,11 @@ template(name="cardDetails")
| {{_ 'attachments'}}
.card-checklist-attachmentGalery.card-attachmentGalery
+attachmentsGalery
hr
.card-details-right
unless currentUser.isNoComments
hr
.activity-title
h3.card-details-item-title
i.fa.fa-history
@@ -576,6 +585,8 @@ template(name="cardDetails")
+activities(card=this mode="card")
template(name="editCardTitleForm")
a.fa.fa-copy(title="{{_ 'copy-text-to-clipboard'}}")
span.copied-tooltip {{_ 'copied'}}
textarea.js-edit-card-title(rows='1' autofocus dir="auto")
= getTitle
.edit-controls.clearfix
@@ -671,13 +682,12 @@ template(name="cardDetailsActionsPopup")
i.fa.fa-copy
| {{_ 'copyCardPopup-title'}}
unless currentUser.isWorker
hr
ul.pop-over-list
li
a.js-copy-checklist-cards
i.fa.fa-list
i.fa.fa-copy
| {{_ 'copyChecklistToManyCardsPopup-title'}}
i.fa.fa-copy
| {{_ 'copyManyCardsPopup-title'}}
unless archived
hr
ul.pop-over-list
@@ -701,39 +711,42 @@ template(name="exportCardPopup")
| {{_ 'export-card-pdf'}}
template(name="moveCardPopup")
+boardsAndLists
+copyAndMoveCard
template(name="copyCardPopup")
label(for='copy-card-title') {{_ 'title'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
= getTitle
+boardsAndLists
+copyAndMoveCard
template(name="copyChecklistToManyCardsPopup")
label(for='copy-checklist-cards-title') {{_ 'copyChecklistToManyCardsPopup-instructions'}}:
template(name="copyManyCardsPopup")
label(for='copy-checklist-cards-title') {{_ 'copyManyCardsPopup-instructions'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
| {{_ 'copyChecklistToManyCardsPopup-format'}}
+boardsAndLists
| {{_ 'copyManyCardsPopup-format'}}
+copyAndMoveCard
template(name="boardsAndLists")
template(name="convertChecklistItemToCardPopup")
label(for='convert-checklist-item-to-card-title') {{_ 'title'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
= item.title
+copyAndMoveCard
template(name="copyAndMoveCard")
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}}
option(value="{{_id}}" selected="{{#if isDialogOptionBoardId _id}}selected{{/if}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each aBoardLists
option(value="{{_id}}") {{title}}
each lists
option(value="{{_id}}" selected="{{#if isDialogOptionListId _id}}selected{{/if}}") {{title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+180 -205
View File
@@ -1,3 +1,5 @@
import moment from 'moment/min/moment-with-locales';
import { TAPi18n } from '/imports/i18n';
import { DatePicker } from '/client/lib/datepicker';
import Cards from '/models/cards';
import Boards from '/models/boards';
@@ -7,8 +9,8 @@ import Users from '/models/users';
import Lists from '/models/lists';
import CardComments from '/models/cardComments';
import { ALLOWED_COLORS } from '/config/const';
import moment from 'moment';
import { UserAvatar } from '../users/userAvatar';
import { DialogWithBoardSwimlaneList } from '/client/lib/dialogWithBoardSwimlaneList';
const subManager = new SubsManager();
const { calculateIndexData } = Utils;
@@ -32,7 +34,7 @@ BlazeComponent.extendComponent({
},
onCreated() {
this.currentBoard = Boards.findOne(Session.get('currentBoard'));
this.currentBoard = Utils.getCurrentBoard();
this.isLoaded = new ReactiveVar(false);
if (this.parentComponent() && this.parentComponent().parentComponent()) {
@@ -70,7 +72,7 @@ BlazeComponent.extendComponent({
cardMaximized() {
return Meteor.user().hasCardMaximized();
return !Utils.getPopupCardId() && Meteor.user().hasCardMaximized();
},
canModifyCard() {
@@ -85,17 +87,29 @@ BlazeComponent.extendComponent({
scrollParentContainer() {
const cardPanelWidth = 600;
const parentComponent = this.parentComponent();
// TODO sometimes parentComponent is not available, maybe because it's not
// yet created?!
if (!parentComponent) return;
const bodyBoardComponent = parentComponent.parentComponent();
/*
// Incomplete fix about bug where opening card scrolls to wrong place
// https://github.com/wekan/wekan/issues/4572#issuecomment-1184149395
// TODO sometimes parentComponent is not available, maybe because it's not
// yet created?!
if (!parentComponent) return;
const bodyBoardComponent = parentComponent.parentComponent();
*/
//On Mobile View Parent is Board, Not Board Body. I cant see how this funciton should work then.
if (bodyBoardComponent === null) return;
const $cardView = this.$(this.firstNode());
const $cardContainer = bodyBoardComponent.$('.js-swimlanes');
// TODO sometimes cardContainer is not available, maybe because it's not yet
// created?!
if (!$cardContainer) return;
/*
// Incomplete fix about bug where opening card scrolls to wrong place
// https://github.com/wekan/wekan/issues/4572#issuecomment-1184149395
// TODO sometimes cardContainer is not available, maybe because it's not yet
// created?!
if (!$cardContainer) return;
*/
const cardContainerScroll = $cardContainer.scrollLeft();
const cardContainerWidth = $cardContainer.width();
@@ -168,6 +182,15 @@ BlazeComponent.extendComponent({
);
},
/** returns if the list id is the current list id
* @param listId list id to check
* @return is the list id the current list id ?
*/
isCurrentListId(listId) {
const ret = this.data().listId == listId;
return ret;
},
onRendered() {
if (Meteor.settings.public.CARD_OPENED_WEBHOOK_ENABLED) {
// Send Webhook but not create Activities records ---
@@ -202,11 +225,6 @@ BlazeComponent.extendComponent({
//-------------
}
if (!Utils.isMiniScreen()) {
Meteor.setTimeout(() => {
this.scrollParentContainer();
}, 500);
}
const $checklistsDom = this.$('.card-checklist-items');
$checklistsDom.sortable({
@@ -289,7 +307,7 @@ BlazeComponent.extendComponent({
$checklistsDom.data('sortable')
) {
$checklistsDom.sortable('option', 'disabled', disabled);
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$checklistsDom.sortable({ handle: '.checklist-handle' });
}
}
@@ -379,6 +397,14 @@ BlazeComponent.extendComponent({
card.move(card.boardId, card.swimlaneId, card.listId, sort);
}
},
'change .js-select-card-details-lists'(event) {
let card = this.data();
const listSelect = this.$('.js-select-card-details-lists')[0];
const listId = listSelect.options[listSelect.selectedIndex].value;
const minOrder = card.getMinSort(listId, card.swimlaneId);
card.move(card.boardId, card.swimlaneId, listId, minOrder - 1);
},
'click .js-go-to-linked-card'() {
Utils.goCardId(this.data().linkedId);
},
@@ -424,10 +450,20 @@ BlazeComponent.extendComponent({
'click .js-maximize-card-details'() {
Meteor.call('toggleCardMaximized');
autosize($('.card-details'));
if (!Utils.isMiniScreen()) {
Meteor.setTimeout(() => {
this.scrollParentContainer();
}, 500);
}
},
'click .js-minimize-card-details'() {
Meteor.call('toggleCardMaximized');
autosize($('.card-details'));
if (!Utils.isMiniScreen()) {
Meteor.setTimeout(() => {
this.scrollParentContainer();
}, 500);
}
},
'click .js-vote'(e) {
const forIt = $(e.target).hasClass('js-vote-positive');
@@ -652,25 +688,17 @@ Template.cardDetailsActionsPopup.events({
'click .js-move-card': Popup.open('moveCard'),
'click .js-copy-card': Popup.open('copyCard'),
'click .js-convert-checklist-item-to-card': Popup.open('convertChecklistItemToCard'),
'click .js-copy-checklist-cards': Popup.open('copyChecklistToManyCards'),
'click .js-copy-checklist-cards': Popup.open('copyManyCards'),
'click .js-set-card-color': Popup.open('setCardColor'),
'click .js-move-card-to-top'(event) {
event.preventDefault();
const minOrder = _.min(
this.list()
.cardsUnfiltered(this.swimlaneId)
.map((c) => c.sort),
);
const minOrder = this.getMinSort();
this.move(this.boardId, this.swimlaneId, this.listId, minOrder - 1);
Popup.back();
},
'click .js-move-card-to-bottom'(event) {
event.preventDefault();
const maxOrder = _.max(
this.list()
.cardsUnfiltered(this.swimlaneId)
.map((c) => c.sort),
);
const maxOrder = this.getMaxSort();
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
Popup.back();
},
@@ -689,9 +717,31 @@ Template.cardDetailsActionsPopup.events({
},
});
Template.editCardTitleForm.onRendered(function () {
autosize(this.$('.js-edit-card-title'));
});
BlazeComponent.extendComponent({
onRendered() {
autosize(this.$('textarea.js-edit-card-title'));
},
events() {
return [
{
'click a.fa.fa-copy'(event) {
const $editor = this.$('textarea');
const promise = Utils.copyTextToClipboard($editor[0].value);
const $tooltip = this.$('.copied-tooltip');
Utils.showCopied(promise, $tooltip);
},
'keydown .js-edit-card-title'(event) {
// If enter key was pressed, submit the data
// Unless the shift key is also being pressed
if (event.keyCode === 13 && !event.shiftKey) {
$('.js-submit-edit-card-title-form').click();
}
},
}
];
}
}).register('editCardTitleForm');
Template.cardMembersPopup.onCreated(function () {
let currBoard = Boards.findOne(Session.get('currentBoard'));
@@ -744,23 +794,13 @@ const filterMembers = (filterTerm) => {
user: Users.findOne(member.userId)
}))
.filter(({ user }) =>
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
.map(({ member }) => member);
}
return members;
}
Template.editCardTitleForm.events({
'keydown .js-edit-card-title'(event) {
// If enter key was pressed, submit the data
// Unless the shift key is also being pressed
if (event.keyCode === 13 && !event.shiftKey) {
$('.js-submit-edit-card-title-form').click();
}
},
});
Template.editCardRequesterForm.onRendered(function () {
autosize(this.$('.js-edit-card-requester'));
});
@@ -787,111 +827,58 @@ Template.editCardAssignerForm.events({
},
});
Template.moveCardPopup.events({
'click .js-done'() {
// XXX We should *not* get the currentCard from the global state, but
// instead from a “component” state.
const card = Utils.getCurrentCard();
const bSelect = $('.js-select-boards')[0];
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];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
card.move(boardId, swimlaneId, listId, 0);
/** Move Card Dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = Meteor.user().getMoveAndCopyDialogOptions();
return ret;
}
setDone(boardId, swimlaneId, listId, options) {
Meteor.user().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
const minOrder = card.getMinSort(listId, swimlaneId);
card.move(boardId, swimlaneId, listId, minOrder - 1);
}
}).register('moveCardPopup');
// set new id's to card object in case the card is moved to top by the comment "moveCard" after this command (.js-move-card)
this.boardId = boardId;
this.swimlaneId = swimlaneId;
this.listId = listId;
/** Copy Card Dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = Meteor.user().getMoveAndCopyDialogOptions();
return ret;
}
setDone(boardId, swimlaneId, listId, options) {
Meteor.user().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
Popup.back();
},
});
BlazeComponent.extendComponent({
onCreated() {
subManager.subscribe('board', Session.get('currentBoard'), false);
this.selectedBoardId = new ReactiveVar(Session.get('currentBoard'));
},
boards() {
return Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
_id: { $ne: Meteor.user().getTemplatesBoardId() },
},
{
sort: { sort: 1 /* boards default sorting */ },
},
);
},
swimlanes() {
const board = Boards.findOne(this.selectedBoardId.get());
return board.swimlanes();
},
aBoardLists() {
const board = Boards.findOne(this.selectedBoardId.get());
return board.lists();
},
events() {
return [
{
'change .js-select-boards'(event) {
this.selectedBoardId.set($(event.currentTarget).val());
subManager.subscribe('board', this.selectedBoardId.get(), false);
},
},
];
},
}).register('boardsAndLists');
Template.copyCardPopup.events({
'click .js-done'() {
const card = Utils.getCurrentCard();
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
const boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
// const textarea = $('#copy-card-title');
const textarea = this.$('#copy-card-title');
const title = textarea.val().trim();
// insert new card to the bottom of new list
card.sort = Lists.findOne(card.listId).cards().count();
if (title) {
card.title = title;
card.coverId = '';
const _id = card.copy(boardId, swimlaneId, listId);
// insert new card to the top of new list
const newCardId = Meteor.call('copyCard', card._id, boardId, swimlaneId, listId, true, {title: title});
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
// card will disappear instantly.
// See https://github.com/wekan/wekan/issues/80
Filter.addException(_id);
Popup.back();
Filter.addException(newCardId);
}
},
});
}
}).register('copyCardPopup');
Template.convertChecklistItemToCardPopup.events({
'click .js-done'() {
const card = Utils.getCurrentCard();
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
const boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
/** Convert Checklist-Item to card dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = Meteor.user().getMoveAndCopyDialogOptions();
return ret;
}
setDone(boardId, swimlaneId, listId, options) {
Meteor.user().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
const textarea = this.$('#copy-card-title');
const title = textarea.val().trim();
if (title) {
@@ -902,68 +889,42 @@ Template.convertChecklistItemToCardPopup.events({
swimlaneId: swimlaneId,
sort: 0,
});
const card = Cards.findOne(_id);
const minOrder = card.getMinSort();
card.move(card.boardId, card.swimlaneId, card.listId, minOrder - 1);
Filter.addException(_id);
Popup.back();
}
},
});
}
}).register('convertChecklistItemToCardPopup');
Template.copyChecklistToManyCardsPopup.events({
'click .js-done'() {
const card = Utils.getCurrentCard();
const oldId = card._id;
card._id = null;
const lSelect = $('.js-select-lists')[0];
card.listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
card.swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
card.boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
const titleEntry = textarea.val().trim();
// insert new card to the bottom of new list
card.sort = Lists.findOne(card.listId).cards().count();
/** Copy many cards dialog */
(class extends DialogWithBoardSwimlaneList {
getDialogOptions() {
const ret = Meteor.user().getMoveAndCopyDialogOptions();
return ret;
}
setDone(boardId, swimlaneId, listId, options) {
Meteor.user().setMoveAndCopyDialogOption(this.currentBoardId, options);
const card = this.data();
const textarea = this.$('#copy-card-title');
const title = textarea.val().trim();
if (title) {
const titleList = JSON.parse(title);
for (const obj of titleList) {
const newCardId = Meteor.call('copyCard', card._id, boardId, swimlaneId, listId, false, {title: obj.title, description: obj.description});
if (titleEntry) {
const titleList = JSON.parse(titleEntry);
for (let i = 0; i < titleList.length; i++) {
const obj = titleList[i];
card.title = obj.title;
card.description = obj.description;
card.coverId = '';
const _id = Cards.insert(card);
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
// card will disappear instantly.
// See https://github.com/wekan/wekan/issues/80
Filter.addException(_id);
// copy checklists
Checklists.find({ cardId: oldId }).forEach((ch) => {
ch.copy(_id);
});
// copy subtasks
const cursor = Cards.find({ parentId: oldId });
cursor.forEach(function () {
'use strict';
const subtask = arguments[0];
subtask.parentId = _id;
subtask._id = null;
/* const newSubtaskId = */ Cards.insert(subtask);
});
// copy card comments
CardComments.find({ cardId: oldId }).forEach((cmt) => {
cmt.copy(_id);
});
Filter.addException(newCardId);
}
Popup.back();
}
},
});
}
}).register('copyManyCardsPopup');
BlazeComponent.extendComponent({
onCreated() {
@@ -1616,10 +1577,29 @@ BlazeComponent.extendComponent({
EscapeActions.register(
'detailsPane',
() => {
// if card description diverges from database due to editing
// ask user whether changes should be applied
if (Meteor.user()) {
if (Meteor.user().profile.rescueCardDescription == true) {
currentDescription = document.getElementsByClassName("editor js-new-description-input").item(0)
if (currentDescription?.value && !(currentDescription.value === Utils.getCurrentCard().getDescription())) {
if (confirm(TAPi18n.__('rescue-card-description-dialogue'))) {
Utils.getCurrentCard().setDescription(document.getElementsByClassName("editor js-new-description-input").item(0).value);
// Save it!
console.log(document.getElementsByClassName("editor js-new-description-input").item(0).value);
console.log("current description", Utils.getCurrentCard().getDescription());
} else {
// Do nothing!
console.log('Description changes were not saved to the database.');
}
}
}
}
if (Session.get('cardDetailsIsDragging')) {
// Reset dragging status as the mouse landed outside the cardDetails template area and this will prevent a mousedown event from firing
Session.set('cardDetailsIsDragging', false);
Session.set('cardDetailsIsMouseDown', false);
} else {
// Prevent close card when the user is selecting text and moves the mouse cursor outside the card detail area
Utils.goBoardId(Session.get('currentBoard'));
@@ -1682,13 +1662,7 @@ Template.cardAssigneesPopup.helpers({
Template.cardAssigneePopup.helpers({
userData() {
// We need to handle a special case for the search results provided by the
// `matteodem:easy-search` package. Since these results gets published in a
// separate collection, and not in the standard Meteor.Users collection as
// expected, we use a component parameter ("property") to distinguish the
// two cases.
const userCollection = this.esSearch ? ESSearchResults : Users;
return userCollection.findOne(this.userId, {
return Users.findOne(this.userId, {
fields: {
profile: 1,
username: 1,
@@ -1701,16 +1675,17 @@ Template.cardAssigneePopup.helpers({
return user && user.isBoardAdmin() ? 'admin' : 'normal';
},
presenceStatusClassName() {
const user = Users.findOne(this.userId);
const userPresence = presences.findOne({ userId: this.userId });
if (user && user.isInvitedTo(Session.get('currentBoard'))) return 'pending';
else if (!userPresence) return 'disconnected';
else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
return 'active';
else return 'idle';
},
/*
presenceStatusClassName() {
const user = Users.findOne(this.userId);
const userPresence = presences.findOne({ userId: this.userId });
if (user && user.isInvitedTo(Session.get('currentBoard'))) return 'pending';
else if (!userPresence) return 'disconnected';
else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
return 'active';
else return 'idle';
},
*/
isCardAssignee() {
const card = Template.parentData();
const cardAssignees = card.getAssignees();
-562
View File
@@ -1,562 +0,0 @@
@import 'nib'
// Assignee, code copied from wekan/client/users/userAvatar.styl
avatar-radius = 50%
.assignee
border-radius: 3px
display: block
position: relative
float: left
height: 30px
width: @height
margin: 0 4px 4px 0
cursor: pointer
user-select: none
z-index: 1
text-decoration: none
border-radius: avatar-radius
.avatar
overflow: hidden
border-radius: avatar-radius
&.avatar-assignee-initials
height: 70%
width: @height
padding: 15%
background-color: #dbdbdb
color: #444444
position: absolute
&.avatar-image
object-fit: cover;
object-position: center;
height: 100%
width: @height
.assignee-presence-status
background-color: #b3b3b3
border: 1px solid #fff
border-radius: 50%
height: 7px
width: @height
position: absolute
right: -1px
bottom: -1px
border: 1px solid white
z-index: 15
&.active
background: #64c464
border-color: #daf1da
&.idle
background: #e4e467
border-color: #f7f7d4
&.disconnected
background: #bdbdbd
border-color: #ededed
&.pending
background: #e44242
border-color: #f1dada
&.add-assignee
display: flex
align-items: center
justify-content: center
box-shadow: 0 0 0 2px darken(white, 25%) inset
&:hover, &.is-active
box-shadow: 0 0 0 2px darken(white, 60%) inset
// Other card details
.copied-tooltip
display: none
padding: 0px 10px;
background-color: #000000df;
color: #fff;
border-radius: 5px;
.card-details
padding: 0
flex-shrink: 0
flex-basis: 600px
will-change: flex-basis
overflow-y: scroll
overflow-x: hidden
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 20 !important
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
.mCustomScrollBox
padding-left: 0
.card-details-canvas
width: auto
padding: 0 20px
.card-details-header
margin: 0 -20px 5px
padding: 7px 20px
background: darken(white, 7%)
border-bottom: 1px solid darken(white, 14%)
.card-number {
color: darken(white, 30%);
display: inline-block;
margin-right: 5px;
}
.close-card-details,
.maximize-card-details,
.minimize-card-details,
.card-details-menu,
.card-copy-button,
.card-copy-mobile-button,
.close-card-details-mobile-web,
.card-details-menu-mobile-web,
.copied-tooltip
float: right
.close-card-details,
.maximize-card-details,
.minimize-card-details
font-size: 24px
padding: 5px 10px 5px 10px
margin-right: -8px
.close-card-details-mobile-web
font-size: 24px
padding: 5px
margin-right: 40px
.card-copy-button
font-size: 17px
padding: 10px
margin-right: 10px
.card-copy-mobile-button
font-size: 17px
padding: 10px
margin-right: 10px
.card-details-menu
font-size: 17px
padding: 10px
.card-details-menu-mobile-web
font-size: 17px
padding: 10px
margin-right: 30px
.card-details-watch
font-size: 17px
padding-left: 7px
color: #a6a6a6
.card-details-title
font-weight: bold
font-size: 1.33em
margin: 7px 0 0
padding: 0
.linked-card-location
font-style: italic
font-size: 1em
margin-bottom: 0
& p
margin-bottom: 0
form.inlined-form
margin-top: 5px
margin-bottom: 10px
.card-details-list
font-size: 0.85em
margin-bottom: 3px
a.card-details-list-title
font-weight: bold
&.is-editable
display: inline-block
background: darken(white, 10%)
border-radius: 3px
padding: 0px 5px
.copied-tooltip
display: none
margin-right: 10px
padding: 10px;
background-color: #000000df;
color: #fff;
border-radius: 5px;
.card-description textarea
min-height: 100px
.card-details-items
display: flex
flex-wrap: wrap
margin: 15px 0
.card-details-item
margin-right: 0.5em
&:last-child
margin-right: 0
&.card-details-item-labels
display: block
word-wrap: break-word
max-width: 95%
flex-grow: 1
&.card-details-item-members,
&.card-details-item-assignees,
&.card-details-item-customfield,
&.card-details-item-name
display: block
word-wrap: break-word
max-width: 36%
flex-grow: 1
&.card-details-item-creator,
&.card-details-item-received,
&.card-details-item-start,
&.card-details-item-due,
&.card-details-item-end
display: block
word-wrap: break-word
max-width: 28%
flex-grow: 1
&.custom-fields
padding-left: 10px
.card-details-item-title
font-size: 16px
font-weight: bold
color: #4d4d4d
.activities
padding-top: 10px
@media screen and (min-width: 801px)
.card-details-maximized
padding: 0
flex-shrink: 0
flex-basis: calc(100% - 20px)
will-change: flex-basis
overflow-y: scroll
overflow-x: scroll
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 1000 !important
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
box-sizing: border-box
position: absolute
top: 0
left: 0
height: calc(100% - 20px)
width: calc(100% - 20px)
float: left
.card-details-left
float: left
top: 60px
left: 20px
width: 47%
.card-details-right
position: absolute
float: right
top: 20px
left: 50%
.card-details-header
width: 47%
input[type="text"].attachment-add-link-input
float: left
margin: 0 0 8px
width: 80%
input[type="submit"].attachment-add-link-submit
float: left
margin: 0 0 8px 4px
padding: 6px 12px
width: 18%
@media screen and (max-width: 800px)
.card-details
width: calc(100% - 1px)
padding: 0px 20px 0px 20px
margin: 0px
transition: none
overflow-y: revert
overflow-x: revert
.card-details-canvas
width: 100%
padding-left: 0px
.card-details-header
.close-card-details
margin-right: 0px
.card-details-menu
margin-right: 40px
.maximize-card-details
margin-right: 40px
.minimize-card-details
margin-right: 40px
.card-details-popup
padding: 0px 10px
.pop-over > .content-wrapper > .popup-container-depth-0
width: 100%
& > .content
width: calc(100% - 10px)
& > .content > .card-details-popup hr
margin: 15px 0px
.card-details-header
margin: 0
card-details-color(background, color...)
background: background !important
if color
color: color !important //overwrite text for better visibility
.card-details-white
card-details-color(unset, #000) //Black text for better visibility
border: 1px solid #eee
.card-details-green
card-details-color(#3cb500, #ffffff) //White text for better visibility
.card-details-yellow
card-details-color(#fad900, #000) //Black text for better visibility
.card-details-orange
card-details-color(#ff9f19, #000) //Black text for better visibility
.card-details-red
card-details-color(#eb4646, #ffffff) //White text for better visibility
.card-details-purple
card-details-color(#a632db, #ffffff) //White text for better visibility
.card-details-blue
card-details-color(#0079bf, #ffffff) //White text for better visibility
.card-details-pink
card-details-color(#ff78cb, #000) //Black text for better visibility
.card-details-sky
card-details-color(#00c2e0, #ffffff) //White text for better visibility
.card-details-black
card-details-color(#4d4d4d, #ffffff) //White text for better visibility
.card-details-lime
card-details-color(#51e898, #000) //Black text for better visibility
.card-details-silver
card-details-color(#c0c0c0, #000) //Black text for better visibility
.card-details-peachpuff
card-details-color(#ffdab9, #000) //Black text for better visibility
.card-details-crimson
card-details-color(#dc143c, #ffffff) //White text for better visibility
.card-details-plum
card-details-color(#dda0dd, #000) //Black text for better visibility
.card-details-darkgreen
card-details-color(#006400, #ffffff) //White text for better visibility
.card-details-slateblue
card-details-color(#6a5acd, #ffffff) //White text for better visibility
.card-details-magenta
card-details-color(#ff00ff, #ffffff) //White text for better visibility
.card-details-gold
card-details-color(#ffd700, #000) //Black text for better visibility
.card-details-navy
card-details-color(#000080, #ffffff) //White text for better visibility
.card-details-gray
card-details-color(#808080, #ffffff) //White text for better visibility
.card-details-saddlebrown
card-details-color(#8b4513, #ffffff) //White text for better visibility
.card-details-paleturquoise
card-details-color(#afeeee, #000) //Black text for better visibility
.card-details-mistyrose
card-details-color(#ffe4e1, #000) //Black text for better visibility
.card-details-indigo
card-details-color(#4b0082, #ffffff) //White text for better visibility
.voted
opacity: .7
.vote-title
display: flex
justify-content: space-between
.js-edit-date
align-self: baseline
margin-left: 5px
.vote-result
display: flex
.js-show-positive-votes
cursor: pointer
.poker-voted
opacity: .7
.poker-title
display: flex
justify-content: space-between
.js-edit-date
align-self: baseline
margin-left: 5px
.poker-result
display: flex
flex-flow: row wrap
.js-show-positive-poker-votes
cursor: pointer
.poker-deck
display: grid
flex-direction: column
text-align: center
.poker-card-result
width: 32px
font-size: 1em
font-weight: bold
padding: 4px 2px 4px 2px
cursor: default
.winner
font-weight: bold
outline: #2d2d2d solid 2px
.loser
opacity: .5
.responsive-table
overflow-x: auto
.poker-table
display: table
width: 100%
padding-top: 10px
.poker-table-row
display: table-row
.poker-table-heading
background-color: #EEE
display: table-header-group
.poker-table-cell
display: table-cell
padding: 0 0 5px 2px
border-bottom: 1px solid #d2d0d0
text-align: center
min-width: 45px
.poker-table-cell-who
width: 150px
vertical-align: middle
.poker-table-heading-left,
.poker-table-heading-right
display: table-header-group
font-weight: bold
border-top: 1px solid #808080
@media (max-width: 400px)
.poker-table-heading-right
display: none
.poker-table-body
display: table-row-group
.poker-table-side-left,
.poker-table-side-right
display: inline-block
.poker-table-side-right
padding-left: 10px
@media (max-width: 400px)
.poker-table-side-right
padding-left: 0px
.estimation-add
display: block
overflow: auto
margin-top: 15px
margin-bottom: 5px
input
display: inline-block
float: right
margin: auto
margin-right: 10px
width: 100px
button
display: inline-block
float: right
margin: auto
.poker-card
width:48px
height:72px
float:left
background:#fff
border-radius:5px
display:table
box-sizing:border-box
padding:5px
margin:3px
font-size:20px
font-weight: bold
text-shadow: #2d2d2d 1px 1px 0
box-shadow:0 0 5px #aaaaaa
text-align:center
position:relative
cursor: pointer
.inner
display:table-cell
vertical-align:middle
border-radius:5px
overflow:hidden
background-color: #cecece
+18
View File
@@ -0,0 +1,18 @@
.card-time {
display: block;
border-radius: 4px;
padding: 1px 3px;
color: #fff;
background-color: #dbdbdb;
}
.card-time:hover,
.card-time.is-active {
background-color: #b3b3b3;
}
.card-time time::before {
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
-webkit-font-smoothing: antialiased;
content: "\f017";
margin-right: 0.3em;
}
+2
View File
@@ -1,3 +1,5 @@
import { TAPi18n } from '/imports/i18n';
BlazeComponent.extendComponent({
template() {
return 'editCardSpentTime';
-17
View File
@@ -1,17 +0,0 @@
.card-time
display: block
border-radius: 4px
padding: 1px 3px
color: #fff
background-color: #dbdbdb
&:hover, &.is-active
background-color: #b3b3b3
time
&::before
font: normal normal normal 14px/1 FontAwesome
font-size: inherit
-webkit-font-smoothing: antialiased
content: "\f017" // clock symbol
margin-right: 0.3em
+173
View File
@@ -0,0 +1,173 @@
.js-add-checklist {
color: #8c8c8c;
}
textarea.js-add-checklist-item,
textarea.js-edit-checklist-item {
overflow: hidden;
word-wrap: break-word;
resize: none;
height: 34px;
}
.delete-text,
.js-delete-checklist-item,
.js-convert-checklist-item-to-card {
color: #8c8c8c;
text-decoration: underline;
word-wrap: break-word;
float: right;
padding-top: 6px;
}
.delete-text:hover,
.js-delete-checklist-item:hover,
.js-convert-checklist-item-to-card:hover {
color: inherit;
}
.checklists-title {
display: flex;
justify-content: space-between;
}
.checklist-progress-bar-container {
display: flex;
flex-direction: row;
align-items: center;
}
.checklist-progress-bar-container .checklist-progress-text {
margin-right: 10px;
}
.checklist-progress-bar-container .checklist-progress-bar {
width: 80%;
height: 10px;
}
.checklist-progress-bar-container .checklist-progress-bar .checklist-progress {
color: #fff !important;
background-color: #2196f3 !important;
padding: 0.01em 16px;
border-radius: 16px;
height: 100%;
}
.checklist-title .checkbox {
float: left;
width: 30px;
height: 30px;
font-size: 18px;
line-height: 30px;
}
.checklist-title .title {
font-size: 18px;
line-height: 25px;
}
.checklist-title .checklist-stat {
margin: 0 0.5em;
float: right;
padding-top: 6px;
}
.checklist-title .checklist-stat.is-finished {
color: #3cb500;
}
.checklist-title span.fa.checklist-handle {
padding-right: 20px;
padding-top: 3px;
float: left;
}
#card-details-overlay {
top: 0;
bottom: -600px;
right: 0;
}
.checklist {
background: #f7f7f7;
}
.checklist.placeholder {
background: #ccc;
border-radius: 2px;
}
.checklist.ui-sortable-helper {
box-shadow: -2px 2px 8px rgba(0,0,0,0.3), 0 0 1px rgba(0,0,0,0.5);
transform: rotate(4deg);
cursor: grabbing;
}
.checklist-item {
margin: 0 0 0 0.1em;
line-height: 18px;
font-size: 1.1em;
margin-top: 3px;
display: flex;
background: #f7f7f7;
opacity: 1;
transition: height 0ms 400ms, opacity 400ms 0ms;
height: auto;
overflow: hidden;
}
.checklist-item.is-checked.invisible {
opacity: 0;
height: 0;
transition: height 0ms 0ms, opacity 600ms 0ms;
margin-top: 0;
margin-bottom: 0;
}
.checklist-item.placeholder {
background: #ccc;
border-radius: 2px;
}
.checklist-item.ui-sortable-helper {
box-shadow: -2px 2px 8px rgba(0,0,0,0.3), 0 0 1px rgba(0,0,0,0.5);
transform: rotate(4deg);
cursor: grabbing;
}
.checklist-item:hover {
background-color: #ebebeb;
}
.checklist-item .check-box-container {
padding-right: 10px;
}
.checklist-item .check-box {
margin: 0.1em 0 0 0;
}
.checklist-item .check-box.is-checked {
border-bottom: 2px solid #3cb500;
border-right: 2px solid #3cb500;
}
.checklist-item .item-title {
flex: 1;
}
.checklist-item .item-title.is-checked {
color: #8c8c8c;
font-style: italic;
text-decoration: line-through;
}
.checklist-item .item-title .viewer p {
margin-bottom: 2px;
display: block;
word-wrap: break-word;
max-width: 420px;
}
.checklist-item span.fa.checklistitem-handle {
padding-top: 2px;
padding-right: 10px;
}
.js-delete-checklist-item,
.js-convert-checklist-item-to-card {
margin: 0 0 0.5em 1.33em;
padding: 12px 0 0 0;
}
.add-checklist-item {
margin: 0.2em 0 0.5em 1.33em;
}
.add-checklist-item.js-open-inlined-form,
.add-checklist.js-open-inlined-form {
display: block;
width: 50%;
}
.add-checklist-item.js-open-inlined-form:hover,
.add-checklist.js-open-inlined-form:hover {
background: #dbdbdb;
color: #222;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
.checklist-details-menu {
float: right;
padding: 6px 10px 6px 10px;
}
.edit-controls label.toggle-label {
margin-left: 2px;
}
+52 -36
View File
@@ -12,18 +12,13 @@ template(name="checklists")
input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton")
label.toggle-label(for="toggleHideCheckedItemsButton")
if toggleDeleteDialog.get
.board-overlay#card-details-overlay
+checklistDeleteDialog(checklist = checklistToDelete)
.card-checklist-items
each checklist in checklists
+checklistDetail(checklist = checklist)
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-checklist" cardId = cardId)
+addChecklistItemForm
+addChecklistItemForm(checklist=checklist showNewlineBecomesNewChecklistItem=false)
else
a.add-checklist.js-open-inlined-form(title="{{_ 'add-checklist'}}")
i.fa.fa-plus
@@ -36,31 +31,29 @@ template(name="checklistDetail")
.checklist-title
span
if canModifyCard
a.js-delete-checklist.toggle-delete-checklist-dialog {{_ "delete"}}...
a.fa.fa-navicon.checklist-details-menu.js-open-checklist-details-menu(title="{{_ 'checklistActionsPopup-title'}}")
if canModifyCard
h2.title.js-open-inlined-form.is-editable
if isMiniScreenOrShowDesktopDragHandles
h4.title.js-open-inlined-form.is-editable
if isTouchScreenOrShowDesktopDragHandles
span.fa.checklist-handle(class="fa-arrows" title="{{_ 'dragChecklist'}}")
+viewer
= checklist.title
else
h2.title
h4.title
+viewer
= checklist.title
if $gt finishedPercent 0
.checklist-progress-bar-container
.checklist-progress-text {{finishedPercent}}%
.checklist-progress-bar
.checklist-progress(style="width:{{finishedPercent}}%")
+checklistItems(checklist = checklist)
template(name="checklistDeleteDialog")
.js-confirm-checklist-delete
p
i(class="fa fa-exclamation-triangle" aria-hidden="true")
p
| {{_ 'confirm-checklist-delete-dialog'}}
span {{checklist.title}}
| ?
.js-checklist-delete-buttons
button.confirm-checklist-delete(type="button") {{_ 'delete'}}
button.toggle-delete-checklist-dialog(type="button") {{_ 'cancel'}}
template(name="checklistDeletePopup")
p {{_ 'confirm-checklist-delete-popup'}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
template(name="addChecklistItemForm")
a.fa.fa-copy(title="{{_ 'copy-text-to-clipboard'}}")
@@ -68,7 +61,11 @@ template(name="addChecklistItemForm")
textarea.js-add-checklist-item(rows='1' autofocus)
.edit-controls.clearfix
button.primary.confirm.js-submit-add-checklist-item-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
a.fa.fa-times-thin.js-close-inlined-form(title="{{_ 'close-add-checklist-item'}}")
if showNewlineBecomesNewChecklistItem
.material-toggle-switch(title="{{_ 'newlineBecomesNewChecklistItem'}}")
input.toggle-switch(type="checkbox" id="toggleNewlineBecomesNewChecklistItem")
label.toggle-label(for="toggleNewlineBecomesNewChecklistItem")
template(name="editChecklistItemForm")
a.fa.fa-copy(title="{{_ 'copy-text-to-clipboard'}}")
@@ -80,7 +77,7 @@ template(name="editChecklistItemForm")
= checklist.title
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-checklist-item-form(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
a.fa.fa-times-thin.js-close-inlined-form(title="{{_ 'close-edit-checklist-item'}}")
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-checklist-item {{_ "delete"}}...
@@ -97,17 +94,18 @@ template(name="checklistItems")
+checklistItemDetail(item = item checklist = checklist)
if canModifyCard
+inlinedForm(autoclose=false classNames="js-add-checklist-item" checklist = checklist)
+addChecklistItemForm
+addChecklistItemForm(checklist=checklist showNewlineBecomesNewChecklistItem=true)
else
a.add-checklist-item.js-open-inlined-form(title="{{_ 'add-checklist-item'}}")
i.fa.fa-plus
template(name='checklistItemDetail')
.js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}")
.js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}"
role="checkbox" aria-checked="{{#if item.isFinished }}true{{else}}false{{/if}}" tabindex="0")
if canModifyCard
.check-box-container
.check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
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
@@ -118,13 +116,26 @@ template(name='checklistItemDetail')
+viewer
= item.title
template(name="convertChecklistItemToCardPopup")
label(for='convert-checklist-item-to-card-title') {{_ 'title'}}:
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
= item.title
+boardsSwimlanesAndLists
template(name="checklistActionsPopup")
ul.pop-over-list
li
a.js-delete-checklist.delete-checklist
i.fa.fa-trash
| {{_ "delete"}} ...
a.js-move-checklist.move-checklist
i.fa.fa-arrow-right
| {{_ "moveChecklist"}} ...
a.js-copy-checklist.copy-checklist
i.fa.fa-copy
| {{_ "copyChecklist"}} ...
template(name="boardsSwimlanesAndLists")
template(name="copyChecklistPopup")
+copyAndMoveChecklist
template(name="moveChecklistPopup")
+copyAndMoveChecklist
template(name="copyAndMoveChecklist")
unless currentUser.isWorker
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
@@ -132,17 +143,22 @@ template(name="boardsSwimlanesAndLists")
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionBoardId _id}}selected{{/if}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}") {{title}}
option(value="{{_id}}" selected="{{#if isDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each aBoardLists
option(value="{{_id}}") {{title}}
each lists
option(value="{{_id}}" selected="{{#if isDialogOptionListId _id}}selected{{/if}}") {{title}}
label {{_ 'cards'}}:
select.js-select-cards
each cards
option(value="{{_id}}" selected="{{#if isDialogOptionCardId _id}}selected{{/if}}") {{title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+68 -55
View File
@@ -1,5 +1,7 @@
import { TAPi18n } from '/imports/i18n';
import Cards from '/models/cards';
import Boards from '/models/boards';
import { DialogWithBoardSwimlaneListCard } from '/client/lib/dialogWithBoardSwimlaneListCard';
const subManager = new SubsManager();
const { calculateIndexData, capitalize } = Utils;
@@ -47,7 +49,7 @@ BlazeComponent.extendComponent({
const self = this;
self.itemsDom = this.$('.js-checklist-items');
initSorting(self.itemsDom);
self.itemsDom.mousedown(function(evt) {
self.itemsDom.mousedown(function (evt) {
evt.stopPropagation();
});
@@ -60,7 +62,7 @@ BlazeComponent.extendComponent({
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$(self.itemsDom).sortable({
handle: 'span.fa.checklistitem-handle',
});
@@ -77,6 +79,12 @@ BlazeComponent.extendComponent({
!Meteor.user().isWorker()
);
},
/** returns the finished percent of the checklist */
finishedPercent() {
const ret = this.data().checklist.finishedPercent();
return ret;
},
}).register('checklistDetail');
BlazeComponent.extendComponent({
@@ -86,7 +94,8 @@ BlazeComponent.extendComponent({
const title = textarea.value.trim();
let cardId = this.currentData().cardId;
const card = Cards.findOne(cardId);
if (card.isLinked()) cardId = card.linkedId;
//if (card.isLinked()) cardId = card.linkedId;
if (card.isLinkedCard()) cardId = card.linkedId;
if (title) {
Checklists.insert({
@@ -105,16 +114,23 @@ BlazeComponent.extendComponent({
addChecklistItem(event) {
event.preventDefault();
const textarea = this.find('textarea.js-add-checklist-item');
const newlineBecomesNewChecklistItem = this.find('input#toggleNewlineBecomesNewChecklistItem');
const title = textarea.value.trim();
const checklist = this.currentData().checklist;
if (title) {
ChecklistItems.insert({
title,
checklistId: checklist._id,
cardId: checklist.cardId,
sort: Utils.calculateIndexData(checklist.lastItem()).base,
});
let checklistItems = [title];
if (newlineBecomesNewChecklistItem.checked) {
checklistItems = title.split('\n').map(_value => _value.trim());
}
for (let checklistItem of checklistItems) {
ChecklistItems.insert({
title: checklistItem,
checklistId: checklist._id,
cardId: checklist.cardId,
sort: Utils.calculateIndexData(checklist.lastItem()).base,
});
}
}
// We keep the form opened, empty it.
textarea.value = '';
@@ -130,14 +146,6 @@ BlazeComponent.extendComponent({
);
},
deleteChecklist() {
const checklist = this.currentData().checklist;
if (checklist && checklist._id) {
Checklists.remove(checklist._id);
this.toggleDeleteDialog.set(false);
}
},
deleteItem() {
const checklist = this.currentData().checklist;
const item = this.currentData().item;
@@ -163,11 +171,6 @@ BlazeComponent.extendComponent({
item.setTitle(title);
},
onCreated() {
this.toggleDeleteDialog = new ReactiveVar(false);
this.checklistToDelete = null; //Store data context to pass to checklistDeleteDialog template
},
pressKey(event) {
//If user press enter key inside a form, submit it
//Unless the user is also holding down the 'shift' key
@@ -195,12 +198,6 @@ BlazeComponent.extendComponent({
events() {
const events = {
'click .toggle-delete-checklist-dialog'(event) {
if ($(event.target).hasClass('js-delete-checklist')) {
this.checklistToDelete = this.currentData().checklist; //Store data context
}
this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get());
},
'click #toggleHideCheckedItemsButton'() {
Meteor.call('toggleHideCheckedItems');
},
@@ -209,13 +206,13 @@ BlazeComponent.extendComponent({
return [
{
...events,
'click .js-open-checklist-details-menu': Popup.open('checklistActions'),
'submit .js-add-checklist': this.addChecklist,
'submit .js-edit-checklist-title': this.editChecklist,
'submit .js-add-checklist-item': this.addChecklistItem,
'submit .js-edit-checklist-item': this.editChecklistItem,
'click .js-convert-checklist-item-to-card': Popup.open('convertChecklistItemToCard'),
'click .js-delete-checklist-item': this.deleteItem,
'click .confirm-checklist-delete': this.deleteChecklist,
'focus .js-add-checklist-item': this.focusChecklistItem,
// add and delete checklist / checklist-item
'click .js-open-inlined-form': this.closeAllInlinedForms,
@@ -306,6 +303,24 @@ BlazeComponent.extendComponent({
}
}).register('addChecklistItemForm');
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-delete-checklist': Popup.afterConfirm('checklistDelete', function () {
Popup.back(2);
const checklist = this.checklist;
if (checklist && checklist._id) {
Checklists.remove(checklist._id);
}
}),
'click .js-move-checklist': Popup.open('moveChecklist'),
'click .js-copy-checklist': Popup.open('copyChecklist'),
}
]
}
}).register('checklistActionsPopup');
BlazeComponent.extendComponent({
onRendered() {
autosize(this.$('textarea.js-edit-checklist-item'));
@@ -333,32 +348,6 @@ BlazeComponent.extendComponent({
}
}).register('editChecklistItemForm');
Template.checklistDeleteDialog.onCreated(() => {
const $cardDetails = this.$('.card-details');
this.scrollState = {
position: $cardDetails.scrollTop(), //save current scroll position
top: false, //required for smooth scroll animation
};
//Callback's purpose is to only prevent scrolling after animation is complete
$cardDetails.animate({ scrollTop: 0 }, 500, () => {
this.scrollState.top = true;
});
//Prevent scrolling while dialog is open
$cardDetails.on('scroll', () => {
if (this.scrollState.top) {
//If it's already in position, keep it there. Otherwise let animation scroll
$cardDetails.scrollTop(0);
}
});
});
Template.checklistDeleteDialog.onDestroyed(() => {
const $cardDetails = this.$('.card-details');
$cardDetails.off('scroll'); //Reactivate scrolling
$cardDetails.animate({ scrollTop: this.scrollState.position });
});
Template.checklistItemDetail.helpers({
canModifyCard() {
return (
@@ -391,3 +380,27 @@ BlazeComponent.extendComponent({
];
},
}).register('checklistItemDetail');
/** Move Checklist Dialog */
(class extends DialogWithBoardSwimlaneListCard {
getDialogOptions() {
const ret = Meteor.user().getMoveChecklistDialogOptions();
return ret;
}
setDone(cardId, options) {
Meteor.user().setMoveChecklistDialogOption(this.currentBoardId, options);
this.data().checklist.move(cardId);
}
}).register('moveChecklistPopup');
/** Copy Checklist Dialog */
(class extends DialogWithBoardSwimlaneListCard {
getDialogOptions() {
const ret = Meteor.user().getCopyChecklistDialogOptions();
return ret;
}
setDone(cardId, options) {
Meteor.user().setCopyChecklistDialogOption(this.currentBoardId, options);
this.data().checklist.copy(cardId);
}
}).register('copyChecklistPopup');
-179
View File
@@ -1,179 +0,0 @@
.js-add-checklist
color: #8c8c8c
textarea.js-add-checklist-item, textarea.js-edit-checklist-item
overflow: hidden
word-wrap: break-word
resize: none
height: 34px
.delete-text
color: #8c8c8c
text-decoration: underline
word-wrap: break-word
float: right
padding-top: 6px
&:hover
color: inherit
.checklists-title
display: flex
justify-content: space-between
.checklist-title
.checkbox
float: left
width: 30px
height 30px
font-size: 18px
line-height: 30px
.title
font-size: 18px
line-height: 25px
.checklist-stat
margin: 0 0.5em
float: right
padding-top: 6px
&.is-finished
color: #3cb500
.js-delete-checklist
@extends .delete-text
span.fa.checklist-handle
padding-right: 20px
padding-top: 3px
float: left
.js-confirm-checklist-delete
background-color: darken(white, 3%)
position: absolute
float: left;
width: 60%
margin-top: 0
margin-left: 13%
padding-bottom: 2%
padding-left: 3%
padding-right: 3%
z-index: 17
border-radius: 3px
p
position: relative
margin-top: 3%
width: 100%
text-align: center
span
font-weight: bold
i
font-size: 2em
.js-checklist-delete-buttons
position: relative
padding: left 2% right 2%
.confirm-checklist-delete
margin-left: 12%
float: left
.toggle-delete-checklist-dialog
margin-right: 12%
float: right
#card-details-overlay
top: 0
bottom: -600px
right: 0
.checklist
background: darken(white, 3%)
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
.checklist-item
margin: 0 0 0 0.1em
line-height: 18px
font-size: 1.1em
margin-top: 3px
display: flex
background: darken(white, 3%)
opacity: 1
transition: height 0ms 400ms, opacity 400ms 0ms
height: auto
overflow: hidden
&.is-checked.invisible
opacity: 0
height: 0
transition: height 0ms 0ms, opacity 600ms 0ms
margin-top: 0
margin-bottom: 0
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
&:hover
background-color: darken(white, 8%)
.check-box-container
padding-right: 10px;
.check-box
margin: 0.1em 0 0 0;
&.is-checked
border-bottom: 2px solid #3cb500
border-right: 2px solid #3cb500
.item-title
flex: 1
&.is-checked
color: #8c8c8c
font-style: italic
text-decoration: line-through
& .viewer
p
margin-bottom: 2px
display: block
word-wrap: break-word
max-width: 420px
span.fa.checklistitem-handle
padding-top: 2px
padding-right: 10px;
.js-delete-checklist-item,
.js-convert-checklist-item-to-card
margin: 0 0 0.5em 1.33em
@extends .delete-text
padding: 12px 0 0 0
.add-checklist-item
margin: 0.2em 0 0.5em 1.33em
.add-checklist-item,.add-checklist
&.js-open-inlined-form
display: block
width: 50%
&:hover
background: #dbdbdb
color: #222
box-shadow: 0 1px 2px rgba(0,0,0,.2)
+230
View File
@@ -0,0 +1,230 @@
.card-label {
border: 1px solid #000;
border-radius: 4px;
color: #fff;
display: inline-block;
font-weight: 700;
font-size: 13px;
margin-right: 4px;
margin-bottom: 5px;
padding: 3px 8px;
max-width: 210px;
min-width: 8px;
word-wrap: break-word;
min-height: 18px;
vertical-align: middle;
white-space: initial;
overflow: initial;
}
.card-label:hover {
color: #fff;
}
.card-label.square {
height: 30px;
width: 30px;
padding: 0;
}
.card-label.add-label {
box-shadow: 0 0 0 2px #bfbfbf inset;
border: initial;
}
.card-label.add-label:hover,
.card-label.add-label.is-active {
box-shadow: 0 0 0 2px #666 inset;
}
.card-label p {
margin: 0px;
}
.palette-colors {
display: flex;
flex-wrap: wrap;
}
.palette-colors .palette-color {
flex-grow: 1;
display: flex;
align-items: center;
justify-content: center;
}
.card-label-white {
background-color: #fff;
color: #000;
}
.card-label-white:hover {
color: #aaa;
}
.card-label-green {
background-color: #3cb500;
}
.card-label-green:hover {
color: #000;
}
.card-label-yellow {
background-color: #fad900;
color: #000;
}
.card-label-orange {
background-color: #ff9f19;
color: #000;
}
.card-label-red {
background-color: #eb4646;
}
.card-label-purple {
background-color: #a632db;
}
.card-label-blue {
background-color: #0079bf;
}
.card-label-pink {
background-color: #ff78cb;
color: #000;
}
.card-label-sky {
background-color: #00c2e0;
}
.card-label-black {
background-color: #4d4d4d;
}
.card-label-lime {
background-color: #51e898;
color: #000;
}
.card-label-silver {
background-color: #c0c0c0;
color: #000;
}
.card-label-peachpuff {
background-color: #ffdab9;
color: #000;
}
.card-label-crimson {
background-color: #dc143c;
}
.card-label-plum {
background-color: #dda0dd;
color: #000;
}
.card-label-darkgreen {
background-color: #006400;
}
.card-label-slateblue {
background-color: #6a5acd;
}
.card-label-magenta {
background-color: #f0f;
}
.card-label-gold {
background-color: #ffd700;
color: #000;
}
.card-label-navy {
background-color: #000080;
}
.card-label-gray {
background-color: #808080;
}
.card-label-saddlebrown {
background-color: #8b4513;
}
.card-label-paleturquoise {
background-color: #afeeee;
color: #000;
}
.card-label-mistyrose {
background-color: #ffe4e1;
color: #000;
}
.card-label-indigo {
background-color: #4b0082;
}
.edit-label .card-label,
.create-label .card-label {
float: left;
height: 25px;
margin: 0px 3% 7px 0px;
width: 10.5%;
max-width: 10.5%;
cursor: pointer;
}
.edit-labels input[type="text"] {
margin: 4px 0 6px 38px;
width: 243px;
}
.edit-labels .card-label {
height: 30px;
left: 0;
padding: 1px 5px;
position: absolute;
top: 0;
width: 24px;
}
.edit-labels .labels-static .card-label {
line-height: 30px;
margin-bottom: 4px;
position: relative;
top: auto;
left: 0;
width: 260px;
}
.edit-labels-pop-over {
margin-bottom: 8px;
}
.edit-labels-pop-over .card-label .viewer p {
margin: 0;
}
.edit-labels-pop-over .shortcut {
display: inline-block;
}
.card-label-selectable {
border-radius: 3px;
cursor: pointer;
margin: 0;
margin-bottom: 3px;
width: 190px;
min-height: 18px;
padding: 8px;
position: relative;
transition: margin-right 0.1s;
}
.card-label-selectable .card-label-selectable-icon {
position: absolute;
top: 8px;
right: -20px;
}
.card-label-selectable.active:hover,
.card-label-selectable.active,
.card-label-selectable.active.selected:hover,
.card-label-selectable.active.selected {
padding-right: 32px;
}
.card-label-selectable.active:hover .card-label-selectable-icon,
.card-label-selectable.active .card-label-selectable-icon,
.card-label-selectable.active.selected:hover .card-label-selectable-icon,
.card-label-selectable.active.selected .card-label-selectable-icon {
right: 6px;
}
.card-label-selectable.selected,
.card-label-selectable:hover {
opacity: 0.8;
}
.active .card-label-selectable,
.active .card-label-selectable:hover {
margin-right: 0;
}
.active .card-label-selectable .card-label-selectable-icon {
right: 8px;
}
.card-label-edit-button {
border-radius: 3px;
float: right;
padding: 8px;
}
.card-label-edit-button:hover {
background: #dbdbdb;
}
ul.edit-labels-pop-over span.fa.label-handle {
padding-right: 10px;
}
ul.edit-labels-pop-over span.fa.label-handle + .card-label {
max-width: 180px;
}
+1 -1
View File
@@ -29,7 +29,7 @@ template(name="cardLabelsPopup")
each board.labels
li.js-card-label-item
a.card-label-edit-button.fa.fa-pencil.js-edit-label
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
span.fa.label-handle(class="fa-arrows" title="{{_ 'dragLabel'}}")
span.card-label.card-label-selectable.js-select-label.card-label-wrapper(class="card-label-{{color}}"
class="{{# if isLabelSelected ../_id }}active{{/if}}")
+3 -4
View File
@@ -50,8 +50,7 @@ BlazeComponent.extendComponent({
appendTo: '.edit-labels-pop-over',
helper(element, currentItem) {
let ret = currentItem.clone();
if (currentItem.closest('.popup-container-depth-0').size() == 0)
{ // only set css transform at every sub-popup, not at the main popup
if (currentItem.closest('.popup-container-depth-0').size() == 0) { // only set css transform at every sub-popup, not at the main popup
const content = currentItem.closest('.content')[0]
const offsetLeft = content.offsetLeft;
const offsetTop = $('.pop-over > .header').height() * -1;
@@ -76,7 +75,7 @@ BlazeComponent.extendComponent({
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$labels.sortable({
handle: '.label-handle',
});
@@ -130,7 +129,7 @@ Template.createLabelPopup.events({
});
Template.editLabelPopup.events({
'click .js-delete-label': Popup.afterConfirm('deleteLabel', function() {
'click .js-delete-label': Popup.afterConfirm('deleteLabel', function () {
const board = Boards.findOne(Session.get('currentBoard'));
board.removeLabel(this._id);
Popup.back(2);
-231
View File
@@ -1,231 +0,0 @@
@import 'nib'
// XXX Use .board-widget-labels as a flexbox container
.card-label
border: 1px solid #000000
border-radius: 4px
color: white //Default white text, in select cases, changed to black to improve contrast between label colour and text
display: inline-block
font-weight: 700
font-size: 13px
margin-right: 4px
margin-bottom: 5px
padding: 3px 8px
max-width: 210px
min-width: 8px
word-wrap: break-word
min-height: 18px
vertical-align: middle
white-space: initial
overflow: initial
&:hover
color: white
&.square
height: 30px
width: @height
padding: 0
&.add-label
box-shadow: 0 0 0 2px darken(white, 25%) inset
border: initial
&:hover, &.is-active
box-shadow: 0 0 0 2px darken(white, 60%) inset
p
margin: 0px
.palette-colors
display: flex
flex-wrap: wrap
.palette-color
flex-grow: 1
display: flex
align-items: center
justify-content: center
.card-label-white
background-color: #ffffff
color: #000000 //Black text for better visibility
.card-label-white:hover
color: #aaaaaa //grey text for better visibility
.card-label-green
background-color: #3cb500
.card-label-green:hover
color: #000000 //Black hover text for better visibility
.card-label-yellow
background-color: #fad900
color: #000000 //Black text for better visibility
.card-label-orange
background-color: #ff9f19
color: #000000 //Black text for better visibility
.card-label-red
background-color: #eb4646
.card-label-purple
background-color: #a632db
.card-label-blue
background-color: #0079bf
.card-label-pink
background-color: #ff78cb
color: #000000 //Black text for better visibility
.card-label-sky
background-color: #00c2e0
.card-label-black
background-color: #4d4d4d
.card-label-lime
background-color: #51e898
color: #000000 //Black text for better visibility
.card-label-silver
background-color: #c0c0c0
color: #000000 //Black text for better visibility
.card-label-peachpuff
background-color: #ffdab9
color: #000000 //Black text for better visibility
.card-label-crimson
background-color: #dc143c
.card-label-plum
background-color: #dda0dd
color: #000000 //Black text for better visibility
.card-label-darkgreen
background-color: #006400
.card-label-slateblue
background-color: #6a5acd
.card-label-magenta
background-color: #ff00ff
.card-label-gold
background-color: #ffd700
color: #000000 //Black text for better visibility
.card-label-navy
background-color: #000080
.card-label-gray
background-color: #808080
.card-label-saddlebrown
background-color: #8b4513
.card-label-paleturquoise
background-color: #afeeee
color: #000000 //Black text for better visibility
.card-label-mistyrose
background-color: #ffe4e1
color: #000000 //Black text for better visibility
.card-label-indigo
background-color: #4b0082
.edit-label,
.create-label
.card-label
float: left
height: 25px
margin: 0px 3% 7px 0px
width: 10.5%
max-width: 10.5%
cursor: pointer
.edit-labels
input[type="text"]
margin: 4px 0 6px 38px
width: 243px
.card-label
height: 30px
left: 0
padding: 1px 5px
position: absolute
top: 0
width: 24px
.labels-static .card-label
line-height: 30px
margin-bottom: 4px
position: relative
top: auto
left: 0
width: 260px
.edit-labels-pop-over
margin-bottom: 8px
.card-label .viewer p
margin: 0
.edit-labels-pop-over .shortcut
display: inline-block
.card-label-selectable
border-radius: 3px
cursor: pointer
margin: 0
margin-bottom: 3px
width: 190px
min-height: 18px
padding: 8px
position: relative
transition: margin-right .1s
.card-label-selectable-icon
position: absolute
top: 8px
right: -20px
&.active:hover,
&.active,
&.active.selected:hover,
&.active.selected
padding-right: 32px
.card-label-selectable-icon
right: 6px
&.selected,
&:hover
opacity: .8
.active .card-label-selectable
&,
&:hover
margin-right: 0
.card-label-selectable-icon
right: 8px
.card-label-edit-button
border-radius: 3px
float: right
padding: 8px
&:hover
background: #dbdbdb
ul.edit-labels-pop-over
span.fa.label-handle
padding-right: 10px;
span.fa.label-handle + .card-label
max-width: 180px
+554
View File
@@ -0,0 +1,554 @@
.minicard-wrapper {
cursor: pointer;
position: relative;
display: flex;
align-items: center;
margin-bottom: 9px;
}
.minicard-wrapper.placeholder {
background: #ccc;
border-radius: 9px;
}
.minicard-wrapper.ui-sortable-helper {
cursor: grabbing;
transform: rotate(4deg);
display: block !important;
}
.minicard-wrapper.ui-sortable-helper .and-n-other {
width: 100%;
height: 16px;
padding: 4px;
background-color: #f2f2f2;
text-align: center;
border-radius: 3px;
}
.minicard-wrapper.ui-sortable-helper .multi-selection-checkbox {
display: none;
}
.minicard-wrapper .multi-selection-checkbox + .minicard {
margin-left: 8px;
}
.minicard {
padding: 6px 8px 2px;
position: relative;
flex: 1;
flex-wrap: wrap;
background-color: #fff;
min-height: 20px;
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
border-radius: 2px;
color: #4d4d4d;
overflow: hidden;
transition: transform 0.2s, border-radius 0.2s;
}
.minicard.linked-board .linked-icon,
.minicard.linked-card .linked-icon {
display: inline-block;
margin-right: 11px;
vertical-align: baseline;
font-size: 0.9em;
}
.minicard.linked-board .linked-archived,
.minicard.linked-card .linked-archived {
color: #937760;
}
.is-selected .minicard {
transform: translateX(11px);
border-bottom-right-radius: 0;
border-top-right-radius: 0;
z-index: 25;
box-shadow: -2px 1px 2px rgba(0,0,0,0.2);
}
.minicard:hover:not(.minicard-composer),
.is-selected .minicard,
.draggable-hover-card .minicard {
background: #f7f7f7;
}
.draggable-hover-card .minicard {
background: #ededed;
}
.minicard .minicard-cover {
background-position: center;
background-repeat: no-repeat;
background-size: contain;
height: 145px;
user-select: none;
margin: -6px -8px 6px -8px;
border-radius: top 2px;
}
.minicard .minicard-labels {
float: none;
}
.minicard .minicard-labels .minicard-label {
width: 11px;
height: 11px;
border-radius: 2px;
margin-right: 3px;
margin-bottom: 3px;
}
.minicard .minicard-labels-no-text {
display: flex;
flex-wrap: wrap;
}
.minicard .minicard-custom-fields {
display: block;
}
.minicard .minicard-custom-field {
display: flex;
}
.minicard .minicard-custom-field-item {
flex-grow: 1;
display: block;
word-wrap: break-word;
max-width: 100px;
margin-right: 4px;
}
.minicard .handle {
width: 20px;
height: 20px;
position: absolute;
right: 5px;
top: 5px;
display: none;
}
@media only screen {
.minicard .handle {
display: block;
}
}
.minicard .handle .fa-arrows {
font-size: 20px;
color: #ccc;
}
.minicard .minicard-title .card-number {
color: #b3b3b3;
display: inline-block;
margin-right: 5px;
}
.minicard .minicard-title p:last-child {
margin-bottom: 0;
}
.minicard .minicard-title .viewer {
display: block;
word-wrap: break-word;
max-width: 230px;
}
.minicard .dates {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.minicard .date {
margin-right: 3px;
}
.minicard .badges {
float: left;
margin-top: 7px;
color: #808080;
}
.minicard .badges:empty {
display: none;
}
.minicard .badges .badge {
float: left;
margin-right: 11px;
margin-bottom: 3px;
font-size: 0.9em;
}
.minicard .badges .badge.is-finished {
background: #3cb500;
padding: 0px 3px;
border-radius: 3px;
color: #fff;
}
.minicard .badges .badge:last-of-type {
margin-right: 0;
}
.minicard .badges .badge .badge-icon,
.minicard .badges .badge .badge-text {
vertical-align: middle;
}
.minicard .badges .badge .badge-icon.badge-comment,
.minicard .badges .badge .badge-text.badge-comment {
margin-bottom: 0.1rem;
}
.minicard .badges .badge .badge-text {
font-size: 0.9em;
padding-left: 2px;
line-height: 14px;
}
.minicard .badges .badge .check-list-text {
padding-left: 0px;
line-height: 12px;
}
.minicard .minicard-members,
.minicard .minicard-assignees,
.minicard .minicard-creator {
float: right;
margin-left: 5px;
margin-bottom: 4px;
}
.minicard .minicard-members .member,
.minicard .minicard-assignees .member,
.minicard .minicard-creator .member {
float: right;
border-radius: 50%;
height: 28px;
width: 28px;
margin-bottom: 4px;
}
.minicard .minicard-members .assignee,
.minicard .minicard-assignees .assignee,
.minicard .minicard-creator .assignee {
float: right;
border-radius: 50%;
height: 28px;
width: 28px;
}
.minicard .minicard-members + .badges,
.minicard .minicard-assignees + .badges,
.minicard .minicard-creator + .badges {
margin-top: 5px;
}
.minicard .minicard-assignees {
border-bottom: 1px solid #f00;
}
.minicard .minicard-creator {
border-bottom: 1px solid #008000;
}
.minicard .minicard-members:empty,
.minicard .minicard-assignees:empty {
display: none;
}
.minicard .minicard-description {
padding: 6px 0 0 8px;
background-color: #eee;
width: 100%;
margin-bottom: 2px;
margin-left: -4px;
border-radius: 3px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
.minicard.minicard-composer {
margin-bottom: 10px;
}
.minicard.minicard-composer textarea.minicard-composer-textarea,
.minicard.minicard-composer textarea.minicard-composer-textarea:focus {
resize: none;
background: none;
border: none;
box-shadow: none;
height: auto;
margin: 0;
padding: 0;
max-height: 162px;
min-height: 36px;
margin-bottom: 20px;
overflow-y: auto;
}
.parent-prefix {
color: #b3b3b3;
font-size: 0.9em;
}
.parent-subtext {
color: #b3b3b3;
font-size: 0.9em;
}
@media screen and (max-width: 800px) {
.is-selected .minicard {
transform: translateX(0px);
border-bottom-right-radius: 0;
border-top-right-radius: 0;
z-index: 15;
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
}
}
/* https://github.com/wekan/wekan/issues/4254#issuecomment-1037192960 */
.minicard-green {
background-color: #3cb500 !important;
color: #fff !important;
}
.minicard-green:hover:not(.minicard-composer),
.is-selected .minicard-green,
.draggable-hover-card .minicard-green {
background: #3ab000;
}
.draggable-hover-card .minicard-green {
background: #38a800;
}
.minicard-yellow {
background-color: #fad900 !important;
}
.minicard-yellow:hover:not(.minicard-composer),
.is-selected .minicard-yellow,
.draggable-hover-card .minicard-yellow {
background: #f3d200;
}
.draggable-hover-card .minicard-yellow {
background: #e9ca00;
}
.minicard-orange {
background-color: #ff9f19 !important;
}
.minicard-orange:hover:not(.minicard-composer),
.is-selected .minicard-orange,
.draggable-hover-card .minicard-orange {
background: #ff9b11;
}
.draggable-hover-card .minicard-orange {
background: #ff9705;
}
.minicard-red {
background-color: #eb4646 !important;
color: #fff !important;
}
.minicard-red:hover:not(.minicard-composer),
.is-selected .minicard-red,
.draggable-hover-card .minicard-red {
background: #ea3e3e;
}
.draggable-hover-card .minicard-red {
background: #e93333;
}
.minicard-purple {
background-color: #a632db !important;
color: #fff !important;
}
.minicard-purple:hover:not(.minicard-composer),
.is-selected .minicard-purple,
.draggable-hover-card .minicard-purple {
background: #a32bda;
}
.draggable-hover-card .minicard-purple {
background: #9e25d5;
}
.minicard-blue {
background-color: #0079bf !important;
color: #fff !important;
}
.minicard-blue:hover:not(.minicard-composer),
.is-selected .minicard-blue,
.draggable-hover-card .minicard-blue {
background: #0075b9;
}
.draggable-hover-card .minicard-blue {
background: #0071b2;
}
.minicard-pink {
background-color: #ff78cb !important;
}
.minicard-pink:hover:not(.minicard-composer),
.is-selected .minicard-pink,
.draggable-hover-card .minicard-pink {
background: #ff6dc7;
}
.draggable-hover-card .minicard-pink {
background: #ff5ec1;
}
.minicard-sky {
background-color: #00c2e0 !important;
color: #fff !important;
}
.minicard-sky:hover:not(.minicard-composer),
.is-selected .minicard-sky,
.draggable-hover-card .minicard-sky {
background: #00bcd9;
}
.draggable-hover-card .minicard-sky {
background: #00b4d0;
}
.minicard-black {
background-color: #4d4d4d !important;
color: #fff !important;
}
.minicard-black:hover:not(.minicard-composer),
.is-selected .minicard-black,
.draggable-hover-card .minicard-black {
background: #4b4b4b;
}
.draggable-hover-card .minicard-black {
background: #484848;
}
.minicard-lime {
background-color: #51e898 !important;
}
.minicard-lime:hover:not(.minicard-composer),
.is-selected .minicard-lime,
.draggable-hover-card .minicard-lime {
background: #49e793;
}
.draggable-hover-card .minicard-lime {
background: #3ee58d;
}
.minicard-silver {
background-color: #c0c0c0 !important;
}
.minicard-silver:hover:not(.minicard-composer),
.is-selected .minicard-silver,
.draggable-hover-card .minicard-silver {
background: #bababa;
}
.draggable-hover-card .minicard-silver {
background: #b3b3b3;
}
.minicard-peachpuff {
background-color: #ffdab9 !important;
}
.minicard-peachpuff:hover:not(.minicard-composer),
.is-selected .minicard-peachpuff,
.draggable-hover-card .minicard-peachpuff {
background: #ffd3ac;
}
.draggable-hover-card .minicard-peachpuff {
background: #ffca9a;
}
.minicard-crimson {
background-color: #dc143c !important;
color: #fff !important;
}
.minicard-crimson:hover:not(.minicard-composer),
.is-selected .minicard-crimson,
.draggable-hover-card .minicard-crimson {
background: #d5133a;
}
.draggable-hover-card .minicard-crimson {
background: #cd1338;
}
.minicard-plum {
background-color: #dda0dd !important;
}
.minicard-plum:hover:not(.minicard-composer),
.is-selected .minicard-plum,
.draggable-hover-card .minicard-plum {
background: #da98da;
}
.draggable-hover-card .minicard-plum {
background: #d68cd6;
}
.minicard-darkgreen {
background-color: #006400 !important;
color: #fff !important;
}
.minicard-darkgreen:hover:not(.minicard-composer),
.is-selected .minicard-darkgreen,
.draggable-hover-card .minicard-darkgreen {
background: #006100;
}
.draggable-hover-card .minicard-darkgreen {
background: #005d00;
}
.minicard-slateblue {
background-color: #6a5acd !important;
color: #fff !important;
}
.minicard-slateblue:hover:not(.minicard-composer),
.is-selected .minicard-slateblue,
.draggable-hover-card .minicard-slateblue {
background: #6453cb;
}
.draggable-hover-card .minicard-slateblue {
background: #5c4ac8;
}
.minicard-magenta {
background-color: #f0f !important;
color: #fff !important;
}
.minicard-magenta:hover:not(.minicard-composer),
.is-selected .minicard-magenta,
.draggable-hover-card .minicard-magenta {
background: #f700f7;
}
.draggable-hover-card .minicard-magenta {
background: #ed00ed;
}
.minicard-gold {
background-color: #ffd700 !important;
}
.minicard-gold:hover:not(.minicard-composer),
.is-selected .minicard-gold,
.draggable-hover-card .minicard-gold {
background: #f7d100;
}
.draggable-hover-card .minicard-gold {
background: #edc800;
}
.minicard-navy {
background-color: #000080 !important;
color: #fff !important;
}
.minicard-navy:hover:not(.minicard-composer),
.is-selected .minicard-navy,
.draggable-hover-card .minicard-navy {
background: #00007c;
}
.draggable-hover-card .minicard-navy {
background: #007;
}
.minicard-gray {
background-color: #808080 !important;
color: #fff !important;
}
.minicard-gray:hover:not(.minicard-composer),
.is-selected .minicard-gray,
.draggable-hover-card .minicard-gray {
background: #7c7c7c;
}
.draggable-hover-card .minicard-gray {
background: #777;
}
.minicard-saddlebrown {
background-color: #8b4513 !important;
color: #fff !important;
}
.minicard-saddlebrown:hover:not(.minicard-composer),
.is-selected .minicard-saddlebrown,
.draggable-hover-card .minicard-saddlebrown {
background: #874312;
}
.draggable-hover-card .minicard-saddlebrown {
background: #814012;
}
.minicard-paleturquoise {
background-color: #afeeee !important;
}
.minicard-paleturquoise:hover:not(.minicard-composer),
.is-selected .minicard-paleturquoise,
.draggable-hover-card .minicard-paleturquoise {
background: #a5ecec;
}
.draggable-hover-card .minicard-paleturquoise {
background: #97e9e9;
}
.minicard-mistyrose {
background-color: #ffe4e1 !important;
}
.minicard-mistyrose:hover:not(.minicard-composer),
.is-selected .minicard-mistyrose,
.draggable-hover-card .minicard-mistyrose {
background: #ffd7d3;
}
.draggable-hover-card .minicard-mistyrose {
background: #ffc6bf;
}
.minicard-indigo {
background-color: #4b0082 !important;
color: #fff !important;
}
.minicard-indigo:hover:not(.minicard-composer),
.is-selected .minicard-indigo,
.draggable-hover-card .minicard-indigo {
background: #49007e;
}
.draggable-hover-card .minicard-indigo {
background: #460079;
}
.text-red {
color: #f00;
}
.text-green {
color: #008000;
}
+12 -6
View File
@@ -3,11 +3,11 @@ template(name="minicard")
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
.handle
.fa.fa-arrows
if cover
.minicard-cover(style="background-image: url('{{cover.url}}');")
.minicard-cover(style="background-image: url('{{cover.link 'original' '/'}}?dummyReloadAfterSessionEstablished={{sess}}');")
if labels
.minicard-labels(class="{{#if hiddenMinicardLabelText}}minicard-labels-no-text{{/if}}")
each labels
@@ -114,8 +114,9 @@ template(name="minicard")
//span.badge-comment.badge-text
//| {{_ 'comment'}}
if getDescription
.badge.badge-state-image-only(title=getDescription)
span.badge-icon.fa.fa-align-left
unless currentBoard.allowsDescriptionTextOnMinicard
.badge.badge-state-image-only(title=getDescription)
span.badge-icon.fa.fa-align-left
if getVoteQuestion
.badge.badge-state-image-only(title=getVoteQuestion)
span.badge-icon.fa.fa-thumbs-up(class="{{#if voteState}}text-green{{/if}}")
@@ -127,10 +128,10 @@ template(name="minicard")
span.badge-icon.fa.fa-check(class="{{#if pokerState}}text-green{{/if}}")
if expiredPoker
span.badge-text {{ getPokerEstimation }}
if attachments.count
if attachments.length
.badge
span.badge-icon.fa.fa-paperclip
span.badge-text= attachments.count
span.badge-text= attachments.length
if checklists.count
.badge(class="{{#if checklistFinished}}is-finished{{/if}}")
span.badge-icon.fa.fa-check-square-o
@@ -144,6 +145,11 @@ template(name="minicard")
.badge
span.badge-icon.fa.fa-sort
span.badge-text.check-list-sort {{ sort }}
if currentBoard.allowsDescriptionTextOnMinicard
if getDescription
.minicard-description
+viewer
| {{ getDescription }}
template(name="editCardSortOrderPopup")
input.js-edit-card-sort-popup(type='text' autofocus value=sort dir="auto")
+8
View File
@@ -1,3 +1,5 @@
import { TAPi18n } from '/imports/i18n';
// Template.cards.events({
// 'click .member': Popup.open('cardMember')
// });
@@ -114,6 +116,12 @@ Template.minicard.helpers({
return false;
}
},
// XXX resolve this nasty hack for https://github.com/veliovgroup/Meteor-Files/issues/763
sess() {
return Meteor.connection && Meteor.connection._lastSessionId
? Meteor.connection._lastSessionId
: null;
},
});
BlazeComponent.extendComponent({
-323
View File
@@ -1,323 +0,0 @@
@import 'nib'
.minicard-wrapper
cursor: pointer
position: relative
display: flex
align-items: center
margin-bottom: 9px
&.placeholder
background: darken(white, 20%)
border-radius: 9px
&.ui-sortable-helper
cursor: grabbing
transform: rotate(4deg)
display: block !important
.and-n-other
width: 100%
height: 16px
padding: 4px
background-color: darken(white, 5%)
text-align: center
border-radius: 3px
.multi-selection-checkbox
display: none
.multi-selection-checkbox + .minicard
margin-left: 8px
.minicard
padding: 6px 8px 2px
position: relative
flex: 1
flex-wrap: wrap
background-color: #fff
min-height: 20px
box-shadow: 0 1px 2px rgba(0,0,0,.15)
border-radius: 2px
color: #4d4d4d
overflow: hidden
transition: transform 0.2s,
border-radius 0.2s
&.linked-board
&.linked-card
.linked-icon
display: inline-block
margin-right: 11px
vertical-align: baseline
font-size: 0.9em
.linked-archived
color: #937760
.is-selected &
transform: translateX(11px)
border-bottom-right-radius: 0
border-top-right-radius: 0
z-index: 25
box-shadow: -2px 1px 2px rgba(0,0,0,.2)
&:hover:not(.minicard-composer),
.is-selected &,
.draggable-hover-card &
background: darken(white, 3%)
.draggable-hover-card &
background: darken(white, 7%)
.minicard-cover
background-position: center
background-repeat: no-repeat
background-size: contain
height: 145px
user-select: none
margin: -6px -8px 6px -8px
border-radius: top 2px
.minicard-labels
float: none
.minicard-label
width: 11px
height: @width
border-radius: 2px
margin-right: 3px
margin-bottom: 3px
.minicard-labels-no-text
display: flex
flex-wrap: wrap
.minicard-custom-fields
display:block;
.minicard-custom-field
display:flex;
.minicard-custom-field-item
flex-grow: 1
display: block
word-wrap: break-word
max-width: 100px
margin-right: 4px
.handle
width: 20px;
height: 20px;
position: absolute;
right: 5px;
top: 5px;
display:none;
@media only screen {
display:block;
}
.fa-arrows
font-size:20px;
color: #ccc;
.minicard-title
.card-number
color: darken(white, 30%);
display: inline-block;
margin-right: 5px;
p:last-child
margin-bottom: 0
.viewer
display: block
word-wrap: break-word
max-width: 230px
.dates
display: flex;
flex-direction: row;
flex-wrap: wrap;
.date
margin-right: 3px
.badges
float: left
margin-top: 7px
color: darken(white, 50%)
&:empty
display: none
.badge
float: left
margin-right: 11px
margin-bottom: 3px
font-size: 0.9em
&.is-finished
background: #3cb500
padding: 0px 3px
border-radius: 3px
color: white
&:last-of-type
margin-right: 0
.badge-icon,
.badge-text
vertical-align: middle
&.badge-comment
margin-bottom: 0.1rem
.badge-text
font-size: 0.9em
padding-left: 2px
line-height: 14px
.check-list-text
padding-left: 0px
line-height: 12px
.minicard-members,
.minicard-assignees,
.minicard-creator
float: right
margin-left: 5px
margin-bottom: 4px
.member
float: right
border-radius: 50%
height: 28px
width: @height
margin-bottom: 4px
.assignee
float: right
border-radius: 50%
height: 28px
width: @height
+ .badges
margin-top: 5px
.minicard-assignees
border-bottom: 1px solid red
.minicard-creator
border-bottom: 1px solid green
.minicard-members:empty,
.minicard-assignees:empty
display: none
&.minicard-composer
margin-bottom: 10px
textarea.minicard-composer-textarea,
textarea.minicard-composer-textarea:focus
resize: none
background: none
border: none
box-shadow: none
height: auto
margin: 0
padding: 0
max-height: 162px
min-height: 36px
margin-bottom: 20px
overflow-y: auto
.parent-prefix
color: darken(white, 30%)
font-size: 0.9em
.parent-subtext
color: darken(white, 30%)
font-size: 0.9em
@media screen and (max-width: 800px)
.minicard
.is-selected &
transform: translateX(0px)
border-bottom-right-radius: 0
border-top-right-radius: 0
z-index: 15
box-shadow: 0 1px 2px rgba(0,0,0,.15)
minicard-color(background, color...)
background-color: background
if color
color: color //overwrite text for better visibility
&:hover:not(.minicard-composer),
.is-selected &,
.draggable-hover-card &
background: darken(background, 3%)
.draggable-hover-card &
background: darken(background, 7%)
.minicard-green
minicard-color(#3cb500, #ffffff) //White text for better visibility
.minicard-yellow
minicard-color(#fad900)
.minicard-orange
minicard-color(#ff9f19)
.minicard-red
minicard-color(#eb4646, #ffffff) //White text for better visibility
.minicard-purple
minicard-color(#a632db, #ffffff) //White text for better visibility
.minicard-blue
minicard-color(#0079bf, #ffffff) //White text for better visibility
.minicard-pink
minicard-color(#ff78cb)
.minicard-sky
minicard-color(#00c2e0, #ffffff) //White text for better visibility
.minicard-black
minicard-color(#4d4d4d, #ffffff) //White text for better visibility
.minicard-lime
minicard-color(#51e898)
.minicard-silver
minicard-color(#c0c0c0)
.minicard-peachpuff
minicard-color(#ffdab9)
.minicard-crimson
minicard-color(#dc143c, #ffffff) //White text for better visibility
.minicard-plum
minicard-color(#dda0dd)
.minicard-darkgreen
minicard-color(#006400, #ffffff) //White text for better visibility
.minicard-slateblue
minicard-color(#6a5acd, #ffffff) //White text for better visibility
.minicard-magenta
minicard-color(#ff00ff, #ffffff) //White text for better visibility
.minicard-gold
minicard-color(#ffd700)
.minicard-navy
minicard-color(#000080, #ffffff) //White text for better visibility
.minicard-gray
minicard-color(#808080, #ffffff) //White text for better visibility
.minicard-saddlebrown
minicard-color(#8b4513, #ffffff) //White text for better visibility
.minicard-paleturquoise
minicard-color(#afeeee)
.minicard-mistyrose
minicard-color(#ffe4e1)
.minicard-indigo
minicard-color(#4b0082, #ffffff) //White text for better visibility
.text-red
color:red
.text-green
color:green
+25
View File
@@ -0,0 +1,25 @@
.result-card-list-wrapper {
margin: 1rem;
border-radius: 5px;
padding: 1.5rem;
padding-top: 0.75rem;
display: inline-block;
min-width: 250px;
max-width: 350px;
}
.result-card-wrapper {
margin-top: 0;
margin-bottom: 10px;
}
.result-card-context {
display: inline-block;
}
.result-card-context-separator {
font-weight: bold;
}
.result-card-context-list {
margin-bottom: 0.7rem;
}
.result-card-block-wrapper {
display: inline-block;
}
-24
View File
@@ -1,24 +0,0 @@
.result-card-list-wrapper
margin: 1rem
border-radius: 5px
padding: 1.5rem
padding-top: 0.75rem
display: inline-block
min-width: 250px
max-width: 350px
.result-card-wrapper
margin-top: 0
margin-bottom: 10px
.result-card-context
display: inline-block
.result-card-context-separator
font-weight: bold
.result-card-context-list
margin-bottom: 0.7rem
.result-card-block-wrapper
display: inline-block
+152
View File
@@ -0,0 +1,152 @@
.js-add-subtask {
color: #8c8c8c;
}
textarea.js-add-subtask-item,
textarea.js-edit-subtask-item {
overflow: hidden;
word-wrap: break-word;
resize: none;
height: 34px;
}
.delete-text,
.subtask-title .js-delete-subtask,
.subtask-title .js-view-subtask,
.js-delete-subtask-item {
color: #8c8c8c;
text-decoration: underline;
word-wrap: break-word;
float: right;
padding-top: 6px;
}
.delete-text:hover,
.subtask-title .js-delete-subtask:hover,
.subtask-title .js-view-subtask:hover,
.js-delete-subtask-item:hover {
color: inherit;
}
.subtask-title .checkbox {
float: left;
width: 30px;
height: 30px;
font-size: 18px;
line-height: 30px;
}
.subtask-title .title {
font-size: 18px;
line-height: 25px;
}
.subtask-title .subtasks-stat {
margin: 0 0.5em;
float: right;
padding-top: 6px;
}
.subtask-title .subtasks-stat.is-finished {
color: #3cb500;
}
.subtask-title .js-delete-subtask {
margin: 0 0.5em;
}
.js-confirm-subtask-delete {
background-color: #f7f7f7;
position: absolute;
float: left;
width: 60%;
margin-top: 0;
margin-left: 13%;
padding-bottom: 2%;
padding-left: 3%;
padding-right: 3%;
z-index: 17;
border-radius: 3px;
}
.js-confirm-subtask-delete p {
position: relative;
margin-top: 3%;
width: 100%;
text-align: center;
}
.js-confirm-subtask-delete p span {
font-weight: bold;
}
.js-confirm-subtask-delete p i {
font-size: 2em;
}
.js-confirm-subtask-delete .js-subtask-delete-buttons {
position: relative;
padding: left 2% right 2%;
}
.js-confirm-subtask-delete .js-subtask-delete-buttons .confirm-subtask-delete {
margin-left: 12%;
float: left;
}
.js-confirm-subtask-delete .js-subtask-delete-buttons .toggle-delete-subtask-dialog {
margin-right: 12%;
float: right;
}
#card-details-overlay {
top: 0;
bottom: -600px;
right: 0;
}
.subtasks {
background: #f7f7f7;
}
.subtasks.placeholder {
background: #ccc;
border-radius: 2px;
}
.subtasks.ui-sortable-helper {
box-shadow: -2px 2px 8px rgba(0,0,0,0.3), 0 0 1px rgba(0,0,0,0.5);
transform: rotate(4deg);
cursor: grabbing;
}
.subtasks-item {
margin: 0 0 0 0.1em;
line-height: 18px;
font-size: 1.1em;
margin-top: 3px;
display: flex;
background: #f7f7f7;
}
.subtasks-item.placeholder {
background: #ccc;
border-radius: 2px;
}
.subtasks-item.ui-sortable-helper {
box-shadow: -2px 2px 8px rgba(0,0,0,0.3), 0 0 1px rgba(0,0,0,0.5);
transform: rotate(4deg);
cursor: grabbing;
}
.subtasks-item:hover {
background-color: #ebebeb;
}
.subtasks-item .check-box {
margin: 0.1em 0 0 0;
}
.subtasks-item .check-box.is-checked {
border-bottom: 2px solid #3cb500;
border-right: 2px solid #3cb500;
}
.subtasks-item .item-title {
flex: 1;
padding-left: 10px;
}
.subtasks-item .item-title.is-checked {
color: #8c8c8c;
font-style: italic;
}
.subtasks-item .item-title .viewer p {
margin-bottom: 2px;
}
.js-delete-subtask-item {
margin: 0 0 0.5em 1.33em;
padding: 12px 0 0 0;
}
.add-subtask-item {
margin: 0.2em 0 0.5em 1.33em;
display: inline-block;
}
.subtask-details-menu {
float: right;
padding: 6px 10px 6px 10px;
}
+16 -15
View File
@@ -25,11 +25,9 @@ template(name="subtaskDetail")
else
.subtask-title
span
a.js-view-subtask(title="{{ subtask.title }}") {{_ "view-it"}}
if canModifyCard
if currentUser.isBoardAdmin
a.js-delete-subtask.toggle-delete-subtask-dialog {{_ "delete"}}...
a.fa.fa-navicon.subtask-details-menu.js-open-subtask-details-menu(title="{{_ 'subtaskActionsPopup-title'}}")
if canModifyCard
h2.title.js-open-inlined-form.is-editable
+viewer
@@ -39,18 +37,6 @@ template(name="subtaskDetail")
+viewer
= subtask.title
template(name="subtaskDeleteDialog")
.js-confirm-subtask-delete
p
i(class="fa fa-exclamation-triangle" aria-hidden="true")
p
| {{_ 'confirm-subtask-delete-dialog'}}
span {{subtask.title}}
| ?
.js-subtask-delete-buttons
button.confirm-subtask-delete(type="button") {{_ 'delete'}}
button.toggle-delete-subtask-dialog(type="button") {{_ 'cancel'}}
template(name="addSubtaskItemForm")
textarea.js-add-subtask-item(rows='1' autofocus dir="auto")
.edit-controls.clearfix
@@ -98,3 +84,18 @@ template(name='subtaskItemDetail')
.item-title(class="{{#if item.isFinished }}is-checked{{/if}}")
+viewer
= item.title
template(name="subtaskDeletePopup")
p {{_ 'confirm-subtask-delete-popup'}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
template(name="subtaskActionsPopup")
ul.pop-over-list
li
a.js-view-subtask(title="{{ subtask.title }}")
i.fa.fa-eye
| {{_ "view-it"}}
a.js-delete-subtask.delete-subtask
i.fa.fa-trash
| {{_ "delete"}} ...
+29 -54
View File
@@ -83,7 +83,6 @@ BlazeComponent.extendComponent({
const subtask = this.currentData().subtask;
if (subtask && subtask._id) {
subtask.archive();
this.toggleDeleteDialog.set(false);
}
},
@@ -95,11 +94,6 @@ BlazeComponent.extendComponent({
subtask.setTitle(title);
},
onCreated() {
this.toggleDeleteDialog = new ReactiveVar(false);
this.subtaskToDelete = null; //Store data context to pass to subtaskDeleteDialog template
},
pressKey(event) {
//If user press enter key inside a form, submit it
//Unless the user is also holding down the 'shift' key
@@ -111,64 +105,18 @@ BlazeComponent.extendComponent({
},
events() {
const events = {
'click .toggle-delete-subtask-dialog'(event) {
if ($(event.target).hasClass('js-delete-subtask')) {
this.subtaskToDelete = this.currentData().subtask; //Store data context
}
this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get());
},
'click .js-view-subtask'(event) {
if ($(event.target).hasClass('js-view-subtask')) {
const subtask = this.currentData().subtask;
const board = subtask.board();
FlowRouter.go('card', {
boardId: board._id,
slug: board.slug,
cardId: subtask._id,
});
}
},
};
return [
{
...events,
'click .js-open-subtask-details-menu': Popup.open('subtaskActions'),
'submit .js-add-subtask': this.addSubtask,
'submit .js-edit-subtask-title': this.editSubtask,
'click .confirm-subtask-delete': this.deleteSubtask,
'click .js-delete-subtask-item': this.deleteSubtask,
keydown: this.pressKey,
},
];
},
}).register('subtasks');
Template.subtaskDeleteDialog.onCreated(() => {
const $cardDetails = this.$('.card-details');
this.scrollState = {
position: $cardDetails.scrollTop(), //save current scroll position
top: false, //required for smooth scroll animation
};
//Callback's purpose is to only prevent scrolling after animation is complete
$cardDetails.animate({ scrollTop: 0 }, 500, () => {
this.scrollState.top = true;
});
//Prevent scrolling while dialog is open
$cardDetails.on('scroll', () => {
if (this.scrollState.top) {
//If it's already in position, keep it there. Otherwise let animation scroll
$cardDetails.scrollTop(0);
}
});
});
Template.subtaskDeleteDialog.onDestroyed(() => {
const $cardDetails = this.$('.card-details');
$cardDetails.off('scroll'); //Reactivate scrolling
$cardDetails.animate({ scrollTop: this.scrollState.position });
});
Template.subtaskItemDetail.helpers({
canModifyCard() {
return (
@@ -183,3 +131,30 @@ Template.subtaskItemDetail.helpers({
BlazeComponent.extendComponent({
// ...
}).register('subtaskItemDetail');
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-view-subtask'(event) {
if ($(event.target).hasClass('js-view-subtask')) {
const subtask = this.currentData().subtask;
const board = subtask.board();
FlowRouter.go('card', {
boardId: board._id,
slug: board.slug,
cardId: subtask._id,
});
}
},
'click .js-delete-subtask' : Popup.afterConfirm('subtaskDelete', function () {
Popup.back(2);
const subtask = this.subtask;
if (subtask && subtask._id) {
subtask.archive();
}
}),
}
]
}
}).register('subtaskActionsPopup');
-142
View File
@@ -1,142 +0,0 @@
.js-add-subtask
color: #8c8c8c
textarea.js-add-subtask-item, textarea.js-edit-subtask-item
overflow: hidden
word-wrap: break-word
resize: none
height: 34px
.delete-text
color: #8c8c8c
text-decoration: underline
word-wrap: break-word
float: right
padding-top: 6px
&:hover
color: inherit
.subtask-title
.checkbox
float: left
width: 30px
height 30px
font-size: 18px
line-height: 30px
.title
font-size: 18px
line-height: 25px
.subtasks-stat
margin: 0 0.5em
float: right
padding-top: 6px
&.is-finished
color: #3cb500
.js-delete-subtask
@extends .delete-text
margin: 0 0.5em
.js-view-subtask
@extends .delete-text
.js-confirm-subtask-delete
background-color: darken(white, 3%)
position: absolute
float: left;
width: 60%
margin-top: 0
margin-left: 13%
padding-bottom: 2%
padding-left: 3%
padding-right: 3%
z-index: 17
border-radius: 3px
p
position: relative
margin-top: 3%
width: 100%
text-align: center
span
font-weight: bold
i
font-size: 2em
.js-subtask-delete-buttons
position: relative
padding: left 2% right 2%
.confirm-subtask-delete
margin-left: 12%
float: left
.toggle-delete-subtask-dialog
margin-right: 12%
float: right
#card-details-overlay
top: 0
bottom: -600px
right: 0
.subtasks
background: darken(white, 3%)
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
.subtasks-item
margin: 0 0 0 0.1em
line-height: 18px
font-size: 1.1em
margin-top: 3px
display: flex
background: darken(white, 3%)
&.placeholder
background: darken(white, 20%)
border-radius: 2px
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
&:hover
background-color: darken(white, 8%)
.check-box
margin: 0.1em 0 0 0;
&.is-checked
border-bottom: 2px solid #3cb500
border-right: 2px solid #3cb500
.item-title
flex: 1
padding-left: 10px;
&.is-checked
color: #8c8c8c
font-style: italic
& .viewer
p
margin-bottom: 2px
.js-delete-subtask-item
margin: 0 0 0.5em 1.33em
@extends .delete-text
padding: 12px 0 0 0
.add-subtask-item
margin: 0.2em 0 0.5em 1.33em
display: inline-block
+22
View File
@@ -0,0 +1,22 @@
.datepicker-container .fields .left {
width: 56%;
}
.datepicker-container .fields .right {
width: 38%;
}
.datepicker-container .datepicker {
width: 100%;
}
.datepicker-container .datepicker table {
width: 100%;
border: none;
border-spacing: 0;
border-collapse: collapse;
}
.datepicker-container .datepicker table thead {
background: none;
}
.datepicker-container .datepicker table td,
.datepicker-container .datepicker table th {
box-sizing: border-box;
}
-17
View File
@@ -1,17 +0,0 @@
.datepicker-container
.fields
.left
width: 56%
.right
width: 38%
.datepicker
width: 100%
table
width: 100%
border: none
border-spacing: 0
border-collapse: collapse
thead
background: none
td, th
box-sizing: border-box
+736
View File
@@ -0,0 +1,736 @@
select,
textarea,
input:not([type=file]),
button {
box-sizing: border-box;
background-color: #ebebeb;
border: 1px solid #ccc;
border-radius: 3px;
display: block;
margin-bottom: 12px;
min-height: 34px;
padding: 7px;
}
select.full,
textarea.full,
input:not([type=file]).full,
button.full {
width: 100%;
}
select.input-error,
textarea.input-error,
input:not([type=file]).input-error,
button.input-error {
background-color: #ece9e9;
border-color: #ba1212;
}
select:focus,
textarea:focus,
input:not([type=file]):focus,
button:focus {
outline: 0;
}
input[type="file"] {
margin-bottom: 16px;
}
input[type="radio"] {
-webkit-appearance: radio;
min-height: inherit;
}
input[type="text"],
input[type="password"],
input[type="email"] {
transition: background 85ms ease-in, border-color 85ms ease-in;
width: 250px;
}
input[type="text"].inline-input,
input[type="password"].inline-input,
input[type="email"].inline-input {
background: none;
border: 0;
margin: 0;
padding: 2px;
min-height: 0;
height: 18px;
width: 200px;
}
input[type="text"].full-line,
input[type="password"].full-line,
input[type="email"].full-line {
width: 100%;
}
input[type="email"]:invalid {
box-shadow: none;
}
input[type="text"]:hover,
input[type="password"]:hover,
input[type="email"]:hover,
textarea:hover {
border-color: #999;
}
input[type="text"]:hover.input-error,
input[type="password"]:hover.input-error,
input[type="email"]:hover.input-error,
textarea:hover.input-error {
border-color: #ba1212;
}
input[type="text"]:focus,
input[type="password"]:focus,
input[type="email"]:focus,
textarea:focus {
background: #fff;
border-color: #318ec4;
box-shadow: 0 0 2px #318ec4;
}
input[type="text"]:focus.input-error,
input[type="password"]:focus.input-error,
input[type="email"]:focus.input-error,
textarea:focus.input-error {
background-color: #f8f7f7;
border-color: #ba1212;
box-shadow: 0 0 2px #d11515;
}
input[type="text"]:disabled,
input[type="password"]:disabled,
input[type="email"]:disabled,
textarea:disabled {
background-color: #dcdcdc;
border-color: #bfbfbf;
color: #8c8c8c;
-webkit-touch-callout: none;
user-select: none;
}
select {
max-height: 300px;
width: 256px;
margin-bottom: 8px;
}
select.inline {
width: 100%;
}
option[disabled] {
color: #8c8c8c;
}
textarea {
height: 150px;
transition: background 85ms ease-in, border-color 85ms ease-in;
resize: vertical;
width: 100%;
}
textarea.editor {
resize: none;
padding-bottom: 22px;
}
.button {
border-radius: 3px;
text-decoration: none;
position: relative;
}
input[type="submit"],
button {
background: #cfcfcf;
background: linear-gradient(#cfcfcf, #c2c2c2);
border: none;
cursor: pointer;
display: inline-block;
font-weight: 700;
line-height: 22px;
padding: 7px 20px;
text-align: center;
}
input[type="submit"] .wide,
button .wide {
padding-left: 30px;
padding-right: 30px;
}
input[type="submit"]:hover,
button:hover,
input[type="submit"]:focus,
button:focus {
background: #c2c2c2;
background: linear-gradient(#c2c2c2, #b5b5b5);
}
input[type="submit"]:active,
button:active {
background: #b5b5b5;
background: linear-gradient(#b5b5b5, #a8a8a8);
box-shadow: inset 0 3px 6px rgba(0,0,0,0.1);
}
input[type="submit"]:active:hover,
button:active:hover,
input[type="submit"]:active:focus,
button:active:focus,
input[type="submit"]:active:active,
button:active:active {
background: #e6e6e6;
background: linear-gradient(#e6e6e6, #e6e6e6);
}
input[type="submit"].primary,
button.primary {
background: #005377;
box-shadow: 0 1px 0 #4d4d4d;
color: #fff;
}
input[type="submit"].primary:hover,
button.primary:hover,
input[type="submit"].primary:focus,
button.primary:focus {
background: #004766;
}
input[type="submit"].primary:active,
button.primary:active {
background: #01628c;
}
input[type="submit"].negate:hover,
button.negate:hover,
input[type="submit"].negate:focus,
button.negate:focus {
background: #990f0f;
background: linear-gradient(#990f0f, #7d0c0c);
box-shadow: 0 1px 0 #4d4d4d;
color: #fff;
}
input[type="submit"].negate:active,
button.negate:active {
background: #7d0c0c;
box-shadow: 0 1px 0 #4d4d4d;
color: #fff;
}
input[type="submit"] i.fa,
button i.fa {
margin-right: 10px;
}
input[type="submit"].disabled,
input[type="submit"]:disabled,
input[type="button"].disabled,
button.disabled,
.button.disabled,
input[type="submit"].disabled:hover,
input[type="submit"]:disabled:hover,
input[type="button"].disabled:hover,
button.disabled:hover,
.button.disabled:hover,
input[type="submit"].disabled:active,
input[type="submit"]:disabled:active,
input[type="button"].disabled:active,
button.disabled:active,
.button.disabled:active {
background: #cfcfcf;
cursor: default;
box-shadow: none;
color: #a8a8a8;
}
fieldset {
border: 1px solid #bfbfbf;
padding: 15px;
margin-bottom: 15px;
}
input[type="hidden"] {
display: none;
}
.radio-div,
.check-div {
display: block;
margin: 0 0 4px 20px;
min-height: 20px;
position: relative;
}
.radio-div input,
.check-div input {
left: -18px;
min-height: 0;
margin: 0;
padding: 0;
position: absolute;
top: 2px;
}
.radio-div label,
.check-div label {
font-weight: 400;
}
label {
display: block;
font-weight: 700;
margin-bottom: 4px;
}
label.form-error {
color: #ba1212;
}
input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder,
input::-moz-placeholder,
textarea::-moz-placeholder {
color: #8c8c8c;
}
.edit-controls,
.add-controls {
display: flex;
align-items: center;
margin-top: 0px;
margin-bottom: 12px;
}
.edit-controls button[type=submit],
.add-controls button[type=submit],
.edit-controls input[type=button],
.add-controls input[type=button] {
float: left;
height: 32px;
margin-bottom: 0px;
}
.edit-controls .fa-times-thin,
.add-controls .fa-times-thin {
font-size: 26px;
margin: 3px 10px;
}
[type="checkbox"]:not(:checked),
[type="checkbox"]:checked {
position: absolute;
left: -9999px;
visibility: hidden;
display: none;
}
.materialCheckBox {
position: relative;
width: 13px;
height: 13px;
z-index: 0;
border: 2px solid #5a5a5a;
border-radius: 1px;
transition: 0.2s;
margin: 0;
cursor: pointer;
}
.materialCheckBox.is-checked {
top: -4px;
left: -3px;
width: 7px;
height: 15px;
margin-right: 6px;
border-top: 2px solid transparent;
border-left: 2px solid transparent;
transform: rotate(40deg);
-webkit-backface-visibility: hidden;
transform-origin: 100% 100%;
}
.button-link {
background: #fff;
background: linear-gradient(#fff, #f5f5f5);
border-radius: 3px;
box-sizing: border-box;
user-select: none;
border: 1px solid #e3e3e3;
border-bottom-color: #c2c2c2;
cursor: pointer;
display: block;
font-weight: 700;
height: 34px;
margin-top: 6px;
max-width: 300px;
padding: 7px;
position: relative;
text-decoration: none;
overflow: ellipsis;
}
.button-link .on {
background: #48b512;
background: linear-gradient(#48b512, #3d990f);
border-radius: 3px;
color: #fff;
display: none;
font-size: 12px;
font-weight: 700;
height: 17px;
line-height: 17px;
margin: 0;
padding: 2px 4px;
position: absolute;
right: 5px;
top: 5px;
text-align: center;
}
.button-link.is-on {
padding-right: 30px;
max-width: 196px;
}
.button-link.is-on .on {
display: block;
}
.button-link.inline {
color: #666;
padding: 2px 14px;
margin-left: 4px;
}
.button-link.setting {
height: 52px;
float: left;
position: relative;
margin-top: 0;
}
.button-link.setting.disabled {
background: #fff;
border-color: #e9e9e9;
color: #8c8c8c;
cursor: default;
}
.button-link.setting.disabled select {
display: none;
}
.button-link.setting.disabled:hover .label {
color: #8c8c8c;
}
.button-link.setting.disabled,
.button-link.setting.disabled:hover,
.button-link.setting.disabled:active,
.button-link.setting.disabled.primary,
.button-link.setting.disabled.primary:hover,
.button-link.setting.disabled.primary:active {
background: #cfcfcf;
border-color: #c2c2c2;
border-bottom-color: #b5b5b5;
cursor: default;
box-shadow: none;
color: #a8a8a8;
}
.button-link.setting .label {
color: #8c8c8c;
display: block;
font-size: 12px;
line-height: 14px;
margin-bottom: 0;
}
.button-link.setting:hover .label {
color: #eee;
}
.button-link.setting .value {
display: block;
font-size: 18px;
line-height: 24px;
overflow: hidden;
text-overflow: ellipsis;
}
.button-link.setting label {
display: none;
}
.button-link.setting select {
border: none;
cursor: pointer;
height: 50px;
left: 0;
margin: 0;
opacity: 0;
position: absolute;
top: 0;
z-index: 2;
width: 100%;
}
.button-link:hover {
background: #318ec4;
background: linear-gradient(#318ec4, #2b7cab);
border-color: #2e85b8;
color: #fff;
}
.button-link:hover .on {
background-image: none;
background-color: rgba(255,255,255,0.3);
border-color: transparent;
}
.button-link:active {
background: #2e85b8;
background: linear-gradient(#2e85b8, #28739f);
border-color: #2b7cab;
color: #fff;
}
.button-link .button-link.negate:hover {
background: #990f0f;
background: linear-gradient(#990f0f, #7d0c0c);
border-color: linear-gradient(#990f0f, #7d0c0c);
}
.button-link .button-link.negate:active {
background: #7d0c0c;
border-color: #990f0f;
}
.button-link.primary {
background: #48b512;
background: linear-gradient(#48b512, #3d990f);
border: 1px solid;
border-color: #3d990f;
color: #fff;
}
.button-link.primary:hover {
background: #3d990f;
background: linear-gradient(#3d990f, #327d0c);
border-color: #3d990f;
}
.button-link.danger {
background: #ba1212;
background: linear-gradient(#ba1212, #8b0e0e);
border: 1px solid;
border-color: #a21010;
color: #fff;
}
.button-link.danger:hover {
background: #a21010;
background: linear-gradient(#a21010, #740b0b);
border-color: #8b0e0e;
}
button.quiet-button,
button.loud-text-button {
background: none;
text-align: left;
line-height: normal;
border: none;
box-shadow: none;
}
button.quiet-button:active,
button.loud-text-button:active {
color: #4d4d4d;
background: #d3d3d3;
box-shadow: none;
}
button.quiet-button {
font-weight: 400;
text-decoration: underline;
}
button.loud-text-button {
width: 100%;
}
button.loud-text-button:hover {
color: #111;
}
.emphasis-button,
.quiet-button {
border-radius: 3px;
user-select: none;
color: #8c8c8c;
display: block;
margin: 2px 0;
padding: 6px 8px;
position: relative;
}
.emphasis-button.w-img,
.quiet-button.w-img {
padding-left: 28px;
}
.emphasis-button:hover,
.quiet-button:hover {
color: #4d4d4d;
background: #dcdcdc;
}
.emphasis-button:active,
.quiet-button:active {
color: #4d4d4d;
background: #d3d3d3;
}
.quiet-button-large {
padding: 16px 24px;
}
.emphasis-button {
color: #74663e;
background: #ecdfbb;
}
.emphasis-button:hover {
color: #53492d;
background: #e7d6a7;
}
.emphasis-button:active {
color: #53492d;
background: #e1cc93;
}
.is-editable {
cursor: pointer;
}
.big-link {
border-radius: 3px;
display: block;
margin: 6px 0 6px 40px;
padding: 11px;
position: relative;
text-decoration: none;
font-size: 16px;
line-height: 20px;
}
.big-link .text {
text-decoration: underline;
}
.big-link:hover {
background: #dcdcdc;
}
.big-link.options {
padding-right: 41px;
}
.big-link .option {
height: 30px;
width: 30px;
position: absolute;
right: 6px;
top: 6px;
}
.big-link.none {
color: #8c8c8c;
text-decoration: none;
}
.big-link.none:hover {
background: transparent;
}
.big-link.avatar-changer {
padding-right: 51px;
}
.big-link.avatar-changer .member {
border: 1px solid #ccc;
border-radius: 3px;
height: 40px;
width: 40px;
position: absolute;
right: 0;
top: 0;
}
.big-link.avatar-changer .member .member-avatar {
height: 40px;
width: 40px;
}
.big-link.avatar-changer .member .member-initials {
font-size: 16px;
height: 40px;
line-height: 40px;
max-height: 40px;
}
.show-more {
border-radius: 3px;
color: #8c8c8c;
display: block;
padding: 16px 8px 16px 40px;
margin: 8px 0;
}
.show-more:hover {
background: #dcdcdc;
text-decoration: underline;
}
.show-more.compact {
padding: 12px 8px;
margin: 8px 0 0;
text-align: center;
}
.board-widget .show-more {
padding: 12px 8px 12px 40px;
}
.uploader {
clear: both;
cursor: pointer;
position: relative;
height: 34px;
width: 100%;
}
.uploader .realfile {
cursor: pointer;
height: 34px;
line-height: 34px;
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: 2;
font-size: 23px;
}
.uploader .realfile input[type="file"] {
cursor: pointer;
height: 34px;
line-height: 34px;
margin: 0;
opacity: 0;
padding: 0;
width: 100%;
z-index: 2;
font-size: 23px;
}
.uploader:hover .fakefile {
background: #318ec4;
background: linear-gradient(#318ec4, #2b7cab);
border-color: #2e85b8;
color: #fff;
}
.dropdown-menu {
border-radius: 2px;
overflow: hidden;
}
.dropdown-menu li {
border-top: none;
}
.dropdown-menu li a {
padding: 4px 12px 4px 8px;
}
.dropdown-menu li a img {
width: 18px;
height: 18px;
margin-right: 5px;
vertical-align: middle;
}
.dropdown-menu li a .minicard-label {
width: 11px;
height: 11px;
border-radius: 2px;
margin: 2px 7px -2px -2px;
display: inline-block;
}
.dropdown-menu li.active {
background: #005377;
}
.dropdown-menu li.active a,
.dropdown-menu li.active .quiet {
color: #fff;
}
.material-toggle-switch {
display: flex;
}
.toggle-label {
position: relative;
display: block;
height: 20px;
width: 44px;
background-color: #a6a6a6;
border-radius: 100px;
cursor: pointer;
transition: all 0.3s ease;
}
.toggle-label:after {
position: absolute;
left: -2px;
top: -3px;
display: block;
width: 26px;
height: 26px;
border-radius: 100px;
background-color: #fff;
box-shadow: 0px 3px 3px rgba(0,0,0,0.05);
content: '';
transition: all 0.3s ease;
}
.toggle-label:active:after {
transform: scale(1.15, 0.85);
}
.toggle-switch:checked ~ .toggle-label {
background-color: #6fbeb5;
}
.toggle-switch:checked ~ .toggle-label:after {
left: 20px;
background-color: #179588;
}
.toggle-switch:checked:disabled ~ .toggle-label {
background-color: #d5d5d5;
pointer-events: none;
}
.toggle-switch:checked:disabled ~ .toggle-label:after {
background-color: #bcbdbc;
}
.toggle-switch {
display: none;
}
.toggle-switch-title {
margin: 0 0.5em;
display: flex;
}
@media screen and (max-width: 800px) {
.edit-controls .fa-times-thin,
.add-controls .fa-times-thin {
margin: 3px 20px;
}
}
-697
View File
@@ -1,697 +0,0 @@
@import 'nib'
select,
textarea,
input:not([type=file]),
button
box-sizing: border-box
background-color: #ebebeb
border: 1px solid #ccc
border-radius: 3px
display: block
margin-bottom: 12px
min-height: 34px
padding: 7px
&.full
width: 100%
&.input-error
background-color: #ece9e9
border-color: #ba1212
&:focus
outline: 0
input[type="file"]
margin-bottom: 16px
input[type="radio"]
-webkit-appearance: radio
min-height: inherit
input[type="text"],
input[type="password"],
input[type="email"]
transition: background 85ms ease-in,
border-color 85ms ease-in
width: 250px
&.inline-input
background: none
border: 0
margin: 0
padding: 2px
min-height: 0
height: 18px
width: 200px
&.full-line
width: 100%
input[type="email"]:invalid
box-shadow: none
input[type="text"],
input[type="password"],
input[type="email"],
textarea
&:hover
border-color: #999
&.input-error
border-color: #ba1212
&:focus
background: #fff
border-color: #318ec4
box-shadow: 0 0 2px #318ec4
&.input-error
background-color: #f8f7f7
border-color: #ba1212
box-shadow: 0 0 2px #d11515
&:disabled
background-color: #dcdcdc
border-color: #bfbfbf
color: #8c8c8c
-webkit-touch-callout: none
user-select: none
select
max-height: 300px
width: 256px
margin-bottom: 8px
&.inline
width: 100%
option[disabled]
color: #8c8c8c
textarea
height: 150px
transition: background 85ms ease-in,
border-color 85ms ease-in
resize: vertical
width: 100%
&.editor
resize: none
padding-bottom: 22px
.button
border-radius: 3px
text-decoration: none
position: relative
input[type="submit"],
button
background: #cfcfcf
background: linear-gradient(#cfcfcf, #c2c2c2)
border: none
cursor: pointer
display: inline-block
font-weight: 700
line-height: 22px
margin: 8px 4px 0 0
padding: 7px 20px
text-align: center
.wide
padding-left: 30px
padding-right: 30px
&:hover,
&:focus
background: #c2c2c2
background: linear-gradient(#c2c2c2, #b5b5b5)
&:active
background: #b5b5b5
background: linear-gradient(#b5b5b5, #a8a8a8)
box-shadow: inset 0 3px 6px rgba(0, 0, 0, .1)
&:hover,
&:focus,
&:active
background: #e6e6e6
background: linear-gradient(#e6e6e6, #e6e6e6)
&.primary
background: #005377
box-shadow: 0 1px 0 #4d4d4d
color: white
&:hover,
&:focus
background: #004766
&:active
background: #01628C
&.negate
&:hover,
&:focus
background: #990f0f
background: linear-gradient(#990f0f, #7d0c0c)
box-shadow: 0 1px 0 #4d4d4d
color: #fff
&:active
background: #7d0c0c
box-shadow: 0 1px 0 #4d4d4d
color: #fff
i.fa
margin-right: 10px
input[type="submit"].disabled,
input[type="submit"]:disabled,
input[type="button"].disabled,
button.disabled,
.button.disabled
&,
&:hover,
&:active
background: #cfcfcf
cursor: default
box-shadow: none
color: #a8a8a8
fieldset
border: 1px solid #bfbfbf
padding: 15px
margin-bottom: 15px
input[type="hidden"]
display: none
.radio-div,
.check-div
display: block
margin: 0 0 4px 20px
min-height: 20px
position: relative
input
left: -18px
min-height: 0
margin: 0
padding: 0
position: absolute
top: 2px
label
font-weight: 400
label
display: block
font-weight: 700
margin-bottom: 4px
&.form-error
color: #ba1212
input,
textarea
&::-webkit-input-placeholder,
&::-moz-placeholder
color: #8c8c8c
.edit-controls,
.add-controls
display: flex
align-items: baseline
margin-top: 0
button[type=submit]
input[type=button]
float: left
height: 32px
margin-top: -2px
padding-top: 5px
padding-bottom: 5px
.fa-times-thin
font-size: 26px
margin: 3px 4px
// Material Design checkboxes
[type="checkbox"]:not(:checked),
[type="checkbox"]:checked
position: absolute
left: -9999px
visibility: hidden
display: none
.materialCheckBox
position: relative
width: 13px
height: @width
z-index: 0
border: 2px solid #5a5a5a
border-radius: 1px
transition: .2s
margin: 0
cursor: pointer
&.is-checked
top: -4px
left: -3px
width: 7px
height: 15px
margin-right: 6px
border-top: 2px solid transparent
border-left: 2px solid transparent
transform: rotate(40deg)
-webkit-backface-visibility: hidden
transform-origin: 100% 100%
.button-link
background: #fff
background: linear-gradient(#fff, #f5f5f5)
border-radius: 3px
box-sizing: border-box
user-select: none
border: 1px solid #e3e3e3
border-bottom-color: #c2c2c2
cursor: pointer
display: block
font-weight: 700
height: 34px
margin-top: 6px
max-width: 300px
padding: 7px
position: relative
text-decoration: none
overflow: ellipsis
.on
background: #48b512
background: linear-gradient(#48b512, #3d990f)
border-radius: 3px
color: #fff
display: none
font-size: 12px
font-weight: 700
height: 17px
line-height: @height
margin: 0
padding: 2px 4px
position: absolute
right: 5px
top: 5px
text-align: center
&.is-on
padding-right: 30px
max-width: 196px
.on
display: block
&.inline
color: #666
padding: 2px 14px
margin-left: 4px
&.setting
height: 52px
float: left
position: relative
margin-top: 0
&.disabled
background: #fff
border-color: #e9e9e9
color: #8c8c8c
cursor: default
select
display: none
&:hover .label
color: #8c8c8c
&,
&:hover,
&:active,
&.primary,
&.primary:hover,
&.primary:active
background: #cfcfcf
border-color: #c2c2c2
border-bottom-color: #b5b5b5
cursor: default
box-shadow: none
color: #a8a8a8
.label
color: #8c8c8c
display: block
font-size: 12px
line-height: 14px
margin-bottom: 0
&:hover .label
color: #eee
.value
display: block
font-size: 18px
line-height: 24px
overflow: hidden
text-overflow: ellipsis
label
display: none
select
border: none
cursor: pointer
height: 50px
left: 0
margin: 0
opacity: 0
position: absolute
top: 0
z-index: 2
width: 100%
&:hover
background: #318ec4
background: linear-gradient(#318ec4, #2b7cab)
border-color: #2e85b8
color: #fff
.on
background-image: none
background-color: rgba(255, 255, 255, .3)
border-color: transparent
&:active
background: #2e85b8
background: linear-gradient(#2e85b8, #28739f)
border-color: #2b7cab
color: #fff
.button-link.negate
&:hover
background: #990f0f
background: linear-gradient(#990f0f, #7d0c0c)
border-color: @background
&:active
background: #7d0c0c
border-color: #990f0f
&.primary
background: #48b512
background: linear-gradient(#48b512, #3d990f)
border: 1px solid
border-color: #3d990f
color: #fff
&:hover
background: #3d990f
background: linear-gradient(#3d990f, #327d0c)
border-color: #3d990f
&.danger
background: #ba1212
background: linear-gradient(#ba1212, #8b0e0e)
border: 1px solid
border-color: #a21010
color: #fff
&:hover
background: #a21010
background: linear-gradient(#a21010, #740b0b)
border-color: #8b0e0e
button
&.quiet-button,
&.loud-text-button
background: none
text-align: left
line-height: normal
border: none
box-shadow: none
&:active
color: #4d4d4d
background: #d3d3d3
box-shadow: none
&.quiet-button
font-weight: 400
text-decoration: underline
&.loud-text-button
width: 100%
&:hover
color: #111
.emphasis-button,
.quiet-button
border-radius: 3px
user-select: none
color: #8c8c8c
display: block
margin: 2px 0
padding: 6px 8px
position: relative
&.w-img
padding-left: 28px
&:hover
color: #4d4d4d
background: #dcdcdc
&:active
color: #4d4d4d
background: #d3d3d3
.quiet-button-large
padding: 16px 24px
.emphasis-button
color: #74663e
background: #ecdfbb
&:hover
color: #53492d
background: #e7d6a7
&:active
color: #53492d
background: #e1cc93
.is-editable
cursor: pointer
.big-link
border-radius: 3px
display: block
margin: 6px 0 6px 40px
padding: 11px
position: relative
text-decoration: none
font-size: 16px
line-height: 20px
.text
text-decoration: underline
&:hover
background: #dcdcdc
&.options
padding-right: 41px
.option
height: 30px
width: @height
position: absolute
right: 6px
top: 6px
&.none
color: #8c8c8c
text-decoration: none
&:hover
background: transparent
&.avatar-changer
padding-right: 51px
.member
border: 1px solid #ccc
border-radius: 3px
height: 40px
width: @height
position: absolute
right: 0
top: 0
.member-avatar
height: 40px
width: @height
.member-initials
font-size: 16px
height: 40px
line-height: @height
max-height: @height
.show-more
border-radius: 3px
color: #8c8c8c
display: block
padding: 16px 8px 16px 40px
margin: 8px 0
&:hover
background: #dcdcdc
text-decoration: underline
&.compact
padding: 12px 8px
margin: 8px 0 0
text-align: center
.board-widget .show-more
padding: 12px 8px 12px 40px
.uploader
clear: both
cursor: pointer
position: relative
height: 34px
width: 100%
.realfile
cursor: pointer
height: 34px
line-height: @height
position: absolute
top: 0
left: 0
width: 100%
z-index: 2
font-size: 23px
input[type="file"]
cursor: pointer
height: 34px
line-height: @height
margin: 0
opacity: 0
padding: 0
width: 100%
z-index: 2
font-size: 23px
&:hover .fakefile
background: #318ec4
background: linear-gradient(#318ec4, #2b7cab)
border-color: #2e85b8
color: #fff
.dropdown-menu
border-radius: 2px
overflow: hidden
li
border-top: none
a
padding: 4px 12px 4px 8px
img
width: 18px
height: @width
margin-right: 5px
vertical-align: middle
.minicard-label
width: 11px
height: @width
border-radius: 2px
margin: 2px 7px -2px -2px
display: inline-block
&.active
background: #005377
a, .quiet
color: white
// Material Design Toggle Switch
.material-toggle-switch
display: flex
.toggle-label
position: relative
display: block
height: 20px
width: 44px
background-color: #a6a6a6
border-radius: 100px
cursor: pointer
transition: all 0.3s ease
&:after
position: absolute
left: -2px
top: -3px
display: block
width: 26px
height: 26px
border-radius: 100px
background-color: #fff
box-shadow: 0px 3px 3px rgba(0,0,0,0.05)
content: ''
transition: all 0.3s ease
&:active
&:after
transform: scale(1.15, 0.85)
.toggle-switch:checked ~ .toggle-label
background-color: #6fbeb5
&:after
left: 20px
background-color: #179588
.toggle-switch:checked:disabled ~ .toggle-label
background-color: #d5d5d5
pointer-events: none
&:after
background-color: #bcbdbc
.toggle-switch
display: none
.toggle-switch-title
margin: 0 0.5em
display: flex
@media screen and (max-width: 800px)
.edit-controls,
.add-controls
.fa-times-thin
margin: 3px 20px
+51
View File
@@ -0,0 +1,51 @@
.map-members:after {
content: "";
flex: auto;
}
.map-members .mapping-list {
display: flex;
flex-wrap: wrap;
margin: 0 -4px;
}
.map-members .mapping-list .mapping-item {
max-width: 300px;
min-width: 200px;
padding: 6px;
margin: 5px;
flex: 1;
background: #fff;
border-radius: 3px;
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
}
.map-members .mapping-list .mapping-item:hover {
background: #f2f2f2;
}
.map-members .mapping-list .mapping-item.filled {
background: #e0ffe5;
}
.map-members .mapping-list .mapping-item.filled:hover {
background: #ffe0e0;
}
.map-members .mapping-list .mapping-item.ghost-item {
height: 0;
visibility: hidden;
border: none;
}
.map-members .mapping-list .profile-source {
display: inline-block;
width: 80%;
}
.map-members .mapping-list .wekan {
display: inline-block;
width: 35px;
}
.map-members .mapping-list .wekan .member {
float: none;
}
a.show-mapping {
text-decoration: underline;
}
.import-members-map-note {
font-size: 90%;
font-weight: bold;
}
+6 -6
View File
@@ -56,17 +56,17 @@ template(name="importMapMembersAddPopup")
p
| {{_ 'import-user-select'}}
.js-map-member
+esInput(index="users")
+EasySearch.Input(index=searchIndex)
ul.pop-over-list
+esEach(index="users")
+EasySearch.Each(index=searchIndex)
li.item.js-member-item
a.name.js-select-import(title="{{profile.fullname}} ({{username}})" data-id="{{_id}}")
+userAvatar(userId=_id esSearch=true)
a.name.js-select-import(title="{{profile.fullname}} ({{username}})" data-id="{{__originalId}}")
+userAvatar(userId=__originalId)
span.full-name
= profile.fullname
| (<span class="username">{{username}}</span>)
+ifEsIsSearching(index='users')
+EasySearch.IfSearching(index=searchIndex)
+spinner
+ifEsHasNoResults(index="users")
+EasySearch.IfNoResults(index=searchIndex)
.manage-member-section
p.quiet {{_ 'no-results'}}
+11 -2
View File
@@ -87,8 +87,13 @@ BlazeComponent.extendComponent({
if (err) {
this.setError(err.error);
} else {
let title = getSlug(this.importedData.get().title) || 'imported-board';
Session.set('fromBoard', null);
Utils.goBoardId(res);
FlowRouter.go('board', {
id: res,
slug: title,
})
//Utils.goBoardId(res);
}
},
);
@@ -292,7 +297,7 @@ BlazeComponent.extendComponent({
},
onSelectUser() {
Popup.getOpenerComponent().mapSelectedMember(this.currentData()._id);
Popup.getOpenerComponent(5).mapSelectedMember(this.currentData().__originalId);
Popup.back();
},
@@ -304,3 +309,7 @@ BlazeComponent.extendComponent({
];
},
}).register('importMapMembersAddPopup');
Template.importMapMembersAddPopup.helpers({
searchIndex: () => UserSearchIndex,
})
-53
View File
@@ -1,53 +0,0 @@
@import 'nib'
.map-members
&:after
content: "";
flex: auto;
.mapping-list
display: flex
flex-wrap: wrap
margin: 0 -4px
.mapping-item
max-width: 300px
min-width: 200px
padding: 6px
margin: 5px
flex:1
background: white
border-radius: 3px
box-shadow: 0 1px 2px rgba(0,0,0,.15)
&:hover
background: darken(white, 5%)
&.filled
background: #E0FFE5
&:hover
background: #FFE0E0
&.ghost-item
height: 0
visibility: hidden
border: none
.profile-source
display: inline-block
width: 80%
.wekan
display: inline-block
width: 35px
.member
float: none
a.show-mapping
text-decoration underline
.import-members-map-note
font-size: 90%
font-weight: bold
+350
View File
@@ -0,0 +1,350 @@
.list {
box-sizing: border-box;
display: flex;
flex-direction: column;
position: relative;
background: #dedede;
border-left: 1px solid #ccc;
padding: 0;
float: left;
min-width: 270px;
max-width: 270px;
/* Reverted incomplete change list width: */
/* https://github.com/wekan/wekan/issues/4558 */
/* Orinal width: 270px. Changes not saved yet: */
/*resize: both; - List width and height resizeable */
/* overflow: auto; - List width and height resizeable */
}
.list:first-child {
margin-left: 5px;
border-left: none;
}
.card-details + .list {
border-left: none;
}
.list.ui-sortable-helper {
box-shadow: -2px 2px 8px rgba(0,0,0,0.3), 0 0 1px rgba(0,0,0,0.5);
transform: rotate(4deg);
cursor: grabbing;
}
.list.ui-sortable-helper .list-header.ui-sortable-handle {
cursor: grabbing;
}
.list.placeholder {
background-color: rgba(0,0,0,0.2);
border-color: transparent;
box-shadow: none;
height: 100px;
}
.list.list-composer .open-list-composer,
.list .list-composer .open-list-composer {
color: #8c8c8c;
}
.list.list-composer .list-name-input,
.list .list-composer .list-name-input {
background: #fff;
margin: -3px 0 8px;
}
.list-header-add {
flex: 0 0 auto;
padding: 20px 12px 4px;
position: relative;
min-height: 20px;
}
.list-header {
flex: 0 0 auto;
padding: 20px 12px 4px;
position: relative;
min-height: 20px;
background-color: #e4e4e4;
border-bottom: 6px solid #e4e4e4;
}
.list-header.list-header-card-count {
min-height: 35px;
height: auto;
}
.list-header.ui-sortable-handle {
cursor: grab;
}
.list-header .list-header-left-icon {
display: none;
}
.list-header .list-header-name {
display: inline;
font-size: 16px;
line-height: 17px;
margin: 0;
font-weight: bold;
min-height: 9px;
min-width: 30px;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
}
.list-header .list-header-watch-icon {
padding-left: 10px;
color: #a6a6a6;
}
.list-header .list-header-menu {
float: right;
}
.list-header .list-header-plus-top {
color: #a6a6a6;
margin-right: 15px;
}
.list-header .highlight {
color: #ce1414;
}
.list-header .cardCount {
color: #8c8c8c;
font-size: 12px;
font-weight: bold;
}
.list-header .list-header-plus-top,
.js-open-list-menu,
.list-header-menu a {
color: #4d4d4d;
padding-left: 4px;
}
.list-body {
flex: 1 1 auto;
flex-direction: column;
display: flex;
overflow-y: auto;
padding: 5px 11px;
}
.list-body .minicards {
flex-grow: 1;
flex-shrink: 0;
}
.list-body .minicards form {
margin-bottom: 9px;
}
.list-body .open-minicard-composer {
border-radius: 2px;
color: #8c8c8c;
display: block;
padding: 7px 10px;
position: relative;
text-decoration: none;
animation: fadeIn 0.3s;
}
.list-body .open-minicard-composer i.fa {
margin-right: 7px;
}
.list-body .open-minicard-composer:hover {
background: #fafafa;
color: #222;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
}
#js-wip-limit-edit {
padding-top: 2%;
}
#js-wip-limit-edit p {
margin-bottom: 0;
}
#js-wip-limit-edit input {
display: inline-block;
}
#js-wip-limit-edit .wip-limit-value {
width: 20%;
margin-right: 5%;
}
#js-wip-limit-edit .wip-limit-error {
display: none;
}
#js-wip-limit-edit .soft-wip-limit {
margin-right: 8px;
}
#js-wip-limit-edit div {
float: left;
}
@media screen and (max-width: 250px) {
.mini-list {
flex: 0 0 60px;
height: auto;
width: 100%;
border-left: 0px;
border-bottom: 1px solid #ccc;
}
.list {
display: contents;
flex-basis: auto;
width: 100%;
border-left: 0px;
}
.list:first-child {
margin-left: 0px;
}
.list.ui-sortable-helper {
flex: 0 0 60px;
height: 60px;
width: 100%;
border-left: 0px;
border-bottom: 1px solid #ccc;
}
.list.ui-sortable-helper .list-header.ui-sortable-handle {
cursor: grabbing;
}
.list.placeholder {
flex: 0 0 60px;
height: 60px;
width: 100%;
border-left: 0px;
border-bottom: 1px solid #ccc;
}
.list-body {
padding: 15px 19px;
}
.list-header {
padding: 0 12px 0px;
border-bottom: 0px solid #e4e4e4;
height: 60px;
margin-top: 10px;
display: flex;
align-items: center;
}
.list-header .list-header-left-icon {
padding: 7px;
padding-right: 27px;
margin-top: 1px;
top: -7px;
left: -7px;
}
.list-header .list-header-menu-icon {
position: absolute;
padding: 7px;
top: 50%;
transform: translateY(-50%);
right: 47px;
font-size: 20px;
}
.list-header .list-header-handle {
position: absolute;
padding: 7px;
top: 50%;
transform: translateY(-50%);
right: 10px;
font-size: 24px;
}
.list-header {
display: grid;
grid-template-columns: 30px 5fr 1fr;
}
.list-header .list-header-left-icon {
display: grid;
grid-row: 1/3;
grid-column: 1;
}
.list-header .list-header-name {
grid-row: 1;
grid-column: 2;
align-self: end;
}
.list-header .cardCount {
grid-row: 2;
grid-column: 2;
align-self: start;
}
.list-header .list-header-menu {
grid-row: 1/3;
grid-column: 3;
}
.list-header .inlined-form {
grid-row: 1/3;
grid-column: 1/4;
}
.list-header .edit-controls {
align-items: initial;
}
}
.link-board-wrapper {
display: flex;
align-items: baseline;
}
.link-board-wrapper .js-link-board {
margin-left: 15px;
}
.search-card-results {
max-height: 250px;
overflow: hidden;
}
.sk-spinner-list {
margin-top: unset !important;
}
.list-header-white {
border-bottom: 6px solid #fff;
border: 1px solid #eee;
}
.list-header-green {
border-bottom: 6px solid #3cb500;
}
.list-header-yellow {
border-bottom: 6px solid #fad900;
}
.list-header-orange {
border-bottom: 6px solid #ff9f19;
}
.list-header-red {
border-bottom: 6px solid #eb4646;
}
.list-header-purple {
border-bottom: 6px solid #a632db;
}
.list-header-blue {
border-bottom: 6px solid #0079bf;
}
.list-header-pink {
border-bottom: 6px solid #ff78cb;
}
.list-header-sky {
border-bottom: 6px solid #00c2e0;
}
.list-header-black {
border-bottom: 6px solid #4d4d4d;
}
.list-header-lime {
border-bottom: 6px solid #51e898;
}
.list-header-silver {
border-bottom: 6px solid unset;
}
.list-header-peachpuff {
border-bottom: 6px solid #ffdab9;
}
.list-header-crimson {
border-bottom: 6px solid #dc143c;
}
.list-header-plum {
border-bottom: 6px solid #dda0dd;
}
.list-header-darkgreen {
border-bottom: 6px solid #006400;
}
.list-header-slateblue {
border-bottom: 6px solid #6a5acd;
}
.list-header-magenta {
border-bottom: 6px solid #f0f;
}
.list-header-gold {
border-bottom: 6px solid #ffd700;
}
.list-header-navy {
border-bottom: 6px solid #000080;
}
.list-header-gray {
border-bottom: 6px solid #808080;
}
.list-header-saddlebrown {
border-bottom: 6px solid #8b4513;
}
.list-header-paleturquoise {
border-bottom: 6px solid #afeeee;
}
.list-header-mistyrose {
border-bottom: 6px solid #ffe4e1;
}
.list-header-indigo {
border-bottom: 6px solid #4b0082;
}
+12 -15
View File
@@ -1,3 +1,4 @@
import { TAPi18n } from '/imports/i18n';
require('/client/lib/jquery-ui.js')
const { calculateIndex } = Utils;
@@ -95,7 +96,7 @@ BlazeComponent.extendComponent({
$cards.sortable('cancel');
if (MultiSelection.isActive()) {
Cards.find(MultiSelection.getMongoSelector(), {sort: ['sort']}).forEach((card, i) => {
Cards.find(MultiSelection.getMongoSelector(), { sort: ['sort'] }).forEach((card, i) => {
const newSwimlaneId = targetSwimlaneId
? targetSwimlaneId
: card.swimlaneId || defaultSwimlaneId;
@@ -118,45 +119,41 @@ BlazeComponent.extendComponent({
},
sort(event, ui) {
const $boardCanvas = $('.board-canvas');
const boardCanvas = $boardCanvas[0];
const boardCanvas = $boardCanvas[0];
if (event.pageX < 10)
{ // scroll to the left
if (event.pageX < 10) { // scroll to the left
boardCanvas.scrollLeft -= 15;
ui.helper[0].offsetLeft -= 15;
}
if (
event.pageX > boardCanvas.offsetWidth - 10 &&
boardCanvas.scrollLeft < $boardCanvas.data('scrollLeftMax') // don't scroll more than possible
)
{ // scroll to the right
) { // scroll to the right
boardCanvas.scrollLeft += 15;
}
if (
event.pageY > boardCanvas.offsetHeight - 10 &&
boardCanvas.scrollTop < $boardCanvas.data('scrollTopMax') // don't scroll more than possible
)
{ // scroll to the bottom
event.pageY + boardCanvas.scrollTop < $boardCanvas.data('scrollTopMax') // don't scroll more than possible
) { // scroll to the bottom
boardCanvas.scrollTop += 15;
}
if (event.pageY < 10)
{ // scroll to the top
if (event.pageY < 10) { // scroll to the top
boardCanvas.scrollTop -= 15;
}
},
activate(event, ui) {
const $boardCanvas = $('.board-canvas');
const boardCanvas = $boardCanvas[0];
const boardCanvas = $boardCanvas[0];
// scrollTopMax and scrollLeftMax only available at Firefox (https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTopMax)
// https://stackoverflow.com/questions/12965296/how-to-get-maximum-document-scrolltop-value/12965383#12965383
$boardCanvas.data('scrollTopMax', $(document).height() - $(window).height());
// https://www.it-swarm.com.de/de/javascript/so-erhalten-sie-den-maximalen-dokument-scrolltop-wert/1069126844/
$boardCanvas.data('scrollTopMax', boardCanvas.scrollHeight - boardCanvas.clientTop);
// https://stackoverflow.com/questions/5138373/how-do-i-get-the-max-value-of-scrollleft/5704386#5704386
$boardCanvas.data('scrollLeftMax', boardCanvas.scrollWidth - boardCanvas.clientWidth);
},
});
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
$cards.sortable({
handle: '.handle',
});
-332
View File
@@ -1,332 +0,0 @@
@import 'nib'
.list
box-sizing: border-box
display: flex
flex-direction: column
flex: 0 0 270px
position: relative
// Even if this background color is the same as the body we can't leave it
// transparent, because that won't work during a list drag.
background: darken(white, 13%)
border-left: 1px solid darken(white, 20%)
padding: 0
float: left
&:first-child
margin-left: 5px
border-left: none
.card-details + &
border-left: none
&.ui-sortable-helper
box-shadow: -2px 2px 8px rgba(0, 0, 0, .3),
0 0 1px rgba(0, 0, 0, .5)
transform: rotate(4deg)
cursor: grabbing
.list-header.ui-sortable-handle
cursor: grabbing
&.placeholder
background-color: rgba(0, 0, 0, .2)
border-color: transparent
box-shadow: none
height: 100px
&.list-composer, & .list-composer
.open-list-composer
color: #8c8c8c
.list-name-input
background: white
margin: -3px 0 8px
.list-header-add
flex: 0 0 auto
padding: 20px 12px 4px
position: relative
min-height: 20px
.list-header
flex: 0 0 auto
padding: 20px 12px 4px
position: relative
min-height: 20px
background-color: #e4e4e4;
border-bottom: 6px solid #e4e4e4;
&.list-header-card-count
min-height: 35px
height: auto
&.ui-sortable-handle
cursor: grab
.list-header-left-icon
display: none
.list-header-name
display: inline
font-size: 16px
line-height: 17px
margin: 0
font-weight: bold
min-height: 9px
min-width: 30px
overflow: hidden
text-overflow: ellipsis
word-wrap: break-word
.list-header-watch-icon
padding-left: 10px
color: #a6a6a6
.list-header-menu
position: absolute
padding: 27px 19px
margin-top: 1px
top: -7px
right: 3px
.list-header-plus-icon
color: #a6a6a6
margin-right: 15px
.highlight
color: #ce1414
.cardCount
color: #8c8c8c
font-size: 0.8em
.list-header .list-header-plus-icon, .js-open-list-menu, .list-header-menu a
color #4d4d4d
padding-left 4px
.list-body
flex: 1 1 auto
flex-direction: column
display: flex
overflow-y: auto
padding: 5px 11px
.minicards
flex-grow: 1
flex-shrink: 0
form
margin-bottom: 9px
.open-minicard-composer
border-radius: 2px
color: #8c8c8c
display: block
padding: 7px 10px
position: relative
text-decoration: none
animation: fadeIn 0.3s
i.fa
margin-right: 7px
&:hover
background: #fafafa
color: #222
box-shadow: 0 1px 2px rgba(0,0,0,.2)
#js-wip-limit-edit
padding-top: 2%
p
margin-bottom: 0
input
display: inline-block
.wip-limit-value
width: 20%
margin-right: 5%
.wip-limit-error
display: none
.soft-wip-limit
margin-right: 8px
div
float: left
@media screen and (max-width: 800px)
.list-header-menu
position: absolute
padding: 27px 19px
margin-top: 1px
top: -7px
margin-right: 7px
right: -3px
.list-header
.list-header-name
margin-left: 1.4rem
.mini-list
flex: 0 0 60px
height: auto
width: 100%
border-left: 0px
border-bottom: 1px solid darken(white, 20%)
.list
display: contents
flex-basis: auto
width: 100%
border-left: 0px
&:first-child
margin-left: 0px
&.ui-sortable-helper
flex: 0 0 60px
height: 60px
width: 100%
border-left: 0px
border-bottom: 1px solid darken(white, 20%)
.list-header.ui-sortable-handle
cursor: grabbing
&.placeholder
flex: 0 0 60px
height: 60px
width: 100%
border-left: 0px
border-bottom: 1px solid darken(white, 20%)
.list-body
padding: 15px 19px;
.list-header
padding: 0 12px 0px
border-bottom: 0px solid #e4e4e4
height: 60px
margin-top: 10px
display: flex
align-items: center
.list-header-left-icon
display: inline
padding: 7px
padding-right: 27px
margin-top: 1px
top: -@padding
left: -@padding
.list-header-menu-icon
position: absolute
padding: 7px
top: 50%
transform: translateY(-50%)
right: 47px
font-size: 20px
.list-header-handle
position: absolute
padding: 7px
top: 50%
transform: translateY(-50%)
right: 10px
font-size: 24px
.link-board-wrapper
display: flex
align-items: baseline
.js-link-board
margin-left: 15px
.search-card-results
max-height: 250px
overflow: hidden
.sk-spinner-list
margin-top: unset !important
list-header-color(background, color...)
border-bottom: 6px solid background
.list-header-white
list-header-color(#ffffff, #4d4d4d) //Black text for better visibility
border: 1px solid #eee
.list-header-green
list-header-color(#3cb500, #ffffff) //White text for better visibility
.list-header-yellow
list-header-color(#fad900, #4d4d4d) //Black text for better visibility
.list-header-orange
list-header-color(#ff9f19, #4d4d4d) //Black text for better visibility
.list-header-red
list-header-color(#eb4646, #ffffff) //White text for better visibility
.list-header-purple
list-header-color(#a632db, #ffffff) //White text for better visibility
.list-header-blue
list-header-color(#0079bf, #ffffff) //White text for better visibility
.list-header-pink
list-header-color(#ff78cb, #4d4d4d) //Black text for better visibility
.list-header-sky
list-header-color(#00c2e0, #ffffff) //White text for better visibility
.list-header-black
list-header-color(#4d4d4d, #ffffff) //White text for better visibility
.list-header-lime
list-header-color(#51e898, #4d4d4d) //Black text for better visibility
.list-header-silver
list-header-color(unset, #4d4d4d) //Black text for better visibility
.list-header-peachpuff
list-header-color(#ffdab9, #4d4d4d) //Black text for better visibility
.list-header-crimson
list-header-color(#dc143c, #ffffff) //White text for better visibility
.list-header-plum
list-header-color(#dda0dd, #4d4d4d) //Black text for better visibility
.list-header-darkgreen
list-header-color(#006400, #ffffff) //White text for better visibility
.list-header-slateblue
list-header-color(#6a5acd, #ffffff) //White text for better visibility
.list-header-magenta
list-header-color(#ff00ff, #ffffff) //White text for better visibility
.list-header-gold
list-header-color(#ffd700, #4d4d4d) //Black text for better visibility
.list-header-navy
list-header-color(#000080, #ffffff) //White text for better visibility
.list-header-gray
list-header-color(#808080, #ffffff) //White text for better visibility
.list-header-saddlebrown
list-header-color(#8b4513, #ffffff) //White text for better visibility
.list-header-paleturquoise
list-header-color(#afeeee, #4d4d4d) //Black text for better visibility
.list-header-mistyrose
list-header-color(#ffe4e1, #4d4d4d) //Black text for better visibility
.list-header-indigo
list-header-color(#4b0082, #ffffff) //White text for better visibility
+32 -6
View File
@@ -1,3 +1,4 @@
import { TAPi18n } from '/imports/i18n';
import { Spinner } from '/client/lib/spinner';
const subManager = new SubsManager();
@@ -42,7 +43,6 @@ BlazeComponent.extendComponent({
const position = this.currentData().position;
const title = textarea.val().trim();
const formComponent = this.childComponents('addCardForm')[0];
let sortIndex;
if (position === 'top') {
sortIndex = Utils.calculateIndex(null, firstCardDom).base;
@@ -50,6 +50,7 @@ BlazeComponent.extendComponent({
sortIndex = Utils.calculateIndex(lastCardDom, null).base;
}
const formComponent = this.cardFormComponent();
const members = formComponent.members.get();
const labelIds = formComponent.labels.get();
const customFields = formComponent.customFields.get();
@@ -131,6 +132,16 @@ BlazeComponent.extendComponent({
}
},
cardFormComponent() {
for (const inlinedForm of this.childComponents('inlinedForm')) {
const [addCardForm] = inlinedForm.childComponents('addCardForm');
if (addCardForm) {
return addCardForm;
}
}
return null;
},
scrollToBottom() {
const container = this.firstNode();
$(container).animate({
@@ -277,9 +288,12 @@ BlazeComponent.extendComponent({
getLabels() {
const currentBoardId = Session.get('currentBoard');
return Boards.findOne(currentBoardId).labels.filter(label => {
return this.labels.get().indexOf(label._id) > -1;
});
if (Boards.findOne(currentBoardId).labels) {
return Boards.findOne(currentBoardId).labels.filter(label => {
return this.labels.get().indexOf(label._id) > -1;
});
}
return false;
},
pressKey(evt) {
@@ -333,7 +347,7 @@ BlazeComponent.extendComponent({
[
// User mentions
{
match: /\B@([\w.]*)$/,
match: /\B@([\w.-]*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
callback(
@@ -344,6 +358,9 @@ BlazeComponent.extendComponent({
);
},
template(user) {
if (user.profile && user.profile.fullname) {
return (user.username + " (" + user.profile.fullname + ")");
}
return user.username;
},
replace(user) {
@@ -360,6 +377,9 @@ BlazeComponent.extendComponent({
const currentBoard = Boards.findOne(Session.get('currentBoard'));
callback(
$.map(currentBoard.labels, label => {
if (label.name == undefined) {
label.name = "";
}
if (
label.name.indexOf(term) > -1 ||
label.color.indexOf(term) > -1
@@ -569,7 +589,8 @@ BlazeComponent.extendComponent({
this.isBoardTemplateSearch;
let board = {};
if (this.isTemplateSearch) {
board = Boards.findOne((Meteor.user().profile || {}).templatesBoardId);
//board = Boards.findOne((Meteor.user().profile || {}).templatesBoardId);
board._id = (Meteor.user().profile || {}).templatesBoardId;
} else {
// Prefetch first non-current board id
board = Boards.find({
@@ -708,6 +729,11 @@ BlazeComponent.extendComponent({
},
(err, data) => {
_id = data;
subManager.subscribe('board', _id, false);
FlowRouter.go('board', {
id: _id,
slug: getSlug(element.title),
});
},
);
}
+14 -7
View File
@@ -18,9 +18,9 @@ template(name="listHeader")
span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.count}}
|/#{wipLimit.value})
if showCardsCountForList cards.count
|&nbsp;
span(class="cardCount") {{cardsCount}} {{cardsCountForListIsOne cards.count}}
if showCardsCountForList cards.count
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.count}}
if isMiniScreen
if currentList
if isWatching
@@ -28,7 +28,7 @@ template(name="listHeader")
div.list-header-menu
unless currentUser.isCommentOnly
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon(title="{{_ 'add-card-to-top-of-list'}}")
a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}")
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
else
a.list-header-menu-icon.fa.fa-angle-right.js-select-list
@@ -39,12 +39,12 @@ template(name="listHeader")
div.list-header-menu
unless currentUser.isCommentOnly
//if isBoardAdmin
// a.fa.js-list-star.list-header-plus-icon(class="fa-star{{#unless starred}}-o{{/unless}}")
// a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon(title="{{_ 'add-card-to-top-of-list'}}")
a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}")
a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}")
if currentUser.isBoardAdmin
if isShowDesktopDragHandles
if isTouchScreenOrShowDesktopDragHandles
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
template(name="editListTitleForm")
@@ -55,6 +55,13 @@ template(name="editListTitleForm")
a.fa.fa-times-thin.js-close-inlined-form
template(name="listActionPopup")
ul.pop-over-list
li
a.js-add-card.list-header-plus-bottom
i.fa.fa-plus
i.fa.fa-arrow-down
| {{_ 'add-card-to-bottom-of-list'}}
hr
ul.pop-over-list
li
a.js-toggle-watch-list
Loaded 100 of 728 files, more files were not shown because too many files have changed in this diff. Show more