Compare commits

...
181 Commits
Author SHA1 Message Date
Lauri Ojansivu b8a41406f5 v5.67 2021-10-27 09:42:11 +03: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
174 changed files with 3324 additions and 2832 deletions

No files matched your search

+18 -1
View File
@@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v12.22.6 \
NODE_VERSION=v12.22.7 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -195,6 +195,10 @@ COPY \
settings.json \
/home/wekan/app/
COPY \
tests \
/home/wekan/app/tests/
COPY \
packages \
/home/wekan/app/packages/
@@ -226,6 +230,19 @@ RUN \
chmod u+w package.json npm-shrinkwrap.json && \
npm install
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
+4 -2
View File
@@ -12,9 +12,10 @@ services:
expose:
- 27017
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./volumes/wekan-db:/data/db
- ./volumes/wekan-db-dump:/dump
- /etc/localtime:/etc/localtime:ro
wekan-dev:
container_name: wekan-dev-app
@@ -36,13 +37,14 @@ services:
depends_on:
- wekandb-dev
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone: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
- /etc/localtime:/etc/localtime:ro
volumes:
wekan-dev-db:
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.6
node-engine: 12.22.7
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.22.6
node-engine: 12.22.7
node-packages:
- node-gyp
- node-pre-gyp
+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 }}"
+1 -1
View File
@@ -64,7 +64,7 @@ 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
+1 -1
View File
@@ -219,7 +219,7 @@ 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
meteor-autosize@5.0.1
webapp@1.10.1
webapp-hashing@1.1.0
wekan-accounts-cas@0.1.0
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.22.6
TRAVIS_NODE_VERSION: 12.22.7
TRAVIS_NPM_VERSION: latest
before_install:
+110 -2
View File
@@ -1,7 +1,115 @@
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874
# v5.67 2021-10-27 WeKan ® release
This release fixes the following bugs:
- [Fix typo](https://github.com/wekan/wekan/commit/cb9b8d4f2b8e24475a2aafd6f9653f28f305eefb).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.66 2021-10-27 WeKan ® release
This release adds the following new features:
- [api.py: List All Public Boards](https://github.com/wekan/wekan/commit/eac102dbbf302ccc121bbf1e4e8faf115e1f9da8).
Thanks to xet7.
- [api.py: List Custom Fields of Board](https://github.com/wekan/wekan/commit/bcf35731316c327090a8513a4c4094e32e301e3f).
Thanks to xet7.
- [api.py: Info of one Custom Field](https://github.com/wekan/wekan/commit/5c571ca8638c29e558f3a196daf5458274eb715e).
Thanks to xet7.
- [api.py: Add Custom Fields to Board. Does not work yet, error: Settings must be object](https://github.com/wekan/wekan/commit/3921209c9fbf1d908f2ef3e97dade5863a000309).
Thanks to xet7.
- [Add full name if exists in email-invite-subject or when tagging someone with `@` while commenting a card](https://github.com/wekan/wekan/pull/4057).
Thanks to Emile840.
- [Popup sorting number](https://github.com/wekan/wekan/pull/4060).
Thanks to mfilser.
- [At mobile view the card details are opened as Popup](https://github.com/wekan/wekan/pull/4062).
Thanks to mfilser.
- [Add card button has now a cancel button](https://github.com/wekan/wekan/pull/4067).
Thanks to mfilser.
- [Global search checklistitems and custom fields boolean](https://github.com/wekan/wekan/pull/4074).
Thanks to mfilser.
- [Board View, sort cards button also in mobile view](https://github.com/wekan/wekan/pull/4076).
Thanks to mfilser.
- [Minicard label popup](https://github.com/wekan/wekan/pull/4079).
Thanks to mfilser.
- [Re-enables custom schemes auto linking](https://github.com/wekan/wekan/commit/f67a174c4a7706a2d419ba3dd43d696104f90696).
Thanks to chrisi51.
- [Board search remove limit](https://github.com/wekan/wekan/pull/4082).
Thanks to mfilser.
- [Add a possibility of selecting displayed users in Admin Panel](https://github.com/wekan/wekan/pull/4083).
Thanks to Emile840.
and adds the following updates:
- Updated dependencies.
[Part 1](https://github.com/wekan/wekan/commit/f14e710ac0d5381ec092c9f383b9b68f446cab4d),
[Part 2](https://github.com/wekan/wekan/commit/156c0b5d4d91dae2ee9b12ed8c312dc19a3c3075).
Thanks to developers of dependencies.
- [Added npm publish script for releases](https://github.com/wekan/wekan/commit/2666b30ba911da8502153be5827f277b81354f8b).
Thanks to xet7.
and fixes the following bugs:
- [Fix infinite loading of public boards](https://github.com/wekan/wekan/pull/4053).
Thanks to mfilser.
- [Fix: Setting overtime not working](https://github.com/wekan/wekan/pull/4056).
Thanks to Ben0it-T.
- [Fix main scrollbar](https://github.com/wekan/wekan/pull/4063).
Thanks to mfilser.
- [Try to fix orphanedAttachments](https://github.com/wekan/wekan/commit/6a06522777a0bfa2f758e96c2d25e1237a7b43dc).
Thanks to Madko and xet7.
- [Fix markdown header quick access](https://github.com/wekan/wekan/pull/4065).
Thanks to mfilser.
- [Fix Filter List by Card Title](https://github.com/wekan/wekan/pull/4066).
Thanks to Ben0it-T.
- [Fix long textarea editing](https://github.com/wekan/wekan/pull/4068).
Thanks to mfilser.
- [Boards weren't loaded because of missing filter](https://github.com/wekan/wekan/pull/4069).
Thanks to mfilser.
- [Fix Card details Custom Fields popup empty hr sections and plus icon](https://github.com/wekan/wekan/pull/4070).
Thanks to mfilser.
- [Card popup search and global search improvements](https://github.com/wekan/wekan/pull/4071).
Thanks to mfilser.
- [Comment out showing Search All Boards logs in console](https://github.com/wekan/wekan/commit/a62a177fb1cdf8b823b5c32380a81e803e0049e7).
Thanks to mfilser and xet7.
- [Long labels on card and minicard are wrapped if too long](https://github.com/wekan/wekan/pull/4073).
Thanks to mfilser.
- [Card dates, if deleted rules didn't apply on "unset date fields"](https://github.com/wekan/wekan/pull/4075).
Thanks to mfilser.
- [Comment, added confirm delete popup](https://github.com/wekan/wekan/pull/4077).
Thanks to mfilser.
- [Fix: Filter List by Card Title](https://github.com/wekan/wekan/pull/4078).
Thanks to Ben0it-T.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.65 2021-10-12 WeKan ® release
This release adds to following CRITICAL SECURITY UPDATES:
- [Updated to Node.js v12.22.7](https://github.com/wekan/wekan/commit/64fc2e5d8fe50115175d44c01f7fca4e668c7231).
Thanks to Node.js developers.
and fixes the following bugs:
- [Excel Export: Export only comments for cards that are not linked](https://github.com/wekan/wekan/pull/4047).
Thanks to Ben0it-T.
- [If OIDC button text was customized, the default text will be added if a user click on `Sign In`](https://github.com/wekan/wekan/pull/4052).
Thanks to Emile840.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.64 2021-10-09 WeKan ® release
This release adds the following new features:
- [Excel Export : add board description, add comments worksheet](https://github.com/wekan/wekan/pull/4045).
Thanks to Ben0it-T.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.63 2021-10-07 Wekan release
+1 -1
View File
@@ -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.6 \
NODE_VERSION=v12.22.7 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
+2 -2
View File
@@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.6 \
NODE_VERSION=v12.22.7 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64
@@ -40,7 +40,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.22.6 \
NODE_VERSION=v12.22.7 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
+24 -24
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,19 +14,19 @@
[![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)
@@ -41,9 +41,9 @@ See https://github.com/wekan/wekan/issues/3874
- 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,
@@ -51,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 63 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/master/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
- 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
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v5.63.0"
appVersion: "v5.67.0"
files:
userUploads:
- README.md
+95 -18
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,12 +26,16 @@ 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 list BOARDID LISTID # Info of LISTID")
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")
@@ -65,12 +72,15 @@ 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 list BOARDID LISTID # Info of LISTID
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
@@ -78,6 +88,13 @@ Syntax:
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
@@ -133,6 +150,7 @@ l = 'lists'
sw = 'swimlane'
sws = 'swimlanes'
cs = 'cards'
cf = 'custom-fields'
bs = 'boards'
atl = 'attachmentslist'
at = 'attachment'
@@ -150,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]
@@ -161,18 +203,18 @@ 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':
# ------- LIST OF BOARD START -----------
# ------- EDIT CARD START -----------
boardid = sys.argv[2]
listid = sys.argv[3]
cardid = sys.argv[4]
@@ -187,7 +229,7 @@ if arguments == 6:
body = requests.get(edcard, headers=headers)
data2 = body.text.replace('}',"}\n")
print(data2)
# ------- LISTS OF BOARD END -----------
# ------- EDIT CARD END -----------
if arguments == 3:
@@ -217,6 +259,19 @@ if arguments == 3:
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 -----------
@@ -230,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
@@ -242,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
@@ -289,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 -----------
+5 -1
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,10 @@ 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
+13 -5
View File
@@ -15,7 +15,7 @@ BlazeComponent.extendComponent({
const capitalizedMode = Utils.capitalize(mode);
let thisId, searchId;
if (mode === 'linkedcard' || mode === 'linkedboard') {
thisId = Session.get('currentCard');
thisId = Utils.getCurrentCardId();
searchId = Cards.findOne({ _id: thisId }).linkedId;
mode = mode.replace('linked', '');
} else {
@@ -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;
@@ -213,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()
@@ -262,7 +270,7 @@ Template.addReactionPopup.events({
const cardComment = CardComments.findOne({_id: commentId});
cardComment.toggleReaction(codepoint);
}
Popup.close();
Popup.back();
},
})
+2 -2
View File
@@ -64,7 +64,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'));
});
@@ -75,7 +75,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();
+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 &&
+4 -14
View File
@@ -23,7 +23,7 @@ BlazeComponent.extendComponent({
},
onlyShowCurrentCard() {
return Utils.isMiniScreen() && Session.get('currentCard');
return Utils.isMiniScreen() && Utils.getCurrentCardId(true);
},
goHome() {
@@ -191,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',
});
@@ -216,7 +206,7 @@ BlazeComponent.extendComponent({
$swimlanesDom.sortable(
'option',
'disabled',
!Meteor.user().isBoardAdmin(),
!Meteor.user() || !Meteor.user().isBoardAdmin(),
);
});
@@ -80,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(
+15 -15
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();
},
});
@@ -327,7 +327,7 @@ BlazeComponent.extendComponent({
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const visibility = this.currentData();
currentBoard.setVisibility(visibility);
Popup.close();
Popup.back();
},
events() {
@@ -360,7 +360,7 @@ BlazeComponent.extendComponent({
Session.get('currentBoard'),
level,
(err, ret) => {
if (!err && ret) Popup.close();
if (!err && ret) Popup.back();
},
);
},
@@ -432,7 +432,7 @@ BlazeComponent.extendComponent({
const direction = down ? -1 : 1;
this.setSortBy([sortby, direction]);
if (Utils.isMiniScreen) {
Popup.close();
Popup.back();
}
},
},
@@ -451,7 +451,7 @@ BlazeComponent.extendComponent({
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('due-date'));
Popup.close();
Popup.back();
},
'click .js-sort-title'() {
const sortBy = {
@@ -459,7 +459,7 @@ BlazeComponent.extendComponent({
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('title'));
Popup.close();
Popup.back();
},
'click .js-sort-created-asc'() {
const sortBy = {
@@ -467,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 = {
@@ -475,7 +475,7 @@ BlazeComponent.extendComponent({
};
Session.set('sortBy', sortBy);
sortCardsBy.set(TAPi18n.__('date-created-oldest-first'));
Popup.close();
Popup.back();
},
},
];
+6 -6
View File
@@ -86,7 +86,7 @@ BlazeComponent.extendComponent({
});
},
userHasTeams(){
if(Meteor.user().teams && Meteor.user().teams.length > 0)
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
return true;
else
return false;
@@ -98,7 +98,7 @@ BlazeComponent.extendComponent({
return [];
},
userHasOrgs(){
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
return true;
else
return false;
@@ -111,13 +111,13 @@ BlazeComponent.extendComponent({
},
userHasOrgsOrTeams(){
let boolUserHasOrgs;
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
if(Meteor.user() != null && Meteor.user().orgs && Meteor.user().orgs.length > 0)
boolUserHasOrgs = true;
else
boolUserHasOrgs = false;
let boolUserHasTeams;
if(Meteor.user().teams && Meteor.user().teams.length > 0)
if(Meteor.user() != null && Meteor.user().teams && Meteor.user().teams.length > 0)
boolUserHasTeams = true;
else
boolUserHasTeams = false;
@@ -153,7 +153,7 @@ BlazeComponent.extendComponent({
// },
// });
let orgIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
if(orgIdsUserBelongs && orgIdsUserBelongs != ''){
let orgsIds = orgIdsUserBelongs.split(',');
// for(let i = 0; i < orgsIds.length; i++){
@@ -164,7 +164,7 @@ BlazeComponent.extendComponent({
query.$and[2].$or.push({'orgs.orgId': {$in : orgsIds}});
}
let teamIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
if(teamIdsUserBelongs && teamIdsUserBelongs != ''){
let teamsIds = teamIdsUserBelongs.split(',');
// for(let i = 0; i < teamsIds.length; i++){
+4 -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
@@ -53,7 +53,7 @@ Template.attachmentsGalery.helpers({
Template.previewAttachedImagePopup.events({
'click .js-large-image-clicked'() {
Popup.close();
Popup.back();
},
});
@@ -65,7 +65,7 @@ Template.cardAttachmentsPopup.events({
if (attachment && attachment._id && attachment.isImage()) {
card.setCover(attachment._id);
}
Popup.close();
Popup.back();
});
};
@@ -174,7 +174,7 @@ Template.previewClipboardImagePopup.events({
pastedResults = null;
$(document.body).pasteImageReader(() => {});
Popup.close();
Popup.back();
}
},
});
+4 -4
View File
@@ -3,7 +3,7 @@ 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;
},
@@ -11,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();
@@ -31,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;
},
@@ -194,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));
}
+4 -4
View File
@@ -24,7 +24,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setReceived(null);
this.card.unsetReceived();
}
}.register('editCardReceivedDatePopup'));
@@ -50,7 +50,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setStart(null);
this.card.unsetStart();
}
}.register('editCardStartDatePopup'));
@@ -73,7 +73,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setDue(null);
this.card.unsetDue();
}
}.register('editCardDueDatePopup'));
@@ -96,7 +96,7 @@ Template.dateBadge.helpers({
}
_deleteDate() {
this.card.setEnd(null);
this.card.unsetEnd();
}
}.register('editCardEndDatePopup'));
+4 -1
View File
@@ -25,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();
}
}
},
},
+48 -29
View File
@@ -1,27 +1,38 @@
template(name="cardDetailsPopup")
+cardDetails(popupCard)
template(name="cardDetails")
section.card-details.js-card-details(class='{{#if cardMaximized}}card-details-maximized{{/if}}'): .card-details-canvas
section.card-details.js-card-details(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}'): .card-details-canvas
.card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}')
+inlinedForm(classNames="js-card-details-title")
+editCardTitleForm
else
unless isMiniScreen
a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
unless cardMaximized
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
unless isPopup
a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
if cardMaximized
a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}")
else
a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}")
if currentUser.isBoardMember
a.fa.fa-navicon.card-details-menu.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
input.inline-input(type="text" id="cardURL_copy" value="{{ originRelativeUrl }}")
a.fa.fa-link.card-copy-button.js-copy-link(
id="cardURL_copy"
class="fa-link"
title="{{_ 'copy-card-link-to-clipboard'}}"
href="{{ originRelativeUrl }}"
)
if isMiniScreen
a.fa.fa-times-thin.close-card-details-mobile-web.js-close-card-details(title="{{_ 'close-card'}}")
else
unless isPopup
a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}")
if currentUser.isBoardMember
a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}")
a.fa.fa-link.card-copy-mobile-button
a.fa.fa-link.card-copy-mobile-button.js-copy-link(
id="cardURL_copy"
class="fa-link"
title="{{_ 'copy-card-link-to-clipboard'}}"
href="{{ originRelativeUrl }}"
)
h2.card-details-title.js-card-title(
class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
+viewer
@@ -66,8 +77,10 @@ template(name="cardDetails")
a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}")
i.fa.fa-plus
if currentBoard.allowsReceivedDate
if currentBoard.hasAnyAllowsDate
hr
if currentBoard.allowsReceivedDate
.card-details-item.card-details-item-received
h3.card-details-item-title
i.fa.fa-sign-out
@@ -119,7 +132,9 @@ template(name="cardDetails")
a.card-label.add-label.js-end-date
i.fa.fa-plus
hr
if currentBoard.hasAnyAllowsUser
hr
if currentBoard.allowsCreator
.card-details-item.card-details-item-creator
h3.card-details-item-title
@@ -160,17 +175,6 @@ template(name="cardDetails")
a.assignee.add-assignee.card-details-item-add-button.js-add-assignees(title="{{_ 'assignee'}}")
i.fa.fa-plus
//.card-details-items
if getSpentTime
.card-details-item.card-details-item-spent
if getIsOvertime
h3.card-details-item-title
| {{_ 'overtime-hours'}}
else
h3.card-details-item-title
| {{_ 'spent-time-hours'}}
+cardSpentTime
//.card-details-items
if currentBoard.allowsRequestedBy
.card-details-item.card-details-item-name
@@ -212,6 +216,9 @@ template(name="cardDetails")
+viewer
= getAssignedBy
if $or currentBoard.allowsCardSortingByNumber getSpentTime
hr
if currentBoard.allowsCardSortingByNumber
.card-details-item.card-details-sort-order
h3.card-details-item-title
@@ -226,13 +233,18 @@ template(name="cardDetails")
= sort
//.card-details-items
if customFieldsWD
.material-toggle-switch(title="{{_ 'change'}} {{_ 'custom-fields'}} {{_ 'layout'}}")
if customFieldsGrid
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton" checked="checked")
if getSpentTime
.card-details-item.card-details-item-spent
if getIsOvertime
h3.card-details-item-title
| {{_ 'overtime-hours'}}
else
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton")
label.toggle-label(for="toggleCustomFieldsGridButton")
h3.card-details-item-title
| {{_ 'spent-time-hours'}}
+cardSpentTime
//.card-details-items
if customFieldsWD
unless customFieldsGrid
hr
each customFieldsWD
@@ -243,6 +255,13 @@ template(name="cardDetails")
i.fa.fa-list-alt
= definition.name
+cardCustomField
.material-toggle-switch(title="{{_ 'change'}} {{_ 'custom-fields'}} {{_ 'layout'}}")
if customFieldsGrid
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton" checked="checked")
else
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton")
label.toggle-label(for="toggleCustomFieldsGridButton")
a.fa.fa-plus.js-custom-fields.card-details-item.custom-fields(title="{{_ 'custom-fields'}}")
if getVoteQuestion
hr
+95 -87
View File
@@ -34,11 +34,14 @@ BlazeComponent.extendComponent({
onCreated() {
this.currentBoard = Boards.findOne(Session.get('currentBoard'));
this.isLoaded = new ReactiveVar(false);
const boardBody = this.parentComponent().parentComponent();
//in Miniview parent is Board, not BoardBody.
if (boardBody !== null) {
boardBody.showOverlay.set(true);
boardBody.mouseHasEnterCardDetails = false;
if (this.parentComponent() && this.parentComponent().parentComponent()) {
const boardBody = this.parentComponent().parentComponent();
//in Miniview parent is Board, not BoardBody.
if (boardBody !== null) {
boardBody.showOverlay.set(true);
boardBody.mouseHasEnterCardDetails = false;
}
}
this.calculateNextPeak();
@@ -215,7 +218,7 @@ BlazeComponent.extendComponent({
distance: 7,
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
EscapeActions.clickExecute(evt.target, 'inlinedForm');
},
stop(evt, ui) {
let prevChecklist = ui.item.prev('.js-checklist').get(0);
@@ -297,6 +300,7 @@ BlazeComponent.extendComponent({
},
onDestroyed() {
if (this.parentComponent() === null) return;
const parentComponent = this.parentComponent().parentComponent();
//on mobile view parent is Board, not board body.
if (parentComponent === null) return;
@@ -319,7 +323,8 @@ BlazeComponent.extendComponent({
'click .js-close-card-details'() {
Utils.goBoardId(this.data().boardId);
},
'click .js-copy-link'() {
'click .js-copy-link'(event) {
event.preventDefault();
const StringToCopyElement = document.getElementById('cardURL_copy');
StringToCopyElement.value =
window.location.origin + window.location.pathname;
@@ -377,6 +382,12 @@ BlazeComponent.extendComponent({
this.data().setRequestedBy('');
}
},
'keydown input.js-edit-card-sort'(evt) {
// enter = save
if (evt.keyCode === 13) {
this.find('button[type=submit]').click();
}
},
'submit .js-card-details-sort'(event) {
event.preventDefault();
const sort = parseFloat(this.currentComponent()
@@ -401,7 +412,9 @@ BlazeComponent.extendComponent({
'click .js-end-date': Popup.open('editCardEndDate'),
'click .js-show-positive-votes': Popup.open('positiveVoteMembers'),
'click .js-show-negative-votes': Popup.open('negativeVoteMembers'),
'click .js-custom-fields': Popup.open('cardCustomFields'),
'mouseenter .js-card-details'() {
if (this.parentComponent() === null) return;
const parentComponent = this.parentComponent().parentComponent();
//on mobile view parent is Board, not BoardBody.
if (parentComponent === null) return;
@@ -526,6 +539,22 @@ BlazeComponent.extendComponent({
},
}).register('cardDetails');
Template.cardDetails.helpers({
isPopup() {
let ret = !!Utils.getPopupCardId();
return ret;
}
});
Template.cardDetailsPopup.onDestroyed(() => {
Session.delete('popupCard');
});
Template.cardDetailsPopup.helpers({
popupCard() {
const ret = Utils.getPopupCard();
return ret;
},
});
BlazeComponent.extendComponent({
template() {
return 'exportCard';
@@ -576,16 +605,15 @@ Template.editCardSortOrderForm.onRendered(function () {
// XXX Recovering the currentCard identifier form a session variable is
// fragile because this variable may change for instance if the route
// change. We should use some component props instead.
docId: Session.get('currentCard'),
docId: Utils.getCurrentCardId(),
};
}
close(isReset = false) {
if (this.isOpen.get() && !isReset) {
const draft = this.getValue().trim();
if (
draft !== Cards.findOne(Session.get('currentCard')).getDescription()
) {
let card = Utils.getCurrentCard();
if (card && draft !== card.getDescription()) {
UnsavedEdits.set(this._getUnsavedEditKey(), this.getValue());
}
}
@@ -630,7 +658,6 @@ Template.cardDetailsActionsPopup.events({
'click .js-export-card': Popup.open('exportCard'),
'click .js-members': Popup.open('cardMembers'),
'click .js-assignees': Popup.open('cardAssignees'),
'click .js-labels': Popup.open('cardLabels'),
'click .js-attachments': Popup.open('cardAttachments'),
'click .js-start-voting': Popup.open('cardStartVoting'),
'click .js-start-planning-poker': Popup.open('cardStartPlanningPoker'),
@@ -653,6 +680,7 @@ Template.cardDetailsActionsPopup.events({
.map((c) => c.sort),
);
this.move(this.boardId, this.swimlaneId, this.listId, minOrder - 1);
Popup.back();
},
'click .js-move-card-to-bottom'(event) {
event.preventDefault();
@@ -664,7 +692,7 @@ Template.cardDetailsActionsPopup.events({
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
},
'click .js-archive': Popup.afterConfirm('cardArchive', function () {
Popup.close();
Popup.back();
this.archive();
Utils.goBoardId(this.boardId);
}),
@@ -673,7 +701,7 @@ Template.cardDetailsActionsPopup.events({
const currentCard = this;
const level = currentCard.findWatcher(Meteor.userId()) ? null : 'watching';
Meteor.call('watch', 'card', currentCard._id, level, (err, ret) => {
if (!err && ret) Popup.close();
if (!err && ret) Popup.back();
});
},
});
@@ -780,7 +808,7 @@ Template.moveCardPopup.events({
'click .js-done'() {
// XXX We should *not* get the currentCard from the global state, but
// instead from a “component” state.
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const bSelect = $('.js-select-boards')[0];
let boardId;
// if we are a worker, we won't have a board select so we just use the
@@ -792,7 +820,13 @@ Template.moveCardPopup.events({
const slSelect = $('.js-select-swimlanes')[0];
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
card.move(boardId, swimlaneId, listId, 0);
Popup.close();
// set new id's to card object in case the card is moved to top by the comment "moveCard" after this command (.js-move-card)
this.boardId = boardId;
this.swimlaneId = swimlaneId;
this.listId = listId;
Popup.back();
},
});
BlazeComponent.extendComponent({
@@ -838,7 +872,7 @@ BlazeComponent.extendComponent({
Template.copyCardPopup.events({
'click .js-done'() {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
@@ -860,14 +894,14 @@ Template.copyCardPopup.events({
// See https://github.com/wekan/wekan/issues/80
Filter.addException(_id);
Popup.close();
Popup.back();
}
},
});
Template.convertChecklistItemToCardPopup.events({
'click .js-done'() {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const lSelect = $('.js-select-lists')[0];
const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
@@ -887,7 +921,7 @@ Template.convertChecklistItemToCardPopup.events({
});
Filter.addException(_id);
Popup.close();
Popup.back();
}
},
@@ -895,7 +929,7 @@ Template.convertChecklistItemToCardPopup.events({
Template.copyChecklistToManyCardsPopup.events({
'click .js-done'() {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const oldId = card._id;
card._id = null;
const lSelect = $('.js-select-lists')[0];
@@ -943,7 +977,7 @@ Template.copyChecklistToManyCardsPopup.events({
cmt.copy(_id);
});
}
Popup.close();
Popup.back();
}
},
});
@@ -973,11 +1007,11 @@ BlazeComponent.extendComponent({
},
'click .js-submit'() {
this.currentCard.setColor(this.currentColor.get());
Popup.close();
Popup.back();
},
'click .js-remove-color'() {
this.currentCard.setColor(null);
Popup.close();
Popup.back();
},
},
];
@@ -1014,7 +1048,7 @@ BlazeComponent.extendComponent({
},
cards() {
const currentId = Session.get('currentCard');
const currentId = Utils.getCurrentCardId();
if (this.parentBoard.get()) {
return Cards.find({
boardId: this.parentBoard.get(),
@@ -1079,7 +1113,7 @@ BlazeComponent.extendComponent({
}
},
'click .js-delete': Popup.afterConfirm('cardDelete', function () {
Popup.close();
Popup.back();
// verify that there are no linked cards
if (Cards.find({ linkedId: this._id }).count() === 0) {
Cards.remove(this._id);
@@ -1146,12 +1180,12 @@ BlazeComponent.extendComponent({
if (endString) {
this.currentCard.setVoteEnd(endString);
}
Popup.close();
Popup.back();
},
'click .js-remove-vote': Popup.afterConfirm('deleteVote', () => {
event.preventDefault();
this.currentCard.unsetVote();
Popup.close();
Popup.back();
}),
'click a.js-toggle-vote-public'(event) {
event.preventDefault();
@@ -1191,7 +1225,7 @@ BlazeComponent.extendComponent({
// if active vote - store it
if (this.currentData().getVoteQuestion()) {
this._storeDate(newDate.toDate());
Popup.close();
Popup.back();
} else {
this.currentData().vote = { end: newDate.toDate() }; // set vote end temp
Popup.back();
@@ -1225,86 +1259,77 @@ BlazeComponent.extendComponent({
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(usaDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: usaDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (euroAmDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(euroAmDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: euroAmDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (euro24hDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(euro24hDate.toDate());
this.card.setPokerEnd(euro24hDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: euro24hDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (eurodotDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(eurodotDate.toDate());
this.card.setPokerEnd(eurodotDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: eurodotDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (minusDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(minusDate.toDate());
this.card.setPokerEnd(minusDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: minusDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (slashDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(slashDate.toDate());
this.card.setPokerEnd(slashDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: slashDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (dotDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(dotDate.toDate());
this.card.setPokerEnd(dotDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: dotDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (brezhonegDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(brezhonegDate.toDate());
this.card.setPokerEnd(brezhonegDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: brezhonegDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (hrvatskiDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(hrvatskiDate.toDate());
this.card.setPokerEnd(hrvatskiDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: hrvatskiDate.toDate() }; // set poker end temp
Popup.back();
@@ -1314,41 +1339,37 @@ BlazeComponent.extendComponent({
if (this.currentData().getPokerQuestion()) {
this._storeDate(latviaDate.toDate());
this.card.setPokerEnd(latviaDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: latviaDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (nederlandsDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(nederlandsDate.toDate());
this.card.setPokerEnd(nederlandsDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: nederlandsDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (greekDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(greekDate.toDate());
this.card.setPokerEnd(greekDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: greekDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (macedonianDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(macedonianDate.toDate());
this.card.setPokerEnd(macedonianDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: macedonianDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else {
this.error.set('invalid-date');
evt.target.date.focus();
@@ -1357,7 +1378,7 @@ BlazeComponent.extendComponent({
'click .js-delete-date'(evt) {
evt.preventDefault();
this._deleteDate();
Popup.close();
Popup.back();
},
},
];
@@ -1395,11 +1416,11 @@ BlazeComponent.extendComponent({
if (endString) {
this.currentCard.setPokerEnd(endString);
}
Popup.close();
Popup.back();
},
'click .js-remove-poker': Popup.afterConfirm('deletePoker', (event) => {
this.currentCard.unsetPoker();
Popup.close();
Popup.back();
}),
'click a.js-toggle-poker-allow-non-members'(event) {
event.preventDefault();
@@ -1462,7 +1483,7 @@ BlazeComponent.extendComponent({
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(newDate.toDate());
Popup.close();
Popup.back();
} else {
this.currentData().poker = { end: newDate.toDate() }; // set poker end temp
Popup.back();
@@ -1494,130 +1515,117 @@ BlazeComponent.extendComponent({
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(usaDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: usaDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (euroAmDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(euroAmDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: euroAmDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (euro24hDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(euro24hDate.toDate());
this.card.setPokerEnd(euro24hDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: euro24hDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (eurodotDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(eurodotDate.toDate());
this.card.setPokerEnd(eurodotDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: eurodotDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (minusDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(minusDate.toDate());
this.card.setPokerEnd(minusDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: minusDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (slashDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(slashDate.toDate());
this.card.setPokerEnd(slashDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: slashDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (dotDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(dotDate.toDate());
this.card.setPokerEnd(dotDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: dotDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (brezhonegDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(brezhonegDate.toDate());
this.card.setPokerEnd(brezhonegDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: brezhonegDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (hrvatskiDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(hrvatskiDate.toDate());
this.card.setPokerEnd(hrvatskiDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: hrvatskiDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (latviaDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(latviaDate.toDate());
this.card.setPokerEnd(latviaDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: latviaDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (nederlandsDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(nederlandsDate.toDate());
this.card.setPokerEnd(nederlandsDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: nederlandsDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (greekDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(greekDate.toDate());
this.card.setPokerEnd(greekDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: greekDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else if (macedonianDate.isValid()) {
// if active poker - store it
if (this.currentData().getPokerQuestion()) {
this._storeDate(macedonianDate.toDate());
this.card.setPokerEnd(macedonianDate.toDate());
Popup.close();
} else {
this.currentData().poker = { end: macedonianDate.toDate() }; // set poker end temp
Popup.back();
}
Popup.back();
} else {
// this.error.set('invalid-date);
this.error.set('invalid-date' + ' ' + dateString);
@@ -1627,7 +1635,7 @@ BlazeComponent.extendComponent({
'click .js-delete-date'(evt) {
evt.preventDefault();
this._deleteDate();
Popup.close();
Popup.back();
},
},
];
@@ -1680,7 +1688,7 @@ Template.cardAssigneesPopup.onCreated(function () {
Template.cardAssigneesPopup.events({
'click .js-select-assignee'(event) {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const assigneeId = this.userId;
card.toggleAssignee(assigneeId);
event.preventDefault();
@@ -1754,7 +1762,7 @@ Template.cardAssigneePopup.helpers({
Template.cardAssigneePopup.events({
'click .js-remove-assignee'() {
Cards.findOne(this.cardId).unassignAssignee(this.userId);
Popup.close();
Popup.back();
},
'click .js-edit-profile': Popup.open('editProfile'),
});
+18 -13
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
@@ -230,16 +221,15 @@ avatar-radius = 50%
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
@@ -315,6 +305,21 @@ input[type="submit"].attachment-add-link-submit
.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
overflow-y: auto
& hr
margin: 15px 0px
card-details-color(background, color...)
background: background !important
if color
+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,
},
+2 -2
View File
@@ -18,14 +18,14 @@ template(name="checklists")
.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
else
a.js-open-inlined-form(title="{{_ 'add-checklist'}}")
a.add-checklist.js-open-inlined-form(title="{{_ 'add-checklist'}}")
i.fa.fa-plus
template(name="checklistDetail")
+13 -4
View File
@@ -16,7 +16,7 @@ function initSorting(items) {
scroll: false,
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');
@@ -94,16 +94,14 @@ 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');
@@ -190,6 +188,10 @@ BlazeComponent.extendComponent({
}
},
closeAllInlinedForms() {
this.$('.js-close-inlined-form').click();
},
events() {
const events = {
'click .toggle-delete-checklist-dialog'(event) {
@@ -214,6 +216,8 @@ BlazeComponent.extendComponent({
'click .js-delete-checklist-item': this.deleteItem,
'click .confirm-checklist-delete': this.deleteChecklist,
'focus .js-add-checklist-item': this.focusChecklistItem,
'click .add-checklist-item.js-open-inlined-form': this.closeAllInlinedForms,
'click .add-checklist.js-open-inlined-form': this.closeAllInlinedForms,
keydown: this.pressKey,
},
];
@@ -262,6 +266,11 @@ BlazeComponent.extendComponent({
}).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();
+1 -1
View File
@@ -41,7 +41,7 @@ Template.createLabelPopup.helpers({
Template.cardLabelsPopup.events({
'click .js-select-label'(event) {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const labelId = this._id;
card.toggleLabel(labelId);
event.preventDefault();
+8 -6
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
@@ -47,7 +50,6 @@
.card-label-white
background-color: #ffffff
color: #000000 //Black text for better visibility
border: 1px solid #c0c0c0
.card-label-white:hover
color: #aaaaaa //grey text for better visibility
+9 -8
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
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
@@ -145,4 +141,9 @@ template(name="minicard")
if currentBoard.allowsCardSortingByNumber
.badge
span.badge-icon.fa.fa-sort
span.badge-text {{ 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'}}
+40 -13
View File
@@ -49,6 +49,16 @@ BlazeComponent.extendComponent({
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, this.currentData());
}
},
events() {
return [
{
@@ -57,8 +67,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
@@ -66,22 +74,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) {
@@ -93,3 +93,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');
-2
View File
@@ -80,8 +80,6 @@
.minicard-labels
float: none
display: flex
flex-wrap: wrap
.minicard-label
width: 11px
+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
+17 -1
View File
@@ -5,7 +5,23 @@ Template.resultCard.helpers({
});
BlazeComponent.extendComponent({
clickOnMiniCard(evt) {
evt.preventDefault();
Session.set('popupCard', this.currentData()._id);
this.cardDetailsPopup(evt);
},
cardDetailsPopup(event) {
if (!Popup.isOpen()) {
Popup.open("cardDetails")(event);
}
},
events() {
return [{}];
return [
{
'click .js-minicard': this.clickOnMiniCard,
},
];
},
}).register('resultCard');
+1
View File
@@ -247,6 +247,7 @@ textarea
position: absolute
left: -9999px
visibility: hidden
display: none
.materialCheckBox
position: relative
+2 -26
View File
@@ -117,22 +117,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()) {
$cards.sortable({
handle: '.handle',
});
} else if (!Utils.isMiniScreen() && !showDesktopDragHandles) {
} else {
$cards.sortable({
handle: '.minicard',
});
@@ -178,19 +167,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;
+1
View File
@@ -53,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
+19 -14
View File
@@ -148,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('popupCard', this.currentData()._id);
this.cardDetailsPopup(evt);
} else if (Session.equals('currentCard', this.currentData()._id)) {
evt.stopImmediatePropagation();
evt.preventDefault();
@@ -216,6 +220,12 @@ BlazeComponent.extendComponent({
);
},
cardDetailsPopup(event) {
if (!Popup.isOpen()) {
Popup.open("cardDetails")(event);
}
},
events() {
return [
{
@@ -486,7 +496,7 @@ BlazeComponent.extendComponent({
evt.preventDefault();
const linkedId = $('.js-select-cards option:selected').val();
if (!linkedId) {
Popup.close();
Popup.back();
return;
}
const _id = Cards.insert({
@@ -501,7 +511,7 @@ BlazeComponent.extendComponent({
linkedId,
});
Filter.addException(_id);
Popup.close();
Popup.back();
},
'click .js-link-board'(evt) {
//LINK BOARD
@@ -512,7 +522,7 @@ BlazeComponent.extendComponent({
!impBoardId ||
Cards.findOne({ linkedId: impBoardId, archived: false })
) {
Popup.close();
Popup.back();
return;
}
const _id = Cards.insert({
@@ -527,7 +537,7 @@ BlazeComponent.extendComponent({
linkedId: impBoardId,
});
Filter.addException(_id);
Popup.close();
Popup.back();
},
},
];
@@ -574,7 +584,7 @@ BlazeComponent.extendComponent({
});
}
if (!board) {
Popup.close();
Popup.back();
return;
}
const boardId = board._id;
@@ -701,7 +711,7 @@ BlazeComponent.extendComponent({
},
);
}
Popup.close();
Popup.back();
},
},
];
@@ -789,17 +799,12 @@ BlazeComponent.extendComponent({
return false;
}
const spinnerViewPosition = this.spinner.offsetTop - this.container.offsetTop + this.spinner.clientHeight;
const parentViewHeight = this.container.clientHeight;
const bottomViewPosition = this.container.scrollTop + parentViewHeight;
let spinnerOffsetTop = this.spinner.offsetTop;
const addCard = $(this.container).find("a.open-minicard-composer").first()[0];
if (addCard !== undefined) {
spinnerOffsetTop -= addCard.clientHeight;
}
return bottomViewPosition > spinnerOffsetTop;
return bottomViewPosition > spinnerViewPosition;
}
getSkSpinnerName() {
+1 -1
View File
@@ -44,7 +44,7 @@ template(name="listHeader")
a.js-add-card.fa.fa-plus.list-header-plus-icon(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")
+7 -18
View File
@@ -122,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({
@@ -156,19 +145,19 @@ Template.listActionPopup.events({
'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'),
@@ -244,7 +233,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');
@@ -310,11 +299,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();
},
},
];
+2 -2
View File
@@ -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();
},
},
];
+5 -3
View File
@@ -17,8 +17,10 @@ Template.editor.onRendered(() => {
currentBoard
.activeMembers()
.map(member => {
const username = Users.findOne(member.userId).username;
return username.includes(term) ? username : null;
const user = Users.findOne(member.userId);
const username = user.username;
const fullName = user.profile && user.profile !== undefined ? user.profile.fullname : "";
return username.includes(term) || fullName.includes(term) ? fullName + "(" + username + ")" : null;
})
.filter(Boolean), [...specialHandleNames])
);
@@ -148,7 +150,7 @@ Template.editor.onRendered(() => {
const $summernote = getSummernote(this);
if (files && files.length > 0) {
const image = files[0];
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentCard = Utils.getCurrentCard();
const MAX_IMAGE_PIXEL = Utils.MAX_IMAGE_PIXEL;
const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO;
const insertImage = src => {
+6 -3
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
//-
@@ -49,7 +51,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'}}
+8
View File
@@ -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%)
+3 -2
View File
@@ -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}}
+58
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();
@@ -34,6 +39,12 @@ Template.userFormsLayout.onCreated(function() {
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();
},
});
@@ -62,6 +73,10 @@ Template.userFormsLayout.helpers({
return Template.instance().currentSetting.get();
},
// isSettingDatabaseCallDone(){
// return isSettingDatabaseFctCallDone;
// },
isLoading() {
return Template.instance().isLoading.get();
},
@@ -166,6 +181,49 @@ Template.userFormsLayout.events({
});
}
},
'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;
}
},
});
Template.defaultLayout.events({
+4 -1
View File
@@ -433,7 +433,7 @@ a
margin-top: 0px
.wrapper
height: 100%
height: calc(100% - 31px)
margin: 0px
.panel-default
@@ -542,3 +542,6 @@ a
100%
transform: rotate(360deg)
#isSettingDatabaseCallDone
display: none;
+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}
@@ -232,7 +232,7 @@ BlazeComponent.extendComponent({
},
'click .js-submit'() {
this.colorButtonValue.set(this.currentColor.get());
Popup.close();
Popup.back();
},
},
];
@@ -116,6 +116,6 @@ Template.boardCardTitlePopup.events({
.trim();
Popup.getOpenerComponent().setNameFilter(title);
event.preventDefault();
Popup.close();
Popup.back();
},
});
@@ -21,7 +21,7 @@ template(name='statistics')
table
tbody
tr
th Wekan {{_ 'info'}}
th WeKan ® {{_ 'info'}}
td {{statistics.version}}
tr
th {{_ 'Meteor_version'}}
@@ -108,6 +108,7 @@ template(name="peopleGeneral")
tbody
tr
th
+selectAllUser
th {{_ 'username'}}
th {{_ 'fullname'}}
th {{_ 'initials'}}
@@ -125,6 +126,10 @@ template(name="peopleGeneral")
each user in peopleList
+peopleRow(userId=user._id)
template(name="selectAllUser")
| {{_ 'dueCardsViewChange-choice-all'}}
input.allUserChkBox(type="checkbox", id="chkSelectAll")
template(name="newOrgRow")
a.new-org
i.fa.fa-plus-square
+49 -15
View File
@@ -524,6 +524,41 @@ BlazeComponent.extendComponent({
},
}).register('newUserRow');
BlazeComponent.extendComponent({
events() {
return [
{
'click .allUserChkBox': function(ev){
selectedUserChkBoxUserIds = [];
const checkboxes = document.getElementsByClassName("selectUserChkBox");
if(ev.currentTarget){
if(ev.currentTarget.checked){
for (let i=0; i<checkboxes.length; i++) {
if (!checkboxes[i].disabled) {
selectedUserChkBoxUserIds.push(checkboxes[i].id);
checkboxes[i].checked = true;
}
}
}
else{
for (let i=0; i<checkboxes.length; i++) {
if (!checkboxes[i].disabled) {
checkboxes[i].checked = false;
}
}
}
}
if(selectedUserChkBoxUserIds.length > 0)
document.getElementById("divAddOrRemoveTeam").style.display = 'block';
else
document.getElementById("divAddOrRemoveTeam").style.display = 'none';
},
},
];
},
}).register('selectAllUser');
Template.editOrgPopup.events({
submit(event, templateInstance) {
event.preventDefault();
@@ -535,8 +570,7 @@ Template.editOrgPopup.events({
const orgDesc = templateInstance.find('.js-orgDesc').value.trim();
const orgShortName = templateInstance.find('.js-orgShortName').value.trim();
const orgWebsite = templateInstance.find('.js-orgWebsite').value.trim();
const orgIsActive =
templateInstance.find('.js-org-isactive').value.trim() == 'true';
const orgIsActive = templateInstance.find('.js-org-isactive').value.trim() == 'true';
const isChangeOrgDisplayName = orgDisplayName !== org.orgDisplayName;
const isChangeOrgDesc = orgDesc !== org.orgDesc;
@@ -562,7 +596,7 @@ Template.editOrgPopup.events({
);
}
Popup.close();
Popup.back();
},
});
@@ -606,7 +640,7 @@ Template.editTeamPopup.events({
);
}
Popup.close();
Popup.back();
},
});
@@ -721,7 +755,7 @@ Template.editUserPopup.events({
} else {
usernameMessageElement.hide();
emailMessageElement.hide();
Popup.close();
Popup.back();
}
},
);
@@ -735,7 +769,7 @@ Template.editUserPopup.events({
}
} else {
usernameMessageElement.hide();
Popup.close();
Popup.back();
}
});
} else if (isChangeEmail) {
@@ -752,11 +786,11 @@ Template.editUserPopup.events({
}
} else {
emailMessageElement.hide();
Popup.close();
Popup.back();
}
},
);
} else Popup.close();
} else Popup.back();
},
'click #addUserOrg'(event) {
event.preventDefault();
@@ -891,7 +925,7 @@ Template.newOrgPopup.events({
orgWebsite,
orgIsActive,
);
Popup.close();
Popup.back();
},
});
@@ -917,7 +951,7 @@ Template.newTeamPopup.events({
teamWebsite,
teamIsActive,
);
Popup.close();
Popup.back();
},
});
@@ -990,11 +1024,11 @@ Template.newUserPopup.events({
} else {
usernameMessageElement.hide();
emailMessageElement.hide();
Popup.close();
Popup.back();
}
},
);
Popup.close();
Popup.back();
},
'click #addUserOrgNewUser'(event) {
event.preventDefault();
@@ -1048,7 +1082,7 @@ Template.settingsOrgPopup.events({
return;
}
Org.remove(this.orgId);
Popup.close();
Popup.back();
}
});
@@ -1066,7 +1100,7 @@ Template.settingsTeamPopup.events({
return;
}
Team.remove(this.teamId);
Popup.close();
Popup.back();
}
});
@@ -1099,7 +1133,7 @@ Template.settingsUserPopup.events({
//
//
*/
Popup.close();
Popup.back();
},
});
+1 -1
View File
@@ -56,7 +56,7 @@ table
.js-teams,.js-teamsNewUser
display: none;
.selectUserChkBox
.selectUserChkBox,.allUserChkBox
position: static !important;
visibility: visible !important;
left: 0 !important;
+1 -1
View File
@@ -11,7 +11,7 @@
color: #727479
background: #dedede
width 100%
height 100%
height calc(100% - 80px)
position: absolute;
.content-title
+15 -15
View File
@@ -188,15 +188,15 @@ Template.boardMenuPopup.events({
'click .js-rename-board': Popup.open('boardChangeTitle'),
'click .js-open-rules-view'() {
Modal.openWide('rulesMain');
Popup.close();
Popup.back();
},
'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'),
@@ -209,7 +209,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');
}),
@@ -252,7 +252,7 @@ Template.boardMenuPopup.helpers({
Template.memberPopup.events({
'click .js-filter-member'() {
Filter.members.toggle(this.userId);
Popup.close();
Popup.back();
},
'click .js-change-role': Popup.open('changePermissions'),
'click .js-remove-member': Popup.afterConfirm('removeMember', function() {
@@ -266,12 +266,12 @@ Template.memberPopup.events({
card.unassignAssignee(memberId);
});
Boards.findOne(boardId).removeMember(memberId);
Popup.close();
Popup.back();
}),
'click .js-leave-member': Popup.afterConfirm('leaveBoard', () => {
const boardId = Session.get('currentBoard');
Meteor.call('quitBoard', boardId, () => {
Popup.close();
Popup.back();
FlowRouter.go('home');
});
}),
@@ -460,7 +460,7 @@ BlazeComponent.extendComponent({
activities: ['all'],
});
}
Popup.close();
Popup.back();
},
},
];
@@ -1229,7 +1229,7 @@ BlazeComponent.extendComponent({
self.setLoading(false);
if (err) self.setError(err.error);
else if (ret.email) self.setError('email-sent');
else Popup.close();
else Popup.back();
});
},
@@ -1316,7 +1316,7 @@ BlazeComponent.extendComponent({
}
}
Popup.close();
Popup.back();
},
},
];
@@ -1380,10 +1380,10 @@ BlazeComponent.extendComponent({
Meteor.call('setBoardOrgs', boardOrganizations, currentBoard._id);
Popup.close();
Popup.back();
},
'click #cancelLeaveBoardBtn'(){
Popup.close();
Popup.back();
},
},
];
@@ -1490,7 +1490,7 @@ BlazeComponent.extendComponent({
}
}
Popup.close();
Popup.back();
},
},
];
@@ -1581,10 +1581,10 @@ BlazeComponent.extendComponent({
Meteor.call('setBoardTeams', boardTeams, members, currentBoard._id);
Popup.close();
Popup.back();
},
'click #cancelLeaveBoardTeamBtn'(){
Popup.close();
Popup.back();
},
},
];
+6 -6
View File
@@ -94,13 +94,13 @@ BlazeComponent.extendComponent({
'click .js-delete-card': Popup.afterConfirm('cardDelete', function() {
const cardId = this._id;
Cards.remove(cardId);
Popup.close();
Popup.back();
}),
'click .js-delete-all-cards': Popup.afterConfirm('cardDelete', () => {
this.archivedCards().forEach(card => {
Cards.remove(card._id);
});
Popup.close();
Popup.back();
}),
'click .js-restore-list'() {
@@ -115,13 +115,13 @@ BlazeComponent.extendComponent({
'click .js-delete-list': Popup.afterConfirm('listDelete', function() {
this.remove();
Popup.close();
Popup.back();
}),
'click .js-delete-all-lists': Popup.afterConfirm('listDelete', () => {
this.archivedLists().forEach(list => {
list.remove();
});
Popup.close();
Popup.back();
}),
'click .js-restore-swimlane'() {
@@ -138,7 +138,7 @@ BlazeComponent.extendComponent({
'swimlaneDelete',
function() {
this.remove();
Popup.close();
Popup.back();
},
),
'click .js-delete-all-swimlanes': Popup.afterConfirm(
@@ -147,7 +147,7 @@ BlazeComponent.extendComponent({
this.archivedSwimlanes().forEach(swimlane => {
swimlane.remove();
});
Popup.close();
Popup.back();
},
),
},
@@ -283,7 +283,7 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
} else {
CustomFields.remove(customField._id);
}
Popup.close();
Popup.back();
},
),
},
@@ -302,6 +302,6 @@ CreateCustomFieldPopup.register('createCustomFieldPopup');
'submit'(evt) {
const customFieldId = this._id;
CustomFields.remove(customFieldId);
Popup.close();
Popup.back();
}
});*/
+5 -5
View File
@@ -6,7 +6,7 @@ BlazeComponent.extendComponent({
{
'submit .js-list-filter'(evt) {
evt.preventDefault();
Filter.lists.set(this.find('.js-list-filter input').value.trim());
Filter.title.set(this.find('.js-list-filter input').value.trim());
},
'click .js-toggle-label-filter'(evt) {
evt.preventDefault();
@@ -171,22 +171,22 @@ Template.multiselectionSidebar.helpers({
Template.disambiguateMultiLabelPopup.events({
'click .js-remove-label'() {
mutateSelectedCards('removeLabel', this._id);
Popup.close();
Popup.back();
},
'click .js-add-label'() {
mutateSelectedCards('addLabel', this._id);
Popup.close();
Popup.back();
},
});
Template.disambiguateMultiMemberPopup.events({
'click .js-unassign-member'() {
mutateSelectedCards('assignMember', this._id);
Popup.close();
Popup.back();
},
'click .js-assign-member'() {
mutateSelectedCards('unassignMember', this._id);
Popup.close();
Popup.back();
},
});
@@ -3,10 +3,14 @@ template(name="searchSidebar")
input(type="text" name="searchTerm" placeholder="{{_ 'search-example'}}" autofocus dir="auto")
.list-body
.minilists.clearfix.js-minilists
hr
| {{_ 'lists' }}
each (lists)
a.minilist-wrapper.js-minilist(href=originRelativeUrl)
+minilist(this)
.minicards.clearfix.js-minicards
each (results)
hr
| {{_ 'cards' }}
each (cards)
a.minicard-wrapper.js-minicard(href=originRelativeUrl)
+minicard(this)
+14 -1
View File
@@ -3,7 +3,7 @@ BlazeComponent.extendComponent({
this.term = new ReactiveVar('');
},
results() {
cards() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return currentBoard.searchCards(this.term.get());
},
@@ -13,9 +13,22 @@ BlazeComponent.extendComponent({
return currentBoard.searchLists(this.term.get());
},
clickOnMiniCard(evt) {
evt.preventDefault();
Session.set('popupCard', this.currentData()._id);
this.cardDetailsPopup(evt);
},
cardDetailsPopup(event) {
if (!Popup.isOpen()) {
Popup.open("cardDetails")(event);
}
},
events() {
return [
{
'click .js-minicard': this.clickOnMiniCard,
'submit .js-search-term-form'(evt) {
evt.preventDefault();
this.term.set(evt.target.searchTerm.value);
@@ -26,7 +26,7 @@ template(name="swimlaneFixedHeader")
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
a.fa.fa-navicon.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}")
unless isMiniScreen
if showDesktopDragHandles
if isShowDesktopDragHandles
a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle
if isMiniScreen
a.swimlane-header-miniscreen-handle.handle.fa.fa-arrows.js-swimlane-header-handle
+4 -17
View File
@@ -28,19 +28,6 @@ BlazeComponent.extendComponent({
},
}).register('swimlaneHeader');
Template.swimlaneHeader.helpers({
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
},
});
Template.swimlaneFixedHeader.helpers({
isBoardAdmin() {
return Meteor.user().isBoardAdmin();
@@ -52,7 +39,7 @@ Template.swimlaneActionPopup.events({
'click .js-close-swimlane'(event) {
event.preventDefault();
this.archive();
Popup.close();
Popup.back();
},
'click .js-move-swimlane': Popup.open('moveSwimlane'),
'click .js-copy-swimlane': Popup.open('copySwimlane'),
@@ -101,7 +88,7 @@ BlazeComponent.extendComponent({
// XXX ideally, we should move the popup to the newly
// created swimlane so a user can add more than one swimlane
// with a minimum of interactions
Popup.close();
Popup.back();
},
'click .js-swimlane-template': Popup.open('searchElement'),
},
@@ -131,11 +118,11 @@ BlazeComponent.extendComponent({
},
'click .js-submit'() {
this.currentSwimlane.setColor(this.currentColor.get());
Popup.close();
Popup.back();
},
'click .js-remove-color'() {
this.currentSwimlane.setColor(null);
Popup.close();
Popup.back();
},
},
];
+8 -40
View File
@@ -9,7 +9,7 @@ function currentListIsInThisSwimlane(swimlaneId) {
}
function currentCardIsInThisList(listId, swimlaneId) {
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentCard = Utils.getCurrentCard();
const currentUser = Meteor.user();
if (
currentUser &&
@@ -95,22 +95,11 @@ function initSortable(boardComponent, $listsDom) {
//}
boardComponent.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()) {
$listsDom.sortable({
handle: '.js-list-handle',
});
} else if (!Utils.isMiniScreen() && !showDesktopDragHandles) {
} else {
$listsDom.sortable({
handle: '.js-list-header',
});
@@ -123,7 +112,7 @@ function initSortable(boardComponent, $listsDom) {
'disabled',
// Disable drag-dropping when user is not member/is worker
//!userIsMember() || Meteor.user().isWorker(),
!Meteor.user().isBoardAdmin(),
!Meteor.user() || !Meteor.user().isBoardAdmin(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
@@ -136,7 +125,7 @@ BlazeComponent.extendComponent({
const boardComponent = this.parentComponent();
const $listsDom = this.$('.js-lists');
if (!Session.get('currentCard')) {
if (!Utils.getCurrentCardId()) {
boardComponent.scrollLeft();
}
@@ -172,19 +161,8 @@ BlazeComponent.extendComponent({
// the user will legitimately expect to be able to select some text with
// his mouse.
let showDesktopDragHandles = false;
currentUser = Meteor.user();
if (currentUser) {
showDesktopDragHandles = (currentUser.profile || {})
.showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
showDesktopDragHandles = true;
} else {
showDesktopDragHandles = false;
}
const noDragInside = ['a', 'input', 'textarea', 'p'].concat(
Utils.isMiniScreen() || showDesktopDragHandles
Utils.isMiniScreenOrShowDesktopDragHandles()
? ['.js-list-handle', '.js-swimlane-header-handle']
: ['.js-list-header'],
);
@@ -264,16 +242,6 @@ BlazeComponent.extendComponent({
}).register('addListForm');
Template.swimlane.helpers({
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
},
canSeeAddList() {
return Meteor.user().isBoardAdmin();
/*
@@ -316,7 +284,7 @@ BlazeComponent.extendComponent({
const boardComponent = this.parentComponent();
const $listsDom = this.$('.js-lists');
if (!Session.get('currentCard')) {
if (!Utils.getCurrentCardId()) {
boardComponent.scrollLeft();
}
@@ -359,7 +327,7 @@ class MoveSwimlaneComponent extends BlazeComponent {
boardId = bSelect.options[bSelect.selectedIndex].value;
Meteor.call(this.serverMethod, this.currentSwimlane._id, boardId);
}
Popup.close();
Popup.back();
},
},
];
+2 -2
View File
@@ -274,7 +274,7 @@ Template.cardMembersPopup.helpers({
Template.cardMembersPopup.events({
'click .js-select-member'(event) {
const card = Cards.findOne(Session.get('currentCard'));
const card = Utils.getCurrentCard();
const memberId = this.userId;
card.toggleMember(memberId);
event.preventDefault();
@@ -290,7 +290,7 @@ Template.cardMemberPopup.helpers({
Template.cardMemberPopup.events({
'click .js-remove-member'() {
Cards.findOne(this.cardId).unassignMember(this.userId);
Popup.close();
Popup.back();
},
'click .js-edit-profile': Popup.open('editProfile'),
});
+1 -1
View File
@@ -134,7 +134,7 @@ template(name="changeSettingsPopup")
a.js-toggle-desktop-drag-handles
i.fa.fa-arrows
| {{_ 'show-desktop-drag-handles'}}
if showDesktopDragHandles
if isShowDesktopDragHandles
i.fa.fa-check
unless currentUser.isWorker
li
+5 -15
View File
@@ -25,7 +25,7 @@ Template.memberMenuPopup.helpers({
isNotOAuth2AuthenticationMethod(){
currentUser = Meteor.user();
if (currentUser) {
return currentUser.authenticationMethod != 'OAuth2';
return currentUser.authenticationMethod.toLowerCase() != 'oauth2';
} else {
return true;
}
@@ -34,10 +34,10 @@ Template.memberMenuPopup.helpers({
Template.memberMenuPopup.events({
'click .js-my-cards'() {
Popup.close();
Popup.back();
},
'click .js-due-cards'() {
Popup.close();
Popup.back();
},
'click .js-open-archived-board'() {
Modal.open('archivedBoards');
@@ -53,7 +53,7 @@ Template.memberMenuPopup.events({
AccountsTemplates.logout();
},
'click .js-go-setting'() {
Popup.close();
Popup.back();
},
});
@@ -155,7 +155,7 @@ Template.editProfilePopup.events({
} else Popup.back();
},
'click #deleteButton': Popup.afterConfirm('userDelete', function() {
Popup.close();
Popup.back();
Users.remove(Meteor.userId());
AccountsTemplates.logout();
}),
@@ -259,16 +259,6 @@ Template.changeLanguagePopup.events({
});
Template.changeSettingsPopup.helpers({
showDesktopDragHandles() {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
},
hiddenSystemMessages() {
currentUser = Meteor.user();
if (currentUser) {
+2 -6
View File
@@ -8,12 +8,8 @@ Blaze.registerHelper('currentBoard', () => {
});
Blaze.registerHelper('currentCard', () => {
const cardId = Session.get('currentCard');
if (cardId) {
return Cards.findOne(cardId);
} else {
return null;
}
const ret = Utils.getCurrentCard();
return ret;
});
Blaze.registerHelper('currentList', () => {
+2 -2
View File
@@ -120,7 +120,7 @@ export class DatePicker extends BlazeComponent {
}
if (newCompleteDate.isValid()) {
this._storeDate(newCompleteDate.toDate());
Popup.close();
Popup.back();
} else if (!this.error) {
this.error.set('invalid');
}
@@ -128,7 +128,7 @@ export class DatePicker extends BlazeComponent {
'click .js-delete-date'(evt) {
evt.preventDefault();
this._deleteDate();
Popup.close();
Popup.back();
},
},
];
+1 -1
View File
@@ -187,7 +187,7 @@ window.ExportHtml = Popup => {
const boardSlug = getBoardSlug();
await addJsonExportToZip(zip, boardSlug);
Popup.close();
Popup.back();
closeSidebar();
cleanBoardHtml();
+36 -1
View File
@@ -155,6 +155,39 @@ class DateFilter {
}
}
class StringFilter {
constructor() {
this._dep = new Tracker.Dependency();
this.subField = ''; // Prevent name mangling in Filter
this._filter = '';
}
set(str) {
this._filter = str;
this._dep.changed();
}
reset() {
this._filter = '';
this._dep.changed();
}
_isActive() {
this._dep.depend();
return this._filter !== '';
}
_getMongoSelector() {
this._dep.depend();
return {$regex : this._filter, $options: 'i'};
}
_getEmptySelector() {
this._dep.depend();
return {$regex : this._filter, $options: 'i'};
}
}
// Use a "set" filter for a field that is a set of documents uniquely
// identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`.
// use "subField" for searching inside object Fields.
@@ -611,6 +644,7 @@ Filter = {
archive: new SetFilter(),
hideEmpty: new SetFilter(),
dueAt: new DateFilter(),
title: new StringFilter(),
customFields: new SetFilter('_id'),
advanced: new AdvancedFilter(),
lists: new AdvancedFilter(), // we need the ability to filter list by name as well
@@ -622,6 +656,7 @@ Filter = {
'archive',
'hideEmpty',
'dueAt',
'title',
'customFields',
],
@@ -682,7 +717,7 @@ Filter = {
if (includeEmptySelectors) selectors.push(emptySelector);
if (this.advanced._isActive())
selectors.push(this.advanced._getMongoSelector());
return {
$or: selectors,
};
+9 -4
View File
@@ -29,10 +29,15 @@ InlinedForm = BlazeComponent.extendComponent({
},
open(evt) {
evt && evt.preventDefault();
if (evt) {
evt.preventDefault();
// Close currently opened form, if any
EscapeActions.clickExecute(evt.target, 'inlinedForm');
} else {
// Close currently opened form, if any
EscapeActions.executeUpTo('inlinedForm');
}
// Close currently opened form, if any
EscapeActions.executeUpTo('inlinedForm');
this.isOpen.set(true);
currentlyOpenedForm.set(this);
},
@@ -44,7 +49,7 @@ InlinedForm = BlazeComponent.extendComponent({
getValue() {
const input = this.find('textarea,input[type=text]');
return this.isOpen.get() && input && input.value;
return this.isOpen.get() && input && input.value.replaceAll(/\s +$/gm, '');
},
events() {
+1 -1
View File
@@ -54,7 +54,7 @@ Mousetrap.bind('/', () => {
});
Mousetrap.bind(['down', 'up'], (evt, key) => {
if (!Session.get('currentCard')) {
if (!Utils.getCurrentCardId()) {
return;
}
+7 -3
View File
@@ -30,7 +30,11 @@ window.Popup = new (class {
function clickFromPopup(evt) {
return $(evt.target).closest('.js-pop-over').length !== 0;
}
return function(evt) {
/** opens the popup
* @param evt the current event
* @param dataContextIfCurrentDataIsUndefined use this dataContext if this.currentData() is undefined
*/
return function(evt, dataContextIfCurrentDataIsUndefined) {
// If a popup is already opened, clicking again on the opener element
// should close it -- and interrupt the current `open` function.
if (self.isOpen()) {
@@ -67,7 +71,7 @@ window.Popup = new (class {
title: self._getTitle(popupName),
depth: self._stack.length,
offset: self._getOffset(openerElement),
dataContext: (this && this.currentData && this.currentData()) || this,
dataContext: (this && this.currentData && this.currentData()) || dataContextIfCurrentDataIsUndefined || this,
});
// If there are no popup currently opened we use the Blaze API to render
@@ -201,7 +205,7 @@ escapeActions.forEach(actionName => {
() => Popup[actionName](),
() => Popup.isOpen(),
{
noClickEscapeOn: '.js-pop-over,.js-open-card-title-popup',
noClickEscapeOn: '.js-pop-over,.js-open-card-title-popup,.js-open-inlined-form',
enabledOnClick: actionName === 'close',
},
);
+23
View File
@@ -1,4 +1,25 @@
Utils = {
getCurrentCardId(ignorePopupCard) {
let ret = Session.get('currentCard');
if (!ret && !ignorePopupCard) {
ret = Utils.getPopupCardId();
}
return ret;
},
getPopupCardId() {
const ret = Session.get('popupCard');
return ret;
},
getCurrentCard(ignorePopupCard) {
const cardId = Utils.getCurrentCardId(ignorePopupCard);
const ret = Cards.findOne(cardId);
return ret;
},
getPopupCard() {
const cardId = Utils.getPopupCardId();
const ret = Cards.findOne(cardId);
return ret;
},
reload () {
// we move all window.location.reload calls into this function
// so we can disable it when running tests.
@@ -248,6 +269,8 @@ Utils = {
const currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).showDesktopDragHandles;
} else if (window.localStorage.getItem('showDesktopDragHandles')) {
return true;
} else {
return false;
}
+9
View File
@@ -12,6 +12,7 @@ FlowRouter.route('/', {
Session.set('currentBoard', null);
Session.set('currentList', null);
Session.set('currentCard', null);
Session.set('popupCard', null);
Filter.reset();
Session.set('sortBy', '');
@@ -34,6 +35,7 @@ FlowRouter.route('/public', {
Session.set('currentBoard', null);
Session.set('currentList', null);
Session.set('currentCard', null);
Session.set('popupCard', null);
Filter.reset();
Session.set('sortBy', '');
@@ -56,6 +58,7 @@ FlowRouter.route('/b/:id/:slug', {
const previousBoard = Session.get('currentBoard');
Session.set('currentBoard', currentBoard);
Session.set('currentCard', null);
Session.set('popupCard', null);
// If we close a card, we'll execute again this route action but we don't
// want to excape every current actions (filters, etc.)
@@ -84,6 +87,7 @@ FlowRouter.route('/b/:boardId/:slug/:cardId', {
Session.set('currentBoard', params.boardId);
Session.set('currentCard', params.cardId);
Session.set('popupCard', null);
Utils.manageCustomUI();
Utils.manageMatomo();
@@ -212,6 +216,7 @@ FlowRouter.route('/import/:source', {
Session.set('currentBoard', null);
Session.set('currentList', null);
Session.set('currentCard', null);
Session.set('popupCard', null);
Session.set('importSource', params.source);
Filter.reset();
@@ -232,6 +237,7 @@ FlowRouter.route('/setting', {
Session.set('currentBoard', null);
Session.set('currentList', null);
Session.set('currentCard', null);
Session.set('popupCard', null);
Filter.reset();
Session.set('sortBy', '');
@@ -255,6 +261,7 @@ FlowRouter.route('/information', {
Session.set('currentBoard', null);
Session.set('currentList', null);
Session.set('currentCard', null);
Session.set('popupCard', null);
Filter.reset();
Session.set('sortBy', '');
@@ -277,6 +284,7 @@ FlowRouter.route('/people', {
Session.set('currentBoard', null);
Session.set('currentList', null);
Session.set('currentCard', null);
Session.set('popupCard', null);
Filter.reset();
Session.set('sortBy', '');
@@ -299,6 +307,7 @@ FlowRouter.route('/admin-reports', {
Session.set('currentBoard', null);
Session.set('currentList', null);
Session.set('currentCard', null);
Session.set('popupCard', null);
Filter.reset();
Session.set('sortBy', '');
+5
View File
@@ -111,6 +111,8 @@ services:
expose:
- 27017
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- wekan-db:/data/db
- wekan-db-dump:/dump
@@ -657,6 +659,9 @@ services:
#---------------------------------------------------------------------
depends_on:
- wekandb
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
#---------------------------------------------------------------------------------
# ==== OPTIONAL: SHARE DATABASE TO OFFICE LAN AND REMOTE VPN ====
+1 -1
View File
@@ -1,5 +1,5 @@
apiVersion: v2
appVersion: "5.63"
appVersion: "5.67"
dependencies:
- condition: mongodb.enabled
name: mongodb
+1 -1
View File
@@ -14,7 +14,7 @@ serviceAccounts:
##
image:
repository: quay.io/wekan/wekan
tag: v5.63
tag: v5.67
pullPolicy: IfNotPresent
## Configuration for wekan component
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "أكتب تعليق",
"comment-only": "التعليق فقط",
"comment-only-desc": "يمكن التعليق على بطاقات فقط.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "لا يوجد تعليقات",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Напиши коментар",
"comment-only": "Само коментар",
"comment-only-desc": "Може да коментира само в карти.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "Няма коментари",
"no-comments-desc": "Не може да вижда коментари и активност",
"worker": "Работник",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Escriu un comentari",
"comment-only": "Només comentaris",
"comment-only-desc": "Només pots fer comentaris a les fitxes",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "Sense comentaris",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Text komentáře",
"comment-only": "Pouze komentáře",
"comment-only-desc": "Může přidávat komentáře pouze do karet.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "Žádné komentáře",
"no-comments-desc": "Nemůže vidět komentáře a aktivity",
"worker": "Pracovník",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximalizovat kartu",
"minimize-card": "Minimalizovat kartu",
"delete-org-warning-message": "Tuto organizaci není možné smazat, protože do ní patří uživatel(é)",
"delete-team-warning-message": "Tento tým není možné smazat, protože do nej patří uživatel(é)"
"delete-team-warning-message": "Tento tým není možné smazat, protože do nej patří uživatel(é)",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Skriv kommentar",
"comment-only": "Kun kommentarer",
"comment-only-desc": "Kan kun kommentere på kort.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "Ingen kommentarer",
"no-comments-desc": "Kan ikke se kommentarer og aktiviteter.",
"worker": "Arbejder",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+25 -6
View File
@@ -159,8 +159,8 @@
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-archive-pop": "Die Karte wird nach der Archivierung in dieser Liste nicht mehr sichtbar sein.",
"card-archive-suggest-cancel": "Die Karte kann später aus dem Archiv wiederhergestellt werden.",
"card-due": "fällig",
"card-due-on": "fällig am",
"card-spent": "Aufgewendete Zeit",
@@ -209,7 +209,7 @@
"deletePokerPopup-title": "Planning Poker löschen ?",
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planning Poker verlieren.",
"cardDeletePopup-title": "Karte löschen?",
"cardArchivePopup-title": "Archive Card?",
"cardArchivePopup-title": "Karte archivieren?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
@@ -271,6 +271,8 @@
"comment-placeholder": "Kommentar schreiben",
"comment-only": "Nur Kommentare",
"comment-only-desc": "Kann Karten nur kommentieren.",
"comment-delete": "Sind Sie sicher, dass Sie den Kommentar löschen möchten?",
"deleteCommentPopup-title": "Kommentar löschen?",
"no-comments": "Keine Kommentare",
"no-comments-desc": "Kann keine Kommentare und Aktivitäten sehen.",
"worker": "Arbeiter",
@@ -372,8 +374,8 @@
"exportBoardPopup-title": "Board exportieren",
"exportCardPopup-title": "Karte exportieren",
"sort": "Sortieren",
"sorted": "Sorted",
"remove-sort": "Remove sort",
"sorted": "Sortiert",
"remove-sort": "Sortierung entfernen",
"sort-desc": "Zum Sortieren der Liste klicken",
"list-sort-by": "Sortieren der Liste nach:",
"list-label-modifiedAt": "Letzte Zugriffszeit",
@@ -1069,5 +1071,22 @@
"maximize-card": "Karte maximieren",
"minimize-card": "Karte minimieren",
"delete-org-warning-message": "Diese Organisation kann nicht gelöscht werden. Zumindest ein Benutzer ist ihr noch zugehörig.",
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden. Zumindest ein Benutzer ist ihm noch zugehörig."
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden. Zumindest ein Benutzer ist ihm noch zugehörig.",
"subject": "Betreff",
"details": "Details",
"carbon-copy": "Kopie (CC)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticketnummer",
"open": "Offen",
"pending": "Unerledigt",
"closed": "Geschlossen",
"resolved": "Gelöst",
"cancelled": "Abgebrochen",
"history": "Verlauf",
"request": "Anfrage",
"requests": "Anfragen",
"help-request": "Hilfegesuch",
"editCardSortOrderPopup-title": "Sortierung ändern",
"cardDetailsPopup-title": "Kartendetails"
}
+23 -4
View File
@@ -159,8 +159,8 @@
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-archive-pop": "Die Karte wird nach ihrer Archivierung nicht in dieser Liste sichtbar sein.",
"card-archive-suggest-cancel": "Sie können die Karte später aus dem Archiv wiederherstellen.",
"card-due": "Fällig",
"card-due-on": "Fällig am",
"card-spent": "Aufgewendete Zeit",
@@ -209,7 +209,7 @@
"deletePokerPopup-title": "Planungspoker löschen?",
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planungspoker verlieren.",
"cardDeletePopup-title": "Karte löschen?",
"cardArchivePopup-title": "Archive Card?",
"cardArchivePopup-title": "Karte archivieren?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
@@ -271,6 +271,8 @@
"comment-placeholder": "Kommentar schreiben",
"comment-only": "Nur Kommentare",
"comment-only-desc": "Kann Karten nur kommentieren.",
"comment-delete": "Sind Sie sicher, dass Sie den Kommentar löschen wollen?",
"deleteCommentPopup-title": "Kommentar löschen?",
"no-comments": "Keine Kommentare",
"no-comments-desc": "Kann keine Kommentare und Aktivitäten sehen.",
"worker": "Arbeiter",
@@ -1069,5 +1071,22 @@
"maximize-card": "Karte maximieren",
"minimize-card": "Karte minimieren",
"delete-org-warning-message": "Diese Organisation kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört.",
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört."
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört.",
"subject": "Betreff",
"details": "Details",
"carbon-copy": "Kopie (CC:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticketnummer",
"open": "Offen",
"pending": "Unerledigt",
"closed": "Geschlossen",
"resolved": "Gelöst",
"cancelled": "Gestrichen",
"history": "Verlauf",
"request": "Anfrage",
"requests": "Anfragen",
"help-request": "Hilfsgesuch",
"editCardSortOrderPopup-title": "Sortierung ändern",
"cardDetailsPopup-title": "Kartendetails"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Συγγραφή Σχολίου",
"comment-only": "Μόνο σχόλιο",
"comment-only-desc": "Μπορεί μόνο να σχολιάζει σε κάρτες.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "Χωρίς σχόλια",
"no-comments-desc": "Δε μπορεί να δει σχόλια και δραστηριότητες.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1070,5 +1072,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Write Comment",
"comment-only": "Comment only",
"comment-only-desc": "Can comment on cards only.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Comentar",
"comment-only": "Comentar solamente",
"comment-only-desc": "Puede comentar en tarjetas solamente.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "Sin comentarios",
"no-comments-desc": "Can not see comments and activities.",
"worker": "Worker",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
+20 -1
View File
@@ -271,6 +271,8 @@
"comment-placeholder": "Escribir comentario",
"comment-only": "Sólo comentarios",
"comment-only-desc": "Solo puedes comentar en las tarjetas.",
"comment-delete": "Are you sure you want to delete the comment?",
"deleteCommentPopup-title": "Delete comment?",
"no-comments": "No hay comentarios",
"no-comments-desc": "No se pueden mostrar comentarios ni actividades.",
"worker": "Trabajador",
@@ -1069,5 +1071,22 @@
"maximize-card": "Maximize Card",
"minimize-card": "Minimize Card",
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it",
"subject": "Subject",
"details": "Details",
"carbon-copy": "Carbon Copy (Cc:)",
"ticket": "Ticket",
"tickets": "Tickets",
"ticket-number": "Ticket Number",
"open": "Open",
"pending": "Pending",
"closed": "Closed",
"resolved": "Resolved",
"cancelled": "Cancelled",
"history": "History",
"request": "Request",
"requests": "Requests",
"help-request": "Help Request",
"editCardSortOrderPopup-title": "Change Sorting",
"cardDetailsPopup-title": "Card Details"
}
Loaded 100 of 174 files, more files were not shown because too many files have changed in this diff. Show more