Compare commits

..
1533 Commits
Author SHA1 Message Date
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 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
Lauri Ojansivu f46173077b Updated translations. 2022-02-17 20:31:12 +02: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
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
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
Lauri Ojansivu 36d8949831 v5.80 2021-11-26 02:39:27 +02:00
Lauri Ojansivu 5c5c867aca Updated translations. 2021-11-26 02:32:30 +02:00
Lauri Ojansivu 383323c4ea Updated ChangeLog. 2021-11-26 02:25:49 +02:00
Lauri Ojansivu 96465ac664 Part 2: Copy text button at most textarea fields is now translatable.
Thanks to xet7 !
2021-11-26 02:24:42 +02:00
Lauri Ojansivu 98dedc697c Updated translations. 2021-11-26 02:16:47 +02:00
Lauri Ojansivu f82fbdb8a2 Updated ChangeLog. 2021-11-26 02:11:28 +02:00
Lauri Ojansivu 5088c12253 Textareas "Copy text to clipboard" is now translatable.
Thanks to xet7 !
2021-11-26 02:07:00 +02:00
Lauri Ojansivu 611af2d523 Updated ChangeLog. 2021-11-26 01:29:23 +02:00
Lauri Ojansivu 97ef13c222 Updated ChangeLog. 2021-11-26 01:28:33 +02:00
Lauri Ojansivu d7adfc779e Merge branch 'master' of github.com:wekan/wekan 2021-11-26 01:25:57 +02:00
Lauri Ojansivu 507cfbb377 Updated ChangeLog. 2021-11-26 01:25:50 +02:00
Lauri Ojansivu 1af75aa579 Merge pull request #4194 from mfilser/fix_multi_selection_sidebar_action_keep_card_order
Sidebar multi selection actions keep now the card sorting (cards moving, cards to archive etc.)
2021-11-26 01:25:08 +02: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
Lauri Ojansivu b09be8614b Updated package-lock.json
Thanks to xet7 !
2021-11-26 01:24:20 +02:00
Lauri Ojansivu 8bc047cec3 Updated ChangeLog. 2021-11-26 01:21:49 +02:00
Martin Filser cb7ec54be2 Sidebar multi selection actions keep now the card sorting (cards moving, cards to archive etc.) 2021-11-26 00:21:37 +01:00
Lauri Ojansivu 6d3b979d67 Merge pull request #4193 from mfilser/fix_multi_selection_keep_cards_order_on_dragging_to_another_column
Moving many cards with multi selection drag/drop to another list keeps the card order
2021-11-26 01:20:52 +02:00
Lauri Ojansivu fe01d35fe6 Updated ChangeLog. 2021-11-26 01:19:12 +02:00
Martin Filser f38e3db93c Moving many cards with multi selection drag/drop to another list keeps the card order 2021-11-26 00:18:13 +01:00
Lauri Ojansivu b988ef430c Merge pull request #4192 from mfilser/move_cards_to_top_ignores_the_current_filter
Move cards to top/bottom ignores the current filter if active
2021-11-26 01:17:57 +02:00
Lauri Ojansivu 4a97e70b8d Updated ChangeLog. 2021-11-26 01:14:15 +02:00
Martin Filser f082128d99 Move cards to top/bottom ignores the current filter if active 2021-11-26 00:14:03 +01:00
Lauri Ojansivu 7577b246da Merge pull request #4191 from mfilser/attachments_show_filesize
Attachments, show file size in KB in card details
2021-11-26 01:13:06 +02:00
Lauri Ojansivu 9db14a0c3b Updated translations. 2021-11-26 01:12:42 +02:00
Martin Filser f3d5b887c8 Attachments, show file size in KB in card details 2021-11-26 00:10:09 +01:00
Lauri Ojansivu 7e21589ee1 Merge pull request #4190 from mfilser/sidebar_members_settings_popup_title
Sidebar Member Settings Popup has now a Popup title
2021-11-26 01:08:24 +02:00
Martin Filser e1e4ea1205 Sidebar Member Settings Popup has now a Popup title 2021-11-26 00:04:55 +01:00
Lauri Ojansivu 54205b7c5d Updated ChangeLog. 2021-11-26 01:04:38 +02:00
Lauri Ojansivu e0b5d1c15e Merge pull request #4189 from mfilser/custom_fields_currency_autofocus
CustomFields Currency, autofocus on edit
2021-11-26 01:03:49 +02:00
Martin Filser 79b40cd8a9 CustomFields Currency, autofocus on edit 2021-11-26 00:02:16 +01:00
Lauri Ojansivu f6830ff4f3 Updated translations. 2021-11-26 01:00:59 +02:00
Lauri Ojansivu 765ac045fe Updated ChangeLog. 2021-11-26 00:57:13 +02:00
Lauri Ojansivu b9d98f58cf Fix typo. 2021-11-26 00:56:16 +02:00
Lauri Ojansivu e0978000f8 Merge pull request #4188 from mfilser/fix_save_custom_fields_StringTemplates_on_touch_devices
Custom Field StringTemplates didn't save the last input value on touch devices
2021-11-26 00:55:27 +02:00
Lauri Ojansivu bc186958ab Updated translations. 2021-11-26 00:52:11 +02:00
Martin Filser a190600934 Custom Field StringTemplates didn't save the last input value on touch devices 2021-11-25 23:48:54 +01:00
Lauri Ojansivu 65fc2a4fdd Updated ChangeLog. 2021-11-26 00:48:52 +02:00
Lauri Ojansivu d41810aca1 Merge pull request #4187 from mfilser/fix_infinite_scrolling_on_mobile_view
Fix: On mobile infinite scrolling didn't work
2021-11-26 00:48:02 +02:00
Lauri Ojansivu b75a7a6424 Revert upgrade jquery.
Thanks to mfilser!
2021-11-26 00:45:33 +02:00
Martin Filser bfb3837ee4 Fix: On mobile infinite scrolling didn't work anymore
- listBody.js:755 doesn't trigger an event when scrolling
2021-11-25 23:42:07 +01:00
Lauri Ojansivu 72fa10761a Updated ChangeLog. 2021-11-26 00:41:13 +02:00
Lauri Ojansivu 9c1523c916 Merge pull request #4186 from mfilser/settings_add_space_between_radio_buttons
Settings, add some space between radio buttons
2021-11-26 00:40:29 +02:00
Lauri Ojansivu a786262658 Updated translations. 2021-11-26 00:40:00 +02:00
Martin Filser 6245982025 Settings, add some space between radio buttons
- Fixes: #4159
2021-11-25 23:28:30 +01:00
Lauri Ojansivu c643cdaad3 Merge pull request #4185 from mfilser/add_copy_text_button_to_most_textarea_fields
Add copy text button to most textarea fields
2021-11-26 00:26:37 +02:00
Martin Filser f0cadf858d New card comments have now the same color as card comment editing 2021-11-25 23:21:45 +01:00
Martin Filser 2566286e86 Copied tooptip did only work at mobile view, now on desktop view too 2021-11-25 23:20:35 +01:00
Martin Filser 8bf3841e6c Added copy button to edit Checklist and Checklist-Items editor 2021-11-25 23:16:09 +01:00
Martin Filser 7a959ef1a2 Added copy button to new Checklist and Checklist-Items editor 2021-11-25 23:16:09 +01:00
Martin Filser 5525247f52 Copied! Tooltip of card link showed also "Copied!" at the comments 2021-11-25 23:16:09 +01:00
Martin Filser 7444c11c82 Moved "copied!" code to Utils
- same implementation in all files, so it's better to have one function
  for it
2021-11-25 23:16:09 +01:00
Martin Filser 6d3ecdea55 Changed copy icon to a "href" link
- mouse hover changes the icon
2021-11-25 23:16:09 +01:00
Martin Filser 7db1445d09 Added copy button to all editor's 2021-11-25 23:16:09 +01:00
Martin Filser 08ee969445 Added animation to tooltip "copied!" 2021-11-25 23:16:09 +01:00
Martin Filser 4bfa727e9e Show a "copied!" tooltip after successfull URL copy 2021-11-25 23:16:09 +01:00
Lauri Ojansivu ed53065a09 Merge pull request #4184 from mfilser/fix_copy_card_url
Copy card url works now again
2021-11-26 00:16:01 +02:00
Lauri Ojansivu 49fdae6e06 Updated ChangeLog. 2021-11-26 00:15:35 +02:00
Lauri Ojansivu b78dfc7149 Updated translations. 2021-11-26 00:13:33 +02:00
Martin Filser 0227b38845 Copy card url works now again
Fixes: #4155
2021-11-25 23:13:29 +01:00
Lauri Ojansivu 7d52016d79 Updated ChangeLog. 2021-11-26 00:13:20 +02:00
Lauri Ojansivu d9bc5f80a0 Merge pull request #4183 from mfilser/list_addding_cancel_button
List adding has now a cancel button
2021-11-26 00:12:17 +02:00
Lauri Ojansivu f1a0e4754f Updated ChangeLog. 2021-11-26 00:06:46 +02:00
Lauri Ojansivu 496c791629 Updated dependencies.
Thanks to developers of dependencies!
2021-11-26 00:05:21 +02:00
Martin Filser 2b7c5cfcb1 List adding has now a cancel button 2021-11-25 23:04:33 +01:00
Lauri Ojansivu f647f4580e Updated ChangeLog. 2021-11-26 00:04:31 +02:00
Lauri Ojansivu c62c705755 Merge pull request #4181 from mfilser/drag_drop_update_and_screen_and_list_scroll
Drag drop jquery-ui update + screen and list scroll
2021-11-26 00:03:38 +02:00
Lauri Ojansivu 57129eff04 Updated translations. 2021-11-26 00:01:00 +02:00
Martin Filser 3c7ca87625 Don't scroll the screen more than the scrollbar would scroll 2021-11-25 22:42:06 +01:00
Martin Filser 126c9ab853 The Minicard dragging scrolls now the board at screen outside 2021-11-25 22:42:06 +01:00
Martin Filser c9071a74bc jquery-ui works now with touch devices
- the "old" implementation at wekan source code didn't work anymore with
  jquery-ui@1.13.0, so it's necessary to use another package to get it
  work again
2021-11-25 22:42:06 +01:00
Martin Filser 292e43466e Card drag/drop scrolls now the list at top/bottom 2021-11-25 22:42:06 +01:00
Lauri Ojansivu 75af42cd8c Merge branch 'master' of github.com:wekan/wekan 2021-11-25 23:41:26 +02:00
Lauri Ojansivu 60c831521e Updated ChangeLog. 2021-11-25 23:41:19 +02:00
Lauri Ojansivu 9e0de569dc Merge pull request #4180 from mfilser/app_reconnect_link_not_clickable
App reconnect link wasn't clickable
2021-11-25 23:40:13 +02:00
Lauri Ojansivu 6dbb8c8c68 Merge pull request #4179 from Ben0it-T/master
Show or hide members and assignee(s) on minicard
2021-11-25 23:39:35 +02:00
Lauri Ojansivu ac89276ee9 Updated ChangeLog. 2021-11-25 23:38:45 +02:00
Lauri Ojansivu 7902221a96 Updated ChangeLog. 2021-11-25 23:36:47 +02:00
Lauri Ojansivu 47540df916 Merge branch 'Emile840-master' 2021-11-25 23:34:28 +02:00
Lauri Ojansivu dbef7e7cd3 Restored ChangeLog. 2021-11-25 23:34:06 +02:00
Martin Filser 4a19790b11 App reconnect link wasn't clickable 2021-11-25 22:33:40 +01:00
Ben0it-T 533eb41249 Show or hide members and assignee(s) on minicard 2021-11-25 22:27:19 +01:00
Lauri Ojansivu f09ea42981 Updated ChangeLog. 2021-11-25 23:25:55 +02:00
Lauri Ojansivu 6290b3b697 Updated ChangeLog. 2021-11-25 23:24:43 +02:00
Lauri Ojansivu 92b6b0064a Merge pull request #4176 from mfilser/label_drag_drop_show_helper_on_sub_popup
Show helper at label drag/drop if label popup opened from card details popup
2021-11-25 23:22:51 +02:00
Emile NDAGIJIMANA 8662fd59fb possibility of adding a custom legal notice page url 2021-11-25 19:31:20 +01:00
Lauri Ojansivu 16bb65f7c7 Docker build script to be executeable.
Thanks to xet7 !
2021-11-25 19:31:20 +01:00
Lauri Ojansivu 44c3449ab2 Fix typo. 2021-11-25 19:31:20 +01:00
Lauri Ojansivu ed13a3b95f v5.79 2021-11-25 19:31:20 +01:00
Lauri Ojansivu 32646fb9be Updated ChangeLog. 2021-11-25 19:31:20 +01:00
Martin Filser 38eccdb95b Fixed label popup at desktop view (add and remove labels)
Fixes: #4156
2021-11-25 19:31:20 +01:00
Lauri Ojansivu 6944a20ba4 Updated translations. 2021-11-25 19:31:20 +01:00
Lauri Ojansivu 2e8323ca6a Updated ChangeLog. 2021-11-25 19:31:20 +01:00
Martin Filser fae4d0be08 Fix label width oversize bug
Happens at Firefox zoom level 90%, probably on Windows...

Fixes: https://github.com/wekan/wekan/pull/4073#issuecomment-971563178
2021-11-25 19:31:20 +01:00
Martin Filser b58e1c0102 Show helper at label drag/drop if label popup opened from card details popup 2021-11-25 17:11:22 +01:00
Emile NDAGIJIMANA f18658c0d2 Fix bug from issue #4173 2021-11-25 16:01:43 +01:00
Lauri Ojansivu 8054f2b002 Docker build script to be executeable.
Thanks to xet7 !
2021-11-25 16:27:07 +02:00
Lauri Ojansivu 5178aade75 Fix typo. 2021-11-25 16:00:42 +02:00
Lauri Ojansivu 6628ae8b5a v5.79 2021-11-25 15:52:24 +02:00
Lauri Ojansivu 7ca0fa626c Updated ChangeLog. 2021-11-25 15:43:56 +02:00
Lauri Ojansivu 0ceff124cc Merge pull request #4170 from mfilser/fix_label_popup_desktop_view_add_remove
Fixed label popup at desktop view (add and remove labels)
2021-11-25 15:42:51 +02:00
Martin Filser 37faa41d97 Fixed label popup at desktop view (add and remove labels)
Fixes: #4156
2021-11-25 06:59:52 +01:00
Lauri Ojansivu fc0630715c Updated translations. 2021-11-25 06:42:06 +02:00
Lauri Ojansivu 9e75a70212 Updated ChangeLog. 2021-11-25 06:37:44 +02:00
Lauri Ojansivu 3d61be028a Merge pull request #4157 from mfilser/fix_label_oversize_bug_firefox_zoom_level_90_percent
Fix label width oversize bug
2021-11-25 06:35:30 +02:00
Martin Filser f9c179e9df Fix label width oversize bug
Happens at Firefox zoom level 90%, probably on Windows...

Fixes: https://github.com/wekan/wekan/pull/4073#issuecomment-971563178
2021-11-17 16:57:23 +01:00
Lauri Ojansivu 2b77a67c03 v5.78 2021-11-17 00:50:25 +02:00
Lauri Ojansivu c6fc172055 Updated ChangeLog. 2021-11-17 00:36:56 +02:00
Lauri Ojansivu 7aafb5e26e Fix typo. 2021-11-17 00:36:42 +02:00
Lauri Ojansivu 02b6df320f Show Nodejs heap stats only at Standalone WeKan.
Not shown at Sandstorm WeKan, because there's a bunch of machine performance data
Sandstorm doesn't expose to apps to prevent side channel attacks.

Thanks to ocdtrekkie and xet7 !

Fixes #4154
2021-11-17 00:26:40 +02:00
Lauri Ojansivu 6d719b8a98 v5.77 2021-11-16 19:12:02 +02:00
Lauri Ojansivu b1b12b05b5 Updated Docker Ubuntu base image.
Thanks to Ubuntu developers!
2021-11-16 19:06:59 +02:00
Lauri Ojansivu 39260bccb3 v5.76 2021-11-16 18:52:18 +02:00
Lauri Ojansivu 5754a886ab Updated translations. 2021-11-16 18:10:50 +02:00
Lauri Ojansivu 624fdea842 Updated ChangeLog. 2021-11-16 18:07:05 +02:00
Lauri Ojansivu 1975673152 Merge pull request #4153 from marook/multi-selection-panel-opening
improve multi selection sidebar opening and closing
2021-11-16 18:05:52 +02:00
Markus Peröbner 1d523c1ede improve multi selection sidebar opening and closing
this patch changes the open/close behavior of the sidebar when
activating and deactiviting the multi selection.

in the past activating the multi selection on a mini screen will hide
the cards and show the multi selection sidebar on the whole screen. a
user would need to hide the sidebar in order to select multiple
cards. this patch changes this behavior. the sidebar will no longer be
opened if the user is on a mini screen while activating the multi
selection.

in the past deactivating the multi selection would show the default
sidebar instead of the multi selection sidebar. after this patch the
default sidebar will only be shown if the sidebar was visible before
activating the multi selection.
2021-11-16 08:19:21 +01:00
Lauri Ojansivu 407632eed0 Updated ChangeLog. 2021-11-15 20:15:43 +02:00
Lauri Ojansivu 7518d93feb Merge pull request #4152 from mfilser/fix_list_add_to_bottom
Fix list adding to bottom
2021-11-15 20:14:41 +02:00
Martin Filser 0fb6b6e519 List add always at the end of all lists
- if a sort number is higher than the count of lists, the list wasn't
  added at the end
2021-11-15 18:56:12 +01:00
Martin Filser fa9641ba7b Fix adding list at mobile view, every list had a sort number 1
- html class list doesn't exist at mobile view. class js-list exists on
  mobile and desktop view
2021-11-15 18:56:12 +01:00
Lauri Ojansivu 6d855967fe Updated ChangeLog. 2021-11-15 19:42:20 +02:00
Lauri Ojansivu 17d90684bb Part 2: Added remainin of Account configuration of option loginExpirationInDays for Snap.
Thanks to xet7 !
2021-11-15 19:40:41 +02:00
Lauri Ojansivu d6094c3476 Updated ChangeLog. 2021-11-15 19:26:22 +02:00
Lauri Ojansivu 4eca4eeddc Merge pull request #4150 from mfilser/account_option_loginExpirationInDays
Account configuration of option loginExpirationInDays is now possible
2021-11-15 19:24:02 +02:00
Lauri Ojansivu b392e515ca Updated translations. 2021-11-15 19:20:31 +02:00
Lauri Ojansivu f25ed7fcfc Updated translations. 2021-11-15 18:22:34 +02:00
Lauri Ojansivu b7928a9538 Updated translations. 2021-11-15 18:17:27 +02:00
Lauri Ojansivu d523a897f6 Updated translations. 2021-11-15 16:57:41 +02:00
Lauri Ojansivu a67e3754ab Updated translations. 2021-11-15 16:35:59 +02:00
Martin Filser 80319b0038 Account configuration of option loginExpirationInDays is now possible 2021-11-15 14:21:09 +01:00
Lauri Ojansivu becb81f04a Updated ChangeLog. 2021-11-15 13:58:54 +02:00
Lauri Ojansivu f50f876cab Merge branch 'master' of github.com:wekan/wekan 2021-11-15 13:58:06 +02:00
Lauri Ojansivu bd7bbd18c5 Updated translations. 2021-11-15 13:57:53 +02:00
Lauri Ojansivu d8218091c6 Merge pull request #4149 from mfilser/boards_view_drag_handles_if_configured
Boards view has now drag handles at desktop view if drag handles are enabled
2021-11-15 13:57:40 +02:00
Martin Filser ba3fa2aaea Boards view has now drag handles at desktop view if drag handles are enabled 2021-11-15 12:51:11 +01:00
Lauri Ojansivu 0ab86c22af Updated ChangeLog. 2021-11-15 13:42:28 +02:00
Lauri Ojansivu 0ed029e706 Merge pull request #4148 from mfilser/fix_list_placeholder_visible_mobile_view
Fixed placeholder was not visible at list view (mobile view)
2021-11-15 13:41:30 +02:00
Martin Filser c5a7cf56bc Fixed placeholder was not visible at list view (mobile view) 2021-11-15 12:35:25 +01:00
Lauri Ojansivu 9f25938b51 Updated ChangeLog. 2021-11-15 13:29:21 +02:00
Lauri Ojansivu e0d92c7f64 Updated translations. 2021-11-15 13:16:21 +02:00
Lauri Ojansivu 48ecbf5017 Merge pull request #4147 from mfilser/app_reconnect_with_link
App reconnect is now possible if the connection was interrupted
2021-11-15 13:15:24 +02:00
Martin Filser 8fe2e073c5 App reconnect is now possible if the connection was interrupted and takes to long for automatic reconnect 2021-11-15 12:08:43 +01:00
Lauri Ojansivu a8c8970192 Updated ChangeLog. 2021-11-15 13:06:04 +02:00
Lauri Ojansivu e8e5616832 Merge pull request #4146 from mfilser/fix_trim_whitespace_at_multiline_editor_fields
Fixed trim whitespace at multiline editor fields
2021-11-15 13:05:04 +02:00
Lauri Ojansivu abe5ca752e Updated ChangeLog. 2021-11-15 13:04:34 +02:00
Lauri Ojansivu db84c73337 Updated translations. 2021-11-15 13:01:06 +02:00
Martin Filser a4ac34d8aa Fixed trim whitespace at multiline editor fields
- before whitespaces were only trimmed if 2 or more whitespaces were at
  the end of the line
- now every whitespace is trimmed at the end of each line
2021-11-15 11:58:08 +01:00
Lauri Ojansivu e47f26a390 Merge pull request #4143 from Ben0it-T/master
[Adding organisations to the board] Layout improvement
2021-11-15 12:58:04 +02:00
Lauri Ojansivu 1eca7c9996 Updated ChangeLog. 2021-11-15 12:57:16 +02:00
Lauri Ojansivu 25024fbe6b Merge pull request #4142 from mfilser/global_search_load_card_details
Global search load card details
2021-11-15 12:54:46 +02:00
Ben0it-T 1f6d96c873 [Adding organisations to the board] Layout improvement 2021-11-13 09:16:39 +01:00
Martin Filser 8ec4e1a7d0 Card Details Popup is now modifiable if the user has the permissions 2021-11-12 17:45:52 +01:00
Martin Filser f4a3363f6f replace Session key popupCard with popupCardId (better meaning of what the variable contains) 2021-11-12 17:45:52 +01:00
Martin Filser 4733afe4eb Global Search Card Popup has now every data if the search was opened from another board
- the global search only returns the card details data needed to display
  the search results, but for opening the popup card details a lot more
  information is needed. It already worked if the data was already in the
  minimongo, but if not, nearly nothing was displayed
2021-11-12 17:45:52 +01:00
Martin Filser 72ddd66495 Global Search Card Detail Popup shows now the description too 2021-11-12 17:45:52 +01:00
Lauri Ojansivu a09e961110 Updated ChangeLog. 2021-11-12 08:54:24 +02:00
Lauri Ojansivu 49c4dd8b14 Added release scripts for building local Docker images and pushing them to Quay.io and Docker Hub.
Thanks to xet7 !
2021-11-12 08:52:22 +02:00
Lauri Ojansivu 65f0cab730 v5.75 2021-11-12 08:01:28 +02:00
Lauri Ojansivu b72fae24ca Updated translations. 2021-11-12 07:48:51 +02:00
Lauri Ojansivu 228c78c248 Updated ChangeLog. 2021-11-12 07:46:29 +02:00
Lauri Ojansivu 73fdc7ff79 Merge pull request #4140 from mfilser/checklist_and_items_drag_drop_scrollable_mobile_view
Checklist and items drag drop scrollable mobile view
2021-11-12 07:45:38 +02:00
Martin Filser cbf91c1869 Checklist and Checklist-Item have now a bigger area to click (easier clickable) 2021-11-11 21:04:22 +01:00
Martin Filser 70777cfce8 Checklist and Checklist-Items on mobile view scroll the screen when drag/drop them to top/bottom 2021-11-11 20:59:58 +01:00
Martin Filser f74fab64b6 Checklist and Checklist-Item editing closes all other inlined forms 2021-11-11 20:59:58 +01:00
Lauri Ojansivu 12839fd929 Updated ChangeLog. 2021-11-11 21:57:51 +02:00
Lauri Ojansivu b903750f45 Merge pull request #4139 from mfilser/comment_edit_cancel_button
Comment edit has now a cancel button
2021-11-11 21:56:22 +02:00
Martin Filser f2d2982a76 Comment edit has now a cancel button 2021-11-11 20:52:38 +01:00
Lauri Ojansivu efb24c2d25 Updated ChangeLog. 2021-11-11 21:50:22 +02:00
Lauri Ojansivu 5fd7407207 Merge pull request #4138 from mfilser/card_popup_close_color_remove-move_bottom-delete
Card popup close color remove move bottom delete
2021-11-11 21:48:12 +02:00
Lauri Ojansivu 0a77266f6e Updated ChangeLog. 2021-11-11 21:47:24 +02:00
Lauri Ojansivu 936d9fe306 Updated release scripts. 2021-11-11 21:45:36 +02:00
Lauri Ojansivu 810c3c81db v5.74 2021-11-11 20:34:35 +02:00
Martin Filser 67f614ffb0 Card delete closes now the popup after delete confirmation 2021-11-11 19:32:58 +01:00
Martin Filser 7f7ef0a914 Move card to bottom - close Popup / back to previous popup 2021-11-11 19:32:58 +01:00
Martin Filser 4acf3738ca Card color remove closes now the popup 2021-11-11 19:32:58 +01:00
Lauri Ojansivu f370f749b9 Updated translations. 2021-11-11 20:31:39 +02:00
Lauri Ojansivu f518971520 Updated ChangeLog. 2021-11-11 20:28:42 +02:00
Lauri Ojansivu c5eca7f3ec Merge pull request #4137 from mfilser/docker_fix_failed_export_and_timezone
Docker fix failed export and timezone
2021-11-11 20:25:21 +02:00
Martin Filser 9868b3b6af docker-compose, remove /etc/timezone because it's not available on some Linux systems
See discussion #4131
2021-11-11 19:13:31 +01:00
Martin Filser f9c9f2a453 Docker: torodb-postgresql has now shared volumes of /etc/localtime and /etc/timezone too 2021-11-11 19:13:31 +01:00
Martin Filser 206828b440 Docker: Fix "Failed export and unexpected container restart"
- Fixes #4089

Also this was broken too:

docker-compose exec wekandb apt-get update

because /tmp didn't exist, it was introduced by this commit:
1322c1fbbd
2021-11-11 19:13:31 +01:00
Lauri Ojansivu 343dcb4995 v5.73 2021-11-11 20:09:52 +02:00
Lauri Ojansivu 546134f6cd Updated ChangeLog. 2021-11-11 20:06:28 +02:00
Lauri Ojansivu ac7ef4d4cd Updated dependencies.
Thanks to developers of dependencies!
2021-11-11 20:05:13 +02:00
Lauri Ojansivu eb1d3b6101 Updated ChangeLog. 2021-11-11 19:38:07 +02:00
Lauri Ojansivu 6151382c07 Fix typos. 2021-11-11 19:36:49 +02:00
Lauri Ojansivu 1516be030e Merge pull request #4135 from Ben0it-T/master
Fix: Impossible to export board to excel where title exceeding 31 chars
2021-11-11 19:34:32 +02:00
Lauri Ojansivu 5eb7ce09b2 Updated translations. 2021-11-11 19:32:31 +02:00
Lauri Ojansivu d791914ddd Updated ChangeLog. 2021-11-11 19:32:18 +02:00
Lauri Ojansivu fb09efd1a4 Merge branch 'Emile840-master' 2021-11-11 19:25:42 +02:00
Lauri Ojansivu 2d749e13e0 Fixed typos. 2021-11-11 19:25:19 +02:00
Lauri Ojansivu 712ae37400 Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-11-11 19:19:12 +02:00
Lauri Ojansivu 92ba5f8874 Updated ChangeLog. 2021-11-11 19:17:43 +02:00
Lauri Ojansivu 8cf392e1ea Merge branch 'mfilser-card_detail_popup_load_comments_from_board_search' 2021-11-11 19:15:35 +02:00
Lauri Ojansivu ea01c5c1b9 Disable console.log 2021-11-11 19:12:25 +02:00
Lauri Ojansivu 0991e54c22 Fixed typo. 2021-11-11 19:04:17 +02:00
Ben0it-T 08a01c6d2c Fix: Impossible to export board to excel where title exceeding 31 chars 2021-11-11 13:16:17 +01:00
Emile840 95cf54836f Merge branch 'master' into master 2021-11-10 16:56:42 +01:00
Emile NDAGIJIMANA 81f5b6a428 Fix this bug, if OIDC button text was customized, the default text will be added if a user click on 'Forgot your password' and valid or ckick on 'Register' 2021-11-10 16:48:47 +01:00
Martin Filser f1b49e05eb Card detail popup loads now comments if opened from board search 2021-11-09 12:55:10 +01:00
Lauri Ojansivu fdd23e2f54 Merge branch 'master' of github.com:wekan/wekan 2021-11-09 13:53:33 +02:00
Lauri Ojansivu f906153b47 Updated ChangeLog. 2021-11-09 13:53:24 +02:00
Lauri Ojansivu 34fa83a461 Merge pull request #4122 from mfilser/sidebar_search_card_popup_only_mobile_view
Sidebar search only opens the card as popup on mobile view
2021-11-09 13:52:39 +02:00
Martin Filser ddc229dabe Sidebar search only opens the card as popup on mobile view 2021-11-08 15:06:29 +01:00
Lauri Ojansivu c4d42d86a2 Updated translations. 2021-11-08 13:14:20 +02:00
Lauri Ojansivu c2bd4d1cee Updated translations. 2021-11-07 15:12:20 +02:00
Lauri Ojansivu 4fb4deacf9 Updated ChangeLog. 2021-11-07 02:04:14 +02:00
Lauri Ojansivu ce5f2a19a5 Updated translations. 2021-11-07 01:29:46 +02:00
Lauri Ojansivu 05a1588bac Updated translations. 2021-11-07 01:14:34 +02:00
Lauri Ojansivu e21363d37e Merge branch 'Ben0it-T-master' 2021-11-07 00:48:43 +02:00
Lauri Ojansivu d8dad479fd Fixes typos. 2021-11-07 00:47:53 +02:00
Ben0it-T d04e9bbabd Add NodeJS statistics - part 2 - memory usage 2021-11-06 22:49:41 +01:00
Ben0it-T 790a82c4b1 Add NodeJS statistics - part 1 - heap statistics 2021-11-06 21:37:18 +01:00
Lauri Ojansivu 26826b6120 Updated translations. 2021-11-06 01:42:23 +02:00
Lauri Ojansivu f48f67340e Updated ChangeLog. 2021-11-06 01:39:42 +02:00
Lauri Ojansivu cf6713a31c Updated dependencies.
Thanks to developers of dependencies !
2021-11-06 01:38:15 +02:00
Lauri Ojansivu 30ef5c1bf6 Updated ChangeLog. 2021-11-06 01:37:48 +02:00
Lauri Ojansivu 1859f58ad9 Merge pull request #4117 from Ben0it-T/master
Card Details, add missing hr line (before Activity title)
2021-11-06 01:35:32 +02:00
Ben0it-T 3bc2862ae2 Card Details, add missing hr line (before Activity title) 2021-11-04 23:05:56 +01:00
Lauri Ojansivu 3ce1e8220b v5.72 2021-10-31 22:46:17 +02:00
Lauri Ojansivu 2d9c8740b4 Updated translations. 2021-10-31 21:12:38 +02:00
Lauri Ojansivu 502bfcb97d Added missing translation.
Thansk to Ben0it-T !

Related https://github.com/wekan/wekan/commit/b51152fca4bf6c7d2bc6b30204899b5d5fe361fd#commitcomment-59009965
2021-10-31 21:07:48 +02:00
Lauri Ojansivu 2bd23d9525 Updated translations. 2021-10-31 19:32:40 +02:00
Lauri Ojansivu a59a242c1e Fix typo. 2021-10-31 19:26:57 +02:00
Lauri Ojansivu 9530f38791 Updated ChangeLog. 2021-10-31 19:25:27 +02:00
Lauri Ojansivu c136033c1f Rename "Domaine" to "Domain" that is more like English.
Thanks to xet7 !
2021-10-31 19:23:51 +02:00
Lauri Ojansivu 17a5505eda Updated translations. 2021-10-31 19:19:44 +02:00
Lauri Ojansivu 8abea470fb Merge pull request #4109 from mfilser/minicard_no_text_one_line
Card labels on minicard withouth text are now at the same line again
2021-10-31 19:11:10 +02:00
Lauri Ojansivu 1d8ff8398c Updated ChangeLog. 2021-10-31 19:10:54 +02:00
Lauri Ojansivu 0af41dc19c Updated ChangeLog. 2021-10-31 19:09:24 +02:00
Lauri Ojansivu 21de4a2ca0 Merge pull request #4108 from Ben0it-T/master
Try to fix : Filter List by Title - Hide empty lists in Swimlane view
2021-10-31 19:08:02 +02:00
Lauri Ojansivu ed289451f6 Updated ChangeLog. 2021-10-31 19:07:12 +02:00
Lauri Ojansivu 045502c9e9 Restore original version number. 2021-10-31 19:01:53 +02:00
Lauri Ojansivu 405411f97f Merge branch 'Emile840-master' 2021-10-31 19:00:47 +02:00
Lauri Ojansivu 00c3092f44 Fix typos.
Thanks to xet7 !
2021-10-31 18:59:40 +02:00
Martin Filser e3d52169d7 Card labels on minicard withouth text are now at the same line again
Fixes: https://github.com/wekan/wekan/pull/4073#pullrequestreview-793677680
2021-10-31 14:59:28 +01:00
Ben0it-T be5b6245e3 Try to fix : Showing archived lists in Swimlane view 2021-10-30 16:33:18 +02:00
Ben0it-T 705e6d7e3a Add icon to Filter List by Title 2021-10-30 09:25:39 +02:00
Ben0it-T 6c83cb5b44 Try to fix : Filter List by Title - prevent showing only the list title - Hiding empty lists in Swimlane view 2021-10-30 00:58:57 +02:00
Emile NDAGIJIMANA b51152fca4 Add a possibility for non admin users who have email on a given domain name (in Admin panel settings) to send an invitation for inscription 2021-10-29 18:43:44 +02:00
Emile NDAGIJIMANA 344094ec18 conflit resolution 2021-10-29 18:41:28 +02:00
Lauri Ojansivu 89a7bb8bc8 v5.71 2021-10-29 11:02:41 +03:00
Lauri Ojansivu e762465e09 Updated translations. 2021-10-29 10:50:34 +03:00
Lauri Ojansivu 7d42b7eaf0 Updated translations. 2021-10-29 03:45:21 +03:00
Lauri Ojansivu 4106aab659 Updated ChangeLog. 2021-10-29 03:34:15 +03:00
Lauri Ojansivu df2a2aae1d Updated dependencies.
Thanks to developers of dependencies !
2021-10-29 03:32:36 +03:00
Lauri Ojansivu fbcafdbd02 Updated ChangeLog. 2021-10-29 03:28:18 +03:00
Lauri Ojansivu 7cc35970a8 Update GitHub issue template. Part 2. 2021-10-29 03:27:15 +03:00
Lauri Ojansivu 123654008f Updated translations. 2021-10-29 03:18:10 +03:00
Lauri Ojansivu 711182ef8a Updated ChangeLog. 2021-10-29 03:17:52 +03:00
Lauri Ojansivu 46a5eec7d2 Add info about upgrades to GitHub issue template.
Thanks to xet7 !
2021-10-29 03:16:26 +03:00
Lauri Ojansivu a42c132306 Update translations. 2021-10-29 02:55:19 +03:00
Lauri Ojansivu be8a3191d1 Updated translations. 2021-10-29 02:51:14 +03:00
Lauri Ojansivu 157f16a1d4 Updated ChangeLog. 2021-10-29 02:47:25 +03:00
Lauri Ojansivu 803c949c8d Merge pull request #4105 from Ben0it-T/master
Fix : Filter List by Card Title (#4066)
2021-10-29 02:44:33 +03:00
Ben0it-T e64bc38932 Fix : Filter List by Card Title 2021-10-28 22:45:44 +02:00
Lauri Ojansivu f1d96fcef8 v5.70 2021-10-28 16:20:36 +03:00
Lauri Ojansivu 5934b7a4a2 Updated translations. 2021-10-28 16:08:10 +03:00
Lauri Ojansivu 245d6dc96d Fix typo. 2021-10-28 16:05:04 +03:00
Lauri Ojansivu 1941ee6af5 Updated ChangeLog. 2021-10-28 16:04:30 +03:00
Lauri Ojansivu e3292dd562 Part 2: Docker: Try to fix "Failed export and unexpected container restart". Added timezone and localtime.
Thanks to akitzing, mfilser and xet7 !

Fixes #4089
2021-10-28 16:01:45 +03:00
Lauri Ojansivu ec33d0b34f Docker: Try to fix "Failed export and unexpected container restart". Added timezone and localtime.
Thanks to akitzing, mfilser and xet7 !

Fixes #4089
2021-10-28 15:48:48 +03:00
Lauri Ojansivu 5add2aaea6 Delete not needed files. 2021-10-28 15:48:25 +03:00
Lauri Ojansivu 50a849fccd Merge pull request #4103 from Emile840/master
fix bug regarding #4083 (last version add default display:none to checkbox)
2021-10-28 15:07:14 +03:00
Emile NDAGIJIMANA ef53ade32e fix bug regarding #4083 (last version add defaut display:none checkbox) 2021-10-28 13:56:54 +02:00
Lauri Ojansivu 3ee2156399 v5.69 2021-10-28 14:08:32 +03:00
Lauri Ojansivu 90cd26e78e Updated ChangeLog. 2021-10-28 14:00:35 +03:00
Lauri Ojansivu 4c9d10f7a7 Merge pull request #4101 from mfilser/popup_fixes_archive_cards_attachement_etc
Popup fixes: Archive cards, upload attachements etc
2021-10-28 13:54:44 +03:00
Martin Filser a686a18809 Fix: Card color setting reloaded the board (hotfix)
- There is another issue why the board get's reloaded again. If i comment
  out the whole events() block so the card color is not saved, the boards
  get reloaded too ...
2021-10-28 12:41:12 +02:00
Martin Filser c7ab0403a6 Card watching closes now the popup after confirmation 2021-10-28 12:40:18 +02:00
Martin Filser f90fb28483 Card archive closes now the popup after confirmation 2021-10-28 12:40:18 +02:00
Martin Filser fecb9cdb66 Popup#afterConfirm popup broke features like "Archiv Cards", "Upload Attachements" and so on -> fixed 2021-10-28 12:40:18 +02:00
Lauri Ojansivu 66df3cc2ee Updated ChangeLog. 2021-10-28 13:09:09 +03:00
Lauri Ojansivu d9adce7b67 Fix Docs: Only MAIL_URL and MAIL_FROM for email settings. Not Admin Panel anymore.
Thanks to niklasdahlheimer !

Fixes #4090
2021-10-28 13:06:43 +03:00
Emile NDAGIJIMANA 6f39a3cf1c transactions not commited 2021-10-28 11:28:33 +02:00
Emile NDAGIJIMANA f840d26faf [Adding team to the board] some meaningfuly texts on buttons 2021-10-28 11:27:22 +02:00
Lauri Ojansivu dfd5acea97 Updated ChangeLog. 2021-10-27 23:40:21 +03:00
Lauri Ojansivu 5411113544 Updated Docker base image to Ubuntu 21.10 Impish.
Thanks to Ubuntu developers!
2021-10-27 23:37:30 +03:00
Lauri Ojansivu d1eb6f2355 v5.68 2021-10-27 22:43:36 +03:00
Lauri Ojansivu aed1e71094 Updated ChangeLog. 2021-10-27 22:20:04 +03:00
Lauri Ojansivu 46f6d1e989 Merge pull request #4087 from mfilser/fix_labels_desktop_view_add_and_delete
Fix labels desktop view add and delete
2021-10-27 22:19:01 +03:00
Martin Filser e9c1b2b2c4 Fix: Labels on desktop view can be added/deleted again 2021-10-27 17:29:11 +02:00
Martin Filser 94f8fb2393 Fix: Labels at desktop view with enabled drag handles were sortable 2021-10-27 17:29:11 +02:00
Martin Filser 2055d916e9 Labels/Drag handles on desktop view with drag handles were too long 2021-10-27 17:29:11 +02:00
Lauri Ojansivu 70dbd1518d Updated ChangeLog. 2021-10-27 16:44:47 +03:00
Lauri Ojansivu 3db3a5bad9 Merge pull request #4084 from mfilser/labels_drag_drop
Adding drag/drop to labels
2021-10-27 16:21:43 +03:00
Lauri Ojansivu b8a41406f5 v5.67 2021-10-27 09:42:11 +03:00
Martin Filser c8b8fb83dc Labels drag/drop 2021-10-27 08:02:46 +02:00
Lauri Ojansivu cb9b8d4f2b Fix typo.
Thanks to xet7 !
2021-10-27 08:57:08 +03:00
Lauri Ojansivu 69ce16192d v5.66 2021-10-27 08:52:32 +03:00
Lauri Ojansivu 46efd27079 Updated translations. 2021-10-27 08:44:06 +03:00
Lauri Ojansivu 141e866719 Updated ChangeLog. 2021-10-27 08:41:04 +03:00
Lauri Ojansivu 4e7f1a9937 Merge pull request #4083 from Emile840/master
Add a possibility of selecting displayed users in admin panel
2021-10-27 08:39:54 +03:00
Lauri Ojansivu 3e7fee8fae Updated ChangeLog. 2021-10-27 08:39:28 +03:00
Lauri Ojansivu b09e5b2680 Merge pull request #4082 from mfilser/board_search_remove_limit
Board search remove limit
2021-10-27 08:37:31 +03:00
Emile NDAGIJIMANA fb00869e49 Add a possibility of selecting displayed users in admin panel 2021-10-26 17:31:23 +02:00
Martin Filser 4521d5c10d Search cards, dont't search on empty search term
- otherwise all cards / lists are returned, and at big boards it will
  take a long time to load all cards / lists
2021-10-26 12:48:47 +02:00
Martin Filser 5eb4cff991 Board search, remove limit of 10 lists 2021-10-26 12:48:47 +02:00
Martin Filser 20415b881c Board search, removed limit of 10 cards 2021-10-26 12:48:47 +02:00
Lauri Ojansivu 90b0a93547 Updated ChangeLog. 2021-10-26 01:53:09 +03:00
Lauri Ojansivu f67a174c4a Re-enables custom schemes auto linking.
Thanks to chrisi51 !

Related https://github.com/wekan/wekan/pull/4059
2021-10-26 01:50:28 +03:00
Lauri Ojansivu 8224410e0c Updated ChangeLog. 2021-10-25 23:56:33 +03:00
Lauri Ojansivu 7f78106211 Merge pull request #4079 from mfilser/minicard_label_popup
Minicard label popup
2021-10-25 23:54:46 +03:00
Martin Filser 0025212b3e Minicard, label popup only opened if a label is clicked 2021-10-25 22:39:23 +02:00
Martin Filser d79a35ea82 Minicard, label popup added 2021-10-25 22:39:23 +02:00
Lauri Ojansivu ce829f586b Updated translations. 2021-10-25 23:30:19 +03:00
Lauri Ojansivu a3d41c560b Revert "Re-enables custom schemes auto linking" https://github.com/wekan/wekan/pull/4059 because Markdown links did not work, commented out some code.
Thanks to mfilser and xet7 !

Related https://github.com/wekan/wekan/pull/4059
2021-10-25 23:06:13 +03:00
Lauri Ojansivu 5af4386a0f Updated translations. 2021-10-25 21:31:28 +03:00
Lauri Ojansivu c08c9543af Updated ChangeLog. 2021-10-25 21:21:17 +03:00
Lauri Ojansivu b25eeb334c Merge pull request #4078 from Ben0it-T/master
Fix : Filter List by Card Title - see #4066 comments
2021-10-25 21:20:02 +03:00
Lauri Ojansivu 5c2a44e6fe Updated ChangeLog. 2021-10-25 21:18:50 +03:00
Lauri Ojansivu 4c0d382fd8 Merge pull request #4077 from mfilser/comment_delete_confirmation_popup
Comment, added confirm delete popup
2021-10-25 21:17:51 +03:00
Ben0it-T 8550213146 Fix : Filter List by Card Title - see #4066 comments 2021-10-25 20:05:07 +02:00
Martin Filser 1a09b75974 Comment, added confirm delete popup 2021-10-25 20:00:17 +02:00
Lauri Ojansivu ea73e4ec7d Updated ChangeLog. 2021-10-25 20:44:20 +03:00
Lauri Ojansivu 7e45e0676a Merge pull request #4076 from mfilser/board_view_sort_cards_mobile_view
Board View, sort cards button also in mobile view
2021-10-25 20:43:27 +03:00
Martin Filser 6f09987b07 Board View, sort cards also in mobile view 2021-10-25 18:40:19 +02:00
Lauri Ojansivu a09b7a4002 Updated ChangeLog. 2021-10-25 18:53:24 +03:00
Lauri Ojansivu 8a51e271a2 Merge pull request #4075 from mfilser/card_dates_remove
Card dates, if deleted rules didn't apply on "unset date fields"
2021-10-25 18:50:27 +03:00
Martin Filser 53c827e134 Card dates, if deleted rules didn't apply on "unset date fields" 2021-10-25 17:37:19 +02:00
Lauri Ojansivu bcc17127a9 Updated ChangeLog. 2021-10-25 18:04:06 +03:00
Lauri Ojansivu 18ff4bee2d Merge pull request #4074 from mfilser/global_search_checklistitems_and_customFields_boolean
Global search checklistitems and custom fields boolean
2021-10-25 18:01:10 +03:00
Lauri Ojansivu 71068cf13e Updated ChangeLog. 2021-10-25 17:56:54 +03:00
Lauri Ojansivu 2666b30ba9 Added npm publish script for releases.
Thanks to xet7 !
2021-10-25 17:55:41 +03:00
Lauri Ojansivu 7a9ed24127 Updated ChangeLog. 2021-10-25 17:52:55 +03:00
Lauri Ojansivu 156c0b5d4d Updated dependencies.
Thanks to developers of dependencies!
2021-10-25 17:50:57 +03:00
Martin Filser e5a31e7f99 Global search, boolean custom fields are searched too
Fixes: #4035
2021-10-25 14:45:01 +02:00
Martin Filser ccc0b3bcf9 Global Search, Checklist-Items are searched now too 2021-10-25 14:45:01 +02:00
Lauri Ojansivu 44f6cc978d Updated ChangeLog. 2021-10-25 15:43:48 +03:00
Lauri Ojansivu c07646d13d Updated ChangeLog. 2021-10-25 15:40:36 +03:00
Lauri Ojansivu e20ca04fab Fix typos. 2021-10-25 15:39:26 +03:00
Lauri Ojansivu f14e710ac0 Updated dependencies.
Thanks to developers of dependencies!
2021-10-25 15:39:00 +03:00
Lauri Ojansivu 5546f6aa17 Merge branch 'chrisi51-master' 2021-10-25 15:26:48 +03:00
Lauri Ojansivu 9cfbd7b37d Merge branch 'master' of https://github.com/chrisi51/wekan into chrisi51-master 2021-10-25 15:26:12 +03:00
Lauri Ojansivu 62bfa75cf7 Updated ChangeLog. 2021-10-25 15:25:10 +03:00
Lauri Ojansivu fe2a7e207c Merge pull request #4073 from mfilser/labels_wrapped_if_too_long
Labels wrapped if too long
2021-10-25 15:24:13 +03:00
Lauri Ojansivu 1c2d4e5b4c Updated ChangeLog. 2021-10-25 14:47:40 +03:00
Martin Filser 2b33d7890c Labels in Minicard are now centered if the label is wrapped 2021-10-25 13:46:55 +02:00
Martin Filser e8c9222283 Labels in Card Details are now centered if the label is wrapped 2021-10-25 13:46:51 +02:00
Lauri Ojansivu a62a177fb1 Comment out slowing Search All Boards logs in console.
Thanks to mfilser and xet7 !

Fixes #4072
2021-10-25 14:43:56 +03:00
Martin Filser e954df4d8e Labels, wrap long text
CSS initial:
https://stackoverflow.com/questions/15901030/reset-remove-css-styles-for-element-only/15903168#15903168
2021-10-25 13:43:24 +02:00
Lauri Ojansivu d0a0c74fd9 Updated ChangeLog. 2021-10-25 14:40:34 +03:00
Lauri Ojansivu 552e99d460 Merge pull request #4071 from mfilser/card_popup_search_and_global_search
Card popup search and global search
2021-10-25 14:39:06 +03:00
Martin Filser ce30c7e1b7 Card Details, show card link in mobile view 2021-10-25 12:53:04 +02:00
Martin Filser 876d78eec4 Card Details Popup, Checklist-Items are now displayed if opened from Global Search 2021-10-25 12:53:04 +02:00
Martin Filser 0313e21ca1 Fix, move to top now works after moving the card (card details action popup) 2021-10-25 12:53:04 +02:00
Martin Filser e6f94c9d16 Move card to top - close Popup / back to previous popup 2021-10-25 12:53:04 +02:00
Martin Filser cdc4be3a13 Card Details Popup in Desktop View has (for now) no maximize button 2021-10-25 12:53:04 +02:00
Martin Filser 4131dd89d4 Global search open the minicard as Popup 2021-10-25 12:53:04 +02:00
Martin Filser 4936e580fd Board search open the minicard as Popup 2021-10-25 12:53:04 +02:00
Martin Filser b9250e4be4 Use Popup.back() instead of Popup.close() to get no conflicts if a Popup is opened as "Sub Popup"
- .back() is also .close() if there is no "popup layer" left
2021-10-25 12:53:04 +02:00
Martin Filser a59dfa8fc0 Card Details Popup, every "Sub-Popup" must use .back() instead of .close()
- .close() closes the popup. Until now it was ok, but as the Card
  Details are opened in a popup too, .back() must be used to get the
  same behaviour back
- .back() is also .close() if there is no "popup layer" left
2021-10-25 12:53:04 +02:00
Lauri Ojansivu 2fd2ea72fe Updated ChangeLog. 2021-10-25 13:52:42 +03:00
Lauri Ojansivu a6d3810e19 Merge pull request #4070 from mfilser/card_details_custom_fields_popup
Card details custom fields popup
2021-10-25 13:50:31 +03:00
Martin Filser 5e29c68154 Card Details, add plus button in custom fields section 2021-10-25 12:44:03 +02:00
Martin Filser 6b26b5d62b Card Details, moving the custom field sort switch after the last custom field 2021-10-25 12:44:03 +02:00
Martin Filser 81e617a149 Card Details, hr line occured twice if any date or any user isn't displayed 2021-10-25 12:44:03 +02:00
Lauri Ojansivu 013620c862 Updated ChangeLog. 2021-10-25 13:42:46 +03:00
Lauri Ojansivu 086aa51c2e Merge pull request #4069 from mfilser/fix_boards_not_loading_missing_filter
Boards weren't loaded because of missing filter
2021-10-25 13:41:33 +03:00
Martin Filser 95719cbd24 Boards weren't loaded because of missing filter 2021-10-25 12:32:48 +02:00
Lauri Ojansivu a23c8c263c Updated ChangeLog. 2021-10-25 13:29:33 +03:00
Lauri Ojansivu dfd1155790 Merge pull request #4068 from mfilser/fix_long_textarea_editing
Fix long textarea editing
2021-10-25 13:28:09 +03:00
Martin Filser 3a92cabc3f updated meteor-autosize to version 5.0.1
updated this "git" version:
https://raw.githubusercontent.com/jackmoore/autosize/8fc6a6d6f934bdfa621eb3bac341d34ad9337882/dist/autosize.js
2021-10-25 09:00:36 +02:00
Martin Filser 47446315ad Adding verron:autosize (meteor-autoresize) 2021-10-25 09:00:36 +02:00
Lauri Ojansivu c586a9bb39 Updated translations. 2021-10-25 02:38:52 +03:00
Lauri Ojansivu 4df3416b46 Updated ChangeLog. 2021-10-25 01:39:06 +03:00
Lauri Ojansivu a42a3436cd Merge pull request #4067 from mfilser/add_card_cancel_button
Add card button has now a cancel button
2021-10-25 01:35:16 +03:00
Martin Filser 367823ea5e Add card button has now a cancel button 2021-10-24 15:42:51 +02:00
Lauri Ojansivu ccb5acbe70 Updated ChangeLog. 2021-10-24 14:40:58 +03:00
Lauri Ojansivu b8e0dfa07d Merge pull request #4066 from Ben0it-T/master
Fix : Filter List by Card Title #3594
2021-10-24 14:39:12 +03:00
Lauri Ojansivu a167a1b4f4 Updated ChangeLog. 2021-10-24 14:38:15 +03:00
Lauri Ojansivu c95ccaa5c9 Merge pull request #4065 from mfilser/fix_markdown_header_quick_access
Fix markdown header quick access
2021-10-24 14:37:09 +03:00
Ben0it-T 5b5b8fe427 Fix : Filter List by Card Title #3594 2021-10-23 13:16:33 +02:00
Lauri Ojansivu 31af30175b Updated translations. 2021-10-22 18:10:46 +03:00
Lauri Ojansivu a22aacf29b Updated ChangeLog. 2021-10-21 19:40:48 +03:00
Lauri Ojansivu 6a06522777 Try to fix orphanedAttachments.
Thanks to Madko and xet7 !

Related #2776
2021-10-21 19:39:11 +03:00
Lauri Ojansivu c47b04493a Updated translations. 2021-10-21 19:27:17 +03:00
Martin Filser 6d701cda2e Mobile View quick list access show markdown 2021-10-21 18:24:49 +02:00
Martin Filser 8bb27e2762 Starred boards show markdown at the top starred line (Mobile View)
- Fixes: #4058
2021-10-21 18:24:49 +02:00
Martin Filser 437b62eb97 Starred boards show markdown at the top starred line
- Fixes: #4058
2021-10-21 18:24:49 +02:00
Lauri Ojansivu 88fbdfbb6b Updated ChangeLog. 2021-10-21 19:22:53 +03:00
Lauri Ojansivu 92eb3afa6c Merge pull request #4063 from mfilser/fix_main_scrollbar
Fix main scrollbar
2021-10-21 19:21:37 +03:00
Martin Filser ababeebbf0 Fixed scrollbar, occured twice at home screen (mobile view) 2021-10-21 11:28:32 +02:00
Martin Filser fdb3f83d1f Fixed scrollbar, occured twice at admin panel 2021-10-21 11:28:32 +02:00
Martin Filser a0e6fc4611 Fixed scrollbar, occured twice when opening a card 2021-10-21 11:28:32 +02:00
Lauri Ojansivu 2b62b3aa90 Updated translations. 2021-10-21 12:11:31 +03:00
Lauri Ojansivu 910c0705f7 Updated ChangeLog. 2021-10-21 12:08:42 +03:00
Lauri Ojansivu 35469364b4 Merge pull request #4062 from mfilser/popup_card_details
Popup card details
2021-10-21 12:04:31 +03:00
Martin Filser 2af5e9c209 Card Details Popup, Checklist Drag/Drop works in mobile view again 2021-10-21 09:46:05 +02:00
Martin Filser 21a3749086 Card Details Popup, Checklistitem Drag/Drop works in mobile view again 2021-10-21 09:46:05 +02:00
Martin Filser bd2b8625fb Set popupCard to null in router.js if currentCard is set to null 2021-10-21 09:26:29 +02:00
Martin Filser 7ced602be4 More robust logic if isMiniScreen or isShowDesktopDragHandles 2021-10-20 22:28:49 +02:00
Martin Filser b59e4d8fc7 Swimlade, List drag/drop now works again
happened at commit:
b9178cfcb6 isMiniScreen and showDesktopDragHandles centralized in class Utils
2021-10-20 22:28:49 +02:00
Lauri Ojansivu 9809510782 Updated translations. 2021-10-20 19:43:33 +03:00
Martin Filser ea7136816d Card Details Popup, edit dates now closes not the Popup 2021-10-20 18:41:33 +02:00
Martin Filser 73872202ec Card Details mobile view, copy link contains now the URL/id to the current card 2021-10-20 18:41:33 +02:00
Martin Filser a72f1ae8de Card Details Popup close, list moved to top -> fixed 2021-10-20 18:41:33 +02:00
Martin Filser fdf40f4584 Use Utils#getCurrentCard() everywhere in the code 2021-10-20 18:41:33 +02:00
Martin Filser 7a6cfcb498 Card Details Popup, Labels assign now works 2021-10-20 18:41:33 +02:00
Martin Filser 4994f23134 textarea, remove every whitespace at line end
- whitespaces aren't needed at the end of the line, that's why
  String.trim() is already implemented at input fields
2021-10-20 18:41:33 +02:00
Martin Filser 8c3ce4bb73 Card Details Popup possible on desktop view
- until now a new form in the popup closed the popup itself
2021-10-20 18:41:33 +02:00
Martin Filser 48b2e3dd88 Card Details in the new on mobile view have now the normal view again 2021-10-20 18:41:33 +02:00
Martin Filser bcb5cfb235 Card Details can be opened in a new tab on mobile view 2021-10-20 18:41:33 +02:00
Martin Filser 27213245ef Card Details Popup, Session variable popupCard is deleted on popup close 2021-10-20 18:41:33 +02:00
Martin Filser c07a1412f7 Card Details Popup and Sub-Popup's same look as the desktop view 2021-10-20 18:41:33 +02:00
Martin Filser dae58d11c2 Card Details Popup only opened if not another popup is opened yet
e.g. this Popup's didn't opened:
- card sorting number
- edit received date
2021-10-20 18:41:33 +02:00
Martin Filser fb66b84b58 Card Details, description edit is now saved at popup 2021-10-20 18:41:33 +02:00
Martin Filser 125c84b6b5 Card Details, Ctrl+Enter at description editing raised an error
Console:
Uncaught TypeError: can't access property "click", this.find(...) is null
2021-10-20 18:41:33 +02:00
Martin Filser 5f58ede7e3 Card Details Popup, edit of Checklist, Checklistitems and Description now works
- problem is that if a inlined-form is opened within a popup, the popup
  is closed first
2021-10-20 18:41:30 +02:00
Martin Filser 0f69282eec Card Details Popup, Activities (comments) are now displayed 2021-10-20 18:40:41 +02:00
Martin Filser 24b0613bac Card Details Popup, Checklist is now displayed 2021-10-20 18:40:41 +02:00
Martin Filser 4a87d5f0f3 Card Details Popup, Labels and Checklistitems were too much displayed at the "bottom" 2021-10-20 18:40:41 +02:00
Martin Filser 09b127b648 Card Details as Popup 2021-10-20 18:40:41 +02:00
Martin Filser 4ab290928c minicard, div has no colorClass if not defined 2021-10-20 18:40:41 +02:00
Martin Filser b9178cfcb6 isMiniScreen and showDesktopDragHandles centralized in class Utils
- a lot of same code everywhere in many files, this is against the
  concept "don't repeat yourself"
2021-10-20 18:40:41 +02:00
Lauri Ojansivu cbc6463019 Updated ChangeLog. 2021-10-20 19:39:16 +03:00
Lauri Ojansivu a30fee95bf Merge pull request #4060 from mfilser/popup_sorting_number
Popup sorting number
2021-10-20 19:37:06 +03:00
Martin Filser b1b2d87045 Minicard sort popup, Enter button saves the new sort number 2021-10-20 14:36:21 +02:00
Martin Filser 02896e669a Minicard, sort number can be edited in a popup 2021-10-20 14:36:21 +02:00
Martin Filser df5b76aa87 Card Details sorting, Enter = Save Button press 2021-10-20 14:36:21 +02:00
Christian Hillebrand ea60d5a205 Re-enables custom schemes auto linking 2021-10-20 12:35:01 +02:00
Lauri Ojansivu 02f056851d Try to fix api.py adddcustomfieldtoboard.
Thanks to xet7 !
2021-10-19 08:27:28 +03:00
Lauri Ojansivu d4cbcf1a31 Updated translations. 2021-10-19 07:50:56 +03:00
Lauri Ojansivu 78190d0d7e Updated ChangeLog. 2021-10-18 22:13:18 +03:00
Lauri Ojansivu 05ae1ad56d Merge pull request #4057 from Emile840/master
add full name if exists in email-invite-subject or when tagging someone with '@' while commenting a card
2021-10-18 22:10:52 +03:00
Emile NDAGIJIMANA 5a5a01cf17 [point #3830] Display default weekan logo if there isn't a custom one 2021-10-18 16:58:54 +02:00
Emile NDAGIJIMANA d9329a9e15 add full name if exists in email-invite-subject or when tagging someone with '@' while commenting a card 2021-10-18 15:26:01 +02:00
Lauri Ojansivu 3ea285498f Updated ChangeLog. 2021-10-16 19:09:35 +03:00
Lauri Ojansivu 3921209c9f api.py: Add Custom Fields to Board. Does not work yet, error: Settings must be object.
Thanks to xet7 !
2021-10-16 19:07:36 +03:00
Lauri Ojansivu 05e0aa0304 Updated ChangeLog. 2021-10-16 17:53:12 +03:00
Lauri Ojansivu 5c571ca863 api.py: Info of one Custom Field.
Thanks to xet7 !
2021-10-16 17:51:59 +03:00
Lauri Ojansivu 721e889bee Updated ChangeLog. 2021-10-16 17:43:10 +03:00
Lauri Ojansivu bcf3573131 api.py: List Custom Fields of Board.
Thanks to xet7 !
2021-10-16 17:41:18 +03:00
Lauri Ojansivu 153ce880dd Updated ChangeLog. 2021-10-16 16:52:36 +03:00
Lauri Ojansivu eac102dbbf api.py: Added "List All Public Boards".
Thanks to xet7 !
2021-10-16 16:50:47 +03:00
Lauri Ojansivu d9efdb0b88 Updated translations. 2021-10-16 15:22:53 +03:00
Lauri Ojansivu 3a583a92f9 Updated translations. 2021-10-16 15:19:43 +03:00
Lauri Ojansivu 187e147352 Updated translations. 2021-10-16 14:51:00 +03:00
Lauri Ojansivu 2c9439fd7b Update translations. 2021-10-16 14:49:28 +03:00
Lauri Ojansivu 2cefc55865 Updated translations. 2021-10-15 23:00:25 +03:00
Lauri Ojansivu 74d1e032f2 Updated ChangeLog. 2021-10-15 22:57:01 +03:00
Lauri Ojansivu eb2ec18add Merge pull request #4056 from Ben0it-T/master
Fix : Setting overtime not working #1893
2021-10-15 22:54:14 +03:00
Ben0it-T 3c6915e217 Fix : Setting overtime not working #1893 2021-10-15 21:40:20 +02:00
Lauri Ojansivu 629fa91fa0 Updated ChangeLog. 2021-10-13 19:09:18 +03:00
Lauri Ojansivu 516044f3c7 Merge pull request #4053 from mfilser/fix_infinite_loading_of_public_boards
Fix infinite loading of public boards
2021-10-13 19:06:22 +03:00
Martin Filser a47c0dd512 Infinite cards loading on public boards
Fixes: #4024
2021-10-13 13:44:17 +02:00
Martin Filser 1b06997001 Public boards loaded incompletly
seen at: #4024

Console:
Meteor.user().isBoardAdmin() is undefined
2021-10-13 13:44:17 +02:00
Martin Filser 458ec4c9a5 devcontainer, added cleanup files 2021-10-13 13:44:01 +02:00
Martin Filser f76b466fc4 docker-compose build failed of .devcontainer, folder tests is missing
output of docker-compose build before this change:

+ /home/wekan/.meteor/meteor build --directory /home/wekan/app_build
Errors prevented bundling:
While building the application:
error: Could not resolve meteor.mainModule "tests/main.js" in package.json (os)
error: Could not resolve meteor.mainModule "tests/main.js" in package.json
(web.browser)
error: Could not resolve meteor.mainModule "tests/main.js" in package.json
(web.browser.legacy)

The command '/bin/sh -c set -o xtrace &&     cd /home/wekan/app &&     /home/wekan/.meteor/meteor add standard-minifier-js &&     /home/wekan/.meteor/meteor npm install &&     /home/wekan/.meteor/meteor build --directory /home/wekan/app_build' returned a non-zero code: 1
2021-10-13 13:43:08 +02:00
Martin Filser d7479c742f docker-compose, set localization in docker containers
/etc/localtime and /etc/timezone are used for localization
2021-10-13 13:43:08 +02:00
Lauri Ojansivu b12312f998 Create release.yml 2021-10-12 23:58:35 +03:00
Lauri Ojansivu f8e5565b49 v5.65 2021-10-12 20:22:11 +03:00
Lauri Ojansivu 4a7718820c Updated translations. 2021-10-12 19:36:49 +03:00
Lauri Ojansivu c2d47cfcdb Updated ChangeLog. 2021-10-12 19:25:18 +03:00
Lauri Ojansivu 64fc2e5d8f Updated to Node.js v12.22.7. Thanks to Node.js developers. 2021-10-12 19:23:14 +03:00
Lauri Ojansivu 7c5763439c Updated ChangeLog. 2021-10-12 19:21:52 +03:00
Lauri Ojansivu d39e8bc03a Merge pull request #4052 from Emile840/master
Fix bug "if OIDC button text was customized, the default text will be added if a user click on 'sing in'"
2021-10-12 19:18:27 +03:00
Emile NDAGIJIMANA 6cd59f8ce1 Fix bug 'if OIDC button text was customized, the default text will be added if a user click on sing in' 2021-10-12 17:41:12 +02:00
Lauri Ojansivu 37a3fbf69c Updated translations. 2021-10-10 18:06:57 +03:00
Lauri Ojansivu 684fd8c2c5 Updated ChangeLog. 2021-10-10 12:15:34 +03:00
Lauri Ojansivu d481328b20 Merge pull request #4047 from Ben0it-T/master
Excel Export : fix add comments worksheet (#4045)
2021-10-10 12:10:15 +03:00
Ben0it-T e694c587e5 Excel Export : fix add comments worksheet (#4045) 2021-10-10 10:54:27 +02:00
Lauri Ojansivu 3125cefd41 v5.64 2021-10-09 14:42:03 +03:00
Lauri Ojansivu c27a622289 Update WeKan ® 2021-10-09 14:22:26 +03:00
Lauri Ojansivu 51875dc155 Updated translations. 2021-10-09 14:10:32 +03:00
Lauri Ojansivu f9bdfa54e7 Updated ChangeLog. 2021-10-09 14:04:19 +03:00
Lauri Ojansivu 8fbee23797 Merge pull request #4045 from Ben0it-T/master
Excel Export : add board description, add comments worksheet
2021-10-09 14:02:13 +03:00
Ben0it-T 153e4cc3fa Excel Export : add board description, add comments worksheet 2021-10-09 12:20:34 +02:00
Lauri Ojansivu 5a5d619b89 v5.63 2021-10-07 09:31:38 +03:00
Lauri Ojansivu 97c56baebb Updated ChangeLog. 2021-10-07 08:50:42 +03:00
Lauri Ojansivu 9c99c5c3ae Fixed SMTP by reverting MAIL_SERVICE changes.
Thanks to xet7 !

Fixes #4022,
fixes #4001,
fixes https://github.com/wekan/wekan/discussions/4030
2021-10-07 08:47:10 +03:00
Lauri Ojansivu 28d515436e Updated translations. 2021-10-07 08:46:32 +03:00
Lauri Ojansivu f70ec7f53c Updated translations. 2021-10-05 20:53:50 +03:00
Lauri Ojansivu 74825c099f Merge pull request #4031 from greenhost/allow-custom-kubernetes-labels
Allow setting custom kubernetes labels when using the helm chart
2021-10-05 20:51:00 +03:00
Arie Peterson 966670fe70 Allow setting custom kubernetes labels when using the helm chart 2021-10-05 11:36:24 +02:00
Lauri Ojansivu c406607fd2 v5.62 2021-10-04 18:22:09 +03:00
Lauri Ojansivu e812a3a087 Updated ChangeLog. 2021-10-04 18:14:22 +03:00
Lauri Ojansivu 9e6744d1e3 Added week numbers to dates at card, minicard, Custom Field dates, DatePicker and Calendar. Part 2.
Thanks to xet7 !
2021-10-04 18:13:00 +03:00
Lauri Ojansivu 835e3ef305 Updated translations. 2021-10-04 18:01:43 +03:00
Lauri Ojansivu ac658af462 Updated ChangeLog. 2021-10-04 17:52:23 +03:00
Lauri Ojansivu 6c3fcdcc4c Confirm Archive Card.
Thanks to xet7 !
2021-10-04 17:51:07 +03:00
Lauri Ojansivu 22cbd5097b Updated ChangeLog. 2021-10-04 15:37:27 +03:00
Lauri Ojansivu d06ac09485 Added week numbers to dates at card, minicard, Custom Field dates, DatePicker and Calendar.
Thanks to xet7 !
2021-10-04 15:34:32 +03:00
Lauri Ojansivu 94b67db78a Updated ChangeLog. 2021-10-03 17:17:30 +03:00
Lauri Ojansivu 5536525564 Removed extra quotes.
Thanks to xet7 !
2021-10-03 17:01:44 +03:00
Lauri Ojansivu e6c7463c03 Merge pull request #4028 from Ben0it-T/master
Export CSV, TSV and XLS
2021-10-03 14:33:28 +03:00
Ben0it-T 11bf4c7c07 Fix : export CSV, TSV and XLS translation
Feature : add export CSV with semicolon separator
2021-10-03 09:18:02 +02:00
Lauri Ojansivu bc9c7e5aa4 Updated ChangeLog. 2021-10-01 19:55:07 +03:00
Lauri Ojansivu 9a0f54f4fe Merge pull request #4026 from ilvar/fix-shrink-docker-image-size
Fix: clean up /tmp after Docker build
2021-10-01 19:52:54 +03:00
Lauri Ojansivu 3b6f3c58e1 Updated ChangeLog. 2021-10-01 19:52:08 +03:00
Lauri Ojansivu ff01c2a69f Merge pull request #4025 from ilvar/feature-rules-title-partial-match
Feature: allow word match for rules -> title filter
2021-10-01 19:48:16 +03:00
Arcady Chumachenko 1322c1fbbd Fix: clean up /tmp after Docker build; drastically reduces docker image size 280 -> 180 MB 2021-09-30 21:22:50 +01:00
Arcady Chumachenko 36e2c76456 Feature: allow word match for rules -> title filter; e.g. filter 'Foo' will now match both 'Foo' and 'Foo bar' 2021-09-30 21:19:47 +01:00
Lauri Ojansivu c42a8df65c v5.61 2021-09-25 18:30:24 +03:00
Lauri Ojansivu 01b38bb2e0 Updated translations. 2021-09-25 18:25:21 +03:00
Lauri Ojansivu 9f9a69286c Updated ChangeLog. 2021-09-25 18:20:01 +03:00
Lauri Ojansivu e3a0dea85f Fixed REST API, it shoud work now by Admin user.
Reverted Allow board members to use more of API of Wekan v5.35
https://github.com/wekan/wekan/commit/a719e8fda1f78bcbf9af6e7b4341f8be1d141e90

Thanks to tomhughes.

Fixes #4009,
fixes #2793,
fixes #2790
2021-09-25 18:09:18 +03:00
Lauri Ojansivu 5b5094ced6 Updated translations. 2021-09-23 22:33:11 +03:00
Lauri Ojansivu f5c2557338 Updated translations. 2021-09-22 19:54:13 +03:00
Lauri Ojansivu 802f1599a1 Updated ChangeLog. 2021-09-22 19:51:39 +03:00
Lauri Ojansivu 9781afa17e Merge branch 'Emile840-master' 2021-09-22 19:49:50 +03:00
Lauri Ojansivu 3319602f3f Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-09-22 19:48:30 +03:00
Emile NDAGIJIMANA 8bd2e4f0dd upgrade to wekan 5.60 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 8eaa490664 v5.60 2021-09-22 17:13:48 +02:00
Lauri Ojansivu db54eb87cd Updated translations. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu d1950efdd4 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu cf51ddb32e Update build scripts to install npm from NodeSource, and meteor with npm.
Thanks to Meteor developers!
2021-09-22 17:13:48 +02:00
Lauri Ojansivu 269551ead5 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu ee06e4f6de Toggle opened card Custom Fields layout between Grid and one per row.
Thanks to xet7 !
2021-09-22 17:13:48 +02:00
Lauri Ojansivu 87e9949f33 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 0b02e88ee3 Try to fix Bug: Card number equal to #0 when creating a sub-task from a card.
Thanks to marcungeschikts, olivierlambert and xet7 !

Fixes #3970
2021-09-22 17:13:48 +02:00
Lauri Ojansivu dd58698cef Updated translations. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu f9807bfad8 Updated ChangeLog. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 4f6bd86478 Custom Fields at opened card below each other.
Thanks to xet7 !
2021-09-22 17:13:48 +02:00
Lauri Ojansivu be6ff3782b Updated translations. 2021-09-22 17:13:48 +02:00
Lauri Ojansivu 7ae2360a55 Updated translations. 2021-09-22 17:13:47 +02:00
Emile NDAGIJIMANA 1852e66abd Search by name, userName or email address when adding a new user to a board 2021-09-22 16:55:23 +02:00
Lauri Ojansivu 367b2370a5 v5.60 2021-09-22 17:12:20 +03:00
Lauri Ojansivu 640df0f4a5 Updated translations. 2021-09-22 17:07:38 +03:00
Lauri Ojansivu 37984a6f9a Updated ChangeLog. 2021-09-22 13:16:53 +03:00
Lauri Ojansivu c062621dd5 Update build scripts to install npm from NodeSource, and meteor with npm.
Thanks to Meteor developers!
2021-09-22 13:15:06 +03:00
Lauri Ojansivu 437a2ea0e2 Updated ChangeLog. 2021-09-22 12:17:20 +03:00
Lauri Ojansivu fc2fb9a081 Toggle opened card Custom Fields layout between Grid and one per row.
Thanks to xet7 !
2021-09-22 12:14:42 +03:00
Lauri Ojansivu 41d9ae92e6 Updated ChangeLog. 2021-09-21 22:49:03 +03:00
Lauri Ojansivu 4c659da533 Try to fix Bug: Card number equal to #0 when creating a sub-task from a card.
Thanks to marcungeschikts, olivierlambert and xet7 !

Fixes #3970
2021-09-21 22:46:32 +03:00
Lauri Ojansivu 21a9226c4a Updated translations. 2021-09-21 22:39:08 +03:00
Lauri Ojansivu ee2c167be4 Updated ChangeLog. 2021-09-21 22:10:52 +03:00
Lauri Ojansivu 09b5359c45 Custom Fields at opened card below each other.
Thanks to xet7 !
2021-09-21 22:09:23 +03:00
Lauri Ojansivu e55e8ef000 Updated translations. 2021-09-20 18:29:04 +03:00
Lauri Ojansivu bffd56f5fc Updated translations. 2021-09-20 14:46:30 +03:00
Lauri Ojansivu ac0d7bda1c Updated ChangeLog. 2021-09-18 21:43:19 +03:00
Lauri Ojansivu 2912e541a0 Merge branch 'master' of github.com:wekan/wekan 2021-09-18 21:40:09 +03:00
Lauri Ojansivu 442e6bf983 Updated Docker base image to newer Ubuntu.
Thanks to xet7 !
2021-09-18 21:39:34 +03:00
Lauri Ojansivu 70ba1eca78 Create docker-publish.yml 2021-09-18 20:46:00 +03:00
Lauri Ojansivu e925877ae4 Delete not working workflow 2021-09-18 20:44:25 +03:00
Lauri Ojansivu 0e7cc1ef87 Create docker-publish.yml 2021-09-18 20:41:43 +03:00
Lauri Ojansivu 909b0ef1b7 Updated ChangeLog. 2021-09-17 21:29:22 +03:00
Lauri Ojansivu a573083291 v5.59 2021-09-17 20:39:25 +03:00
Lauri Ojansivu 6a42f738c9 Updated ChangeLog. 2021-09-17 18:34:34 +03:00
Lauri Ojansivu 9bee6ae666 Sum of cards. In Progress. Part 2: Show option for custom field sum only for currency and number fields.
Thanks to xet7 !

Related #3796
2021-09-17 18:30:53 +03:00
Lauri Ojansivu 533af4b39e Updated translations. 2021-09-17 15:48:39 +03:00
Lauri Ojansivu 99a200d0b2 Updated ChangeLog. 2021-09-17 04:28:10 +03:00
Lauri Ojansivu 889ec1339a Try to fix: Can't delete attachment.
Thanks to luistiktok and xet7 !

Fixes #4012
2021-09-17 04:25:57 +03:00
Lauri Ojansivu 0bdc3d04b4 Updated ChangeLog. 2021-09-17 04:19:19 +03:00
Lauri Ojansivu bd9fbedbf9 At card attachments, show play and fullscreen controls for video webm/mp4/ogg, and play controls for audio mp3/ogg.
Thanks to luistiktok and xet7 !

Fixes #4013
2021-09-17 04:16:56 +03:00
Lauri Ojansivu 6c0a958481 Updated translations. 2021-09-16 23:47:40 +03:00
Lauri Ojansivu 45a39ec213 Updated ChangeLog. 2021-09-16 10:38:57 +03:00
Lauri Ojansivu 800304270e Merge pull request #4011 from Emile840/master
[Admin panel / Settings / Layout] Customize OIDC button text
2021-09-16 10:19:39 +03:00
Emile NDAGIJIMANA 9defed2680 [Admin panel / Settings / Layout] Customize OIDC button text 2021-09-15 18:35:09 +02:00
Lauri Ojansivu 7be9d7ff49 Updated ChangeLog. 2021-09-13 22:06:25 +03:00
Lauri Ojansivu 287abe7640 Merge branch 'Ben0it-T-master' 2021-09-12 16:47:18 +03:00
Ben0it-T 262df6c4a0 Fix : Linked card cannot change date #2930 2021-09-12 11:22:15 +02:00
Lauri Ojansivu 10e3d963ef Updated translations. 2021-09-10 22:33:29 +03:00
Lauri Ojansivu d23920c886 Updated ChangeLog. 2021-09-10 22:30:08 +03:00
Lauri Ojansivu be2647556d Merge branch 'Emile840-master' 2021-09-10 22:28:57 +03:00
Lauri Ojansivu ea57864bcc Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-09-10 22:16:57 +03:00
Emile NDAGIJIMANA 0c121a5894 update package-lock.json 2021-09-09 17:53:10 +02:00
Emile NDAGIJIMANA c19723ae27 Add / remove team members as board members when adding / removing team to a board 2021-09-09 16:51:37 +02:00
Lauri Ojansivu 00b43df267 Updated translations. 2021-09-08 16:08:05 +03:00
Lauri Ojansivu edb6355960 Updated ChangeLog. 2021-09-08 15:57:54 +03:00
Lauri Ojansivu 8626b466b8 Sum of cards. In Progress.
Thanks to xet7 !

Related #3796
2021-09-08 15:55:53 +03:00
Lauri Ojansivu a80ab6e47a Updated ChangeLog. 2021-09-08 14:57:15 +03:00
Lauri Ojansivu 2b2978b8e7 Merge pull request #3999 from helioguardabaxo/master
When list has just one card, to show 'card' instead of 'cards'
2021-09-08 14:49:09 +03:00
helioguardabaxo 3bdea42f6d Includes JS file to previous commit 2021-09-07 18:13:08 -03:00
helioguardabaxo b56ea161cd When list has just one card, to show 'card' instead of 'cards' 2021-09-07 18:09:40 -03:00
Lauri Ojansivu cde74a9c0b Removed extra files. 2021-09-07 01:13:19 +03:00
Lauri Ojansivu 79b00f88b0 Updated ChangeLog. 2021-09-07 00:11:25 +03:00
Lauri Ojansivu 0da84f8f3e Enter new password 2 times when registering.
Thanks to sh2515 and xet7 !

Fixes #2378
2021-09-07 00:08:45 +03:00
Lauri Ojansivu 4f164a46a6 Updated ChangeLog. 2021-09-06 23:38:15 +03:00
Lauri Ojansivu 3d9b7eb7ab Added some translations to: Admin Panel/People: Possibility of adding a team to all selected users.
Thanks to xet7.

Related https://github.com/wekan/wekan/pull/3996
2021-09-06 23:35:56 +03:00
Lauri Ojansivu d3eb0ced83 Fixed dependencies.
Thanks to xet7 !
2021-09-06 23:10:01 +03:00
Lauri Ojansivu 08ac1f6b69 Merge pull request #3996 from Emile840/master
[Admin panel / People] possibility of adding a team to all selected Users
2021-09-06 23:08:35 +03:00
Lauri Ojansivu cc63be8ff0 Updated translations. 2021-09-06 22:56:40 +03:00
Lauri Ojansivu b1d8b0c7d4 Updated ChangeLog. 2021-09-06 22:47:07 +03:00
Lauri Ojansivu 3f6fde033b Merge pull request #3994 from ww-daniel-mora/fix/issue-2444-OIDC-first-login
Fix first user creation for via OIDC
2021-09-06 22:44:31 +03:00
Emile NDAGIJIMANA 0a9e10b21e ['Version 5.58' Admin panel / People] possibility of adding a team to all selected Users 2021-09-06 21:43:38 +02:00
Lauri Ojansivu 25e17fedb9 Updated ChangeLog. 2021-09-06 22:41:09 +03:00
Lauri Ojansivu 8ec54ffa5b Merge pull request #3993 from garrison/devel-broken-links
Links to devel branch are broken; use master instead
2021-09-06 22:36:40 +03:00
Emile NDAGIJIMANA b516275c24 [Admin panel / People] possibility of adding a team to all selected Users 2021-09-06 17:38:03 +02:00
Daniel Mora aea5d62556 Fix first user creation for via OIDC
When setting up a new deploy and registering the first user via OIDC no profile information would be populated. This also prevented updating profile information as the client would error when encountering a null email value. I manually tested this change against the OIDC use case, but, not others. This fix should address #2444
2021-09-04 16:08:55 -04:00
Jim Garrison de2fc69315 Links to devel branch are broken; use master instead 2021-09-03 21:55:18 -04:00
Lauri Ojansivu 8629537c3f v5.58 2021-09-01 17:32:53 +03:00
Lauri Ojansivu 57401e48c1 Updated ChangeLog. 2021-09-01 16:29:10 +03:00
Lauri Ojansivu 76f4b8316b Merge branch 'Emile840-master' 2021-09-01 16:20:38 +03:00
Lauri Ojansivu ef0e4e36f4 Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-09-01 16:17:36 +03:00
Emile NDAGIJIMANA 55296b676b [After update wekan to 5.57] Edit profil and change pswd menus are not displayed when SSO authentication is used 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 5b9a2a8bac Updated ChangeLog. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 8031b184f3 v5.57 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 1efd7bb33a Updated build scripts. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 53d663f77b v5.56 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 9969523b70 Updated ChangeLog. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 2cd0a414d5 Updated dependencies.
Thanks to developers of dependencies!
2021-09-01 14:43:14 +02:00
Lauri Ojansivu 256a673a7f v5.55 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 6d8a062e50 Updated ChangeLog. 2021-09-01 14:43:14 +02:00
Lauri Ojansivu 35a7159be4 Updated to Node.js v12.22.6. Thanks to Node.js developers. 2021-09-01 14:43:13 +02:00
Lauri Ojansivu 764d9fa806 Fix typo. 2021-09-01 14:43:13 +02:00
Lauri Ojansivu 292ff3c961 Updated translations. 2021-09-01 14:43:13 +02:00
Lauri Ojansivu 071929d3a6 Updated ChangeLog. 2021-09-01 14:43:13 +02:00
Emile NDAGIJIMANA c7cc9273a6 Edit profil and change password menus are not displayed when SSO authentication is used 2021-09-01 11:40:54 +02:00
Lauri Ojansivu 55a11a24f4 Updated ChangeLog. 2021-08-31 22:50:35 +03:00
Lauri Ojansivu d1f443bcd8 v5.57 2021-08-31 21:58:41 +03:00
Lauri Ojansivu 52fafe9976 Updated build scripts. 2021-08-31 21:54:31 +03:00
Lauri Ojansivu 9aa7b792be v5.56 2021-08-31 21:20:53 +03:00
Lauri Ojansivu 07e9fe3403 Updated ChangeLog. 2021-08-31 21:17:15 +03:00
Lauri Ojansivu 858967f420 Updated dependencies.
Thanks to developers of dependencies!
2021-08-31 21:15:08 +03:00
Lauri Ojansivu e07df35b61 v5.55 2021-08-31 20:58:17 +03:00
Lauri Ojansivu 2a3aa9331f Updated ChangeLog. 2021-08-31 19:21:25 +03:00
Lauri Ojansivu 4863689248 Updated to Node.js v12.22.6. Thanks to Node.js developers. 2021-08-31 19:19:24 +03:00
Lauri Ojansivu 8a53aa9fa4 Fix typo. 2021-08-30 19:13:28 +03:00
Lauri Ojansivu 57a990d91e Updated translations. 2021-08-30 19:02:40 +03:00
Lauri Ojansivu 76c0393c53 Updated ChangeLog. 2021-08-30 18:57:54 +03:00
Lauri Ojansivu 62d472fa54 Merge pull request #3981 from Emile840/master
Fix bugs #3978 and #3979
2021-08-30 18:53:14 +03:00
Emile NDAGIJIMANA 6d9d69e01d Fix bugs #3978 and #3979 2021-08-30 15:49:37 +02:00
Lauri Ojansivu 38666cbda2 v5.54 2021-08-28 01:50:03 +03:00
Lauri Ojansivu b3b81546f6 Updated translations. 2021-08-28 01:36:16 +03:00
Lauri Ojansivu 9c2151f802 Updated translations. 2021-08-28 01:26:01 +03:00
Lauri Ojansivu 1f2c4b5a9e Updated ChangeLog. 2021-08-28 01:19:24 +03:00
Lauri Ojansivu c9ef28b2ad Merge pull request #3977 from syndimann/fix/sub-task-card-numbers
Fix: Incorrect card numbers for sub tasks
2021-08-28 01:15:13 +03:00
Kai Lehmann 03a5f46131 fixes card numbers for sub tasks 2021-08-27 21:16:27 +02:00
Lauri Ojansivu f1e4297e00 Merge pull request #3976 from Emile840/master
[Admin panel] Added a parameter to display or not the visibility of a board in private mode only
2021-08-27 17:38:25 +03:00
Emile NDAGIJIMANA 9bb1425a81 [Admin panel] Add a parameter to display or not the visibility of a board in private mode only 2021-08-27 16:25:44 +02:00
Lauri Ojansivu b6277233a1 v5.53 2021-08-27 15:07:58 +03:00
Lauri Ojansivu 7bed8a7abb Updated ChangeLog. 2021-08-27 14:48:00 +03:00
Lauri Ojansivu 787df04419 Try to fix MAIL_FROM.
Thanks to xet7 !

Fixes #3972,
fixes #3975,
fixes #3969
2021-08-27 14:35:37 +03:00
Lauri Ojansivu 8e142dfdcf v5.52 2021-08-26 13:55:05 +03:00
Lauri Ojansivu 2a216d41f0 Updated ChangeLog. 2021-08-26 04:05:35 +03:00
Lauri Ojansivu 241eb9df0f Fixed New wide card edit view is all jumbled on mobile.
Thanks to jdaviescoates and xet7 !

Fixes #3890
2021-08-26 04:01:44 +03:00
Lauri Ojansivu 0bdd7c8973 Updated ChangeLog. 2021-08-26 03:41:10 +03:00
Lauri Ojansivu a59932af00 Fixed Save button not clickable in maximized card view.
Thanks to syndimann !

Fixes #3940
2021-08-26 03:38:31 +03:00
Lauri Ojansivu c2a073dec0 Updated ChangeLog. 2021-08-26 03:03:15 +03:00
Lauri Ojansivu 7808fdd22f Delete user is now possible at Admin Panel. But you should remove user first from all boards,
because otherwise there could be bug of empty avatars at boards, that need to be removed manually
from database.

Thanks to xet7 !

Fixes #3956
2021-08-26 02:57:49 +03:00
Lauri Ojansivu bf2f3ccec1 Updated ChangeLog. 2021-08-26 02:39:39 +03:00
Lauri Ojansivu 9c7c481f48 Initials not required for new user that is created at Admin Panel.
Thanks to xet7 !
2021-08-26 02:36:43 +03:00
Lauri Ojansivu df26bc9013 Updated ChangeLog. 2021-08-26 02:12:47 +03:00
Lauri Ojansivu b36a7621e0 Fixed translation of "Clear Filter" for "All boards page: Possibility of filtering board by team or organization".
Thanks to xet7 !
2021-08-26 02:10:44 +03:00
Lauri Ojansivu f2c242f49e Added Chinese (Simplified) (zh-Hans or zh-CN).
Thanks to translators!
2021-08-26 02:08:23 +03:00
Lauri Ojansivu 5175f13881 Updated ChangeLog. 2021-08-25 23:32:35 +03:00
Lauri Ojansivu 75a1854cc3 Merge pull request #3964 from Emile840/master
[All boards page] Possibility of filtering board by team or organization
2021-08-25 23:29:49 +03:00
Emile NDAGIJIMANA 48c3263e28 [all boards page] Possibility of filtering board by team or organization 2021-08-24 17:12:51 +02:00
Lauri Ojansivu f5e26fb2e6 Updated ChangeLog. 2021-08-21 17:55:49 +03:00
Lauri Ojansivu 1fadf204c2 Added MAIL_SERVICE settings. Part 2.
Thanks to xet7 !

Fixes #3702
2021-08-21 17:54:05 +03:00
Lauri Ojansivu f03b14a46b Updated ChangeLog. 2021-08-21 17:10:04 +03:00
Lauri Ojansivu ab8e56e16a Added MAIL_SERVICE settings for Well Known Email Services https://github.com/wekan/wekan/wiki/Troubleshooting-Mail . Please test.
Thanks to xet7 !

Fixes #3702
2021-08-21 16:32:07 +03:00
Lauri Ojansivu 2f33a1ecff v5.51 2021-08-17 22:04:39 +03:00
Lauri Ojansivu abadeb5e14 Updated ChangeLog. 2021-08-17 21:37:15 +03:00
Lauri Ojansivu 19c68895e9 Merge pull request #3949 from syndimann/fix/global-search
Fix: global search
2021-08-17 21:33:05 +03:00
Kai Lehmann bed6d6c591 fixes global search, remove unnecessary use of CardCommentReactions 2021-08-17 16:14:50 +02:00
Lauri Ojansivu b2652edf56 v5.50 2021-08-16 00:00:06 +03:00
Lauri Ojansivu 94bb3bee77 Updated translations. 2021-08-15 23:53:29 +03:00
Lauri Ojansivu e909ece2da Updated ChangeLog. 2021-08-15 23:48:16 +03:00
Lauri Ojansivu 7bc250ce84 Merge pull request #3946 from syndimann/fix/user-creation
Fix: Save user initials and fullname when a new user is created
2021-08-15 23:44:07 +03:00
Kai Lehmann 7706839fbe fix user creation to include fullname and initials 2021-08-15 22:33:31 +02:00
Lauri Ojansivu 68ad58431d Updated translations. 2021-08-15 00:02:02 +03:00
Lauri Ojansivu 2059752fc6 Updated translations. 2021-08-14 09:51:30 +03:00
Lauri Ojansivu 302afae0bb Updated dependencies. 2021-08-14 09:44:07 +03:00
Lauri Ojansivu 3d1d94d628 Updated ChangeLog. 2021-08-13 23:54:24 +03:00
Lauri Ojansivu d51fc2f12c v5.49 2021-08-13 23:36:36 +03:00
Lauri Ojansivu 2dee14b0d5 Updated translations. 2021-08-13 23:24:07 +03:00
Lauri Ojansivu e75849da98 Updated translations. 2021-08-13 22:49:46 +03:00
Lauri Ojansivu 508c7b7a90 Merge pull request #3945 from syndimann/master
Feature: Adds Card Comment Reactions
2021-08-13 22:27:10 +03:00
Lauri Ojansivu de67e051d7 Updated ChangeLog. 2021-08-13 22:26:36 +03:00
Lauri Ojansivu 9ce65c601a Text "Search" now translatable at Card Add Member/Assignee.
Thanks to xet7 !
2021-08-13 22:23:50 +03:00
Kai Lehmann 10d7eeb762 Merge branch 'wekan:master' into master 2021-08-13 21:03:55 +02:00
Kai Lehmann 104a6dd0b3 add comments for card comment reactions feature 2021-08-13 20:53:04 +02:00
Kai Lehmann 2977120129 adds card comment reactions feature 2021-08-13 20:47:55 +02:00
Kai Lehmann d8e8512d66 add i18n for add-reaction 2021-08-13 20:43:30 +02:00
Lauri Ojansivu 7bfbcf7e03 v5.48 2021-08-11 23:48:02 +03:00
Lauri Ojansivu 91cad7b49e Updated to Node.js v12.22.5. Thanks to Node.js developers. 2021-08-11 23:40:56 +03:00
Lauri Ojansivu 26f1defc56 Updated ChangeLog. 2021-08-11 23:16:27 +03:00
Lauri Ojansivu 9a03654062 Fixed: Can't save user without Initials.
Thanks to devagleo and xet7 !

Fixes #3928
2021-08-11 23:14:18 +03:00
Lauri Ojansivu 2576ef75bd Updated dependencies.
Thanks to developers of dependencies!
2021-08-11 23:11:50 +03:00
Lauri Ojansivu 752b45af42 Updated ChangeLog. 2021-08-11 23:11:34 +03:00
Lauri Ojansivu 23c70ac252 Added new translation: [French (Switzerland) (fr_CH).
Thanks to translators!
2021-08-11 23:10:20 +03:00
Lauri Ojansivu ad4de9e85d Updated dependencies. 2021-08-11 22:10:59 +03:00
Lauri Ojansivu 855d60f28e Merge branch 'master' of github.com:wekan/wekan 2021-08-11 22:07:23 +03:00
Lauri Ojansivu 781a94c05f Updated ChangeLog. 2021-08-11 22:06:56 +03:00
Lauri Ojansivu b3cc01b041 Updated dependencies.
Thanks to developers of dependencies!
2021-08-11 22:05:17 +03:00
Lauri Ojansivu e23ced47ae Merge pull request #3944 from wekan/dependabot/npm_and_yarn/jszip-3.7.0
Bump jszip from 3.6.0 to 3.7.0
2021-08-11 21:33:39 +03:00
dependabot[bot] f406b51a5f Bump jszip from 3.6.0 to 3.7.0
Bumps [jszip](https://github.com/Stuk/jszip) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/master/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.6.0...v3.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-11 18:32:04 +00:00
Lauri Ojansivu c81cb786ed Updated version. 2021-08-11 21:28:18 +03:00
Lauri Ojansivu 846f1244c7 Updated ChangeLog. 2021-08-11 21:04:45 +03:00
Lauri Ojansivu 3ea723329a Merge pull request #3942 from syndimann/feature/searchable-members-in-card-popup
Feature: Searchfields for members and assignees card popups
2021-08-11 21:02:06 +03:00
Kai Lehmann 698c9ed1ea adds searchfields to members and assignees popup 2021-08-10 21:20:16 +02:00
John Supplee 52e45211a2 Merge branch 'master' of https://github.com/wekan/wekan 2021-08-08 10:55:20 +02:00
Lauri Ojansivu 63044ac13a v5.47 2021-08-05 00:49:00 +03:00
Lauri Ojansivu 68d9de8946 Updated dependencies. 2021-08-05 00:42:50 +03:00
Lauri Ojansivu 92a7717e50 v5.46 2021-08-05 00:33:22 +03:00
Lauri Ojansivu d5c0a5d377 Updated dependencies. 2021-08-05 00:26:54 +03:00
Lauri Ojansivu c0b7fb0b84 v5.45 2021-08-05 00:24:29 +03:00
Lauri Ojansivu 9b4e556837 Updated ChangeLog. 2021-08-05 00:13:08 +03:00
Lauri Ojansivu 1aec0b5f0d Merge pull request #3939 from syndimann/bugfix/3866-mentions-in-maximized-card
Fix: Show missing user mentions popover when posting comments in maximized card layout
2021-08-05 00:10:56 +03:00
Lauri Ojansivu c5d4e06ea3 Updated ChangeLog. 2021-08-05 00:10:14 +03:00
Lauri Ojansivu 97bf907448 Merge pull request #3937 from syndimann/feature/card-and-board-mentions
Feature: Special handles to notify board or card members in a comment
2021-08-05 00:08:43 +03:00
Kai Lehmann 7ef2a2a9f4 fixes missing user mentions when in maximized card 2021-08-04 22:22:59 +02:00
Kai Lehmann 547d82fe57 adds handles to notifiy board or card members 2021-08-03 23:35:12 +02:00
Lauri Ojansivu 977821d293 v5.44 2021-08-03 17:42:26 +03:00
Lauri Ojansivu f4e5306181 Updated ChangeLog. 2021-08-03 16:14:15 +03:00
Lauri Ojansivu f01b440fb7 Merge pull request #3936 from syndimann/feature/boardwise-card-numbers
Fix: Consecutive Card numbering when a card is moved to another board or copied
2021-08-03 16:12:28 +03:00
Kai Lehmann 2fd741bf54 fix cardnumber assignment for moved or copied card 2021-08-03 14:03:05 +02:00
Kai Lehmann e8522c323f fixes retrieval of next board cardnumber 2021-08-03 14:02:22 +02:00
Lauri Ojansivu def2ec46e0 Updated ChangeLog. 2021-08-03 06:15:40 +03:00
Lauri Ojansivu 4e17d5a10f Wekan v5.43 for helm.
Thanks to xet7 !
2021-08-03 06:13:43 +03:00
Lauri Ojansivu dcba6909e2 v5.43 2021-08-03 05:56:55 +03:00
Lauri Ojansivu fc74324d1a Updated ChangeLog. 2021-08-03 05:51:56 +03:00
Lauri Ojansivu 8bb33c53f0 Merge pull request #3935 from syndimann/feature/boardwise-card-numbers
Feature: Consecutive boardwise card numbering
2021-08-03 05:44:39 +03:00
Kai Lehmann 236b6c3552 Fixes card-number migration
and further optimizes getNextCardNumber in board model
2021-08-02 22:41:46 +02:00
Kai Lehmann 28e9a6ac33 show cardNumber in minicard and cardDetails 2021-08-02 21:44:37 +02:00
Kai Lehmann f91cc25b11 assign next cardNumber to newly created card 2021-08-02 21:44:19 +02:00
Kai Lehmann 6fd45ce74b adds card number allowance to card settings 2021-08-02 21:41:58 +02:00
Kai Lehmann b57eae14d4 add cardNumber handling to card and board model 2021-08-02 21:41:30 +02:00
Lauri Ojansivu 12db3714f9 Updated ChangeLog. 2021-08-01 17:15:56 +03:00
Lauri Ojansivu 7a1f42fa4e v5.42 for helm 2021-08-01 17:10:10 +03:00
Lauri Ojansivu 74064324cf Merge pull request #3933 from varac/update_helmchart
Update helmchart, pin image version
2021-08-01 17:08:13 +03:00
Varac f3baa32d6c Update Chart apiVersion, pin image version
This makes this Chart compatible with [flux](https://fluxcd.io)
[helm-controller](https://fluxcd.io/docs/components/helm), which
requires v2 charts.
2021-08-01 15:54:17 +02:00
Lauri Ojansivu 33eed50290 v5.42 2021-08-01 15:46:03 +03:00
Lauri Ojansivu 11d9d1c889 Updated translations. 2021-08-01 15:41:57 +03:00
Lauri Ojansivu 5a7860ac8e Updated ChangeLog. 2021-08-01 15:31:58 +03:00
Lauri Ojansivu b13f691389 Updated to Node.js v12.22.4. Thanks to Node.js developers. 2021-08-01 15:30:08 +03:00
John Supplee cca51628ef Merge branch 'master' of https://github.com/wekan/wekan 2021-07-27 18:13:47 -04:00
Varac d70e876388 Ignore downloaded chart dependencies 2021-07-27 22:06:26 +02:00
Lauri Ojansivu 36c2cb9573 v5.41 2021-07-26 19:59:42 +03:00
Lauri Ojansivu 88a47780a8 Updated translations. 2021-07-26 19:52:33 +03:00
John Supplee 506cb696d3 Merge branch 'master' of https://github.com/wekan/wekan 2021-07-26 11:25:27 -04:00
Lauri Ojansivu d30ce3c5cf Updated ChangeLog. 2021-07-26 14:04:25 +03:00
Lauri Ojansivu 0fa8fc8b50 Fixed Wekan JSON import fails.
Thanks to BartoszBroda and xet7 !

Fixes #3918
2021-07-26 14:01:09 +03:00
Lauri Ojansivu 6d73618a48 v5.40 2021-07-25 15:48:10 +03:00
Lauri Ojansivu db493f1571 Updated translations.
Thanks to translators!
2021-07-25 15:44:54 +03:00
Lauri Ojansivu 2b51afaedf Updated ChangeLog. 2021-07-25 15:22:07 +03:00
Lauri Ojansivu 18b6381d79 Fixed Delete of Planning Poker doesn't work.
Thanks to xet7 !

Fixes #3915
2021-07-25 15:19:54 +03:00
Lauri Ojansivu c65d8ed6a9 Updated ChangeLog. 2021-07-25 00:00:55 +03:00
Lauri Ojansivu b3ba156d20 v5.39 2021-07-24 23:38:10 +03:00
Lauri Ojansivu e1de787f19 Updated translations.
Thanks to translators!
2021-07-24 23:27:34 +03:00
Lauri Ojansivu e1f08b157b Updated ChangeLog. 2021-07-24 21:18:06 +03:00
Lauri Ojansivu 508915462d Merge pull request #3912 from Emile840/master
Organizations and teams are taken into account when displaying board in « All boards page »
2021-07-24 21:15:24 +03:00
Lauri Ojansivu 7c2ef6fbd5 Updated ChangeLog. 2021-07-24 19:58:59 +03:00
Lauri Ojansivu ae73029dda Added translation: English (Italy).
Thanks to translators!
2021-07-24 19:57:07 +03:00
Lauri Ojansivu 542972fc5c Updated ChangeLog. 2021-07-24 19:37:18 +03:00
Lauri Ojansivu d7cb143b0a Fix typo. 2021-07-24 19:35:24 +03:00
Lauri Ojansivu d594555227 Merge pull request #3910 from helioguardabaxo/master
Add Convert checklist item to card feature
2021-07-24 19:33:17 +03:00
Lauri Ojansivu fe25ed5202 Updated ChangeLog. 2021-07-24 19:25:49 +03:00
Lauri Ojansivu f6c36d6edd Merge branch 'indika-dev-master' 2021-07-24 19:22:23 +03:00
Lauri Ojansivu fe40f35d6d LDAP AD Simple Auth: Added settings for all Wekan Standalone (non-Sandstorm) platforms.
Thanks to xet7 !
2021-07-24 19:20:47 +03:00
John Supplee a4e02bb8cd Merge branch 'master' of https://github.com/wekan/wekan 2021-07-23 11:14:53 -04:00
Emile NDAGIJIMANA 789d1d1d1c « All boards page » only displays tables to which the current user has access 2021-07-23 10:39:42 +02:00
helioguardabaxo 70265deb47 Add Convert checklist item to card feature 2021-07-22 22:44:40 -03:00
Stefan Maaßen c0d1ed714e added comment because of change in configuration dependencies 2021-07-22 10:46:35 +02:00
Stefan Maaßen 0555b7e34c added comment to clarify additional use case of LDAP_DEFAULT_DOMAIN 2021-07-22 10:35:12 +02:00
Stefan Maaßen c1c2eb22ba removed unnecessary changes 2021-07-22 10:28:37 +02:00
Stefan Maaßen 697d7613f2 Merge branch 'master' of https://github.com/wekan/wekan 2021-07-22 10:06:55 +02:00
Lauri Ojansivu 33836af1f9 Try to fix Snap.
Thanks to roadmr and xet7 !
2021-07-21 23:40:13 +03:00
Stefan Maaßen 4f0c2dafca removed unnecessary files 2021-07-21 10:13:39 +02: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
Stefan Maaßen 84801010d5 merged with wekan master @ v5.38 2021-07-20 13:34:22 +02:00
Stefan Maaßen cb418f5e23 merged with wekan master @ v5.38 2021-07-20 13:33:42 +02:00
Lauri Ojansivu f7d6ac9401 v5.38 2021-07-18 15:46:34 +03:00
Lauri Ojansivu d939ab0d76 Updated ChangeLog. 2021-07-18 15:39:51 +03:00
Lauri Ojansivu d538a01d19 Updated to Node.js v12.22.3. Thanks to Node.js developers. 2021-07-18 15:37:50 +03:00
Lauri Ojansivu 8770326ed3 Updated translations. 2021-07-18 15:32:00 +03:00
Lauri Ojansivu b2e96746db Updated translations. 2021-07-16 16:22:08 +03:00
Lauri Ojansivu 6ce0be635b Updated ChangeLog. 2021-07-13 20:46:39 +03:00
Lauri Ojansivu 1001e95a87 Updated ChangeLog. 2021-07-13 20:13:43 +03:00
Lauri Ojansivu 609adcdf10 Updated dependencies.
Thanks to developers of dependencies !
2021-07-13 20:12:08 +03:00
Lauri Ojansivu 9de2580e30 Updated ChangeLog. 2021-07-13 20:11:44 +03:00
Lauri Ojansivu 9eb9081c6d Merge pull request #3902 from jghaanstra/master
Small fixes for ModernDark theme
2021-07-13 20:09:54 +03:00
Jelger Haanstra f551b03dc7 Small fixes for ModernDark theme 2021-07-13 15:49:20 +02:00
Lauri Ojansivu 1d5dd5e60f Fixed rebuild-wekan.sh .
Thanks to xet7 !
2021-07-12 18:16:12 +03:00
Lauri Ojansivu 35a7036d4a Updated ChangeLog. 2021-07-06 22:41:59 +03:00
Lauri Ojansivu 7024929881 Updated dependencies.
Thanks to developers of dependencies!
2021-07-06 22:40:44 +03:00
Lauri Ojansivu 90058f25bf Updated ChangeLog. 2021-07-06 21:20:49 +03:00
Lauri Ojansivu 24ec9018fb Updated ChangeLog. 2021-07-06 21:16:11 +03:00
Lauri Ojansivu ec01e5182d Fixed Line break which is wrongly added in Cards description and Cards comments.
Added Code View `</>` button when RICHER_CARD_COMMENT_EDITOR=true and in desktop view
(=non-mobile, so there is enough screen space for buttons in desktop view).

Thanks to Emile840 and xet7 !

Fixes #3885
2021-07-06 20:59:47 +03:00
Lauri Ojansivu 06d2880a7e Fix typos. 2021-07-05 13:43:03 +03:00
Lauri Ojansivu 2a611a8935 Merge pull request #3895 from Emile840/master
Add or remove an organization and team from a board
2021-07-05 13:38:13 +03:00
Emile NDAGIJIMANA b236d95636 Add or remove organizations and teams from boards 2021-07-05 11:27:38 +02:00
Lauri Ojansivu b1abfc768a v5.37 2021-07-04 08:05:19 +03:00
Lauri Ojansivu 9b97810109 Updated ChangeLog. 2021-07-04 07:53:00 +03:00
Lauri Ojansivu 4feffd90e3 Updated to Node.js v12.22.2. Thanks to Node.js developers. 2021-07-04 07:50:50 +03:00
Lauri Ojansivu dd8d2ea276 Updated ChangeLog. 2021-07-01 14:10:19 +03:00
Lauri Ojansivu 4c29b72242 Merge pull request #3889 from bentiss/fix-openapi
openapi: actually catch the error when esprima fails at parsing the file
2021-07-01 14:07:11 +03:00
Benjamin Tissoires ebe39771a6 openapi: actually catch the error when esprima fails at parsing the file
39f8a138d7 added a try/except around esprima to catch any hard error
from the parsing, but the returned value was not checked.

We now have the file models/exportExcel.js which gives us an unexpected
symbol on line 3 (not sure why it is not happy), but that fails the
generation of the doc entirely.

Fixes #3884

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2021-07-01 10:23:29 +02:00
Lauri Ojansivu 63605ee42e v5.36 2021-06-29 14:36:04 +03:00
Lauri Ojansivu b7f047db88 Updated translations. 2021-06-29 14:18:33 +03:00
Lauri Ojansivu 96289210d7 Updated ChangeLog. 2021-06-29 14:08:34 +03:00
Lauri Ojansivu 3b4a44abb1 Shared Templates: In Progress. Hide this feature while it's not finished yet.
Thanks to xet7 !
2021-06-29 14:03:47 +03:00
Lauri Ojansivu e0797c83f8 Updated ChangeLog. 2021-06-29 13:45:52 +03:00
Lauri Ojansivu 30ffcc9246 Fixed "Search All Boards" instructions are gone.
Thanks to ClaudiaK21 and xet7 !

Fixes #3882
2021-06-29 13:38:57 +03:00
Lauri Ojansivu a0945d2a2e Updated ChangeLog. 2021-06-25 00:15:41 +03:00
Lauri Ojansivu c4cea9e71b Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874

Thanks to xet7 !
2021-06-25 00:13:07 +03:00
Lauri Ojansivu 35ec61726d Updated ChangeLog. 2021-06-25 00:08:28 +03:00
Lauri Ojansivu f18a57b059 Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874

Thanks to xet7 !
2021-06-25 00:07:27 +03:00
Lauri Ojansivu 4ba180fbc4 Updated ChangeLog. 2021-06-24 23:38:07 +03:00
Lauri Ojansivu 0f34d407a4 Try to fix tests. Part 3.
Thanks to xet7 !
2021-06-24 23:37:13 +03:00
Lauri Ojansivu 4b29e9fbcb Updated ChangeLog. 2021-06-24 23:09:34 +03:00
Lauri Ojansivu 7f648720af Try to fix tests. Part 2.
Thanks to xet7 !
2021-06-24 23:08:14 +03:00
Lauri Ojansivu 58081c13cf Updated ChangeLog. 2021-06-24 22:54:57 +03:00
Lauri Ojansivu 78555f57a7 Try to fix tests.
Thanks to xet7 !
2021-06-24 22:52:53 +03:00
Lauri Ojansivu 1ad40134dd Updated ChangeLog. 2021-06-24 22:35:58 +03:00
Lauri Ojansivu 9e16a405d8 Delete user at REST API and Admin Panel/People/People. There is still bug of
leaving empty user avatars to boards: boards members, card members and assignees have
empty users. So it would be better to delete user from all boards before deleting user.

Thanks to darren-teo and xet7 !

Fixes #2716
2021-06-24 22:29:03 +03:00
Lauri Ojansivu 9122a339cb Updated ChangeLog. 2021-06-24 22:23:26 +03:00
Lauri Ojansivu 56197274b6 Fixes tests, that need to be in tests directory to not get build errors.
Thanks to xet7 !
2021-06-24 22:21:29 +03:00
Lauri Ojansivu 6cf65ba82a Updated ChangeLog. 2021-06-23 13:44:06 +03:00
Lauri Ojansivu aa59007409 Merge branch 'jankapunkt-tests' 2021-06-23 13:40:54 +03:00
Lauri Ojansivu 66729e4c05 Merge branch 'tests' of https://github.com/jankapunkt/wekan into jankapunkt-tests 2021-06-23 13:29:51 +03:00
Jan Küster 6387d32c2f ci fix script name 2021-06-23 12:25:02 +02:00
Jan Küster 48dbeb1e14 initial tests added 2021-06-23 12:12:29 +02:00
Jan Küster 20452d7296 initial tests added 2021-06-23 12:08:14 +02:00
Jan Küster 7daa67c792 script added for running tests 2021-06-23 12:06:33 +02:00
Jan Küster 4d9ba8d73b tests ci added 2021-06-23 11:52:34 +02:00
Jan Küster 3650ef4805 testinfrastructure created 2021-06-23 11:51:58 +02:00
Lauri Ojansivu be9154a015 Updated ChangeLog. 2021-06-22 19:35:47 +03:00
Lauri Ojansivu 0e00ca2350 Updated translations. 2021-06-22 19:17:56 +03:00
Lauri Ojansivu 2c0549a67a Updated ChangeLog. 2021-06-22 19:14:14 +03:00
Lauri Ojansivu 59e23e4296 Merge pull request #3871 from jankapunkt/fix-exceljs-client-leakage
remove unused exceljs from client bundle
2021-06-22 19:09:56 +03:00
Jan Küster 3aa7a6e244 remove unused exceljs from client bundle 2021-06-22 17:53:14 +02:00
Lauri Ojansivu 838c74a83b Updated ChangeLog. 2021-06-16 20:03:32 +03:00
Lauri Ojansivu 7f17bc9fb0 Shared Templates. In Progress.
Part 3:
- Template container titles "Card/List/Board Templates" automatically
  translated.

Thanks to xet7 !

Related #3313
2021-06-16 19:59:59 +03:00
Lauri Ojansivu 2dca6e8e7c Updated translations. 2021-06-16 19:19:20 +03:00
Lauri Ojansivu a1bb3f9031 Updated ChangeLog. 2021-06-16 19:16:39 +03:00
Lauri Ojansivu d1d4453120 Shared Templates. In Progress.
Part 2:
- Ablity to Add Template Container, checkbox in Create Board popup.
- Do not create Template Container by default, when creating user.

Thanks to xet7 !

Related #3313
2021-06-16 19:06:10 +03:00
Lauri Ojansivu 48dcb02328 Updated translations. 2021-06-16 16:19:08 +03:00
Lauri Ojansivu 0a0cec6ef0 Shared Templates. In Progress.
Thanks to xet7 !

Related #3313
2021-06-16 16:10:34 +03:00
Lauri Ojansivu c3dd9f47fb Updated translations. 2021-06-15 22:24:52 +03:00
Lauri Ojansivu 5417f9b190 Updated translations. 2021-06-15 12:53:30 +03:00
Lauri Ojansivu f03c873815 Fix typos. 2021-06-15 12:48:08 +03:00
Lauri Ojansivu 80adca5134 Merge pull request #3865 from Emile840/master
Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it
2021-06-15 12:43:06 +03:00
Emile840 6efcac2a0e Merge branch 'master' into master 2021-06-14 17:04:21 +02:00
Emile NDAGIJIMANA 5162317298 -warning messages when user try to delete an organization / remove user from organization or team 2021-06-14 16:43:07 +02:00
Emile NDAGIJIMANA 90139b978c merge of two branchs 2021-06-14 15:38:15 +02:00
Emile NDAGIJIMANA 080fcb9c62 -conflits resolve 2021-06-14 15:11:21 +02:00
Lauri Ojansivu c437c2048d v5.35 2021-06-14 15:35:23 +03:00
Lauri Ojansivu f80fcfd7c0 Updated dependencies.
Thanks to developers of dependencies !
2021-06-14 15:31:06 +03:00
Lauri Ojansivu e9670aa5cb Updated ChangeLog. 2021-06-14 15:14:39 +03:00
Lauri Ojansivu 164b6e9070 Part 2: Allow board members to use more of API. Please add issue (or pull request) if this allows too much.
Thanks to JayVii and xet7 !

Fixes #3862
2021-06-14 15:13:15 +03:00
Lauri Ojansivu 5af18809a7 Updated ChangeLog. 2021-06-14 15:04:55 +03:00
Lauri Ojansivu a719e8fda1 Allow board members to use more of API. Please add issue (or pull request) if this allows too much.
Thanks to JayVii and xet7 !

Fixes #3862
2021-06-14 15:01:37 +03:00
Lauri Ojansivu 50fa8a0743 Updated translations. 2021-06-14 14:31:27 +03:00
Emile NDAGIJIMANA 250f95deb6 Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 12:51:15 +02:00
Emile NDAGIJIMANA bc98d82acf Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 12:46:00 +02:00
Lauri Ojansivu 9e160d2431 Updated ChangeLog. 2021-06-14 13:04:19 +03:00
Lauri Ojansivu 77cff95c07 Merge pull request #3863 from mfilser/card_details_maximize_fixes
Card details maximize fixes
2021-06-14 13:01:41 +03:00
Emile NDAGIJIMANA ecd780962f Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 11:32:06 +02:00
Emile NDAGIJIMANA ab06597b7c Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 11:29:51 +02:00
Martin Filser b98a46b78c forms.styl, wrong indentation 2021-06-14 11:05:37 +02:00
Martin Filser 49e31707e5 Card Details, minicard is now hidden 2021-06-14 11:05:46 +02:00
Martin Filser 92122e1fdd Card Details, maximize and minimize of card works now 2021-06-14 11:05:42 +02:00
Martin Filser 7238a65a6f Card Details, more space at maximize icon 2021-06-14 11:05:37 +02:00
Martin Filser e68ccf8532 Card Details, maximize and minimize of icon works
- Card isn't maximized yet
2021-06-14 11:05:37 +02:00
Emile NDAGIJIMANA 220c52373a Added some controls and warning messages when user try to delete an organization or team that has at least one user belongs to it 2021-06-14 10:03:48 +02:00
Lauri Ojansivu 362fd86dbf Updated translations. 2021-06-13 17:56:30 +03:00
Lauri Ojansivu 8aba58188d Updated ChangeLog. 2021-06-13 15:51:49 +03:00
Lauri Ojansivu 41848dd99e Merge pull request #3861 from mfilser/manual_sort_number_0_accepted
Manuel sort number 0 accepted
2021-06-13 15:49:34 +03:00
Martin Filser f2fcfd6a47 Manuel sort number 0 accepted
Fixes: #3859
2021-06-13 10:39:44 +02:00
Lauri Ojansivu 33cdb906e2 Updated translations. 2021-06-13 08:49:08 +03:00
Lauri Ojansivu 19e73009b1 Updated ChangeLog. 2021-06-13 00:17:23 +03:00
Lauri Ojansivu 401e256d84 Updated translations. 2021-06-12 23:49:49 +03:00
Lauri Ojansivu e1cd87433a Updated ChangeLog. 2021-06-12 23:37:24 +03:00
Lauri Ojansivu 23e5e1e3bd Reduced Wekan bundle size from 636 MB to 467 MB by deleting all
dependencies of lucasantoniassi:accounts-lockout and including
only required 10 files.

Thank to xet7 !
2021-06-12 23:28:57 +03:00
Lauri Ojansivu 8f19f043a1 Updated translations. 2021-06-12 15:19:20 +03:00
Lauri Ojansivu b1f07149c0 Updated ChangeLog. 2021-06-12 15:16:38 +03:00
Lauri Ojansivu 17acf18848 Export card to PDF. Part 2.
Thanks to xet7 !
2021-06-12 15:15:36 +03:00
Lauri Ojansivu f52f589f7d Updated translations. 2021-06-12 15:01:48 +03:00
Lauri Ojansivu e3e25bc233 Updated ChangeLog. 2021-06-12 14:52:43 +03:00
Lauri Ojansivu a2f2ce1135 Export Card to PDF. In Progress.
Thanks to xet7 !
2021-06-12 14:50:18 +03:00
Lauri Ojansivu 90152ab9f5 Updated ChangeLog. 2021-06-12 13:07:27 +03:00
Lauri Ojansivu 7a25f542e8 Updated translations. 2021-06-12 12:58:53 +03:00
Lauri Ojansivu 8c57250243 Maximize Card. In Progress.
Thanks to xet7 !

Related #1574
2021-06-12 12:48:12 +03:00
Lauri Ojansivu 2e1eb1e224 Add border and update label colors for better visibility.
Thanks to xet7 !
2021-06-12 12:46:30 +03:00
Lauri Ojansivu b9a15e68de Updated translations. 2021-06-12 08:53:19 +03:00
Lauri Ojansivu a9d2e03b65 Updated translations. 2021-06-11 21:01:38 +03:00
Lauri Ojansivu d84b04dc35 Updated ChangeLog. 2021-06-11 20:56:23 +03:00
Lauri Ojansivu 7f3f082557 Added more translations for Wait Spinners.
Thanks to xet7 !
2021-06-11 20:54:52 +03:00
Lauri Ojansivu c810c68923 Updated translations. 2021-06-11 20:49:55 +03:00
Lauri Ojansivu 865a585c7f Updated ChangeLog. 2021-06-11 20:38:24 +03:00
Lauri Ojansivu 8703dd4229 Wait Spinners can now be translated. Added Wait Spinners docs:
https://github.com/wekan/wekan/wiki/Wait-Spinners

Thanks to xet7 !
2021-06-11 20:35:27 +03:00
Lauri Ojansivu d0c417b17d v5.34 2021-06-11 15:35:13 +03:00
Lauri Ojansivu d09151d8f3 Updated translations. 2021-06-11 15:22:55 +03:00
Lauri Ojansivu 01a28860fe Updated ChangeLog. 2021-06-11 15:19:45 +03:00
Lauri Ojansivu 488b765f95 Added remaining WAIT_SPINNER settings.
Thanks to xet7 !

Related https://github.com/wekan/wekan/pull/3858
2021-06-11 15:17:43 +03:00
Lauri Ojansivu 8a21b69fb0 Updated translations. 2021-06-11 14:52:31 +03:00
Lauri Ojansivu eda3ed59df Updated ChangeLog. 2021-06-11 14:48:09 +03:00
Lauri Ojansivu 611ac0ab57 Merge pull request #3858 from mfilser/more_spinners_and_configureable_in_admin_panel
More spinners + configureable in admin panel
2021-06-11 14:42:38 +03:00
Martin Filser d485154a12 Spinner Double-Bounce now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 0caff7d5d5 Spinner Cube-Grid now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 6df7657c8e Spinner Scaleout now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 55d0f0bacd Spinner Rotateplane now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser a74fac4cbf Spinner Dot now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 8aa58c0b11 Spinner Cube now available
Spinner from: https://tobiasahlin.com/spinkit/
2021-06-11 13:34:33 +02:00
Martin Filser 4b9f8ab2b1 Adding DEFAULT_WAIT_SPINNER to all environments 2021-06-11 13:34:33 +02:00
Martin Filser ba41533128 Default Spinner can be configured through environment variables 2021-06-11 13:34:33 +02:00
Martin Filser 38069c6d63 Spinner description insert in translation 2021-06-11 13:34:33 +02:00
Martin Filser 1d66058240 Spinner class in own .js library file 2021-06-11 13:34:33 +02:00
Martin Filser 43ac328e8a Spinner config is now reactive
- changed at boards as soon as changed in the settings
2021-06-11 13:34:33 +02:00
Martin Filser 7519abf3fe Spinner now configureable in the Settings 2021-06-11 13:34:33 +02:00
Martin Filser 849deae11e Spinners needs &nbsp;
- it's not formatted by Meteor well, \n is missing in the generated
  Javascript code, so i insert &nbsp; in the template
2021-06-11 13:34:33 +02:00
Martin Filser 06a2b08780 Spinner configureable in the source code 2021-06-11 13:34:33 +02:00
Martin Filser 4f9d3d8be5 List infinite scroll now always works
- before sometimes list scrolling stopped even the spinner was visible
  and scrolling was at the end of the list
2021-06-11 13:34:33 +02:00
Lauri Ojansivu ac3d658cb1 Merge pull request #3857 from mfilser/view_and_change_card_sort_number
View and change card sort number
2021-06-11 14:33:43 +03:00
Lauri Ojansivu 8f00191617 Updated ChangeLog. 2021-06-11 14:30:19 +03:00
Lauri Ojansivu 762391965e Try to fix BUG: Database error attempting to change a account.
Thanks to bbyszio and xet7 !

Fixes #3855
2021-06-11 14:28:25 +03:00
Lauri Ojansivu 0fa3a2729d Updated ChangeLog. 2021-06-11 13:55:33 +03:00
Martin Filser 54640bb125 Minicard, show sorting number if board config is enabled 2021-06-11 12:35:57 +02:00
Martin Filser 57d35a294d CardDetails sorting, only float number input possible (only working in an extra handler)
- defining in events() doesn't handle the return value and is ignored,
  maybe a bug in Blaze / Meteor.?
2021-06-11 12:35:57 +02:00
Martin Filser 39069b322d CardDetails sorting, only float number input possible 2021-06-11 12:35:57 +02:00
Martin Filser 540ce3a6ed CardDetails sorting number is displayed at card and can be modified (if configured) 2021-06-11 12:35:57 +02:00
Lauri Ojansivu ab22fb27ce Updated ChangeLog. 2021-06-11 13:35:06 +03:00
Lauri Ojansivu 0f564365f4 Merge pull request #3856 from mfilser/custom_fields_missing_after_adding_first_card
CustomFields were not created after adding 1 card
2021-06-11 13:33:26 +03:00
Lauri Ojansivu cccb7e4a39 Updated ChangeLog. 2021-06-11 13:16:20 +03:00
Lauri Ojansivu 1e837dec11 Fix Google SSO to access Wekan has not been working
by reverting Wekan v5.31 not-working fixes to OAUTH2_LOGIN_STYLE=redirect Has No Effect.

Thanks to unpokitodxfavor and xet7 !

Fixes #3854,
opens #3845
2021-06-11 13:08:23 +03:00
Martin Filser be3325ce35 CustomFields were not created after adding 1 card 2021-06-11 12:03:29 +02:00
Lauri Ojansivu c042d54714 Updated ChangeLog. 2021-06-11 12:59:20 +03:00
Lauri Ojansivu 77e2f95c66 Merge pull request #3852 from mfilser/development_in_docker_container
Development in docker container
2021-06-11 12:57:49 +03:00
Martin Filser 403b416b2a Development volumes now in the same folder
- It's easier for the development to have the files in the same folder
  than in an extra volume
2021-06-11 11:36:55 +02:00
Martin Filser b0901ccd01 Development uses now the same Mongo Version (4.4) 2021-06-11 11:36:55 +02:00
Martin Filser 6d2f8a97af Base Image of Development and Build are now the same
- libarchive-tools contains bsdtar. bsdtar is needed for meteor
  installation, it doesn't / or didn't work with docker and overlayfs.

  see also here:

  https://github.com/jshimko/meteor-launchpad/issues/39
  https://github.com/anchore/anchore-engine/issues/106
  https://github.com/coreos/bugs/issues/1095
2021-06-11 11:36:55 +02:00
Martin Filser bbd3324b79 ignore .git directory at docker build
- COPY copies the .git directory to the image. The docker build then
  stops with this error:

=> Errors while initializing project:

While building package wekan-cfs-data-man:
error: couldn't install npm package request@https://github.com/wekan/request:
Command failed:
/home/wekan/.meteor/packages/meteor-tool/.2.2.0.1j8auib.qcbe++os.linux.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/npm
install https://github.com/wekan/request
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t https://github.com/wekan/request.git
npm ERR!
npm ERR! fatal: not a git repository: /home/wekan/app/../.git/modules/src
npm ERR!
npm ERR! exited with error code: 128

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/wekan/.npm/_logs/2021-06-10T12_54_02_777Z-debug.log
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t https://github.com/wekan/request.git
npm ERR!
npm ERR! fatal: not a git repository: /home/wekan/app/../.git/modules/src
npm ERR!
npm ERR! exited with error code: 128

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/wekan/.npm/_logs/2021-06-10T12_54_02_777Z-debug.log
2021-06-11 11:36:54 +02:00
Martin Filser 5697b89817 .devcontainer now ready for Wekan Development in Docker Container
Check .devcontainer/docker-compose.yml to fit your environment

Enter this commands to start Wekan Development:

$ cd .devcontainer
$ docker-compose build
$ docker-compose up -d

Visit localhost:3000 or whatever you entered in ROOT_URL

Code changes triggers a rebuild / redeploy
2021-06-11 11:36:40 +02:00
Lauri Ojansivu 6bf6bcb192 Revert upgrading Dockerfile to hirsute, because of bug:
https://github.com/wekan/wekan/pull/3852#issuecomment-859095850

Thanks to xet7 !
2021-06-11 00:43:45 +03:00
Lauri Ojansivu df74b31541 Try different gpg package for Docker and Hirsute.
Thanks to xet7 !
2021-06-11 00:34:27 +03:00
Lauri Ojansivu 0b34bcdfa8 Updated Dockerfile gpg to gpgv2, that package is in hirsute.
Thanks to xet7 !
2021-06-11 00:26:47 +03:00
Lauri Ojansivu 09a060a57b Updated ChangeLog. 2021-06-10 23:31:59 +03:00
Lauri Ojansivu 2a5147a0c1 Updated Docker Ubuntu base image to newest hirsute.
Thanks to xet7 !
2021-06-10 23:30:13 +03:00
Lauri Ojansivu 4caa0e2f2e Updated ChangeLog. 2021-06-10 23:06:49 +03:00
Lauri Ojansivu 8f5c0af88e Merge pull request #3851 from mfilser/card_description_same_color_editing
Card Description has now the same color on editing
2021-06-10 23:04:46 +03:00
Martin Filser 665d7eb831 Card Description has now the same color on editing 2021-06-10 21:57:10 +02:00
Lauri Ojansivu d08b208bc6 v5.33 2021-06-10 22:10:34 +03:00
Lauri Ojansivu c5d8117052 Updated translations. 2021-06-10 22:03:45 +03:00
Lauri Ojansivu b769d18f73 Updated ChangeLog. 2021-06-10 22:01:14 +03:00
Lauri Ojansivu b17760d228 Merge branch 'Emile840-master' 2021-06-10 21:56:33 +03:00
Lauri Ojansivu 2983c51db1 Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-06-10 21:54:41 +03:00
Lauri Ojansivu d6e11940cc Updated ChangeLog. 2021-06-10 21:52:05 +03:00
Lauri Ojansivu 17f15f546f Merge pull request #3849 from mfilser/custom-field-stringtemplate_autofocus
custom fields stringtemplate, autofocus the last input box
2021-06-10 21:49:48 +03:00
Emile NDAGIJIMANA 688ef08cd5 confilcts resolved for Addressed one of the point cited in issue #802 'Assigning a user to a team or organization 2021-06-10 18:27:27 +02:00
Emile NDAGIJIMANA 8607a18a26 Addressed one of the point cited in issue #802 'Assigning a user to a team or an organization' 2021-06-10 17:20:07 +02:00
Emile NDAGIJIMANA c5df78fd8b Addressed one of the point cited in issue #802 'Assigning a user to a team or an organization' 2021-06-10 16:38:28 +02:00
Martin Filser 62bd96e06e custom fields stringtemplate, autofocus the last input box 2021-06-09 21:25:49 +02:00
Lauri Ojansivu 399fd098b8 v5.32 2021-06-09 20:30:02 +03:00
Lauri Ojansivu f9c21a9b52 Updated translations. 2021-06-09 20:23:38 +03:00
Lauri Ojansivu 41893cf06a Updated ChangeLog. 2021-06-09 20:15:46 +03:00
Lauri Ojansivu 83a8d4c14f Updated ChangeLog. 2021-06-09 20:13:19 +03:00
Lauri Ojansivu 6ce5ab40a7 Moved many button texts etc to tooltips. Added more tooltips.
Thanks to xet7 !

Fixes #3848
2021-06-09 20:08:42 +03:00
Lauri Ojansivu 328fa194a0 v5.31 2021-06-09 01:45:05 +03:00
Lauri Ojansivu 482b9c9333 Updated ChangeLog. 2021-06-09 01:40:39 +03:00
Lauri Ojansivu 122757ca9c Updated dependencies.
Thanks to developers of dependencies !
2021-06-09 01:39:16 +03:00
Lauri Ojansivu 49dd2204f4 Updated ChangeLog. 2021-06-09 01:16:38 +03:00
Lauri Ojansivu 07a3a0b388 Gantt: Retain links created between tasks. Part 1: Database changes, not active in MIT Wekan.
Thanks to benjaminhrivera !

Related https://github.com/wekan/wekan/issues/2870#issuecomment-857115753
2021-06-09 01:12:23 +03:00
Lauri Ojansivu 56efbf1de7 Updated ChangeLog. 2021-06-09 00:57:27 +03:00
Lauri Ojansivu 57f31d443f Partial Fix: Vote and Planning Poker: Setting date and time now works
for some languages that have ascii characters in date format.

Thanks to xet7 !

Related #3837
2021-06-09 00:51:52 +03:00
Lauri Ojansivu 65f308434a Updated ChangeLog. 2021-06-08 17:02:25 +03:00
Lauri Ojansivu 007e0f1c16 Try to fix: Wekan UI fails to finish import of closed Trello boards.
Thanks to berezovskyi and xet7 !

Fixes #3840
2021-06-08 17:00:53 +03:00
Lauri Ojansivu c249a2d187 Updated ChangeLog. 2021-06-08 16:53:06 +03:00
Lauri Ojansivu 78324263c1 Try to fix OAUTH2_LOGIN_STYLE=redirect Has No Effect.
Thanks to xet7 !

Fixes #3845
2021-06-08 16:50:48 +03:00
Lauri Ojansivu c20229b56a Updated translations. 2021-06-08 16:50:29 +03:00
Lauri Ojansivu 1fd10771b0 Updated ChangeLog. 2021-06-08 16:41:14 +03:00
Lauri Ojansivu 1637920170 Admin Panel Organizations/Teams: Show confirm text above delete button.
Thanks to xet7 !

Related #802
2021-06-08 16:38:21 +03:00
Lauri Ojansivu 87ba966db8 Updated translations. 2021-06-08 05:25:01 +03:00
Lauri Ojansivu 258391cd8c Updated ChangeLog. 2021-06-08 05:15:25 +03:00
Lauri Ojansivu 481404e8d7 Now new boards do not have any labels added by default.
Thanks to tedkoch and xet7 !

Related https://github.com/wekan/wekan/discussions/3835#discussioncomment-836223 Issue 7.
2021-06-08 05:07:32 +03:00
Lauri Ojansivu 48737dcd01 Updated ChangeLog. 2021-06-08 04:54:42 +03:00
Lauri Ojansivu b95585b0f6 Updated ChangeLog. 2021-06-08 04:44:59 +03:00
Lauri Ojansivu 14b2c1309f Delete Organizations and Teams.
Thanks to xet7 !

Related #802
2021-06-08 04:38:47 +03:00
Lauri Ojansivu 7e036b9df3 Merge branch 'Emile840-master' 2021-06-08 01:24:54 +03:00
Lauri Ojansivu 72fa32151d Merge branch 'master' of https://github.com/Emile840/wekan into Emile840-master 2021-06-08 01:24:25 +03:00
Emile NDAGIJIMANA f5dbe8c6f6 Addressed one of the bugs cited in issue #802 'bug when creating and modifying organization and team' 2021-06-07 11:03:49 +02:00
Lauri Ojansivu 93950a3b2e Updated translations. 2021-06-05 16:02:59 +03:00
Lauri Ojansivu eec818f9fd Updated translations. 2021-06-04 12:52:54 +03:00
Lauri Ojansivu a6f15af270 Updated ChangeLog. 2021-06-04 12:48:03 +03:00
Lauri Ojansivu 646497c3f0 Removed extra package.
Thanks to xet7 !
2021-06-04 12:46:21 +03:00
Lauri Ojansivu 2342c27ced v5.30 2021-06-03 23:29:01 +03:00
Lauri Ojansivu 80f6004404 Updated translations. 2021-06-03 23:20:51 +03:00
Lauri Ojansivu a94946c77c Updated ChangeLog. 2021-06-03 23:18:12 +03:00
Lauri Ojansivu 659a65b8b9 Moved Keyboard Shortcuts from bottom to top of sidebar.
Thanks to ClaudiaK21 and xet7 !
2021-06-03 23:15:13 +03:00
Lauri Ojansivu c4b55e862f Updated ChangeLog. 2021-06-03 22:33:04 +03:00
Lauri Ojansivu f8a75930b3 Updated ChangeLog. 2021-06-03 22:09:05 +03:00
Lauri Ojansivu 3a04b1b787 Updated ChangeLog. 2021-06-03 21:49:13 +03:00
Lauri Ojansivu ad61a15611 Updated translations. 2021-06-03 21:47:52 +03:00
Lauri Ojansivu d21bc0c277 Merge branch 'helioguardabaxo-master' 2021-06-03 21:26:55 +03:00
helioguardabaxo fa3d117372 Add Feature: Planning Poker 2021-06-03 12:01:15 -03:00
Lauri Ojansivu 26249f5928 Updated ChangeLog. 2021-06-01 18:55:25 +03:00
Lauri Ojansivu b7e6600e88 Merge pull request #3833 from Emile840/master
Fix bug #3832 'Default language is still used although this one has b…
2021-06-01 18:53:25 +03:00
Emile NDAGIJIMANA 6e46cad56c Fix bug #3832 'Default language is still used although this one has been modified previously' 2021-06-01 15:55:42 +02:00
Lauri Ojansivu e7340c5021 Reverted PR https://github.com/wekan/wekan/pull/3831
The default wekan logo appears briefly before displaying the custom logo

Thanks to xet7 !

Related #3832
2021-06-01 16:44:23 +03:00
Lauri Ojansivu 05d6c5f15a Updated translations. 2021-06-01 16:28:49 +03:00
Lauri Ojansivu 428442b310 Updated ChangeLog. 2021-06-01 16:20:52 +03:00
Lauri Ojansivu 753d247cf6 Merge pull request #3831 from Emile840/master
Fix bug #3830 '[Login page] The default wekan logo appears briefly before d…
2021-06-01 16:16:04 +03:00
Lauri Ojansivu 802f544cd5 Updated ChangeLog. 2021-06-01 12:46:35 +03:00
Lauri Ojansivu bf62a947fb Fixed Python API example: Edit card, etc.
Thanks to Lucky-Shi and xet7 !

Fixes #3767
2021-06-01 12:41:54 +03: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
Emile NDAGIJIMANA 5b08ae12a6 Fix bug '[Login page] The default wekan logo appears briefly before displaying the custom logo #3830' 2021-05-31 15:36:57 +02:00
Lauri Ojansivu 46e881bea3 v5.29 2021-05-29 01:06:44 +03:00
Lauri Ojansivu 5d1714dbd5 Updated ChangeLog. 2021-05-29 00:56:24 +03:00
Lauri Ojansivu bd1de94312 Fixed Importing JSON exports fails.
Thanks to KeptnArgo and xet7 !

Fixes #3742
2021-05-29 00:52:36 +03:00
Lauri Ojansivu 06937d0aa0 Updated translations. 2021-05-29 00:29:03 +03:00
Lauri Ojansivu 9e39731133 Updated ChangeLog. 2021-05-29 00:26:09 +03:00
Lauri Ojansivu 3908cd5413 Fix: Impersonate user can now export Excel/CSV/TSV/JSON.
Impersonate user and export Excel/CSV/TSV/JSON is now logged into
database table impersonatedUsers.

Thanks to xet7 !

Fixes #3827,
fixes #3284
2021-05-29 00:19:12 +03:00
Lauri Ojansivu 6be1a33093 Updated dependencies.
Thanks to developers of dependencies!
2021-05-29 00:15:42 +03:00
Lauri Ojansivu c656cbf6ae Updated translations. 2021-05-25 17:42:28 +03:00
Lauri Ojansivu 83045a6512 Updated ChangeLog. 2021-05-18 12:59:07 +03:00
Lauri Ojansivu 199485640f Merge pull request #3813 from spasche/typos
Fix typos
2021-05-18 12:43:18 +03:00
Sylvain Pasche 2e41ff1121 Fix typos. 2021-05-17 23:41:36 +02:00
Lauri Ojansivu 487c6fae8d Updated ChangeLog. 2021-05-16 17:10:34 +03:00
Lauri Ojansivu ea64b17b82 Reworded issue template about can not login.
Thanks to xet7 !
2021-05-16 13:34:49 +03:00
Lauri Ojansivu 6d0578fd5a Added Forgot Password page to GitHub issue template.
Thanks to xet7 !
2021-05-16 13:27:56 +03:00
Lauri Ojansivu 76a4deda78 Updated ChangeLog. 2021-05-12 19:33:05 +03:00
Lauri Ojansivu 595abd303c Merge pull request #3799 from Enishowk/feature/excel_parentNameExport
Feature/excel parent card name export
2021-05-12 19:30:43 +03:00
Lauri Ojansivu 5dd6466c0a Removed not working GitHub workflow.
Thanks to xet7 !
2021-05-10 20:26:23 +03:00
Lauri Ojansivu 38655ee478 Merge branch 'master' of github.com:wekan/wekan 2021-05-09 07:53:08 +03:00
Lauri Ojansivu 23ca25a1ca Updated translations. 2021-05-09 07:52:45 +03:00
Enishowk 120cb4820e fix: typo 2021-05-07 18:58:24 +02:00
Enishowk 3ee0add6f6 feat: add parent name column in excel export 2021-05-07 18:54:59 +02:00
Lauri Ojansivu 8911fe5c8d Try to fix Snap: Removed linting packages.
Thanks to xet7 !
2021-05-07 18:12:49 +03:00
Lauri Ojansivu 1d9346513e Update dependencies.
Thanks to developers of dependencies !
2021-05-07 17:46:22 +03:00
Lauri Ojansivu 62150ce6c4 Updated dependencies.
Thanks to developers of dependencies!
2021-05-07 17:09:31 +03:00
Lauri Ojansivu b2d4135dca v5.28 2021-05-07 16:23:55 +03:00
Lauri Ojansivu 49e3e01ece Updated translations. 2021-05-07 13:20:53 +03:00
Lauri Ojansivu 23c2ff0e29 Updated ChangeLog. 2021-05-07 12:53:18 +03:00
Lauri Ojansivu a550c255e6 Updated dependencies.
Thanks to developers of dependencies !
2021-05-07 12:51:54 +03:00
Lauri Ojansivu 6b897faaa8 Updated ChangeLog. 2021-05-07 12:34:10 +03:00
Lauri Ojansivu 48255f6f1e Updated dependencies.
Thanks to developers of dependencies !
2021-05-07 12:32:44 +03:00
Lauri Ojansivu 45bc3bd3db Updated ChangeLog. 2021-05-07 02:23:40 +03:00
Lauri Ojansivu 5ab20a9257 Added markdown-it-mermaid for some charts support in all input fields. Replaced xss with dompurify.
Thanks to xuguotong and xet7 !

Fixes #3794
2021-05-07 02:13:20 +03:00
Lauri Ojansivu 88e4918208 Updated ChangeLog. 2021-05-06 18:29:44 +03:00
Lauri Ojansivu 521ef8b6da Updated dependencies.
Thanks to developers of dependencies !
2021-05-06 18:26:32 +03:00
Lauri Ojansivu 0d86dfa571 Updated translations. 2021-05-06 18:14:05 +03:00
Lauri Ojansivu 472350e56f Merge branch 'listenerri-patch-1' 2021-05-06 18:00:06 +03:00
listenerri 68569b9640 Update cardDate.js 2021-05-06 10:08:01 +08:00
Lauri Ojansivu 823f11d5dd v5.27 2021-04-29 13:39:08 +03:00
Lauri Ojansivu ae19018831 Updated translations. 2021-04-29 13:33:13 +03:00
Lauri Ojansivu d5b09c7b3e Updated dependencies. 2021-04-29 13:32:25 +03:00
Lauri Ojansivu d3b4aa4dc7 Updated ChangeLog. 2021-04-29 13:29:06 +03:00
Lauri Ojansivu c2da477735 Fixed Non-ASCII attachment filename will crash when downloading.
Thanks to xet7 !

Fixes #2759
2021-04-29 13:26:49 +03:00
Lauri Ojansivu 843ff8eaaa v5.26 2021-04-28 12:38:15 +03:00
Lauri Ojansivu c5143e2c54 Updated translations. 2021-04-28 12:34:30 +03:00
Lauri Ojansivu 0596f5e864 Updated ChangeLog. 2021-04-28 12:28:09 +03:00
Lauri Ojansivu 8ca1b25daf Bring back Almost-Due for Start Date.
Thanks to darren-teo !

Fixes #3766
2021-04-28 12:26:31 +03:00
Lauri Ojansivu 1f76159bfe Updated ChangeLog. 2021-04-28 12:19:43 +03:00
Lauri Ojansivu 39ece35f52 Merge pull request #3765 from HappyMushroom-TechTeam/feature/miniCard_subtaskCount
Feature/mini card subtask count
2021-04-28 12:18:03 +03:00
ryanMushy 63c1bb9e17 count subtasks just like checklists 2021-04-27 18:28:23 -07:00
Lauri Ojansivu 354622c5ad v5.25 2021-04-27 23:11:23 +03:00
Lauri Ojansivu df7fd8c900 v5.25 2021-04-27 23:02:49 +03:00
Lauri Ojansivu 7957690fca Updated translations. 2021-04-27 22:57:25 +03:00
Lauri Ojansivu 63d19447a0 Updated ChangeLog. 2021-04-27 22:50:53 +03:00
Lauri Ojansivu 018a84ec59 Merge pull request #3764 from HappyMushroom-TechTeam/feature/excel_swimlanExport
cherry pick the excel export feature to add swimlanes to the output
2021-04-27 22:47:41 +03:00
ryanMushy e5c0e623a0 cherry pick the excel export feature to add swimlanes to the output 2021-04-27 12:38:38 -07:00
ryan neal 9a2d3e15e8 Merge pull request #2 from wekan/master
newest version
2021-04-27 12:36:57 -07:00
Lauri Ojansivu c07e262e68 Updated translations. 2021-04-27 20:29:01 +03:00
Lauri Ojansivu cacb2b91ee Updated ChangeLog. 2021-04-27 20:18:37 +03:00
Lauri Ojansivu 6f269d598f Merge pull request #3762 from bentiss/nested-openapi
openapi: better handle nested schemas
2021-04-27 20:16:59 +03:00
Lauri Ojansivu 57ea254bff Updated ChangeLog. 2021-04-27 19:51:09 +03:00
Lauri Ojansivu 7e183c838f Merge pull request #3761 from HappyMushroom-TechTeam/bugfix/summernoteOnPaste
Bugfix/summernote on paste
2021-04-27 19:48:46 +03:00
Lauri Ojansivu 3ffdfd9736 Updated ChangeLog. 2021-04-27 19:47:40 +03:00
Lauri Ojansivu 621c701bef Fixed language name of Deutsch (Schweiz).
Thanks to urmel1960 !

Fixes #3763
2021-04-27 19:45:18 +03:00
Lauri Ojansivu 3c24c9966c Updated ChangeLog. 2021-04-27 19:38:20 +03:00
Lauri Ojansivu 995de525d9 Added missing postgres password to ToroDB.
Thanks to xet7 !
2021-04-27 19:36:34 +03:00
Benjamin Tissoires ae30b1220a openapi: better handle nested schemas
there is a 2 levels schemas in profile.notifications.

The code previously assumed we could only have one level, and so was not
producing the correct UsersProfileNotifications.

Fix that by being more generic in the way we retrieve the nested
subschemas.
2021-04-27 10:44:27 +02:00
ryanMushy e380ad26c2 Images are uploaded twice
- make sure only pastes which contain text are processed
- remove execCommand() as it results in errors
- enable drag & drop
- fix resize buttons to be the proper summernote commands
- remove un-needed comma
2021-04-26 23:31:07 -07:00
ryan neal 9bb31d2380 Merge pull request #1 from wekan/master
newest wekan
2021-04-26 12:10:21 -07:00
Lauri Ojansivu 8ec1e4f3fa Updated ChangeLog. 2021-04-24 20:18:04 +03:00
Lauri Ojansivu 9f0f6841b0 Updated release scripts. 2021-04-24 20:16:27 +03:00
Lauri Ojansivu 5d18f98b44 v5.24 2021-04-24 19:47:12 +03:00
Lauri Ojansivu e738177e08 Updated dependencies.
Thanks to developers of dependencies !
2021-04-24 19:40:50 +03:00
Lauri Ojansivu bb201935b9 Updated translations. 2021-04-24 19:35:48 +03:00
Lauri Ojansivu bcfe6bd616 Updated translations.
Thanks to translators and xet7 !

Fixes #3756
2021-04-24 19:08:08 +03:00
Lauri Ojansivu 9c6352a7bc Updated translations. 2021-04-23 12:53:15 +03:00
Lauri Ojansivu 9110e41f20 Updated ChangeLog. 2021-04-23 00:19:39 +03:00
Lauri Ojansivu 7ae871d3a6 Merge pull request #3753 from jrsupplee/copy-swimlane
Add copy swimlane functionality
2021-04-22 22:50:27 +03:00
Lauri Ojansivu 0ddf027d43 Updated ChangeLog. 2021-04-22 16:54:37 +03:00
Lauri Ojansivu 45124a39f3 Fix Snap: Delete extra symlink that prevented building Snap.
Thanks to xet7 !
2021-04-22 16:52:51 +03:00
John R. Supplee 4940af0573 Add copy swimlane functionality 2021-04-22 14:16:35 +02:00
Lauri Ojansivu 924b5d1733 v5.23 2021-04-22 15:16:22 +03:00
Lauri Ojansivu 2119a3a51e Updated translations. 2021-04-22 14:58:24 +03:00
Lauri Ojansivu dcda99ddf3 Updated ChangeLog. 2021-04-22 14:48:39 +03:00
Lauri Ojansivu 0e35dcd5ad Merge pull request #3749 from listenerri/patch-1
Fix: The bg color of start at button is almost-due
2021-04-22 14:44:34 +03:00
listenerri 991d42ca0b Fix: The bg color of start at button is almost-due
One minute earlier than the current time is almost-due? This should be a faulty logic.
2021-04-22 18:24:18 +08:00
Lauri Ojansivu ac242c96b7 Updated translations. 2021-04-20 21:13:04 +03:00
Lauri Ojansivu 79d45c8e33 Updated ChangeLog. 2021-04-20 21:09:43 +03:00
Lauri Ojansivu 8e9f7102f9 Merge pull request #3741 from jrsupplee/master
Bug fix for Due Cards
2021-04-20 21:07:05 +03:00
John R. Supplee 1952dc309b Bug fix for Due Cards 2021-04-20 16:23:56 +02:00
Lauri Ojansivu 5e7767247f Updated ChangeLog. 2021-04-20 10:09:49 +03:00
Lauri Ojansivu 676bf686c7 Updated dependencies.
Thanks to developers of dependencies !
2021-04-20 10:08:32 +03:00
Lauri Ojansivu 5cd6985368 Updated translations. 2021-04-20 10:02:37 +03:00
Lauri Ojansivu 807e72dcce Updated ChangeLog. 2021-04-20 09:59:30 +03:00
Lauri Ojansivu 71702b5821 Merge pull request #3733 from jrsupplee/issue-1569
Fix: Trello data without labels definition
2021-04-20 09:58:18 +03:00
Lauri Ojansivu 40c56248f1 Merge branch 'mcrute-master' 2021-04-20 08:37:40 +03:00
John R. Supplee 74ac7d8d3f Fix for issue #1569 Trello data without labels definition 2021-04-19 22:37:26 +02:00
Mike Crute e7186b47b0 Support filtering by due date 2021-04-19 07:44:09 -07:00
John R. Supplee 661e80084c Add Cards report 2021-04-17 10:27:16 +02:00
Lauri Ojansivu 12aa7ea2cb Updated ChangeLog. 2021-04-16 22:33:34 +03:00
Lauri Ojansivu ef584e2826 v5.22 2021-04-16 21:57:36 +03:00
Lauri Ojansivu f902be10b6 Updated translations. 2021-04-16 21:54:04 +03:00
Lauri Ojansivu 29b835de59 Updated ChangeLog. 2021-04-16 21:50:25 +03:00
Lauri Ojansivu 6ff9c5b58d Added German (Switzerland) (de_CH) Part 3.
Fixed lint.

Thanks to translators and xet7 !
2021-04-16 21:47:39 +03:00
Lauri Ojansivu 1b86aeb4f5 Updated ChangeLog. 2021-04-16 21:25:40 +03:00
Lauri Ojansivu dce99c00be Updated number of translated languages.
Thanks to translators and xet7 !
2021-04-16 21:24:00 +03:00
Lauri Ojansivu e47c700c36 Updated ChangeLog. 2021-04-16 21:23:14 +03:00
Lauri Ojansivu 09506c78f3 Updated translations. Added German (Switzerland) (de_CH).
Thanks to translators !
2021-04-16 21:20:45 +03:00
Lauri Ojansivu 9ec1fc0902 Updated ChangeLog. 2021-04-16 20:58:18 +03:00
Lauri Ojansivu 0b3ec2c19e Merge pull request #3724 from jrsupplee/master
Remove allowedValues from Cards.type schema
2021-04-16 20:55:50 +03:00
John R. Supplee a94bec921c Remove allowedValues from Cards.type schema 2021-04-16 19:52:09 +02:00
Lauri Ojansivu 3884da3c06 v5.21 2021-04-16 20:28:51 +03:00
Lauri Ojansivu d3fa177c7f Updated translations. 2021-04-16 20:24:19 +03:00
Lauri Ojansivu d2176e2c08 Updated ChangeLog. 2021-04-16 20:05:20 +03:00
Lauri Ojansivu 8d9c59486d Merge branch 'master' of github.com:wekan/wekan 2021-04-16 19:59:34 +03:00
Lauri Ojansivu 0e7c2b4b94 Upgraded to Meteor 2.2.
Thanks to Meteor developers!
2021-04-16 19:58:51 +03:00
Lauri Ojansivu 5c9bc1c745 Merge pull request #3723 from mfilser/bugfix-date_format_not_changed_to_local_format
Bugfix, date format not changed to local format
2021-04-16 19:57:24 +03:00
Martin Filser 5e7efa0098 Bugfix, date format not changed to local format
- Fixes #3718
- intoduced by commit 4aee129cdc
2021-04-16 17:04:36 +02:00
Lauri Ojansivu 424862e313 Updated ChangeLog. 2021-04-15 17:50:03 +03:00
Lauri Ojansivu 9b80ad5a3c Merge branch 'HappyMushroom-TechTeam-summernoteFeatureSet' 2021-04-15 17:44:26 +03:00
ryanMushy 96c6fa0276 - Add new button to insert a URL link
- Add new popover allowing you to edit URL links
- enable spell check and grammerly extension
2021-04-14 18:31:32 -07:00
Lauri Ojansivu 69305e1833 v5.20 2021-04-14 13:14:21 +03:00
Lauri Ojansivu 8aa74ab65e Updated translations. 2021-04-14 13:10:48 +03:00
Lauri Ojansivu aee12c2494 Updated ChangeLog. 2021-04-14 12:40:07 +03:00
Lauri Ojansivu 83976b3229 Merge pull request #3715 from bentiss/fix-docs
openapi: rework the allowedValues to allow for imported variables
2021-04-14 12:37:52 +03:00
Benjamin Tissoires 39f8a138d7 openapi: rework the allowedValues to allow for imported variables
Previously I was assuming all variables were declared in the same file.
Turns out that imports exists too, and we need to recurse one more time
in those imports./

Also "clean" up a bit the function to do the parsing in 2 steps:
- first find out the actual matching node in js
- then convert it based on its type
rinse wash repeat.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2021-04-14 11:32:03 +02:00
Lauri Ojansivu 120e4af7b2 Updated translations. 2021-04-14 12:26:58 +03:00
Lauri Ojansivu 15bddbc86a v5.19 2021-04-14 02:09:16 +03:00
Lauri Ojansivu 4e8b193801 Updated ChangeLog. 2021-04-14 02:00:15 +03:00
Lauri Ojansivu 37b65996a0 Merge branch 'master' of github.com:wekan/wekan 2021-04-14 01:55:38 +03:00
Lauri Ojansivu 9cd0d3488f Updated ChangeLog. 2021-04-14 01:55:31 +03:00
Lauri Ojansivu eaf07cef07 Merge pull request #3712 from HappyMushroom-TechTeam/bugfix/summernotePopover
popover needs to be destroyed anytime the details panel is closed.
2021-04-14 01:52:55 +03:00
Lauri Ojansivu 02a8775537 v5.18 2021-04-14 01:36:30 +03:00
ryanMushy f2d5698acb popover needs to be destroyed anytime the details panel is closed. 2021-04-13 15:34:59 -07:00
Lauri Ojansivu b0c0e456af Updated ChangeLog. 2021-04-14 01:23:40 +03:00
Lauri Ojansivu 0857a2ea91 Updated caniuse-lite etc dependencies.
Thanks to developers of dependencies !
2021-04-14 01:22:06 +03:00
Lauri Ojansivu 1f2e6d33ce Updated translations. 2021-04-14 01:12:21 +03:00
Lauri Ojansivu 250e0690d1 Updated ChangeLog. 2021-04-14 00:37:15 +03:00
Lauri Ojansivu e709094533 Merge pull request #3708 from jrsupplee/issue-3698
Bug fix for issue #3698
2021-04-14 00:35:43 +03:00
Lauri Ojansivu 4a5b16ee2e Updated ChangeLog. 2021-04-14 00:19:38 +03:00
Lauri Ojansivu 378d64f99a Merge pull request #3706 from jrsupplee/issue-3703
Bug fix: Rules for moving from list/swimlane
2021-04-14 00:18:05 +03:00
Lauri Ojansivu 4395760a40 Updated ChangeLog. 2021-04-14 00:16:12 +03:00
Lauri Ojansivu 8417fae89c Update Admin Panel Rules report icon and add missing translations.
Thanks to xet7 !
2021-04-14 00:11:05 +03:00
Lauri Ojansivu 6c8fae944c Merge branch 'jrsupplee-admin-reports' 2021-04-13 23:51:11 +03:00
Lauri Ojansivu decab9256b Merge branch 'admin-reports' of https://github.com/jrsupplee/wekan into jrsupplee-admin-reports 2021-04-13 23:50:37 +03:00
Lauri Ojansivu 183ed35ce8 Updated ChangeLog. 2021-04-13 23:33:24 +03:00
Lauri Ojansivu 2fcf85fd61 Merge branch 'tod31-customfield-stringtemplate' 2021-04-13 23:25:18 +03:00
Lauri Ojansivu 3613c1c75e Merge branch 'customfield-stringtemplate' of https://github.com/tod31/wekan into tod31-customfield-stringtemplate 2021-04-13 23:24:28 +03:00
Lauri Ojansivu e7813046f6 Updated ChangeLog. 2021-04-13 21:26:02 +03:00
Lauri Ojansivu 9871bf1963 Updated release scripts.
Thanks to xet7 !
2021-04-13 21:24:44 +03:00
Lauri Ojansivu b32e7b659b Updated ChangeLog. 2021-04-13 21:13:54 +03:00
Lauri Ojansivu 2201372744 Updated to Node.js v12.22.1. Thanks to Node.js developers. 2021-04-13 21:11:54 +03:00
Lauri Ojansivu 7431a082e2 Updated ChangeLog. 2021-04-13 21:07:45 +03:00
Lauri Ojansivu 6fe3edebb1 Added latest bundle symlink.
Thanks to xet7 !
2021-04-13 21:04:59 +03:00
Lauri Ojansivu 4b6406c264 Merge pull request #3692 from loganballard/fix-arm-dockerfile
Updating ARM Dockerfile
2021-04-13 21:03:58 +03:00
John R. Supplee 86f6bdf9af Merge branch 'master' of https://github.com/wekan/wekan into admin-reports 2021-04-13 13:02:57 +02:00
Lauri Ojansivu 1eeed6645d Updated ChangeLog. 2021-04-12 19:34:58 +03:00
Lauri Ojansivu bb8c4325c6 Updated dependencies.
Thanks to developers of dependencies !
2021-04-12 19:32:00 +03:00
John R. Supplee 07a3301414 Bug fix for issue #3698
* Rewrite routine for building the My Cards hierarchical list
* Use a separate publication for retrieving My Cards
* Fix bug with limit and skip projectsion
2021-04-12 17:34:02 +02:00
Martin Filser 1590701fc9 Custom Fields StringTemplate, Ctrl-Enter the same as the button "Save" 2021-04-12 17:23:51 +02:00
John R. Supplee 1d4a65d0b4 Add new rules report 2021-04-12 11:44:28 +02:00
tod31 c845d25ae5 add localization string 2021-04-12 11:14:25 +02:00
tod31 ceec27bf90 cleanup and cosmetics 2021-04-12 11:01:58 +02:00
tod31 4b90424773 event handling/focussing 2021-04-12 10:49:14 +02:00
tod31 31eb9b26b4 use tracker afterFlush to set focus 2021-04-11 20:07:31 +02:00
tod31 a8a3c9ad19 fix default value 2021-04-11 14:18:12 +02:00
tod31 5cfa03ec07 use string array to store items in database 2021-04-11 14:15:57 +02:00
John R. Supplee 17ab5978ad Bug fix: Rules for moving from list/swimlane
Issue: 3703
2021-04-11 00:09:32 +02:00
tod31 d4c69c3932 fix custom-field-stringtemplate-separator string 2021-04-09 12:46:12 +02:00
tod31 3778a9ebcf add configuration field for separator 2021-04-09 11:46:07 +02:00
tod31 880d94e220 use nonidentity instead of inequality 2021-04-09 11:46:03 +02:00
tod31 37607f72b2 code cosmetics 2021-04-09 11:45:56 +02:00
tod31 b1c26e6f64 remove empty lines 2021-04-09 11:45:48 +02:00
tod31 8164af281d add info text for placeholder 2021-04-09 11:45:40 +02:00
tod31 af676c8f26 fix custom field type name 2021-04-09 11:45:25 +02:00
tod31 b8dc7ff18e add custom field "stringtemplate" 2021-04-09 11:44:49 +02:00
John R. Supplee 4aee129cdc Remove redundant and unused code 2021-04-06 18:00:03 +02:00
John R. Supplee 03d29dd674 Updates to userAvatar and cardDetails template
* enable userAvatar to work with member and assignee
* remove userAvatarAssignee template
2021-04-06 17:50:03 +02:00
John R. Supplee 5a6f84ce34 * Add publications for admin reports
* remove broken cards from user menu
* Adjust report titles
2021-04-06 12:42:15 +02:00
John R. Supplee 0e593c7d81 Add admin reports to admin panel
* Broken cards
* Attachments
* Orphaned Attachments
2021-04-06 12:24:08 +02:00
John R. Supplee 4de830d663 Merge branch 'search' into admin-reports 2021-04-05 21:57:56 +02:00
Lauri Ojansivu 769bb7a55d Updated translations. 2021-04-04 22:09:23 +03:00
John R. Supplee ed6c6e5a25 Use new colors constants 2021-04-03 18:52:47 +02:00
John R. Supplee 302ba75729 * Fix bug with multiple label predicates
* Add new constants
2021-04-03 01:19:02 +02:00
John R. Supplee 69dc8f304c Only search label names in boards of type 'board' 2021-04-02 21:40:52 +02:00
John R. Supplee e43002d5ad Update Boards.userBoards() to only return type 'board' by default 2021-04-02 02:15:12 +02:00
John R. Supplee edd07befe2 Add a new search operator creator 2021-04-01 23:41:32 +02:00
John R. Supplee 5cc6a2f7d0 Add an avatar for the card creator
* Add avatar to minicard
* Add field to card details
* Add show option in Board / Card Settings
2021-04-01 23:40:07 +02:00
Lauri Ojansivu 926f39c96b Update translations. 2021-04-01 14:14:11 +03:00
Lauri Ojansivu abd38082de Updated ChangeLog. 2021-04-01 13:53:10 +03:00
Lauri Ojansivu 5ca90f4d22 Revert stable tag, because it did break Wekan version numbers.
Thanks to xet7 !
2021-04-01 13:47:57 +03:00
loganballard c9586e579a updating Dockefile 2021-03-31 21:46:52 -07:00
Stefan Maaßen fe7962e10a AD Simple Auth is working 2020-04-07 14:03:16 +02:00
570 changed files with 131797 additions and 69909 deletions

No files matched your search

+8 -1
View File
@@ -1,5 +1,12 @@
{
"presets": [
"@babel/preset-stage-3"
]
],
"env": {
"COVERAGE": {
"plugins": [
"istanbul"
]
}
}
}
+103 -19
View File
@@ -1,16 +1,12 @@
FROM quay.io/wekan/ubuntu:groovy-20201125.2
FROM quay.io/wekan/ubuntu:groovy-20210115
LABEL maintainer="sgr"
# 2020-12-03:
# - Above Ubuntu base image copied from Docker Hub ubuntu:groovy-20201125.2
# to Quay to avoid Docker Hub rate limits.
ENV BUILD_DEPS="gnupg gosu bsdtar wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python git ca-certificates iproute2"
ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v12.22.0 \
NODE_VERSION=v12.22.10 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -26,6 +22,7 @@ ENV \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
@@ -134,23 +131,33 @@ ENV \
SAML_PUBLIC_CERTFILE="" \
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES=""
SAML_ATTRIBUTES="" \
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 \
&& useradd --user-group -m --system --home-dir /home/wekan wekan \
&& apt-get update \
&& apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
&& apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
&& apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \
&& apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS}
# Install NodeJS
RUN set -o xtrace \
&& cd /tmp \
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" \
&& curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& grep " node-v$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt.asc | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-v$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt.asc \
&& curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$ARCHITECTURE.tar.xz" \
&& curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/SHASUMS256.txt.asc" \
&& grep " node-$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt.asc | sha256sum -c - \
&& tar -xJf "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt.asc \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs \
&& mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \
&& npm install -g npm@${NPM_VERSION} \
@@ -172,17 +179,94 @@ RUN set -o xtrace \
ENV PATH=$PATH:/home/wekan/.meteor/
# Copy source dir
USER root
RUN echo "export PATH=$PATH" >> /etc/environment
RUN set -o xtrace \
&& mkdir /home/wekan/app
USER wekan
COPY ${SRC_PATH} /home/wekan/app/
# Copy source dir
RUN set -o xtrace \
&& mkdir -p /home/wekan/app/.meteor \
&& mkdir -p /home/wekan/app/packages
COPY \
.meteor/.finished-upgraders \
.meteor/.id \
.meteor/cordova-plugins \
.meteor/packages \
.meteor/platforms \
.meteor/release \
.meteor/versions \
/home/wekan/app/.meteor/
COPY \
package.json \
settings.json \
/home/wekan/app/
COPY \
tests \
/home/wekan/app/tests/
COPY \
packages \
/home/wekan/app/packages/
USER root
RUN set -o xtrace \
&& chown -R wekan:wekan /home/wekan/app /home/wekan/.meteor
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
cd /home/wekan/app && \
/home/wekan/.meteor/meteor add standard-minifier-js && \
/home/wekan/.meteor/meteor npm install && \
/home/wekan/.meteor/meteor build --directory /home/wekan/app_build
RUN \
set -o xtrace && \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w package.json npm-shrinkwrap.json && \
npm install && \
cd node_modules/fibers && \
node build.js
USER root
# Cleanup
RUN \
set -o xtrace && \
apt-get clean -y && \
apt-get autoremove -y && \
rm -Rf /tmp/* && \
rm -Rf /home/wekan/app_build && \
rm -Rf /var/cache/apt /var/lib/apt/lists && \
rm -Rf /var/lib/apt/lists/*
USER wekan
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
+12 -13
View File
@@ -3,17 +3,18 @@ version: '3.7'
services:
wekandb-dev:
image: mongo:4.0.12
image: mongo:4.4
container_name: wekan-dev-db
restart: unless-stopped
command: mongod --smallfiles --oplogSize 128
command: mongod --oplogSize 128
networks:
- wekan-dev-tier
expose:
- 27017
volumes:
- wekan-dev-db:/data/db
- wekan-dev-db-dump:/dump
- /etc/localtime:/etc/localtime:ro
- ./volumes/wekan-db:/data/db
- ./volumes/wekan-db-dump:/dump
wekan-dev:
container_name: wekan-dev-app
@@ -35,15 +36,13 @@ services:
depends_on:
- wekandb-dev
volumes:
- ..:/app:delegated
command:
sleep infinity
volumes:
wekan-dev-db:
driver: local
wekan-dev-db-dump:
driver: local
- /etc/localtime:/etc/localtime:ro
- ../client:/home/wekan/app/client
- ../models:/home/wekan/app/models
- ../config:/home/wekan/app/config
- ../i18n:/home/wekan/app/i18n
- ../server:/home/wekan/app/server
- ../public:/home/wekan/app/public
networks:
wekan-dev-tier:
+36
View File
@@ -0,0 +1,36 @@
*~
*.swp
.meteor-spk
*.sublime-workspace
tmp/
node_modules/
npm-debug.log
.gitmodules
.vscode/
.idea/
.build/*
**/parts/
**/stage
**/prime
**/*.snap
snap/.snapcraft/
.idea
.DS_Store
.DS_Store?
.build*
*.browserify.js.cached
*.browserify.js.map
.build*
versions.json
.versions
.npm
.build*
._*
.Trashes
Thumbs.db
ehthumbs.db
.eslintcache
.meteor/local
.devcontainer/docker-compose.extend.yml
.devcontainer/volumes*/
.git
+2
View File
@@ -122,6 +122,7 @@
"Activities": true,
"Attachments": true,
"Boards": true,
"CardCommentReactions": true,
"CardComments": true,
"DatePicker": true,
"Cards": true,
@@ -156,6 +157,7 @@
"Integrations": true,
"HTTP": true,
"AccountSettings": true,
"TableVisibilityModeSettings": true,
"Announcements": true,
"Swimlanes": true,
"ChecklistItems": true,
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.0
node-engine: 12.22.10
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.0
node-engine: 12.22.10
node-packages:
- node-gyp
- node-pre-gyp
+24 -21
View File
@@ -1,32 +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.
Email settings:
- 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 ?
* Wekan version:
* If this is about old version of Wekan, what upgrade problem you have?:
* 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/mongodb 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 Version:
* Node.js Version:
* MongoDB Version:
* Wekan only works on newest desktop Firefox/Chromium/Chrome/Edge/Chromium Edge and mobile Chrome. 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 -->
+63
View File
@@ -0,0 +1,63 @@
name: Docker
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
on:
schedule:
- cron: '28 23 * * *'
push:
branches: [ master ]
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
pull_request:
branches: [ master ]
env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v2
# 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
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
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
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
-12
View File
@@ -1,12 +0,0 @@
on: [push]
jobs:
zap_scan:
runs-on: ubuntu-latest
name: Scan the webapplication
steps:
- name: OWASP ZAP Scan
runs-on: ubuntu-latest
uses: zaproxy/action-baseline@v0.4.0
with:
target: 'https://boards.wekan.team/sign-in'
+25
View File
@@ -0,0 +1,25 @@
name: Release Charts
on:
push:
branches:
- master
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.1.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+160
View File
@@ -0,0 +1,160 @@
name: Test suite
on:
push:
branches:
- master
pull_request:
jobs:
# the following are optional jobs and need to be configured according
# to this project's settings:
#
# lintcode:
# name: Javascript lint
# runs-on: ubuntu-latest
# steps:
# - name: checkout
# uses: actions/checkout@v2
#
# - name: setup node
# uses: actions/setup-node@v1
# with:
# node-version: '12.x'
#
# - name: cache dependencies
# uses: actions/cache@v1
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
#
# - run: npm install
# - run: npm run lint:code
#
# lintstyle:
# name: SCSS lint
# runs-on: ubuntu-latest
# needs: [lintcode]
# steps:
# - name: checkout
# uses: actions/checkout@v2
#
# - name: setup node
# uses: actions/setup-node@v1
# with:
# node-version: '12.x'
#
# - name: cache dependencies
# uses: actions/cache@v1
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
# - run: npm install
# - run: npm run lint:style
#
# lintdocs:
# name: documentation lint
# runs-on: ubuntu-latest
# needs: [lintcode,lintstyle]
# steps:
# - name: checkout
# uses: actions/checkout@v2
#
# - name: setup node
# uses: actions/setup-node@v1
# with:
# node-version: '12.x'
#
# - name: cache dependencies
# uses: actions/cache@v1
# with:
# path: ~/.npm
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
# restore-keys: |
# ${{ runner.os }}-node-
#
# - run: npm install
# - run: npm run lint:markdown
tests:
name: Meteor ${{ matrix.meteor }} tests
runs-on: ubuntu-latest
steps:
# CHECKOUTS
- name: Checkout
uses: actions/checkout@v2
# CACHING
- name: Install Meteor
id: cache-meteor-install
uses: actions/cache@v2
with:
path: ~/.meteor
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
restore-keys: |
v1-meteor-
- name: Cache NPM dependencies
id: cache-meteor-npm
uses: actions/cache@v2
with:
path: ~/.npm
key: v1-npm-${{ hashFiles('package-lock.json') }}
restore-keys: |
v1-npm-
- name: Cache Meteor build
id: cache-meteor-build
uses: actions/cache@v2
with:
path: |
.meteor/local/resolver-result-cache.json
.meteor/local/plugin-cache
.meteor/local/isopacks
.meteor/local/bundler-cache/scanner
key: v1-meteor_build_cache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
v1-meteor_build_cache-
- name: Setup meteor
uses: meteorengineer/setup-meteor@v1
with:
meteor-release: '2.2'
- name: Install NPM Dependencies
run: meteor npm ci
- name: Run Tests
run: sh ./test-wekan.sh -cv
- name: Upload coverage
uses: actions/upload-artifact@v2
with:
name: coverage-folder
path: .coverage/
coverage:
name: Coverage report
runs-on: ubuntu-latest
needs: [tests]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Download coverage
uses: actions/download-artifact@v2
with:
name: coverage-folder
path: .coverage/
- name: Coverage Report
uses: VeryGoodOpenSource/very_good_coverage@v1.1.1
with:
path: ".coverage/lcov.info"
min_coverage: 1 # TODO add tests and increase to 95!
+7
View File
@@ -32,3 +32,10 @@ ehthumbs.db
.eslintcache
.meteor/local
.devcontainer/docker-compose.extend.yml
.devcontainer/volumes*/
.coverage
# Helm chart
# Chart dependencies
/helm/wekan/**/*.tgz
/helm/wekan/charts
+10 -9
View File
@@ -6,7 +6,7 @@
meteor-base@1.4.0
# Build system
ecmascript@0.15.0
ecmascript@0.15.1
standard-minifier-css@1.7.2
standard-minifier-js@2.6.0
mquandalle:jade
@@ -17,13 +17,13 @@ es5-shim@4.8.0
# Collections
aldeed:collection2
cfs:standard-packages
wekan-cfs-standard-packages
cottz:publish-relations
dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
mongo@1.10.1
mongo@1.11.0
mquandalle:collection-mutations
# Account system
@@ -60,11 +60,10 @@ reactive-var@1.0.11
fortawesome:fontawesome
mousetrap:mousetrap
mquandalle:jquery-textcomplete
mquandalle:jquery-ui-drag-drop-sort
mquandalle:mousetrap-bindglobal
peerlibrary:blaze-components@=0.15.1
templates:tabs
verron:autosize
meteor-autosize
simple:json-routes
rajit:bootstrap3-datepicker
shell-server@0.5.0
@@ -75,7 +74,7 @@ horka:swipebox
dynamic-import@0.6.0
accounts-password@1.7.0
cfs:gridfs
wekan-cfs-gridfs
rzymek:fullcalendar
momentjs:moment@2.22.2
browser-policy-framing@1.1.0
@@ -83,7 +82,6 @@ mquandalle:moment
msavin:usercache
# Keep stylus in 1.1.0, because building v2 takes extra 52 minutes.
coagmano:stylus@1.1.0!
lucasantoniassi:accounts-lockout
meteorhacks:subs-manager
meteorhacks:picker
lamhieu:unblock
@@ -91,8 +89,7 @@ meteorhacks:aggregate@1.3.0
wekan-markdown
konecty:mongo-counter
percolate:synced-cron
cfs:filesystem
tmeasday:check-npm-versions
wekan-cfs-filesystem
steffo:meteor-accounts-saml
rajit:bootstrap3-datepicker-fi
rajit:bootstrap3-datepicker-ar
@@ -145,3 +142,7 @@ rajit:bootstrap3-datepicker-zh-tw
staringatlights:fast-render
spacebars
easylogic:summernote
pascoual:pdfkit
wekan-accounts-lockout
lmieulet:meteor-coverage
meteortesting:mocha
+1 -1
View File
@@ -1 +1 @@
METEOR@2.1
METEOR@2.2
+57 -53
View File
@@ -1,7 +1,7 @@
3stack:presence@1.1.2
accounts-base@1.8.0
accounts-base@1.9.0
accounts-oauth@1.2.0
accounts-password@1.7.0
accounts-password@1.7.1
aldeed:collection2@2.10.0
aldeed:collection2-core@1.2.0
aldeed:schema-deny@1.1.0
@@ -11,36 +11,19 @@ allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
audit-argument-checks@1.0.7
autoupdate@1.7.0
babel-compiler@7.6.0
babel-compiler@7.6.1
babel-runtime@1.5.0
base64@1.0.12
binary-heap@1.0.11
blaze@2.3.4
blaze-tools@1.0.10
blaze@2.5.0
blaze-tools@1.1.2
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.1.3
caching-html-compiler@1.2.0
callback-hook@1.3.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
@@ -49,18 +32,18 @@ coffeescript-compiler@2.4.1
cottz:publish-relations@2.0.8
dburles:collection-helpers@1.1.0
ddp@1.4.0
ddp-client@2.4.0
ddp-client@2.4.1
ddp-common@1.4.0
ddp-rate-limiter@1.0.9
ddp-server@2.3.2
ddp-server@2.3.3
deps@1.0.12
diff-sequence@1.1.1
dynamic-import@0.6.0
easylogic:summernote@0.8.8
ecmascript@0.15.0
ecmascript@0.15.1
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.11.0
ecmascript-runtime-server@0.10.0
ecmascript-runtime-client@0.11.1
ecmascript-runtime-server@0.10.1
ejson@1.1.1
email@2.0.0
es5-shim@4.8.0
@@ -70,10 +53,10 @@ fortawesome:fontawesome@4.7.0
geojson-utils@1.0.10
horka:swipebox@1.0.2
hot-code-push@1.0.4
html-tools@1.0.11
htmljs@1.0.11
http@1.4.3
id-map@1.1.0
html-tools@1.1.2
htmljs@1.1.1
http@1.4.4
id-map@1.1.1
idmontie:migrations@1.0.3
inter-process-messaging@0.1.1
jquery@1.11.11
@@ -84,15 +67,16 @@ 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.0
launch-screen@1.2.1
livedata@1.0.18
lmieulet:meteor-coverage@3.2.0
localstorage@1.2.0
logging@1.2.0
lucasantoniassi:accounts-lockout@1.0.0
matb33:collection-hooks@0.9.1
matteodem:easy-search@1.6.4
mdg:validation-error@0.5.1
meteor@1.9.3
meteor-autosize@5.0.1
meteor-base@1.4.0
meteor-platform@1.2.6
meteorhacks:aggregate@1.3.0
@@ -100,19 +84,22 @@ meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
minifier-css@1.5.3
meteortesting:browser-tests@1.3.4
meteortesting:mocha@2.0.1
meteortesting:mocha-core@8.0.1
minifier-css@1.5.4
minifier-js@2.6.0
minifiers@1.1.8-faster-rebuild.0
minimongo@1.6.1
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.10.1
mongo@1.11.1
mongo-decimal@0.1.2
mongo-dev-server@1.1.0
mongo-id@1.0.7
mongo-id@1.0.8
mongo-livedata@1.0.12
mousetrap:mousetrap@1.4.6_1
mquandalle:autofocus@1.0.0
@@ -120,17 +107,17 @@ 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:jquery-ui-drag-drop-sort@0.2.0
mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1
msavin:usercache@1.8.0
npm-bcrypt@0.9.3
npm-mongo@3.8.1
npm-bcrypt@0.9.4
npm-mongo@3.9.0
oauth@1.3.2
oauth2@1.3.0
observe-sequence@1.0.16
ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
pascoual:pdfkit@1.0.7
peerlibrary:assert@0.3.0
peerlibrary:base-component@0.16.0
peerlibrary:blaze-components@0.15.1
@@ -191,7 +178,7 @@ 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.0
react-fast-refresh@0.1.1
reactive-dict@1.3.0
reactive-var@1.0.11
reload@1.3.1
@@ -208,10 +195,10 @@ 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.1
socket-stream-client@0.3.3
softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
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
@@ -220,24 +207,41 @@ staringatlights:inject-data@2.3.0
steffo:meteor-accounts-saml@0.0.18
tap:i18n@1.8.2
templates:tabs@2.3.0
templating@1.3.2
templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
tmeasday:check-npm-versions@0.3.2
templating@1.4.0
templating-compiler@1.4.1
templating-runtime@1.4.0
templating-tools@1.2.0
tracker@1.2.0
twbs:bootstrap@3.3.6
ui@1.0.13
underscore@1.0.10
url@1.3.1
url@1.3.2
useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
webapp@1.10.0
webapp@1.10.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-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.0
TRAVIS_NODE_VERSION: 12.22.10
TRAVIS_NPM_VERSION: latest
before_install:
+1 -1
View File
@@ -39,7 +39,7 @@ host = https://www.transifex.com
# tap:i18n requires us to use `-` separator in the language identifiers whereas
# Transifex uses a `_` separator, without an option to customize it on one side
# or the other, so we need to do a Manual mapping.
lang_map = ar_EG:ar-EG, bg_BG:bg, 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, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
lang_map = 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, et_EE:et-EE, 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, gl_ES:gl-ES, 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, ru_UA:ru-UA, sl_SI:sl, uk_UA:uk-UA, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK
[wekan.application]
file_filter = i18n/<lang>.i18n.json
+1714 -3
View File
File diff suppressed because it is too large. Load diff
+34 -8
View File
@@ -1,8 +1,8 @@
FROM quay.io/wekan/ubuntu:groovy-20210115
FROM ubuntu:rolling
LABEL maintainer="wekan"
# 2020-12-03:
# - Above Ubuntu base image copied from Docker Hub ubuntu:groovy-20201125.2
# 2021-09-18:
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
# to Quay to avoid Docker Hub rate limits.
# Set the environment variables (defaults where required)
@@ -12,7 +12,7 @@ ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
NODE_VERSION=v12.22.0 \
NODE_VERSION=v12.22.10 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -28,6 +28,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \
RICHER_CARD_COMMENT_EDITOR=false \
CARD_OPENED_WEBHOOK_ENABLED=false \
ATTACHMENTS_STORE_PATH="" \
@@ -64,6 +65,9 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
LDAP_ENABLE=false \
LDAP_PORT=389 \
LDAP_HOST="" \
LDAP_AD_SIMPLE_AUTH="" \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_BASEDN="" \
LDAP_LOGIN_FALLBACK=false \
LDAP_RECONNECT=true \
@@ -81,8 +85,6 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
LDAP_ENCRYPTION=false \
LDAP_CA_CERT="" \
LDAP_REJECT_UNAUTHORIZED=false \
LDAP_USER_AUTHENTICATION=false \
LDAP_USER_AUTHENTICATION_FIELD=uid \
LDAP_USER_SEARCH_FILTER="" \
LDAP_USER_SEARCH_SCOPE="" \
LDAP_USER_SEARCH_FIELD="" \
@@ -137,7 +139,17 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
SAML_IDENTIFIER_FORMAT="" \
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
SAML_ATTRIBUTES="" \
ORACLE_OIM_ENABLED=false
ORACLE_OIM_ENABLED=false \
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"
#---------------------------------------------------------------------
# Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app
@@ -295,6 +307,9 @@ RUN \
cd /home/wekan/app_build/bundle/programs/server/ && \
chmod u+w *.json && \
gosu wekan:wekan npm install && \
cd node_modules/fibers && \
node build.js && \
cd ../.. && \
#gosu wekan:wekan npm install bcrypt && \
# 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 && \
@@ -307,6 +322,7 @@ RUN \
apt-get remove --purge -y ${BUILD_DEPS} && \
apt-get autoremove -y && \
npm uninstall -g api2html &&\
rm -R /tmp/* && \
rm -R /var/lib/apt/lists/* && \
rm -R /home/wekan/.meteor && \
rm -R /home/wekan/app && \
@@ -319,4 +335,14 @@ ENV PORT=8080
EXPOSE $PORT
USER wekan
CMD ["node", "/build/main.js"]
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:
# NODE_OPTIONS="--max_old_space_size=4096"
# Add more stack:
# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js"
#---------------------------------------------------------------------
#
# CMD ["node", "/build/main.js"]
CMD ["bash", "-c", "ulimit -s 65500; exec node --stack-size=65500 /build/main.js"]
+31 -11
View File
@@ -4,16 +4,25 @@ 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.0 \
WEKAN_VERSION=3.96 \
WEKAN_ARCHITECTURE=arm64
NODE_VERSION=v12.22.10 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64 \
NODE_OPTIONS="--max_old_space_size=4096"
# Install dependencies
RUN apk update && apk add ca-certificates outils-sha1 && \
\
# Download qemu static for our architecture
wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCHITECTURE}-static.tar.gz -O - | tar -xz && \
\
#---------------------------------------------------------------------
# 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 && \
\
# Download qemu static for our architecture
wget https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCHITECTURE}-static.tar.gz -O - | tar -xz && \
\
# Download wekan and shasum
wget https://releases.wekan.team/raspi3/wekan-${WEKAN_VERSION}-${WEKAN_ARCHITECTURE}.zip && \
wget https://releases.wekan.team/raspi3/SHA256SUMS.txt && \
@@ -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.0 \
NODE_VERSION=v12.22.10 \
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"]
+30 -25
View File
@@ -1,6 +1,6 @@
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
# Wekan - Open Source kanban
# WeKan ® - Open Source kanban
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan)
@@ -14,31 +14,36 @@
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_shield)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619/badge)](https://bestpractices.coreinfrastructure.org/projects/4619)
## [Translate Wekan at Transifex](https://transifex.com/wekan/wekan)
## [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 .
## [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).
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.
## Chat
[Discussions][discussions] - Wekan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[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)
## Docker: Please only use Docker release tags
Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874
## FAQ
**NOTE**:
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
- Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
## About Wekan
## About WeKan ®
Wekan is an completely [Open Source][open_source] and [Free software][free_software]
WeKan ® is an completely [Open Source][open_source] and [Free software][free_software]
collaborative kanban board application with MIT license.
Whether you’re maintaining a personal todo list, planning your holidays with some friends,
@@ -46,58 +51,58 @@ or working in a team on your next revolutionary idea, Kanban boards are an unbea
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.
Since Wekan is a free software, you don’t have to trust us with your data and can
Since WeKan ® is a free software, you don’t have to trust us with your data and can
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 ® 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 62 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.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 70 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.
## Requirements
- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
[Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
- 1 GB RAM minimum free for WeKan ®. Production server should have minimum total 4 GB RAM.
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
- SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
Wekan on Sandstorm is not usually affected by any Standalone Wekan (Snap/Docker/Source) security issues.
- SECURITY: Updating to newest WeKan ® version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest WeKan ® is supported.
WeKan ® on Sandstorm is not usually affected by any Standalone WeKan ® (Snap/Docker/Source) security issues.
- [Reporting all new bugs immediately](https://github.com/wekan/wekan/issues).
New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of Wekan database once a day miminum.
New features and fixes are added to WeKan ® [many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of WeKan ® database once a day miminum.
Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
Some bug can cause Wekan board to not load at all, requiring manual fixing of database content.
Some bug can cause WeKan ® board to not load at all, requiring manual fixing of database content.
## Roadmap and Demo
[Roadmap][roadmap_wekan] - Public read-only board at Wekan demo.
[Roadmap][roadmap_wekan] - Public read-only board at WeKan ® demo.
[Developer Documentation][dev_docs]
- There is many companies and individuals contributing code to Wekan, to add features and bugfixes
[many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
- There is many companies and individuals contributing code to WeKan ®, to add features and bugfixes
[many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
- [Commercial Support](https://wekan.team/commercial-support/).
We also welcome sponsors for features and bugfixes.
By working directly with Wekan you get the benefit of active maintenance and new features added by growing Wekan developer community.
By working directly with WeKan ® you get the benefit of active maintenance and new features added by growing WeKan ® developer community.
## Screenshot
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)
[![Screenshot of Wekan][screenshot_wekan]][roadmap_wekan]
[![Screenshot of WeKan ®][screenshot_wekan]][roadmap_wekan]
## License
Wekan is released under the very permissive [MIT license](LICENSE), and made
WeKan ® is released under the very permissive [MIT license](LICENSE), and made
with [Meteor](https://www.meteor.com).
[platforms]: https://github.com/wekan/wekan/wiki/Platforms
+4 -4
View File
@@ -51,8 +51,8 @@ This also means all Standalone Wekan functionality works in offline local networ
Wekan is used by companies that have [thousands of users](https://github.com/wekan/wekan/wiki/AWS) and at healthcare.
Wekan uses xss package for input fields like cards, as you can see from
[package.json](https://github.com/wekan/wekan/blob/devel/package.json). Other used versions can be seen from
[Meteor versions file](https://github.com/wekan/wekan/blob/devel/.meteor/versions).
[package.json](https://github.com/wekan/wekan/blob/master/package.json). Other used versions can be seen from
[Meteor versions file](https://github.com/wekan/wekan/blob/master/.meteor/versions).
Forms can include markdown links, html, image tags etc like you see at https://wekan.github.io .
It's possible to add attachments to cards, and markdown/html links to files.
@@ -69,7 +69,7 @@ access to outside of Wekan grain.
Standalone Wekan only has password auth currently, there is work in progress to add
[oauth2](https://github.com/wekan/wekan/pull/1578), [Openid](https://github.com/wekan/wekan/issues/538),
[LDAP](https://github.com/wekan/wekan/issues/119) etc. If you need more login security for Standalone Wekan now,
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
like for example [AWS WAF](https://aws.amazon.com/waf/).
[All Wekan Platforms](https://github.com/wekan/wekan/wiki/Platforms)
@@ -106,7 +106,7 @@ a security issue, we'd like to know about it, and also how to fix it:
Typical already known or "no impact" bugs such as:
- Brute force password guessign. Currently there is
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release).
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v080-2018-04-04-wekan-release).
- Security issues related to that Wekan uses Meteor 1.6.0.1 related packages, and upgrading to newer
Meteor 1.6.1 is complicated process that requires lots of changes to many dependency packages.
Upgrading [has been tried many times, spending a lot of time](https://github.com/meteor/meteor/issues/9609)
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v5.17.0"
appVersion: "v6.07.0"
files:
userUploads:
- README.md
+134 -17
View File
@@ -5,6 +5,9 @@
# Wekan API Python CLI, originally from here, where is more details:
# https://github.com/wekan/wekan/wiki/New-card-with-Python3-and-REST-API
# TODO:
# addcustomfieldtoboard: There is error: Settings must be object. So adding does not work yet.
try:
# python 3
from urllib.parse import urlencode
@@ -23,17 +26,25 @@ if arguments == 0:
print("AUTHORID is USERID that writes card.")
print("If *nix: chmod +x api.py => ./api.py users")
print("Syntax:")
print(" python3 api.py users # All users")
print(" python3 api.py boards USERID # Boards of USERID")
print(" python3 api.py board BOARDID # Info of BOARDID")
print(" python3 api.py swimlanes BOARDID # Swimlanes of BOARDID")
print(" python3 api.py lists BOARDID # Lists of BOARDID")
print(" python3 api.py users # All users")
print(" python3 api.py boards # All Public Boards")
print(" python3 api.py boards USERID # Boards of USERID")
print(" python3 api.py board BOARDID # Info of BOARDID")
print(" python3 api.py customfields BOARDID # Custom Fields of BOARDID")
print(" python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID")
print(" python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board")
print(" python3 api.py swimlanes BOARDID # Swimlanes of BOARDID")
print(" python3 api.py lists BOARDID # Lists of BOARDID")
print(" python3 api.py list BOARDID LISTID # Info of LISTID")
print(" python3 api.py createlist BOARDID LISTTITLE # Create list")
print(" python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION")
print(" python3 api.py editcard BOARDID LISTID CARDID NEWCARDTITLE NEWCARDDESCRIPTION")
print(" python3 api.py listattachments BOARDID # List attachments")
# TODO:
# print(" python3 api.py attachmentdownload BOARDID ATTACHMENTID # One attachment as file")
# print(" python3 api.py attachmentsdownload BOARDID # All attachments as files")
# print(" python3 api.py attachmentjson BOARDID ATTACHMENTID # One attachment as JSON base64")
# print(" python3 api.py attachmentbinary BOARDID ATTACHMENTID # One attachment as binary file")
# print(" python3 api.py attachmentdownload BOARDID ATTACHMENTID # One attachment as file")
# print(" python3 api.py attachmentsdownload BOARDID # All attachments as files")
exit
# ------- SETTINGS START -------------
@@ -61,17 +72,29 @@ chmod +x api.py
=== Wekan API Python CLI: Shows IDs for addcard ===
AUTHORID is USERID that writes card.
Syntax:
python3 api.py users # All users
python3 api.py boards USERID # Boards of USERID
python3 api.py board BOARDID # Info of BOARDID
python3 api.py swimlanes BOARDID # Swimlanes of BOARDID
python3 api.py lists BOARDID # Lists of BOARDID
python3 api.py users # All users
python3 api.py boards USERID # Boards of USERID
python3 api.py board BOARDID # Info of BOARDID
python3 api.py customfields BOARDID # Custom Fields of BOARDID
python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID
python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board
python3 api.py swimlanes BOARDID # Swimlanes of BOARDID
python3 api.py lists BOARDID # Lists of BOARDID
python3 api.py list BOARDID LISTID # Info of LISTID
python3 api.py createlist BOARDID LISTTITLE # Create list
python3 api.py addcard AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION
python3 api.py editcard BOARDID LISTID CARDID NEWCARDTITLE NEWCARDDESCRIPTION
python3 api.py listattachments BOARDID # List attachments
python3 api.py attachmentjson BOARDID ATTACHMENTID # One attachment as JSON base64
python3 api.py attachmentbinary BOARDID ATTACHMENTID # One attachment as binary file
=== ADD CUSTOM FIELD TO BOARD ===
Type: text, number, date, dropdown, checkbox, currency, stringtemplate.
python3 api.py addcustomfieldtoboard cmx3gmHLKwAXLqjxz LcDW4QdooAx8hsZh8 "SomeField" "date" "" true true true true
=== USERS ===
python3 api.py users
@@ -127,6 +150,7 @@ l = 'lists'
sw = 'swimlane'
sws = 'swimlanes'
cs = 'cards'
cf = 'custom-fields'
bs = 'boards'
atl = 'attachmentslist'
at = 'attachment'
@@ -144,10 +168,34 @@ apikey = d['token']
# ------- LOGIN TOKEN END -----------
if arguments == 10:
if sys.argv[1] == 'addcustomfieldtoboard':
# ------- ADD CUSTOM FIELD TO BOARD START -----------
authorid = sys.argv[2]
boardid = sys.argv[3]
name = sys.argv[4]
type1 = sys.argv[5]
settings = str(json.loads(sys.argv[6]))
# There is error: Settings must be object. So this does not work yet.
#settings = {'currencyCode': 'EUR'}
print(type(settings))
showoncard = sys.argv[7]
automaticallyoncard = sys.argv[8]
showlabelonminicard = sys.argv[9]
showsumattopoflist = sys.argv[10]
customfieldtoboard = wekanurl + apiboards + boardid + s + cf
# Add Custom Field to Board
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'authorId': '{}'.format(authorid), 'name': '{}'.format(name), 'type': '{}'.format(type1), 'settings': '{}'.format(settings), 'showoncard': '{}'.format(showoncard), 'automaticallyoncard': '{}'.format(automaticallyoncard), 'showlabelonminicard': '{}'.format(showlabelonminicard), 'showsumattopoflist': '{}'.format(showsumattopoflist)}
body = requests.post(customfieldtoboard, data=post_data, headers=headers)
print(body.text)
# ------- ADD CUSTOM FIELD TO BOARD END -----------
if arguments == 7:
if sys.argv[1] == 'addcard':
# ------- WRITE TO CARD START -----------
# ------- ADD CARD START -----------
authorid = sys.argv[2]
boardid = sys.argv[3]
swimlaneid = sys.argv[4]
@@ -155,12 +203,33 @@ if arguments == 7:
cardtitle = sys.argv[6]
carddescription = sys.argv[7]
cardtolist = wekanurl + apiboards + boardid + s + l + s + listid + s + cs
# Write to card
# Add card
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
post_data = {'authorId': '{}'.format(authorid), 'title': '{}'.format(cardtitle), 'description': '{}'.format(carddescription), 'swimlaneId': '{}'.format(swimlaneid)}
body = requests.post(cardtolist, data=post_data, headers=headers)
print(body.text)
# ------- WRITE TO CARD END -----------
# ------- ADD CARD END -----------
if arguments == 6:
if sys.argv[1] == 'editcard':
# ------- EDIT CARD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
newcardtitle = sys.argv[5]
newcarddescription = sys.argv[6]
edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid
print(edcard)
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
put_data = {'title': '{}'.format(newcardtitle), 'description': '{}'.format(newcarddescription)}
body = requests.put(edcard, data=put_data, headers=headers)
print("=== EDIT CARD ===\n")
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- EDIT CARD END -----------
if arguments == 3:
@@ -177,6 +246,32 @@ if arguments == 3:
print(body.text)
# ------- CREATE LIST END -----------
if sys.argv[1] == 'list':
# ------- LIST OF BOARD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
listone = wekanurl + apiboards + boardid + s + l + s + listid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== INFO OF ONE LIST ===\n")
body = requests.get(listone, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF BOARD END -----------
if sys.argv[1] == 'customfield':
# ------- INFO OF CUSTOM FIELD START -----------
boardid = sys.argv[2]
customfieldid = sys.argv[3]
customfieldone = wekanurl + apiboards + boardid + s + cf + s + customfieldid
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== INFO OF ONE CUSTOM FIELD ===\n")
body = requests.get(customfieldone, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- INFO OF CUSTOM FIELD END -----------
if arguments == 2:
# ------- BOARDS LIST START -----------
@@ -190,8 +285,8 @@ if arguments == 2:
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- BOARDS LIST END -----------
if sys.argv[1] == 'board':
if sys.argv[1] == 'board':
# ------- BOARD INFO START -----------
boardid = sys.argv[2]
board = wekanurl + apiboards + boardid
@@ -202,6 +297,17 @@ if arguments == 2:
print(data2)
# ------- BOARD INFO END -----------
if sys.argv[1] == 'customfields':
# ------- CUSTOM FIELDS OF BOARD START -----------
boardid = sys.argv[2]
boardcustomfields = wekanurl + apiboards + boardid + s + cf
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
body = requests.get(boardcustomfields, headers=headers)
print("=== CUSTOM FIELDS OF BOARD ===\n")
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- CUSTOM FIELDS OF BOARD END -----------
if sys.argv[1] == 'swimlanes':
boardid = sys.argv[2]
swimlanes = wekanurl + apiboards + boardid + s + sws
@@ -217,7 +323,7 @@ if arguments == 2:
# ------- LISTS OF BOARD START -----------
boardid = sys.argv[2]
attachments = wekanurl + apiboards + boardid
lists = wekanurl + apiboards + boardid + s + l
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== LISTS ===\n")
body = requests.get(lists, headers=headers)
@@ -249,3 +355,14 @@ if arguments == 1:
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LIST OF USERS END -----------
if sys.argv[1] == 'boards':
# ------- LIST OF PUBLIC BOARDS START -----------
headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)}
print("=== PUBLIC BOARDS ===\n")
listpublicboards = wekanurl + apiboards
body = requests.get(listpublicboards, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LIST OF PUBLIC BOARDS END -----------
+26 -4
View File
@@ -12,7 +12,7 @@ template(name="boardActivities")
+activity(activity=activityData card=card mode=mode)
template(name="cardActivities")
each activityData in currentCard.activities
each activityData in activities
+activity(activity=activityData card=card mode=mode)
template(name="editOrDeleteComment")
@@ -21,6 +21,26 @@ template(name="editOrDeleteComment")
= ' - '
a.js-delete-comment {{_ "delete"}}
template(name="deleteCommentPopup")
p {{_ "comment-delete"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
template(name="commentReactions")
.reactions
each reaction in reactions
span.reaction(class="{{#if isSelected reaction.userIds}}selected{{/if}}" data-codepoint="#{reaction.reactionCodepoint}" title="{{userNames reaction.userIds}}")
span.reaction-codepoint !{reaction.reactionCodepoint}
span.reaction-count #{reaction.userIds.length}
if (currentUser.isBoardMember)
a.open-comment-reaction-popup(title="{{_ 'addReactionPopup-title'}}")
i.fa.fa-smile-o
i.fa.fa-plus
template(name="addReactionPopup")
.reactions-popup
each codepoint in codepoints
span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint}
template(name="activity")
.activity
+userAvatar(userId=activity.user._id)
@@ -120,10 +140,12 @@ template(name="activity")
= activity.comment.text
.edit-controls
button.primary(type="submit") {{_ 'edit'}}
.fa.fa-times-thin.js-close-inlined-form
else
.activity-comment
+viewer
= activity.comment.text
+commentReactions(reactions=activity.comment.reactions commentId=activity.comment._id)
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
if($eq currentUser._id activity.comment.userId)
+editOrDeleteComment
@@ -150,20 +172,20 @@ template(name="activity")
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
if($eq activity.activityType 'a-endAt')
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
if($eq mode 'board')
if($eq activity.activityType 'a-receivedAt')
| {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}.
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
+85 -17
View File
@@ -1,4 +1,4 @@
import sanitizeXss from 'xss';
import DOMPurify from 'dompurify';
const activitiesPerPage = 500;
@@ -13,14 +13,14 @@ BlazeComponent.extendComponent({
this.autorun(() => {
let mode = this.data().mode;
const capitalizedMode = Utils.capitalize(mode);
let thisId, searchId;
let searchId;
if (mode === 'linkedcard' || mode === 'linkedboard') {
thisId = Session.get('currentCard');
searchId = Cards.findOne({ _id: thisId }).linkedId;
searchId = Utils.getCurrentCard().linkedId;
mode = mode.replace('linked', '');
} else if (mode === 'card') {
searchId = Utils.getCurrentCardId();
} else {
thisId = Session.get(`current${capitalizedMode}`);
searchId = thisId;
searchId = Session.get(`current${capitalizedMode}`);
}
const limit = this.page.get() * activitiesPerPage;
const user = Meteor.user();
@@ -54,6 +54,13 @@ BlazeComponent.extendComponent({
},
}).register('activities');
Template.activities.helpers({
activities() {
const ret = this.card.activities();
return ret;
},
});
BlazeComponent.extendComponent({
checkItem() {
const checkItemId = this.currentData().activity.checklistItemId;
@@ -113,8 +120,10 @@ BlazeComponent.extendComponent({
).getLabelById(lastLabelId);
if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) {
return lastLabel.color;
} else {
} else if (lastLabel.name !== undefined && lastLabel.name !== '') {
return lastLabel.name;
} else {
return null;
}
},
@@ -162,11 +171,15 @@ BlazeComponent.extendComponent({
{
href: source.url,
},
sanitizeXss(source.system),
DOMPurify.sanitize(source.system, {
ALLOW_UNKNOWN_PROTOCOLS: true,
}),
),
);
} else {
return sanitizeXss(source.system);
return DOMPurify.sanitize(source.system, {
ALLOW_UNKNOWN_PROTOCOLS: true,
});
}
}
return null;
@@ -190,10 +203,10 @@ BlazeComponent.extendComponent({
href: attachment.url({ download: true }),
target: '_blank',
},
sanitizeXss(attachment.name()),
DOMPurify.sanitize(attachment.name()),
),
)) ||
sanitizeXss(this.currentData().activity.attachmentName)
DOMPurify.sanitize(this.currentData().activity.attachmentName)
);
},
@@ -207,10 +220,11 @@ BlazeComponent.extendComponent({
return [
{
// XXX We should use Popup.afterConfirmation here
'click .js-delete-comment'() {
const commentId = this.currentData().activity.commentId;
'click .js-delete-comment': Popup.afterConfirm('deleteComment', () => {
const commentId = this.data().activity.commentId;
CardComments.remove(commentId);
},
Popup.back();
}),
'submit .js-edit-comment'(evt) {
evt.preventDefault();
const commentText = this.currentComponent()
@@ -232,10 +246,64 @@ BlazeComponent.extendComponent({
Template.activity.helpers({
sanitize(value) {
return sanitizeXss(value);
return DOMPurify.sanitize(value, { ALLOW_UNKNOWN_PROTOCOLS: true });
},
});
Template.commentReactions.events({
'click .reaction'(event) {
if (Meteor.user().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
cardComment.toggleReaction(codepoint);
}
},
'click .open-comment-reaction-popup': Popup.open('addReaction'),
})
Template.addReactionPopup.events({
'click .add-comment-reaction'(event) {
if (Meteor.user().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
cardComment.toggleReaction(codepoint);
}
Popup.back();
},
})
Template.addReactionPopup.helpers({
codepoints() {
// Starting set of unicode codepoints as comment reactions
return [
'&#128077;',
'&#128078;',
'&#128064;',
'&#9989;',
'&#10060;',
'&#128591;',
'&#128079;',
'&#127881;',
'&#128640;',
'&#128522;',
'&#129300;',
'&#128532;'];
}
})
Template.commentReactions.helpers({
isSelected(userIds) {
return userIds.includes(Meteor.user()._id);
},
userNames(userIds) {
return Users.find({_id: {$in: userIds}})
.map(user => user.profile.fullname)
.join(', ');
}
})
function createCardLink(card) {
if (!card) return '';
return (
@@ -246,7 +314,7 @@ function createCardLink(card) {
href: card.originRelativeUrl(),
class: 'action-card',
},
sanitizeXss(card.title),
DOMPurify.sanitize(card.title, { ALLOW_UNKNOWN_PROTOCOLS: true }),
),
)
);
@@ -263,7 +331,7 @@ function createBoardLink(board, list) {
href: board.originRelativeUrl(),
class: 'action-board',
},
sanitizeXss(text),
DOMPurify.sanitize(text, { ALLOW_UNKNOWN_PROTOCOLS: true }),
),
)
);
+54 -1
View File
@@ -5,6 +5,20 @@
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
@@ -18,7 +32,7 @@
height: @width
.activity-member
font-weight: 700
font-weight: 700
.activity-desc
word-wrap: break-word
@@ -39,6 +53,45 @@
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
+1 -1
View File
@@ -1,7 +1,7 @@
template(name="commentForm")
.new-comment.js-new-comment(
class="{{#if commentFormIsOpen}}is-open{{/if}}")
+userAvatar(userId=currentUser._id)
+userAvatar(userId=currentUser._id noRemove=true)
form.js-new-comment-form
+editor(class="js-new-comment-input")
| {{getUnsavedValue 'cardComment' currentCard._id}}
+5 -2
View File
@@ -3,6 +3,7 @@ const commentFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
onDestroyed() {
commentFormIsOpen.set(false);
$('.note-popover').hide();
},
commentFormIsOpen() {
@@ -25,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({
@@ -63,7 +66,7 @@ function resetCommentInput(input) {
// Tracker.autorun to register the component dependencies, and re-run when these
// dependencies are invalidated. A better component API would remove this hack.
Tracker.autorun(() => {
Session.get('currentCard');
Utils.getCurrentCardId();
Tracker.afterFlush(() => {
autosize.update($('.js-new-comment-input'));
});
@@ -74,7 +77,7 @@ EscapeActions.register(
() => {
const draftKey = {
fieldName: 'cardComment',
docId: Session.get('currentCard'),
docId: Utils.getCurrentCardId(),
};
const commentInput = $('.js-new-comment-input');
const draft = commentInput.val().trim();
@@ -31,7 +31,6 @@
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
color: #8c8c8c
height: 36px
margin: 4px 4px 6px 0
padding: 9px 11px
+1 -1
View File
@@ -34,7 +34,7 @@ BlazeComponent.extendComponent({
Utils.goBoardId(board._id);
},
'click .js-delete-board': Popup.afterConfirm('boardDelete', function() {
Popup.close();
Popup.back();
const isSandstorm =
Meteor.settings &&
Meteor.settings.public &&
+23 -20
View File
@@ -13,26 +13,29 @@ template(name="board")
+spinner
template(name="boardBody")
.board-wrapper(class=currentBoard.colorClass)
+sidebar
.board-canvas.js-swimlanes(
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
if showOverlay.get
.board-overlay
if currentBoard.isTemplatesBoard
each currentBoard.swimlanes
+swimlane(this)
else if isViewSwimlanes
each currentBoard.swimlanes
+swimlane(this)
else if isViewLists
+listsGroup(currentBoard)
else if isViewCalendar
+calendarView
else
+listsGroup(currentBoard)
if notDisplayThisBoard
| {{_ 'tableVisibilityMode-allowPrivateOnly'}}
else
.board-wrapper(class=currentBoard.colorClass)
+sidebar
.board-canvas.js-swimlanes(
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
if showOverlay.get
.board-overlay
if currentBoard.isTemplatesBoard
each currentBoard.swimlanes
+swimlane(this)
else if isViewSwimlanes
each currentBoard.swimlanes
+swimlane(this)
else if isViewLists
+listsGroup(currentBoard)
else if isViewCalendar
+calendarView
else
+listsGroup(currentBoard)
template(name="calendarView")
if isViewCalendar
+16 -14
View File
@@ -23,7 +23,7 @@ BlazeComponent.extendComponent({
},
onlyShowCurrentCard() {
return Utils.isMiniScreen() && Session.get('currentCard');
return Utils.isMiniScreen() && Utils.getCurrentCardId(true);
},
goHome() {
@@ -33,6 +33,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('tableVisibilityModeSettings');
this.showOverlay = new ReactiveVar(false);
this.draggingActive = new ReactiveVar(false);
this._isDragging = false;
@@ -190,21 +191,11 @@ BlazeComponent.extendComponent({
});
this.autorun(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
}
if (Utils.isMiniScreen() || showDesktopDragHandles) {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$swimlanesDom.sortable({
handle: '.js-swimlane-header-handle',
});
} else if (!Utils.isMiniScreen() && !showDesktopDragHandles) {
} else {
$swimlanesDom.sortable({
handle: '.swimlane-header',
});
@@ -215,7 +206,7 @@ BlazeComponent.extendComponent({
$swimlanesDom.sortable(
'option',
'disabled',
!Meteor.user().isBoardAdmin(),
!Meteor.user() || !Meteor.user().isBoardAdmin(),
);
});
@@ -235,6 +226,16 @@ BlazeComponent.extendComponent({
}
},
notDisplayThisBoard(){
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
let currentBoard = Boards.findOne(Session.get('currentBoard'));
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue && currentBoard.permission == 'public'){
return true;
}
return false;
},
isViewSwimlanes() {
currentUser = Meteor.user();
if (currentUser) {
@@ -325,6 +326,7 @@ BlazeComponent.extendComponent({
defaultView: 'agendaDay',
editable: true,
timezone: 'local',
weekNumbers: true,
header: {
left: 'title today prev,next',
center:
+107 -41
View File
@@ -15,9 +15,16 @@ setBoardColor(color)
.is-selected .minicard
border-left: 3px solid color
// All minicards rounded corners:
.minicard
border-radius: 7px
padding: 10px 10px 4px 10px
box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.15)
button[type=submit].primary, input[type=submit].primary,
.sidebar .sidebar-content .sidebar-btn
background-color: darken(color, 20%)
border-radius: 7px
&.pop-over .pop-over-list li a:not(.disabled):hover,
.sidebar .sidebar-content .sidebar-btn:hover,
@@ -186,9 +193,10 @@ setBoardColor(color)
.list >.list-header, .swimlane-header
color:rgba(255,255,255,.7)
/* minicards */
/* minicards
.minicard
background-color:rgba(255,255,255,.4)
*/
.minicard-wrapper.is-selected .minicard,
.minicard:hover,
@@ -196,9 +204,12 @@ setBoardColor(color)
.open-minicard-composer:hover
background-color:rgba(255,255,255,.8) !important
color:#000
border-radius: 7px
/*
.minicard, .minicard .badge
color:#fff
*/
.minicard:hover .badge, .minicard-wrapper.is-selected .badge
color:#000
@@ -214,6 +225,10 @@ setBoardColor(color)
.sidebar-content h3, .sidebar-content h2, .sidebar-content
color:rgba(255,255,255,.7) !important
.card-details .activities .activity .activity-desc .activity-comment
background-color: #cccccc
color: #222222
.board-color-relax
setBoardColor(#27AE61)
@@ -225,7 +240,7 @@ setBoardColor(color)
.list-header
background-color:#a7e366
border-bottom: 6px solid #a7e366
// border-bottom: 6px solid #a7e366
.list-body
background-color:#a7e366
@@ -450,7 +465,7 @@ setBoardClear(color1,color2)
background-color: rgba(255,255,255,0.7)
color: rgba(0,0,0,0.8)
box-shadow: 0 1px 2px rgba(0,0,0,.2)
border-radius: 7px
.quiet, .quiet a
color: rgba(0,0,0,0.4)
@@ -465,6 +480,7 @@ setBoardClear(color1,color2)
a:not(.disabled).is-active.fa, a:not(.disabled).is-active i.fa, a:not(.disabled):hover.fa, a:not(.disabled):hover i.fa
color: rgba(0,0,0,0.6)
border-radius: 7px
input[type="email"], input[type="password"], input[type="text"]
border: 0
@@ -541,8 +557,8 @@ setBoardClear(color1,color2)
background-color:#dedede
.list-header
background-color: #c9cfc3
border-bottom: 6px solid #c9cfc3
// background-color: #c9cfc3
// border-bottom: 6px solid #c9cfc3
.swimlane .swimlane-header-wrap
background-color: #c2c0ab
@@ -645,7 +661,7 @@ setBoardClear(color1,color2)
.list-header
background: none
border-bottom-width: 0px
// border-bottom-width: 0px
.list-header .list-header-name
font-family: Poppins
@@ -758,15 +774,24 @@ setBoardClear(color1,color2)
/* Forms */
button[type=submit].primary, .board-color-modern input[type=submit].primary
background-color: #819C5D
background-color: #777777
border-radius: 7px
.toggle-switch:checked~.toggle-label
background-color: #D2E9B4
background-color: #f7f7f7
.toggle-label:after, .board-color-modern .toggle-switch:checked~.toggle-label:after
background-color: #819C5D !important
background-color: #777777 !important
button, input:not([type=file]), select, textarea
border-radius: 7px
/* Headers */
&#header
background-color: #262626
border-bottom: 1px solid #555555;
border-top: 1px solid #555555;
&#header-quick-access, .background-box, #header
background-color: #333333
@@ -774,14 +799,16 @@ setBoardClear(color1,color2)
padding: 4px
font-size: 14px
&#header-quick-access .allBoards
padding: 5px 10px 0 10px;
&#header-quick-access ul.header-quick-access-list
margin: -5px 0 -5px 0
&#header #header-main-bar
height: 30px
padding-top: 3px
padding-bottom: 3px
&#header
box-shadow: 0 6px 6px -6px rgba(0,0,0,0.8)
&#header-quick-access ul
overflow: visible
@@ -812,18 +839,23 @@ setBoardClear(color1,color2)
/* Content */
.board-canvas
background: #2a2a2a
padding: 10px 10px 0
/* Swimlanes */
.swimlane .swimlane-header-wrap
background-color: #666666
background-color: #494949
color: #cccccc
padding: 4px 0
margin-bottom: 10px
.swimlane .swimlane-header-wrap .swimlane-header
font-family: Poppins
.swimlane .swimlane-header-wrap .swimlane-header-menu
padding: 6px
font-size: 16px
.swimlane .swimlane-header-wrap .swimlane-header-plus-icon
font-size: 16px
.swimlane
background: #2a2a2a
line-height: 15px
@@ -836,23 +868,34 @@ setBoardClear(color1,color2)
border: 0px solid #666666
flex: 0 0 265px;
.swimlane .list:nth-child(even)
background: #5f5f5f
.swimlane .list:first-child
margin-left: 0
.swimlane .list:nth-child(even) .list-header,
.swimlane .list:nth-child(even) .list-body
background: #6a6a6a
.swimlane .list:nth-child(odd) .list-header,
.swimlane .list:nth-child(odd) .list-body
background: #555555
.list-header
background: #333333
padding-top: 10px
border-bottom: 6px solid #333333
padding: 10px
.list-header .viewer
padding-left: 10px
.list-header .list-header-name
.list-header .list-header-name,
.minicard
line-height: 14px
color: #eeeeee
.list-header .list-header-menu
padding-top: 17px
padding: 10px
top: 0
.list-header .list-header-plus-top
color: #a6a6a6
.list-body
scrollbar-width: thin
@@ -881,37 +924,47 @@ setBoardClear(color1,color2)
.list-body a.open-minicard-composer:hover, .list-body a.open-minicard-composer:hover i, .list .list-composer .open-list-composer:hover i
color: #ffffff
border-radius: 7px
/* Mini Card */
.minicard-wrapper
margin-bottom: 12px
.minicard
background-color: #444444
color: #cccccc
border-radius: 2px
font-size: 0.9em
padding: 10px
font-size: 0.95em
box-shadow: 0 4px 3px -3px rgba(0,0,0,0.8)
border-bottom: 1px solid #666666
padding: 8px
.minicard:hover
background-color: #555555 !important
color: #f7f7f7
background-color: #4d4d4d !important
.minicard .minicard-labels
margin-bottom: 4px
.minicard .card-label
font-size: 11px
font-weight: 400
padding: 2px 6px 0
padding: 1px 6px 0
border-radius: 2px
.minicard .badges
color: #bbbbbb
.minicard .date
margin-top: 7px
margin-top: 10px
font-size: 11px
.card-date
color: #555555
color: #444444
border-radius: 2px
.card-date.almost-due
color: #666666
color: #444444
.minicard.minicard-composer textarea.minicard-composer-textarea:focus
background-color: #eeeeee
@@ -923,17 +976,24 @@ setBoardClear(color1,color2)
/* Card Details */
.card-details
position: absolute
top: 30px
left: calc(50% - 384px)
width: 768px
max-height: calc(100% - 60px)
background-color: #454545
color: #cccccc
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)
border: 1px solid #111111
z-index: 100 !important
@media screen and (max-width: 800px)
.card-details
width: 98%
@media screen and (min-width: 801px)
.card-details
position: absolute
top: 30px
left: calc(50% - 384px)
width: 768px
max-height: calc(100% - 60px)
.card-details
scrollbar-width: thin
scrollbar-color: #343434 #999999
@@ -970,17 +1030,23 @@ setBoardClear(color1,color2)
.card-details .checklist-item
background-color: rgba(255,255,255,0.1)
padding: 2px 8px
border-radius: 3px
padding: 4px 8px
border-radius: 2px
font-size: 13px
margin-top: 5px
.card-details .checklist-item:hover
background-color: rgba(255,255,255,0.2)
.card-details .checklist-item .item-title .viewer p
max-width: auto
.card-details .check-box.materialCheckBox
border-color: #ffffff
.card-details .check-box.materialCheckBox.is-checked
border-bottom: 2px solid #819C5D
border-right: 2px solid #819C5D
border-bottom: 2px solid #ffffff
border-right: 2px solid #ffffff
border-top: 0
border-left: 0
@@ -1020,5 +1086,5 @@ setBoardClear(color1,color2)
font-size: 16px
color: #cccccc
.pop-over.board-color-moderndark .pop-over-list li:hover > a
background-color: #819C5D !important
.pop-over.board-color-moderndark .pop-over-list li > a:hover
background-color: rgba(255,255,255,0.2)
+24 -11
View File
@@ -1,8 +1,11 @@
template(name="boardHeaderBar")
h1.header-board-menu
with currentBoard
+viewer
= title
if $eq title 'Templates'
| {{_ 'templates'}}
else
+viewer
= title
.board-header-btns.left
unless isMiniScreen
@@ -77,6 +80,12 @@ template(name="boardHeaderBar")
if $eq watchLevel "muted"
i.fa.fa-bell-slash
span {{_ watchLevel}}
a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
i.fa.fa-sort
span {{#if isSortActive }}{{_ 'Sort is on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
if isSortActive
a.board-header-btn-close.js-sort-reset(title="Remove Sort")
i.fa.fa-times-thin
else
a.board-header-btn.js-log-in(
@@ -131,7 +140,7 @@ template(name="boardHeaderBar")
i.fa.fa-times-thin
.separator
a.board-header-btn.js-toggle-sidebar
a.board-header-btn.js-toggle-sidebar(title="{{_ 'sidebar-open'}} {{_ 'or'}} {{_ 'sidebar-close'}}")
i.fa.fa-navicon
template(name="boardVisibilityList")
@@ -144,14 +153,15 @@ template(name="boardVisibilityList")
if visibilityCheck
i.fa.fa-check
span.sub-name {{_ 'private-desc'}}
li
with "public"
a.js-select-visibility
i.fa.fa-globe.colorful
| {{_ 'public'}}
if visibilityCheck
i.fa.fa-check
span.sub-name {{_ 'public-desc'}}
if notAllowPrivateVisibilityOnly
li
with "public"
a.js-select-visibility
i.fa.fa-globe.colorful
| {{_ 'public'}}
if visibilityCheck
i.fa.fa-check
span.sub-name {{_ 'public-desc'}}
template(name="boardChangeVisibilityPopup")
+boardVisibilityList
@@ -225,6 +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'}}
input.primary.wide(type="submit" value="{{_ 'create'}}")
span.quiet
| {{_ 'or'}}
+91 -27
View File
@@ -7,11 +7,11 @@ Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-custom-fields'() {
Sidebar.setView('customFields');
Popup.close();
Popup.back();
},
'click .js-open-archives'() {
Sidebar.setView('archives');
Popup.close();
Popup.back();
},
'click .js-change-board-color': Popup.open('boardChangeColor'),
'click .js-change-language': Popup.open('changeLanguage'),
@@ -24,7 +24,7 @@ Template.boardMenuPopup.events({
}),
'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
Popup.close();
Popup.back();
Boards.remove(currentBoard._id);
FlowRouter.go('home');
}),
@@ -47,7 +47,7 @@ Template.boardChangeTitlePopup.events({
if (newTitle) {
this.rename(newTitle);
this.setDescription(newDesc);
Popup.close();
Popup.back();
}
event.preventDefault();
},
@@ -136,7 +136,7 @@ BlazeComponent.extendComponent({
Sidebar.setView('search');
},
'click .js-multiselection-activate'() {
const currentCard = Session.get('currentCard');
const currentCard = Utils.getCurrentCardId();
MultiSelection.activate();
if (currentCard) {
MultiSelection.add(currentCard);
@@ -173,15 +173,15 @@ Template.boardHeaderBar.helpers({
Template.boardChangeViewPopup.events({
'click .js-open-lists-view'() {
Utils.setBoardView('board-view-lists');
Popup.close();
Popup.back();
},
'click .js-open-swimlanes-view'() {
Utils.setBoardView('board-view-swimlanes');
Popup.close();
Popup.back();
},
'click .js-open-cal-view'() {
Utils.setBoardView('board-view-cal');
Popup.close();
Popup.back();
},
});
@@ -194,6 +194,11 @@ const CreateBoard = BlazeComponent.extendComponent({
this.visibilityMenuIsOpen = new ReactiveVar(false);
this.visibility = new ReactiveVar('private');
this.boardId = new ReactiveVar('');
Meteor.subscribe('tableVisibilityModeSettings');
},
notAllowPrivateVisibilityOnly(){
return !TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
},
visibilityCheck() {
@@ -209,24 +214,79 @@ const CreateBoard = BlazeComponent.extendComponent({
this.visibilityMenuIsOpen.set(!this.visibilityMenuIsOpen.get());
},
toggleAddTemplateContainer() {
$('#add-template-container').toggleClass('is-checked');
},
onSubmit(event) {
event.preventDefault();
const title = this.find('.js-new-board-title').value;
const visibility = this.visibility.get();
this.boardId.set(
Boards.insert({
title,
permission: visibility,
}),
);
const addTemplateContainer = $('#add-template-container.is-checked').length > 0;
if (addTemplateContainer) {
//const templateContainerId = Meteor.call('setCreateTemplateContainer');
//Utils.goBoardId(templateContainerId);
//alert('niinku template ' + Meteor.call('setCreateTemplateContainer'));
Swimlanes.insert({
title: 'Default',
boardId: this.boardId.get(),
});
this.boardId.set(
Boards.insert({
// title: TAPi18n.__('templates'),
title: title,
permission: 'private',
type: 'template-container',
}),
);
Utils.goBoardId(this.boardId.get());
// Insert the card templates swimlane
Swimlanes.insert({
// title: TAPi18n.__('card-templates-swimlane'),
title: 'Card Templates',
boardId: this.boardId.get(),
sort: 1,
type: 'template-container',
}),
// Insert the list templates swimlane
Swimlanes.insert(
{
// title: TAPi18n.__('list-templates-swimlane'),
title: 'List Templates',
boardId: this.boardId.get(),
sort: 2,
type: 'template-container',
},
);
// Insert the board templates swimlane
Swimlanes.insert(
{
//title: TAPi18n.__('board-templates-swimlane'),
title: 'Board Templates',
boardId: this.boardId.get(),
sort: 3,
type: 'template-container',
},
);
Utils.goBoardId(this.boardId.get());
} else {
const visibility = this.visibility.get();
this.boardId.set(
Boards.insert({
title,
permission: visibility,
}),
);
Swimlanes.insert({
title: 'Default',
boardId: this.boardId.get(),
});
Utils.goBoardId(this.boardId.get());
}
},
events() {
@@ -240,6 +300,7 @@ const CreateBoard = BlazeComponent.extendComponent({
submit: this.onSubmit,
'click .js-import-board': Popup.open('chooseBoardSource'),
'click .js-board-template': Popup.open('searchElement'),
'click .js-toggle-add-template-container': this.toggleAddTemplateContainer,
},
];
},
@@ -254,6 +315,9 @@ const CreateBoard = BlazeComponent.extendComponent({
}.register('headerBarCreateBoardPopup'));
BlazeComponent.extendComponent({
notAllowPrivateVisibilityOnly(){
return !TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
},
visibilityCheck() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return this.currentData() === currentBoard.permission;
@@ -263,7 +327,7 @@ BlazeComponent.extendComponent({
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const visibility = this.currentData();
currentBoard.setVisibility(visibility);
Popup.close();
Popup.back();
},
events() {
@@ -296,7 +360,7 @@ BlazeComponent.extendComponent({
Session.get('currentBoard'),
level,
(err, ret) => {
if (!err && ret) Popup.close();
if (!err && ret) Popup.back();
},
);
},
@@ -368,7 +432,7 @@ BlazeComponent.extendComponent({
const direction = down ? -1 : 1;
this.setSortBy([sortby, direction]);
if (Utils.isMiniScreen) {
Popup.close();
Popup.back();
}
},
},
@@ -387,7 +451,7 @@ BlazeComponent.extendComponent({
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('due-date'));
Popup.close();
Popup.back();
},
'click .js-sort-title'() {
const sortBy = {
@@ -395,7 +459,7 @@ BlazeComponent.extendComponent({
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('title'));
Popup.close();
Popup.back();
},
'click .js-sort-created-asc'() {
const sortBy = {
@@ -403,7 +467,7 @@ BlazeComponent.extendComponent({
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('date-created-newest-first'));
Popup.close();
Popup.back();
},
'click .js-sort-created-desc'() {
const sortBy = {
@@ -411,7 +475,7 @@ BlazeComponent.extendComponent({
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('date-created-oldest-first'));
Popup.close();
Popup.back();
},
},
];
+116 -43
View File
@@ -1,10 +1,40 @@
template(name="boardList")
.wrapper
ul.AllBoardTeamsOrgs
li.AllBoardTeams
if userHasTeams
select.js-AllBoardTeams#jsAllBoardTeams("multiple")
option(value="-1") {{_ 'teams'}} :
each teamsDatas
option(value="{{teamId}}") {{_ teamDisplayName}}
li.AllBoardOrgs
if userHasOrgs
select.js-AllBoardOrgs#jsAllBoardOrgs("multiple")
option(value="-1") {{_ 'organizations'}} :
each orgsDatas
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
i.fa.fa-filter
input#filterBtn(type="button" value="{{_ 'filter'}}")
input#resetBtn(type="button" value="{{_ 'filter-clear'}}")
ul.board-list.clearfix.js-boards
li.js-add-board
a.board-list-item.label {{_ 'add-board'}}
a.board-list-item.label(title="{{_ 'add-board'}}")
| {{_ 'add-board'}}
each boards
li(class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
li(class="{{_id}}" class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
if isInvited
.board-list-item
span.details
@@ -16,47 +46,90 @@ template(name="boardList")
button.js-accept-invite.primary {{_ 'accept'}}
button.js-decline-invite {{_ 'decline'}}
else
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
span.details
span.board-list-item-name
+viewer
= title
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
p.board-list-item-desc
+viewer
= description
if hasSpentTimeCards
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 isMiniScreen
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
unless isMiniScreen
if isSandstorm
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if isAdministrable
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if currentUser.isAdmin
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
if $eq type "template-container"
a.js-open-board.template-container.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
span.details
span.board-list-item-name(title="{{_ 'template-container'}}")
+viewer
= title
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
p.board-list-item-desc
+viewer
= description
if hasSpentTimeCards
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
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
else
if isSandstorm
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if isAdministrable
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if currentUser.isAdmin
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
span.details
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
+viewer
= title
i.fa.js-star-board(
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
title="{{_ 'star-board-title'}}")
p.board-list-item-desc
+viewer
= description
if hasSpentTimeCards
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
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
else
if isSandstorm
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if isAdministrable
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
else if currentUser.isAdmin
i.fa.js-clone-board(
class="fa-clone"
title="{{_ 'duplicate-board'}}")
i.fa.js-archive-board(
class="fa-archive"
title="{{_ 'archive-board'}}")
template(name="boardListHeaderBar")
h1 {{_ title }}
+186 -12
View File
@@ -1,5 +1,4 @@
const subManager = new SubsManager();
const { calculateIndex, enableClickOnTouch } = Utils;
Template.boardListHeaderBar.events({
'click .js-open-archived-board'() {
@@ -9,7 +8,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();
@@ -22,6 +25,16 @@ Template.boardListHeaderBar.helpers({
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('setting');
Meteor.subscribe('tableVisibilityModeSettings');
let currUser = Meteor.user();
let userLanguage;
if(currUser && currUser.profile){
userLanguage = currUser.profile.language
}
if (userLanguage) {
TAPi18n.setLanguage(userLanguage);
T9n.setLanguage(userLanguage);
}
},
onRendered() {
@@ -46,7 +59,7 @@ BlazeComponent.extendComponent({
// of the previous and the following card -- if any.
const prevBoardDom = ui.item.prev('.js-board').get(0);
const nextBoardBom = ui.item.next('.js-board').get(0);
const sortIndex = calculateIndex(prevBoardDom, nextBoardBom, 1);
const sortIndex = Utils.calculateIndex(prevBoardDom, nextBoardBom, 1);
const boardDomElement = ui.item.get(0);
const board = Blaze.getData(boardDomElement);
@@ -63,27 +76,119 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreen()) {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$boards.sortable({
handle: '.board-handle',
});
}
});
},
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.sort((a, b) => a.teamDisplayName.localeCompare(b.teamDisplayName));
else
return [];
},
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.sort((a, b) => a.orgDisplayName.localeCompare(b.orgDisplayName));
else
return [];
},
userHasOrgsOrTeams(){
let boolUserHasOrgs;
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)
boolUserHasTeams = true;
else
boolUserHasTeams = false;
return (boolUserHasOrgs || boolUserHasTeams);
},
boards() {
const query = {
archived: false,
type: 'board',
let query = {
// { type: 'board' },
// { type: { $in: ['board','template-container'] } },
$and: [
{ archived: false },
{ type: { $in: ['board','template-container'] } },
{ $or:[] }
]
};
if (FlowRouter.getRouteName() === 'home')
query['members.userId'] = Meteor.userId();
else query.permission = 'public';
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
if (FlowRouter.getRouteName() === 'home'){
query.$and[2].$or.push({'members.userId': Meteor.userId()});
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue){
query.$and.push({'permission': 'private'});
}
const currUser = Users.findOne(Meteor.userId());
// const currUser = Users.findOne(Meteor.userId(), {
// fields: {
// orgs: 1,
// teams: 1,
// },
// });
let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.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}});
}
let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.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}});
}
}
else if(allowPrivateVisibilityOnly !== undefined && !allowPrivateVisibilityOnly.booleanValue){
query = {
archived: false,
//type: { $in: ['board','template-container'] },
type: 'board',
permission: 'public',
};
}
return Boards.find(query, {
sort: { sort: 1 /* boards default sorting */ },
@@ -136,6 +241,7 @@ BlazeComponent.extendComponent({
this.setError(err.error);
} else {
Session.set('fromBoard', null);
subManager.subscribe('board', res, false);
Utils.goBoardId(res);
}
},
@@ -160,6 +266,74 @@ BlazeComponent.extendComponent({
}
});
},
'click #resetBtn'(event){
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
for(let i=0; i < allBoards.length; i++){
currBoard = allBoards[i];
currBoard.style.display = "block";
}
},
'click #filterBtn'(event) {
event.preventDefault();
let selectedTeams = document.querySelectorAll('#jsAllBoardTeams option:checked');
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});
index = selectedOrgsValues.indexOf("-1");
if (index > -1) {
selectedOrgsValues.splice(index, 1);
}
if(selectedTeamsValues.length > 0 || selectedOrgsValues.length > 0){
const query = {
$and: [
{ archived: false },
{ type: 'board' },
{ $or:[] }
]
};
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}});
}
let filteredBoards = Boards.find(query, {}).fetch();
let allBoards = document.getElementsByClassName("js-board");
let currBoard;
if(filteredBoards.length > 0){
let currBoardId;
let found;
for(let i=0; i < allBoards.length; i++){
currBoard = allBoards[i];
currBoardId = currBoard.classList[0];
found = filteredBoards.find(function(board){
return board._id == currBoardId;
});
if(found !== undefined)
currBoard.style.display = "block";
else
currBoard.style.display = "none";
}
}
else{
for(let i=0; i < allBoards.length; i++){
currBoard = allBoards[i];
currBoard.style.display = "none";
}
}
}
},
},
];
},
+25
View File
@@ -45,6 +45,9 @@ $spaceBetweenTiles = 16px
text-decoration: none
word-wrap: break-word
&.template-container
border: 4px solid #fff
&.tile
background-size: auto
background-repeat: repeat
@@ -226,3 +229,25 @@ $spaceBetweenTiles = 16px
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;
+14 -2
View File
@@ -26,12 +26,25 @@ template(name="attachmentsGalery")
if isUploaded
if isImage
img.attachment-thumbnail-img(src="{{url}}")
else if($eq extension 'mp3')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="audio/mpeg")
else if($eq extension 'ogg')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/ogg")
else if($eq extension 'webm')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/webm")
else if($eq extension 'mp4')
video(width="100%" height="100%" controls="true")
source(src="{{url}}" type="video/mp4")
else
span.attachment-thumbnail-ext= extension
else
+spinner
p.attachment-details
= name
span.file-size ({{fileSize size}} KB)
span.attachment-details-actions
a.js-download(href="{{url download=true}}")
i.fa.fa-download
@@ -55,6 +68,5 @@ template(name="attachmentsGalery")
unless currentUser.isCommentOnly
unless currentUser.isWorker
//li.attachment-item.add-attachment
a.js-add-attachment
a.js-add-attachment(title="{{_ 'add-attachment' }}")
i.fa.fa-plus
| {{_ 'add-attachment' }}
+7 -4
View File
@@ -4,7 +4,7 @@ Template.attachmentsGalery.events({
'attachmentDelete',
function() {
Attachments.remove(this._id);
Popup.close();
Popup.back();
},
),
// If we let this event bubble, FlowRouter will handle it and empty the page
@@ -49,11 +49,14 @@ Template.attachmentsGalery.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
fileSize(size) {
return Math.round(size / 1024);
},
});
Template.previewAttachedImagePopup.events({
'click .js-large-image-clicked'() {
Popup.close();
Popup.back();
},
});
@@ -65,7 +68,7 @@ Template.cardAttachmentsPopup.events({
if (attachment && attachment._id && attachment.isImage()) {
card.setCover(attachment._id);
}
Popup.close();
Popup.back();
});
};
@@ -174,7 +177,7 @@ Template.previewClipboardImagePopup.events({
pastedResults = null;
$(document.body).pasteImageReader(() => {});
Popup.close();
Popup.back();
}
},
});
+1 -1
View File
@@ -9,7 +9,7 @@
margin: 10px 1% 0
text-align: center
border-radius: 3px
overflow: hidden
overflow: auto
background: darken(white, 7%)
min-height: 120px
+37 -12
View File
@@ -63,7 +63,7 @@ template(name="cardCustomField-checkbox")
template(name="cardCustomField-currency")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-currency")
input(type="text" value=data.value)
input(type="text" value=data.value autofocus)
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
@@ -79,18 +79,22 @@ template(name="cardCustomField-currency")
template(name="cardCustomField-date")
if canModifyCard
a.js-edit-date(title="{{showTitle}}" class="{{classes}}")
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
else
| {{_ 'edit'}}
else
a.js-edit-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
else
| {{_ 'edit'}}
else
if value
div.card-date
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
template(name="cardCustomField-dropdown")
if canModifyCard
@@ -119,3 +123,24 @@ template(name="cardCustomField-dropdown")
if value
+viewer
= selectedItem
template(name="cardCustomField-stringtemplate")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-stringtemplate")
each item in stringtemplateItems.get
input.js-card-customfield-stringtemplate-item(type="text" value=item placeholder="")
input.js-card-customfield-stringtemplate-item.last(type="text" value="" placeholder="{{_ 'custom-field-stringtemplate-item-placeholder'}}" autofocus)
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if value
+viewer
= formattedValue
else
| {{_ 'edit'}}
else
if value
+viewer
= formattedValue
+99 -4
View File
@@ -1,6 +1,9 @@
import { DatePicker } from '/client/lib/datepicker';
import Cards from '/models/cards';
Template.cardCustomFieldsPopup.helpers({
hasCustomField() {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const customFieldId = this._id;
return card.customFieldIndex(customFieldId) > -1;
},
@@ -8,7 +11,7 @@ Template.cardCustomFieldsPopup.helpers({
Template.cardCustomFieldsPopup.events({
'click .js-select-field'(event) {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const customFieldId = this._id;
card.toggleCustomField(customFieldId);
event.preventDefault();
@@ -28,7 +31,7 @@ const CardCustomField = BlazeComponent.extendComponent({
onCreated() {
const self = this;
self.card = Cards.findOne(Session.get('currentCard'));
self.card = Utils.getCurrentCard();
self.customFieldId = this.data()._id;
},
@@ -146,6 +149,10 @@ CardCustomField.register('cardCustomField');
});
}
showWeek() {
return this.date.get().week().toString();
}
showDate() {
// this will start working once mquandalle:moment
// is updated to at least moment.js 2.10.5
@@ -187,7 +194,7 @@ CardCustomField.register('cardCustomField');
onCreated() {
super.onCreated();
const self = this;
self.card = Cards.findOne(Session.get('currentCard'));
self.card = Utils.getCurrentCard();
self.customFieldId = this.data()._id;
this.data().value && this.date.set(moment(this.data().value));
}
@@ -234,3 +241,91 @@ CardCustomField.register('cardCustomField');
];
}
}.register('cardCustomField-dropdown'));
// cardCustomField-stringtemplate
(class extends CardCustomField {
onCreated() {
super.onCreated();
this.stringtemplateFormat = this.data().definition.settings.stringtemplateFormat;
this.stringtemplateSeparator = this.data().definition.settings.stringtemplateSeparator;
this.stringtemplateItems = new ReactiveVar(this.data().value ?? []);
}
formattedValue() {
return (this.data().value ?? [])
.filter(value => !!value.trim())
.map(value => this.stringtemplateFormat.replace(/%\{value\}/gi, value))
.join(this.stringtemplateSeparator ?? '');
}
getItems() {
return Array.from(this.findAll('input'))
.map(input => input.value)
.filter(value => !!value.trim());
}
events() {
return [
{
'submit .js-card-customfield-stringtemplate'(event) {
event.preventDefault();
const items = this.stringtemplateItems.get();
this.card.setCustomField(this.customFieldId, items);
},
'keydown .js-card-customfield-stringtemplate-item'(event) {
if (event.keyCode === 13) {
event.preventDefault();
if (event.target.value.trim() || event.metaKey || event.ctrlKey) {
const inputLast = this.find('input.last');
let items = this.getItems();
if (event.target === inputLast) {
inputLast.value = '';
} else if (event.target.nextSibling === inputLast) {
inputLast.focus();
} else {
event.target.blur();
const idx = Array.from(this.findAll('input')).indexOf(
event.target,
);
items.splice(idx + 1, 0, '');
Tracker.afterFlush(() => {
const element = this.findAll('input')[idx + 1];
element.focus();
element.value = '';
});
}
this.stringtemplateItems.set(items);
}
if (event.metaKey || event.ctrlKey) {
this.find('button[type=submit]').click();
}
}
},
'blur .js-card-customfield-stringtemplate-item'(event) {
if (
!event.target.value.trim() ||
event.target === this.find('input.last')
) {
const items = this.getItems();
this.stringtemplateItems.set(items);
this.find('input.last').value = '';
}
},
'click .js-close-inlined-form'(event) {
this.stringtemplateItems.set(this.data().value ?? []);
},
},
];
}
}.register('cardCustomField-stringtemplate'));
+9 -3
View File
@@ -1,14 +1,20 @@
template(name="dateBadge")
if canModifyCard
a.js-edit-date.card-date(title="{{showTitle}}" class="{{classes}}")
a.js-edit-date.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
else
a.card-date(title="{{showTitle}}" class="{{classes}}")
a.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
template(name="dateCustomField")
a(title="{{showTitle}}" class="{{classes}}")
a(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
time(datetime="{{showISODate}}")
| {{showDate}}
b
| {{showWeek}}
+53 -127
View File
@@ -1,122 +1,4 @@
// Helper function to replace HH with H for 24 hours format, because H allows also single-digit hours
function adjustedTimeFormat() {
return moment
.localeData()
.longDateFormat('LT')
.replace(/HH/i, 'H');
}
// Edit received, start, due & end dates
BlazeComponent.extendComponent({
template() {
return 'editCardDate';
},
onCreated() {
this.error = new ReactiveVar('');
this.card = this.data();
this.date = new ReactiveVar(moment.invalid());
},
onRendered() {
const $picker = this.$('.js-datepicker')
.datepicker({
todayHighlight: true,
todayBtn: 'linked',
language: TAPi18n.getLanguage(),
})
.on(
'changeDate',
function(evt) {
this.find('#date').value = moment(evt.date).format('L');
this.error.set('');
this.find('#time').focus();
}.bind(this),
);
if (this.date.get().isValid()) {
$picker.datepicker('update', this.date.get().toDate());
}
},
showDate() {
if (this.date.get().isValid()) return this.date.get().format('L');
return '';
},
showTime() {
if (this.date.get().isValid()) return this.date.get().format('LT');
return '';
},
dateFormat() {
return moment.localeData().longDateFormat('L');
},
timeFormat() {
return moment.localeData().longDateFormat('LT');
},
events() {
return [
{
'keyup .js-date-field'() {
// parse for localized date format in strict mode
const dateMoment = moment(this.find('#date').value, 'L', true);
if (dateMoment.isValid()) {
this.error.set('');
this.$('.js-datepicker').datepicker('update', dateMoment.toDate());
}
},
'keyup .js-time-field'() {
// parse for localized time format in strict mode
const dateMoment = moment(
this.find('#time').value,
adjustedTimeFormat(),
true,
);
if (dateMoment.isValid()) {
this.error.set('');
}
},
'submit .edit-date'(evt) {
evt.preventDefault();
// if no time was given, init with 12:00
const time =
evt.target.time.value ||
moment(new Date().setHours(12, 0, 0)).format('LT');
const newTime = moment(time, adjustedTimeFormat(), true);
const newDate = moment(evt.target.date.value, 'L', true);
const dateString = `${evt.target.date.value} ${time}`;
const newCompleteDate = moment(
dateString,
'L ' + adjustedTimeFormat(),
true,
);
if (!newTime.isValid()) {
this.error.set('invalid-time');
evt.target.time.focus();
}
if (!newDate.isValid()) {
this.error.set('invalid-date');
evt.target.date.focus();
}
if (newCompleteDate.isValid()) {
this._storeDate(newCompleteDate.toDate());
Popup.close();
} else {
if (!this.error) {
this.error.set('invalid');
}
}
},
'click .js-delete-date'(evt) {
evt.preventDefault();
this._deleteDate();
Popup.close();
},
},
];
},
});
import { DatePicker } from '/client/lib/datepicker';
Template.dateBadge.helpers({
canModifyCard() {
@@ -142,7 +24,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setReceived(null);
this.card.unsetReceived();
}
}.register('editCardReceivedDatePopup'));
@@ -168,7 +50,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setStart(null);
this.card.unsetStart();
}
}.register('editCardStartDatePopup'));
@@ -191,7 +73,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setDue(null);
this.card.unsetDue();
}
}.register('editCardDueDatePopup'));
@@ -214,7 +96,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setEnd(null);
this.card.unsetEnd();
}
}.register('editCardEndDatePopup'));
@@ -233,6 +115,10 @@ const CardDate = BlazeComponent.extendComponent({
}, 60000);
},
showWeek() {
return this.date.get().week().toString();
},
showDate() {
// this will start working once mquandalle:moment
// is updated to at least moment.js 2.10.5
@@ -305,7 +191,7 @@ class CardStartDate extends CardDate {
// if dueAt or endAt exist & are > startAt, startAt doesn't need to be flagged
if ((endAt && theDate.isAfter(endAt)) || (dueAt && theDate.isAfter(dueAt)))
classes += 'long-overdue';
else if (theDate.isBefore(now, 'minute')) classes += 'almost-due';
else if (theDate.isAfter(now)) classes += '';
else classes += 'current';
return classes;
}
@@ -402,12 +288,25 @@ class CardCustomFieldDate extends CardDate {
});
}
classes() {
return 'customfield-date';
showWeek() {
return this.date.get().week().toString();
}
showDate() {
// this will start working once mquandalle:moment
// is updated to at least moment.js 2.10.5
// until then, the date is displayed in the "L" format
return this.date.get().calendar(null, {
sameElse: 'llll',
});
}
showTitle() {
return '';
return `${this.date.get().format('LLLL')}`;
}
classes() {
return 'customfield-date';
}
events() {
@@ -472,3 +371,30 @@ class VoteEndDate extends CardDate {
}
}
VoteEndDate.register('voteEndDate');
class PokerEndDate extends CardDate {
onCreated() {
super.onCreated();
const self = this;
self.autorun(() => {
self.date.set(moment(self.data().getPokerEnd()));
});
}
classes() {
const classes = 'end-date' + ' ';
return classes;
}
showDate() {
return this.date.get().format('l LT');
}
showTitle() {
return `${TAPi18n.__('card-end-on')} ${this.date.get().format('LLLL')}`;
}
events() {
return super.events().concat({
'click .js-edit-date': Popup.open('editPokerEndDate'),
});
}
}
PokerEndDate.register('pokerEndDate');
+5 -1
View File
@@ -3,6 +3,7 @@ const descriptionFormIsOpen = new ReactiveVar(false);
BlazeComponent.extendComponent({
onDestroyed() {
descriptionFormIsOpen.set(false);
$('.note-popover').hide();
},
descriptionFormIsOpen() {
@@ -24,7 +25,10 @@ BlazeComponent.extendComponent({
// Pressing Ctrl+Enter should submit the form
'keydown form textarea'(evt) {
if (evt.keyCode === 13 && (evt.metaKey || evt.ctrlKey)) {
this.find('button[type=submit]').click();
const submitButton = this.find('button[type=submit]');
if (submitButton) {
submitButton.click();
}
}
},
},
@@ -23,7 +23,6 @@
background-color: #fff
border: 0
box-shadow: 0 1px 2px rgba(0, 0, 0, .23)
color: #8c8c8c
height: 36px
margin: 4px 4px 6px 0
padding: 9px 11px
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+226 -22
View File
@@ -4,15 +4,6 @@
avatar-radius = 50%
#cardURL_copy
// Have clipboard text not visible by moving it to far left
position: absolute
left: -2000px
top: 0px
#clipboard
white-space: normal
.assignee
border-radius: 3px
display: block
@@ -85,6 +76,12 @@ avatar-radius = 50%
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
@@ -95,7 +92,7 @@ avatar-radius = 50%
overflow-x: hidden
background: darken(white, 3%)
border-radius: bottom 3px
z-index: 20 !important
z-index: 20
animation: flexGrowIn 0.1s
box-shadow: 0 0 7px 0 darken(white, 30%)
transition: flex-basis 0.1s
@@ -110,21 +107,35 @@ avatar-radius = 50%
.card-details-header
margin: 0 -20px 5px
padding 7px 20px
padding: 7px 20px
background: darken(white, 7%)
border-bottom: 1px solid darken(white, 14%)
position: sticky
top: 0px
z-index: 500
.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
.card-details-menu-mobile-web,
.copied-tooltip
float: right
.close-card-details
.close-card-details,
.maximize-card-details,
.minimize-card-details
font-size: 24px
padding: 5px
padding: 5px 10px 5px 10px
margin-right: -8px
.close-card-details-mobile-web
@@ -173,6 +184,9 @@ avatar-radius = 50%
margin-top: 5px
margin-bottom: 10px
.copied-tooltip
padding: 0px 10px
.card-details-list
font-size: 0.85em
margin-bottom: 3px
@@ -186,6 +200,10 @@ avatar-radius = 50%
border-radius: 3px
padding: 0px 5px
.copied-tooltip
margin-right: 10px
padding: 10px;
.card-description textarea
min-height: 100px
@@ -196,13 +214,13 @@ avatar-radius = 50%
.card-details-item
margin-right: 0.5em
flex-grow: 1
&: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,
@@ -210,7 +228,7 @@ avatar-radius = 50%
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,
@@ -218,20 +236,55 @@ avatar-radius = 50%
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
.card-label
padding-top: 5px
padding-bottom: 5px
.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: 100
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
@@ -249,6 +302,8 @@ input[type="submit"].attachment-add-link-submit
padding: 0px 20px 0px 20px
margin: 0px
transition: none
overflow-y: revert
overflow-x: revert
.card-details-canvas
width: 100%
@@ -259,7 +314,28 @@ input[type="submit"].attachment-add-link-submit
margin-right: 0px
.card-details-menu
margin-right: 10px
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
@@ -356,3 +432,131 @@ card-details-color(background, color...)
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
+8 -5
View File
@@ -9,7 +9,6 @@ BlazeComponent.extendComponent({
toggleOvertime() {
this.card.setIsOvertime(!this.card.getIsOvertime());
$('#overtime .materialCheckBox').toggleClass('is-checked');
$('#overtime').toggleClass('is-checked');
},
storeTime(spentTime, isOvertime) {
@@ -18,6 +17,7 @@ BlazeComponent.extendComponent({
},
deleteTime() {
this.card.setSpentTime(null);
this.card.setIsOvertime(false);
},
events() {
return [
@@ -27,11 +27,14 @@ BlazeComponent.extendComponent({
evt.preventDefault();
const spentTime = parseFloat(evt.target.time.value);
const isOvertime = this.card.getIsOvertime();
//const isOvertime = this.card.getIsOvertime();
let isOvertime = false;
if ($('#overtime').attr('class').indexOf('is-checked') >= 0) {
isOvertime = true;
}
if (spentTime >= 0) {
this.storeTime(spentTime, isOvertime);
Popup.close();
Popup.back();
} else {
this.error.set('invalid-time');
evt.target.time.focus();
@@ -40,7 +43,7 @@ BlazeComponent.extendComponent({
'click .js-delete-time'(evt) {
evt.preventDefault();
this.deleteTime();
Popup.close();
Popup.back();
},
'click a.js-toggle-overtime': this.toggleOvertime,
},
+104 -26
View File
@@ -4,30 +4,24 @@ template(name="checklists")
i.fa.fa-check
| {{_ 'checklists'}}
if currentUser.isBoardMember
.material-toggle-switch
span.toggle-switch-title {{_ 'hide-checked-items'}}
.material-toggle-switch(title="{{_ 'hide-checked-items'}}")
//span.toggle-switch-title
if hideCheckedItems
input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton" checked="checked")
else
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 currentCard.checklists
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.js-open-inlined-form
a.add-checklist.js-open-inlined-form(title="{{_ 'add-checklist'}}")
i.fa.fa-plus
| {{_ 'add-checklist'}}...
template(name="checklistDetail")
.js-checklist.checklist
@@ -37,7 +31,7 @@ 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
@@ -49,27 +43,33 @@ template(name="checklistDetail")
h2.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'}}")
span.copied-tooltip {{_ 'copied'}}
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
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'}}")
span.copied-tooltip {{_ 'copied'}}
textarea.js-edit-checklist-item(rows='1' autofocus dir="auto")
if $eq type 'item'
= item.title
@@ -81,6 +81,9 @@ template(name="editChecklistItemForm")
span(title=createdAt) {{ moment createdAt }}
if canModifyCard
a.js-delete-checklist-item {{_ "delete"}}...
a.js-convert-checklist-item-to-card
i.fa.fa-copy
| {{_ 'convertChecklistItemToCardPopup-title'}}
template(name="checklistItems")
.checklist-items.js-checklist-items
@@ -91,11 +94,10 @@ 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
a.add-checklist-item.js-open-inlined-form(title="{{_ 'add-checklist-item'}}")
i.fa.fa-plus
| {{_ 'add-checklist-item'}}...
template(name='checklistItemDetail')
.js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}")
@@ -112,3 +114,79 @@ template(name='checklistItemDetail')
.item-title(class="{{#if item.isFinished }}is-checked{{/if}}")
+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="boardsSwimlanesAndLists")
unless currentUser.isWorker
label {{_ 'boards'}}:
select.js-select-boards(autofocus)
each boards
if $eq _id currentBoard._id
option(value="{{_id}}" selected) {{_ 'current'}}
else
option(value="{{_id}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each aBoardLists
option(value="{{_id}}") {{title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
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="copyChecklistPopup")
+copyAndMoveChecklist
template(name="moveChecklistPopup")
+copyAndMoveChecklist
template(name="copyAndMoveChecklist")
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}}" selected="{{#if isChecklistDialogOptionBoardId _id}}selected{{/if}}") {{title}}
label {{_ 'swimlanes'}}:
select.js-select-swimlanes
each swimlanes
option(value="{{_id}}" selected="{{#if isChecklistDialogOptionSwimlaneId _id}}selected{{/if}}") {{title}}
label {{_ 'lists'}}:
select.js-select-lists
each lists
option(value="{{_id}}" selected="{{#if isChecklistDialogOptionListId _id}}selected{{/if}}") {{title}}
label {{_ 'cards'}}:
select.js-select-cards
each cards
option(value="{{_id}}" selected="{{#if isChecklistDialogOptionCardId _id}}selected{{/if}}") {{title}}
.edit-controls.clearfix
button.primary.confirm.js-done {{_ 'done'}}
+379 -62
View File
@@ -1,3 +1,7 @@
import Cards from '/models/cards';
import Boards from '/models/boards';
const subManager = new SubsManager();
const { calculateIndexData, capitalize } = Utils;
function initSorting(items) {
@@ -9,10 +13,10 @@ function initSorting(items) {
appendTo: 'parent',
distance: 7,
placeholder: 'checklist-item placeholder',
scroll: false,
scroll: true,
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
EscapeActions.clickExecute(evt.target, 'inlinedForm');
},
stop(evt, ui) {
const parent = ui.item.parents('.js-checklist-items');
@@ -51,7 +55,7 @@ BlazeComponent.extendComponent({
return Meteor.user() && Meteor.user().isBoardMember();
}
// Disable sorting if the current user is not a board member or is a miniscreen
// Disable sorting if the current user is not a board member
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
@@ -73,6 +77,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({
@@ -82,7 +92,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({
@@ -90,29 +101,34 @@ BlazeComponent.extendComponent({
title,
sort: card.checklists().count(),
});
this.closeAllInlinedForms();
setTimeout(() => {
this.$('.add-checklist-item')
.last()
.click();
}, 100);
}
textarea.value = '';
textarea.focus();
},
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 = '';
@@ -128,14 +144,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;
@@ -161,11 +169,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
@@ -186,14 +189,13 @@ BlazeComponent.extendComponent({
}
},
/** closes all inlined forms (checklist and checklist-item input fields) */
closeAllInlinedForms() {
this.$('.js-close-inlined-form').click();
},
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');
},
@@ -202,20 +204,69 @@ 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,
keydown: this.pressKey,
},
];
},
}).register('checklists');
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('boardsSwimlanesAndLists');
Template.checklists.helpers({
checklists() {
const card = Cards.findOne(this.cardId);
const ret = card.checklists();
return ret;
},
hideCheckedItems() {
const currentUser = Meteor.user();
if (currentUser) return currentUser.hasHideCheckedItems();
@@ -223,39 +274,77 @@ Template.checklists.helpers({
},
});
Template.addChecklistItemForm.onRendered(() => {
autosize($('textarea.js-add-checklist-item'));
});
BlazeComponent.extendComponent({
onRendered() {
autosize(this.$('textarea.js-add-checklist-item'));
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
events() {
return [
{
'click a.fa.fa-copy'(event) {
const $editor = this.$('textarea');
const promise = Utils.copyTextToClipboard($editor[0].value);
Template.editChecklistItemForm.onRendered(() => {
autosize($('textarea.js-edit-checklist-item'));
});
const $tooltip = this.$('.copied-tooltip');
Utils.showCopied(promise, $tooltip);
},
}
];
}
}).register('addChecklistItemForm');
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;
});
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');
//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);
}
});
});
BlazeComponent.extendComponent({
onRendered() {
autosize(this.$('textarea.js-edit-checklist-item'));
},
canModifyCard() {
return (
Meteor.user() &&
Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() &&
!Meteor.user().isWorker()
);
},
events() {
return [
{
'click a.fa.fa-copy'(event) {
const $editor = this.$('textarea');
const promise = Utils.copyTextToClipboard($editor[0].value);
Template.checklistDeleteDialog.onDestroyed(() => {
const $cardDetails = this.$('.card-details');
$cardDetails.off('scroll'); //Reactivate scrolling
$cardDetails.animate({ scrollTop: this.scrollState.position });
});
const $tooltip = this.$('.copied-tooltip');
Utils.showCopied(promise, $tooltip);
},
}
];
}
}).register('editChecklistItemForm');
Template.checklistItemDetail.helpers({
canModifyCard() {
@@ -289,3 +378,231 @@ BlazeComponent.extendComponent({
];
},
}).register('checklistItemDetail');
class DialogWithBoardSwimlaneListAndCard extends BlazeComponent {
/** returns the checklist dialog options
* @return Object with properties { boardId, swimlaneId, listId, cardId }
*/
getChecklistDialogOptions() {
}
/** checklist is done
* @param cardId the selected card id
* @param options the selected options (Object with properties { boardId, swimlaneId, listId, cardId })
*/
setDone(cardId, options) {
}
onCreated() {
this.currentBoardId = Utils.getCurrentBoardId();
this.selectedBoardId = new ReactiveVar(this.currentBoardId);
this.selectedSwimlaneId = new ReactiveVar('');
this.selectedListId = new ReactiveVar('');
this.setChecklistDialogOption(this.currentBoardId);
}
/** set the last confirmed dialog field values
* @param boardId the current board id
*/
setChecklistDialogOption(boardId) {
this.checklistDialogOption = {
'boardId' : "",
'swimlaneId' : "",
'listId' : "",
'cardId': "",
}
let currentOptions = this.getChecklistDialogOptions();
if (currentOptions && boardId && currentOptions[boardId]) {
this.checklistDialogOption = currentOptions[boardId];
if (this.checklistDialogOption.boardId &&
this.checklistDialogOption.swimlaneId &&
this.checklistDialogOption.listId
)
{
this.selectedBoardId.set(this.checklistDialogOption.boardId)
this.selectedSwimlaneId.set(this.checklistDialogOption.swimlaneId);
this.selectedListId.set(this.checklistDialogOption.listId);
}
}
this.getBoardData(this.selectedBoardId.get());
if (!this.selectedSwimlaneId.get() || !Swimlanes.findOne({_id: this.selectedSwimlaneId.get(), boardId: this.selectedBoardId.get()})) {
this.setFirstSwimlaneId();
}
if (!this.selectedListId.get() || !Lists.findOne({_id: this.selectedListId.get(), boardId: this.selectedBoardId.get()})) {
this.setFirstListId();
}
}
/** sets the first swimlane id */
setFirstSwimlaneId() {
try {
const board = Boards.findOne(this.selectedBoardId.get());
const swimlaneId = board.swimlanes().fetch()[0]._id;
this.selectedSwimlaneId.set(swimlaneId);
} catch (e) {}
}
/** sets the first list id */
setFirstListId() {
try {
const board = Boards.findOne(this.selectedBoardId.get());
const listId = board.lists().fetch()[0]._id;
this.selectedListId.set(listId);
} catch (e) {}
}
/** returns if the board id was the last confirmed one
* @param boardId check this board id
* @return if the board id was the last confirmed one
*/
isChecklistDialogOptionBoardId(boardId) {
let ret = this.checklistDialogOption.boardId == boardId;
return ret;
}
/** returns if the swimlane id was the last confirmed one
* @param swimlaneId check this swimlane id
* @return if the swimlane id was the last confirmed one
*/
isChecklistDialogOptionSwimlaneId(swimlaneId) {
let ret = this.checklistDialogOption.swimlaneId == swimlaneId;
return ret;
}
/** returns if the list id was the last confirmed one
* @param listId check this list id
* @return if the list id was the last confirmed one
*/
isChecklistDialogOptionListId(listId) {
let ret = this.checklistDialogOption.listId == listId;
return ret;
}
/** returns if the card id was the last confirmed one
* @param cardId check this card id
* @return if the card id was the last confirmed one
*/
isChecklistDialogOptionCardId(cardId) {
let ret = this.checklistDialogOption.cardId == cardId;
return ret;
}
/** returns all available board */
boards() {
const ret = Boards.find(
{
archived: false,
'members.userId': Meteor.userId(),
_id: { $ne: Meteor.user().getTemplatesBoardId() },
},
{
sort: { sort: 1 },
},
);
return ret;
}
/** returns all available swimlanes of the current board */
swimlanes() {
const board = Boards.findOne(this.selectedBoardId.get());
const ret = board.swimlanes();
return ret;
}
/** returns all available lists of the current board */
lists() {
const board = Boards.findOne(this.selectedBoardId.get());
const ret = board.lists();
return ret;
}
/** returns all available cards of the current list */
cards() {
const list = Lists.findOne(this.selectedListId.get());
const ret = list.cards(this.selectedSwimlaneId.get());
return ret;
}
/** get the board data from the server
* @param boardId get the board data of this board id
*/
getBoardData(boardId) {
const self = this;
Meteor.subscribe('board', boardId, false, {
onReady() {
const sameBoardId = self.selectedBoardId.get() == boardId;
self.selectedBoardId.set(boardId);
if (!sameBoardId) {
// reset swimlane id (for selection in cards())
self.setFirstSwimlaneId();
// reset list id (for selection in cards())
self.setFirstListId();
}
},
});
}
events() {
return [
{
'click .js-done'() {
const boardSelect = this.$('.js-select-boards')[0];
const boardId = boardSelect.options[boardSelect.selectedIndex].value;
const listSelect = this.$('.js-select-lists')[0];
const listId = listSelect.options[listSelect.selectedIndex].value;
const swimlaneSelect = this.$('.js-select-swimlanes')[0];
const swimlaneId = swimlaneSelect.options[swimlaneSelect.selectedIndex].value;
const cardSelect = this.$('.js-select-cards')[0];
const cardId = cardSelect.options[cardSelect.selectedIndex].value;
const options = {
'boardId' : boardId,
'swimlaneId' : swimlaneId,
'listId' : listId,
'cardId': cardId,
}
this.setDone(cardId, options);
Popup.back(2);
},
'change .js-select-boards'(event) {
const boardId = $(event.currentTarget).val();
this.getBoardData(boardId);
},
'change .js-select-swimlanes'(event) {
this.selectedSwimlaneId.set($(event.currentTarget).val());
},
'change .js-select-lists'(event) {
this.selectedListId.set($(event.currentTarget).val());
},
},
];
}
}
/** Move Checklist Dialog */
(class extends DialogWithBoardSwimlaneListAndCard {
getChecklistDialogOptions() {
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 DialogWithBoardSwimlaneListAndCard {
getChecklistDialogOptions() {
const ret = Meteor.user().getCopyChecklistDialogOptions();
return ret;
}
setDone(cardId, options) {
Meteor.user().setCopyChecklistDialogOption(this.currentBoardId, options);
this.data().checklist.copy(cardId);
}
}).register('copyChecklistPopup');
+39 -40
View File
@@ -20,6 +20,25 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
display: flex
justify-content: space-between
.checklist-progress-bar-container
display: flex
flex-direction: row
align-items: center
.checklist-progress-text
margin-right: 10px
.checklist-progress-bar
width: 80%
height: 10px
.checklist-progress
color: #fff !important
background-color: #2196F3 !important
padding: 0.01em 16px
border-radius: 16px
height: 100%
.checklist-title
.checkbox
float: left
@@ -39,49 +58,11 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
&.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
@@ -159,11 +140,29 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
padding-top: 2px
padding-right: 10px;
.js-delete-checklist-item
.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
display: inline-block
.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)
.checklist-details-menu
float: right
padding: 6px 10px 6px 10px
.edit-controls
label.toggle-label
margin-left: 2px
+4 -2
View File
@@ -27,9 +27,11 @@ template(name="deleteLabelPopup")
template(name="cardLabelsPopup")
ul.edit-labels-pop-over
each board.labels
li
li.js-card-label-item
a.card-label-edit-button.fa.fa-pencil.js-edit-label
span.card-label.card-label-selectable.js-select-label(class="card-label-{{color}}"
if isMiniScreenOrShowDesktopDragHandles
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}}")
+viewer
= name
+60 -8
View File
@@ -39,15 +39,67 @@ Template.createLabelPopup.helpers({
},
});
Template.cardLabelsPopup.events({
'click .js-select-label'(event) {
const card = Cards.findOne(Session.get('currentCard'));
const labelId = this._id;
card.toggleLabel(labelId);
event.preventDefault();
BlazeComponent.extendComponent({
onRendered() {
const itemsSelector = 'li.js-card-label-item:not(.placeholder)';
const $labels = this.$('.edit-labels-pop-over');
$labels.sortable({
connectWith: '.edit-labels-pop-over',
tolerance: 'pointer',
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
const content = currentItem.closest('.content')[0]
const offsetLeft = content.offsetLeft;
const offsetTop = $('.pop-over > .header').height() * -1;
ret.css("transform", `translate(${offsetLeft}px, ${offsetTop}px)`);
}
return ret;
},
distance: 7,
items: itemsSelector,
placeholder: 'card-label-wrapper placeholder',
start(evt, ui) {
ui.helper.css('z-index', 1000);
ui.placeholder.height(ui.helper.height());
EscapeActions.clickExecute(evt.target, 'inlinedForm');
},
stop(evt, ui) {
const newLabelOrderOnlyIds = ui.item.parent().children().toArray().map(_element => Blaze.getData(_element)._id)
const card = Blaze.getData(this);
card.board().setNewLabelOrder(newLabelOrderOnlyIds);
},
});
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$labels.sortable({
handle: '.label-handle',
});
}
});
},
'click .js-edit-label': Popup.open('editLabel'),
'click .js-add-label': Popup.open('createLabel'),
events() {
return [
{
'click .js-select-label'(event) {
const card = this.data();
const labelId = this.currentData()._id;
card.toggleLabel(labelId);
event.preventDefault();
},
'click .js-edit-label': Popup.open('editLabel'),
'click .js-add-label': Popup.open('createLabel'),
}
];
}
}).register('cardLabelsPopup');
Template.cardLabelsPopup.events({
});
Template.formLabel.events({
+25 -5
View File
@@ -2,6 +2,7 @@
// 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
@@ -12,10 +13,11 @@
padding: 3px 8px
max-width: 210px
min-width: 8px
overflow: ellipsis
word-wrap: break-word
height: 18px
vertical-align: bottom
min-height: 18px
vertical-align: middle
white-space: initial
overflow: initial
&:hover
color: white
@@ -27,12 +29,13 @@
&.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
i.fa-plus
margin-top: 3px
p
margin: 0px
.palette-colors
display: flex
@@ -44,9 +47,19 @@
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
@@ -133,6 +146,7 @@
height: 25px
margin: 0px 3% 7px 0px
width: 10.5%
max-width: 10.5%
cursor: pointer
.edit-labels
@@ -209,3 +223,9 @@
&:hover
background: #dbdbdb
ul.edit-labels-pop-over
span.fa.label-handle
padding-right: 10px;
span.fa.label-handle + .card-label
max-width: 180px
+43 -16
View File
@@ -2,21 +2,17 @@ template(name="minicard")
.minicard(
class="{{#if isLinkedCard}}linked-card{{/if}}"
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="minicard-{{colorClass}}")
if isMiniScreen
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
if isMiniScreenOrShowDesktopDragHandles
.handle
.fa.fa-arrows
unless isMiniScreen
if showDesktopDragHandles
.handle
.fa.fa-arrows
if cover
.minicard-cover(style="background-image: url('{{cover.url}}');")
if labels
.minicard-labels
.minicard-labels(class="{{#if hiddenMinicardLabelText}}minicard-labels-no-text{{/if}}")
each labels
unless hiddenMinicardLabelText
span.card-label(class="card-label-{{color}}" title=name)
span.js-card-label.card-label(class="card-label-{{color}}" title=name)
+viewer
= name
if hiddenMinicardLabelText
@@ -37,6 +33,9 @@ template(name="minicard")
if getArchived
span.linked-icon.linked-archived.fa.fa-archive
+viewer
if currentBoard.allowsCardNumber
span.card-number
| ##{getCardNumber}
= getTitle
if $eq 'subtext-with-full-path' currentBoard.presentParentTask
.parent-subtext
@@ -82,19 +81,28 @@ template(name="minicard")
+minicardCustomFieldDate
else if $eq definition.type "checkbox"
.materialCheckBox(class="{{#if value }}is-checked{{/if}}")
else if $eq definition.type "stringtemplate"
+viewer
= formattedStringtemplateCustomFieldValue(definition)
else
+viewer
= trueValue
if getAssignees
.minicard-assignees.js-minicard-assignees
each getAssignees
+userAvatar(userId=this)
if showAssignee
if getAssignees
.minicard-assignees.js-minicard-assignees
each getAssignees
+userAvatar(userId=this)
if getMembers
.minicard-members.js-minicard-members
each getMembers
+userAvatar(userId=this)
if showMembers
if getMembers
.minicard-members.js-minicard-members
each getMembers
+userAvatar(userId=this)
if showCreator
.minicard-creator
+userAvatar(userId=this.userId noRemove=true)
.badges
unless currentUser.isNoComments
@@ -114,6 +122,11 @@ template(name="minicard")
span.badge-text {{ voteCountPositive }}
span.badge-icon.fa.fa-thumbs-down(class="{{#if $eq voteState false}}text-red{{/if}}")
span.badge-text {{ voteCountNegative }}
if getPokerQuestion
.badge.badge-state-image-only(title=getPokerQuestion)
span.badge-icon.fa.fa-check(class="{{#if pokerState}}text-green{{/if}}")
if expiredPoker
span.badge-text {{ getPokerEstimation }}
if attachments.count
.badge
span.badge-icon.fa.fa-paperclip
@@ -122,3 +135,17 @@ template(name="minicard")
.badge(class="{{#if checklistFinished}}is-finished{{/if}}")
span.badge-icon.fa.fa-check-square-o
span.badge-text.check-list-text {{checklistFinishedCount}}/{{checklistItemCount}}
if allSubtasks.count
.badge
span.badge-icon.fa.fa-sitemap
span.badge-text.check-list-text {{subtasksFinishedCount}}/{{allSubtasksCount}}
//{{subtasksFinishedCount}}/{{subtasksCount}} does not work because when a subtaks is archived, the count goes down
if currentBoard.allowsCardSortingByNumber
.badge
span.badge-icon.fa.fa-sort
span.badge-text.check-list-sort {{ sort }}
template(name="editCardSortOrderPopup")
input.js-edit-card-sort-popup(type='text' autofocus value=sort dir="auto")
.edit-controls.clearfix
button.primary.confirm.js-submit-edit-card-sort-popup(type="submit") {{_ 'save'}}
+90 -13
View File
@@ -21,6 +21,66 @@ BlazeComponent.extendComponent({
}).format(customFieldTrueValue);
},
formattedStringtemplateCustomFieldValue(definition) {
const customField = this.data()
.customFieldsWD()
.find(f => f._id === definition._id);
const customFieldTrueValue =
customField && customField.trueValue ? customField.trueValue : [];
return customFieldTrueValue
.filter(value => !!value.trim())
.map(value =>
definition.settings.stringtemplateFormat.replace(/%\{value\}/gi, value),
)
.join(definition.settings.stringtemplateSeparator ?? '');
},
showCreator() {
if (this.data().board()) {
return (
this.data().board.allowsCreator === null ||
this.data().board().allowsCreator === undefined ||
this.data().board().allowsCreator
);
// return this.data().board().allowsCreator;
}
return false;
},
showMembers() {
if (this.data().board()) {
return (
this.data().board.allowsMembers === null ||
this.data().board().allowsMembers === undefined ||
this.data().board().allowsMembers
);
}
return false;
},
showAssignee() {
if (this.data().board()) {
return (
this.data().board.allowsAssignee === null ||
this.data().board().allowsAssignee === undefined ||
this.data().board().allowsAssignee
);
}
return false;
},
/** opens the card label popup only if clicked onto a label
* <li> this is necessary to have the data context of the minicard.
* if .js-card-label is used at click event, then only the data context of the label itself is available at this.currentData()
*/
cardLabelsPopup(event) {
if (this.find('.js-card-label:hover')) {
Popup.open("cardLabels")(event, {dataContextIfCurrentDataIsUndefined: this.currentData()});
}
},
events() {
return [
{
@@ -29,8 +89,6 @@ BlazeComponent.extendComponent({
else if (this.data().isLinkedBoard())
Utils.goBoardId(this.data().linkedId);
},
},
{
'click .js-toggle-minicard-label-text'() {
if (window.localStorage.getItem('hiddenMinicardLabelText')) {
window.localStorage.removeItem('hiddenMinicardLabelText'); //true
@@ -38,22 +96,14 @@ BlazeComponent.extendComponent({
window.localStorage.setItem('hiddenMinicardLabelText', 'true'); //true
}
},
},
'click span.badge-icon.fa.fa-sort, click span.badge-text.check-list-sort' : Popup.open("editCardSortOrder"),
'click .minicard-labels' : this.cardLabelsPopup,
}
];
},
}).register('minicard');
Template.minicard.helpers({
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
},
hiddenMinicardLabelText() {
currentUser = Meteor.user();
if (currentUser) {
@@ -65,3 +115,30 @@ Template.minicard.helpers({
}
},
});
BlazeComponent.extendComponent({
events() {
return [
{
'keydown input.js-edit-card-sort-popup'(evt) {
// enter = save
if (evt.keyCode === 13) {
this.find('button[type=submit]').click();
}
},
'click button.js-submit-edit-card-sort-popup'(event) {
// save button pressed
event.preventDefault();
const sort = this.$('.js-edit-card-sort-popup')[0]
.value
.trim();
if (!Number.isNaN(sort)) {
let card = this.data();
card.move(card.boardId, card.swimlaneId, card.listId, sort);
Popup.back();
}
},
}
]
}
}).register('editCardSortOrderPopup');
+14 -4
View File
@@ -80,8 +80,6 @@
.minicard-labels
float: none
display: flex
flex-wrap: wrap
.minicard-label
width: 11px
@@ -89,7 +87,11 @@
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
@@ -114,6 +116,10 @@
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
@@ -163,7 +169,8 @@
line-height: 12px
.minicard-members,
.minicard-assignees
.minicard-assignees,
.minicard-creator
float: right
margin-left: 5px
margin-bottom: 4px
@@ -187,6 +194,9 @@
.minicard-assignees
border-bottom: 1px solid red
.minicard-creator
border-bottom: 1px solid green
.minicard-members:empty,
.minicard-assignees:empty
display: none
+1 -1
View File
@@ -1,6 +1,6 @@
template(name="resultCard")
.result-card-wrapper
a.minicard-wrapper.card-title(href=originRelativeUrl)
a.minicard-wrapper.js-minicard.card-title(href=originRelativeUrl)
+minicard(this)
//= card.title
ul.result-card-context-list
+25 -1
View File
@@ -5,7 +5,31 @@ Template.resultCard.helpers({
});
BlazeComponent.extendComponent({
clickOnMiniCard(evt) {
evt.preventDefault();
const this_ = this;
const cardId = this.currentData()._id;
const boardId = this.currentData().boardId;
Meteor.subscribe('popupCardData', cardId, {
onReady() {
Session.set('popupCardId', cardId);
Session.set('popupCardBoardId', boardId);
this_.cardDetailsPopup(evt);
},
});
},
cardDetailsPopup(event) {
if (!Popup.isOpen()) {
Popup.open("cardDetails")(event);
}
},
events() {
return [{}];
return [
{
'click .js-minicard': this.clickOnMiniCard,
},
];
},
}).register('resultCard');
+1 -2
View File
@@ -15,9 +15,8 @@ template(name="subtasks")
+inlinedForm(autoclose=false classNames="js-add-subtask" cardId = cardId)
+addSubtaskItemForm
else
a.js-open-inlined-form
a.js-open-inlined-form(title="{{_ 'add-subtask'}}")
i.fa.fa-plus
| {{_ 'add-subtask'}}...
template(name="subtaskDetail")
.js-subtasks.subtask
+3
View File
@@ -37,6 +37,8 @@ BlazeComponent.extendComponent({
? targetBoard.getDefaultSwimline()._id
: targetSwimlane._id;
const nextCardNumber = targetBoard.getNextCardNumber();
if (title) {
const _id = Cards.insert({
title,
@@ -49,6 +51,7 @@ BlazeComponent.extendComponent({
sort: sortIndex,
swimlaneId,
type: 'cardType-card',
cardNumber: nextCardNumber
});
// In case the filter is active we need to add the newly inserted card in
+7 -8
View File
@@ -86,7 +86,7 @@ select
margin-bottom: 8px
&.inline
width: 100%
width: 100%
option[disabled]
color: #8c8c8c
@@ -117,7 +117,6 @@ button
display: inline-block
font-weight: 700
line-height: 22px
margin: 8px 4px 0 0
padding: 7px 20px
text-align: center
@@ -226,20 +225,19 @@ textarea
.edit-controls,
.add-controls
display: flex
align-items: baseline
margin-top: 0
align-items: center
margin-top: 0px
margin-bottom: 12px
button[type=submit]
input[type=button]
float: left
height: 32px
margin-top: -2px
padding-top: 5px
padding-bottom: 5px
margin-bottom: 0px
.fa-times-thin
font-size: 26px
margin: 3px 4px
margin: 3px 10px
// Material Design checkboxes
[type="checkbox"]:not(:checked),
@@ -247,6 +245,7 @@ textarea
position: absolute
left: -9999px
visibility: hidden
display: none
.materialCheckBox
position: relative
+42 -27
View File
@@ -1,3 +1,5 @@
require('/client/lib/jquery-ui.js')
const { calculateIndex } = Utils;
BlazeComponent.extendComponent({
@@ -93,7 +95,7 @@ BlazeComponent.extendComponent({
$cards.sortable('cancel');
if (MultiSelection.isActive()) {
Cards.find(MultiSelection.getMongoSelector()).forEach((card, i) => {
Cards.find(MultiSelection.getMongoSelector(), {sort: ['sort']}).forEach((card, i) => {
const newSwimlaneId = targetSwimlaneId
? targetSwimlaneId
: card.swimlaneId || defaultSwimlaneId;
@@ -114,25 +116,51 @@ BlazeComponent.extendComponent({
}
boardComponent.setIsDragging(false);
},
sort(event, ui) {
const $boardCanvas = $('.board-canvas');
const boardCanvas = $boardCanvas[0];
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
boardCanvas.scrollLeft += 15;
}
if (
event.pageY > boardCanvas.offsetHeight - 10 &&
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
boardCanvas.scrollTop -= 15;
}
},
activate(event, ui) {
const $boardCanvas = $('.board-canvas');
const boardCanvas = $boardCanvas[0];
// scrollTopMax and scrollLeftMax only available at Firefox (https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTopMax)
// 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(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
}
if (Utils.isMiniScreen() || showDesktopDragHandles) {
if (Utils.isMiniScreenOrShowDesktopDragHandles()) {
$cards.sortable({
handle: '.handle',
});
} else if (!Utils.isMiniScreen() && !showDesktopDragHandles) {
} else {
$cards.sortable({
handle: '.minicard',
});
@@ -178,19 +206,6 @@ BlazeComponent.extendComponent({
},
}).register('list');
Template.list.helpers({
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
},
});
Template.miniList.events({
'click .js-select-list'() {
const listId = this._id;
+31 -22
View File
@@ -4,7 +4,6 @@
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.
@@ -12,6 +11,8 @@
border-left: 1px solid darken(white, 20%)
padding: 0
float: left
min-width: 270px
max-width: 270px
&:first-child
margin-left: 5px
@@ -85,13 +86,9 @@
color: #a6a6a6
.list-header-menu
position: absolute
padding: 27px 19px
margin-top: 1px
top: -7px
right: 3px
float: right
.list-header-plus-icon
.list-header-plus-top
color: #a6a6a6
margin-right: 15px
@@ -100,9 +97,10 @@
.cardCount
color: #8c8c8c
font-size: 0.8em
font-size: 12px
font-weight: bold
.list-header .list-header-plus-icon, .js-open-list-menu, .list-header-menu a
.list-header .list-header-plus-top, .js-open-list-menu, .list-header-menu a
color #4d4d4d
padding-left 4px
@@ -160,18 +158,6 @@
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
@@ -215,7 +201,6 @@
display: flex
align-items: center
.list-header-left-icon
display: inline
padding: 7px
padding-right: 27px
margin-top: 1px
@@ -238,6 +223,30 @@
right: 10px
font-size: 24px
.list-header
display: grid
grid-template-columns: 30px 5fr 1fr
.list-header-left-icon
display: grid
grid-row: 1/3
grid-column: 1
.list-header-name
grid-row: 1
grid-column: 2
align-self: end
.cardCount
grid-row: 2
grid-column: 2
align-self: start
.list-header-menu
grid-row: 1/3
grid-column: 3
.inlined-form
grid-row: 1/3
grid-column: 1/4
.edit-controls
align-items: initial
.link-board-wrapper
display: flex
align-items: baseline
+16 -9
View File
@@ -4,6 +4,17 @@ template(name="listBody")
if cards.count
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
ul.sidebar-list
each customFieldsSum
li
+viewer
= name
if $eq customFieldsSum.type "number"
+viewer
= value
if $eq customFieldsSum.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(value)
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=originRelativeUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
@@ -19,19 +30,14 @@ template(name="listBody")
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
else
a.open-minicard-composer.js-card-composer.js-open-inlined-form
a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}")
i.fa.fa-plus
| {{_ 'add-card'}}
template(name="spinnerList")
.sk-spinner.sk-spinner-wave.sk-spinner-list(
class=currentBoard.colorClass
.sk-spinner.sk-spinner-list(
class="{{currentBoard.colorClass}} {{getSkSpinnerName}}"
id="showMoreResults")
.sk-rect1
.sk-rect2
.sk-rect3
.sk-rect4
.sk-rect5
+spinnerRaw
template(name="addCardForm")
.minicard.minicard-composer.js-composer
@@ -47,6 +53,7 @@ template(name="addCardForm")
.add-controls.clearfix
button.primary.confirm(type="submit") {{_ 'add'}}
a.fa.fa-times-thin.js-close-inlined-form
unless currentBoard.isTemplatesBoard
unless currentBoard.isTemplateBoard
span.quiet
+74 -37
View File
@@ -1,3 +1,5 @@
import { Spinner } from '/client/lib/spinner';
const subManager = new SubsManager();
const InfiniteScrollIter = 10;
@@ -11,6 +13,13 @@ BlazeComponent.extendComponent({
return [];
},
customFieldsSum() {
return CustomFields.find({
boardIds: { $in: [Session.get('currentBoard')] },
showSumAtTopOfList: true,
});
},
openForm(options) {
options = options || {};
options.position = options.position || 'top';
@@ -79,7 +88,9 @@ BlazeComponent.extendComponent({
Utils.boardView() === 'board-view-cal' ||
!Utils.boardView()
)
swimlaneId = board.getDefaultSwimline()._id;
swimlaneId = board.getDefaultSwimline()._id;
const nextCardNumber = board.getNextCardNumber();
const _id = Cards.insert({
title,
@@ -91,6 +102,7 @@ BlazeComponent.extendComponent({
sort: sortIndex,
swimlaneId,
type: cardType,
cardNumber: nextCardNumber,
linkedId,
});
@@ -116,8 +128,6 @@ BlazeComponent.extendComponent({
if (position === 'bottom') {
this.scrollToBottom();
}
formComponent.reset();
}
},
@@ -138,6 +148,10 @@ BlazeComponent.extendComponent({
// If the card is already selected, we want to de-select it.
// XXX We should probably modify the minicard href attribute instead of
// overwriting the event in case the card is already selected.
} else if (Utils.isMiniScreen()) {
evt.preventDefault();
Session.set('popupCardId', this.currentData()._id);
this.cardDetailsPopup(evt);
} else if (Session.equals('currentCard', this.currentData()._id)) {
evt.stopImmediatePropagation();
evt.preventDefault();
@@ -206,6 +220,12 @@ BlazeComponent.extendComponent({
);
},
cardDetailsPopup(event) {
if (!Popup.isOpen()) {
Popup.open("cardDetails")(event);
}
},
events() {
return [
{
@@ -241,7 +261,7 @@ BlazeComponent.extendComponent({
Boards.findOne(currentBoardId)
.customFields()
.fetch(),
function(field) {
function (field) {
if (field.automaticallyOnCard || field.alwaysOnCard)
arr.push({ _id: field._id, value: null });
},
@@ -257,9 +277,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) {
@@ -313,7 +336,7 @@ BlazeComponent.extendComponent({
[
// User mentions
{
match: /\B@([\w.]*)$/,
match: /\B@([\w.-]*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
callback(
@@ -324,6 +347,9 @@ BlazeComponent.extendComponent({
);
},
template(user) {
if (user.profile && user.profile.fullname) {
return (user.username + " (" + user.profile.fullname + ")");
}
return user.username;
},
replace(user) {
@@ -340,6 +366,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
@@ -476,7 +505,7 @@ BlazeComponent.extendComponent({
evt.preventDefault();
const linkedId = $('.js-select-cards option:selected').val();
if (!linkedId) {
Popup.close();
Popup.back();
return;
}
const _id = Cards.insert({
@@ -491,7 +520,7 @@ BlazeComponent.extendComponent({
linkedId,
});
Filter.addException(_id);
Popup.close();
Popup.back();
},
'click .js-link-board'(evt) {
//LINK BOARD
@@ -502,7 +531,7 @@ BlazeComponent.extendComponent({
!impBoardId ||
Cards.findOne({ linkedId: impBoardId, archived: false })
) {
Popup.close();
Popup.back();
return;
}
const _id = Cards.insert({
@@ -517,7 +546,7 @@ BlazeComponent.extendComponent({
linkedId: impBoardId,
});
Filter.addException(_id);
Popup.close();
Popup.back();
},
},
];
@@ -549,10 +578,11 @@ 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.findOne({
board = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
_id: {
@@ -564,7 +594,7 @@ BlazeComponent.extendComponent({
});
}
if (!board) {
Popup.close();
Popup.back();
return;
}
const boardId = board._id;
@@ -688,17 +718,18 @@ BlazeComponent.extendComponent({
},
(err, data) => {
_id = data;
subManager.subscribe('board', _id, false);
},
);
}
Popup.close();
Popup.back();
},
},
];
},
}).register('searchElementPopup');
BlazeComponent.extendComponent({
(class extends Spinner {
onCreated() {
this.cardlimit = this.parentComponent().cardlimit;
@@ -726,7 +757,7 @@ BlazeComponent.extendComponent({
.parentComponent()
.data()._id;
}
},
}
onRendered() {
this.spinner = this.find('.sk-spinner-list');
@@ -741,21 +772,18 @@ BlazeComponent.extendComponent({
);
this.updateList();
},
}
onDestroyed() {
$(this.container).off(`scroll.spinner_${this.swimlaneId}_${this.listId}`);
$(window).off(`resize.spinner_${this.swimlaneId}_${this.listId}`);
},
}
updateList() {
// Use fallback when requestIdleCallback is not available on iOS and Safari
// https://www.afasterweb.com/2017/11/20/utilizing-idle-moments/
checkIdleTime =
window.requestIdleCallback ||
function(handler) {
checkIdleTime() {
return window.requestIdleCallback ||
function (handler) {
const startTime = Date.now();
return setTimeout(function() {
return setTimeout(function () {
handler({
didTimeout: false,
timeRemaining() {
@@ -764,24 +792,33 @@ BlazeComponent.extendComponent({
});
}, 1);
};
}
updateList() {
// Use fallback when requestIdleCallback is not available on iOS and Safari
// https://www.afasterweb.com/2017/11/20/utilizing-idle-moments/
if (this.spinnerInView()) {
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
checkIdleTime(() => this.updateList());
this.checkIdleTime(() => this.updateList());
}
},
}
spinnerInView() {
const parentViewHeight = this.container.clientHeight;
const bottomViewPosition = this.container.scrollTop + parentViewHeight;
const threshold = this.spinner.offsetTop;
// spinner deleted
if (!this.spinner.offsetTop) {
return false;
}
return bottomViewPosition > threshold;
},
}).register('spinnerList');
const spinnerViewPosition = this.spinner.offsetTop - this.container.offsetTop + this.spinner.clientHeight;
const parentViewHeight = this.container.clientHeight;
const bottomViewPosition = this.container.scrollTop + parentViewHeight;
return bottomViewPosition > spinnerViewPosition;
}
getSkSpinnerName() {
return "sk-spinner-" + super.getSpinnerName().toLowerCase();
}
}.register('spinnerList'));
+16 -9
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}} {{_ 'cards-count'}}
if showCardsCountForList cards.count
span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.count}}
if isMiniScreen
if currentList
if isWatching
@@ -28,8 +28,8 @@ template(name="listHeader")
div.list-header-menu
unless currentUser.isCommentOnly
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
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
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
@@ -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
a.fa.fa-navicon.js-open-list-menu
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 showDesktopDragHandles
if isShowDesktopDragHandles
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
+24 -19
View File
@@ -85,6 +85,14 @@ BlazeComponent.extendComponent({
return limit >= 0 && count >= limit;
},
cardsCountForListIsOne(count) {
if (count === 1) {
return TAPi18n.__('cards-count-one');
} else {
return TAPi18n.__('cards-count');
}
},
events() {
return [
{
@@ -93,7 +101,7 @@ BlazeComponent.extendComponent({
this.starred(!this.starred());
},
'click .js-open-list-menu': Popup.open('listAction'),
'click .js-add-card'(event) {
'click .js-add-card.list-header-plus-top'(event) {
const listDom = $(event.target).parents(
`#js-list-${this.currentData()._id}`,
)[0];
@@ -114,18 +122,7 @@ BlazeComponent.extendComponent({
Template.listHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
},
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
},
}
});
Template.listActionPopup.helpers({
@@ -144,23 +141,31 @@ Template.listActionPopup.helpers({
Template.listActionPopup.events({
'click .js-list-subscribe'() {},
'click .js-add-card.list-header-plus-bottom'(event) {
const listDom = $(`#js-list-${this._id}`)[0];
const listComponent = BlazeComponent.getComponentForElement(listDom);
listComponent.openForm({
position: 'bottom',
});
Popup.back();
},
'click .js-set-color-list': Popup.open('setListColor'),
'click .js-select-cards'() {
const cardIds = this.allCards().map(card => card._id);
MultiSelection.add(cardIds);
Popup.close();
Popup.back();
},
'click .js-toggle-watch-list'() {
const currentList = this;
const level = currentList.findWatcher(Meteor.userId()) ? null : 'watching';
Meteor.call('watch', 'list', currentList._id, level, (err, ret) => {
if (!err && ret) Popup.close();
if (!err && ret) Popup.back();
});
},
'click .js-close-list'(event) {
event.preventDefault();
this.archive();
Popup.close();
Popup.back();
},
'click .js-set-wip-limit': Popup.open('setWipLimit'),
'click .js-more': Popup.open('listMore'),
@@ -236,7 +241,7 @@ BlazeComponent.extendComponent({
Template.listMorePopup.events({
'click .js-delete': Popup.afterConfirm('listDelete', function() {
Popup.close();
Popup.back();
// TODO how can we avoid the fetch call?
const allCards = this.allCards().fetch();
const allCardIds = _.pluck(allCards, '_id');
@@ -302,11 +307,11 @@ BlazeComponent.extendComponent({
},
'click .js-submit'() {
this.currentList.setColor(this.currentColor.get());
Popup.close();
Popup.back();
},
'click .js-remove-color'() {
this.currentList.setColor(null);
Popup.close();
Popup.back();
},
},
];
+5 -5
View File
@@ -3,7 +3,7 @@ import {
OPERATOR_HAS,
OPERATOR_SORT,
OPERATOR_USER,
ORDER_DESCENDING,
ORDER_ASCENDING,
PREDICATE_DUE_AT,
} from '../../../config/search-const';
import { QueryParams } from '../../../config/query-classes';
@@ -38,12 +38,12 @@ BlazeComponent.extendComponent({
{
'click .js-due-cards-view-me'() {
Utils.setDueCardsView('me');
Popup.close();
Popup.back();
},
'click .js-due-cards-view-all'() {
Utils.setDueCardsView('all');
Popup.close();
Popup.back();
},
},
];
@@ -62,14 +62,14 @@ class DueCardsComponent extends CardSearchPagedComponent {
// queryParams[OPERATOR_LIMIT] = 5;
queryParams.addPredicate(OPERATOR_SORT, {
name: PREDICATE_DUE_AT,
order: ORDER_DESCENDING,
order: ORDER_ASCENDING,
});
if (Utils.dueCardsView() !== 'all') {
queryParams.addPredicate(OPERATOR_USER, Meteor.user().username);
}
this.runGlobalSearch(queryParams.getQueryParams());
this.runGlobalSearch(queryParams);
}
dueCardsView() {
+2
View File
@@ -1,4 +1,6 @@
template(name="editor")
a.fa.fa-copy(title="{{_ 'copy-text-to-clipboard'}}")
span.copied-tooltip {{_ 'copied'}}
textarea.editor(
dir="auto"
class="{{class}}"
+312 -264
View File
@@ -1,272 +1,315 @@
Template.editor.onRendered(() => {
const textareaSelector = 'textarea';
const mentions = [
// User mentions
{
match: /\B@([\w.]*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
callback(
currentBoard
.activeMembers()
.map(member => {
const username = Users.findOne(member.userId).username;
return username.includes(term) ? username : null;
})
.filter(Boolean),
);
},
template(value) {
return value;
},
replace(username) {
return `@${username} `;
},
index: 1,
},
];
const enableTextarea = function() {
const $textarea = this.$(textareaSelector);
autosize($textarea);
$textarea.escapeableTextComplete(mentions);
};
if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false) {
const isSmall = Utils.isMiniScreen();
const toolbar = isSmall
? [
['view', ['fullscreen']],
['table', ['table']],
['font', ['bold', 'underline']],
//['fontsize', ['fontsize']],
['color', ['color']],
]
: [
['style', ['style']],
['font', ['bold', 'underline', 'clear']],
['fontsize', ['fontsize']],
['fontname', ['fontname']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']],
//['insert', ['link', 'picture', 'video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled
//['insert', ['link', 'picture']], // modal popup has issue somehow :(
['view', ['fullscreen', 'help']],
];
const cleanPastedHTML = function(input) {
const badTags = [
'style',
'script',
'applet',
'embed',
'noframes',
'noscript',
'meta',
'link',
'button',
'form',
].join('|');
const badPatterns = new RegExp(
`(?:${[
`<(${badTags})s*[^>][\\s\\S]*?<\\/\\1>`,
`<(${badTags})[^>]*?\\/>`,
].join('|')})`,
'gi',
);
let output = input;
// remove bad Tags
output = output.replace(badPatterns, '');
// remove attributes ' style="..."'
const badAttributes = new RegExp(
`(?:${[
'on\\S+=([\'"]?).*?\\1',
'href=([\'"]?)javascript:.*?\\2',
'style=([\'"]?).*?\\3',
'target=\\S+',
].join('|')})`,
'gi',
);
output = output.replace(badAttributes, '');
output = output.replace(/(<a )/gi, '$1target=_ '); // always to new target
return output;
};
const editor = '.editor';
const selectors = [
`.js-new-description-form ${editor}`,
`.js-new-comment-form ${editor}`,
`.js-edit-comment ${editor}`,
].join(','); // only new comment and edit comment
const inputs = $(selectors);
if (inputs.length === 0) {
// only enable richereditor to new comment or edit comment no others
enableTextarea();
} else {
const placeholder = inputs.attr('placeholder') || '';
const mSummernotes = [];
const getSummernote = function(input) {
const idx = inputs.index(input);
if (idx > -1) {
return mSummernotes[idx];
}
return undefined;
};
inputs.each(function(idx, input) {
mSummernotes[idx] = $(input).summernote({
placeholder,
callbacks: {
onInit(object) {
const originalInput = this;
$(originalInput).on('submitted', function() {
// when comment is submitted, the original textarea will be set to '', so shall we
if (!this.value) {
const sn = getSummernote(this);
sn && sn.summernote('code', '');
}
});
const jEditor = object && object.editable;
const toolbar = object && object.toolbar;
if (jEditor !== undefined) {
jEditor.escapeableTextComplete(mentions);
}
if (toolbar !== undefined) {
const fBtn = toolbar.find('.btn-fullscreen');
fBtn.on('click', function() {
const $this = $(this),
isActive = $this.hasClass('active');
$('.minicards,#header-quick-access').toggle(!isActive); // mini card is still showing when editor is in fullscreen mode, we hide here manually
});
}
},
const specialHandles = [
{userId: 'board_members', username: 'board_members'},
{userId: 'card_members', username: 'card_members'}
];
const specialHandleNames = specialHandles.map(m => m.username);
onImageUpload(files) {
const $summernote = getSummernote(this);
if (files && files.length > 0) {
const image = files[0];
const currentCard = Cards.findOne(Session.get('currentCard'));
const MAX_IMAGE_PIXEL = Utils.MAX_IMAGE_PIXEL;
const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO;
const insertImage = src => {
const img = document.createElement('img');
img.src = src;
img.setAttribute('width', '100%');
$summernote.summernote('insertNode', img);
};
const processData = function(fileObj) {
Utils.processUploadedAttachment(
currentCard,
fileObj,
attachment => {
if (
attachment &&
attachment._id &&
attachment.isImage()
) {
attachment.one('uploaded', function() {
const maxTry = 3;
const checkItvl = 500;
let retry = 0;
const checkUrl = function() {
// even though uploaded event fired, attachment.url() is still null somehow //TODO
const url = attachment.url();
if (url) {
insertImage(
`${location.protocol}//${location.host}${url}`,
);
} else {
retry++;
if (retry < maxTry) {
setTimeout(checkUrl, checkItvl);
BlazeComponent.extendComponent({
onRendered() {
const textareaSelector = 'textarea';
const mentions = [
// User mentions
{
match: /\B@([\w.-]*)$/,
search(term, callback) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
callback(
_.union(
currentBoard
.activeMembers()
.map(member => {
const user = Users.findOne(member.userId);
const username = user.username;
const fullName = user.profile && user.profile !== undefined && user.profile.fullname ? user.profile.fullname : "";
return username.includes(term) || fullName.includes(term) ? user : null;
})
.filter(Boolean), [...specialHandles])
);
},
template(user) {
if (user.profile && user.profile.fullname) {
return (user.profile.fullname + " (" + user.username + ")");
}
return user.username;
},
replace(user) {
if (user.profile && user.profile.fullname) {
return `@${user.username} (${user.profile.fullname}) `;
}
return `@${user.username} `;
},
index: 1,
},
];
const enableTextarea = function() {
const $textarea = this.$(textareaSelector);
autosize($textarea);
$textarea.escapeableTextComplete(mentions);
};
if (Meteor.settings.public.RICHER_CARD_COMMENT_EDITOR !== false) {
const isSmall = Utils.isMiniScreen();
const toolbar = isSmall
? [
['view', ['fullscreen']],
['table', ['table']],
['font', ['bold', 'underline']],
//['fontsize', ['fontsize']],
['color', ['color']],
]
: [
['style', ['style']],
['font', ['bold', 'underline', 'clear']],
['fontsize', ['fontsize']],
['fontname', ['fontname']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']],
//['insert', ['link', 'picture', 'video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled
['insert', ['link']], //, 'picture']], // modal popup has issue somehow :(
['view', ['fullscreen', 'codeview', 'help']],
];
const cleanPastedHTML = function(input) {
const badTags = [
'style',
'script',
'applet',
'embed',
'noframes',
'noscript',
'meta',
'link',
'button',
'form',
].join('|');
const badPatterns = new RegExp(
`(?:${[
`<(${badTags})s*[^>][\\s\\S]*?<\\/\\1>`,
`<(${badTags})[^>]*?\\/>`,
].join('|')})`,
'gi',
);
let output = input;
// remove bad Tags
output = output.replace(badPatterns, '');
// remove attributes ' style="..."'
const badAttributes = new RegExp(
`(?:${[
'on\\S+=([\'"]?).*?\\1',
'href=([\'"]?)javascript:.*?\\2',
'style=([\'"]?).*?\\3',
'target=\\S+',
].join('|')})`,
'gi',
);
output = output.replace(badAttributes, '');
output = output.replace(/(<a )/gi, '$1target=_ '); // always to new target
return output;
};
const editor = '.editor';
const selectors = [
`.js-new-description-form ${editor}`,
`.js-new-comment-form ${editor}`,
`.js-edit-comment ${editor}`,
].join(','); // only new comment and edit comment
const inputs = $(selectors);
if (inputs.length === 0) {
// only enable richereditor to new comment or edit comment no others
enableTextarea();
} else {
const placeholder = inputs.attr('placeholder') || '';
const mSummernotes = [];
const getSummernote = function(input) {
const idx = inputs.index(input);
if (idx > -1) {
return mSummernotes[idx];
}
return undefined;
};
inputs.each(function(idx, input) {
mSummernotes[idx] = $(input).summernote({
placeholder,
callbacks: {
onInit(object) {
const originalInput = this;
$(originalInput).on('submitted', function() {
// when comment is submitted, the original textarea will be set to '', so shall we
if (!this.value) {
const sn = getSummernote(this);
sn && sn.summernote('code', '');
}
});
const jEditor = object && object.editable;
const toolbar = object && object.toolbar;
if (jEditor !== undefined) {
jEditor.escapeableTextComplete(mentions);
}
if (toolbar !== undefined) {
const fBtn = toolbar.find('.btn-fullscreen');
fBtn.on('click', function() {
const $this = $(this),
isActive = $this.hasClass('active');
$('.minicards,#header-quick-access').toggle(!isActive); // mini card is still showing when editor is in fullscreen mode, we hide here manually
});
}
},
onImageUpload(files) {
const $summernote = getSummernote(this);
if (files && files.length > 0) {
const image = files[0];
const currentCard = Utils.getCurrentCard();
const MAX_IMAGE_PIXEL = Utils.MAX_IMAGE_PIXEL;
const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO;
const insertImage = src => {
// process all image upload types to the description/comment window
const img = document.createElement('img');
img.src = src;
img.setAttribute('width', '100%');
$summernote.summernote('insertNode', img);
};
const processData = function(fileObj) {
Utils.processUploadedAttachment(
currentCard,
fileObj,
attachment => {
if (
attachment &&
attachment._id &&
attachment.isImage()
) {
attachment.one('uploaded', function() {
const maxTry = 3;
const checkItvl = 500;
let retry = 0;
const checkUrl = function() {
// even though uploaded event fired, attachment.url() is still null somehow //TODO
const url = attachment.url();
if (url) {
insertImage(
`${location.protocol}//${location.host}${url}`,
);
} else {
retry++;
if (retry < maxTry) {
setTimeout(checkUrl, checkItvl);
}
}
};
checkUrl();
});
}
},
);
};
if (MAX_IMAGE_PIXEL) {
const reader = new FileReader();
reader.onload = function(e) {
const dataurl = e && e.target && e.target.result;
if (dataurl !== undefined) {
// need to shrink image
Utils.shrinkImage({
dataurl,
maxSize: MAX_IMAGE_PIXEL,
ratio: COMPRESS_RATIO,
toBlob: true,
callback(blob) {
if (blob !== false) {
blob.name = image.name;
processData(blob);
}
};
checkUrl();
},
});
}
},
);
};
if (MAX_IMAGE_PIXEL) {
const reader = new FileReader();
reader.onload = function(e) {
const dataurl = e && e.target && e.target.result;
if (dataurl !== undefined) {
// need to shrink image
Utils.shrinkImage({
dataurl,
maxSize: MAX_IMAGE_PIXEL,
ratio: COMPRESS_RATIO,
toBlob: true,
callback(blob) {
if (blob !== false) {
blob.name = image.name;
processData(blob);
}
},
});
}
};
reader.readAsDataURL(image);
} else {
processData(image);
};
reader.readAsDataURL(image);
} else {
processData(image);
}
}
}
},
onPaste() {
// clear up unwanted tag info when user pasted in text
const thisNote = this;
const updatePastedText = function(object) {
const someNote = getSummernote(object);
// Fix Pasting text into a card is adding a line before and after
// (and multiplies by pasting more) by changing paste "p" to "br".
// Fixes https://github.com/wekan/wekan/2890 .
// == Fix Start ==
someNote.execCommand('defaultParagraphSeparator', false, 'br');
// == Fix End ==
const original = someNote.summernote('code');
const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML.
someNote.summernote('code', ''); //clear original
someNote.summernote('pasteHTML', cleaned); //this sets the displayed content editor to the cleaned pasted code.
};
setTimeout(function() {
//this kinda sucks, but if you don't do a setTimeout,
//the function is called before the text is really pasted.
updatePastedText(thisNote);
}, 10);
},
},
dialogsInBody: true,
disableDragAndDrop: true,
toolbar,
popover: {
image: [
[
'image',
['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone'],
],
['float', ['floatLeft', 'floatRight', 'floatNone']],
['remove', ['removeMedia']],
],
table: [
['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],
['delete', ['deleteRow', 'deleteCol', 'deleteTable']],
],
air: [
['color', ['color']],
['font', ['bold', 'underline', 'clear']],
],
},
height: 200,
});
});
}
} else {
enableTextarea();
}
});
},
onPaste(e) {
var clipboardData = e.clipboardData;
var pastedData = clipboardData.getData('Text');
import sanitizeXss from 'xss';
//if pasted data is an image, exit
if (!pastedData.length) {
e.preventDefault();
return;
}
// clear up unwanted tag info when user pasted in text
const thisNote = this;
const updatePastedText = function(object) {
const someNote = getSummernote(object);
// Fix Pasting text into a card is adding a line before and after
// (and multiplies by pasting more) by changing paste "p" to "br".
// Fixes https://github.com/wekan/wekan/2890 .
// == Fix Start ==
someNote.execCommand('defaultParagraphSeparator', false, 'br');
// == Fix End ==
const original = someNote.summernote('code');
const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML.
someNote.summernote('code', ''); //clear original
someNote.summernote('pasteHTML', cleaned); //this sets the displayed content editor to the cleaned pasted code.
};
setTimeout(function() {
//this kinda sucks, but if you don't do a setTimeout,
//the function is called before the text is really pasted.
updatePastedText(thisNote);
}, 10);
},
},
dialogsInBody: true,
spellCheck: true,
disableGrammar: false,
disableDragAndDrop: false,
toolbar,
popover: {
image: [
['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],
['float', ['floatLeft', 'floatRight', 'floatNone']],
['remove', ['removeMedia']],
],
link: [['link', ['linkDialogShow', 'unlink']]],
table: [
['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],
['delete', ['deleteRow', 'deleteCol', 'deleteTable']],
],
air: [
['color', ['color']],
['font', ['bold', 'underline', 'clear']],
],
},
height: 200,
});
});
}
} else {
enableTextarea();
}
},
events() {
return [
{
'click a.fa.fa-copy'(event) {
const $editor = this.$('textarea.editor');
const promise = Utils.copyTextToClipboard($editor[0].value);
const $tooltip = this.$('.copied-tooltip');
Utils.showCopied(promise, $tooltip);
},
}
]
}
}).register('editor');
import DOMPurify from 'dompurify';
// Additional safeAttrValue function to allow for other specific protocols
// See https://github.com/leizongmin/js-xss/issues/52#issuecomment-241354114
/*
function mySafeAttrValue(tag, name, value, cssFilter) {
// only when the tag is 'a' and attribute is 'href'
// then use your custom function
@@ -292,6 +335,7 @@ function mySafeAttrValue(tag, name, value, cssFilter) {
return sanitizeXss.safeAttrValue(tag, name, value, cssFilter);
}
}
*/
// XXX I believe we should compute a HTML rendered field on the server that
// would handle markdown and user mentions. We can simply have two
@@ -307,15 +351,17 @@ Blaze.Template.registerHelper(
let content = Blaze.toHTML(view.templateContentBlock);
const currentBoard = Boards.findOne(Session.get('currentBoard'));
if (!currentBoard)
return HTML.Raw(sanitizeXss(content, { safeAttrValue: mySafeAttrValue }));
const knowedUsers = currentBoard.members.map(member => {
return HTML.Raw(
DOMPurify.sanitize(content, { ALLOW_UNKNOWN_PROTOCOLS: true }),
);
const knowedUsers = _.union(currentBoard.members.map(member => {
const u = Users.findOne(member.userId);
if (u) {
member.username = u.username;
}
return member;
});
const mentionRegex = /\B@([\w.]*)/gi;
}), [...specialHandles]);
const mentionRegex = /\B@([\w.-]*)/gi;
let currentMention;
while ((currentMention = mentionRegex.exec(content)) !== null) {
@@ -351,7 +397,9 @@ Blaze.Template.registerHelper(
content = content.replace(fullMention, Blaze.toHTML(link));
}
return HTML.Raw(sanitizeXss(content, { safeAttrValue: mySafeAttrValue }));
return HTML.Raw(
DOMPurify.sanitize(content, { ALLOW_UNKNOWN_PROTOCOLS: true }),
);
}),
);
+7
View File
@@ -0,0 +1,7 @@
.new-comment,
.inlined-form
a.fa.fa-copy
float: right
position: relative
top: 20px
right: 6px
+23 -5
View File
@@ -11,9 +11,10 @@ template(name="globalSearchModalTitle")
| {{_ 'globalSearch-title'}}
template(name="resultsPaged")
h1
= resultsHeading.get
a.fa.fa-link(title="{{_ 'link-to-search' }}" href="{{ getSearchHref }}")
if resultsHeading.get
h1
= resultsHeading.get
a.fa.fa-link(title="{{_ 'link-to-search' }}" href="{{ getSearchHref }}")
each card in results.get
+resultCard(card)
table.global-search-footer
@@ -41,6 +42,24 @@ template(name="globalSearch")
autofocus dir="auto"
)
a.js-new-search.fa.fa-eraser
if debug.get.show
h1 Debug
if debug.get.showSelector
h2 Selector
button.js-copy-debug-selector
= 'Copy'
pre(
id="debug-selector"
)
= sessionData.selector
if debug.get.showProjection
h2 Projection
button.js-copy-debug-projection
= 'Copy'
pre(
id="debug-projection"
)
= sessionData.projection
if searching.get
+spinner
else if hasResults.get
@@ -50,8 +69,7 @@ template(name="globalSearch")
each msg in errorMessages
li.global-search-error-messages
= msg
else
+resultsPaged(this)
+resultsPaged(this)
else if serverError.get
.global-search-page
.global-search-help
+67 -33
View File
@@ -123,6 +123,7 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
operator_member_abbrev: TAPi18n.__('operator-member-abbrev'),
operator_assignee: TAPi18n.__('operator-assignee'),
operator_assignee_abbrev: TAPi18n.__('operator-assignee-abbrev'),
operator_creator: TAPi18n.__('operator-creator'),
operator_due: TAPi18n.__('operator-due'),
operator_created: TAPi18n.__('operator-created'),
operator_modified: TAPi18n.__('operator-modified'),
@@ -130,6 +131,9 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
operator_has: TAPi18n.__('operator-has'),
operator_sort: TAPi18n.__('operator-sort'),
operator_limit: TAPi18n.__('operator-limit'),
operator_debug: TAPi18n.__('operator-debug'),
operator_org: TAPi18n.__('operator-org'),
operator_team: TAPi18n.__('operator-team'),
predicate_overdue: TAPi18n.__('predicate-overdue'),
predicate_archived: TAPi18n.__('predicate-archived'),
predicate_all: TAPi18n.__('predicate-all'),
@@ -150,6 +154,8 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
predicate_end: TAPi18n.__('predicate-end'),
predicate_assignee: TAPi18n.__('predicate-assignee'),
predicate_member: TAPi18n.__('predicate-member'),
predicate_selector: TAPi18n.__('predicate-selector'),
predicate_projection: TAPi18n.__('predicate-projection'),
};
let text = '';
@@ -157,39 +163,44 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
['# ', 'globalSearch-instructions-heading'],
['\n', 'globalSearch-instructions-description'],
['\n\n', 'globalSearch-instructions-operators'],
['\n* ', 'globalSearch-instructions-operator-board'],
['\n* ', 'globalSearch-instructions-operator-list'],
['\n* ', 'globalSearch-instructions-operator-swimlane'],
['\n* ', 'globalSearch-instructions-operator-comment'],
['\n* ', 'globalSearch-instructions-operator-label'],
['\n* ', 'globalSearch-instructions-operator-hash'],
['\n* ', 'globalSearch-instructions-operator-user'],
['\n* ', 'globalSearch-instructions-operator-at'],
['\n* ', 'globalSearch-instructions-operator-member'],
['\n* ', 'globalSearch-instructions-operator-assignee'],
['\n* ', 'globalSearch-instructions-operator-due'],
['\n* ', 'globalSearch-instructions-operator-created'],
['\n* ', 'globalSearch-instructions-operator-modified'],
['\n* ', 'globalSearch-instructions-operator-status'],
['\n * ', 'globalSearch-instructions-status-archived'],
['\n * ', 'globalSearch-instructions-status-public'],
['\n * ', 'globalSearch-instructions-status-private'],
['\n * ', 'globalSearch-instructions-status-all'],
['\n * ', 'globalSearch-instructions-status-ended'],
['\n* ', 'globalSearch-instructions-operator-has'],
['\n* ', 'globalSearch-instructions-operator-sort'],
['\n* ', 'globalSearch-instructions-operator-limit'],
['\n- ', 'globalSearch-instructions-operator-board'],
['\n- ', 'globalSearch-instructions-operator-list'],
['\n- ', 'globalSearch-instructions-operator-swimlane'],
['\n- ', 'globalSearch-instructions-operator-comment'],
['\n- ', 'globalSearch-instructions-operator-label'],
['\n- ', 'globalSearch-instructions-operator-hash'],
['\n- ', 'globalSearch-instructions-operator-user'],
['\n- ', 'globalSearch-instructions-operator-at'],
['\n- ', 'globalSearch-instructions-operator-member'],
['\n- ', 'globalSearch-instructions-operator-assignee'],
['\n- ', 'globalSearch-instructions-operator-creator'],
['\n- ', 'globalSearch-instructions-operator-org'],
['\n- ', 'globalSearch-instructions-operator-team'],
['\n- ', 'globalSearch-instructions-operator-due'],
['\n- ', 'globalSearch-instructions-operator-created'],
['\n- ', 'globalSearch-instructions-operator-modified'],
['\n- ', 'globalSearch-instructions-operator-status'],
['\n - ', 'globalSearch-instructions-status-archived'],
['\n - ', 'globalSearch-instructions-status-public'],
['\n - ', 'globalSearch-instructions-status-private'],
['\n - ', 'globalSearch-instructions-status-all'],
['\n - ', 'globalSearch-instructions-status-ended'],
['\n- ', 'globalSearch-instructions-operator-has'],
['\n- ', 'globalSearch-instructions-operator-sort'],
['\n- ', 'globalSearch-instructions-operator-limit'],
['\n## ', 'heading-notes'],
['\n* ', 'globalSearch-instructions-notes-1'],
['\n* ', 'globalSearch-instructions-notes-2'],
['\n* ', 'globalSearch-instructions-notes-3'],
['\n* ', 'globalSearch-instructions-notes-3-2'],
['\n* ', 'globalSearch-instructions-notes-4'],
['\n* ', 'globalSearch-instructions-notes-5'],
['\n- ', 'globalSearch-instructions-notes-1'],
['\n- ', 'globalSearch-instructions-notes-2'],
['\n- ', 'globalSearch-instructions-notes-3'],
['\n- ', 'globalSearch-instructions-notes-3-2'],
['\n- ', 'globalSearch-instructions-notes-4'],
['\n- ', 'globalSearch-instructions-notes-5'],
].forEach(([prefix, instruction]) => {
text += `${prefix}${TAPi18n.__(instruction, tags)}`;
text += `${prefix}${TAPi18n.__(instruction, tags)}`
// Replace *<text>* with `<text>` so markdown shows correctly
.replace(/\*\</, '`<')
.replace(/\>\*/, '\>\`')
});
return text;
}
@@ -202,9 +213,8 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
}
events() {
return [
return super.events().concat([
{
...super.events()[0],
'submit .js-search-query-form'(evt) {
evt.preventDefault();
this.searchAllBoards(evt.target.searchQuery.value);
@@ -219,6 +229,30 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
);
document.getElementById('global-search-input').focus();
},
'click .js-copy-debug-selector'(evt) {
/* Get the text field */
const selector = document.getElementById("debug-selector");
try {
navigator.clipboard.writeText(selector.textContent);
alert("Selector copied to clipboard");
} catch(err) {
alert("Error copying text: " + err);
}
},
'click .js-copy-debug-projection'(evt) {
/* Get the text field */
const projection = document.getElementById("debug-projection");
try {
navigator.clipboard.writeText(projection.textContent);
alert("Projection copied to clipboard");
} catch(err) {
alert("Error copying text: " + err);
}
},
'click .js-board-title'(evt) {
evt.preventDefault();
const input = document.getElementById('global-search-input');
@@ -257,7 +291,7 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
this.hasResults.set(false);
},
},
];
]);
}
}
+12 -6
View File
@@ -16,12 +16,14 @@ template(name="header")
each currentBoard.lists
li(class="{{#if $.Session.equals 'currentList' _id}}current{{/if}}")
a.js-select-list
= title
+viewer
= title
else
each currentUser.starredBoards
li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
a(href="{{pathFor 'board' id=_id slug=slug}}")
= title
+viewer
= title
#header-new-board-icon
else
//-
@@ -31,12 +33,13 @@ template(name="header")
unless currentSetting.hideLogo
if currentSetting.customTopLeftCornerLogoImageUrl
if currentSetting.customTopLeftCornerLogoLinkUrl
a(href="{{currentSetting.customTopLeftCornerLogoLinkUrl}}")
a(href="{{currentSetting.customTopLeftCornerLogoLinkUrl}}" alt="{{currentSetting.productName}}" title="{{currentSetting.productName}}")
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="{{#if currentSetting.customTopLeftCornerLogoHeight}}#{currentSetting.customTopLeftCornerLogoHeight}{{else}}27{{/if}}" width="auto" margin="0" padding="0")
unless currentSetting.customTopLeftCornerLogoLinkUrl
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="{{#if currentSetting.customTopLeftCornerLogoHeight}}#{currentSetting.customTopLeftCornerLogoHeight}{{else}}27{{/if}}" width="auto" margin="0" padding="0")
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="{{#if currentSetting.customTopLeftCornerLogoHeight}}#{currentSetting.customTopLeftCornerLogoHeight}{{else}}27{{/if}}" width="auto" margin="0" padding="0" alt="{{currentSetting.productName}}" title="{{currentSetting.productName}}")
unless currentSetting.customTopLeftCornerLogoImageUrl
img(src="{{pathFor '/logo-header.png'}}" alt="")
div#headerIsSettingDatabaseCallDone
img(src="{{pathFor '/logo-header.png'}}" alt="{{currentSetting.productName}}" title="{{currentSetting.productName}}")
span.allBoards
a(href="{{pathFor 'home'}}")
span.fa.fa-home
@@ -49,7 +52,8 @@ template(name="header")
each currentUser.starredBoards
li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
a(href="{{pathFor 'board' id=_id slug=slug}}")
= title
+viewer
= title
else
li.current.empty {{_ 'quick-access-description'}}
@@ -90,3 +94,5 @@ template(name="offlineWarning")
p
i.fa.fa-warning
| {{_ 'app-is-offline'}}
a.app-try-reconnect {{_ 'app-try-reconnect'}}
+24
View File
@@ -1,7 +1,24 @@
Meteor.subscribe('user-admin');
Meteor.subscribe('boards');
Meteor.subscribe('setting');
Meteor.subscribe('announcements');
Template.header.onCreated(function(){
const templateInstance = this;
templateInstance.currentSetting = new ReactiveVar();
templateInstance.isLoading = new ReactiveVar(false);
Meteor.subscribe('setting', {
onReady() {
templateInstance.currentSetting.set(Settings.findOne());
let currSetting = templateInstance.currentSetting.curValue;
if(currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined && document.getElementById("headerIsSettingDatabaseCallDone") != null)
document.getElementById("headerIsSettingDatabaseCallDone").style.display = 'none';
else if(document.getElementById("headerIsSettingDatabaseCallDone") != null)
document.getElementById("headerIsSettingDatabaseCallDone").style.display = 'block';
return this.stop();
},
});
});
Template.header.helpers({
wrappedHeader() {
return !Session.get('currentBoard');
@@ -41,3 +58,10 @@ Template.header.events({
Session.set('currentCard', null);
},
});
Template.offlineWarning.events({
'click a.app-try-reconnect'(event) {
event.preventDefault();
Meteor.reconnect();
},
});
+12 -1
View File
@@ -99,7 +99,7 @@
height: 28px
font-size: 12px
display: flex
z-index: 21
z-index: 1000
padding: 10px 0px
.allBoards
@@ -135,6 +135,14 @@
padding: 12px 10px
margin: -10px 0px
.viewer
display: inline
white-space: nowrap
p
display: inline
white-space: nowrap
&.current
color: darken(white, 5%)
@@ -242,3 +250,6 @@
p
margin: 7px
padding: 0
#headerIsSettingDatabaseCallDone
display: none;
+11 -3
View File
@@ -1,6 +1,6 @@
head
title
meta(name="viewport" content="maximum-scale=1.0,width=device-width,initial-scale=1.0,user-scalable=0")
meta(name="viewport" content="width=device-width, initial-scale=1")
meta(http-equiv="X-UA-Compatible" content="IE=edge")
//- XXX We should use pathFor in the following `href` to support the case
where the application is deployed with a path prefix, but it seems to be
@@ -34,8 +34,9 @@ template(name="userFormsLayout")
img(src="{{currentSetting.customLoginLogoImageUrl}}" width="300" height="auto")
br
unless currentSetting.customLoginLogoImageUrl
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
br
div#isSettingDatabaseCallDone
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
br
if currentSetting.textBelowCustomLoginLogo
+viewer
| {{currentSetting.textBelowCustomLoginLogo}}
@@ -47,6 +48,13 @@ template(name="userFormsLayout")
+Template.dynamic(template=content)
if currentSetting.displayAuthenticationMethod
+connectionMethod(authenticationMethod=currentSetting.defaultAuthenticationMethod)
if isLegalNoticeLinkExist
div#legalNoticeDiv
span#legalNoticeSpan {{_ 'acceptance_of_our_legalNotice'}}
a#legalNoticeAtLink.at-link(href="{{currentSetting.legalNotice}}", target="_blank", rel="noopener noreferrer")
| {{_ 'legalNotice'}}
if getLegalNoticeWithWritTraduction
div
div.at-form-lang
select.select-lang.js-userform-set-language
each languages
+120
View File
@@ -6,6 +6,9 @@ const i18nTagToT9n = i18nTag => {
return i18nTag;
};
let alreadyCheck = 1;
let isCheckDone = false;
const validator = {
set(obj, prop, value) {
if (prop === 'state' && value !== 'signIn') {
@@ -20,6 +23,8 @@ const validator = {
},
};
// let isSettingDatabaseFctCallDone = false;
Template.userFormsLayout.onCreated(function() {
const templateInstance = this;
templateInstance.currentSetting = new ReactiveVar();
@@ -28,6 +33,18 @@ Template.userFormsLayout.onCreated(function() {
Meteor.subscribe('setting', {
onReady() {
templateInstance.currentSetting.set(Settings.findOne());
let currSetting = templateInstance.currentSetting.curValue;
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
oidcBtnElt.html(htmlvalue);
}
// isSettingDatabaseFctCallDone = true;
if(currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined)
document.getElementById("isSettingDatabaseCallDone").style.display = 'none';
else
document.getElementById("isSettingDatabaseCallDone").style.display = 'block';
return this.stop();
},
});
@@ -56,6 +73,31 @@ Template.userFormsLayout.helpers({
return Template.instance().currentSetting.get();
},
// isSettingDatabaseCallDone(){
// return isSettingDatabaseFctCallDone;
// },
isLegalNoticeLinkExist(){
const currSet = Template.instance().currentSetting.get();
if(currSet && currSet !== undefined && currSet != null){
return currSet.legalNotice !== undefined && currSet.legalNotice.trim() != "";
}
else
return false;
},
getLegalNoticeWithWritTraduction(){
let spanLegalNoticeElt = $("#legalNoticeSpan");
if(spanLegalNoticeElt != null && spanLegalNoticeElt != undefined){
spanLegalNoticeElt.html(TAPi18n.__('acceptance_of_our_legalNotice', {}, T9n.getLanguage() || 'en'));
}
let atLinkLegalNoticeElt = $("#legalNoticeAtLink");
if(atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined){
atLinkLegalNoticeElt.html(TAPi18n.__('legalNotice', {}, T9n.getLanguage() || 'en'));
}
return true;
},
isLoading() {
return Template.instance().isLoading.get();
},
@@ -77,6 +119,14 @@ Template.userFormsLayout.helpers({
} else if (lang.name === 'ar-EG') {
// ar-EG = Arabic (Egypt), simply Masri (مَصرى, [ˈmɑsˤɾi], Egyptian, Masr refers to Cairo)
name = 'مَصرى';
} else if (lang.name === 'de-CH') {
name = 'Deutsch (Schweiz)';
} else if (lang.name === 'de-AT') {
name = 'Deutsch (Österreich)';
} else if (lang.name === 'en-DE') {
name = 'English (Germany)';
} else if (lang.name === 'et-EE') {
name = 'eesti keel (Eesti)';
} else if (lang.name === 'fa-IR') {
// fa-IR = Persian (Iran)
name = 'فارسی/پارسی (ایران‎)';
@@ -84,12 +134,28 @@ Template.userFormsLayout.helpers({
name = 'Français (Belgique)';
} else if (lang.name === 'fr-CA') {
name = 'Français (Canada)';
} else if (lang.name === 'fr-CH') {
name = 'Français (Schweiz)';
} else if (lang.name === 'gu-IN') {
// gu-IN = Gurajati (India)
name = 'ગુજરાતી';
} else if (lang.name === 'hi-IN') {
// hi-IN = Hindi (India)
name = 'हिंदी (भारत)';
} else if (lang.name === 'ig') {
name = 'Igbo';
} else if (lang.name === 'lv') {
name = 'Latviešu';
} else if (lang.name === 'latviešu valoda') {
name = 'Latviešu';
} else if (lang.name === 'ms-MY') {
// ms-MY = Malay (Malaysia)
name = 'بهاس ملايو';
} else if (lang.name === 'en-IT') {
name = 'English (Italy)';
} else if (lang.name === 'el-GR') {
// el-GR = Greek (Greece)
name = 'Ελληνικά (Ελλάδα)';
} else if (lang.name === 'Español') {
name = 'español';
} else if (lang.name === 'es_419') {
@@ -116,11 +182,18 @@ Template.userFormsLayout.helpers({
name = 'español de Perú';
} else if (lang.name === 'Español de Puerto Rico') {
name = 'español de Puerto Rico';
} else if (lang.name === 'gl-ES') {
name = 'Galego (España)';
} else if (lang.name === 'oc') {
name = 'Occitan';
} else if (lang.name === 'ru-UA') {
name = 'Русский (Украина)';
} else if (lang.name === 'st') {
name = 'Sãotomense';
} else if (lang.name === 'uk-UA') {
name = 'українська (Україна)';
} else if (lang.name === '繁体中文(台湾)') {
// Traditional Chinese (Taiwan)
name = '繁體中文(台灣)';
}
return { tag, name };
@@ -153,6 +226,53 @@ Template.userFormsLayout.events({
templateInstance.isLoading.set(false);
});
}
isCheckDone = false;
},
'click #at-signUp'(event, templateInstance){
isCheckDone = false;
},
'DOMSubtreeModified #at-oidc'(event){
if(alreadyCheck <= 2){
let currSetting = Settings.findOne();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
alreadyCheck++;
oidcBtnElt.html("");
}
else{
alreadyCheck++;
oidcBtnElt.html(htmlvalue);
}
}
}
else{
alreadyCheck = 1;
}
},
'DOMSubtreeModified .at-form'(event){
if(alreadyCheck <= 2 && !isCheckDone){
if(document.getElementById("at-oidc") != null){
let currSetting = Settings.findOne();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
alreadyCheck++;
oidcBtnElt.html("");
}
else{
alreadyCheck++;
isCheckDone = true;
oidcBtnElt.html(htmlvalue);
}
}
}
}
else{
alreadyCheck = 1;
}
},
});
+12 -1
View File
@@ -317,6 +317,9 @@ kbd
.grabbing
cursor: grabbing
.textcomplete-dropdown
z-index: 2000 !important;
// Implement a thiner close icon as suggested in
// https://github.com/FortAwesome/Font-Awesome/issues/1540#issuecomment-68689950
.fa.fa-times-thin:before
@@ -430,7 +433,7 @@ a
margin-top: 0px
.wrapper
height: 100%
height: calc(100% - 31px)
margin: 0px
.panel-default
@@ -539,3 +542,11 @@ a
100%
transform: rotate(360deg)
#isSettingDatabaseCallDone
display: none;
.at-link
color: #17683a;
text-decoration: underline;
text-decoration-color: #17683a;
+19 -53
View File
@@ -6,16 +6,6 @@ template(name="myCardsHeaderBar")
i.fa.fa-list
| {{_ 'my-cards'}}
.board-header-btns.left
a.board-header-btn.js-toggle-my-cards-choose-sort(title="{{_ 'myCardsSortChange-title'}}")
i.fa.fa-caret-down
if $eq myCardsSort 'board'
i.fa.fa-th-large
| {{_ 'myCardsSortChange-choice-board'}}
if $eq myCardsSort 'dueAt'
i.fa.fa-calendar
| {{_ 'myCardsSortChange-choice-dueat'}}
template(name="myCardsModalTitle")
if currentUser
h2
@@ -28,46 +18,22 @@ template(name="myCards")
+spinner
else
.wrapper
if $eq myCardsSort 'board'
each board in myCardsList
.my-cards-board-wrapper
.my-cards-board-title(class=board.colorClass, id="header")
a(href=board.originRelativeUrl)
+viewer
= board.title
each swimlane in board.mySwimlanes
.my-cards-swimlane-title(class="{{#if swimlane.colorClass}}{{ swimlane.colorClass }}{{else}}swimlane-default-color{{/if}}")
+viewer
= swimlane.title
each list in swimlane.myLists
.my-cards-list-wrapper
.my-cards-list-title(class=list.colorClass)
+viewer
= list.title
each card in list.myCards
.my-cards-card-wrapper
a.minicard-wrapper(href=card.originRelativeUrl)
+minicard(card)
else
.my-cards-dueat-list-wrapper
each card in myDueCardsList
+resultCard(card)
template(name="myCardsSortChangePopup")
if currentUser
ul.pop-over-list
li
with "my-cards-sort-board"
a.js-my-cards-sort-board
i.fa.fa-th-large.colorful
| {{_ 'myCardsSortChange-choice-board'}}
if $eq Utils.myCardsSort "board"
i.fa.fa-check
hr
li
with "my-cards-sort-dueat"
a.js-my-cards-sort-dueat
i.fa.fa-calendar.colorful
| {{_ 'myCardsSortChange-choice-dueat'}}
if $eq Utils.myCardsSort "dueAt"
i.fa.fa-check
each board in myCardsList
.my-cards-board-wrapper
.my-cards-board-title(class=board.colorClass, id="header")
a(href=board.originRelativeUrl)
+viewer
= board.title
each swimlane in board.mySwimlanes
.my-cards-swimlane-title(class="{{#if swimlane.colorClass}}{{ swimlane.colorClass }}{{else}}swimlane-default-color{{/if}}")
+viewer
= swimlane.title
each list in swimlane.myLists
.my-cards-list-wrapper
.my-cards-list-title(class=list.colorClass)
+viewer
= list.title
each card in list.myCards
.my-cards-card-wrapper
a.minicard-wrapper(href=card.originRelativeUrl)
+minicard(card)
+37 -107
View File
@@ -1,14 +1,4 @@
import { CardSearchPagedComponent } from '../../lib/cardSearch';
import { QueryParams } from '../../../config/query-classes';
import {
OPERATOR_LIMIT,
OPERATOR_SORT,
OPERATOR_USER,
ORDER_DESCENDING,
PREDICATE_DUE_AT,
} from '../../../config/search-const';
// const subManager = new SubsManager();
BlazeComponent.extendComponent({
myCardsSort() {
@@ -34,48 +24,21 @@ Template.myCards.helpers({
},
});
BlazeComponent.extendComponent({
events() {
return [
{
'click .js-my-cards-sort-board'() {
Utils.setMyCardsSort('board');
Popup.close();
},
'click .js-my-cards-sort-dueat'() {
Utils.setMyCardsSort('dueAt');
Popup.close();
},
},
];
},
}).register('myCardsSortChangePopup');
class MyCardsComponent extends CardSearchPagedComponent {
onCreated() {
super.onCreated();
const queryParams = new QueryParams();
queryParams.addPredicate(OPERATOR_USER, Meteor.user().username);
queryParams.addPredicate(OPERATOR_SORT, {
name: PREDICATE_DUE_AT,
order: ORDER_DESCENDING,
});
queryParams.addPredicate(OPERATOR_LIMIT, 100);
this.runGlobalSearch(queryParams);
this.runGlobalSearch(null);
Meteor.subscribe('setting');
}
myCardsSort() {
// eslint-disable-next-line no-console
//console.log('sort:', Utils.myCardsSort());
return Utils.myCardsSort();
}
sortByBoard() {
return this.myCardsSort() === 'board';
// eslint-disable-next-line no-unused-vars
getSubscription(queryParams) {
return Meteor.subscribe(
'myCards',
this.sessionId,
this.subscriptionCallbacks,
);
}
myCardsList() {
@@ -87,35 +50,9 @@ class MyCardsComponent extends CardSearchPagedComponent {
const cursor = this.getResults();
if (cursor) {
let newBoard = false;
let newSwimlane = false;
let newList = false;
cursor.forEach(card => {
// eslint-disable-next-line no-console
// console.log('card:', card.title);
if (list === null || card.listId !== list._id) {
// eslint-disable-next-line no-console
// console.log('new list');
list = card.getList();
if (list.archived) {
list = null;
return;
}
list.myCards = [card];
newList = true;
}
if (swimlane === null || card.swimlaneId !== swimlane._id) {
// eslint-disable-next-line no-console
// console.log('new swimlane');
swimlane = card.getSwimlane();
if (swimlane.archived) {
swimlane = null;
return;
}
swimlane.myLists = [list];
newSwimlane = true;
}
if (board === null || card.boardId !== board._id) {
// eslint-disable-next-line no-console
// console.log('new board');
@@ -126,23 +63,38 @@ class MyCardsComponent extends CardSearchPagedComponent {
}
// eslint-disable-next-line no-console
// console.log('board:', b, b._id, b.title);
board.mySwimlanes = [swimlane];
newBoard = true;
}
if (newBoard) {
boards.push(board);
} else if (newSwimlane) {
board.mySwimlanes.push(swimlane);
} else if (newList) {
swimlane.myLists.push(list);
} else {
list.myCards.push(card);
board.mySwimlanes = [];
swimlane = null;
list = null;
}
newBoard = false;
newSwimlane = false;
newList = false;
if (swimlane === null || card.swimlaneId !== swimlane._id) {
// eslint-disable-next-line no-console
// console.log('new swimlane');
swimlane = card.getSwimlane();
if (swimlane.archived) {
swimlane = null;
return;
}
board.mySwimlanes.push(swimlane);
swimlane.myLists = [];
list = null;
}
if (list === null || card.listId !== list._id) {
// eslint-disable-next-line no-console
// console.log('new list');
list = card.getList();
if (list.archived) {
list = null;
return;
}
swimlane.myLists.push(list);
list.myCards = [];
}
list.myCards.push(card);
});
// sort the data structure
@@ -182,27 +134,5 @@ class MyCardsComponent extends CardSearchPagedComponent {
return [];
}
myDueCardsList() {
const cursor = this.getResults();
const cards = [];
cursor.forEach(card => {
cards.push(card);
});
cards.sort((a, b) => {
const x = a.dueAt === null ? new Date('2100-12-31') : a.dueAt;
const y = b.dueAt === null ? new Date('2100-12-31') : b.dueAt;
if (x > y) return 1;
else if (x < y) return -1;
return 0;
});
// eslint-disable-next-line no-console
// console.log('cursor:', cards);
return cards;
}
}
MyCardsComponent.register('myCards');
+1 -12
View File
@@ -14,8 +14,7 @@ $popupWidth = 300px
margin-top: 5px
hr
margin: 4px -10px
width: $popupWidth
margin: 4px 0px
p,
textarea,
@@ -23,7 +22,6 @@ $popupWidth = 300px
input[type="email"],
input[type="password"],
input[type="file"]
margin: 4px 0 12px
width: 100%
select
@@ -313,22 +311,13 @@ $popupWidth = 300px
input[type="email"],
input[type="password"],
input[type="file"]
margin: 4px 0 12px
width: 100%
box-sizing: border-box
.pop-over-list
li > a
width: calc(100% - 20px)
padding: 10px 10px
margin: 0px 0px
border-bottom: 1px solid #eee
hr
width: 100%
height: 20px
margin: 0px 0px
color: #eee
for depth in (1..6)
.popup-container-depth-{depth}
+5
View File
@@ -0,0 +1,5 @@
template(name="spinner")
+Template.dynamic(template=getSpinnerTemplate)
template(name="spinnerRaw")
+Template.dynamic(template=getSpinnerTemplateRaw)
+11
View File
@@ -0,0 +1,11 @@
import { Spinner } from '/client/lib/spinner';
(class extends Spinner {
}.register('spinner'));
(class extends Spinner {
getSpinnerTemplateRaw() {
let ret = super.getSpinnerTemplate() + 'Raw';
return ret;
}
}.register('spinnerRaw'));
-6
View File
@@ -1,6 +0,0 @@
.sk-spinner.sk-spinner-wave(class=currentBoard.colorClass)
.sk-rect1
.sk-rect2
.sk-rect3
.sk-rect4
.sk-rect5
@@ -0,0 +1,11 @@
template(name="spinnerBounce")
.sk-spinner.sk-spinner-bounce(class=currentBoard.colorClass)
+spinnerBounceRaw
template(name="spinnerBounceRaw")
.sk-bounce1
| &nbsp;
.sk-bounce2
| &nbsp;
.sk-bounce3
| &nbsp;
@@ -0,0 +1,44 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-bounce {
margin: 100px auto 0;
width: 70px;
text-align: center;
div {
width: 18px;
height: 18px;
background-color: #333;
border-radius: 100%;
display: inline-block;
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
}
.sk-bounce1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.sk-bounce2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
}
}
@-webkit-keyframes sk-bouncedelay {
0%, 80%, 100% { -webkit-transform: scale(0) }
40% { -webkit-transform: scale(1.0) }
}
@keyframes sk-bouncedelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
} 40% {
-webkit-transform: scale(1.0);
transform: scale(1.0);
}
}
+8
View File
@@ -0,0 +1,8 @@
template(name="spinnerCube")
.sk-spinner.sk-spinner-cube(class=currentBoard.colorClass)
+spinnerCubeRaw
template(name="spinnerCubeRaw")
.sk-cube1
.sk-cube2
.sk-cube3
+52
View File
@@ -0,0 +1,52 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-cube {
margin: 100px auto;
width: 40px;
height: 40px;
position: relative;
}
.sk-cube1, .sk-cube2 {
background-color: #333;
width: 15px;
height: 15px;
position: absolute;
top: 0;
left: 0;
-webkit-animation: sk-cubemove 1.8s infinite ease-in-out;
animation: sk-cubemove 1.8s infinite ease-in-out;
}
.sk-cube2 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
@-webkit-keyframes sk-cubemove {
25% { -webkit-transform: translateX(35px) rotate(-90deg) scale(0.5) }
50% { -webkit-transform: translateX(35px) translateY(35px) rotate(-180deg) }
75% { -webkit-transform: translateX(0px) translateY(35px) rotate(-270deg) scale(0.5) }
100% { -webkit-transform: rotate(-360deg) }
}
@keyframes sk-cubemove {
25% {
transform: translateX(35px) rotate(-90deg) scale(0.5);
-webkit-transform: translateX(35px) rotate(-90deg) scale(0.5);
} 50% {
transform: translateX(35px) translateY(35px) rotate(-179deg);
-webkit-transform: translateX(35px) translateY(35px) rotate(-179deg);
} 50.1% {
transform: translateX(35px) translateY(35px) rotate(-180deg);
-webkit-transform: translateX(35px) translateY(35px) rotate(-180deg);
} 75% {
transform: translateX(0px) translateY(35px) rotate(-270deg) scale(0.5);
-webkit-transform: translateX(0px) translateY(35px) rotate(-270deg) scale(0.5);
} 100% {
transform: rotate(-360deg);
-webkit-transform: rotate(-360deg);
}
}
@@ -0,0 +1,14 @@
template(name="spinnerCubeGrid")
.sk-spinner.sk-spinner-cube-grid(class=currentBoard.colorClass)
+spinnerCubeGridRaw
template(name="spinnerCubeGridRaw")
.sk-cube-grid.sk-cube-grid1
.sk-cube-grid.sk-cube-grid2
.sk-cube-grid.sk-cube-grid3
.sk-cube-grid.sk-cube-grid4
.sk-cube-grid.sk-cube-grid5
.sk-cube-grid.sk-cube-grid6
.sk-cube-grid.sk-cube-grid7
.sk-cube-grid.sk-cube-grid8
.sk-cube-grid.sk-cube-grid9
@@ -0,0 +1,64 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-cube-grid {
width: 40px;
height: 40px;
margin: 100px auto;
}
.sk-spinner-cube-grid .sk-cube-grid {
width: 33%;
height: 33%;
background-color: #333;
float: left;
-webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out;
}
.sk-spinner-cube-grid .sk-cube-grid1 {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
.sk-spinner-cube-grid .sk-cube-grid2 {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s; }
.sk-spinner-cube-grid .sk-cube-grid3 {
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s; }
.sk-spinner-cube-grid .sk-cube-grid4 {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s; }
.sk-spinner-cube-grid .sk-cube-grid5 {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
.sk-spinner-cube-grid .sk-cube-grid6 {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s; }
.sk-spinner-cube-grid .sk-cube-grid7 {
-webkit-animation-delay: 0s;
animation-delay: 0s; }
.sk-spinner-cube-grid .sk-cube-grid8 {
-webkit-animation-delay: 0.1s;
animation-delay: 0.1s; }
.sk-spinner-cube-grid .sk-cube-grid9 {
-webkit-animation-delay: 0.2s;
animation-delay: 0.2s; }
@-webkit-keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1);
} 35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1);
}
}
@keyframes sk-cubeGridScaleDelay {
0%, 70%, 100% {
-webkit-transform: scale3D(1, 1, 1);
transform: scale3D(1, 1, 1);
} 35% {
-webkit-transform: scale3D(0, 0, 1);
transform: scale3D(0, 0, 1);
}
}
+7
View File
@@ -0,0 +1,7 @@
template(name="spinnerDot")
.sk-spinner.sk-spinner-dot(class=currentBoard.colorClass)
+spinnerDotRaw
template(name="spinnerDotRaw")
.sk-dot1
.sk-dot2
+51
View File
@@ -0,0 +1,51 @@
@import 'nib'
// From https://github.com/tobiasahlin/SpinKit
.sk-spinner-dot {
margin: 100px auto;
width: 40px;
height: 40px;
position: relative;
text-align: center;
-webkit-animation: sk-rotate 2.0s infinite linear;
animation: sk-rotate 2.0s infinite linear;
}
.sk-dot1, .sk-dot2 {
width: 40%;
height: 40%;
display: inline-block;
position: absolute;
top: 0;
background-color: #333;
border-radius: 100%;
-webkit-animation: sk-bounce 2.0s infinite ease-in-out;
animation: sk-bounce 2.0s infinite ease-in-out;
}
.sk-dot2 {
top: auto;
bottom: 0;
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
@-webkit-keyframes sk-rotate { 100% { -webkit-transform: rotate(360deg) }}
@keyframes sk-rotate { 100% { transform: rotate(360deg); -webkit-transform: rotate(360deg) }}
@-webkit-keyframes sk-bounce {
0%, 100% { -webkit-transform: scale(0.0) }
50% { -webkit-transform: scale(1.0) }
}
@keyframes sk-bounce {
0%, 100% {
transform: scale(0.0);
-webkit-transform: scale(0.0);
} 50% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
}
Loaded 100 of 570 files, more files were not shown because too many files have changed in this diff. Show more