Compare commits

...
163 Commits
Author SHA1 Message Date
Lauri Ojansivu 07d1a864d8 v4.12 2020-06-08 20:29:55 +03:00
Lauri Ojansivu ffcd380523 Update ChangeLog. 2020-06-08 20:24:40 +03:00
Lauri Ojansivu 55534b8b2e Fix typos. 2020-06-08 20:23:34 +03:00
Lauri Ojansivu ca23934bde Update ChangeLog. 2020-06-08 20:21:36 +03:00
Lauri Ojansivu 8a622ec7c3 Change to correct dependency version. 2020-06-08 19:20:27 +03:00
Lauri Ojansivu 39519d1cc9 1) Public board default view to Swimlane.
2) When changing Public board view (sets view cookie), also reload page so view is changed immediately.

Thanks to xet7 !
2020-06-08 19:12:17 +03:00
Lauri Ojansivu dcbf92b5b1 Update dependencies. 2020-06-08 17:55:43 +03:00
Lauri Ojansivu 7f6d500cbe Default view Swimlanes part 3: Change dropdown order to Swimlanes/Lists/Calendar.
Thanks to xet7 !
2020-06-08 17:53:03 +03:00
Lauri Ojansivu cb1e91fee8 Update minifier-css.
Thanks to xet7 !
2020-06-08 17:37:20 +03:00
Lauri Ojansivu 96494bacf5 Fix indent part 2.
Thanks to xet7 !
2020-06-08 17:35:25 +03:00
Lauri Ojansivu 99f68f36b0 Fix XSS.
Thanks to xet7 !
2020-06-08 17:34:45 +03:00
Lauri Ojansivu 61e682470c Default view Swimlanes part 2.
Thanks to xet7 !
2020-06-08 17:33:38 +03:00
Lauri Ojansivu 415e94d187 Fix indent.
Thanks to xet7 !
2020-06-08 17:32:17 +03:00
Lauri Ojansivu 6b22f96313 Use markdown in Swimlane titles.
Thanks to xet7 !
2020-06-08 17:30:26 +03:00
Lauri Ojansivu 8c3322f9a9 Change default view to Swimlanes.
Thanks to xet7 !
2020-06-08 17:28:53 +03:00
Lauri Ojansivu f935cf391e Update translations. 2020-06-08 17:26:00 +03:00
Marc Hartmayer fb44df9815 WIP: XSS fixes 2020-06-07 23:22:04 +02:00
Marc Hartmayer 1f85b25549 WIP: markdown 2020-06-06 11:26:56 +02:00
Lauri Ojansivu 232bc746f4 Update ChangeLog. 2020-06-04 02:52:18 +03:00
Lauri Ojansivu ea448cd6c3 Update ChangeLog. 2020-06-04 02:49:38 +03:00
Lauri Ojansivu a7d12ddcaa v4.11 2020-06-04 01:41:17 +03:00
Lauri Ojansivu 420e9b23d2 Update ChangeLog. 2020-06-04 01:36:05 +03:00
Lauri Ojansivu cd49018306 Add fibers. 2020-06-04 01:34:49 +03:00
Lauri Ojansivu ddbf4f18ff Update translations. 2020-06-04 01:33:58 +03:00
Lauri Ojansivu 24104991b4 Update ChangeLog. 2020-06-04 01:31:53 +03:00
Lauri Ojansivu d9d451a206 Upgrade to Node v12.18.0
Thanks to Node developers and xet7 !
2020-06-04 01:25:35 +03:00
Lauri Ojansivu 1f07050979 Merge pull request #3149 from marc1006/issue_3148
Update `markedjs` package
2020-06-04 00:57:44 +03:00
Marc Hartmayer 399ddd2dab Update markedjs package
Update `markedjs` to commit
https://github.com/markedjs/marked/commit/7b3036f8c0440cfd003ce47dd6e1a92af0f5e822.
This fixes the issue https://github.com/wekan/wekan/issues/3148.
2020-06-03 23:10:25 +02:00
Lauri Ojansivu 2876ce633c Merge pull request #3146 from GitGramm/patch-1
Added dates & assignees to REST API calls #3145
2020-06-01 16:51:57 +03:00
GitGramm 333b9c811d Merge pull request #2 from GitGramm/GitGramm-patch-2
Added dates & assignees to REST API calls incl receivedAt
2020-06-01 15:45:20 +02:00
GitGramm 1df3d56f7c Added dates & assignees to REST API calls incl receivedAt
I have added the dates (received, start, due, end) and the assignees to the output of the REST API Calls.
2020-06-01 15:44:51 +02:00
GitGramm d2a7a82870 Added dates & assignees to REST API calls #3145
I have added the dates (stat, due, end) and the assignees to the output of the REST API Calls
2020-06-01 14:23:43 +02:00
Lauri Ojansivu 5e49006b6f Update ChangeLog. 2020-05-31 05:29:11 +03:00
Lauri Ojansivu f73ea218ee Add Calendar Month Event List view.
Thanks to xet7 !
2020-05-30 17:12:09 +03:00
Lauri Ojansivu 6ac3249272 v4.10 2020-05-30 08:41:48 +03:00
Lauri Ojansivu 784f960e8f Update ChangeLog. 2020-05-30 08:35:46 +03:00
Lauri Ojansivu 04db8d739e Update translations. 2020-05-30 08:29:32 +03:00
Lauri Ojansivu 7226afdc39 Remove fibers. 2020-05-30 08:25:12 +03:00
Lauri Ojansivu 446a81ddd0 Merge pull request #3140 from marc1006/2310
Fix Registration broken "Templates board id is required"
2020-05-30 08:22:47 +03:00
Marc Hartmayer 5fd167c182 REALLY, REALLY UGLY HACK 2020-05-29 23:42:19 +02:00
Marc Hartmayer 7cd57ee023 WIP 2020-05-29 22:29:42 +02:00
Lauri Ojansivu 07ab3b83b1 Update ChangeLog. 2020-05-29 21:40:53 +03:00
Lauri Ojansivu 3ade9d95a6 Upgrade to Node v12.17.0
Thanks to Node developers and xet7 !
2020-05-29 21:37:28 +03:00
Lauri Ojansivu 55c5f07026 Update ChangeLog. 2020-05-29 21:24:44 +03:00
Lauri Ojansivu b4ade0256b Merge pull request #3135 from marc1006/sendSMTPTestEmail
Fix email verification in `sendSMTPTestEmail`
2020-05-29 21:24:21 +03:00
Marc Hartmayer afcb8aa49b Fix email verification in sendSMTPTestEmail
Fixes: 6e088af3
2020-05-29 13:35:29 +02:00
Lauri Ojansivu a47ca598e7 Merge pull request #3131 from gvespignani70/feature/new-API-cardsByCustomField
Added an API to get the cards for a specific custom field value
2020-05-28 18:51:30 +03:00
Giacomo Vespignani c9a28db3ab Added an API to get the cards for a specific custom field value 2020-05-27 11:16:35 +02:00
Lauri Ojansivu 1cfb6eee4b v4.09 2020-05-27 02:12:42 +03:00
Lauri Ojansivu 6c68867efe Update translations. 2020-05-27 02:04:43 +03:00
Lauri Ojansivu 0ef84a0d5f Update ChangeLog. 2020-05-27 01:45:48 +03:00
Lauri Ojansivu e0f4758667 Merge pull request #3128 from brymut/fix-export-csv-vote
Fix vote export & export/import currency custom field to CSV/TSV
2020-05-27 01:43:08 +03:00
Bryan Mutai 8c149da9e9 Fix vote export to CSV/TSV & export currency custom field. 2020-05-27 01:23:31 +03:00
Lauri Ojansivu 18eafe2fec v4.08 2020-05-26 17:12:29 +03:00
Lauri Ojansivu 5ac636fdd4 Update translations. 2020-05-26 17:08:23 +03:00
Lauri Ojansivu 6db3474cdf Update ChangeLog. 2020-05-26 17:03:52 +03:00
Lauri Ojansivu 6a1bc167cf Add some changes to Modern theme.
Thanks to jeroenstoker and xet7 !

Related #3086
2020-05-26 17:00:46 +03:00
Lauri Ojansivu 191071d295 Update ChangeLog. 2020-05-26 12:59:28 +03:00
Lauri Ojansivu 3e4a9471ba Merge branch 'habenamare-currency-custom-field' 2020-05-26 12:54:14 +03:00
Lauri Ojansivu 9b68aa919a Update translations. 2020-05-26 12:53:43 +03:00
Haben Amare 8732e4b18f use Intl.NumberFormat to format currency 2020-05-25 22:05:06 +00:00
Haben Amare d26786a628 display formatted currency custom field on minicard 2020-05-25 22:02:51 +00:00
Haben Amare 54b9035eb2 add 'cardCustomField-currency' template 2020-05-25 22:02:51 +00:00
Haben Amare 3cf6ed916f add the 'currency' custom field type 2020-05-25 22:02:51 +00:00
Lauri Ojansivu 351d9d0c95 Fix typo that caused parse error. 2020-05-26 00:51:10 +03:00
Lauri Ojansivu c0923ed3cf v4.07 2020-05-26 00:38:29 +03:00
Lauri Ojansivu fc2eb2e935 Update ChangeLog. 2020-05-26 00:35:32 +03:00
Lauri Ojansivu 88844034fc Merge pull request #3122 from marc1006/default_value
Fix default value of `sort`
2020-05-26 00:29:33 +03:00
Marc Hartmayer 3d33ea911a Fix default value of sort
The default has to be a numeric value.
2020-05-25 23:26:07 +02:00
Lauri Ojansivu bb08e40ea5 Merge pull request #3121 from marc1006/api_gen
Fix Python API generation
2020-05-26 00:13:00 +03:00
Marc Hartmayer c4879de4b1 Fix Python API generation 2020-05-25 23:10:01 +02:00
Lauri Ojansivu fd0afd7b05 Merge pull request #3120 from marc1006/issue_3119
Fix move selection
2020-05-25 23:50:51 +03:00
Marc Hartmayer 5c02850bc1 Fix move selection
This fixes https://github.com/wekan/wekan/issues/3119.
2020-05-25 22:48:57 +02:00
Lauri Ojansivu 1f450df1af v4.06 2020-05-25 23:22:35 +03:00
Lauri Ojansivu e933890730 Update translations. 2020-05-25 23:19:25 +03:00
Lauri Ojansivu 8eafa1ac66 Fix Card export CSV, check for vote undefined.
Thanks to xet7 !
2020-05-25 22:59:52 +03:00
Lauri Ojansivu 858bb35612 v4.05 2020-05-25 21:46:08 +03:00
Lauri Ojansivu f9018fc3a8 Sorry marc1006, I had to revert deepcode.ai arrow function fixes because
Python API docs generator does not work all when code has arrow functions.

Thanks to xet7 !
2020-05-25 21:33:38 +03:00
Lauri Ojansivu 252c4b19f9 Update ChangeLog. 2020-05-25 18:04:51 +03:00
Lauri Ojansivu 05349a5deb Prettifier fixes. 2020-05-25 18:04:32 +03:00
Lauri Ojansivu d52affe658 Move In Progress ostrio-files changes to separate branch, and revert ostrio-files changes, so that:
- Export to CSV/TSV with custom fields works
- Attachments are not exported to disk
- It is possible to build arm64/s390x versions again.

Thanks to xet7 !

Related #3110
2020-05-25 17:54:51 +03:00
Lauri Ojansivu 23dcd084a4 Update translations. 2020-05-24 19:29:38 +03:00
Lauri Ojansivu a853189486 Update ChangeLog. 2020-05-24 19:10:29 +03:00
Lauri Ojansivu 82d0a3df85 Merge branch 'brymut-import-export-custom-fields' 2020-05-24 19:06:38 +03:00
Lauri Ojansivu ef189477dd Merge branch 'import-export-custom-fields' of https://github.com/brymut/wekan into
brymut-import-export-custom-fields
2020-05-24 18:59:46 +03:00
Lauri Ojansivu 4bcc795778 Update ChangeLog. 2020-05-24 18:57:43 +03:00
Lauri Ojansivu 01346152b5 Merge pull request #3112 from marc1006/deepcode
Some fixes suggested by deepcode.ai
2020-05-24 18:56:36 +03:00
Lauri Ojansivu 5b7b5b3e7e Update ChangeLog. 2020-05-24 18:51:24 +03:00
Lauri Ojansivu 2df29324e6 Merge branch 'marc1006-minor_fixes' 2020-05-24 18:51:12 +03:00
Bryan Mutai 51f52fee23 enable exporting and importing custom fields. 2020-05-24 17:48:49 +03:00
Marc Hartmayer 6e088af3d1 Fix email verification in sendSMTPTestEmail
Found by deepcode.ai.
2020-05-24 13:19:24 +02:00
Marc Hartmayer fc9f0d8392 Sort callback should return 0 if values are equal
Fixes:
"The callback [:381] provided to sort [:381] should return 0 if the compared values are equal."
2020-05-24 13:19:24 +02:00
Marc Hartmayer cfa2bbd3d4 Fix false positive found by deepcode.ai 2020-05-24 13:19:24 +02:00
Marc Hartmayer 52d633ca69 Use on instead of bind
Suggested by deepcode.ai.
2020-05-24 12:46:39 +02:00
Marc Hartmayer b2fee6a6c1 Use an arrow function inside forEach() instead of an anonymous function
Suggested by deepcode.ai.
2020-05-24 12:44:14 +02:00
Marc Hartmayer 66d35a1528 Fix minicard cover functionality
Otherwise, if `this.coverId` is undefined then `Attachments.findOne()` would
return any attachment.
2020-05-24 11:55:44 +02:00
Marc Hartmayer b7105d7b57 Fix error link not available
Fixes:

Exception in template helper: TypeError: Cannot read property 'link' of undefined
    at constructor.attachmentLink (http://192.168.178.2:8080/app/app.js?hash=c0f961362c1318d650abaafcaaa6f6a77c8d11c8:3935:29)
    at http://192.168.178.2:8080/packages/blaze.js?hash=a20deb597f76789e171a9ee2b2e37d73fbb7ecda:1566:16
    at http://192.168.178.2:8080/packages/peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:395:66
    at Function.Template._withTemplateInstanceFunc (http://192.168.178.2:8080/packages/blaze.js?hash=a20deb597f76789e171a9ee2b2e37d73fbb7ecda:3575:14)
    at http://192.168.178.2:8080/packages/peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:394:27
    at Spacebars.call (http://192.168.178.2:8080/packages/spacebars.js?hash=6f2be25813c793c0b363a6a91ebb029723f294ec:169:51)
    at Spacebars.mustacheImpl (http://192.168.178.2:8080/packages/spacebars.js?hash=6f2be25813c793c0b363a6a91ebb029723f294ec:106:25)
    at Object.Spacebars.mustache (http://192.168.178.2:8080/packages/spacebars.js?hash=6f2be25813c793c0b363a6a91ebb029723f294ec:110:39)
    at Blaze.View._render (http://192.168.178.2:8080/app/app.js?hash=c0f961362c1318d650abaafcaaa6f6a77c8d11c8:3328:42)
    at Blaze.View.doRender (http://192.168.178.2:8080/packages/blaze.js?hash=a20deb597f76789e171a9ee2b2e37d73fbb7ecda:1925:25)
2020-05-24 11:31:25 +02:00
Marc Hartmayer d5fbd50b76 Make scrollParentContainer() more robust as it's used in a timeout callback
Example exception:

Exception in setTimeout callback: TypeError: Cannot read property 'parentComponent' of null
at constructor.scrollParentContainer (cardDetails.js:77)
at cardDetails.js:190
at Meteor.EnvironmentVariable.EVp.withValue (meteor.js?hash=857dafb4b9dff17e29ed8498a22ea5b1a3d6b41d:1207)
at meteor.js?hash=857dafb4b9dff17e29ed8498a22ea5b1a3d6b41d:588
at meteor.js?hash=857dafb4b9dff17e29ed8498a22ea5b1a3d6b41d:1234

Probably there is a better fix for this.
2020-05-24 11:28:05 +02:00
Lauri Ojansivu 06515559a6 Update translations. 2020-05-24 09:12:01 +03:00
Lauri Ojansivu c61a126c8b Add default attachments store path /var/snap/wekan/common/uploads
where attachments will be stored.
2020-05-24 09:03:50 +03:00
Lauri Ojansivu b737adfcdf Try to fix Snap. 2020-05-24 07:24:44 +03:00
Lauri Ojansivu 3b44acd87c Update packages. 2020-05-24 06:54:48 +03:00
Lauri Ojansivu 6fad68b9b9 Try to fix Snap. 2020-05-24 05:43:50 +03:00
Lauri Ojansivu b05f8e5251 Update translations. 2020-05-24 04:24:04 +03:00
Lauri Ojansivu 31c2afb072 Merge branch 'feature-meteor-files' 2020-05-24 04:18:52 +03:00
Lauri Ojansivu 863f0fc5db v4.04 2020-05-24 03:46:20 +03:00
Lauri Ojansivu 055b528532 Merge branch 'lib-change' of https://github.com/PDIS/wekan into
PDIS-lib-change
2020-05-24 03:13:53 +03:00
Lauri Ojansivu fda392e662 Update translations. 2020-05-24 02:45:09 +03:00
Lauri Ojansivu e5f9d0a4dd Update ChangeLog. 2020-05-24 02:37:24 +03:00
Lauri Ojansivu 3f16bf6054 Merge pull request #3109 from marc1006/issue_3107
Set '*' as default value for swimlane and list name in card move action
2020-05-24 02:13:55 +03:00
Lauri Ojansivu 6774b9e905 Update ChangeLog. 2020-05-24 02:11:23 +03:00
Lauri Ojansivu 00a38b36a4 Merge pull request #3108 from marc1006/issue_2757
Change the swimlaneid of a card only if a new target swimlaneid is se…
2020-05-24 01:56:58 +03:00
Lauri Ojansivu de365ad62a Merge branch 'master' of https://github.com/helioguardabaxo/wekan 2020-05-24 01:46:12 +03:00
Lauri Ojansivu fe631ff75b Update ChangeLog. 2020-05-24 01:16:42 +03:00
Lauri Ojansivu eed649fbe6 Merge branch 'Lewiscowles1986-feature-export-to-html-wip' 2020-05-24 01:13:07 +03:00
Lauri Ojansivu 8ddbc622db Merge branch 'feature-export-to-html-wip' of
https://github.com/Lewiscowles1986/wekan into
Lewiscowles1986-feature-export-to-html-wip
2020-05-24 00:55:32 +03:00
Marc Hartmayer 24b21d23ba Set '*' as default value for swimlane and list name in card move action
This is the same default as `Utils.getTriggerActionDesc` has. This commit fixes
https://github.com/wekan/wekan/issues/3107.
2020-05-23 19:37:23 +02:00
Marc Hartmayer 64fa02cdf5 Change the swimlaneid of a card only if a new target swimlaneid is selected
Fixes the issue https://github.com/wekan/wekan/issues/2757. While at it, fix the
same issue also for multi selection.
2020-05-23 17:35:22 +02:00
helioguardabaxo 3b50b2c59f Added Modern theme with Poppins font 2020-05-22 18:38:50 -03:00
Romulus Urakagi Tsai 921460db40 Fix export attachments (not tested) 2020-05-22 14:59:56 +08:00
Romulus Urakagi Tsai 4156073b1a Fix translation error 2020-05-22 14:53:10 +08:00
Romulus Urakagi Tsai af7c74b2d3 Merge branch 'lib-change' of https://github.com/PDIS/wekan into lib-change 2020-05-20 15:12:55 +08:00
Romulus Urakagi Tsai 4064f3f406 Fix migrated attachment not readable bug
Remove reduandant files
2020-05-20 15:11:22 +08:00
Lauri Ojansivu 94e47401cb Update ChangeLog. 2020-05-20 02:30:46 +03:00
Lewis Cowles 5ef83ab236 Export Board to Zip file
* Extracts Card covers
* Labels
* Re-works some CSS & HTML
* Produces deployable assets (minus WebFonts)
2020-05-18 11:06:18 +01:00
Lauri Ojansivu c22eaa26cd Update translations. 2020-05-17 03:19:30 +03:00
Lauri Ojansivu 060b9acd86 Update ChangeLog. 2020-05-17 01:08:50 +03:00
Lauri Ojansivu 213b7b4819 Merge branch 'helioguardabaxo-master' 2020-05-17 00:52:21 +03:00
helioguardabaxo 7a576f9ae4 Added natural theme 2020-05-16 18:07:38 -03:00
Lauri Ojansivu 62f06a792f v4.03 2020-05-16 03:42:57 +03:00
Lauri Ojansivu 1ac11d92ba Try to fix Sandstorm Export menu.
Thanks to xet7.
2020-05-15 20:37:30 -04:00
Lauri Ojansivu 0c299e3225 Update ChangeLog. 2020-05-16 03:33:17 +03:00
Lauri Ojansivu bcc3a39c06 Merge branch 'CidKramer-master' 2020-05-16 03:28:11 +03:00
Lauri Ojansivu 13dffca055 Merge branch 'master' of https://github.com/CidKramer/wekan into CidKramer-master 2020-05-16 03:25:06 +03:00
Lauri Ojansivu 68ee88a041 Update ChangeLog. 2020-05-16 03:15:39 +03:00
Lauri Ojansivu 3718dd4d45 Fix lint. 2020-05-16 03:15:14 +03:00
Lauri Ojansivu 506a747fce Update translations. 2020-05-16 03:12:07 +03:00
Lauri Ojansivu 98e255ccec Fix Can't Scroll on All Boards on mobile phone. Added drag handles.
Thanks to xet7 !

Fixes #3096
2020-05-16 03:08:05 +03:00
CidKramer 45dea737bf Added clearblue theme 2020-05-15 14:17:37 +02:00
蔡仲明 (Romulus Urakagi Tsai) b80396f627 Purge unneeded require 2020-05-14 17:36:57 +08:00
Romulus Tsai 蔡仲明 0735981366 Merge branch 'master' into lib-change 2020-05-14 16:47:05 +08:00
Romulus Tsai 蔡仲明 5d8cca40d2 Merge branch 'master' of https://github.com/wekan/wekan 2020-05-14 16:45:21 +08:00
Romulus Urakagi Tsai 09ce3e464f Fix typo 2020-05-14 16:43:59 +08:00
Romulus Urakagi Tsai 4c5a2fbd1f Card clone OK 2020-05-14 14:55:54 +08:00
Romulus Urakagi Tsai 012ca39a8d Attachment activities merging done 2020-05-08 11:50:43 +08:00
Romulus Tsai 蔡仲明 c3458855bd Merge branch 'master' into lib-change 2020-05-08 10:13:11 +08:00
Romulus Tsai 蔡仲明 cfcc73724f Merge branch 'master' of https://github.com/wekan/wekan 2020-05-08 09:35:11 +08:00
Romulus Urakagi Tsai 4448488767 Done attachments activities operating 2020-05-08 09:32:19 +08:00
Romulus Urakagi Tsai 7dc0bbd7b2 Set correct storage location 2020-05-06 11:15:01 +08:00
Romulus Urakagi Tsai 269698ba78 Attachments download 2020-05-05 14:18:10 +08:00
Romulus Urakagi Tsai 0a1bfd37b3 Migrating attachments 2020-05-05 14:08:36 +08:00
Romulus Urakagi Tsai 5899b9366c Change coagmano:stylus package to 1.1.0 since 2.0.0 building is super slow 2020-03-02 02:10:54 +00:00
Romulus Urakagi Tsai 4b196d5378 Merge branch 'master' of https://github.com/wekan/wekan into lib-change 2020-02-13 09:02:26 +00:00
Romulus Urakagi Tsai b34ed58289 Start writing migration 2020-02-13 08:47:41 +00:00
Romulus Urakagi Tsai 617fdaeb74 Fix sandstorm storage path 2020-01-14 07:06:20 +00:00
Romulus Urakagi Tsai d26bf04bfa Change to relative path and /var/attachments to store 2020-01-14 06:29:34 +00:00
Romulus Tsai 蔡仲明 a365899312 Merge branch 'master' of https://github.com/PDIS/wekan 2020-01-02 17:34:10 +08:00
Romulus Urakagi Tsai 6ebd6defe9 Uploading dialog done 2020-01-02 09:16:28 +00:00
Romulus Urakagi Tsai 93337c20f8 Change upload routine, add upload popup 2019-12-24 08:57:34 +00:00
Romulus Urakagi Tsai 6cdd464f54 Uploaded done, but uploading not 2019-11-27 09:40:19 +00:00
蔡仲明 (Romulus Urakagi Tsai) 3e0bedd8c7 Merge pull request #1 from wekan/master
Update master
2019-11-21 11:25:56 +08:00
Romulus Urakagi Tsai 4dcdec0084 Attachment upload from card done, need to fix download link 2019-11-20 10:40:09 +00:00
Romulus Urakagi Tsai 05c53ca01d Trying to upload an attachment with Meteor-Files 2019-11-18 01:47:26 +00:00
135 changed files with 8247 additions and 4433 deletions

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=12.16.3 \
NODE_VERSION=12.18.0 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
+1 -1
View File
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.16.3
node-engine: 12.18.0
node-packages:
- node-gyp
- node-pre-gyp
+1 -1
View File
@@ -83,7 +83,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 12.14.3
node-engine: 12.18.0
node-packages:
- node-gyp
- node-pre-gyp
+1
View File
@@ -98,3 +98,4 @@ percolate:synced-cron
easylogic:summernote
cfs:filesystem
ostrio:cookies
tmeasday:check-npm-versions
+4 -3
View File
@@ -101,7 +101,7 @@ meteorhacks:collection-utils@1.2.0
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
meteorspark:util@0.2.0
minifier-css@1.5.0
minifier-css@1.5.1
minifier-js@2.6.0
minifiers@1.1.8-faster-rebuild.0
minimongo@1.6.0
@@ -109,7 +109,7 @@ mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.15.0
modules-runtime@0.12.0
momentjs:moment@2.25.2
momentjs:moment@2.26.0
mongo@1.10.0
mongo-decimal@0.1.1
mongo-dev-server@1.1.0
@@ -177,6 +177,7 @@ templating@1.3.2
templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
tmeasday:check-npm-versions@0.3.2
tracker@1.2.0
twbs:bootstrap@3.3.6
ui@1.0.13
@@ -191,7 +192,7 @@ webapp-hashing@1.0.9
wekan-accounts-cas@0.1.0
wekan-accounts-oidc@1.0.10
wekan-ldap@0.0.2
wekan-markdown@1.0.7
wekan-markdown@1.0.9
wekan-oidc@1.0.12
wekan-scrollbar@3.1.3
yasaricli:slugify@0.0.7
+1 -1
View File
@@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 12.16.3
TRAVIS_NODE_VERSION: 12.18.0
TRAVIS_NPM_VERSION: latest
before_install:
+222
View File
@@ -1,3 +1,225 @@
# v4.12 2020-06-08 Wekan release
This release fixes the following CRITICAL SECURITY VULNERABILITIES:
- Fix XSS bug reported 2020-05-24 by [swsjona](https://twitter.com/swsjona):
[Part 1](https://github.com/wekan/wekan/commit/1f85b25549b50602380f1745f19e5fe44fe36d6f),
[Part 2](https://github.com/wekan/wekan/commit/fb44df981581354bf23a6928427ad2bf73c4550f),
[Part 3](https://github.com/wekan/wekan/commit/99f68f36b028d6c75acf2e5b83585b1acee65f97),
[Part 4](https://github.com/wekan/wekan/commit/8a622ec7c3043bf8f34399ef34563e6a9a19dcd8).
Logged in users could run javascript in input fields. This was partially fixed at v3.85,
but at some fields XSS was still possible. This affects at least Wekan versions v3.12-v4.12.
After this fix, Javascript in input fields is not executed.
Thanks to swsjona, marc1006 and xet7.
and adds the following new features:
- Change default view to Swimlanes:
[Part 1](https://github.com/wekan/wekan/commit/8c3322f9a93c321e8a2cc5cfcd4b1d6316a5fb7c),
[Part 2](https://github.com/wekan/wekan/commit/61e682470cdaef42cce2d74b41fb752cfc61848b),
[Part 3 Change dropdown order to Swimlanes/Lists/Calendar](https://github.com/wekan/wekan/commit/7f6d500cbec15496ae357b05b9df3f10e51ed1f1),
[Part 4.1. Public board default view to Swimlane. Part 4.2. When changing Public board
view (sets view cookie), also reload page so view is changed
immediately](https://github.com/wekan/wekan/commit/39519d1cc944c567837be0f88ab4a037e2144c61).
Thanks to xet7.
- [Use markdown in Swimlane titles](https://github.com/wekan/wekan/commit/6b22f96313354b45b851b93c25aa392bbe346bdb).
Thanks to xet7.
and adds the following updates:
- [Update minifier-css](https://github.com/wekan/wekan/commit/cb1e91fee83eaad1e926c288c0abfc1e4f2a8bd4).
Thanks to xet7.
and fixes the following bugs:
- Fix indent [Part1](https://github.com/wekan/wekan/commit/415e94d187ffcb9a4afaecc5c6960a50a87ca7eb),
[Part 2](https://github.com/wekan/wekan/commit/96494bacf550cde65598e6d59199517f311aa33d).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.11 2020-06-04 Wekan release
This release adds the following new platforms:
- [Using arm64 bundle on Raspberry Pi OS arm64 with MongoDB 4.2.x for RasPi3 and
RasPi4](https://github.com/wekan/wekan/wiki/Raspberry-Pi#raspberry-pi-os-arm64-with-mongodb-42x).
Thanks to Raspberry Pi OS devs, MongoDB devs and xet7.
- [s390x RHEL 8](https://github.com/wekan/wekan/wiki/s390x#rhel-8).
Thanks to IBM, Red Hat Linux, Linux Foundation and xet7.
and adds the following updates:
- [Upgrade to Node v12.18.0](https://github.com/wekan/wekan/commit/d9d451a206cabe7f6ca8ad5d35eb76443198e4c1).
Thanks to Node developers and xet7.
- [Update `markedjs` package](https://github.com/wekan/wekan/pull/3149).
Thanks to marc1006.
- [Add fibers](https://github.com/wekan/wekan/commit/cd49018306f826fff37b7024dfde9de05d88b620).
Thanks to xet7.
and adds the following new features:
- [Add Calendar Month Event List view](https://github.com/wekan/wekan/commit/f73ea218eefba3f0d6c642849dfede9e03052d25).
Thanks to xet7.
- [Added dates & assignees to REST API calls](https://github.com/wekan/wekan/pull/3146).
Thanks to GitGramm.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.10 2020-05-30 Wekan release
This release adds the following new features:
- [Added an API to get the cards for a specific custom field value](https://github.com/wekan/wekan/pulls/3131).
Thanks to gvespignani70.
and adds the following updates:
- [Upgrade to Node v12.17.0](https://github.com/wekan/wekan/commit/3ade9d95a69b269c345127e1755e1b539dc07263).
Thanks to Node developers and xet7.
and fixes the following bugs:
- [Fix email verification in `sendSMTPTestEmail`](https://github.com/wekan/wekan/pull/3135).
Thanks to marc1006.
- [Try to Fix Registration broken "Templates board id is required" with ugly hack. If it works, ugly becomes
beautiful](https://github.com/wekan/wekan/pull/3140).
Thanks to marc1006.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.09 2020-05-27 Wekan release
This release fixes the following bugs:
- [Fix vote export & export/import currency custom field to CSV/TSV](https://github.com/wekan/wekan/pull/3128).
Thanks to brymut.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.08 2020-05-26 Wekan release
This release adds the following new features:
- [Add the 'Currency' Custom Field type](https://github.com/wekan/wekan/pull/3123).
Thanks to habenamare.
and adds the following updates:
- [Add some changes to Modern theme](https://github.com/wekan/wekan/commit/6a1bc167cf10e75d61b3196db9eac2978d70ad8e).
Thanks to jeroenstoker and xet7.
and fixes the following bugs:
- [Fix typo that caused parse error](https://github.com/wekan/wekan/commit/351d9d0c9577c9d543d543bc12a51388b0141324).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.07 2020-05-26 Wekan release
This release fixes the following bugs:
- [Fix move selection](https://github.com/wekan/wekan/pull/3120).
Thanks to marc1006.
- [Fix Python API generation](https://github.com/wekan/wekan/pull/3121).
Thanks to marc1006.
- [Fix default value of `sort`](https://github.com/wekan/wekan/pull/3122).
Thanks to marc1006.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.06 2020-05-25 Wekan release
This release fixes the following bugs:
- [Fix Card export CSV, check for vote
undefined](https://github.com/wekan/wekan/commit/8eafa1ac66fdcf5fb5f0a95aa6cfee454ddad67f).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.05 2020-05-25 Wekan release
This release adds the following new features:
- [Import/Export Custom Fields in CSV/TSV](https://github.com/wekan/wekan/pull/3115).
Thanks to brymut.
and adds the following updates:
- [Update packages](https://github.com/wekan/wekan/commit/3b44acd87c35340bf9fe5d210f4402f1b1a1dfdf).
Thanks to xet7.
and fixes the following bugs:
- Try to fix Snap [1](https://github.com/wekan/wekan/commit/6fad68b9b9afd8de7074037d73eeac40f6a3f7c1), [2](https://github.com/wekan/wekan/commit/b737adfcdfc9b8084a7eb84420a89c014bbec1fb). Later reverted those like other ostrio-files changes too.
Thanks to xet7.
- [Add default attachments store path /var/snap/wekan/common/uploads where attachments will be
stored](https://github.com/wekan/wekan/commit/c61a126c8bcb25a1eda0203b89c990ae31de7a70).
Thanks to xet7.
- [Make scrollParentContainer() more robust as it's used in a timeout callback. Example exception: Exception in setTimeout callback: TypeError: Cannot read property 'parentComponent' of null. Probably there is a better fix for this](https://github.com/wekan/wekan/commit/d5fbd50b760b1d3b84b5b4e8af3a8ed7608e2918).
Thanks to marc1006.
- [Fix error link not available. Fixes: Exception in template helper: TypeError: Cannot read property 'link' of
undefined](https://github.com/wekan/wekan/commit/b7105d7b5712dcdbf9dadebfddaba7691810da5c).
Thanks to marc1006.
- [Fix minicard cover functionality. Otherwise, if `this.coverId` is undefined then `Attachments.findOne()` would return any
attachment](https://github.com/wekan/wekan/commit/66d35a15280795b76a81c3e59cebbd2a29e4dff8).
Thanks to marc1006.
- [Some fixes suggested by deepcode.ai](https://github.com/wekan/wekan/pull/3112).
Thanks to marc1006.
- [Sorry marc1006, I had to revert deepcode.ai arrow function fixes because Python API docs generator does not work all when code has arrow functions](https://github.com/wekan/wekan/commit/f9018fc3a87080d8d97c371e29a8f3f0a20ca932).
Thanks to xet7.
- [Move In Progress ostrio-files changes to separate branch, and revert ostrio-files changes, so that:
Export to CSV/TSV with custom fields works, Attachments are not exported to disk,
It is possible to build arm64/s390x versions
again](https://github.com/wekan/wekan/commit/d52affe65893f17bab59bb43aa9f5afbb54993d3).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.04 2020-05-24 Wekan release
Please use v4.05 or newer instead, that works better.
This release adds the following features:
- [Found Time Tracking GPLv3 software "Titra" with integration to Wekan](https://github.com/wekan/wekan/wiki/Time-Tracking).
Thanks to willhseitz.
- [Theme: Natural](https://github.com/wekan/wekan/pull/3098).
You can select it from Board Settings / Change color / natural.
Thanks to compumatter and helioguardabaxo.
- [Theme: Modern](https://github.com/wekan/wekan/pull/3106).
Thanks to jeroenstoker com and helioguardabaxo.
- [Export board to HTML static page .zip archive](https://github.com/wekan/wekan/pull/3043).
Thanks to Lewiscowles1986.
and fixes the following bugs:
- [Change the swimlaneid of a card only if a new target swimlaneid is selected](https://github.com/wekan/wekan/pull/3108).
Thanks to marc1006.
- [Set '*' as default value for swimlane and list name in card move action](https://github.com/wekan/wekan/pull/3109).
Thanks to hickorysb and marc1006.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.03 2020-05-16 Wekan release
This release adds the following features:
- [Theme: Clearblue](https://github.com/wekan/wekan/pull/3093).
You can select it from Board Settings / Change color / clearblue.
Thanks to CidKramer.
and fixes the following bugs:
- [Fix Can't Scroll on All Boards on mobile phone. Added drag handles](https://github.com/wekan/wekan/issues/3096).
Thanks to xet7.
- [Try to fix Sandstorm Wekan Export menu](https://github.com/wekan/wekan/commit/1ac11d92ba8f38981c87db25e5b5e1fa2adb6968).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v4.02 2020-05-15 Wekan release
This release adds the following server platforms:
+1 -1
View File
@@ -8,7 +8,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.16.3 \
NODE_VERSION=v12.18.0 \
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.16.3 \
NODE_VERSION=v12.18.0 \
WEKAN_VERSION=3.96 \
WEKAN_ARCHITECTURE=arm64
@@ -40,7 +40,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v12.16.1 \
NODE_VERSION=v12.18.0 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v4.02.0"
appVersion: "v4.12.0"
files:
userUploads:
- README.md
+28 -28
View File
@@ -34,38 +34,38 @@ template(name="activity")
//- board activity ------------------------------------------------------
if($eq mode 'board')
if($eq activity.activityType 'createBoard')
| {{_ 'activity-created' boardLabel}}.
| {{{_ 'activity-created' boardLabelLink}}}.
if($eq activity.activityType 'importBoard')
| {{{_ 'activity-imported-board' boardLabel sourceLink}}}.
| {{{_ 'activity-imported-board' boardLabelLink sourceLink}}}.
if($eq activity.activityType 'addBoardMember')
| {{{_ 'activity-added' memberLink boardLabel}}}.
| {{{_ 'activity-added' memberLink boardLabelLink}}}.
if($eq activity.activityType 'removeBoardMember')
| {{{_ 'activity-excluded' memberLink boardLabel}}}.
| {{{_ 'activity-excluded' memberLink boardLabelLink}}}.
//- card activity -------------------------------------------------------
if($eq activity.activityType 'createCard')
if($eq mode 'card')
| {{{_ 'activity-added' cardLabel activity.listName}}}.
| {{{_ 'activity-added' cardLabelLink (sanitize activity.listName)}}}.
else
| {{{_ 'activity-added' cardLabel boardLabel}}}.
| {{{_ 'activity-added' cardLabelLink boardLabelLink}}}.
if($eq activity.activityType 'importCard')
| {{{_ 'activity-imported' cardLink boardLabel sourceLink}}}.
| {{{_ 'activity-imported' cardLink boardLabelLink sourceLink}}}.
if($eq activity.activityType 'moveCard')
| {{{_ 'activity-moved' cardLabel activity.oldList.title activity.list.title}}}.
| {{{_ 'activity-moved' cardLabelLink (sanitize activity.oldList.title) (sanitize activity.list.title)}}}.
if($eq activity.activityType 'moveCardBoard')
| {{{_ 'activity-moved' cardLink activity.oldBoardName activity.boardName}}}.
| {{{_ 'activity-moved' cardLink (sanitize activity.oldBoardName) (sanitize activity.boardName)}}}.
if($eq activity.activityType 'archivedCard')
| {{{_ 'activity-archived' cardLink}}}.
if($eq activity.activityType 'restoredCard')
| {{{_ 'activity-sent' cardLink boardLabel}}}.
| {{{_ 'activity-sent' cardLink boardLabelLink}}}.
//- checklist activity --------------------------------------------------
if($eq activity.activityType 'addChecklist')
@@ -83,25 +83,25 @@ template(name="activity")
| {{{_ 'activity-checklist-removed' cardLink}}}.
if($eq activity.activityType 'completeChecklist')
| {{{_ 'activity-checklist-completed' activity.checklist.title cardLink}}}.
| {{{_ 'activity-checklist-completed' (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'uncompleteChecklist')
| {{{_ 'activity-checklist-uncompleted' activity.checklist.title cardLink}}}.
| {{{_ 'activity-checklist-uncompleted' (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'checkedItem')
| {{{_ 'activity-checked-item' checkItem activity.checklist.title cardLink}}}.
| {{{_ 'activity-checked-item' (sanitize checkItem) (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'uncheckedItem')
| {{{_ 'activity-unchecked-item' checkItem activity.checklist.title cardLink}}}.
| {{{_ 'activity-unchecked-item' (sanitize checkItem) (sanitize activity.checklist.title) cardLink}}}.
if($eq activity.activityType 'addChecklistItem')
| {{{_ 'activity-checklist-item-added' activity.checklist.title cardLink}}}.
| {{{_ 'activity-checklist-item-added' (sanitize activity.checklist.title) cardLink}}}.
.activity-checklist(href="{{ activity.card.absoluteUrl }}")
+viewer
= activity.checklistItem.title
if($eq activity.activityType 'removedChecklistItem')
| {{{_ 'activity-checklist-item-removed' activity.checklist.title cardLink}}}.
| {{{_ 'activity-checklist-item-removed' (sanitize activity.checklist.title) cardLink}}}.
//- comment activity ----------------------------------------------------
if($eq mode 'card')
@@ -143,31 +143,31 @@ template(name="activity")
| {{_ 'activity-customfield-created' customField}}.
if($eq activity.activityType 'setCustomField')
| {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}.
| {{{_ 'activity-set-customfield' (sanitize lastCustomField) (sanitize lastCustomFieldValue) cardLink}}}.
if($eq activity.activityType 'unsetCustomField')
| {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}.
| {{{_ 'activity-unset-customfield' (sanitize lastCustomField) cardLink}}}.
//- label activity ------------------------------------------------------
if($eq activity.activityType 'addedLabel')
| {{{_ 'activity-added-label' lastLabel cardLink}}}.
| {{{_ 'activity-added-label' (sanitize lastLabel) cardLink}}}.
if($eq activity.activityType 'removedLabel')
| {{{_ 'activity-removed-label' lastLabel cardLink}}}.
| {{{_ 'activity-removed-label' (sanitize lastLabel) cardLink}}}.
//- list activity -------------------------------------------------------
if($neq mode 'card')
if($eq activity.activityType 'createList')
| {{{_ 'activity-added' listLabel boardLabel}}}.
| {{{_ 'activity-added' (sanitize listLabel) boardLabelLink}}}.
if($eq activity.activityType 'importList')
| {{{_ 'activity-imported' listLabel boardLabel sourceLink}}}.
| {{{_ 'activity-imported' (sanitize listLabel) boardLabelLink sourceLink}}}.
if($eq activity.activityType 'removeList')
| {{{_ 'activity-removed' activity.title boardLabel}}}.
| {{{_ 'activity-removed' (sanitize activity.title) boardLabelLink}}}.
if($eq activity.activityType 'archivedList')
| {{_ 'activity-archived' listLabel}}.
| {{_ 'activity-archived' (sanitize listLabel)}}.
//- member activity ----------------------------------------------------
if($eq activity.activityType 'joinMember')
@@ -185,15 +185,15 @@ template(name="activity")
//- swimlane activity --------------------------------------------------
if($neq mode 'card')
if($eq activity.activityType 'createSwimlane')
| {{{_ 'activity-added' activity.swimlane.title boardLabel}}}.
| {{_ 'activity-added' (sanitize activity.swimlane.title) boardLabelLink}}.
if($eq activity.activityType 'archivedSwimlane')
| {{_ 'activity-archived' activity.swimlane.title}}.
| {{_ 'activity-archived' (sanitize activity.swimlane.title)}}.
//- I don't understand this part ----------------------------------------
if(currentData.timeKey)
| {{{_ activity.activityType }}}
| {{_ activity.activityType }}
= ' '
i(title=currentData.timeValue).activity-meta {{ moment currentData.timeValue 'LLL' }}
if (currentData.timeOldValue)
@@ -203,6 +203,6 @@ template(name="activity")
i(title=currentData.timeOldValue).activity-meta {{ moment currentData.timeOldValue 'LLL' }}
= ' @'
else if(currentData.timeValue)
| {{{_ activity.activityType currentData.timeValue}}}
| {{_ activity.activityType currentData.timeValue}}
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
+18 -9
View File
@@ -1,3 +1,5 @@
import sanitizeXss from 'xss';
const activitiesPerPage = 20;
BlazeComponent.extendComponent({
@@ -57,7 +59,7 @@ BlazeComponent.extendComponent({
return checkItem && checkItem.title;
},
boardLabel() {
boardLabelLink() {
const data = this.currentData();
if (data.mode !== 'board') {
return createBoardLink(data.activity.board(), data.activity.listName);
@@ -65,10 +67,10 @@ BlazeComponent.extendComponent({
return TAPi18n.__('this-board');
},
cardLabel() {
cardLabelLink() {
const data = this.currentData();
if (data.mode !== 'card') {
return createCardLink(this.currentData().activity.card());
return createCardLink(data.activity.card());
}
return TAPi18n.__('this-card');
},
@@ -134,11 +136,11 @@ BlazeComponent.extendComponent({
{
href: source.url,
},
source.system,
sanitizeXss(source.system),
),
);
} else {
return source.system;
return sanitizeXss(source.system);
}
}
return null;
@@ -162,10 +164,10 @@ BlazeComponent.extendComponent({
href: attachment.url({ download: true }),
target: '_blank',
},
attachment.name(),
sanitizeXss(attachment.name()),
),
)) ||
this.currentData().activity.attachmentName
sanitizeXss(this.currentData().activity.attachmentName)
);
},
@@ -202,7 +204,14 @@ BlazeComponent.extendComponent({
},
}).register('activity');
Template.activity.helpers({
sanitize(value) {
return sanitizeXss(value);
},
});
function createCardLink(card) {
if (!card) return '';
return (
card &&
Blaze.toHTML(
@@ -211,7 +220,7 @@ function createCardLink(card) {
href: card.absoluteUrl(),
class: 'action-card',
},
card.title,
sanitizeXss(card.title),
),
)
);
@@ -228,7 +237,7 @@ function createBoardLink(board, list) {
href: board.absoluteUrl(),
class: 'action-board',
},
text,
sanitizeXss(text),
),
)
);
+1 -1
View File
@@ -323,7 +323,7 @@ BlazeComponent.extendComponent({
header: {
left: 'title today prev,next',
center:
'agendaDay,listDay,timelineDay agendaWeek,listWeek,timelineWeek month,timelineMonth timelineYear',
'agendaDay,listDay,timelineDay agendaWeek,listWeek,timelineWeek month,listMonth',
right: '',
},
// height: 'parent', nope, doesn't work as the parent might be small
+446
View File
@@ -293,3 +293,449 @@ setBoardColor(color)
//.header-quick-access
// backgroud-color: #568ba2
/*
Alternate "Clear" Styling
*/
setBoardClear(color1,color2)
//color1: The quick access color
//color2: The main bar color
&.sk-spinner div,
.board-backgrounds-list &.background-box,
.board-list & a
background: linear-gradient(180deg, color1 0%, color2 100%)
//background: linear-gradient(180deg, rgb(73, 155, 234) 0%, rgb(0, 174, 204) 100%)
.is-selected .minicard
border-left: 3px solid color1
&.pop-over .pop-over-list li a:not(.disabled):hover,
.sidebar .sidebar-content .sidebar-btn:hover,
.sidebar-list li a:hover
background-color: lighten(color1, 10%)
&#header ul li.current, &#header-quick-access ul li.current
border-bottom: 4px solid lighten(color2, 10%)
&#header-quick-access
background: darken(color1, 10%)
//background: rgba(66,137,204,1)
color: #FFF
&#header-quick-access #header-new-board-icon,
&#header-quick-access #header-user-bar,
&#header-quick-access ul li
color: rgba(255,255,255,0.5)
// The background-color value here is not seen,
// its covered by the background of #header-main-bar
// it's just to aid transitions between boards
&#header
background-color: color2
border-bottom: 1px solid darken(color2, 20%)
border-top: 1px solid darken(color2, 40%)
// Since the theme uses a gradient for the header
// and gradients break transitions, it has to be set here
&#header #header-main-bar
background: linear-gradient(180deg, color1 0%, color2 100%)
&#header #header-main-bar p
margin-bottom: 6px
&#header #header-main-bar .board-header-btn.emphasis
background: lighten(color2, 10%)
&:hover,
.board-header-btn-close
background: rgba(0,0,0,0.2)
&:hover .board-header-btn-close
background: rgba(0,0,0,0.2)
.materialCheckBox.is-checked
border-bottom: 2px solid color1
border-right: 2px solid color1
.is-multiselection-active .multi-selection-checkbox
&.is-checked + .minicard
background: lighten(color2, 90%)
&:not(.is-checked) + .minicard:hover:not(.minicard-composer)
background: lighten(color2, 97%)
.toggle-switch:checked ~ .toggle-label
background-color: lighten(color1, 20%)
&:after
background-color: darken(color1, 20%)
.board-canvas
background: linear-gradient(135deg, color1 0%, color2 100%)
.swimlane
background: none
.list:first-child
margin-left: 15px
.list
background: rgba(255,255,255,0.35)
margin: 10px
border: 0
border-radius: 14px
.list.list-composer
background: rgba(255,255,255,0.1)
height: min-content
flex: unset
width: 270px
padding-bottom: 16px
.list.list-composer .open-list-composer
border-radius: 7px
color: rgba(0,0,0,0.3)
padding: 7px 10px
display: block
.list.list-composer .open-list-composer:hover
box-shadow: 0 1px 2px rgba(0,0,0,.2)
background: rgba(255,255,255,0.7)
color: rgba(0,0,0,0.6)
.list-header
background-color: rgba(255,255,255,0.25)
border-radius: 14px 14px 0 0
.list-header:not([class*="list-header-"])
border-bottom: 6px solid rgba(255,255,255,0)
.list-header .list-header-name
color: rgba(0,0,0,0.6)
.list-body
padding: 11px
.minicard
border-radius: 7px
padding: 10px 10px 4px 10px
box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.15)
color: #222
.card-details
border-radius: 0 0 14px 14px
box-shadow: 0 0 7px 0 rgba(0,0,0,0.5)
margin-left: -10px
.list-body .open-minicard-composer
border-radius: 7px
color: rgba(0,0,0,.3)
margin-bottom: 11px
.list-body .open-minicard-composer:hover
background: rgba(255,255,255,0.7)
color: rgba(0,0,0,0.6)
button[type=submit].primary, input[type=submit].primary
box-shadow: none
background-color: rgba(255,255,255,0.5)
color: rgba(0,0,0,0.55)
border-radius: 7px
border: 0
button[type="submit"].primary:hover, input[type="submit"].primary:hover
background-color: rgba(255,255,255,0.7)
color: rgba(0,0,0,0.8)
box-shadow: 0 1px 2px rgba(0,0,0,.2)
.quiet, .quiet a
color: rgba(0,0,0,0.4)
.list-header .list-header-watch-icon
color: rgba(0,0,0,0.5)
position: absolute
margin-top: -34px
margin-let: -11px
a.fa, a i.fa
color: rgba(0,0,0,0.3)
a:not(.disabled).is-active.fa, a:not(.disabled).is-active i.fa, a:not(.disabled):hover.fa, a:not(.disabled):hover i.fa
color: rgba(0,0,0,0.6)
input[type="email"], input[type="password"], input[type="text"]
border: 0
border-radius: 7px
.sidebar-shadow
box-shadow: none
border-left: 9px solid color2
.is-open .sidebar-shadow
box-shadow: -10px 0 8px rgba(0,0,0,0.3)
.list.ui-sortable-helper
transform:rotate(0deg)
.minicard-wrapper.placeholder
background: rgba(0,0,0,0.1)
.minicard-wrapper.ui-sortable-helper
transform:rotate(0deg)
opacity: 0.8
.list-body .open-minicard-composer
color: rgba(0,0,0,.3)
.swinlane.ui-sortable-helper
transform:rotate(0deg)
.swimlane .swimlane-header-wrap
background: linear-gradient(0deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0.25) 100%)
.swimlane-header-wrap .inlined-form
width: 100%
.swimlane-header-wrap .list-composer
text-align: center
margin: 5px
.swimlane-header-wrap .list-name-input.full-line
margin: 0
display: inline-block
width: 270px
.swimlane-header-wrap .edit-controls
display: inline-block
vertical-align: middle
.swimlane-header-wrap .primary.confirm
margin-right: 0
.swimlane-header-wrap .fa.fa-times-thin
margin-top: 2px
// This is a general fix so that the little grabby hand appears when dragging the list via the title
.list.ui-sortable-helper,
.list.ui-sortable-helper .list-header.ui-sortable-handle,
.list.ui-sortable-helper .viewer
cursor:-webkit-grabbing;
cursor:grabbing
.board-color-clearblue
setBoardClear(rgb(73, 155, 234),rgb(0, 174, 204))
/*
Alternate "Natural" Styling
*/
.board-color-natural
setBoardColor(#596557)
&#header-quick-access
background-color: #2d392b
.ui-sortable
background-color:#dedede
.list-header
background-color: #c9cfc3
border-bottom: 6px solid #c9cfc3
.swimlane .swimlane-header-wrap
background-color: #c2c0ab
/*
Alternate "Modern" Styling
*/
.board-color-modern
setBoardColor(#2A80B8)
/* General */
body
background: #f5f5f5
&#header-quick-access
padding: 10px
font-size: 14px
background: #333 !important
&#header-quick-access ul
overflow: visible
&#header-quick-access ul li.current
border: 0 !important
font-weight: bold
&#header-quick-access ul li.separator
display: none
&#header-quick-access ul li:nth-child(3)
margin-right: 10px
&#header-quick-access ul li a
padding: 5px 10px
border-radius: 2px
&#header-quick-access ul li.current a
border-radius: 2px
background: rgba(255,255,255,.2)
&#header #header-main-bar h1
font-family: Poppins
font-weight: bold
&#header-quick-access #header-user-bar
position relative
&#header-quick-access #header-user-bar .header-user-bar-name
margin: 5px 3px 0 0;
section#notifications-drawer
top: 46px;
box-shadow: 0 4px 20px rgba(0,0,0,.1)
max-width: 100%
section#notifications-drawer .header
top: 46px;
border-radius: 0 3px
height: 21px
background: #f7f7f7
/* Swimlane */
.swimlane
background: #f5f5f5
.swimlane .swimlane-header-wrap .swimlane-header
font-family: Poppins
/* All board views */
.board-list .board-list-item
padding: 20px
.board-list-item-name
font-family: Poppins
/* Board */
.list
background: transparent
border-left: 0
margin: 10px 0
padding: 0px
border-radius: 5px
min-width: 300px
.list-body .open-minicard-composer:hover /*me*/
background: none
box-shadow: none
.list:first-child
margin-left: 5px
.list.list-composer.js-list-composer
transition: all .3s ease
min-width: 80px
.open-list-composer.js-open-inlined-form:hover
color: #222
.list-header
background: none
border-bottom-width: 0px
.list-header .list-header-name
font-family: Poppins
color: #000
font-weight: 500
/* Card changes */
.minicard
background: #FFF
padding: 15px 15px 10px
box-shadow: 0 3px 8px rgba(0,0,0,.05)
.minicard-plum:hover:not(.minicard-composer), .is-selected .minicard-plum, .draggable-hover-card .minicard-plum
background: none
.minicard-title
line-height: 1.5em
.minicard .minicard-cover
background-size: cover
margin: -15px -15px 10px
height: 100px
.card-label-orange
color: #fff
.card-date
font-size: 12px
padding: 3px 5px
/* Pop over */
.header-title
font-family: Poppins
font-size: 16px
color: #333
.pop-over
box-shadow: 0 4px 20px rgba(0,0,0,.2)
border: 0
border-radius: 5px
.pop-over .header
padding: 10px
border-bottom: 0
border-radius: 5px 5px 0 0
background:#eee
.pop-over .header .header-title
font-family: Poppins
font-size:16px
color:#333
.pop-over .header .close-btn
font-size:20px
top:6px
right:8px
.pop-over .content-container .content
padding: 5px 20px 20px
width: 260px
.pop-over-list li > a
border-radius: 5px
.pop-over-list li > a > i
margin-right: 5px
.pop-over-list li>a .sub-name
margin-bottom: 8px
/* Sidebar */
.sidebar .sidebar-shadow
box-shadow: 0 0 60px rgba(0,0,0,.2)
.sidebar .sidebar-content
padding: 30px
/* Notifications */
.board-color-modern section#notifications-drawer
border-radius:5px
.board-color-modern section#notifications-drawer .header
padding: 18px 16px
border-bottom: 0
border-radius: 5px 5px 0 0
background: #eee
.board-color-modern section#notifications-drawer .header h5
font-family: Poppins
font-weight: bold
.board-color-modern section#notifications-drawer .header .close
font-size: 20px
top: 14px
section#notifications-drawer .header .toggle-read
top: 18px
+10 -10
View File
@@ -99,13 +99,13 @@ template(name="boardHeaderBar")
a.board-header-btn.js-toggle-board-view(
title="{{_ 'board-view'}}")
i.fa.fa-caret-down
if $eq boardView 'board-view-lists'
i.fa.fa-trello
if $eq boardView 'board-view-swimlanes'
i.fa.fa-th-large
if $eq boardView 'board-view-lists'
i.fa.fa-trello
if $eq boardView 'board-view-cal'
i.fa.fa-calendar
span {{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-lists'}}{{/if}}
span {{#if boardView}}{{_ boardView}}{{else}}{{_ 'board-view-swimlanes'}}{{/if}}
if canModifyBoard
a.board-header-btn.js-multiselection-activate(
@@ -172,13 +172,6 @@ template(name="boardChangeWatchPopup")
template(name="boardChangeViewPopup")
ul.pop-over-list
li
with "board-view-lists"
a.js-open-lists-view
i.fa.fa-trello.colorful
| {{_ 'board-view-lists'}}
if $eq Utils.boardView "board-view-lists"
i.fa.fa-check
li
with "board-view-swimlanes"
a.js-open-swimlanes-view
@@ -186,6 +179,13 @@ template(name="boardChangeViewPopup")
| {{_ 'board-view-swimlanes'}}
if $eq Utils.boardView "board-view-swimlanes"
i.fa.fa-check
li
with "board-view-lists"
a.js-open-lists-view
i.fa.fa-trello.colorful
| {{_ 'board-view-lists'}}
if $eq Utils.boardView "board-view-lists"
i.fa.fa-check
li
with "board-view-cal"
a.js-open-cal-view
+4
View File
@@ -31,6 +31,10 @@ template(name="boardList")
i.fa.js-has-spenttime-cards(
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
if isMiniScreen
i.fa.board-handle(
class="fa-arrows"
title="{{_ 'Drag board'}}")
unless isMiniScreen
if isSandstorm
i.fa.js-clone-board(
+6
View File
@@ -72,6 +72,12 @@ BlazeComponent.extendComponent({
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
if (Utils.isMiniScreen()) {
$boards.sortable({
handle: '.board-handle',
});
}
$boards.sortable('option', 'disabled', !userIsAllowedToMove());
});
},
+16
View File
@@ -208,6 +208,22 @@ $spaceBetweenTiles = 16px
top: -100px
left: -100px
.board-handle
position: absolute
padding: 7px
top: 50%
transform: translateY(-50%)
right: 10px
font-size: 24px
@media screen and (max-width: 360px)
li
width: 100%
.board-handle
position: absolute
padding: 7px
top: 50%
transform: translateY(-50%)
right: 10px
font-size: 24px
@@ -53,6 +53,23 @@ template(name="cardCustomField-number")
if value
= value
template(name="cardCustomField-currency")
if canModifyCard
+inlinedForm(classNames="js-card-customfield-currency")
input(type="text" value=data.value)
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if value
= formattedValue
else
| {{_ 'edit'}}
else
if value
= formattedValue
template(name="cardCustomField-date")
if canModifyCard
a.js-edit-date(title="{{showTitle}}" class="{{classes}}")
@@ -80,6 +80,36 @@ CardCustomField.register('cardCustomField');
}
}.register('cardCustomField-number'));
// cardCustomField-currency
(class extends CardCustomField {
onCreated() {
super.onCreated();
this.currencyCode = this.data().definition.settings.currencyCode;
}
formattedValue() {
const locale = TAPi18n.getLanguage();
return new Intl.NumberFormat(locale, {
style: 'currency',
currency: this.currencyCode,
}).format(this.data().value);
}
events() {
return [
{
'submit .js-card-customfield-currency'(event) {
event.preventDefault();
const value = Number(this.find('input').value, 10);
this.card.setCustomField(this.customFieldId, value);
},
},
];
}
}.register('cardCustomField-currency'));
// cardCustomField-date
(class extends CardCustomField {
onCreated() {
+8 -1
View File
@@ -74,11 +74,18 @@ BlazeComponent.extendComponent({
scrollParentContainer() {
const cardPanelWidth = 510;
const bodyBoardComponent = this.parentComponent().parentComponent();
const parentComponent = this.parentComponent();
// TODO sometimes parentComponent is not available, maybe because it's not
// yet created?!
if (!parentComponent) return;
const bodyBoardComponent = parentComponent.parentComponent();
//On Mobile View Parent is Board, Not Board Body. I cant see how this funciton should work then.
if (bodyBoardComponent === null) return;
const $cardView = this.$(this.firstNode());
const $cardContainer = bodyBoardComponent.$('.js-swimlanes');
// TODO sometimes cardContainer is not available, maybe because it's not yet
// created?!
if (!$cardContainer) return;
const cardContainerScroll = $cardContainer.scrollLeft();
const cardContainerWidth = $cardContainer.width();
+6 -2
View File
@@ -74,8 +74,12 @@ template(name="minicard")
+viewer
= definition.name
.minicard-custom-field-item
+viewer
= trueValue
if $eq definition.type "currency"
+viewer
= formattedCurrencyCustomFieldValue(definition)
else
+viewer
= trueValue
if getAssignees
.minicard-assignees.js-minicard-assignees
+14
View File
@@ -9,6 +9,20 @@ BlazeComponent.extendComponent({
return 'minicard';
},
formattedCurrencyCustomFieldValue(definition) {
const customField = this.data()
.customFieldsWD()
.find(f => f._id === definition._id);
const customFieldTrueValue =
customField && customField.trueValue ? customField.trueValue : '';
const locale = TAPi18n.getLanguage();
return new Intl.NumberFormat(locale, {
style: 'currency',
currency: definition.settings.currencyCode,
}).format(customFieldTrueValue);
},
events() {
return [
{
+14 -10
View File
@@ -74,18 +74,16 @@ BlazeComponent.extendComponent({
const sortIndex = calculateIndex(prevCardDom, nextCardDom, nCards);
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
const currentBoard = Boards.findOne(Session.get('currentBoard'));
let swimlaneId = '';
const defaultSwimlaneId = currentBoard.getDefaultSwimline()._id;
let targetSwimlaneId = null;
// only set a new swimelane ID if the swimlanes view is active
if (
Utils.boardView() === 'board-view-swimlanes' ||
currentBoard.isTemplatesBoard()
)
swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
else if (
Utils.boardView() === 'board-view-lists' ||
Utils.boardView() === 'board-view-cal' ||
!Utils.boardView
)
swimlaneId = currentBoard.getDefaultSwimline()._id;
targetSwimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))
._id;
// Normally the jquery-ui sortable library moves the dragged DOM element
// to its new position, which disrupts Blaze reactive updates mechanism
@@ -98,9 +96,12 @@ BlazeComponent.extendComponent({
if (MultiSelection.isActive()) {
Cards.find(MultiSelection.getMongoSelector()).forEach((card, i) => {
const newSwimlaneId = targetSwimlaneId
? targetSwimlaneId
: card.swimlaneId || defaultSwimlaneId;
card.move(
currentBoard._id,
swimlaneId,
newSwimlaneId,
listId,
sortIndex.base + i * sortIndex.increment,
);
@@ -108,7 +109,10 @@ BlazeComponent.extendComponent({
} else {
const cardDomElement = ui.item.get(0);
const card = Blaze.getData(cardDomElement);
card.move(currentBoard._id, swimlaneId, listId, sortIndex.base);
const newSwimlaneId = targetSwimlaneId
? targetSwimlaneId
: card.swimlaneId || defaultSwimlaneId;
card.move(currentBoard._id, newSwimlaneId, listId, sortIndex.base);
}
boardComponent.setIsDragging(false);
},
+24
View File
@@ -15,3 +15,27 @@
local('Roboto-Bold'),
url('/fonts/roboto-bold.woff2') format('woff2'),
url('/fonts/roboto-bold.woff') format('woff')
@font-face
font-family: 'Poppins'
font-style: normal
font-weight: 400
src: local('Poppins'),
local('Poppins-Regular'),
url('/fonts/poppins-regular.woff') format('woff')
@font-face
font-family: 'Poppins'
font-style: normal
font-weight: 500
src: local('Poppins Medium'),
local('Poppins-Medium'),
url('/fonts/poppins-medium.woff') format('woff')
@font-face
font-family: 'Poppins'
font-style: normal
font-weight: 700
src: local('Poppins Bold'),
local('Poppins-Bold'),
url('/fonts/poppins-bold.woff') format('woff')
+1 -1
View File
@@ -32,7 +32,7 @@ a:hover,a:focus
border-radius: unset
html, body, input, select, textarea, button
font: 14px Roboto, "Helvetica Neue", Arial, Helvetica, sans-serif
font: 14px Roboto, Poppins, "Helvetica Neue", Arial, Helvetica, sans-serif
line-height: 18px
color: #4d4d4d
@@ -68,8 +68,8 @@ BlazeComponent.extendComponent({
const ruleName = this.data().ruleName.get();
const trigger = this.data().triggerVar.get();
const actionSelected = this.find('#move-spec-action').value;
const swimlaneName = this.find('#swimlaneName').value;
const listName = this.find('#listName').value;
const swimlaneName = this.find('#swimlaneName').value || '*';
const listName = this.find('#listName').value || '*';
const boardId = Session.get('currentBoard');
const destBoardId = this.find('#board-id').value;
const desc = Utils.getTriggerActionDesc(event, this);
@@ -75,7 +75,7 @@ template(name="cardActions")
button.trigger-button.trigger-button-color.js-show-color-palette(
id="color-action"
class="card-details-{{cardColorButton}}")
| {{{_ cardColorButtonText }}}
| {{_ cardColorButtonText }}
div.trigger-button.js-set-color-action.js-goto-rules
i.fa.fa-plus
@@ -164,6 +164,7 @@ BlazeComponent.extendComponent({
const boardId = Session.get('currentBoard');
const actionId = Actions.insert({
actionType: 'removeMember',
// deepcode ignore NoHardcodedCredentials: it's no credential
username: '*',
boardId,
desc,
+9 -7
View File
@@ -329,12 +329,10 @@ template(name="boardMenuPopup")
if isSandstorm
hr
ul.pop-over-list
if withApi
li
a(href="{{exportUrl}}", download="{{exportFilename}}")
i.fa.fa-share-alt
i.fa.fa-sign-out
| {{_ 'export-board'}}
li
a.js-export-board
i.fa.fa-share-alt
| {{_ 'export-board'}}
li
a.js-import-board
i.fa.fa-share-alt
@@ -365,7 +363,7 @@ template(name="boardMenuPopup")
template(name="exportBoard")
ul.pop-over-list
li
a(href="{{exportUrl}}", download="{{exportJsonFilename}}")
a.download-json-link(href="{{exportUrl}}", download="{{exportJsonFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-json'}}
li
@@ -376,6 +374,10 @@ template(name="exportBoard")
a(href="{{exportTsvUrl}}", download="{{exportTsvFilename}}")
i.fa.fa-share-alt
| {{_ 'export-board-tsv'}}
li
a.html-export-board
i.fa.fa-archive
| {{_ 'export-board-html'}}
template(name="labelsWidget")
.board-widget.board-widget-labels
+7
View File
@@ -463,6 +463,13 @@ BlazeComponent.extendComponent({
},
}).register('exportBoardPopup');
Template.exportBoard.events({
'click .html-export-board': async event => {
event.preventDefault();
await ExportHtml(Popup)();
},
});
Template.labelsWidget.events({
'click .js-label': Popup.open('editLabel'),
'click .js-add-label': Popup.open('createLabel'),
@@ -33,6 +33,17 @@ template(name="createCustomFieldPopup")
option(value=value selected="selected") {{name}}
else
option(value=value) {{name}}
div.js-field-settings.js-field-settings-currency(class="{{#if isTypeNotSelected 'currency'}}hide{{/if}}")
label
| {{_ 'custom-field-currency-option'}}
select.js-field-currency
each getCurrencyCodes
if selected
option(value=value selected="selected") {{name}}
else
option(value=value) {{name}}
div.js-field-settings.js-field-settings-dropdown(class="{{#if isTypeNotSelected 'dropdown'}}hide{{/if}}")
label
| {{_ 'custom-field-dropdown-options'}}
@@ -16,12 +16,62 @@ BlazeComponent.extendComponent({
}).register('customFieldsSidebar');
const CreateCustomFieldPopup = BlazeComponent.extendComponent({
_types: ['text', 'number', 'date', 'dropdown'],
_types: ['text', 'number', 'date', 'dropdown', 'currency'],
_currencyList: [
{
name: 'US Dollar',
code: 'USD',
},
{
name: 'Euro',
code: 'EUR',
},
{
name: 'Yen',
code: 'JPY',
},
{
name: 'Pound Sterling',
code: 'GBP',
},
{
name: 'Australian Dollar',
code: 'AUD',
},
{
name: 'Canadian Dollar',
code: 'CAD',
},
{
name: 'Swiss Franc',
code: 'CHF',
},
{
name: 'Yuan Renminbi',
code: 'CNY',
},
{
name: 'Hong Kong Dollar',
code: 'HKD',
},
{
name: 'New Zealand Dollar',
code: 'NZD',
},
],
onCreated() {
this.type = new ReactiveVar(
this.data().type ? this.data().type : this._types[0],
);
this.currencyCode = new ReactiveVar(
this.data().settings && this.data().settings.currencyCode
? this.data().settings.currencyCode
: this._currencyList[0].code,
);
this.dropdownItems = new ReactiveVar(
this.data().settings && this.data().settings.dropdownItems
? this.data().settings.dropdownItems
@@ -44,6 +94,18 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
return this.type.get() !== type;
},
getCurrencyCodes() {
const currentCode = this.currencyCode.get();
return this._currencyList.map(({ name, code }) => {
return {
name: `${code} - ${name}`,
value: code,
selected: code === currentCode,
};
});
},
getDropdownItems() {
const items = this.dropdownItems.get();
Array.from(this.findAll('.js-field-settings-dropdown input')).forEach(
@@ -62,6 +124,11 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
getSettings() {
const settings = {};
switch (this.type.get()) {
case 'currency': {
const currencyCode = this.currencyCode.get();
settings.currencyCode = currencyCode;
break;
}
case 'dropdown': {
const dropdownItems = this.getDropdownItems().filter(
item => !!item.name.trim(),
@@ -80,6 +147,10 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
const value = evt.target.value;
this.type.set(value);
},
'change .js-field-currency'(evt) {
const value = evt.target.value;
this.currencyCode.set(value);
},
'keydown .js-dropdown-item.last'(evt) {
if (evt.target.value.trim() && evt.keyCode === 13) {
const items = this.getDropdownItems();
+3 -2
View File
@@ -157,8 +157,9 @@ Template.disambiguateMultiMemberPopup.events({
});
Template.moveSelectionPopup.events({
'click .js-select-list'() {
mutateSelectedCards('move', this._id);
'click .js-select-list'(event) {
// Move the minicard to the end of the target list
mutateSelectedCards('moveToEndOfList', { listId: this._id });
EscapeActions.executeUpTo('multiselection');
},
});
@@ -11,7 +11,8 @@ template(name="swimlaneHeader")
template(name="swimlaneFixedHeader")
.swimlane-header(
class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
= title
+viewer
= title
.swimlane-header-menu
unless currentUser.isCommentOnly
a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
+1 -1
View File
@@ -2,7 +2,7 @@ template(name="swimlane")
.swimlane
+swimlaneHeader
unless collapseSwimlane
.swimlane.js-lists.js-swimlane
.swimlane.js-lists.js-swimlane(id="swimlane-{{_id}}")
if isMiniScreen
if currentListIsInThisSwimlane _id
+list(currentList)
+10 -2
View File
@@ -23,8 +23,16 @@ function currentCardIsInThisList(listId, swimlaneId) {
currentCard.listId === listId &&
currentCard.swimlaneId === swimlaneId
);
// Default view: board-view-lists
else return currentCard && currentCard.listId === listId;
// OLD: Default view: board-view-lists
////else return currentCard && currentCard.listId === listId;
// NEW: Default view: board-view-swimlanes
else
return (
currentCard &&
currentCard.listId === listId &&
currentCard.swimlaneId === swimlaneId
);
// https://github.com/wekan/wekan/issues/1623
// https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de
// TODO: In public board, if you would like to switch between List/Swimlane view, you could
+2 -2
View File
@@ -39,8 +39,8 @@
};
return this.each(function() {
const element = this;
$(element).bind('dragenter dragover dragleave', stopFn);
return $(element).bind('drop', function(event) {
$(element).on('dragenter dragover dragleave', stopFn);
return $(element).on('drop', function(event) {
stopFn(event);
const files = event.dataTransfer.files;
for (let i = 0; i < files.length; i++) {
+213
View File
@@ -0,0 +1,213 @@
const JSZip = require('jszip');
window.ExportHtml = Popup => {
const saveAs = function(blob, filename) {
const dl = document.createElement('a');
dl.href = window.URL.createObjectURL(blob);
dl.onclick = event => document.body.removeChild(event.target);
dl.style.display = 'none';
dl.target = '_blank';
dl.download = filename;
document.body.appendChild(dl);
dl.click();
};
const asyncForEach = async function(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
};
const getPageHtmlString = () => {
return `<!doctype html>${window.document.querySelector('html').outerHTML}`;
};
const removeAnchors = htmlString => {
const replaceOpenAnchor = htmlString.replace(
new RegExp('<a ', 'gim'),
'<span ',
);
return replaceOpenAnchor.replace(new RegExp('</a', 'gim'), '</span');
};
const ensureSidebarRemoved = () => {
document.querySelector('.board-sidebar.sidebar').remove();
};
const addJsonExportToZip = async (zip, boardSlug) => {
const downloadJSONLink = document.querySelector('.download-json-link');
const downloadJSONURL = downloadJSONLink.href;
const response = await fetch(downloadJSONURL);
const responseBody = await response.text();
zip.file(`data/${boardSlug}.json`, responseBody);
};
const closeSidebar = () => {
document.querySelector('.board-header-btn.js-toggle-sidebar').click();
};
const cleanBoardHtml = () => {
Array.from(document.querySelectorAll('script')).forEach(elem =>
elem.remove(),
);
Array.from(
document.querySelectorAll('link:not([rel="stylesheet"])'),
).forEach(elem => elem.remove());
document.querySelector('#header-quick-access').remove();
Array.from(
document.querySelectorAll('#header-main-bar .board-header-btns'),
).forEach(elem => elem.remove());
Array.from(document.querySelectorAll('.list-composer')).forEach(elem =>
elem.remove(),
);
Array.from(
document.querySelectorAll(
'.list-composer,.js-card-composer, .js-add-card',
),
).forEach(elem => elem.remove());
Array.from(
document.querySelectorAll('.js-perfect-scrollbar > div:nth-of-type(n+2)'),
).forEach(elem => elem.remove());
Array.from(document.querySelectorAll('.js-perfect-scrollbar')).forEach(
elem => {
elem.style = 'overflow-y: auto !important;';
elem.classList.remove('js-perfect-scrollbar');
},
);
Array.from(document.querySelectorAll('[href]:not(link)')).forEach(elem =>
elem.attributes.removeNamedItem('href'),
);
Array.from(document.querySelectorAll('[href]')).forEach(elem => {
// eslint-disable-next-line no-self-assign
elem.href = elem.href;
// eslint-disable-next-line no-self-assign
elem.src = elem.src;
});
Array.from(document.querySelectorAll('.is-editable')).forEach(elem => {
elem.classList.remove('is-editable');
});
};
const getBoardSlug = () => {
return window.location.href.split('/').pop();
};
const getStylesheetList = () => {
return Array.from(
document.querySelectorAll('link[href][rel="stylesheet"]'),
);
};
const downloadStylesheets = async (stylesheets, zip) => {
await asyncForEach(stylesheets, async elem => {
const response = await fetch(elem.href);
const responseBody = await response.text();
const finalResponse = responseBody.replace(
new RegExp('packages/[^/]+/upstream/', 'gim'),
'../',
);
const filename = elem.href
.split('/')
.pop()
.split('?')
.shift();
const fileFullPath = `style/${filename}`;
zip.file(fileFullPath, finalResponse);
elem.href = `../${fileFullPath}`;
});
};
const getSrcAttached = () => {
return Array.from(document.querySelectorAll('[src]'));
};
const downloadSrcAttached = async (elements, zip, boardSlug) => {
await asyncForEach(elements, async elem => {
const response = await fetch(elem.src);
const responseBody = await response.blob();
const filename = elem.src
.split('/')
.pop()
.split('?')
.shift();
const fileFullPath = `${boardSlug}/${elem.tagName.toLowerCase()}/${filename}`;
zip.file(fileFullPath, responseBody);
elem.src = `./${elem.tagName.toLowerCase()}/${filename}`;
});
};
const removeCssUrlSurround = url => {
const working = url || '';
return working
.split('url(')
.join('')
.split('")')
.join('')
.split('"')
.join('')
.split("')")
.join('')
.split("'")
.join('')
.split(')')
.join('');
};
const getCardCovers = () => {
return Array.from(document.querySelectorAll('.minicard-cover')).filter(
elem => elem.style['background-image'],
);
};
const downloadCardCovers = async (elements, zip, boardSlug) => {
await asyncForEach(elements, async elem => {
const response = await fetch(
removeCssUrlSurround(elem.style['background-image']),
);
const responseBody = await response.blob();
const filename = removeCssUrlSurround(elem.style['background-image'])
.split('/')
.pop()
.split('?')
.shift()
.split('#')
.shift();
const fileFullPath = `${boardSlug}/covers/${filename}`;
zip.file(fileFullPath, responseBody);
elem.style = "background-image: url('" + `covers/${filename}` + "')";
});
};
const addBoardHTMLToZip = (boardSlug, zip) => {
ensureSidebarRemoved();
const htmlOutputPath = `${boardSlug}/index.html`;
zip.file(
htmlOutputPath,
new Blob([removeAnchors(getPageHtmlString())], {
type: 'application/html',
}),
);
};
return async () => {
const zip = new JSZip();
const boardSlug = getBoardSlug();
await addJsonExportToZip(zip, boardSlug);
Popup.close();
closeSidebar();
cleanBoardHtml();
await downloadStylesheets(getStylesheetList(), zip);
await downloadSrcAttached(getSrcAttached(), zip, boardSlug);
await downloadCardCovers(getCardCovers(), zip, boardSlug);
addBoardHTMLToZip(boardSlug, zip);
const content = await zip.generateAsync({ type: 'blob' });
saveAs(content, `${boardSlug}.zip`);
window.location.reload();
};
};
+1 -1
View File
@@ -35,7 +35,7 @@
options = $.extend({}, defaults, options);
return this.each(function() {
const element = this;
return $(element).bind('paste', function(event) {
return $(element).on('paste', function(event) {
const types = event.clipboardData.types;
const items = event.clipboardData.items;
for (let i = 0; i < types.length; i++) {
+1 -1
View File
@@ -49,7 +49,7 @@ window.Popup = new (class {
// has one. This allows us to position a sub-popup exactly at the same
// position than its parent.
let openerElement;
if (clickFromPopup(evt)) {
if (clickFromPopup(evt) && self._getTopStack()) {
openerElement = self._getTopStack().openerElement;
} else {
self._stack = [];
+13 -5
View File
@@ -6,12 +6,18 @@ Utils = {
currentUser = Meteor.user();
if (currentUser) {
Meteor.user().setBoardView(view);
} else if (view === 'board-view-lists') {
cookies.set('boardView', 'board-view-lists'); //true
} else if (view === 'board-view-swimlanes') {
cookies.set('boardView', 'board-view-swimlanes'); //true
location.reload();
} else if (view === 'board-view-lists') {
cookies.set('boardView', 'board-view-lists'); //true
location.reload();
} else if (view === 'board-view-cal') {
cookies.set('boardView', 'board-view-cal'); //true
location.reload();
} else {
cookies.set('boardView', 'board-view-swimlanes'); //true
location.reload();
}
},
@@ -24,14 +30,16 @@ Utils = {
currentUser = Meteor.user();
if (currentUser) {
return (currentUser.profile || {}).boardView;
} else if (cookies.get('boardView') === 'board-view-lists') {
return 'board-view-lists';
} else if (cookies.get('boardView') === 'board-view-swimlanes') {
return 'board-view-swimlanes';
} else if (cookies.get('boardView') === 'board-view-lists') {
return 'board-view-lists';
} else if (cookies.get('boardView') === 'board-view-cal') {
return 'board-view-cal';
} else {
return false;
cookies.set('boardView', 'board-view-swimlanes'); //true
location.reload();
return 'board-view-swimlanes';
}
},
+2
View File
@@ -256,6 +256,8 @@
"current": "الحالي",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "تاريخ",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "сегашен",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Чекбокс",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Дата",
"custom-field-dropdown": "Падащо меню",
"custom-field-dropdown-none": "(няма)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "Actual",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Data",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "Aktuální",
"custom-field-delete-pop": "Nelze vrátit zpět. Toto odebere toto vlastní pole ze všech karet a zničí jeho historii.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Datum",
"custom-field-dropdown": "Rozbalovací seznam",
"custom-field-dropdown-none": "(prázdné)",
+2
View File
@@ -256,6 +256,8 @@
"current": "nuværende",
"custom-field-delete-pop": "Du kan ikke fortryde handlingen. Dette vil fjerne dette brugerdefinerede felt fra alle kort og tilintetgøre dens historik.",
"custom-field-checkbox": "Afkrydsningsfelt",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Dato",
"custom-field-dropdown": "Rullegardinliste",
"custom-field-dropdown-none": "(ingen)",
+23 -21
View File
@@ -164,15 +164,15 @@
"cardStartVotingPopup-title": "Abstimmung starten",
"positiveVoteMembersPopup-title": "Befürworter",
"negativeVoteMembersPopup-title": "Gegner",
"card-edit-voting": "Edit voting",
"editVoteEndDatePopup-title": "Change vote end date",
"allowNonBoardMembers": "Allow all logged in users",
"card-edit-voting": "Abstimmung editieren",
"editVoteEndDatePopup-title": "Enddatum der Abstimmung ändern",
"allowNonBoardMembers": "Alle eingeloggte Nutzer erlauben",
"vote-question": "Abstimmen über",
"vote-public": "Zeigen, wer was gewählt hat",
"vote-for-it": "Dafür",
"vote-against": "Dagegen",
"deleteVotePopup-title": "Delete vote?",
"vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
"deleteVotePopup-title": "Wahl löschen?",
"vote-delete-pop": "Löschen ist unwiderruflich. Alle Aktionen die dieser Karte zugeordnet sind werden ebenfalls gelöscht.",
"cardDeletePopup-title": "Karte löschen?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
"cardLabelsPopup-title": "Labels",
@@ -256,6 +256,8 @@
"current": "aktuell",
"custom-field-delete-pop": "Dies wird das Feld aus allen Karten entfernen und den dazugehörigen Verlauf löschen. Die Aktion kann nicht rückgängig gemacht werden.",
"custom-field-checkbox": "Kontrollkästchen",
"custom-field-currency": "Währung",
"custom-field-currency-option": "Währungszeichen",
"custom-field-date": "Datum",
"custom-field-dropdown": "Dropdownliste",
"custom-field-dropdown-none": "(keiner)",
@@ -309,7 +311,7 @@
"error-board-notAMember": "Um das zu tun, müssen Sie Mitglied dieses Boards sein",
"error-json-malformed": "Ihre Eingabe ist kein gültiges JSON",
"error-json-schema": "Ihre JSON-Daten enthalten nicht die gewünschten Informationen im richtigen Format",
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format",
"error-csv-schema": "hre CSV (Comma Separated Values)/TSV (Tab Separated Values) enthalten nicht die gewünschten Informationen im richtigen Format",
"error-list-doesNotExist": "Diese Liste existiert nicht",
"error-user-doesNotExist": "Dieser Nutzer existiert nicht",
"error-user-notAllowSelf": "Sie können sich nicht selbst einladen.",
@@ -317,10 +319,10 @@
"error-username-taken": "Dieser Benutzername ist bereits vergeben",
"error-email-taken": "E-Mail wird schon verwendet",
"export-board": "Board exportieren",
"export-board-json": "Export board to JSON",
"export-board-csv": "Export board to CSV",
"export-board-tsv": "Export board to TSV",
"export-board-html": "Export board to HTML",
"export-board-json": "Board als JSON exportieren",
"export-board-csv": "Board als CSV exportieren",
"export-board-tsv": "Board als TSV exportieren",
"export-board-html": "Board als HTML exportieren",
"exportBoardPopup-title": "Board exportieren",
"sort": "Sortieren",
"sort-desc": "Zum Sortieren der Liste klicken",
@@ -357,16 +359,16 @@
"import-board-c": "Board importieren",
"import-board-title-trello": "Board von Trello importieren",
"import-board-title-wekan": "Board aus vorherigem Export importieren",
"import-board-title-csv": "Import board from CSV/TSV",
"import-board-title-csv": "Board von CSV/TSV importieren",
"from-trello": "Von Trello",
"from-wekan": "Aus vorherigem Export",
"from-csv": "From CSV/TSV",
"from-csv": "Aus CSV/TSV",
"import-board-instruction-trello": "Gehen Sie in ihrem Trello-Board auf 'Menü', dann 'Mehr', 'Drucken und Exportieren', 'JSON-Export' und kopieren Sie den dort angezeigten Text",
"import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
"import-board-instruction-csv": "Fügen Sie die Ihre Comma-Separated- (CSV) / bzw. Tab-Separated-Values (TSV) ein.",
"import-board-instruction-wekan": "Gehen Sie in Ihrem Board auf 'Menü', danach auf 'Board exportieren' und kopieren Sie den Text aus der heruntergeladenen Datei.",
"import-board-instruction-about-errors": "Treten beim importieren eines Board Fehler auf, so kann der Import dennoch erfolgreich abgeschlossen sein und das Board ist auf der Seite \"Alle Boards\" zusehen.",
"import-json-placeholder": "Fügen Sie die korrekten JSON-Daten hier ein",
"import-csv-placeholder": "Paste your valid CSV/TSV data here",
"import-csv-placeholder": "Fügen Sie die korrekten CSV/TSV-Daten hier ein ",
"import-map-members": "Mitglieder zuordnen",
"import-members-map": "Das importierte Board hat einige Mitglieder. Bitte ordnen sie die Mitglieder, die Sie importieren wollen, Ihren Benutzern zu.",
"import-show-user-mapping": "Mitgliederzuordnung überprüfen",
@@ -399,7 +401,7 @@
"swimlaneActionPopup-title": "Swimlaneaktionen",
"swimlaneAddPopup-title": "Swimlane unterhalb einfügen",
"listImportCardPopup-title": "Eine Trello-Karte importieren",
"listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
"listImportCardsTsvPopup-title": "CSV/TSV importieren",
"listMorePopup-title": "Mehr",
"link-list": "Link zu dieser Liste",
"list-delete-pop": "Alle Aktionen werden aus dem Verlauf gelöscht und die Liste kann nicht wiederhergestellt werden.",
@@ -639,7 +641,7 @@
"r-when-a-card": "Wenn Karte",
"r-is": "wird",
"r-is-moved": "verschoben wird",
"r-added-to": "Added to",
"r-added-to": "Hinzugefügt zu",
"r-removed-from": "entfernt von",
"r-the-board": "das Board",
"r-list": "Liste",
@@ -800,11 +802,11 @@
"sunday": "Sonntag",
"status": "Status",
"swimlane": "Swimlane",
"owner": "Owner",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"voting": "Voting",
"archived": "Archived",
"owner": "Eigentümer",
"last-modified-at": "Zuletzt geändert um",
"last-activity": "Letzte Aktivität",
"voting": "Abstimunng",
"archived": "Archiviert",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
}
+7 -5
View File
@@ -43,7 +43,7 @@
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Ενέργειες",
"activities": "Activities",
"activities": "Δραστηριότητες",
"activity": "Δραστηριότητα",
"activity-added": "added %s to %s",
"activity-archived": "%s μετακινήθηκε στο Αρχείο",
@@ -55,7 +55,7 @@
"activity-imported-board": "imported %s from %s",
"activity-joined": "joined %s",
"activity-moved": "moved %s from %s to %s",
"activity-on": "on %s",
"activity-on": "στό %s",
"activity-removed": "removed %s from %s",
"activity-sent": "sent %s to %s",
"activity-unjoined": "unjoined %s",
@@ -76,18 +76,18 @@
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
"add-board": "Προσθήκη Πίνακα",
"add-card": "Προσθήκη Κάρτας",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-checklist": "Add Checklist",
"add-checklist": "Προσθήκη Λίστας ελέγχου",
"add-checklist-item": "Add an item to checklist",
"add-cover": "Add Cover",
"add-label": "Προσθήκη Ετικέτας",
"add-list": "Προσθήκη Λίστας",
"add-members": "Προσθήκη Μελών",
"added": "Προστέθηκε",
"addMemberPopup-title": "Μέλοι",
"addMemberPopup-title": "Μέλη",
"admin": "Διαχειριστής",
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
"admin-announcement": "Announcement",
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Ημερομηνία",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Dato",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "actual",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Fecha",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(ninguno)",
+2
View File
@@ -256,6 +256,8 @@
"current": "actual",
"custom-field-delete-pop": "Se eliminará este campo personalizado de todas las tarjetas y se destruirá su historial. Esta acción no puede deshacerse.",
"custom-field-checkbox": "Casilla de verificación",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Fecha",
"custom-field-dropdown": "Lista desplegable",
"custom-field-dropdown-none": "(nada)",
+18 -16
View File
@@ -256,6 +256,8 @@
"current": "actual",
"custom-field-delete-pop": "Se eliminará este campo personalizado de todas las tarjetas y se destruirá su historial. Esta acción no puede deshacerse.",
"custom-field-checkbox": "Casilla de verificación",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Fecha",
"custom-field-dropdown": "Lista desplegable",
"custom-field-dropdown-none": "(nada)",
@@ -320,7 +322,7 @@
"export-board-json": "Exportar tablero a JSON",
"export-board-csv": "Exportar tablero a CSV",
"export-board-tsv": "Exportar tablero a TSV",
"export-board-html": "Export board to HTML",
"export-board-html": "Exportar tablero a HTML",
"exportBoardPopup-title": "Exportar el tablero",
"sort": "Ordenar",
"sort-desc": "Click para ordenar la lista",
@@ -366,7 +368,7 @@
"import-board-instruction-wekan": "En tu tablero, vete a 'Menú', luego 'Exportar tablero', y copia el texto en el archivo descargado.",
"import-board-instruction-about-errors": "Aunque obtengas errores cuando importes el tablero, a veces la importación funciona igualmente, y el tablero se encontrará en la página de tableros.",
"import-json-placeholder": "Pega tus datos JSON válidos aquí",
"import-csv-placeholder": "Paste your valid CSV/TSV data here",
"import-csv-placeholder": "Pega tus datos CSV/TSV válidos aquí",
"import-map-members": "Mapa de miembros",
"import-members-map": "Tu tablero importado tiene algunos miembros. Por favor, mapea los miembros que quieres importar con tus usuarios.",
"import-show-user-mapping": "Revisión de la asignación de miembros",
@@ -399,7 +401,7 @@
"swimlaneActionPopup-title": "Acciones del carril de flujo",
"swimlaneAddPopup-title": "Añadir un carril de flujo debajo",
"listImportCardPopup-title": "Importar una tarjeta de Trello",
"listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
"listImportCardsTsvPopup-title": "Importar CSV/TSV",
"listMorePopup-title": "Más",
"link-list": "Enlazar a esta lista",
"list-delete-pop": "Todas las acciones serán eliminadas del historial de actividades y no se podrá recuperar la lista. Esta acción no puede deshacerse.",
@@ -639,7 +641,7 @@
"r-when-a-card": "Cuando una tarjeta",
"r-is": "es",
"r-is-moved": "es movida",
"r-added-to": "Added to",
"r-added-to": "Añadido a",
"r-removed-from": "eliminado de",
"r-the-board": "el tablero",
"r-list": "la lista",
@@ -687,7 +689,7 @@
"r-of-checklist": "de la lista de verificación",
"r-send-email": "Enviar un email",
"r-to": "a",
"r-of": "of",
"r-of": "de",
"r-subject": "asunto",
"r-rule-details": "Detalle de la regla",
"r-d-move-to-top-gen": "Mover la tarjeta al inicio de su lista",
@@ -787,10 +789,10 @@
"view-all": "Ver todo",
"filter-by-unread": "Filtrar por no leído",
"mark-all-as-read": "Marcar todo como leido",
"remove-all-read": "Remove all read",
"remove-all-read": "Eliminar todos los leídos",
"allow-rename": "Permitir renombrar",
"allowRenamePopup-title": "Permitir renombrar",
"start-day-of-week": "Set day of the week start",
"start-day-of-week": "Establecer el dia de comienzo de la semana",
"monday": "Lunes",
"tuesday": "Martes",
"wednesday": "Miércoles",
@@ -798,13 +800,13 @@
"friday": "Viernes",
"saturday": "Sábado",
"sunday": "Domingo",
"status": "Status",
"swimlane": "Swimlane",
"owner": "Owner",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"voting": "Voting",
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
"status": "Estado",
"swimlane": "Carril",
"owner": "Propietario",
"last-modified-at": "Última modificación ",
"last-activity": "Última actividad",
"voting": "Votar",
"archived": "Archivado",
"delete-linked-card-before-this-card": "No puede borrar esta tarjeta antes de borrar la tarjeta enlazada que tiene",
"delete-linked-cards-before-this-list": "No puede borrar esta lista antes de borrar las tarjetas enlazadas que apuntan a tarjetas en esta lista"
}
+2
View File
@@ -256,6 +256,8 @@
"current": "unekoa",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Data",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "جاری",
"custom-field-delete-pop": "این اقدام فیلدشخصی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد",
"custom-field-checkbox": "جعبه انتخابی",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "تاریخ",
"custom-field-dropdown": "لیست افتادنی",
"custom-field-dropdown-none": "(هیچ)",
+2
View File
@@ -256,6 +256,8 @@
"current": "nykyinen",
"custom-field-delete-pop": "Tätä ei voi peruuttaa. Tämä poistaa tämän mukautetun kentän kaikista korteista ja poistaa sen historian.",
"custom-field-checkbox": "Valintaruutu",
"custom-field-currency": "Valuutta",
"custom-field-currency-option": "Valuutta koodi",
"custom-field-date": "Päivämäärä",
"custom-field-dropdown": "Pudotusvalikko",
"custom-field-dropdown-none": "(ei mitään)",
+2
View File
@@ -256,6 +256,8 @@
"current": "actuel",
"custom-field-delete-pop": "Cette action n'est pas réversible. Elle supprimera ce champ personnalisé de toutes les cartes et détruira son historique.",
"custom-field-checkbox": "Case à cocher",
"custom-field-currency": "Devise",
"custom-field-currency-option": "Code devise",
"custom-field-date": "Date",
"custom-field-dropdown": "Liste de choix",
"custom-field-dropdown-none": "(aucun)",
+2
View File
@@ -256,6 +256,8 @@
"current": "actual",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Data",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+3 -1
View File
@@ -256,6 +256,8 @@
"current": "נוכחי",
"custom-field-delete-pop": "אין אפשרות לבטל את הפעולה. הפעולה תסיר את השדה שהותאם אישית מכל הכרטיסים ותשמיד את ההיסטוריה שלו.",
"custom-field-checkbox": "תיבת סימון",
"custom-field-currency": "מטבע",
"custom-field-currency-option": "קוד מטבע",
"custom-field-date": "תאריך",
"custom-field-dropdown": "רשימה נגללת",
"custom-field-dropdown-none": "(ללא)",
@@ -805,6 +807,6 @@
"last-activity": "פעילות אחרונה",
"voting": "הצבעה",
"archived": "בארכיון",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-card-before-this-card": "לא ניתן למחוק את הכרטיס הזה לפני שמוחקים את הכרטיס המקושר שיש לו",
"delete-linked-cards-before-this-list": "לא ניתן למחוק את הרשימה הזו לפני שמוחקים את הכרטיסים שמצביעים לכרטיסים ברשימה הזו"
}
+52 -50
View File
@@ -17,14 +17,14 @@
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-editComment": "कार्ड पर संपादित टिप्पणी __card__: __comment__ सूची में __list__ स्विमलेन में __swimlane__ बोर्ड पर __board__",
"act-deleteComment": "कार्ड पर हटाई गई टिप्पणी __card__: __comment__ सूची में __list__ स्विमलेन में __swimlane__ बोर्ड पर __board__",
"act-createBoard": "created board __board__",
"act-createSwimlane": "created swimlane __swimlane__ to board __board__",
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "created custom field __customField__ at board __board__",
"act-deleteCustomField": "deleted custom field __customField__ at board __board__",
"act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createCustomField": "बोर्ड पर कस्टम फ़ील्ड __customField__ __board__",
"act-deleteCustomField": "बोर्ड पर कस्टम फ़ील्ड __customField__ हटा दिया गया __board__",
"act-setCustomField": "कस्टम फ़ील्ड __customField__ संपादित करें: __customFieldValue__ कार्ड पर __card__ सूची में __list__ स्विमलेन __swimlane__ पर बोर्ड __board__",
"act-createList": "added list __list__ to board __board__",
"act-addBoardMember": "added member __member__ to board __board__",
"act-archivedBoard": "Board __board__ moved to Archive",
@@ -64,7 +64,7 @@
"activity-unchecked-item": "अचिह्नित %s अंदर में चिह्नांकन-सूची %s of %s",
"activity-checklist-added": "संकलित चिह्नांकन-सूची तक %s",
"activity-checklist-removed": "हटा दिया एक चिह्नांकन-सूची से %s",
"activity-checklist-completed": "completed checklist %s of %s",
"activity-checklist-completed": "पूरी जाँच सूची%sकी %s",
"activity-checklist-uncompleted": "अपूर्ण चिह्नांकन-सूची %s of %s",
"activity-checklist-item-added": "संकलित चिह्नांकन-सूची विषय तक '%s' अंदर में %s",
"activity-checklist-item-removed": "हटा दिया एक चिह्नांकन-सूची विषय से '%s' अंदर में %s",
@@ -73,8 +73,8 @@
"activity-unchecked-item-card": "अचिह्नित %s अंदर में चिह्नांकन-सूची %s",
"activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "अपूर्ण चिह्नांकन-सूची %s",
"activity-editComment": "edited comment %s",
"activity-deleteComment": "deleted comment %s",
"activity-editComment": "संपादित टिप्पणी",
"activity-deleteComment": "टिप्पणी हटा दी गई",
"add-attachment": "संलग्न करें",
"add-board": "बोर्ड जोड़ें",
"add-card": "कार्ड जोड़ें",
@@ -137,7 +137,7 @@
"board-view": "बोर्ड दृष्टिकोण",
"board-view-cal": "तिथि-पत्र",
"board-view-swimlanes": "तैरना",
"board-view-collapse": "Collapse",
"board-view-collapse": "संक्षिप्त करें",
"board-view-lists": "सूचियाँ",
"bucket-example": "उदाहरण के लिए “बाल्टी सूची” की तरह",
"cancel": "रद्द करें",
@@ -161,18 +161,18 @@
"cardAttachmentsPopup-title": "से अनुलग्न करें",
"cardCustomField-datePopup-title": "तारीख बदलें",
"cardCustomFieldsPopup-title": "संपादित करें प्रचलन क्षेत्र",
"cardStartVotingPopup-title": "Start a vote",
"positiveVoteMembersPopup-title": "Proponents",
"negativeVoteMembersPopup-title": "Opponents",
"card-edit-voting": "Edit voting",
"editVoteEndDatePopup-title": "Change vote end date",
"allowNonBoardMembers": "Allow all logged in users",
"vote-question": "Voting question",
"vote-public": "Show who voted what",
"vote-for-it": "for it",
"vote-against": "against",
"deleteVotePopup-title": "Delete vote?",
"vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
"cardStartVotingPopup-title": "वोट शुरू करें",
"positiveVoteMembersPopup-title": "समर्थकों का",
"negativeVoteMembersPopup-title": "प्रतिद्वंद्वी",
"card-edit-voting": "मतदान संपादित करें",
"editVoteEndDatePopup-title": "मतदान समाप्ति की तारीख बदलें",
"allowNonBoardMembers": "सभी लॉग इन उपयोगकर्ताओं को अनुमति दें",
"vote-question": "मतदान का सवाल",
"vote-public": "दिखाएँ कि किसने क्या मतदान किया",
"vote-for-it": "इसके लिए",
"vote-against": "के प्रतिकूल",
"deleteVotePopup-title": "मतदान हटाएं?",
"vote-delete-pop": "हटाना स्थायी है। आप इस मतदान से जुड़े सभी कार्यों को खो देंगे।",
"cardDeletePopup-title": "मिटाएँ कार्ड?",
"cardDetailsActionsPopup-title": "कार्ड क्रियाएँ",
"cardLabelsPopup-title": "नामपत्र",
@@ -235,8 +235,8 @@
"comment-only-desc": "केवल कार्ड पर टिप्पणी कर सकते हैं।",
"no-comments": "कोई टिप्पणी नहीं",
"no-comments-desc": "टिप्पणियां और गतिविधियां नहीं देख पा रहे हैं।",
"worker": "Worker",
"worker-desc": "Can only move cards, assign itself to card and comment.",
"worker": "कामगार",
"worker-desc": "केवल कार्ड ले जा सकते हैं, खुद को कार्ड और टिप्पणी करने के लिए असाइन करें।",
"computer": "संगणक",
"confirm-subtask-delete-dialog": "क्या आप वाकई उपकार्य हटाना चाहते हैं?",
"confirm-checklist-delete-dialog": "क्या आप वाकई जांचसूची हटाना चाहते हैं?",
@@ -256,6 +256,8 @@
"current": "वर्तमान",
"custom-field-delete-pop": "कोई पूर्ववत् नहीं है । यह सभी कार्ड से इस कस्टम क्षेत्र को हटा दें और इसके इतिहास को नष्ट कर देगा ।",
"custom-field-checkbox": "निशानबक्से",
"custom-field-currency": "मुद्रा",
"custom-field-currency-option": "मुद्रा संहिता",
"custom-field-date": "दिनांक",
"custom-field-dropdown": "ड्रॉपडाउन सूची",
"custom-field-dropdown-none": "(कोई नहीं)",
@@ -309,7 +311,7 @@
"error-board-notAMember": "You need तक be एक सदस्य of यह बोर्ड तक do that",
"error-json-malformed": "Your text is not valid JSON",
"error-json-schema": "आपके JSON डेटा में सही प्रारूप में सही जानकारी शामिल नहीं है",
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format",
"error-csv-schema": "आपके CSV (कोमा सेपरेटेड वैल्यूज़) / TSV (टैब सेपरेटेड वैल्यूज़) में सही फॉर्मेट में उचित जानकारी शामिल नहीं है",
"error-list-doesNotExist": "यह सूची does not exist",
"error-user-doesNotExist": "यह user does not exist",
"error-user-notAllowSelf": "You can not invite yourself",
@@ -317,30 +319,30 @@
"error-username-taken": "यह username is already taken",
"error-email-taken": "Email has already been taken",
"export-board": "Export बोर्ड",
"export-board-json": "Export board to JSON",
"export-board-csv": "Export board to CSV",
"export-board-tsv": "Export board to TSV",
"export-board-html": "Export board to HTML",
"export-board-json": "JSON को निर्यात बोर्ड",
"export-board-csv": "निर्यात बोर्ड को सी.एस.वी.",
"export-board-tsv": "टी.एस.वी. को निर्यात बोर्ड",
"export-board-html": "HTML को निर्यात बोर्ड",
"exportBoardPopup-title": "Export बोर्ड",
"sort": "Sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"list-label-modifiedAt": "Last Access Time",
"list-label-title": "Name of the List",
"list-label-sort": "Your Manual Order",
"list-label-short-modifiedAt": "(L)",
"list-label-short-title": "(N)",
"list-label-short-sort": "(M)",
"sort": "भांति",
"sort-desc": "क्रमबद्ध सूची पर क्लिक करें",
"list-sort-by": "सूची क्रमबद्ध करें:",
"list-label-modifiedAt": "अंतिम पहुंच समय",
"list-label-title": "सूची का नाम",
"list-label-sort": "आपका नियमावलीआदेश",
"list-label-short-modifiedAt": "(बड़ा)",
"list-label-short-title": "(साधारण)",
"list-label-short-sort": "(मध्यम)",
"filter": "Filter",
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-cards": "निस्पंदन पत्ते या सूची",
"list-filter-label": "शीर्षक द्वारा निस्पंदन सूची",
"filter-clear": "Clear filter",
"filter-no-label": "No label",
"filter-no-member": "No सदस्य",
"filter-no-assignee": "No assignee",
"filter-no-assignee": "कोई अभिहस्तांकिती नहीं",
"filter-no-custom-fields": "No प्रचलन क्षेत्र",
"filter-show-archive": "Show archived lists",
"filter-hide-empty": "Hide empty lists",
"filter-show-archive": "संग्रहित सूची दिखाएं",
"filter-hide-empty": "खाली सूची छिपाएं",
"filter-on": "Filter is on",
"filter-on-desc": "You are filtering कार्ड इस पर बोर्ड. Click here तक संपादित करें filter.",
"filter-to-selection": "Filter तक selection",
@@ -357,16 +359,16 @@
"import-board-c": "Import बोर्ड",
"import-board-title-trello": "Import बोर्ड से Trello",
"import-board-title-wekan": "Import board from previous export",
"import-board-title-csv": "Import board from CSV/TSV",
"import-board-title-csv": "CSV / TSV से आयात बोर्ड",
"from-trello": "From Trello",
"from-wekan": "From previous export",
"from-csv": "From CSV/TSV",
"from-csv": "CSV / TSV से",
"import-board-instruction-trello": "In your Trello बोर्ड, go तक 'Menu', then 'More', 'Print और Export', 'Export JSON', और copy the resulting text.",
"import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
"import-board-instruction-csv": "अपने कोमा सेपरेटेड वैल्यू (CSV) / ​​टैब सेपरेटेड वैल्यू (TSV) में पेस्ट करें।",
"import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
"import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.",
"import-json-placeholder": "Paste your valid JSON data here",
"import-csv-placeholder": "Paste your valid CSV/TSV data here",
"import-csv-placeholder": "अपना वैध CSV / TSV सामग्री यहां पेस्ट करें",
"import-map-members": "Map सदस्य",
"import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
"import-show-user-mapping": "Re आलोकन सदस्य mapping",
@@ -399,7 +401,7 @@
"swimlaneActionPopup-title": "तैरन Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import एक Trello कार्ड",
"listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
"listImportCardsTsvPopup-title": "एक्सेल CSV / TSV आयात करें",
"listMorePopup-title": "More",
"link-list": "Link तक यह list",
"list-delete-pop": "All actions हो जाएगा हटा दिया से the activity feed और you won't be able तक recover the list. There is no undo.",
@@ -462,7 +464,7 @@
"save": "Save",
"search": "Search",
"rules": "Rules",
"search-cards": "Search from card/list titles, descriptions and custom fields on this board",
"search-cards": "इस बोर्ड पर कार्ड / सूची शीर्षक, विवरण और आदत क्षेत्र से खोजें",
"search-example": "Text तक search for?",
"select-color": "Select Color",
"set-wip-limit-value": "Set एक limit for the maximum number of tasks अंदर में यह list",
@@ -546,8 +548,8 @@
"email-smtp-test-text": "You have successfully प्रेषित an email",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized तक आलोकन यह page.",
"webhook-title": "Webhook Name",
"webhook-token": "Token (Optional for Authentication)",
"webhook-title": "वेबहुक नाम",
"webhook-token": "टोकन (प्रमाणीकरण के लिए वैकल्पिक)",
"outgoing-webhooks": "Outgoing Webhooks",
"bidirectional-webhooks": "Two-Way Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
+2
View File
@@ -256,6 +256,8 @@
"current": "jelenlegi",
"custom-field-delete-pop": "Nincs visszavonás. Ez el fogja távolítani az egyéni mezőt az összes kártyáról, és megsemmisíti az előzményeit.",
"custom-field-checkbox": "Jelölőnégyzet",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Dátum",
"custom-field-dropdown": "Legördülő lista",
"custom-field-dropdown-none": "(nincs)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "sekarang",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Tanggal",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+26 -24
View File
@@ -164,15 +164,15 @@
"cardStartVotingPopup-title": "Inizia una votazione",
"positiveVoteMembersPopup-title": "Favorevoli",
"negativeVoteMembersPopup-title": "Contrari",
"card-edit-voting": "Edit voting",
"editVoteEndDatePopup-title": "Change vote end date",
"allowNonBoardMembers": "Allow all logged in users",
"card-edit-voting": "Modifica la votazione",
"editVoteEndDatePopup-title": "Cambia data di termine voto",
"allowNonBoardMembers": "Consenti tutti gli utenti registrati",
"vote-question": "Domanda di votazione",
"vote-public": "Mostrare chi ha votato cosa",
"vote-for-it": "a favore",
"vote-against": "contro",
"deleteVotePopup-title": "Delete vote?",
"vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
"deleteVotePopup-title": "Eliminare il voto?",
"vote-delete-pop": "L'eliminazione è permanente. Tutte le azioni associate a questa votazione andranno perse.",
"cardDeletePopup-title": "Elimina scheda?",
"cardDetailsActionsPopup-title": "Azioni scheda",
"cardLabelsPopup-title": "Etichette",
@@ -256,6 +256,8 @@
"current": "corrente",
"custom-field-delete-pop": "Non potrai tornare indietro. Questa azione rimuoverà questo campo personalizzato da tutte le schede ed eliminerà ogni sua traccia.",
"custom-field-checkbox": "Casella di scelta",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Data",
"custom-field-dropdown": "Lista a discesa",
"custom-field-dropdown-none": "(niente)",
@@ -309,7 +311,7 @@
"error-board-notAMember": "Devi essere un membro di questa bacheca per poterlo fare",
"error-json-malformed": "Il tuo testo non è un JSON valido",
"error-json-schema": "Il tuo file JSON non contiene le giuste informazioni nel formato corretto",
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format",
"error-csv-schema": "Il tuo file CSV(Comma Separated Values)/TSV (Tab Separated Values) non contiene le giuste informazioni nel formato corretto ",
"error-list-doesNotExist": "Questa lista non esiste",
"error-user-doesNotExist": "Questo utente non esiste",
"error-user-notAllowSelf": "Non puoi invitare te stesso",
@@ -317,10 +319,10 @@
"error-username-taken": "Questo username è già utilizzato",
"error-email-taken": "L'email è già stata presa",
"export-board": "Esporta bacheca",
"export-board-json": "Export board to JSON",
"export-board-csv": "Export board to CSV",
"export-board-tsv": "Export board to TSV",
"export-board-html": "Export board to HTML",
"export-board-json": "Esporta bacheca in JSON",
"export-board-csv": "Esporta bacheca in CSV",
"export-board-tsv": "Esporta bacheca in TSV",
"export-board-html": "Esporta bacheca in HTML",
"exportBoardPopup-title": "Esporta bacheca",
"sort": "Ordina",
"sort-desc": "Clicca per ordinare la lista",
@@ -357,16 +359,16 @@
"import-board-c": "Importa bacheca",
"import-board-title-trello": "Importa una bacheca da Trello",
"import-board-title-wekan": "Importa bacheca dall'esportazione precedente",
"import-board-title-csv": "Import board from CSV/TSV",
"import-board-title-csv": "Importa bacheca da CSV/TSV",
"from-trello": "Da Trello",
"from-wekan": "Dall'esportazione precedente",
"from-csv": "From CSV/TSV",
"from-csv": "Da CSV/TSV",
"import-board-instruction-trello": "Nella tua bacheca Trello vai a 'Menu', poi 'Altro', 'Stampa ed esporta', 'Esporta JSON', e copia il testo che compare.",
"import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
"import-board-instruction-csv": "Incolla in Comma Separated Values (CSV) / Tab Separated Values (TSV) .",
"import-board-instruction-wekan": "Nella tua bacheca vai su \"Menu\", poi \"Esporta la bacheca\", e copia il testo nel file scaricato",
"import-board-instruction-about-errors": "Se hai degli errori quando importi una bacheca, qualche volta l'importazione funziona comunque, e la bacheca si trova nella pagina \"Tutte le bacheche\"",
"import-json-placeholder": "Incolla un JSON valido qui",
"import-csv-placeholder": "Paste your valid CSV/TSV data here",
"import-csv-placeholder": "Incolla un CSV/TSV valido qui",
"import-map-members": "Mappatura dei membri",
"import-members-map": "La bacheca che hai importato contiene alcuni membri. Per favore scegli i membri che vuoi importare tra i tuoi utenti",
"import-show-user-mapping": "Rivedi la mappatura dei membri",
@@ -399,7 +401,7 @@
"swimlaneActionPopup-title": "Azioni diagramma Swimlane",
"swimlaneAddPopup-title": "Aggiungi un diagramma Swimlane di seguito",
"listImportCardPopup-title": "Importa una scheda di Trello",
"listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
"listImportCardsTsvPopup-title": "Importa CSV/TSV",
"listMorePopup-title": "Altro",
"link-list": "Link a questa lista",
"list-delete-pop": "Tutte le azioni saranno rimosse dal flusso attività e non sarai in grado di recuperare la lista. Non potrai tornare indietro.",
@@ -639,7 +641,7 @@
"r-when-a-card": "Quando una scheda",
"r-is": "è",
"r-is-moved": "viene spostata",
"r-added-to": "Added to",
"r-added-to": "Aggiunto/a a",
"r-removed-from": "Rimosso da",
"r-the-board": "La bacheca",
"r-list": "lista",
@@ -798,13 +800,13 @@
"friday": "Venerdi",
"saturday": "Sabato",
"sunday": "Domenica",
"status": "Status",
"status": "Stato",
"swimlane": "Swimlane",
"owner": "Owner",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"voting": "Voting",
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
"owner": "Proprietario",
"last-modified-at": "Ultima modifica il",
"last-activity": "Ultima attività",
"voting": "Votazione",
"archived": "Archiviato",
"delete-linked-card-before-this-card": "Non puoi eliminare questa scheda prima di avere eliminato una scheda collegata che ha",
"delete-linked-cards-before-this-list": "Non puoi eliminare questa lista prima di avere eliminato le schede collegate che puntano su schede in questa lista"
}
+11 -9
View File
@@ -166,7 +166,7 @@
"negativeVoteMembersPopup-title": "反対者",
"card-edit-voting": "投票を編集",
"editVoteEndDatePopup-title": "投票終了日の変更",
"allowNonBoardMembers": "Allow all logged in users",
"allowNonBoardMembers": "ログイン中のすべてのユーザーに許可",
"vote-question": "投票の質問事項",
"vote-public": "誰が何に投票したか表示",
"vote-for-it": "賛成",
@@ -256,6 +256,8 @@
"current": "現在",
"custom-field-delete-pop": "この操作は取り消しできません。このカスタムフィールドはすべてのカードから外され履歴からも見えなくなります。",
"custom-field-checkbox": "チェックボックス",
"custom-field-currency": "通貨",
"custom-field-currency-option": "通貨コード",
"custom-field-date": "日付",
"custom-field-dropdown": "ドロップダウンリスト",
"custom-field-dropdown-none": "(none)",
@@ -360,9 +362,9 @@
"import-board-title-csv": "ボードをCSV/TSVからインポート",
"from-trello": "Trelloから",
"from-wekan": "以前のエクスポートから",
"from-csv": "From CSV/TSV",
"from-csv": "CSV/TSV から",
"import-board-instruction-trello": "Trelloボードの、 'Menu' → 'More' → 'Print and Export' → 'Export JSON'を選択し、テキストをコピーしてください。",
"import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
"import-board-instruction-csv": "カンマ区切り(CSV) / タブ区切り(TSV) ファイルに貼り付けてください。",
"import-board-instruction-wekan": "ボードの、 'メニュー' → 'ボードのエクスポート'を選択し、ダウンロードされたファイルの中のテキストをコピーしてください。",
"import-board-instruction-about-errors": "ボードのインポート中にエラーが発生した場合、インポートがまだ進行中のまま、全てのボードページに表示されている場合があります。",
"import-json-placeholder": "JSONデータをここに貼り付けする",
@@ -639,7 +641,7 @@
"r-when-a-card": "カード:",
"r-is": "が",
"r-is-moved": "が移動された時",
"r-added-to": "Added to",
"r-added-to": "次に追加された時",
"r-removed-from": "次から削除された時",
"r-the-board": "ボード:",
"r-list": "リスト:",
@@ -798,13 +800,13 @@
"friday": "金曜",
"saturday": "土曜",
"sunday": "日曜",
"status": "Status",
"status": "ステータス",
"swimlane": "スイムレーン",
"owner": "オーナー",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"last-modified-at": "最終更新",
"last-activity": "最終アクティビティ",
"voting": "投票",
"archived": "アーカイブ",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
"delete-linked-card-before-this-card": "カード内にある、リンクされているカードを削除しなければ、このカードは削除できません",
"delete-linked-cards-before-this-list": "リスト内にある、他のカードを参照しているカードを削除しなければ、このリストは削除できません"
}
+2
View File
@@ -256,6 +256,8 @@
"current": "მიმდინარე",
"custom-field-delete-pop": "ქმედება გამოიწვევს მომხმარებლის ველის წაშლას ყველა ბარათიდან და გაანადგურებს მის ისტორიას, რის შემდეგაც შეუძლებელი იქნება მისი უკან დაბრუნება. ",
"custom-field-checkbox": "მოსანიშნი გრაფა",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "თარიღი",
"custom-field-dropdown": "ჩამოსაშლელი სია",
"custom-field-dropdown-none": "(ცარიელი)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "경향",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "날짜",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "сегашен",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Чекбокс",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Дата",
"custom-field-dropdown": "Падащо меню",
"custom-field-dropdown-none": "(няма)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Dato",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "Huidige",
"custom-field-delete-pop": "Er is geen herstelmogelijkheid. Deze actie zal dit maatwerkveld van alle kaarten verwijderen en de bijbehorende historie wissen.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Datum",
"custom-field-dropdown": "Dropdown Lijst",
"custom-field-dropdown-none": "(geen)",
+2
View File
@@ -256,6 +256,8 @@
"current": "actual",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Casa de croiar",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Data",
"custom-field-dropdown": "Tièra de causidas",
"custom-field-dropdown-none": "(pas res)",
+26 -24
View File
@@ -164,15 +164,15 @@
"cardStartVotingPopup-title": "Zacznij głosowanie",
"positiveVoteMembersPopup-title": "Zwolennicy",
"negativeVoteMembersPopup-title": "Przeciwnicy",
"card-edit-voting": "Edit voting",
"editVoteEndDatePopup-title": "Change vote end date",
"allowNonBoardMembers": "Allow all logged in users",
"card-edit-voting": "Edytuj głosowanie",
"editVoteEndDatePopup-title": "Zmień głos oraz datę",
"allowNonBoardMembers": "Pozwól wszystkim zalogowanym użytkownikom",
"vote-question": "Pytanie do głosowania",
"vote-public": "Pokaż, kto głosował na wybrane opcje",
"vote-for-it": "za",
"vote-against": "przeciwko",
"deleteVotePopup-title": "Delete vote?",
"vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
"deleteVotePopup-title": "Usunąć głos?",
"vote-delete-pop": "Usuwanie jest nieodwracalne. Stracisz wszystkie czynności związane z tym głosem.",
"cardDeletePopup-title": "Usunąć kartę?",
"cardDetailsActionsPopup-title": "Czynności kart",
"cardLabelsPopup-title": "Etykiety",
@@ -256,6 +256,8 @@
"current": "obecny",
"custom-field-delete-pop": "Nie ma możliwości wycofania tej operacji. To usunie te niestandardowe pole ze wszystkich kart oraz usunie ich całą historię.",
"custom-field-checkbox": "Pole wyboru",
"custom-field-currency": "Waluta",
"custom-field-currency-option": "Kod waluty",
"custom-field-date": "Data",
"custom-field-dropdown": "Lista rozwijana",
"custom-field-dropdown-none": "(puste)",
@@ -309,7 +311,7 @@
"error-board-notAMember": "Musisz być członkiem tej tablicy, żeby wykonać tę czynność",
"error-json-malformed": "Twoja fraza nie jest w formacie JSON",
"error-json-schema": "Twoje dane JSON nie zawierają prawidłowych informacji w poprawnym formacie",
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format",
"error-csv-schema": "Twój plik CSV(plik oddzielony przecinkami)/TSV (plik oddzielony tabulatorami) nie zawiera danych w poprawnym formacie",
"error-list-doesNotExist": "Ta lista nie isnieje",
"error-user-doesNotExist": "Ten użytkownik nie istnieje",
"error-user-notAllowSelf": "Nie możesz zaprosić samego siebie",
@@ -317,10 +319,10 @@
"error-username-taken": "Ta nazwa jest już zajęta",
"error-email-taken": "Adres email jest już zarezerwowany",
"export-board": "Eksportuj tablicę",
"export-board-json": "Export board to JSON",
"export-board-csv": "Export board to CSV",
"export-board-tsv": "Export board to TSV",
"export-board-html": "Export board to HTML",
"export-board-json": "Eksportuj tablicę do JSON",
"export-board-csv": "Eksportuj tablicę do CSV",
"export-board-tsv": "Eksportuj tablicę do TSV",
"export-board-html": "Eksportuj tablicę do HTML",
"exportBoardPopup-title": "Eksportuj tablicę",
"sort": "Sortuj",
"sort-desc": "Kliknij by sortować listę",
@@ -357,16 +359,16 @@
"import-board-c": "Import tablicy",
"import-board-title-trello": "Importuj tablicę z Trello",
"import-board-title-wekan": "Importuj tablicę z poprzedniego eksportu",
"import-board-title-csv": "Import board from CSV/TSV",
"import-board-title-csv": "Importuj tablicę z CSV/TSV",
"from-trello": "Z Trello",
"from-wekan": "Z poprzedniego eksportu",
"from-csv": "From CSV/TSV",
"from-csv": "Z CSV/TSV",
"import-board-instruction-trello": "W twojej tablicy na Trello przejdź do 'Menu', następnie 'Więcej', 'Drukuj i eksportuj', 'Eksportuj jako JSON' i skopiuj wynik",
"import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
"import-board-instruction-csv": "Wklej swoje dane w postaci wartości oddzielanych przecinkiem (CSV) lub tabulatorem (TSV)",
"import-board-instruction-wekan": "Na Twojej tablicy przejdź do 'Menu', a następnie wybierz 'Eksportuj tablicę' i skopiuj tekst w pobranym pliku.",
"import-board-instruction-about-errors": "W przypadku, gdy otrzymujesz błędy importowania tablicy, czasami importowanie pomimo wszystko działa poprawnie i tablica znajduje się w oknie Wszystkie tablice.",
"import-json-placeholder": "Wklej Twoje dane JSON tutaj",
"import-csv-placeholder": "Paste your valid CSV/TSV data here",
"import-csv-placeholder": "Wklej swoje dane z pliku CSV/TSV tutaj",
"import-map-members": "Przypisz członków",
"import-members-map": "Twoje zaimportowane tablice mają kilku członków. Proszę wybierz członków których chcesz zaimportować dla Twoich użytkowników",
"import-show-user-mapping": "Przejrzyj wybranych członków",
@@ -399,7 +401,7 @@
"swimlaneActionPopup-title": "Opcje diagramu czynności",
"swimlaneAddPopup-title": "Dodaj diagram czynności poniżej",
"listImportCardPopup-title": "Zaimportuj kartę z Trello",
"listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
"listImportCardsTsvPopup-title": "Importuj CSV/TSV z Excela",
"listMorePopup-title": "Więcej",
"link-list": "Podepnij do tej listy",
"list-delete-pop": "Wszystkie czynności zostaną usunięte z Aktywności i nie będziesz w stanie przywrócić listy. Nie ma możliwości cofnięcia tej operacji.",
@@ -639,7 +641,7 @@
"r-when-a-card": "Gdy karta",
"r-is": "jest",
"r-is-moved": "jest przenoszona",
"r-added-to": "Added to",
"r-added-to": "Dodany do",
"r-removed-from": "usunął z",
"r-the-board": "tablicy",
"r-list": "lista",
@@ -799,12 +801,12 @@
"saturday": "Sobota",
"sunday": "Niedziela",
"status": "Status",
"swimlane": "Swimlane",
"owner": "Owner",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"voting": "Voting",
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
"swimlane": "Diagram czynności",
"owner": "Właściciel",
"last-modified-at": "Ostatnio zmodyfikowano",
"last-activity": "Ostatnia aktywność",
"voting": "Głosowanie",
"archived": "Zarchiwizowany",
"delete-linked-card-before-this-card": "Nie możesz usunąć tej karty, dopóki nie usuniesz podpiętej karty, w której są",
"delete-linked-cards-before-this-list": "Nie możesz usunąć tej karty, dopóki nie usuniesz podpiętych kart, które wskazują na karty w tej liście"
}
+4 -2
View File
@@ -256,6 +256,8 @@
"current": "atual",
"custom-field-delete-pop": "Não existe desfazer. Isso irá excluir o campo customizado de todos os cartões e destruir seu histórico",
"custom-field-checkbox": "Caixa de seleção",
"custom-field-currency": "Moeda",
"custom-field-currency-option": "Código de moeda",
"custom-field-date": "Data",
"custom-field-dropdown": "Lista suspensa",
"custom-field-dropdown-none": "(nada)",
@@ -805,6 +807,6 @@
"last-activity": "Última atividade",
"voting": "Votação",
"archived": "Arquivado",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
"delete-linked-card-before-this-card": "Você não pode excluir este cartão antes de excluir primeiro o cartão vinculado que possui",
"delete-linked-cards-before-this-list": "Você não pode excluir esta lista antes de excluir primeiro os cartões vinculados que estão apontando para os cartões nesta lista"
}
+37 -35
View File
@@ -137,7 +137,7 @@
"board-view": "Visão do Quadro",
"board-view-cal": "Calendário",
"board-view-swimlanes": "Pistas",
"board-view-collapse": "Collapse",
"board-view-collapse": "Colapsar ",
"board-view-lists": "Listas",
"bucket-example": "\"Lista de Desejos\", por exemplo",
"cancel": "Cancelar",
@@ -164,14 +164,14 @@
"cardStartVotingPopup-title": "Start a vote",
"positiveVoteMembersPopup-title": "Proponents",
"negativeVoteMembersPopup-title": "Opponents",
"card-edit-voting": "Edit voting",
"card-edit-voting": "Alterar voto",
"editVoteEndDatePopup-title": "Change vote end date",
"allowNonBoardMembers": "Allow all logged in users",
"vote-question": "Voting question",
"vote-public": "Show who voted what",
"vote-for-it": "for it",
"vote-against": "against",
"deleteVotePopup-title": "Delete vote?",
"deleteVotePopup-title": "Apagar voto?",
"vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
"cardDeletePopup-title": "Apagar Cartão?",
"cardDetailsActionsPopup-title": "Acções do Cartão",
@@ -256,6 +256,8 @@
"current": "actual",
"custom-field-delete-pop": "Não existe desfazer. Isto irá remover este campo personalizado de todos os cartões e destruir o seu histórico",
"custom-field-checkbox": "Caixa de selecção",
"custom-field-currency": "Moeda",
"custom-field-currency-option": "Código de Moeda",
"custom-field-date": "Data",
"custom-field-dropdown": "Lista Suspensa",
"custom-field-dropdown-none": "(nada)",
@@ -322,18 +324,18 @@
"export-board-tsv": "Export board to TSV",
"export-board-html": "Export board to HTML",
"exportBoardPopup-title": "Exportar quadro",
"sort": "Sort",
"sort-desc": "Click to Sort List",
"list-sort-by": "Sort the List By:",
"sort": "Ordenar",
"sort-desc": "Clique para ordenar a Lista",
"list-sort-by": "Ordenar a Lista por:",
"list-label-modifiedAt": "Last Access Time",
"list-label-title": "Name of the List",
"list-label-title": "Nome da Lista",
"list-label-sort": "Your Manual Order",
"list-label-short-modifiedAt": "(L)",
"list-label-short-title": "(N)",
"list-label-short-sort": "(M)",
"filter": "Filtrar",
"filter-cards": "Filter Cards or Lists",
"list-filter-label": "Filter List by Title",
"filter-cards": "Filtrar Cartões ou Listas",
"list-filter-label": "Filtrar Lista por Título",
"filter-clear": "Limpar filtro",
"filter-no-label": "Sem etiquetas",
"filter-no-member": "Sem membros",
@@ -360,13 +362,13 @@
"import-board-title-csv": "Import board from CSV/TSV",
"from-trello": "Do Trello",
"from-wekan": "A partir de exportação prévia",
"from-csv": "From CSV/TSV",
"from-csv": "De CSV/TSV",
"import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', e copie o texto resultante.",
"import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
"import-board-instruction-wekan": "No seu quadro vá para 'Menu', depois 'Exportar quadro' e copie o texto no ficheiro descarregado.",
"import-board-instruction-about-errors": "Se receber erros ao importar o quadro, às vezes a importação ainda funciona e o quadro está na página Todos os Quadros.",
"import-json-placeholder": "Cole seus dados JSON válidos aqui",
"import-csv-placeholder": "Paste your valid CSV/TSV data here",
"import-csv-placeholder": "Copie aqui os seus dados CSV/TSV",
"import-map-members": "Mapear membros",
"import-members-map": "O seu quadro importado possui alguns membros. Por favor, mapeie os membros que deseja importar para seus utilizadores",
"import-show-user-mapping": "Rever mapeamento dos membros",
@@ -399,7 +401,7 @@
"swimlaneActionPopup-title": "Acções de Pista",
"swimlaneAddPopup-title": "Adicionar uma Pista abaixo",
"listImportCardPopup-title": "Importe um cartão do Trello",
"listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
"listImportCardsTsvPopup-title": "Importar Excel CSV/TSV",
"listMorePopup-title": "Mais",
"link-list": "Ligar a esta lista",
"list-delete-pop": "Todas as acções serão removidas do feed de actividade e não poderá recuperar a lista. Não há como desfazer.",
@@ -639,7 +641,7 @@
"r-when-a-card": "Quando um cartão",
"r-is": "é",
"r-is-moved": "é movido",
"r-added-to": "Added to",
"r-added-to": "Adicionado a",
"r-removed-from": "Removido de",
"r-the-board": "o quadro",
"r-list": "lista",
@@ -687,7 +689,7 @@
"r-of-checklist": "da lista de verificação",
"r-send-email": "Enviar um e-mail",
"r-to": "para",
"r-of": "of",
"r-of": "de",
"r-subject": "assunto",
"r-rule-details": "Detalhes da regra",
"r-d-move-to-top-gen": "Mover cartão para o topo da sua lista",
@@ -778,33 +780,33 @@
"show-desktop-drag-handles": "Show desktop drag handles",
"assignee": "Assignee",
"cardAssigneesPopup-title": "Assignee",
"addmore-detail": "Add a more detailed description",
"addmore-detail": "Adicionar uma descrição mais detalhada",
"show-on-card": "Show on Card",
"new": "New",
"editUserPopup-title": "Edit User",
"newUserPopup-title": "New User",
"notifications": "Notifications",
"view-all": "View All",
"filter-by-unread": "Filter by Unread",
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename",
"new": "Novo",
"editUserPopup-title": "Editar Utilizador",
"newUserPopup-title": "Novo Utilizador",
"notifications": "Notificações",
"view-all": "Ver Todos",
"filter-by-unread": "Filtrar por não lidos",
"mark-all-as-read": "Marcar todos como lidos",
"remove-all-read": "Apagar todos os lidos",
"allow-rename": "Permitir Renomear",
"allowRenamePopup-title": "Permitir Renomear",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday",
"monday": "Segunda-feira",
"tuesday": "Terça-feira",
"wednesday": "Quarta-feira",
"thursday": "Quinta-feira",
"friday": "Sexta-feira",
"saturday": "Sábado",
"sunday": "Domingo",
"status": "Status",
"swimlane": "Swimlane",
"owner": "Owner",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"last-modified-at": "Modificado pela última vez em",
"last-activity": "Última actividade",
"voting": "Voting",
"archived": "Archived",
"archived": "Arquivado",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
}
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+4 -2
View File
@@ -256,6 +256,8 @@
"current": "текущий",
"custom-field-delete-pop": "Отменить нельзя. Это удалит настраиваемое поле со всех карт и уничтожит его историю.",
"custom-field-checkbox": "Галочка",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Дата",
"custom-field-dropdown": "Выпадающий список",
"custom-field-dropdown-none": "(нет)",
@@ -805,6 +807,6 @@
"last-activity": "Последние действия",
"voting": "Голосование",
"archived": "Архивировано",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
"delete-linked-card-before-this-card": "Вы не можете удалить карточку, не удалив связанную c ней карточку, которая имеет ",
"delete-linked-cards-before-this-list": "Вы не можете удалить этот список, не удалив карточки, которые указывают на карточки в этом списке"
}
+2
View File
@@ -256,6 +256,8 @@
"current": "trenutno",
"custom-field-delete-pop": "Razveljavitve ni. To bo odstranilo to poljubno polje iz vseh kartic in izbrisalo njegovo zgodovino.",
"custom-field-checkbox": "Potrditveno polje",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Datum",
"custom-field-dropdown": "Spustni seznam",
"custom-field-dropdown-none": "(nobeno)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Datum",
"custom-field-dropdown": "Padajuća lista",
"custom-field-dropdown-none": "(ništa)",
+2
View File
@@ -256,6 +256,8 @@
"current": "aktuell",
"custom-field-delete-pop": "Det går inte att ångra. Detta tar bort det här anpassade fältet från alla kort och förstör dess historia.",
"custom-field-checkbox": "Kryssruta",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Datum",
"custom-field-dropdown": "Rullgardingsmeny",
"custom-field-dropdown-none": "(inga)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "நாள் ",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "ปัจจุบัน",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "วันที่",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "mevcut",
"custom-field-delete-pop": "Bunun geri dönüşü yoktur. Bu özel alan tüm kartlardan kaldırılıp tarihçesi yokedilecektir.",
"custom-field-checkbox": "İşaret kutusu",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Tarih",
"custom-field-dropdown": "Açılır liste",
"custom-field-dropdown-none": "(hiçbiri)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+27 -25
View File
@@ -164,15 +164,15 @@
"cardStartVotingPopup-title": "建立投票",
"positiveVoteMembersPopup-title": "支持",
"negativeVoteMembersPopup-title": "反对",
"card-edit-voting": "Edit voting",
"editVoteEndDatePopup-title": "Change vote end date",
"allowNonBoardMembers": "Allow all logged in users",
"card-edit-voting": "编辑投票",
"editVoteEndDatePopup-title": "修改投票截止日期",
"allowNonBoardMembers": "允许所有已登入账户",
"vote-question": "投票题目",
"vote-public": "查看投票结果",
"vote-for-it": "同意",
"vote-against": "反对",
"deleteVotePopup-title": "Delete vote?",
"vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.",
"deleteVotePopup-title": "删除投票?",
"vote-delete-pop": "永久删除。此操作会将所有数据删除掉。",
"cardDeletePopup-title": "彻底删除卡片?",
"cardDetailsActionsPopup-title": "卡片操作",
"cardLabelsPopup-title": "标签",
@@ -256,6 +256,8 @@
"current": "当前",
"custom-field-delete-pop": "没有撤销,此动作将从所有卡片中移除自定义字段并销毁历史。",
"custom-field-checkbox": "选择框",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "日期",
"custom-field-dropdown": "下拉列表",
"custom-field-dropdown-none": "(无)",
@@ -309,7 +311,7 @@
"error-board-notAMember": "需要成为看板成员才能执行此操作",
"error-json-malformed": "文本不是合法的 JSON",
"error-json-schema": "JSON 数据没有用正确的格式包含合适的信息",
"error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format",
"error-csv-schema": "CSV(逗号分隔值)/TSV(制表符分隔值)数据格式的不正确",
"error-list-doesNotExist": "不存在此列表",
"error-user-doesNotExist": "该用户不存在",
"error-user-notAllowSelf": "无法邀请自己",
@@ -317,10 +319,10 @@
"error-username-taken": "此用户名已存在",
"error-email-taken": "此EMail已存在",
"export-board": "导出看板",
"export-board-json": "Export board to JSON",
"export-board-csv": "Export board to CSV",
"export-board-tsv": "Export board to TSV",
"export-board-html": "Export board to HTML",
"export-board-json": "看板导出为JSON",
"export-board-csv": "看板导出为CSV",
"export-board-tsv": "看板导出为TSV",
"export-board-html": "看板导出为HTML",
"exportBoardPopup-title": "导出看板",
"sort": "排序",
"sort-desc": "点此来将列表排序",
@@ -357,16 +359,16 @@
"import-board-c": "导入看板",
"import-board-title-trello": "从Trello导入看板",
"import-board-title-wekan": "从以前的导出数据导入看板",
"import-board-title-csv": "Import board from CSV/TSV",
"import-board-title-csv": "导入CSV/TSV看板",
"from-trello": "自 Trello",
"from-wekan": "自以前的导出",
"from-csv": "From CSV/TSV",
"from-csv": "从CSV/TSV",
"import-board-instruction-trello": "在你的Trello看板中,点击“菜单”,然后选择“更多”,“打印与导出”,“导出为 JSON” 并拷贝结果文本",
"import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .",
"import-board-instruction-csv": "粘贴逗号分隔值(CSV)/制表符分隔值(TSV)。",
"import-board-instruction-wekan": "在您的看板,点击“菜单”,然后“导出看板”,复制下载文件中的文本。",
"import-board-instruction-about-errors": "如果在导入看板时出现错误,导入工作可能仍然在进行中,并且看板已经出现在全部看板页。",
"import-json-placeholder": "粘贴您有效的 JSON 数据至此",
"import-csv-placeholder": "Paste your valid CSV/TSV data here",
"import-csv-placeholder": "在此处粘贴有效的CSV/TSV数据",
"import-map-members": "映射成员",
"import-members-map": "您导入的看板有一些成员,请映射这些成员到您导入的用户。",
"import-show-user-mapping": "核对成员映射",
@@ -399,7 +401,7 @@
"swimlaneActionPopup-title": "泳道图操作",
"swimlaneAddPopup-title": "在下面添加一个泳道",
"listImportCardPopup-title": "导入 Trello 卡片",
"listImportCardsTsvPopup-title": "Import Excel CSV/TSV",
"listImportCardsTsvPopup-title": "导入Excel CSV/TSV",
"listMorePopup-title": "更多",
"link-list": "关联到这个列表",
"list-delete-pop": "所有活动将被从活动动态中删除并且你无法恢复他们,此操作无法撤销。",
@@ -639,7 +641,7 @@
"r-when-a-card": "当一张卡片",
"r-is": "是",
"r-is-moved": "已经移动",
"r-added-to": "Added to",
"r-added-to": "添加到",
"r-removed-from": "已移除",
"r-the-board": "该看板",
"r-list": "列表",
@@ -798,13 +800,13 @@
"friday": "周五",
"saturday": "周六",
"sunday": "周日",
"status": "Status",
"swimlane": "Swimlane",
"owner": "Owner",
"last-modified-at": "Last modified at",
"last-activity": "Last activity",
"voting": "Voting",
"archived": "Archived",
"delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has",
"delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list"
"status": "状态",
"swimlane": "泳道",
"owner": "所有者",
"last-modified-at": "上次修改时间",
"last-activity": "上次活动",
"voting": "投票",
"archived": "存档",
"delete-linked-card-before-this-card": "在你首次删除卡片前你无法删除此选项卡片",
"delete-linked-cards-before-this-list": "在首先删除指向此列表中的卡的链接卡之前,不能删除此列表"
}
+2
View File
@@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
+3 -1
View File
@@ -256,6 +256,8 @@
"current": "目前",
"custom-field-delete-pop": "此操作將會從所有卡片中移除自訂欄位以及銷毀歷史紀錄,並且無法撤消。",
"custom-field-checkbox": "複選框",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Code",
"custom-field-date": "日期",
"custom-field-dropdown": "下拉式選單",
"custom-field-dropdown-none": "(無)",
@@ -747,7 +749,7 @@
"error-ldap-login": "嘗試登入時出現錯誤",
"display-authentication-method": "顯示認證方式",
"default-authentication-method": "預設認證方式",
"duplicate-board": "重複的看板",
"duplicate-board": "複製看板",
"people-number": "人數是:",
"swimlaneDeletePopup-title": "是否刪除泳道?",
"swimlane-delete-pop": "所有動作將從活動來源中刪除,您將無法恢復泳道。此操作無法還原。",
+3
View File
@@ -255,6 +255,9 @@ Boards.attachSchema(
'dark',
'relax',
'corteza',
'clearblue',
'natural',
'modern',
],
// eslint-disable-next-line consistent-return
autoValue() {
+100 -1
View File
@@ -278,7 +278,7 @@ Cards.attachSchema(
*/
type: Number,
decimal: true,
defaultValue: '',
defaultValue: 0,
},
subtaskSort: {
/**
@@ -530,6 +530,7 @@ Cards.helpers({
},
cover() {
if (!this.coverId) return false;
const cover = Attachments.findOne(this.coverId);
// if we return a cover before it is fully stored, we will get errors when we try to display it
// todo XXX we could return a default "upload pending" image in the meantime?
@@ -1254,6 +1255,48 @@ Cards.mutations({
};
},
moveToEndOfList({ listId } = {}) {
let swimlaneId = this.swimlaneId;
const boardId = this.boardId;
let sortIndex = 0;
// This should never happen, but there was a bug that was fixed in commit
// ea0239538a68e225c867411a4f3e0d27c158383.
if (!swimlaneId) {
const board = Boards.findOne(boardId);
swimlaneId = board.getDefaultSwimline()._id;
}
// Move the minicard to the end of the target list
let parentElementDom = $(`#swimlane-${this.swimlaneId}`).get(0);
if (!parentElementDom) parentElementDom = $(':root');
const lastCardDom = $(parentElementDom)
.find(`#js-list-${listId} .js-minicard:last`)
.get(0);
if (lastCardDom) sortIndex = Utils.calculateIndex(lastCardDom, null).base;
return this.moveOptionalArgs({
boardId,
swimlaneId,
listId,
sort: sortIndex,
});
},
moveOptionalArgs({ boardId, swimlaneId, listId, sort } = {}) {
boardId = boardId || this.boardId;
swimlaneId = swimlaneId || this.swimlaneId;
// This should never happen, but there was a bug that was fixed in commit
// ea0239538a68e225c867411a4f3e0d27c158383.
if (!swimlaneId) {
const board = Boards.findOne(boardId);
swimlaneId = board.getDefaultSwimline()._id;
}
listId = listId || this.listId;
if (sort === undefined || sort === null) sort = this.sort;
return this.move(boardId, swimlaneId, listId, sort);
},
move(boardId, swimlaneId, listId, sort) {
// Copy Custom Fields
if (this.boardId !== boardId) {
@@ -2125,6 +2168,11 @@ if (Meteor.isServer) {
title: doc.title,
description: doc.description,
listId: doc.listId,
receivedAt: doc.receivedAt,
startAt: doc.startAt,
dueAt: doc.dueAt,
endAt: doc.endAt,
assignees: doc.assignees,
};
}),
});
@@ -2161,6 +2209,11 @@ if (Meteor.isServer) {
_id: doc._id,
title: doc.title,
description: doc.description,
receivedAt: doc.receivedAt,
startAt: doc.startAt,
dueAt: doc.dueAt,
endAt: doc.endAt,
assignees: doc.assignees,
};
}),
});
@@ -2639,6 +2692,52 @@ if (Meteor.isServer) {
});
},
);
/**
* @operation get_cards_by_custom_field
* @summary Get all Cards that matchs a value of a specific custom field
*
* @param {string} boardId the board ID
* @param {string} customFieldId the list ID
* @param {string} customFieldValue the value to look for
* @return_type [{_id: string,
* title: string,
* description: string,
* listId: string
* swinlaneId: string}]
*/
JsonRoutes.add(
'GET',
'/api/boards/:boardId/cardsByCustomField/:customFieldId/:customFieldValue',
function(req, res) {
const paramBoardId = req.params.boardId;
const paramCustomFieldId = req.params.customFieldId;
const paramCustomFieldValue = req.params.customFieldValue;
Authentication.checkBoardAccess(req.userId, paramBoardId);
JsonRoutes.sendResult(res, {
code: 200,
data: Cards.find({
boardId: paramBoardId,
customFields: {
$elemMatch: {
_id: paramCustomFieldId,
value: paramCustomFieldValue,
},
},
archived: false,
}).map(function(doc) {
return {
_id: doc._id,
title: doc.title,
description: doc.description,
listId: doc.listId,
swinlaneId: doc.swinlaneId,
};
}),
});
},
);
}
export default Cards;
+3 -1
View File
@@ -70,7 +70,9 @@ Checklists.helpers({
this._id = null;
this.cardId = newCardId;
const newChecklistId = Checklists.insert(this);
ChecklistItems.find({ checklistId: oldChecklistId }).forEach(item => {
ChecklistItems.find({ checklistId: oldChecklistId }).forEach(function(
item,
) {
item._id = null;
item.checklistId = newChecklistId;
item.cardId = newCardId;
+97 -16
View File
@@ -50,6 +50,7 @@ export class CsvCreator {
*/
mapHeadertoCardFieldIndex(headerRow) {
const index = {};
index.customFields = [];
for (let i = 0; i < headerRow.length; i++) {
switch (headerRow[i].trim().toLowerCase()) {
case 'title':
@@ -98,9 +99,61 @@ export class CsvCreator {
index.modifiedAt = i;
break;
}
if (headerRow[i].toLowerCase().startsWith('customfield')) {
if (headerRow[i].split('-')[2] === 'dropdown') {
index.customFields.push({
name: headerRow[i].split('-')[1],
type: headerRow[i].split('-')[2],
options: headerRow[i].split('-')[3].split('/'),
position: i,
});
} else if (headerRow[i].split('-')[2] === 'currency') {
index.customFields.push({
name: headerRow[i].split('-')[1],
type: headerRow[i].split('-')[2],
currencyCode: headerRow[i].split('-')[3],
position: i,
});
} else {
index.customFields.push({
name: headerRow[i].split('-')[1],
type: headerRow[i].split('-')[2],
position: i,
});
}
}
}
this.fieldIndex = index;
}
createCustomFields(boardId) {
this.fieldIndex.customFields.forEach(customField => {
let settings = {};
if (customField.type === 'dropdown') {
settings = {
dropdownItems: customField.options.map(option => {
return { _id: Random.id(6), name: option };
}),
};
} else if (customField.type === 'currency') {
settings = {
currencyCode: customField.currencyCode,
};
} else {
settings = {};
}
const id = CustomFields.direct.insert({
name: customField.name,
type: customField.type,
settings,
showOnCard: false,
automaticallyOnCard: false,
showLabelOnMiniCard: false,
boardIds: [boardId],
});
customField.id = id;
customField.settings = settings;
});
}
createBoard(csvData) {
const boardToCreate = {
@@ -228,9 +281,10 @@ export class CsvCreator {
const cardToCreate = {
archived: false,
boardId,
createdAt: csvData[i][this.fieldIndex.createdAt]
? this._now(new Date(csvData[i][this.fieldIndex.createdAt]))
: null,
createdAt:
csvData[i][this.fieldIndex.createdAt] !== ' ' || ''
? this._now(new Date(csvData[i][this.fieldIndex.createdAt]))
: null,
dateLastActivity: this._now(),
description: csvData[i][this.fieldIndex.description],
listId: this.lists[csvData[i][this.fieldIndex.stage]],
@@ -238,20 +292,24 @@ export class CsvCreator {
sort: -1,
title: csvData[i][this.fieldIndex.title],
userId: this._user(),
startAt: csvData[i][this.fieldIndex.startAt]
? this._now(new Date(csvData[i][this.fieldIndex.startAt]))
: null,
dueAt: csvData[i][this.fieldIndex.dueAt]
? this._now(new Date(csvData[i][this.fieldIndex.dueAt]))
: null,
endAt: csvData[i][this.fieldIndex.endAt]
? this._now(new Date(csvData[i][this.fieldIndex.endAt]))
: null,
startAt:
csvData[i][this.fieldIndex.startAt] !== ' ' || ''
? this._now(new Date(csvData[i][this.fieldIndex.startAt]))
: null,
dueAt:
csvData[i][this.fieldIndex.dueAt] !== ' ' || ''
? this._now(new Date(csvData[i][this.fieldIndex.dueAt]))
: null,
endAt:
csvData[i][this.fieldIndex.endAt] !== ' ' || ''
? this._now(new Date(csvData[i][this.fieldIndex.endAt]))
: null,
spentTime: null,
labelIds: [],
modifiedAt: csvData[i][this.fieldIndex.modifiedAt]
? this._now(new Date(csvData[i][this.fieldIndex.modifiedAt]))
: null,
modifiedAt:
csvData[i][this.fieldIndex.modifiedAt] !== ' ' || ''
? this._now(new Date(csvData[i][this.fieldIndex.modifiedAt]))
: null,
};
// add the labels
if (csvData[i][this.fieldIndex.labels]) {
@@ -290,7 +348,29 @@ export class CsvCreator {
cardToCreate.members = wekanMembers;
}
}
Cards.direct.insert(cardToCreate);
// add the custom fields
if (this.fieldIndex.customFields.length > 0) {
const customFields = [];
this.fieldIndex.customFields.forEach(customField => {
if (csvData[i][customField.position] !== ' ') {
if (customField.type === 'dropdown') {
customFields.push({
_id: customField.id,
value: customField.settings.dropdownItems.find(
({ name }) => name === csvData[i][customField.position],
)._id,
});
} else {
customFields.push({
_id: customField.id,
value: csvData[i][customField.position],
});
}
}
cardToCreate.customFields = customFields;
});
Cards.direct.insert(cardToCreate);
}
}
}
@@ -307,6 +387,7 @@ export class CsvCreator {
const boardId = this.createBoard(board);
this.createLists(board, boardId);
this.createSwimlanes(boardId);
this.createCustomFields(boardId);
this.createCards(board, boardId);
return boardId;
}
+5 -1
View File
@@ -22,7 +22,7 @@ CustomFields.attachSchema(
* type of the custom field
*/
type: String,
allowedValues: ['text', 'number', 'date', 'dropdown'],
allowedValues: ['text', 'number', 'date', 'dropdown', 'currency'],
},
settings: {
/**
@@ -30,6 +30,10 @@ CustomFields.attachSchema(
*/
type: Object,
},
'settings.currencyCode': {
type: String,
optional: true,
},
'settings.dropdownItems': {
/**
* list of drop down items objects
Loaded 100 of 135 files, more files were not shown because too many files have changed in this diff. Show more