diff options
author | Unknown <unknown@example.com> | 2020-07-21 16:11:51 +0200 |
---|---|---|
committer | Unknown <unknown@example.com> | 2020-07-21 16:11:51 +0200 |
commit | ca8f2a70a4469c961e39354b14d41841a19ad6d7 (patch) | |
tree | a24489d015d1860fa5b6c757706d0b3aecff26f7 | |
parent | 232bc746f4b2d09945fdfe68e3aa14ff6f4e79f6 (diff) | |
parent | f6e9f5a5e8423fed9eaadaf196b46273eca241d0 (diff) | |
download | wekan-ca8f2a70a4469c961e39354b14d41841a19ad6d7.tar.gz wekan-ca8f2a70a4469c961e39354b14d41841a19ad6d7.tar.bz2 wekan-ca8f2a70a4469c961e39354b14d41841a19ad6d7.zip |
Merge remote-tracking branch 'origin/master'
114 files changed, 3532 insertions, 1376 deletions
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2270e43d..7d7908b6 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive ENV \ DEBUG=false \ - NODE_VERSION=12.18.0 \ + NODE_VERSION=12.18.2 \ METEOR_RELEASE=1.10.2 \ USE_EDGE=false \ METEOR_EDGE=1.5-beta.17 \ diff --git a/.future-snap/broken-snapcraft.yaml b/.future-snap/broken-snapcraft.yaml index eab2bbaf..b2290ba6 100644 --- a/.future-snap/broken-snapcraft.yaml +++ b/.future-snap/broken-snapcraft.yaml @@ -81,7 +81,7 @@ parts: wekan: source: . plugin: nodejs - node-engine: 12.18.0 + node-engine: 12.18.2 node-packages: - node-gyp - node-pre-gyp diff --git a/.future-snap/snapcraft.yaml b/.future-snap/snapcraft.yaml index 43430791..e2582058 100644 --- a/.future-snap/snapcraft.yaml +++ b/.future-snap/snapcraft.yaml @@ -83,7 +83,7 @@ parts: wekan: source: . plugin: nodejs - node-engine: 12.18.0 + node-engine: 12.18.2 node-packages: - node-gyp - node-pre-gyp diff --git a/.meteor/packages b/.meteor/packages index ba278f34..cb115111 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -98,3 +98,4 @@ percolate:synced-cron easylogic:summernote cfs:filesystem ostrio:cookies +tmeasday:check-npm-versions diff --git a/.meteor/versions b/.meteor/versions index 127079d4..1d8b71bc 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,7 +1,7 @@ 3stack:presence@1.1.2 accounts-base@1.6.0 accounts-oauth@1.2.0 -accounts-password@1.6.0 +accounts-password@1.6.1 aldeed:collection2@2.10.0 aldeed:collection2-core@1.2.0 aldeed:schema-deny@1.1.0 @@ -52,7 +52,7 @@ ddp@1.4.0 ddp-client@2.3.3 ddp-common@1.4.0 ddp-rate-limiter@1.0.7 -ddp-server@2.3.1 +ddp-server@2.3.2 deps@1.0.12 diff-sequence@1.1.1 dynamic-import@0.5.2 @@ -91,7 +91,7 @@ logging@1.1.20 lucasantoniassi:accounts-lockout@1.0.0 matb33:collection-hooks@0.9.1 matteodem:easy-search@1.6.4 -mdg:meteor-apm-agent@3.2.5 +mdg:meteor-apm-agent@3.2.6 mdg:validation-error@0.5.1 meteor@1.9.3 meteor-base@1.4.0 @@ -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.2 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.26.0 +momentjs:moment@2.27.0 mongo@1.10.0 mongo-decimal@0.1.1 mongo-dev-server@1.1.0 @@ -162,14 +162,14 @@ simple:json-routes@2.1.0 simple:rest-accounts-password@1.1.2 simple:rest-bearer-token-parser@1.0.1 simple:rest-json-error-handler@1.0.1 -socket-stream-client@0.3.0 +socket-stream-client@0.3.1 softwarerero:accounts-t9n@1.3.11 spacebars@1.0.15 spacebars-compiler@1.1.3 srp@1.1.0 standard-minifier-css@1.6.0 standard-minifier-js@2.6.0 -staringatlights:fast-render@3.2.0 +staringatlights:fast-render@3.3.0 staringatlights:inject-data@2.3.0 tap:i18n@1.8.2 templates:tabs@2.3.0 @@ -177,11 +177,12 @@ 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 underscore@1.0.10 -url@1.3.0 +url@1.3.1 useraccounts:core@1.14.2 useraccounts:flow-routing@1.14.2 useraccounts:unstyled@1.14.2 @@ -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.8 +wekan-markdown@1.0.9 wekan-oidc@1.0.12 wekan-scrollbar@3.1.3 yasaricli:slugify@0.0.7 diff --git a/.travis.yml b/.travis.yml index f55c7bab..17e0634b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ sudo: required env: TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0 - TRAVIS_NODE_VERSION: 12.18.0 + TRAVIS_NODE_VERSION: 12.18.2 TRAVIS_NPM_VERSION: latest before_install: diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f2e1d6b..472ec032 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,200 @@ +# v4.20 2020-07-20 Wekan release + +This release adds the following updates: + +- Update dependencies [Part1](https://github.com/wekan/wekan/commit/419615bed43b6e9de4030193c47137a066b85bde) and + [Part2](https://github.com/wekan/wekan/commit/116372e11e09ce9b8376a8694553add595e02815). + Thanks to developers of dependencies and xet7. + +and fixes the following bugs: + +- [Change slug on card rename](https://github.com/wekan/wekan/pull/3214). + Thanks to NicoP-S. +- [Add missing Wekan logo sizes for PWAs and Apps](https://github.com/wekan/wekan/commit/de28bf8569a7373a5d6fd60a4f413e76673adc26). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.19 2020-07-18 Wekan release + +This release adds the following features: + +- [Add support for EdgeHTML browser (Microsoft Legacy Edge, not based on Chromium) by removing incompatible csv-stringify package. + CSV export will be fixed later](https://github.com/wekan/wekan/commit/b9a4b0b51d3692fcbb715b1afc875f21cd204ae5). + Thanks to xet7. + +and adds the following updates: + +- Update dependencies [Part1](https://github.com/wekan/wekan/commit/23ee93ca3d4ea161a93627a8e28e1ce93eea1bab), + [Part2](https://github.com/wekan/wekan/commit/6646d48ccbaf04c4935de35fe037eff3bd7fd469), + [Part3](https://github.com/wekan/wekan/commit/87cb4598f745a362aaac06b8b457198c40aaf61e), + [Part4](https://github.com/wekan/wekan/commit/f57ed2990f5c6e1af10d270b24c7092805711afe). + Thanks to developers of dependencies and xet7. + +and fixes the following bugs: + +- [Checklist Item PUT API: boolean cast on isFinished](https://github.com/wekan/wekan/pull/3211). + Thanks to Robert-Lebedeu. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.18 2020-07-10 Wekan release + +This release adds the following updates: + +- [Upgrade to Node 12.18.2](https://github.com/wekan/wekan/commit/6e4407ed9cb3c95a99e0dbbb4383324dd57d6be1). + Thanks to Node developers and xet7. +- [Update dependencies](https://github.com/wekan/wekan/commit/05cd1247ab935f586d747743bb9cd79d23e0b1e6). + Thanks to dependency developers and xet7. + +and fixes the following bugs: + +- [All logged in users are now allowed to reorder boards by dragging at All Boards page and Public Boards page](https://github.com/wekan/wekan/commit/ba24c4e40c728d030504ed21ccf79247d0449e1b). + Thanks to xet7. +- [Fix running meteor for dev in rebuild-wekan.sh](https://github.com/wekan/wekan/commit/a77cf56fbdaf0b74d8b97aa41b0a88fee85e3ee1). + Thanks to xet7. +- [Fix start-wekan.bat](https://github.com/wekan/wekan/commit/0be1c00fccef8797a1b3612593a6623a9b465e0d) and + [Windows bundle install](https://github.com/wekan/wekan/wiki/Windows#a-bundle-with-windows-nodemongodb). + Thanks to xet7. +- [Fix typo](https://github.com/wekan/wekan/pull/3197). + Thanks to Lua00808. +- [Fix creating user misbehaving in some special case](https://github.com/wekan/wekan/pull/3206). + Thanks to salleman33. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.17 2020-06-18 Wekan release + +This release fixes the following bugs: + +- [Revert finding correct user changes that were made at Wekan v4.16](https://github.com/wekan/wekan/commit/5eb378452761ad1d6d67a491316007fdf6dfd689). + Thanks to xet7. +- [Fix activities view on mobile devices](https://github.com/wekan/wekan/pull/3183). + Thanks to marc1006. +- [Add back checks about can user export CSV/TSV](https://github.com/wekan/wekan/commit/afe00d02cddf016a3ccc1ed9a98a7f10d3339f26). + Thanks to marc1006 and xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.16 2020-06-17 Wekan release + +This release adds the following features: + +- [Add find-replace.sh script for development](https://github.com/wekan/wekan/commit/bda49ed60947e0438206b2f55119f5c5c132c734). + Thanks to xet7. + +and adds the following updates: + +- [Upgrade to Node 12.18.1](https://github.com/wekan/wekan/commit/b11ae567c9b2d16a115ea4f3f7f88e67d076f326). + Thanks to Node developers and xet7. + +and fixes the following bugs: + +- [OpenAPI: Fix jsdoc/operation matching](https://github.com/wekan/wekan/pull/3171). + Thanks to bentiss. +- Fix finding corrent user [Part1](https://github.com/wekan/wekan/pull/3180) and + [Part2](https://github.com/wekan/wekan/commit/f245b6b7faa29b4f276527daca48c305fe9689c1). + Thanks to salleman33 and xet7. +- [Try to prevent errors on CSV/TSV export](https://github.com/wekan/wekan/commit/b00db983c8506e0cdc9968e452c3c8025fc10776). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.15 2020-06-16 Wekan release + +This release fixes the following bugs: + +- Fix lint errors [Part1](https://github.com/wekan/wekan/commit/f1587753cb0bba38e4b1df2e0300d3dc2826da72) and + [Part2](https://github.com/wekan/wekan/commit/e6629779f77676eadfe4465c407f0bee0ec64061). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.14 2020-06-16 Wekan release + +This release adds the following new features: + +- [Add user option to hide finished checklist items. Strikethrough checked items](https://github.com/wekan/wekan/pull/3167). + Thanks to marc1006. +- [Added the possibility to start a vote via API edit_card. And added some better visibility to see what was voted](https://github.com/wekan/wekan/pull/3170). + Thanks to NicoP-S. + +and adds the following updates: + +- [Update dependencies](https://github.com/wekan/wekan/commit/8f34cdc279602e97085e0a504f7716495349f83c). + Thanks to xet7. + +and fixes the following bugs: + +- [Fix infinite scrolling for activities](https://github.com/wekan/wekan/pull/3168). + Thanks to marc1006. +- [Remove top and bottom margin for hidden checklist items](https://github.com/wekan/wekan/pull/3172). + Thanks to marc1006. +- [Alignment and spacing of minicard labels](https://github.com/wekan/wekan/pull/3174). + Thanks to hgustafsson. +- [Fix: Unable to delete a custom field in a board](https://github.com/wekan/wekan/commit/3b2b1087447bc8613baa8254bfec55e3d485bdc4). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v4.13 2020-06-09 Wekan release + +This release adds the following updates: + +- [OpenShift template updates](https://github.com/wekan/wekan/pull/3158), Thanks to jimmyjones2: + 1) Remove status fields (this is created by Kubernetes at run time) + 2) The latest MongoDB by default available with OpenShift is 3.6 + 3) Change MongoDB service name to contain wekan to avoid potentially conflicting with other mongodb instances in the same project. + +and fixes the following bugs: + +- [Copy the labels only if the target board is different](https://github.com/wekan/wekan/pull/3154). + Thanks to marc1006. +- [Fix condition whether a card is in list](https://github.com/wekan/wekan/pull/3165). + Thanks to marc1006. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# 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: @@ -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.18.0 \ + NODE_VERSION=v12.18.2 \ METEOR_RELEASE=1.10.2 \ USE_EDGE=false \ METEOR_EDGE=1.5-beta.17 \ diff --git a/Dockerfile.arm64v8 b/Dockerfile.arm64v8 index ae6dd5f6..b25f2bb4 100644 --- a/Dockerfile.arm64v8 +++ b/Dockerfile.arm64v8 @@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder ENV QEMU_VERSION=v4.2.0-6 \ QEMU_ARCHITECTURE=aarch64 \ NODE_ARCHITECTURE=linux-arm64 \ - NODE_VERSION=v12.18.0 \ + NODE_VERSION=v12.18.2 \ WEKAN_VERSION=3.96 \ WEKAN_ARCHITECTURE=arm64 @@ -40,7 +40,7 @@ LABEL maintainer="wekan" # Set the environment variables (defaults where required) ENV QEMU_ARCHITECTURE=aarch64 \ NODE_ARCHITECTURE=linux-arm64 \ - NODE_VERSION=v12.18.0 \ + NODE_VERSION=v12.18.2 \ NODE_ENV=production \ NPM_VERSION=latest \ WITH_API=true \ diff --git a/Stackerfile.yml b/Stackerfile.yml index 61c3db38..2e19adc1 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.11.0" +appVersion: "v4.20.0" files: userUploads: - README.md diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index c86936a0..77acd6a3 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -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 }} diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 5d356f6e..83843d1d 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -1,3 +1,5 @@ +import sanitizeXss from 'xss'; + const activitiesPerPage = 20; BlazeComponent.extendComponent({ @@ -5,8 +7,9 @@ BlazeComponent.extendComponent({ // XXX Should we use ReactiveNumber? this.page = new ReactiveVar(1); this.loadNextPageLocked = false; - const sidebar = this.parentComponent(); // XXX for some reason not working - sidebar.callFirstWith(null, 'resetNextPeak'); + // TODO is sidebar always available? E.g. on small screens/mobile devices + const sidebar = Sidebar; + sidebar && sidebar.callFirstWith(null, 'resetNextPeak'); this.autorun(() => { let mode = this.data().mode; const capitalizedMode = Utils.capitalize(mode); @@ -27,6 +30,8 @@ BlazeComponent.extendComponent({ this.subscribe('activities', mode, searchId, limit, hideSystem, () => { this.loadNextPageLocked = false; + // TODO the guard can be removed as soon as the TODO above is resolved + if (!sidebar) return; // If the sibear peak hasn't increased, that mean that there are no more // activities, and we can stop calling new subscriptions. // XXX This is hacky! We need to know excatly and reactively how many @@ -41,23 +46,22 @@ BlazeComponent.extendComponent({ }); }); }, -}).register('activities'); - -BlazeComponent.extendComponent({ loadNextPage() { if (this.loadNextPageLocked === false) { this.page.set(this.page.get() + 1); this.loadNextPageLocked = true; } }, +}).register('activities'); +BlazeComponent.extendComponent({ checkItem() { const checkItemId = this.currentData().activity.checklistItemId; const checkItem = ChecklistItems.findOne({ _id: checkItemId }); return checkItem && checkItem.title; }, - boardLabel() { + boardLabelLink() { const data = this.currentData(); if (data.mode !== 'board') { return createBoardLink(data.activity.board(), data.activity.listName); @@ -65,10 +69,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 +138,11 @@ BlazeComponent.extendComponent({ { href: source.url, }, - source.system, + sanitizeXss(source.system), ), ); } else { - return source.system; + return sanitizeXss(source.system); } } return null; @@ -162,10 +166,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 +206,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 +222,7 @@ function createCardLink(card) { href: card.absoluteUrl(), class: 'action-card', }, - card.title, + sanitizeXss(card.title), ), ) ); @@ -228,7 +239,7 @@ function createBoardLink(board, list) { href: board.absoluteUrl(), class: 'action-board', }, - text, + sanitizeXss(text), ), ) ); diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 4c0edac4..1daf0618 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -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( @@ -173,13 +173,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 i.fa.fa-th-large.colorful @@ -187,6 +180,13 @@ template(name="boardChangeViewPopup") 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 i.fa.fa-calendar.colorful diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js index eee119ea..145f6789 100644 --- a/client/components/boards/boardsList.js +++ b/client/components/boards/boardsList.js @@ -25,10 +25,6 @@ BlazeComponent.extendComponent({ }, onRendered() { - function userIsAllowedToMove() { - return Meteor.user(); - } - const itemsSelector = '.js-board:not(.placeholder)'; const $boards = this.$('.js-boards'); @@ -77,8 +73,6 @@ BlazeComponent.extendComponent({ handle: '.board-handle', }); } - - $boards.sortable('option', 'disabled', !userIsAllowedToMove()); }); }, diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 2aa77627..dabee971 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -220,8 +220,14 @@ template(name="cardDetails") +viewer = getVoteQuestion if showVotingButtons - button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}") {{_ 'vote-for-it'}} - button.card-details-red.js-vote.js-vote-negative(class="{{#if $eq voteState false}}voted{{/if}}") {{_ 'vote-against'}} + button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}") + if voteState + i.fa.fa-thumbs-up + | {{_ 'vote-for-it'}} + button.card-details-red.js-vote.js-vote-negative(class="{{#if $eq voteState false}}voted{{/if}}") + if $eq voteState false + i.fa.fa-thumbs-down + | {{_ 'vote-against'}} //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 11e010d4..a91d9b6e 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -38,22 +38,6 @@ BlazeComponent.extendComponent({ Meteor.subscribe('unsaved-edits'); }, - voteState() { - const card = this.currentData(); - const userId = Meteor.userId(); - let state; - if (card.vote) { - if (card.vote.positive) { - state = _.contains(card.vote.positive, userId); - if (state === true) return true; - } - if (card.vote.negative) { - state = _.contains(card.vote.negative, userId); - if (state === true) return false; - } - } - return null; - }, isWatching() { const card = this.currentData(); return card.findWatcher(Meteor.userId()); @@ -412,9 +396,9 @@ BlazeComponent.extendComponent({ const forIt = $(e.target).hasClass('js-vote-positive'); let newState = null; if ( - this.voteState() === null || - (this.voteState() === false && forIt) || - (this.voteState() === true && !forIt) + this.data().voteState() === null || + (this.data().voteState() === false && forIt) || + (this.data().voteState() === true && !forIt) ) { newState = forIt; } diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index 1b1e088a..25aa11b9 100644 --- a/client/components/cards/checklists.jade +++ b/client/components/cards/checklists.jade @@ -1,7 +1,17 @@ template(name="checklists") - h3 - i.fa.fa-check - | {{_ 'checklists'}} + .checklists-title + h3 + i.fa.fa-check + | {{_ 'checklists'}} + if currentUser.isBoardMember + .material-toggle-switch + span.toggle-switch-title {{_ 'hide-checked-items'}} + if hideCheckedItems + input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton" checked="checked") + else + input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton") + label.toggle-label(for="toggleHideCheckedItemsButton") + if toggleDeleteDialog.get .board-overlay#card-details-overlay +checklistDeleteDialog(checklist = checklistToDelete) @@ -86,7 +96,7 @@ template(name="checklistItems") | {{_ 'add-checklist-item'}}... template(name='checklistItemDetail') - .js-checklist-item.checklist-item + .js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}") if canModifyCard .check-box-container .check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}") diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 29573d2b..17faa773 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -193,6 +193,9 @@ BlazeComponent.extendComponent({ } this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get()); }, + 'click #toggleHideCheckedItemsButton'() { + Meteor.call('toggleHideCheckedItems'); + }, }; return [ @@ -211,6 +214,14 @@ BlazeComponent.extendComponent({ }, }).register('checklists'); +Template.checklists.helpers({ + hideCheckedItems() { + const currentUser = Meteor.user(); + if (currentUser) return currentUser.hasHideCheckedItems(); + return false; + }, +}); + Template.checklistDeleteDialog.onCreated(() => { const $cardDetails = this.$('.card-details'); this.scrollState = { @@ -246,6 +257,11 @@ Template.checklistItemDetail.helpers({ !Meteor.user().isWorker() ); }, + hideCheckedItems() { + const user = Meteor.user(); + if (user) return user.hasHideCheckedItems(); + return false; + }, }); BlazeComponent.extendComponent({ diff --git a/client/components/cards/checklists.styl b/client/components/cards/checklists.styl index 0a6d688b..e9b0fcd8 100644 --- a/client/components/cards/checklists.styl +++ b/client/components/cards/checklists.styl @@ -16,6 +16,10 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item &:hover color: inherit +.checklists-title + display: flex + justify-content: space-between + .checklist-title .checkbox float: left @@ -99,6 +103,17 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item margin-top: 3px display: flex background: darken(white, 3%) + opacity: 1 + transition: height 0ms 400ms, opacity 400ms 0ms + height: auto + overflow: hidden + + &.is-checked.invisible + opacity: 0 + height: 0 + transition: height 0ms 0ms, opacity 600ms 0ms + margin-top: 0 + margin-bottom: 0 &.placeholder background: darken(white, 20%) @@ -128,6 +143,7 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item &.is-checked color: #8c8c8c font-style: italic + text-decoration: line-through & .viewer p margin-bottom: 2px diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index 8afe1976..03511e0a 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -106,9 +106,9 @@ template(name="minicard") span.badge-icon.fa.fa-align-left if getVoteQuestion .badge.badge-state-image-only(title=getVoteQuestion) - span.badge-icon.fa.fa-thumbs-up + span.badge-icon.fa.fa-thumbs-up(class="{{#if voteState}}text-green{{/if}}") span.badge-text {{ voteCountPositive }} - span.badge-icon.fa.fa-thumbs-down + span.badge-icon.fa.fa-thumbs-down(class="{{#if $eq voteState false}}text-red{{/if}}") span.badge-text {{ voteCountNegative }} if attachments.count .badge diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl index 7d72a588..1f40e883 100644 --- a/client/components/cards/minicard.styl +++ b/client/components/cards/minicard.styl @@ -87,7 +87,9 @@ width: 11px height: @width border-radius: 2px - margin-left: 3px + margin-right: 3px + margin-bottom: 3px + .minicard-custom-fields display:block; .minicard-custom-field @@ -299,3 +301,8 @@ minicard-color(background, color...) .minicard-indigo minicard-color(#4b0082, #ffffff) //White text for better visibility + +.text-red + color:red +.text-green + color:green diff --git a/client/components/rules/actions/cardActions.jade b/client/components/rules/actions/cardActions.jade index c10c4b2b..0840283b 100644 --- a/client/components/rules/actions/cardActions.jade +++ b/client/components/rules/actions/cardActions.jade @@ -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 diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade index 72a7f054..9228bf75 100644 --- a/client/components/swimlanes/swimlaneHeader.jade +++ b/client/components/swimlanes/swimlaneHeader.jade @@ -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 diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 753fa88b..1fc97a89 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -23,8 +23,8 @@ function currentCardIsInThisList(listId, swimlaneId) { currentCard.listId === listId && currentCard.swimlaneId === swimlaneId ); - // Default view: board-view-lists else return currentCard && currentCard.listId === listId; + // 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 diff --git a/client/lib/utils.js b/client/lib/utils.js index c921fddc..754214c0 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -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'; } }, diff --git a/docker-compose.yml b/docker-compose.yml index 6a88ab93..338840dd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -115,11 +115,11 @@ services: # NOTE: Quay is currently not updated, use Docker Hub image below c) # a) For Wekan Meteor 1.8.x version at master branch, # using https://quay.io/wekan/wekan automatic builds - image: quay.io/wekan/wekan + #image: quay.io/wekan/wekan # b) Using specific Meteor 1.6.x version tag: # image: quay.io/wekan/wekan:v1.95 # c) Using Docker Hub automatic builds https://hub.docker.com/r/wekanteam/wekan - #image: wekanteam/wekan + image: wekanteam/wekan # image: wekanteam/wekan:v2.99 #------------------------------------------------------------------------------------- container_name: wekan-app @@ -180,7 +180,7 @@ services: # that if you're using more than 1 instance of Wekan # (or any MeteorJS based tool) you're supposed to set # MONGO_OPLOG_URL as an environment variable. - # Without setting it, Meteor will perform a pull-and-diff + # Without setting it, Meteor will perform a poll-and-diff # update of it's dataset. With it, Meteor will update from # the OPLOG. See here # https://blog.meteor.com/tuning-meteor-mongo-livedata-for-scalability-13fe9deb8908 diff --git a/find-replace.sh b/find-replace.sh new file mode 100755 index 00000000..522affab --- /dev/null +++ b/find-replace.sh @@ -0,0 +1,5 @@ + +# Recursive find/replace. +# Syntax: ./find-replace.sh searchtext replacetext + +egrep -lRZ '$1' . | xargs -0 -l sed -i -e 's/$1/$2/g' diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json index 4441143f..07d42f3d 100644 --- a/i18n/ar.i18n.json +++ b/i18n/ar.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json index b9699b8f..88725347 100644 --- a/i18n/bg.i18n.json +++ b/i18n/bg.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json index 67217ab9..bd18ada8 100644 --- a/i18n/br.i18n.json +++ b/i18n/br.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json index 33e88763..56d99357 100644 --- a/i18n/ca.i18n.json +++ b/i18n/ca.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json index 1ff7cfda..8fa3f9e8 100644 --- a/i18n/cs.i18n.json +++ b/i18n/cs.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/da.i18n.json b/i18n/da.i18n.json index a78e76ef..18611591 100644 --- a/i18n/da.i18n.json +++ b/i18n/da.i18n.json @@ -808,5 +808,6 @@ "voting": "Afstemning", "archived": "Arkiveret", "delete-linked-card-before-this-card": "Du kan ikke slette dette kort før der slettes sammenkædede kort som har", - "delete-linked-cards-before-this-list": "Du kan ikke slette denne liste før der slettes sammenkædede kort, der peger til kort i denne liste" + "delete-linked-cards-before-this-list": "Du kan ikke slette denne liste før der slettes sammenkædede kort, der peger til kort i denne liste", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index f0a353a6..2345252d 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -807,6 +807,7 @@ "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" + "delete-linked-card-before-this-card": "Sie können diese Karte erst löschen, wenn Sie alle verbundenen Karten gelöscht haben.", + "delete-linked-cards-before-this-list": "Sie können diese Liste erst löschen, wenn Sie alle Karten gelöscht haben, die auf Karten in dieser Liste verweisen.", + "hide-checked-items": "Erledigte ausblenden" } diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json index e6024f40..ef61a0dc 100644 --- a/i18n/el.i18n.json +++ b/i18n/el.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json index 0795c509..326bc396 100644 --- a/i18n/en-GB.i18n.json +++ b/i18n/en-GB.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 96862e47..f8820efe 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json index c83e3f96..66f08510 100644 --- a/i18n/eo.i18n.json +++ b/i18n/eo.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json index 0c60079a..1819d0fd 100644 --- a/i18n/es-AR.i18n.json +++ b/i18n/es-AR.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/es-CL.i18n.json b/i18n/es-CL.i18n.json index 06e9781b..a29458a3 100644 --- a/i18n/es-CL.i18n.json +++ b/i18n/es-CL.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json index 7063d4a2..d952d332 100644 --- a/i18n/es.i18n.json +++ b/i18n/es.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "No puede borrar esta lista antes de borrar las tarjetas enlazadas que apuntan a tarjetas en esta lista", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json index b96705ce..3ce70123 100644 --- a/i18n/eu.i18n.json +++ b/i18n/eu.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json index eb2b581b..fb5a672e 100644 --- a/i18n/fa.i18n.json +++ b/i18n/fa.i18n.json @@ -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": "for it", + "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,8 +256,8 @@ "current": "جاری", "custom-field-delete-pop": "این اقدام فیلدشخصی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد", "custom-field-checkbox": "جعبه انتخابی", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", + "custom-field-currency": "واحد پولی", + "custom-field-currency-option": "کد واحد پولی", "custom-field-date": "تاریخ", "custom-field-dropdown": "لیست افتادنی", "custom-field-dropdown-none": "(هیچ)", @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json index bb58a6a2..22efb655 100644 --- a/i18n/fi.i18n.json +++ b/i18n/fi.i18n.json @@ -808,5 +808,6 @@ "voting": "Äänestys", "archived": "Arkistoitu", "delete-linked-card-before-this-card": "Et voi poistaa tätä korttia ennenkuin ensin poistat linkitetyn kortin jolla on", - "delete-linked-cards-before-this-list": "Et voi poistaa tätä listaa ennenkuin poistat linkitetyt kortit jotka osoittavat kortteihin tässä listassa" + "delete-linked-cards-before-this-list": "Et voi poistaa tätä listaa ennenkuin poistat linkitetyt kortit jotka osoittavat kortteihin tässä listassa", + "hide-checked-items": "Piilota ruksatut kohdat" } diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json index 0ffbf867..620b85c6 100644 --- a/i18n/fr.i18n.json +++ b/i18n/fr.i18n.json @@ -808,5 +808,6 @@ "voting": "Vote", "archived": "Archivé", "delete-linked-card-before-this-card": "Vous ne pouvez pas supprimer cette carte avant d'avoir d'abord supprimé la carte liée qui a", - "delete-linked-cards-before-this-list": "Vous ne pouvez pas supprimer cette liste avant d'avoir d'abord supprimé les cartes liées qui pointent vers des cartes de cette liste" + "delete-linked-cards-before-this-list": "Vous ne pouvez pas supprimer cette liste avant d'avoir d'abord supprimé les cartes liées qui pointent vers des cartes de cette liste", + "hide-checked-items": "Cacher les éléments cochés" } diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json index 266bcc26..20f199e5 100644 --- a/i18n/gl.i18n.json +++ b/i18n/gl.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json index 235be747..ed29e669 100644 --- a/i18n/he.i18n.json +++ b/i18n/he.i18n.json @@ -808,5 +808,6 @@ "voting": "הצבעה", "archived": "בארכיון", "delete-linked-card-before-this-card": "לא ניתן למחוק את הכרטיס הזה לפני שמוחקים את הכרטיס המקושר שיש לו", - "delete-linked-cards-before-this-list": "לא ניתן למחוק את הרשימה הזו לפני שמוחקים את הכרטיסים שמצביעים לכרטיסים ברשימה הזו" + "delete-linked-cards-before-this-list": "לא ניתן למחוק את הרשימה הזו לפני שמוחקים את הכרטיסים שמצביעים לכרטיסים ברשימה הזו", + "hide-checked-items": "הסתרת הפריטים שסומנו" } diff --git a/i18n/hi.i18n.json b/i18n/hi.i18n.json index 50471148..94ca288b 100644 --- a/i18n/hi.i18n.json +++ b/i18n/hi.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json index e2450aa8..5064ff05 100644 --- a/i18n/hu.i18n.json +++ b/i18n/hu.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json index ead8eb6c..8c042e5e 100644 --- a/i18n/hy.i18n.json +++ b/i18n/hy.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json index de036359..f970ce92 100644 --- a/i18n/id.i18n.json +++ b/i18n/id.i18n.json @@ -1,7 +1,7 @@ { "accept": "Terima", - "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-activity-notify": "Pemeberitahuan Aktifitas", + "act-addAttachment": "ditambahkan lampiran __attachment__ di kartu __card__ pada daftar __list__ pada swimline __swimline__ pada papan __board__", "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", @@ -25,7 +25,7 @@ "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-createList": "added list __list__ to board __board__", + "act-createList": "ditambahkan daftar __list__ pada papan __board__", "act-addBoardMember": "added member __member__ to board __board__", "act-archivedBoard": "Board __board__ moved to Archive", "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", @@ -98,7 +98,7 @@ "and-n-other-card_plural": "Dan__menghitung__kartu lain", "apply": "Terapkan", "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", - "archive": "Move to Archive", + "archive": "Pindahlan ke Arsip", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", "archive-card": "Move Card to Archive", @@ -108,11 +108,11 @@ "archiveBoardPopup-title": "Move Board to Archive?", "archived-items": "Arsip", "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", + "restore-board": "Pulihkan Papan", + "no-archived-boards": "Tidak ada Papan pada Arsip", "archives": "Arsip", - "template": "Template", - "templates": "Templates", + "template": "Klise", + "templates": "Klise", "assign-member": "Tugaskan anggota", "attached": "terlampir", "attachment": "Lampiran", @@ -131,22 +131,22 @@ "boardChangeTitlePopup-title": "Ganti Nama Panel", "boardChangeVisibilityPopup-title": "Ubah Penampakan", "boardChangeWatchPopup-title": "Ubah Pengamatan", - "boardMenuPopup-title": "Board Settings", - "boardChangeViewPopup-title": "Board View", + "boardMenuPopup-title": "Pengaturan Papan", + "boardChangeViewPopup-title": "Tampilan Papan", "boards": "Panel", - "board-view": "Board View", - "board-view-cal": "Calendar", + "board-view": "Tampilan Papan", + "board-view-cal": "Kalender", "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", + "board-view-collapse": "Ciutkan", "board-view-lists": "Daftar", "bucket-example": "Contohnya seperti “Bucket List” ", "cancel": "Batal", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", + "card-archived": "Kartu ini telah dipindahkan ke Arsip", + "board-archived": "Kartu ini telah dipindahkan ke Arsip", "card-comments-title": "Kartu ini punya %s komentar", "card-delete-notice": "Menghapus sama dengan permanen. Anda akan kehilangan semua aksi yang terhubung ke kartu ini", "card-delete-pop": "Semua aksi akan dihapus dari aktivitas dan anda tidak bisa lagi buka kartu ini", - "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.", + "card-delete-suggest-archive": "Kamu bisa memindahkan Kartu ke Arsip untuk menghapusnya dari Papan dan mempertahankan Aktifitas", "card-due": "Jatuh Tempo", "card-due-on": "Jatuh Tempo pada", "card-spent": "Spent Time", @@ -425,8 +425,8 @@ "muted-info": "Anda tidak akan pernah dinotifikasi semua perubahan di panel ini", "my-boards": "Panel saya", "name": "Nama", - "no-archived-cards": "No cards in Archive.", - "no-archived-lists": "No lists in Archive.", + "no-archived-cards": "Tidak ada kartu di arsip.", + "no-archived-lists": "Tidak ada daftar di arsip.", "no-archived-swimlanes": "No swimlanes in Archive.", "no-results": "Tidak ada hasil", "normal": "Normal", @@ -452,8 +452,8 @@ "quick-access-description": "Beri bintang panel untuk menambah shortcut di papan ini", "remove-cover": "Hapus Sampul", "remove-from-board": "Hapus dari panel", - "remove-label": "Remove Label", - "listDeletePopup-title": "Delete List ?", + "remove-label": "Hapus Label", + "listDeletePopup-title": "Hapus Daftar ?", "remove-member": "Hapus Anggota", "remove-member-from-card": "Hapus dari Kartu", "remove-member-pop": "Hapus__nama__(__username__) dari __boardTitle__? Partisipan akan dihapus dari semua kartu di panel ini. Mereka akan diberi tahu", @@ -463,21 +463,21 @@ "restore": "Pulihkan", "save": "Simpan", "search": "Cari", - "rules": "Rules", - "search-cards": "Search from card/list titles, descriptions and custom fields on this board", - "search-example": "Text to search for?", - "select-color": "Select Color", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", + "rules": "Peraturan", + "search-cards": "Cari dari judul kartu/daftar, deskripsi dan bidang khusus di papan ini", + "search-example": "Teks untuk dicari ?", + "select-color": "Pilih Warna", + "set-wip-limit-value": "Tetapkan batas untuk jumlah tugas maksimum dalam daftar ini", + "setWipLimitPopup-title": "Tetapkan Batas WIP ", "shortcut-assign-self": "Masukkan diri anda sendiri ke kartu ini", - "shortcut-autocomplete-emoji": "Autocomplete emoji", + "shortcut-autocomplete-emoji": "Pelengkap Otomatis emoji", "shortcut-autocomplete-members": "Autocomplete partisipan", "shortcut-clear-filters": "Bersihkan semua saringan", "shortcut-close-dialog": "Tutup Dialog", "shortcut-filter-my-cards": "Filter kartu saya", "shortcut-show-shortcuts": "Angkat naik shortcut daftar ini", - "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-sidebar": "Toggle Board Sidebar", + "shortcut-toggle-filterbar": "Toggle Filter Bilah Samping", + "shortcut-toggle-sidebar": "Toggle Papan Bilah Samping", "show-cards-minimum-count": "Tampilkan jumlah kartu jika daftar punya lebih dari ", "sidebar-open": "Buka Sidebar", "sidebar-close": "Tutup Sidebar", @@ -489,16 +489,16 @@ "team": "Tim", "this-board": "Panel ini", "this-card": "Kartu ini", - "spent-time-hours": "Spent time (hours)", - "overtime-hours": "Overtime (hours)", - "overtime": "Overtime", - "has-overtime-cards": "Has overtime cards", + "spent-time-hours": "Waktu yang dihabiskan (jam)", + "overtime-hours": "Lembur (jam)", + "overtime": "Lembur", + "has-overtime-cards": "Punya kartu lembur", "has-spenttime-cards": "Has spent time cards", "time": "Waktu", "title": "Judul", "tracking": "Pelacakan", "tracking-info": "Anda akan dinotifikasi semua perubahan di kartu tersebut diaman anda terlibat sebagai creator atau partisipan", - "type": "Type", + "type": "tipe", "unassign-member": "Tidak sertakan partisipan", "unsaved-description": "Anda memiliki deskripsi yang belum disimpan.", "unwatch": "Tidak mengamati", @@ -515,11 +515,11 @@ "welcome-swimlane": "Milestone 1", "welcome-list1": "Tingkat dasar", "welcome-list2": "Tingkat lanjut", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", + "card-templates-swimlane": "Klise Kartu", + "list-templates-swimlane": "Klise Daftar", + "board-templates-swimlane": "Klise Papan", "what-to-do": "Apa yang mau Anda lakukan?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", + "wipLimitErrorPopup-title": "Batas WIP tidak valid", "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", "admin-panel": "Panel Admin", @@ -544,11 +544,11 @@ "invitation-code": "Kode Undangan", "email-invite-register-subject": "__inviter__ mengirim undangan ke Anda", "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", + "email-smtp-test-subject": "SMTP Tes Surel", "email-smtp-test-text": "You have successfully sent an email", "error-invitation-code-not-exist": "Kode undangan tidak ada", "error-notAuthorized": "You are not authorized to view this page.", - "webhook-title": "Webhook Name", + "webhook-title": "Nama Webhook", "webhook-token": "Token (Optional for Authentication)", "outgoing-webhooks": "Outgoing Webhooks", "bidirectional-webhooks": "Two-Way Webhooks", @@ -558,10 +558,10 @@ "global-webhook": "Global Webhooks", "new-outgoing-webhook": "New Outgoing Webhook", "no-name": "(Unknown)", - "Node_version": "Node version", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", - "MongoDB_storage_engine": "MongoDB storage engine", + "Node_version": "Versi Node", + "Meteor_version": "Versi Meteor", + "MongoDB_version": "Versi MongoDB", + "MongoDB_storage_engine": "Mesin penyimpanan MongoDb", "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", "OS_Arch": "OS Arch", "OS_Cpus": "OS CPU Count", @@ -572,44 +572,44 @@ "OS_Totalmem": "OS Total Memory", "OS_Type": "OS Type", "OS_Uptime": "OS Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", + "days": "hari", + "hours": "m", + "minutes": "menit", + "seconds": "detik", "show-field-on-card": "Show this field on card", "automatically-field-on-card": "Auto create field to all cards", "showLabel-field-on-card": "Show field label on minicard", - "yes": "Yes", - "no": "No", - "accounts": "Accounts", + "yes": "Ya", + "no": "Tidak", + "accounts": "Akun", "accounts-allowEmailChange": "Allow Email Change", "accounts-allowUserNameChange": "Allow Username Change", - "createdAt": "Created at", - "verified": "Verified", - "active": "Active", - "card-received": "Received", - "card-received-on": "Received on", - "card-end": "End", - "card-end-on": "Ends on", - "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "setCardColorPopup-title": "Set color", - "setCardActionsColorPopup-title": "Choose a color", - "setSwimlaneColorPopup-title": "Choose a color", - "setListColorPopup-title": "Choose a color", - "assigned-by": "Assigned By", - "requested-by": "Requested By", + "createdAt": "Dibuat pada", + "verified": "Terverifikasi", + "active": "Aktif", + "card-received": "Diterima", + "card-received-on": "Diterima pada", + "card-end": "Berakhir", + "card-end-on": "Berakhir pada", + "editCardReceivedDatePopup-title": "Ubah tanggal diterima", + "editCardEndDatePopup-title": "Ubah tanggal berakhir", + "setCardColorPopup-title": "Tetapkan warna", + "setCardActionsColorPopup-title": "Pilih warna", + "setSwimlaneColorPopup-title": "Pilih warna", + "setListColorPopup-title": "Pilih warna", + "assigned-by": "Ditandatangani Oleh", + "requested-by": "Diminta Oleh", "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", + "boardDeletePopup-title": "Hapus Papan?", + "delete-board": "Hapus Papan", "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "queue": "Queue", + "default": "Standar", + "queue": "Antrian", "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", + "card-settings": "Pengaturan Kartu", "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "Pengaturan Kartu", "deposit-subtasks-board": "Deposit subtasks to this board:", "deposit-subtasks-list": "Landing list for subtasks deposited here:", "show-parent-in-minicard": "Show parent in minicard:", @@ -629,34 +629,34 @@ "activity-delete-attach-card": "deleted an attachment", "activity-set-customfield": "set custom field '%s' to '%s' in %s", "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "Rule", - "r-add-trigger": "Add trigger", - "r-add-action": "Add action", - "r-board-rules": "Board rules", - "r-add-rule": "Add rule", - "r-view-rule": "View rule", + "r-rule": "Aturan", + "r-add-trigger": "Tambahkan pelatuk", + "r-add-action": "Tambahkan aksi", + "r-board-rules": "Aturan papan", + "r-add-rule": "Tambahkan aturan", + "r-view-rule": "Lihat aturan", "r-delete-rule": "Delete rule", "r-new-rule-name": "New rule title", "r-no-rules": "No rules", - "r-when-a-card": "When a card", - "r-is": "is", - "r-is-moved": "is moved", - "r-added-to": "Added to", - "r-removed-from": "Removed from", - "r-the-board": "the board", - "r-list": "list", - "set-filter": "Set Filter", - "r-moved-to": "Moved to", - "r-moved-from": "Moved from", - "r-archived": "Moved to Archive", - "r-unarchived": "Restored from Archive", - "r-a-card": "a card", - "r-when-a-label-is": "When a label is", - "r-when-the-label": "When the label", - "r-list-name": "list name", - "r-when-a-member": "When a member is", - "r-when-the-member": "When the member", - "r-name": "name", + "r-when-a-card": "Ketika kartu", + "r-is": "adalah", + "r-is-moved": "dipindahkan", + "r-added-to": "Ditambahkan ke", + "r-removed-from": "Dihapus dari", + "r-the-board": "papan", + "r-list": "daftar", + "set-filter": "Atur Saringan", + "r-moved-to": "Dipindahkan ke", + "r-moved-from": "Dipindahkan dari", + "r-archived": "Dipindahkan ke Arsip", + "r-unarchived": "Dipulihkan dari Arsip", + "r-a-card": "Kartu", + "r-when-a-label-is": "Ketika label adalah", + "r-when-the-label": "Ketika label", + "r-list-name": "nama daftar", + "r-when-a-member": "Ketika anggota adalah", + "r-when-the-member": "Ketika anggota", + "r-name": "nama", "r-when-a-attach": "When an attachment", "r-when-a-checklist": "When a checklist is", "r-when-the-checklist": "When the checklist", @@ -669,70 +669,70 @@ "r-move-card-to": "Move card to", "r-top-of": "Top of", "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-archive": "Move to Archive", - "r-unarchive": "Restore from Archive", - "r-card": "card", + "r-its-list": "daftar ini", + "r-archive": "Pindahlan ke Arsip", + "r-unarchive": "Pulihkan dari Arsip", + "r-card": "Kartu", "r-add": "Tambah", - "r-remove": "Remove", + "r-remove": "hapus", "r-label": "label", - "r-member": "member", - "r-remove-all": "Remove all members from the card", - "r-set-color": "Set color to", + "r-member": "anggota", + "r-remove-all": "Hapus semua anggota dari kartu", + "r-set-color": "Tetapkan warna ke", "r-checklist": "checklist", "r-check-all": "Check all", "r-uncheck-all": "Uncheck all", "r-items-check": "items of checklist", "r-check": "Check", "r-uncheck": "Uncheck", - "r-item": "item", + "r-item": "Item", "r-of-checklist": "of checklist", "r-send-email": "Send an email", - "r-to": "to", - "r-of": "of", - "r-subject": "subject", + "r-to": "kepada", + "r-of": "dari", + "r-subject": "Subyek", "r-rule-details": "Rule details", "r-d-move-to-top-gen": "Move card to top of its list", "r-d-move-to-top-spec": "Move card to top of list", "r-d-move-to-bottom-gen": "Move card to bottom of its list", "r-d-move-to-bottom-spec": "Move card to bottom of list", - "r-d-send-email": "Send email", - "r-d-send-email-to": "to", - "r-d-send-email-subject": "subject", - "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", + "r-d-send-email": "Kirim surel", + "r-d-send-email-to": "kepada", + "r-d-send-email-subject": "Subyek", + "r-d-send-email-message": "pesan", + "r-d-archive": "Pindahlan kartu ke Arsip", + "r-d-unarchive": "Pulihkan kartu dari Arsip", "r-d-add-label": "Tambahkan label", - "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", + "r-d-remove-label": "Hapus label", + "r-create-card": "Buat kartu baru", + "r-in-list": "pada daftar", "r-in-swimlane": "in swimlane", - "r-d-add-member": "Add member", - "r-d-remove-member": "Remove member", - "r-d-remove-all-member": "Remove all member", + "r-d-add-member": "Tambahkan anggota", + "r-d-remove-member": "Hapus anggota", + "r-d-remove-all-member": "Hapus semua anggota", "r-d-check-all": "Check all items of a list", "r-d-uncheck-all": "Uncheck all items of a list", "r-d-check-one": "Check item", "r-d-uncheck-one": "Uncheck item", "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist", - "r-by": "by", - "r-add-checklist": "Add checklist", - "r-with-items": "with items", - "r-items-list": "item1,item2,item3", + "r-d-add-checklist": "Tambahkan daftar periksa", + "r-d-remove-checklist": "Hapus daftar periksa", + "r-by": "oleh", + "r-add-checklist": "Tambahkan daftar periksa", + "r-with-items": "dengan item", + "r-items-list": "item 1, item2, item 3", "r-add-swimlane": "Add swimlane", "r-swimlane-name": "swimlane name", "r-board-note": "Note: leave a field empty to match every possible value.", "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", "r-when-a-card-is-moved": "When a card is moved to another list", - "r-set": "Set", - "r-update": "Update", - "r-datefield": "date field", - "r-df-start-at": "start", - "r-df-due-at": "due", - "r-df-end-at": "end", - "r-df-received-at": "received", + "r-set": "Tetapkan", + "r-update": "Ubah", + "r-datefield": "bidang tanggal", + "r-df-start-at": "mulai", + "r-df-due-at": "sampai", + "r-df-end-at": "berakhir", + "r-df-received-at": "diterima", "r-to-current-datetime": "to current date/time", "r-remove-value-from": "Remove value from", "ldap": "LDAP", @@ -741,22 +741,22 @@ "authentication-method": "Metode Autentikasi", "authentication-type": "Tipe Autentikasi", "custom-product-name": "Custom Product Name", - "layout": "Layout", + "layout": "Tata letak", "hide-logo": "Sembunyikan Logo", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", - "error-ldap-login": "An error occurred while trying to login", + "add-custom-html-after-body-start": "Tambahkan HTML khusus setelah <body> mulai", + "add-custom-html-before-body-end": "Tambahkan HTML khusus sebelum </body> berakhir", + "error-undefined": "Ada yang salah", + "error-ldap-login": "Terjadi kesalahan saat mencoba masuk", "display-authentication-method": "Display Authentication Method", "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", - "people-number": "The number of people is:", + "duplicate-board": "Duplikat Papan", + "people-number": "Jumlah orang:", "swimlaneDeletePopup-title": "Delete Swimlane ?", "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "Restore all", - "delete-all": "Delete all", - "loading": "Loading, please wait.", - "previous_as": "last time was", + "restore-all": "Pulihkan semua", + "delete-all": "Hapus semua", + "loading": "Sedang memuat, harap tunggu.", + "previous_as": "terakhir kali adalah", "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", @@ -776,37 +776,38 @@ "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", "accounts-allowUserDelete": "Allow users to self delete their account", - "hide-minicard-label-text": "Hide minicard label text", - "show-desktop-drag-handles": "Show desktop drag handles", - "assignee": "Assignee", - "cardAssigneesPopup-title": "Assignee", - "addmore-detail": "Add a more detailed description", - "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", - "start-day-of-week": "Set day of the week start", - "monday": "Monday", - "tuesday": "Tuesday", - "wednesday": "Wednesday", - "thursday": "Thursday", - "friday": "Friday", - "saturday": "Saturday", - "sunday": "Sunday", + "hide-minicard-label-text": "Sembunyikan teks label kartu mini", + "show-desktop-drag-handles": "Tampilkan gagang seret desktop", + "assignee": "Penerima tugas", + "cardAssigneesPopup-title": "Penerima tugas", + "addmore-detail": "Tambahkan deskripsi yang lebih rinci", + "show-on-card": "Tampilkan pada Kartu", + "new": "Baru", + "editUserPopup-title": "Ubah Pengguna", + "newUserPopup-title": "Pengguna Baru", + "notifications": "Pemberitahuan", + "view-all": "Lihat Semua", + "filter-by-unread": "Saring yang Belum Dibaca", + "mark-all-as-read": "Tandai semua telah dibaca", + "remove-all-read": "Hapus semua yang telah dibaca", + "allow-rename": "Ijinkan Ganti Nama", + "allowRenamePopup-title": "Ijinkan Ganti Nama", + "start-day-of-week": "Tetapkan hari dimulai dalam minggu", + "monday": "Senin", + "tuesday": "Selasa", + "wednesday": "Rabu", + "thursday": "Kamis", + "friday": "Jum'at", + "saturday": "Sabtu", + "sunday": "Minggu", "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" + "owner": "Pemilik", + "last-modified-at": "Terakhir diubah pada", + "last-activity": "Aktifitas terakhir", + "voting": "Pemungutan Suara", + "archived": "Diarsipkan", + "delete-linked-card-before-this-card": "Kamu tidak dapat menghapus kartu ini sebelum menghapus kartu tertaut yang telah", + "delete-linked-cards-before-this-list": "Kamu tidak dapat menghapus daftar ini sebelum menghapus kartu tertaut yang mengarah ke kartu dalam daftar ini", + "hide-checked-items": "Sembunyikan item yang dicentang" } diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json index c81e041e..518c480c 100644 --- a/i18n/ig.i18n.json +++ b/i18n/ig.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json index b3ddf3d7..f4732dcd 100644 --- a/i18n/it.i18n.json +++ b/i18n/it.i18n.json @@ -256,8 +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-currency": "Valuta", + "custom-field-currency-option": "Codice Valuta", "custom-field-date": "Data", "custom-field-dropdown": "Lista a discesa", "custom-field-dropdown-none": "(niente)", @@ -808,5 +808,6 @@ "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" + "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", + "hide-checked-items": "Nascondi articoli controllati" } diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json index 3ea079db..e575914c 100644 --- a/i18n/ja.i18n.json +++ b/i18n/ja.i18n.json @@ -808,5 +808,6 @@ "voting": "投票", "archived": "アーカイブ", "delete-linked-card-before-this-card": "カード内にある、リンクされているカードを削除しなければ、このカードは削除できません", - "delete-linked-cards-before-this-list": "リスト内にある、他のカードを参照しているカードを削除しなければ、このリストは削除できません" + "delete-linked-cards-before-this-list": "リスト内にある、他のカードを参照しているカードを削除しなければ、このリストは削除できません", + "hide-checked-items": "チェックした項目を隠す" } diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json index c3190afb..bdb532a9 100644 --- a/i18n/ka.i18n.json +++ b/i18n/ka.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json index b9ec2c2f..362c811b 100644 --- a/i18n/km.i18n.json +++ b/i18n/km.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json index 5b838835..e969206d 100644 --- a/i18n/ko.i18n.json +++ b/i18n/ko.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json index 77e28271..40d760dd 100644 --- a/i18n/lv.i18n.json +++ b/i18n/lv.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/mk.i18n.json b/i18n/mk.i18n.json index 51236fd8..8e8ea54d 100644 --- a/i18n/mk.i18n.json +++ b/i18n/mk.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json index 57e9573c..55b6a98c 100644 --- a/i18n/mn.i18n.json +++ b/i18n/mn.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json index ddae9171..8132f212 100644 --- a/i18n/nb.i18n.json +++ b/i18n/nb.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json index 9720b885..9c73f54f 100644 --- a/i18n/nl.i18n.json +++ b/i18n/nl.i18n.json @@ -256,8 +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-currency": "Valuta", + "custom-field-currency-option": "Valuta Teken", "custom-field-date": "Datum", "custom-field-dropdown": "Dropdown Lijst", "custom-field-dropdown-none": "(geen)", @@ -808,5 +808,6 @@ "voting": "Stemmen", "archived": "Gearchiveerd", "delete-linked-card-before-this-card": "Je kunt deze kaart niet verwijderen voordat de gekoppelde kaart is verwijderd ", - "delete-linked-cards-before-this-list": "Je kunt deze lijst niet verwijderen voordat de gekoppelde kaarten verwijderd zijn die verwijzen naar kaarten in deze lijst" + "delete-linked-cards-before-this-list": "Je kunt deze lijst niet verwijderen voordat de gekoppelde kaarten verwijderd zijn die verwijzen naar kaarten in deze lijst", + "hide-checked-items": "Verberg aangevinkte items" } diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json index bcd1b039..93b9c8a1 100644 --- a/i18n/oc.i18n.json +++ b/i18n/oc.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json index b27706d4..20807431 100644 --- a/i18n/pl.i18n.json +++ b/i18n/pl.i18n.json @@ -808,5 +808,6 @@ "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" + "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", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json index 7533c8c4..44497631 100644 --- a/i18n/pt-BR.i18n.json +++ b/i18n/pt-BR.i18n.json @@ -808,5 +808,6 @@ "voting": "Votação", "archived": "Arquivado", "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" + "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", + "hide-checked-items": "Esconder itens marcados" } diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json index 05075ac8..3d9faaa8 100644 --- a/i18n/pt.i18n.json +++ b/i18n/pt.i18n.json @@ -808,5 +808,6 @@ "voting": "Voting", "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-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json index 927fb451..92d530d2 100644 --- a/i18n/ro.i18n.json +++ b/i18n/ro.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json index c6264cf4..fbbb38aa 100644 --- a/i18n/ru.i18n.json +++ b/i18n/ru.i18n.json @@ -256,8 +256,8 @@ "current": "текущий", "custom-field-delete-pop": "Отменить нельзя. Это удалит настраиваемое поле со всех карт и уничтожит его историю.", "custom-field-checkbox": "Галочка", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", + "custom-field-currency": "Валюта", + "custom-field-currency-option": "Код валюты", "custom-field-date": "Дата", "custom-field-dropdown": "Выпадающий список", "custom-field-dropdown-none": "(нет)", @@ -808,5 +808,6 @@ "voting": "Голосование", "archived": "Архивировано", "delete-linked-card-before-this-card": "Вы не можете удалить карточку, не удалив связанную c ней карточку, которая имеет ", - "delete-linked-cards-before-this-list": "Вы не можете удалить этот список, не удалив карточки, которые указывают на карточки в этом списке" + "delete-linked-cards-before-this-list": "Вы не можете удалить этот список, не удалив карточки, которые указывают на карточки в этом списке", + "hide-checked-items": "Спрятать отмеченные" } diff --git a/i18n/sl.i18n.json b/i18n/sl.i18n.json index f14d60b6..e7bafc55 100644 --- a/i18n/sl.i18n.json +++ b/i18n/sl.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json index 66068920..94824dc3 100644 --- a/i18n/sr.i18n.json +++ b/i18n/sr.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json index bf2d3ff4..336fbd3a 100644 --- a/i18n/sv.i18n.json +++ b/i18n/sv.i18n.json @@ -808,5 +808,6 @@ "voting": "Röstning", "archived": "Arkiverad", "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-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/sw.i18n.json b/i18n/sw.i18n.json index d908b12f..01ef8636 100644 --- a/i18n/sw.i18n.json +++ b/i18n/sw.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json index 089b65c2..8ec2f518 100644 --- a/i18n/ta.i18n.json +++ b/i18n/ta.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json index bca08fe2..4d6ec609 100644 --- a/i18n/th.i18n.json +++ b/i18n/th.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json index ee3bd9c1..962ecce7 100644 --- a/i18n/tr.i18n.json +++ b/i18n/tr.i18n.json @@ -256,8 +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-currency": "Para birimi", + "custom-field-currency-option": "Para birimi kodu", "custom-field-date": "Tarih", "custom-field-dropdown": "Açılır liste", "custom-field-dropdown-none": "(hiçbiri)", @@ -319,12 +319,12 @@ "error-username-taken": "Kullanıcı adı zaten alınmış", "error-email-taken": "Bu e-posta adresi daha önceden alınmış", "export-board": "Panoyu dışarı aktar", - "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": "Panoyu JSON olarak dışarı aktar", + "export-board-csv": "Panoyu CSV olarak dışarı aktar", + "export-board-tsv": "Panoyu TSV olarak dışarı aktar", + "export-board-html": "Panoyu HTML olarak dışarı aktar", "exportBoardPopup-title": "Panoyu dışarı aktar", - "sort": "Sort", + "sort": "Sırala", "sort-desc": "Click to Sort List", "list-sort-by": "Sort the List By:", "list-label-modifiedAt": "Son Erişim Zamanı...", @@ -341,8 +341,8 @@ "filter-no-member": "Üye yok", "filter-no-assignee": "No assignee", "filter-no-custom-fields": "Hiç özel alan yok", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", + "filter-show-archive": "Arşivlenmiş listeleri göster", + "filter-hide-empty": "Boş listeleri gizle", "filter-on": "Filtre aktif", "filter-on-desc": "Bu panodaki kartları filtreliyorsunuz. Fitreyi düzenlemek için tıklayın.", "filter-to-selection": "Seçime göre filtreleme yap", @@ -359,10 +359,10 @@ "import-board-c": "Panoyu içe aktar", "import-board-title-trello": "Trello'dan panoyu içeri aktar", "import-board-title-wekan": "Import board from previous export", - "import-board-title-csv": "Import board from CSV/TSV", + "import-board-title-csv": "CSV/TSV formatındaki panoyu içeri aktar", "from-trello": "Trello'dan", "from-wekan": "From previous export", - "from-csv": "From CSV/TSV", + "from-csv": "CSV/TSV'den", "import-board-instruction-trello": "Trello panonuzda 'Menü'ye gidip 'Daha fazlası'na tıklayın, ardından 'Yazdır ve Çıktı Al'ı seçip 'JSON biçiminde çıktı al' diyerek çıkan metni buraya kopyalayın.", "import-board-instruction-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", @@ -399,10 +399,10 @@ "set-color-list": "Rengi Ayarla", "listActionPopup-title": "Liste İşlemleri", "swimlaneActionPopup-title": "Kulvar İşlemleri", - "swimlaneAddPopup-title": "Add a Swimlane below", + "swimlaneAddPopup-title": "Aşağı kulvar ekle", "listImportCardPopup-title": "Bir Trello kartını içeri aktar", "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", - "listMorePopup-title": "Daha", + "listMorePopup-title": "Daha fazla", "link-list": "Listeye doğrudan bağlantı", "list-delete-pop": "Etkinlik akışınızdaki tüm eylemler geri kurtarılamaz şekilde kaldırılacak. Bu işlem geri alınamaz.", "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.", @@ -437,7 +437,7 @@ "optional": "isteğe bağlı", "or": "veya", "page-maybe-private": "Bu sayfa gizli olabilir. <a href='%s'>Oturum açarak</a> görmeyi deneyin.", - "page-not-found": "Sayda bulunamadı.", + "page-not-found": "Sayfa bulunamadı.", "password": "Parola", "paste-or-dragdrop": "Dosya eklemek için yapıştırabilir, veya (eğer resimse) sürükle bırak yapabilirsiniz", "participating": "Katılımcılar", @@ -448,8 +448,8 @@ "private-desc": "Bu pano gizli. Sadece panoya ekli kişiler görüntüleyebilir ve düzenleyebilir.", "profile": "Kullanıcı Sayfası", "public": "Genel", - "public-desc": "Bu pano genel. Bağlantı adresi ile herhangi bir kimseye görünür ve Google gibi arama motorlarında gösterilecektir. Panoyu, sadece eklenen kişiler düzenleyebilir.", - "quick-access-description": "Bu bara kısayol olarak bir pano eklemek için panoyu yıldızlamalısınız", + "public-desc": "Bu pano genel bir panodur. Bağlantıya sahip olan herkes panoyu görüntüleyebilir, ayrıca panonuz Google gibi arama motorlarında görünür. Panoyu, sadece panoya eklenen kişiler düzenleyebilir.", + "quick-access-description": "Yıldızladığınız panolar burada gözükür", "remove-cover": "Kapak Resmini Kaldır", "remove-from-board": "Panodan Kaldır", "remove-label": "Etiketi Kaldır", @@ -515,9 +515,9 @@ "welcome-swimlane": "Kilometre taşı", "welcome-list1": "Temel", "welcome-list2": "Gelişmiş", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", + "card-templates-swimlane": "Kart şablonları", + "list-templates-swimlane": "Liste şablonları", + "board-templates-swimlane": "Pano şablonları", "what-to-do": "Ne yapmak istiyorsunuz?", "wipLimitErrorPopup-title": "Geçersiz Devam Eden İş Sınırı", "wipLimitErrorPopup-dialog-pt1": "Bu listedeki iş sayısı belirlediğiniz sınırdan daha fazla.", @@ -559,8 +559,8 @@ "new-outgoing-webhook": "Yeni Dışarı Giden Web Bağlantısı", "no-name": "(Bilinmeyen)", "Node_version": "Node sürümü", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", + "Meteor_version": "Meteor sürümü", + "MongoDB_version": "MongoDB sürümü", "MongoDB_storage_engine": "MongoDB storage engine", "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", "OS_Arch": "İşletim Sistemi Mimarisi", @@ -603,13 +603,13 @@ "delete-board-confirm-popup": "Tüm listeler, kartlar, etiketler ve etkinlikler silinecek ve pano içeriğini kurtaramayacaksınız. Geri dönüş yok.", "boardDeletePopup-title": "Panoyu Sil?", "delete-board": "Panoyu Sil", - "default-subtasks-board": "Subtasks for __board__ board", + "default-subtasks-board": "__board__ panosu için alt görevler", "default": "Varsayılan", "queue": "Sıra", "subtask-settings": "Alt Görev ayarları", - "card-settings": "Card Settings", + "card-settings": "Kart ayarları", "boardSubtaskSettingsPopup-title": "Pano alt görev ayarları", - "boardCardSettingsPopup-title": "Card Settings", + "boardCardSettingsPopup-title": "Kart ayarları", "deposit-subtasks-board": "Deposit subtasks to this board:", "deposit-subtasks-list": "Alt görevlerin açılacağı liste:", "show-parent-in-minicard": "Mini kart içinde üst kartı göster", @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json index 2f675da4..d9023866 100644 --- a/i18n/uk.i18n.json +++ b/i18n/uk.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json index c0d0c815..9f877399 100644 --- a/i18n/vi.i18n.json +++ b/i18n/vi.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json index a6300a23..1698517c 100644 --- a/i18n/zh-CN.i18n.json +++ b/i18n/zh-CN.i18n.json @@ -256,8 +256,8 @@ "current": "当前", "custom-field-delete-pop": "没有撤销,此动作将从所有卡片中移除自定义字段并销毁历史。", "custom-field-checkbox": "选择框", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", + "custom-field-currency": "货币", + "custom-field-currency-option": "货币代码", "custom-field-date": "日期", "custom-field-dropdown": "下拉列表", "custom-field-dropdown-none": "(无)", @@ -808,5 +808,6 @@ "voting": "投票", "archived": "存档", "delete-linked-card-before-this-card": "在你首次删除卡片前你无法删除此选项卡片", - "delete-linked-cards-before-this-list": "在首先删除指向此列表中的卡的链接卡之前,不能删除此列表" + "delete-linked-cards-before-this-list": "在首先删除指向此列表中的卡的链接卡之前,不能删除此列表", + "hide-checked-items": "隐藏选中项" } diff --git a/i18n/zh-HK.i18n.json b/i18n/zh-HK.i18n.json index 0a01b931..b473bd61 100644 --- a/i18n/zh-HK.i18n.json +++ b/i18n/zh-HK.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json index 945d71f3..b34d3901 100644 --- a/i18n/zh-TW.i18n.json +++ b/i18n/zh-TW.i18n.json @@ -808,5 +808,6 @@ "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" + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items" } diff --git a/models/boards.js b/models/boards.js index 11d8fd89..306bae13 100644 --- a/models/boards.js +++ b/models/boards.js @@ -18,18 +18,14 @@ Boards.attachSchema( type: String, // eslint-disable-next-line consistent-return autoValue() { - // XXX We need to improve slug management. Only the id should be necessary - // to identify a board in the code. - // XXX If the board title is updated, the slug should also be updated. // In some cases (Chinese and Japanese for instance) the `getSlug` function // return an empty string. This is causes bugs in our application so we set // a default slug in this case. - if (this.isInsert && !this.isSet) { + // Improvment would be to change client URL after slug is changed + const title = this.field('title'); + if (title.isSet && !this.isSet) { let slug = 'board'; - const title = this.field('title'); - if (title.isSet) { - slug = getSlug(title.value) || slug; - } + slug = getSlug(title.value) || slug; return slug; } }, @@ -1219,6 +1215,14 @@ if (Meteor.isServer) { fetch: ['members'], }); + // All logged in users are allowed to reorder boards by dragging at All Boards page and Public Boards page. + Boards.allow({ + update(userId, board, fieldNames) { + return _.contains(fieldNames, 'sort'); + }, + fetch: [], + }); + // The number of users that have starred this board is managed by trusted code // and the user is not allowed to update it Boards.deny({ diff --git a/models/cards.js b/models/cards.js index e1d48653..2fd52827 100644 --- a/models/cards.js +++ b/models/cards.js @@ -368,30 +368,36 @@ Cards.allow({ Cards.helpers({ copy(boardId, swimlaneId, listId) { - const oldBoard = Boards.findOne(this.boardId); - const oldBoardLabels = oldBoard.labels; - // Get old label names - const oldCardLabels = _.pluck( - _.filter(oldBoardLabels, label => { - return _.contains(this.labelIds, label._id); - }), - 'name', - ); - - const newBoard = Boards.findOne(boardId); - const newBoardLabels = newBoard.labels; - const newCardLabels = _.pluck( - _.filter(newBoardLabels, label => { - return _.contains(oldCardLabels, label.name); - }), - '_id', - ); - const oldId = this._id; const oldCard = Cards.findOne(oldId); - // Copy Custom Fields - if (oldBoard._id !== boardId) { + // we must only copy the labels and custom fields if the target board + // differs from the source board + if (this.boardId !== boardId) { + const oldBoard = Boards.findOne(this.boardId); + const oldBoardLabels = oldBoard.labels; + + // Get old label names + const oldCardLabels = _.pluck( + _.filter(oldBoardLabels, label => { + return _.contains(this.labelIds, label._id); + }), + 'name', + ); + + const newBoard = Boards.findOne(boardId); + const newBoardLabels = newBoard.labels; + const newCardLabels = _.pluck( + _.filter(newBoardLabels, label => { + return _.contains(oldCardLabels, label.name); + }), + '_id', + ); + // now set the new label ids + delete this.labelIds; + this.labelIds = newCardLabels; + + // Copy Custom Fields CustomFields.find({ _id: { $in: oldCard.customFields.map(cf => { @@ -404,8 +410,6 @@ Cards.helpers({ } delete this._id; - delete this.labelIds; - this.labelIds = newCardLabels; this.boardId = boardId; this.swimlaneId = swimlaneId; this.listId = listId; @@ -1108,6 +1112,21 @@ Cards.helpers({ return Users.find({ _id: { $in: this.vote.negative } }); return []; }, + voteState() { + const userId = Meteor.userId(); + let state; + if (this.vote) { + if (this.vote.positive) { + state = _.contains(this.vote.positive, userId); + if (state === true) return true; + } + if (this.vote.negative) { + state = _.contains(this.vote.negative, userId); + if (state === true) return false; + } + } + return null; + }, getId() { if (this.isLinked()) { @@ -1298,8 +1317,40 @@ Cards.mutations({ }, move(boardId, swimlaneId, listId, sort) { - // Copy Custom Fields + const mutatedFields = { + boardId, + swimlaneId, + listId, + sort, + }; + + // we must only copy the labels and custom fields if the target board + // differs from the source board if (this.boardId !== boardId) { + // Get label names + const oldBoard = Boards.findOne(this.boardId); + const oldBoardLabels = oldBoard.labels; + const oldCardLabels = _.pluck( + _.filter(oldBoardLabels, label => { + return _.contains(this.labelIds, label._id); + }), + 'name', + ); + + const newBoard = Boards.findOne(boardId); + const newBoardLabels = newBoard.labels; + const newCardLabelIds = _.pluck( + _.filter(newBoardLabels, label => { + return label.name && _.contains(oldCardLabels, label.name); + }), + '_id', + ); + + Object.assign(mutatedFields, { + labelIds: newCardLabelIds, + }); + + // Copy custom fields CustomFields.find({ _id: { $in: this.customFields.map(cf => { @@ -1311,33 +1362,6 @@ Cards.mutations({ }); } - // Get label names - const oldBoard = Boards.findOne(this.boardId); - const oldBoardLabels = oldBoard.labels; - const oldCardLabels = _.pluck( - _.filter(oldBoardLabels, label => { - return _.contains(this.labelIds, label._id); - }), - 'name', - ); - - const newBoard = Boards.findOne(boardId); - const newBoardLabels = newBoard.labels; - const newCardLabelIds = _.pluck( - _.filter(newBoardLabels, label => { - return label.name && _.contains(oldCardLabels, label.name); - }), - '_id', - ); - - const mutatedFields = { - boardId, - swimlaneId, - listId, - sort, - labelIds: newCardLabelIds, - }; - Cards.update(this._id, { $set: mutatedFields, }); @@ -2169,7 +2193,7 @@ if (Meteor.isServer) { description: doc.description, listId: doc.listId, receivedAt: doc.receivedAt, - startAt:doc.startAt, + startAt: doc.startAt, dueAt: doc.dueAt, endAt: doc.endAt, assignees: doc.assignees, @@ -2210,7 +2234,7 @@ if (Meteor.isServer) { title: doc.title, description: doc.description, receivedAt: doc.receivedAt, - startAt:doc.startAt, + startAt: doc.startAt, dueAt: doc.dueAt, endAt: doc.endAt, assignees: doc.assignees, @@ -2365,6 +2389,10 @@ if (Meteor.isServer) { * @param {boolean} [isOverTime] the new isOverTime field of the card * @param {string} [customFields] the new customFields value of the card * @param {string} [color] the new color of the card + * @param {Object} [vote] the vote object + * @param {string} vote.question the vote question + * @param {boolean} vote.public show who voted what + * @param {boolean} vote.allowNonBoardMembers allow all logged in users to vote? * @return_type {_id: string} */ JsonRoutes.add( @@ -2464,6 +2492,24 @@ if (Meteor.isServer) { { $set: { color: newColor } }, ); } + if (req.body.hasOwnProperty('vote')) { + const newVote = req.body.vote; + newVote.positive = []; + newVote.negative = []; + if (!newVote.hasOwnProperty('public')) newVote.public = false; + if (!newVote.hasOwnProperty('allowNonBoardMembers')) + newVote.allowNonBoardMembers = false; + + Cards.direct.update( + { + _id: paramCardId, + listId: paramListId, + boardId: paramBoardId, + archived: false, + }, + { $set: { vote: newVote } }, + ); + } if (req.body.hasOwnProperty('labelIds')) { let newlabelIds = req.body.labelIds; if (_.isString(newlabelIds)) { @@ -2703,7 +2749,7 @@ if (Meteor.isServer) { * @return_type [{_id: string, * title: string, * description: string, - * listId: string + * listId: string, * swinlaneId: string}] */ JsonRoutes.add( diff --git a/models/checklistItems.js b/models/checklistItems.js index 7f3ab095..afcd9081 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -302,10 +302,18 @@ if (Meteor.isServer) { const paramItemId = req.params.itemId; + function isTrue(data) { + try { + return data.toLowerCase() === 'true'; + } catch (error) { + return data; + } + } + if (req.body.hasOwnProperty('isFinished')) { ChecklistItems.direct.update( { _id: paramItemId }, - { $set: { isFinished: req.body.isFinished } }, + { $set: { isFinished: isTrue(req.body.isFinished) } }, ); } if (req.body.hasOwnProperty('title')) { diff --git a/models/customFields.js b/models/customFields.js index 9df635ba..83b47fc0 100644 --- a/models/customFields.js +++ b/models/customFields.js @@ -172,16 +172,14 @@ function customFieldDeletion(userId, doc) { function customFieldEdit(userId, doc) { const card = Cards.findOne(doc.cardId); const customFieldValue = Activities.findOne({ customFieldId: doc._id }).value; - const boardId = card.boardId; - //boardId: doc.boardIds[0], // We are creating a customField, it has only one boardId Activities.insert({ userId, activityType: 'setCustomField', - boardId, + boardId: doc.boardIds[0], // We are creating a customField, it has only one boardId customFieldId: doc._id, customFieldValue, - listId: card.listId, - swimlaneId: card.swimlaneId, + listId: doc.listId, + swimlaneId: doc.swimlaneId, }); } @@ -206,8 +204,8 @@ if (Meteor.isServer) { Activities.remove({ customFieldId: doc._id, boardId: modifier.$pull.boardIds, - listId: card.listId, - swimlaneId: card.swimlaneId, + listId: doc.listId, + swimlaneId: doc.swimlaneId, }); } else if (_.contains(fieldNames, 'boardIds') && modifier.$push) { Activities.insert({ diff --git a/models/export.js b/models/export.js index 9dd03a38..7a59fbec 100644 --- a/models/export.js +++ b/models/export.js @@ -85,7 +85,9 @@ if (Meteor.isServer) { ? exporter.buildCsv(params.query.delimiter) : exporter.buildCsv(); res.writeHead(200, { - 'Content-Length': body.length, + // Checking length does not work https://github.com/wekan/wekan/issues/3173 + // so not using it here + //'Content-Length': body.length, 'Content-Type': params.query.delimiter ? 'text/csv' : 'text/tsv', }); res.write(body); diff --git a/models/exporter.js b/models/exporter.js index b6188ece..3b3589f6 100644 --- a/models/exporter.js +++ b/models/exporter.js @@ -1,7 +1,8 @@ -const stringify = require('csv-stringify'); +// const stringify = require('csv-stringify'); // exporter maybe is broken since Gridfs introduced, add fs and path export class Exporter { + /* constructor(boardId) { this._boardId = boardId; } @@ -240,29 +241,29 @@ export class Exporter { } i++; }); - /* TODO: Try to get translations working. - These currently only bring English translations. - TAPi18n.__('title'), - TAPi18n.__('description'), - TAPi18n.__('status'), - TAPi18n.__('swimlane'), - TAPi18n.__('owner'), - TAPi18n.__('requested-by'), - TAPi18n.__('assigned-by'), - TAPi18n.__('members'), - TAPi18n.__('assignee'), - TAPi18n.__('labels'), - TAPi18n.__('card-start'), - TAPi18n.__('card-due'), - TAPi18n.__('card-end'), - TAPi18n.__('overtime-hours'), - TAPi18n.__('spent-time-hours'), - TAPi18n.__('createdAt'), - TAPi18n.__('last-modified-at'), - TAPi18n.__('last-activity'), - TAPi18n.__('voting'), - TAPi18n.__('archived'), - */ + + // TODO: Try to get translations working. + // These currently only bring English translations. + // TAPi18n.__('title'), + // TAPi18n.__('description'), + // TAPi18n.__('status'), + // TAPi18n.__('swimlane'), + // TAPi18n.__('owner'), + // TAPi18n.__('requested-by'), + // TAPi18n.__('assigned-by'), + // TAPi18n.__('members'), + // TAPi18n.__('assignee'), + // TAPi18n.__('labels'), + // TAPi18n.__('card-start'), + // TAPi18n.__('card-due'), + // TAPi18n.__('card-end'), + // TAPi18n.__('overtime-hours'), + // TAPi18n.__('spent-time-hours'), + // TAPi18n.__('createdAt'), + // TAPi18n.__('last-modified-at'), + // TAPi18n.__('last-activity'), + // TAPi18n.__('voting'), + // TAPi18n.__('archived'), const stringifier = stringify({ header: true, @@ -395,4 +396,9 @@ export class Exporter { const board = Boards.findOne(this._boardId); return board && board.isVisibleBy(user); } +*/ + + canExport(user) { + return false; + } } diff --git a/models/users.js b/models/users.js index 976e5068..7c5d2855 100644 --- a/models/users.js +++ b/models/users.js @@ -95,7 +95,7 @@ Users.attachSchema( autoValue() { if (this.isInsert && !this.isSet) { return { - boardView: 'board-view-lists', + boardView: 'board-view-swimlanes', }; } }, @@ -128,6 +128,13 @@ Users.attachSchema( type: Boolean, optional: true, }, + 'profile.hideCheckedItems': { + /** + * does the user want to hide checked checklist items? + */ + type: Boolean, + optional: true, + }, 'profile.hiddenSystemMessages': { /** * does the user want to hide system messages? @@ -218,8 +225,8 @@ Users.attachSchema( type: String, optional: true, allowedValues: [ - 'board-view-lists', 'board-view-swimlanes', + 'board-view-lists', 'board-view-cal', ], }, @@ -483,6 +490,11 @@ Users.helpers({ return profile.showDesktopDragHandles || false; }, + hasHideCheckedItems() { + const profile = this.profile || {}; + return profile.hideCheckedItems || false; + }, + hasHiddenSystemMessages() { const profile = this.profile || {}; return profile.hiddenSystemMessages || false; @@ -612,6 +624,15 @@ Users.mutations({ }; }, + toggleHideCheckedItems() { + const value = this.hasHideCheckedItems(); + return { + $set: { + 'profile.hideCheckedItems': !value, + }, + }; + }, + toggleSystem(value = false) { return { $set: { @@ -690,6 +711,10 @@ Meteor.methods({ const user = Meteor.user(); user.toggleDesktopHandles(user.hasShowDesktopDragHandles()); }, + toggleHideCheckedItems() { + const user = Meteor.user(); + user.toggleHideCheckedItems(); + }, toggleSystemMessages() { const user = Meteor.user(); user.toggleSystem(user.hasHiddenSystemMessages()); @@ -903,7 +928,7 @@ if (Meteor.isServer) { user.profile = { initials, fullname: user.services.oidc.fullname, - boardView: 'board-view-lists', + boardView: 'board-view-swimlanes', }; user.authenticationMethod = 'oauth2'; @@ -921,7 +946,8 @@ if (Meteor.isServer) { existingUser.profile = user.profile; existingUser.authenticationMethod = user.authenticationMethod; - Meteor.users.remove({ _id: existingUser._id }); // remove existing record + Meteor.users.remove({ _id: user._id }); + Meteor.users.remove({ _id: existingUser._id }); // is going to be created again return existingUser; } @@ -961,7 +987,7 @@ if (Meteor.isServer) { ); } else { user.profile = { icode: options.profile.invitationcode }; - user.profile.boardView = 'board-view-lists'; + user.profile.boardView = 'board-view-swimlanes'; // Deletes the invitation code after the user was created successfully. setTimeout( @@ -1109,10 +1135,10 @@ if (Meteor.isServer) { }); */ - const Future = require('fibers/future'); - let future1 = new Future(); - let future2 = new Future(); - let future3 = new Future(); + const Future = require('fibers/future'); + let future1 = new Future(); + let future2 = new Future(); + let future3 = new Future(); Boards.insert( { title: TAPi18n.__('templates'), @@ -1140,7 +1166,7 @@ if (Meteor.isServer) { Users.update(fakeUserId.get(), { $set: { 'profile.cardTemplatesSwimlaneId': swimlaneId }, }); - future1.return(); + future1.return(); }, ); @@ -1158,7 +1184,7 @@ if (Meteor.isServer) { Users.update(fakeUserId.get(), { $set: { 'profile.listTemplatesSwimlaneId': swimlaneId }, }); - future2.return(); + future2.return(); }, ); @@ -1176,22 +1202,22 @@ if (Meteor.isServer) { Users.update(fakeUserId.get(), { $set: { 'profile.boardTemplatesSwimlaneId': swimlaneId }, }); - future3.return(); + future3.return(); }, ); }, ); - // HACK - future1.wait(); - future2.wait(); - future3.wait(); + // HACK + future1.wait(); + future2.wait(); + future3.wait(); }); }); } - Users.after.insert((userId, doc) => { - // HACK - doc = Users.findOne({_id: doc._id}); + Users.after.insert((userId, doc) => { + // HACK + doc = Users.findOne({ _id: doc._id }); if (doc.createdThroughApi) { // The admin user should be able to create a user despite disabling registration because // it is two different things (registration and creation). diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py index 54526416..fabf3819 100644 --- a/openapi/generate_openapi.py +++ b/openapi/generate_openapi.py @@ -249,7 +249,10 @@ class EntryPoint(object): if name.startswith('{'): param_type = name.strip('{}') - if param_type not in ['string', 'number', 'boolean', 'integer', 'array', 'file']: + if param_type == 'Object': + # hope for the best + param_type = 'object' + elif param_type not in ['string', 'number', 'boolean', 'integer', 'array', 'file']: self.warn('unknown type {}\n allowed values: string, number, boolean, integer, array, file'.format(param_type)) try: name, desc = desc.split(maxsplit=1) @@ -814,13 +817,21 @@ def parse_schemas(schemas_dir): for d in data] entry_points.extend(schema_entry_points) + end_of_previous_operation = -1 + # try to match JSDoc to the operations for entry_point in schema_entry_points: operation = entry_point.method # POST/GET/PUT/DELETE + + # find all jsdocs that end before the current operation, + # the last item in the list is the one we need jsdoc = [j for j in jsdocs - if j.loc.end.line + 1 == operation.loc.start.line] + if j.loc.end.line + 1 <= operation.loc.start.line and + j.loc.start.line > end_of_previous_operation] if bool(jsdoc): - entry_point.doc = jsdoc[0] + entry_point.doc = jsdoc[-1] + + end_of_previous_operation = operation.loc.end.line except TypeError: logger.warning(context.txt_for(statement)) logger.error('{}:{}-{} can not parse {}'.format(path, diff --git a/openshift/wekan.yml b/openshift/wekan.yml index 28f63300..3d08451b 100644 --- a/openshift/wekan.yml +++ b/openshift/wekan.yml @@ -64,8 +64,6 @@ objects: name: "${WEKAN_SERVICE_NAME}" sessionAffinity: None type: ClusterIP - status: - loadBalancer: {} - apiVersion: v1 kind: Service metadata: @@ -86,8 +84,6 @@ objects: name: "${DATABASE_SERVICE_NAME}" sessionAffinity: None type: ClusterIP - status: - loadBalancer: {} - apiVersion: v1 kind: PersistentVolumeClaim metadata: @@ -276,7 +272,6 @@ objects: lastTriggeredImage: '' type: ImageChange - type: ConfigChange - status: {} - apiVersion: route.openshift.io/v1 kind: Route metadata: @@ -297,15 +292,6 @@ objects: name: wekan weight: 100 wildcardPolicy: None - status: - ingress: - - conditions: - - lastTransitionTime: '2018-08-28T14:45:21Z' - status: 'True' - type: Admitted - host: ${FQDN} - routerName: router - wildcardPolicy: None parameters: - description: The Fully Qualified Hostname (FQDN) of the application displayName: FQDN @@ -323,7 +309,7 @@ parameters: displayName: Database Service Name name: DATABASE_SERVICE_NAME required: true - value: mongodb + value: wekan-mongodb - description: Username for MongoDB user that will be used for accessing the database. displayName: MongoDB Connection Username from: user[A-Z0-9]{3} @@ -356,7 +342,7 @@ parameters: displayName: Version of MongoDB Image name: MONGODB_VERSION required: true - value: '4.0.10' + value: '3.6' - name: WEKAN_SERVICE_NAME displayName: Wekan Service Name value: wekan diff --git a/package-lock.json b/package-lock.json index 80afccd0..0edb0d4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.11.0", + "version": "v4.20.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -8,72 +8,131 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, "requires": { "@babel/highlight": "^7.8.3" } }, "@babel/core": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.6", - "@babel/parser": "^7.9.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", + "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "requires": { - "@babel/types": "^7.9.6", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==" + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } }, "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -95,6 +154,7 @@ "version": "7.9.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.8.3", "@babel/template": "^7.8.3", @@ -105,116 +165,335 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, "requires": { "@babel/types": "^7.8.3" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", + "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.5" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-module-transforms": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", - "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.6", - "@babel/types": "^7.9.0", - "lodash": "^4.17.13" + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", + "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-replace-supers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", - "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "requires": { - "@babel/types": "^7.9.6", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==" + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } }, "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/types": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-split-export-declaration": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, "requires": { "@babel/types": "^7.8.3" } @@ -222,57 +501,116 @@ "@babel/helper-validator-identifier": { "version": "7.9.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true }, "@babel/helpers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", - "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", + "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", "requires": { - "@babel/types": "^7.9.6", + "@babel/types": "^7.10.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==" + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", + "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } }, "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", + "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", + "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -282,6 +620,7 @@ "version": "7.9.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", @@ -291,12 +630,13 @@ "@babel/parser": { "version": "7.9.4", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "dev": true }, "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", + "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -305,6 +645,7 @@ "version": "7.8.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, "requires": { "@babel/code-frame": "^7.8.3", "@babel/parser": "^7.8.6", @@ -332,6 +673,7 @@ "version": "7.9.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.9.5", "lodash": "^4.17.13", @@ -364,6 +706,12 @@ "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@typescript-eslint/experimental-utils": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", @@ -410,6 +758,11 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abstract-logging": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-1.0.0.tgz", + "integrity": "sha1-i33q/TEFWbwo93ck3RuzAXcnjBs=" + }, "acorn": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", @@ -423,14 +776,14 @@ "dev": true }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ansi-escapes": { @@ -527,9 +880,12 @@ } }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } }, "assert-plus": { "version": "1.0.0", @@ -658,12 +1014,12 @@ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "bcrypt": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.8.tgz", - "integrity": "sha512-jKV6RvLhI36TQnPDvUFqBEnGX9c8dRRygKxCZu7E+MgLfKZbmmXL8a7/SFFOyHoPNX9nV81cKRC5tbQfvEQtpw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.0.tgz", + "integrity": "sha512-jB0yCBl4W/kVHM2whjfyqnxTmOHkCX4kHEa5nYKSoGeYe8YrjTYTc87/6bwt1g8cmV0QrbhKriETg9jWtcREhg==", "requires": { - "nan": "2.14.0", - "node-pre-gyp": "0.14.0" + "node-addon-api": "^3.0.0", + "node-pre-gyp": "0.15.0" } }, "bl": { @@ -737,12 +1093,13 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "bunyan": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", - "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-2.0.4.tgz", + "integrity": "sha512-wJWl1J0aO+AJV+mEXh5jr2jiSUo+JJHQZ/P2z0JSFJidFAWuJPafD+IhE8BeQNMBZyldA9Y3GDR1U15zAAaJHA==", "requires": { "dtrace-provider": "~0.8", - "moment": "^2.10.6", + "exeunt": "1.1.0", + "moment": "^2.19.3", "mv": "~2", "safe-json-stringify": "~1" } @@ -873,11 +1230,6 @@ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -1033,19 +1385,6 @@ "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" }, - "csv-stringify": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.5.0.tgz", - "integrity": "sha512-G05575DSO/9vFzQxZN+Srh30cNyHk0SM0ePyiTChMD5WVt7GMTVPBQf4rtgMF6mqhNCJUPw4pN8LDe8MF9EYOA==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", @@ -1194,22 +1533,22 @@ } }, "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { @@ -1344,9 +1683,9 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", - "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { "debug": "^2.6.9", @@ -1398,23 +1737,24 @@ } }, "eslint-plugin-import": { - "version": "2.20.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", - "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", + "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", "dev": true, "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.1", + "eslint-import-resolver-node": "^0.3.3", + "eslint-module-utils": "^2.6.0", "has": "^1.0.3", "minimatch": "^3.0.4", - "object.values": "^1.1.0", + "object.values": "^1.1.1", "read-pkg-up": "^2.0.0", - "resolve": "^1.12.0" + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { "debug": { @@ -1441,6 +1781,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } } } }, @@ -1454,9 +1803,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", - "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -1570,6 +1919,11 @@ } } }, + "exeunt": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/exeunt/-/exeunt-1.1.0.tgz", + "integrity": "sha1-r3Lbb5Szy3XpIa7jddUTBJhD0oQ=" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1718,14 +2072,14 @@ } }, "extsprintf": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz", - "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz", + "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=" }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", @@ -1819,6 +2173,12 @@ "write": "1.0.3" }, "dependencies": { + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -1831,9 +2191,14 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.0.4.tgz", + "integrity": "sha512-4gZhsMc26tSiMgQ+0gRN818ST2KCkX/4EvqocCkE1+SRb7mapNk4KLSP+XAj02jc8rxuyD3DrmI3a0BQ/TNOpg==" + }, + "flushwritable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flushwritable/-/flushwritable-1.0.0.tgz", + "integrity": "sha1-PjKNj95BKtR+c44751C00pAENJg=" }, "for-in": { "version": "1.0.2", @@ -1938,15 +2303,18 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, "gridfs-stream": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-0.5.3.tgz", - "integrity": "sha1-wIlnKPo+qD9fo8nO1GGvt6A20Uk=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-1.1.1.tgz", + "integrity": "sha1-PdOhAOwgIaGBKC9utGcJY2B034k=", + "requires": { + "flushwritable": "^1.0.0" + } }, "has": { "version": "1.0.3", @@ -2216,9 +2584,9 @@ "dev": true }, "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", "dev": true }, "is-data-descriptor": { @@ -2352,12 +2720,12 @@ "dev": true }, "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", "dev": true, "requires": { - "has": "^1.0.3" + "has-symbols": "^1.0.1" } }, "is-regexp": { @@ -2455,9 +2823,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -2474,9 +2842,9 @@ } }, "jszip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", - "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", "requires": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -2491,34 +2859,25 @@ "dev": true }, "ldap-filter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz", - "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.3.3.tgz", + "integrity": "sha1-KxTGiiqdQQTb28kQocqF/Riel5c=", "requires": { - "assert-plus": "0.1.5" - }, - "dependencies": { - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=" - } + "assert-plus": "^1.0.0" } }, "ldapjs": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz", - "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-2.0.0.tgz", + "integrity": "sha512-ZESQmVoG4a2ZX51pl/aRI+/kqiN2eRWMgHIsNZ2TYf37/S64OPnVJL5Vd5gdZR/qRPZVe5uuKW5p0GK2FUx/FQ==", "requires": { - "asn1": "0.2.3", + "abstract-logging": "^1.0.0", + "asn1": "^0.2.4", "assert-plus": "^1.0.0", "backoff": "^2.5.0", - "bunyan": "^1.8.3", - "dashdash": "^1.14.0", - "dtrace-provider": "~0.8", - "ldap-filter": "0.2.2", + "ldap-filter": "^0.3.3", "once": "^1.4.0", - "vasync": "^1.6.4", + "vasync": "^2.2.0", "verror": "^1.8.1" } }, @@ -2721,9 +3080,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash.merge": { "version": "4.6.2", @@ -2854,33 +3213,33 @@ "optional": true }, "meteor-node-stubs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-0.4.1.tgz", - "integrity": "sha512-UO2OStvLOKoApmOdIP5eCqoLaa/ritMXRg4ffJVdkNLEsczzPvTjgC0Mxk4cM4R8MZkwll90FYgjDf5qUTJdMA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.0.0.tgz", + "integrity": "sha512-QJwyv23wyXD3uEMzk5Xr/y5ezoVlCbHvBbrgdkVadn84dmifLRbs0PtD6EeNw5NLIk+SQSfxld7IMdEsneGz5w==", "requires": { "assert": "^1.4.1", - "browserify-zlib": "^0.1.4", - "buffer": "^4.9.1", + "browserify-zlib": "^0.2.0", + "buffer": "^5.2.1", "console-browserify": "^1.1.0", "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.7", - "events": "^1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "^0.2.1", - "path-browserify": "0.0.0", - "process": "^0.11.9", - "punycode": "^1.4.1", + "crypto-browserify": "^3.12.0", + "domain-browser": "^1.2.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.0", + "process": "^0.11.10", + "punycode": "^2.1.1", "querystring-es3": "^0.2.1", - "readable-stream": "^2.3.6", - "stream-browserify": "^2.0.1", - "stream-http": "^2.8.0", - "string_decoder": "^1.1.0", - "timers-browserify": "^1.4.2", - "tty-browserify": "0.0.0", + "readable-stream": "^3.3.0", + "stream-browserify": "^2.0.2", + "stream-http": "^3.0.0", + "string_decoder": "^1.2.0", + "timers-browserify": "^2.0.10", + "tty-browserify": "0.0.1", "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" + "util": "^0.11.1", + "vm-browserify": "^1.1.0" }, "dependencies": { "asn1.js": { @@ -2897,6 +3256,15 @@ "bundled": true, "requires": { "util": "0.10.3" + }, + "dependencies": { + "util": { + "version": "0.10.3", + "bundled": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "base64-js": { @@ -2933,12 +3301,13 @@ } }, "browserify-des": { - "version": "1.0.1", + "version": "1.0.2", "bundled": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -2963,19 +3332,18 @@ } }, "browserify-zlib": { - "version": "0.1.4", + "version": "0.2.0", "bundled": true, "requires": { - "pako": "~0.2.0" + "pako": "~1.0.5" } }, "buffer": { - "version": "4.9.1", + "version": "5.2.1", "bundled": true, "requires": { "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "ieee754": "^1.1.4" } }, "buffer-xor": { @@ -3083,7 +3451,7 @@ "bundled": true }, "elliptic": { - "version": "6.4.0", + "version": "6.4.1", "bundled": true, "requires": { "bn.js": "^4.4.0", @@ -3096,7 +3464,7 @@ } }, "events": { - "version": "1.1.1", + "version": "3.0.0", "bundled": true }, "evp_bytestokey": { @@ -3116,11 +3484,11 @@ } }, "hash.js": { - "version": "1.1.3", + "version": "1.1.7", "bundled": true, "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.1" }, "dependencies": { "inherits": { @@ -3139,15 +3507,11 @@ } }, "https-browserify": { - "version": "0.0.1", + "version": "1.0.0", "bundled": true }, "ieee754": { - "version": "1.1.11", - "bundled": true - }, - "indexof": { - "version": "0.0.1", + "version": "1.1.13", "bundled": true }, "inherits": { @@ -3159,11 +3523,12 @@ "bundled": true }, "md5.js": { - "version": "1.3.4", + "version": "1.3.5", "bundled": true, "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "miller-rabin": { @@ -3183,30 +3548,31 @@ "bundled": true }, "os-browserify": { - "version": "0.2.1", + "version": "0.3.0", "bundled": true }, "pako": { - "version": "0.2.9", + "version": "1.0.10", "bundled": true }, "parse-asn1": { - "version": "5.1.1", + "version": "5.1.4", "bundled": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "path-browserify": { - "version": "0.0.0", + "version": "1.0.0", "bundled": true }, "pbkdf2": { - "version": "3.0.16", + "version": "3.0.17", "bundled": true, "requires": { "create-hash": "^1.1.2", @@ -3225,18 +3591,19 @@ "bundled": true }, "public-encrypt": { - "version": "4.0.2", + "version": "4.0.3", "bundled": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "punycode": { - "version": "1.4.1", + "version": "2.1.1", "bundled": true }, "querystring": { @@ -3248,7 +3615,7 @@ "bundled": true }, "randombytes": { - "version": "2.0.6", + "version": "2.1.0", "bundled": true, "requires": { "safe-buffer": "^5.1.0" @@ -3263,16 +3630,12 @@ } }, "readable-stream": { - "version": "2.3.6", + "version": "3.3.0", "bundled": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "dependencies": { "inherits": { @@ -3293,6 +3656,10 @@ "version": "5.1.2", "bundled": true }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, "sha.js": { "version": "2.4.11", "bundled": true, @@ -3302,44 +3669,67 @@ } }, "stream-browserify": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "stream-http": { - "version": "2.8.1", + "version": "3.0.0", "bundled": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", - "readable-stream": "^2.3.3", - "to-arraybuffer": "^1.0.0", + "readable-stream": "^3.0.6", "xtend": "^4.0.0" } }, "string_decoder": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "requires": { "safe-buffer": "~5.1.0" } }, "timers-browserify": { - "version": "1.4.2", + "version": "2.0.10", "bundled": true, "requires": { - "process": "~0.11.0" + "setimmediate": "^1.0.4" } }, - "to-arraybuffer": { - "version": "1.0.1", - "bundled": true - }, "tty-browserify": { - "version": "0.0.0", + "version": "0.0.1", "bundled": true }, "url": { @@ -3357,10 +3747,16 @@ } }, "util": { - "version": "0.10.3", + "version": "0.11.1", "bundled": true, "requires": { - "inherits": "2.0.1" + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + } } }, "util-deprecate": { @@ -3368,11 +3764,8 @@ "bundled": true }, "vm-browserify": { - "version": "0.0.4", - "bundled": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "bundled": true }, "xtend": { "version": "4.0.1", @@ -3467,15 +3860,15 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==", "optional": true }, "mongodb": { - "version": "3.5.7", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.7.tgz", - "integrity": "sha512-lMtleRT+vIgY/JhhTn1nyGwnSMmJkJELp+4ZbrjctrnBxuLbj6rmLuJFz8W2xUzUqWmqoyVxJLYuC58ZKpcTYQ==", + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.9.tgz", + "integrity": "sha512-vXHBY1CsGYcEPoVWhwgxIBeWqP3dSu9RuRDsoLRPTITrcrgm1f0Ubu1xqF9ozMwv53agmEiZm0YGo+7WL3Nbug==", "requires": { "bl": "^2.2.0", "bson": "^1.1.4", @@ -3539,9 +3932,10 @@ } }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -3575,9 +3969,9 @@ "optional": true }, "needle": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.1.tgz", - "integrity": "sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -3600,14 +3994,19 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-addon-api": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.1.tgz", + "integrity": "sha512-YUpjl57P55u2yUaKX5Bgy4t5s6SCNYMg+62XNg+k41aYbBL1NgWrZfcgljR5MxDxHDjzl0qHDNtH6SkW4DXNCA==" + }, "node-pre-gyp": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", - "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz", + "integrity": "sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA==", "requires": { "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", + "mkdirp": "^0.5.3", + "needle": "^2.5.0", "nopt": "^4.0.1", "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", @@ -3743,9 +4142,9 @@ } }, "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", "dev": true }, "object-keys": { @@ -4149,8 +4548,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { "version": "6.9.4", @@ -4616,9 +5014,9 @@ } }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -4632,9 +5030,9 @@ "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -4715,28 +5113,6 @@ "es-abstract": "^1.17.5" } }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, "string.prototype.trimstart": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", @@ -4957,6 +5333,29 @@ "repeat-string": "^1.6.1" } }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "tslib": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", @@ -5040,7 +5439,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -5073,21 +5471,11 @@ } }, "vasync": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz", - "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vasync/-/vasync-2.2.0.tgz", + "integrity": "sha1-z951GGChWCLbOxMrxZsRakra8Bs=", "requires": { - "verror": "1.6.0" - }, - "dependencies": { - "verror": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz", - "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=", - "requires": { - "extsprintf": "1.2.0" - } - } + "verror": "1.10.0" } }, "verror": { @@ -5249,11 +5637,11 @@ } }, "xss": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.6.tgz", - "integrity": "sha512-6Q9TPBeNyoTRxgZFk5Ggaepk/4vUOYdOsIUYvLehcsIZTFjaavbVnsuAkLA5lIFuug5hw8zxcB9tm01gsjph2A==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.7.tgz", + "integrity": "sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w==", "requires": { - "commander": "^2.9.0", + "commander": "^2.20.3", "cssfilter": "0.0.10" } }, diff --git a/package.json b/package.json index da891bec..769ee703 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.11.0", + "version": "v4.20.0", "description": "Open-Source kanban", "private": true, "scripts": { @@ -45,37 +45,36 @@ "eslint-config-meteor": "0.0.9", "eslint-config-prettier": "^3.6.0", "eslint-import-resolver-meteor": "^0.4.0", - "eslint-plugin-import": "^2.20.0", + "eslint-plugin-import": "^2.22.0", "eslint-plugin-meteor": "^5.1.0", - "eslint-plugin-prettier": "^3.1.2", + "eslint-plugin-prettier": "^3.1.4", "lint-staged": "^7.3.0", "pre-commit": "^1.2.2", "prettier": "^1.19.1", "prettier-eslint": "^9.0.2" }, "dependencies": { - "@babel/core": "^7.9.6", - "@babel/runtime": "^7.9.6", + "@babel/core": "^7.10.5", + "@babel/runtime": "^7.10.5", "@root/request": "^1.6.1", - "ajv": "^5.0.0", + "ajv": "^6.12.3", "babel-runtime": "^6.26.0", - "bcrypt": "^3.0.7", - "bson": "^4.0.3", - "bunyan": "^1.8.12", - "csv-stringify": "^5.5.0", - "es6-promise": "^4.2.4", + "bcrypt": "^5.0.0", + "bson": "^4.0.4", + "bunyan": "^2.0.4", + "es6-promise": "^4.2.8", "fibers": "^5.0.0", - "flatted": "^2.0.1", - "gridfs-stream": "^0.5.3", - "jszip": "^3.4.0", - "ldapjs": "^1.0.2", - "meteor-node-stubs": "^0.4.1", - "mongodb": "^3.5.7", + "flatted": "^3.0.4", + "gridfs-stream": "^1.1.1", + "jszip": "^3.5.0", + "ldapjs": "^2.0.0", + "meteor-node-stubs": "^1.0.0", + "mongodb": "^3.5.9", "os": "^0.1.1", - "page": "^1.11.5", + "page": "^1.11.6", "papaparse": "^5.2.0", "qs": "^6.9.4", "source-map-support": "^0.5.19", - "xss": "^1.0.6" + "xss": "^1.0.7" } } diff --git a/packages/markdown/markdown.js b/packages/markdown/markdown.js deleted file mode 100755 index bb015cc4..00000000 --- a/packages/markdown/markdown.js +++ /dev/null @@ -1,9 +0,0 @@ -var mark = marked; - -mark.setOptions({ - gfm: true, - tables: true, - breaks: true -}); - -Markdown = mark; diff --git a/packages/markdown/marked/package-lock.json b/packages/markdown/marked/package-lock.json index ca9b5848..adeef6be 100644 --- a/packages/markdown/marked/package-lock.json +++ b/packages/markdown/marked/package-lock.json @@ -2675,10 +2675,9 @@ } }, "lodash": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", - "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", - "dev": true + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "loose-envify": { "version": "1.4.0", diff --git a/packages/markdown/marked/package.json b/packages/markdown/marked/package.json index a2fcfe60..db7d2f99 100644 --- a/packages/markdown/marked/package.json +++ b/packages/markdown/marked/package.json @@ -74,5 +74,8 @@ }, "engines": { "node": ">= 8.16.2" + }, + "dependencies": { + "lodash": "^4.17.19" } } diff --git a/packages/markdown/package.js b/packages/markdown/package.js index 0838922b..55228856 100755 --- a/packages/markdown/package.js +++ b/packages/markdown/package.js @@ -2,23 +2,27 @@ Package.describe({ name: 'wekan-markdown', - summary: "GitHub flavored markdown parser for Meteor based on marked.js", - version: "1.0.8", - git: "https://github.com/wekan/markdown.git" + summary: 'GitHub flavored markdown parser for Meteor based on marked.js', + version: '1.0.9', + git: 'https://github.com/wekan/markdown.git', }); // Before Meteor 0.9? if(!Package.onUse) Package.onUse = Package.on_use; Package.onUse(function (api) { - if(api.versionsFrom) api.versionsFrom('METEOR@0.9.0'); + if(api.versionsFrom) api.versionsFrom('1.8.2'); api.use('templating'); + api.use("ecmascript", ['server', 'client']); api.add_files('marked/lib/marked.js', ['server', 'client']); - api.add_files('markdown.js', ['server', 'client']); + api.add_files('src/markdown.js', ['server', 'client']); api.export('Markdown', ['server', 'client']); - api.use("ui", "client", {weak: true}); - api.add_files("template-integration.js", "client"); + api.use('ui', 'client', {weak: true}); + api.use('tmeasday:check-npm-versions', 'client'); + + api.add_files('src/checkNpmVersions.js', 'client'); + api.add_files('src/template-integration.js', 'client'); }); diff --git a/packages/markdown/src/checkNpmVersions.js b/packages/markdown/src/checkNpmVersions.js new file mode 100644 index 00000000..350ca549 --- /dev/null +++ b/packages/markdown/src/checkNpmVersions.js @@ -0,0 +1,5 @@ +import { checkNpmVersions } from 'meteor/tmeasday:check-npm-versions'; + +checkNpmVersions({ + 'xss': '1.0.6', +}, 'my:xss'); diff --git a/packages/markdown/src/markdown.js b/packages/markdown/src/markdown.js new file mode 100755 index 00000000..8e003f26 --- /dev/null +++ b/packages/markdown/src/markdown.js @@ -0,0 +1,9 @@ +import marked from '../marked/lib/marked.js'; + +marked.setOptions({ + gfm: true, + tables: true, + breaks: true, +}); + +Markdown = marked; diff --git a/packages/markdown/src/template-integration.js b/packages/markdown/src/template-integration.js new file mode 100755 index 00000000..bd8eec47 --- /dev/null +++ b/packages/markdown/src/template-integration.js @@ -0,0 +1,18 @@ +import sanitizeXss from 'xss'; + +if (Package.ui) { + const Template = Package.templating.Template; + const UI = Package.ui.UI; + const HTML = Package.htmljs.HTML; + const Blaze = Package.blaze.Blaze; // implied by `ui` + + UI.registerHelper('markdown', new Template('markdown', function () { + const self = this; + let text = ''; + if (self.templateContentBlock) { + text = Blaze._toText(self.templateContentBlock, HTML.TEXTMODE.STRING); + } + + return HTML.Raw(sanitizeXss(Markdown(text))); + })); +} diff --git a/packages/markdown/template-integration.js b/packages/markdown/template-integration.js deleted file mode 100755 index 301bde31..00000000 --- a/packages/markdown/template-integration.js +++ /dev/null @@ -1,16 +0,0 @@ -if (Package.ui) { - var Template = Package.templating.Template; - var UI = Package.ui.UI; - var HTML = Package.htmljs.HTML; - var Blaze = Package.blaze.Blaze; // implied by `ui` - - UI.registerHelper('markdown', new Template('markdown', function () { - var self = this; - var text = ""; - if(self.templateContentBlock) { - text = Blaze._toText(self.templateContentBlock, HTML.TEXTMODE.STRING); - } - - return HTML.Raw(Markdown(text)); - })); -} diff --git a/packages/wekan-accounts-cas/cas_server.js b/packages/wekan-accounts-cas/cas_server.js index 15c1b174..c13a6df1 100644 --- a/packages/wekan-accounts-cas/cas_server.js +++ b/packages/wekan-accounts-cas/cas_server.js @@ -229,13 +229,13 @@ const casValidate = (req, ticket, token, service, callback) => { if (attrs.debug) { console.log(`CAS response : ${JSON.stringify(result)}`); } - let user = Meteor.users.findOne({ 'username': options.username }); + let user = Users.findOne({ 'username': options.username }); if (! user) { if (attrs.debug) { console.log(`Creating user account ${JSON.stringify(options)}`); } const userId = Accounts.insertUserDoc({}, options); - user = Meteor.users.findOne(userId); + user = Users.findOne(userId); } if (attrs.debug) { console.log(`Using user account ${JSON.stringify(user)}`); diff --git a/public/Square150x150Logo.scale-100.png b/public/Square150x150Logo.scale-100.png Binary files differnew file mode 100644 index 00000000..0445b50c --- /dev/null +++ b/public/Square150x150Logo.scale-100.png diff --git a/public/Square44x44Logo.scale-100.png b/public/Square44x44Logo.scale-100.png Binary files differnew file mode 100644 index 00000000..bf8cacfe --- /dev/null +++ b/public/Square44x44Logo.scale-100.png diff --git a/public/StoreLogo.scale-100.png b/public/StoreLogo.scale-100.png Binary files differnew file mode 100644 index 00000000..5d73037e --- /dev/null +++ b/public/StoreLogo.scale-100.png diff --git a/public/api/wekan.html b/public/api/wekan.html index 9d3114fd..d3ed75c2 100644 --- a/public/api/wekan.html +++ b/public/api/wekan.html @@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <ul class="toc-list-h1"> <li> - <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.11">Wekan REST API v4.11</a> + <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.20">Wekan REST API v4.20</a> </li> @@ -1612,22 +1612,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <ul class="toc-list-h2"> <li> - <a href="#get_board_card_checklists" class="toc-h2 toc-link" data-title="get_board_card_checklists">get_board_card_checklists</a> + <a href="#get_all_checklists" class="toc-h2 toc-link" data-title="get_all_checklists">get_all_checklists</a> </li> <li> - <a href="#post_board_card_checklists" class="toc-h2 toc-link" data-title="post_board_card_checklists">post_board_card_checklists</a> + <a href="#new_checklist" class="toc-h2 toc-link" data-title="new_checklist">new_checklist</a> </li> <li> - <a href="#get_board_card_checklist" class="toc-h2 toc-link" data-title="get_board_card_checklist">get_board_card_checklist</a> + <a href="#get_checklist" class="toc-h2 toc-link" data-title="get_checklist">get_checklist</a> </li> <li> - <a href="#delete_board_card_checklist" class="toc-h2 toc-link" data-title="delete_board_card_checklist">delete_board_card_checklist</a> + <a href="#delete_checklist" class="toc-h2 toc-link" data-title="delete_checklist">delete_checklist</a> </li> @@ -1641,17 +1641,17 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <ul class="toc-list-h2"> <li> - <a href="#get_board_card_checklist_item" class="toc-h2 toc-link" data-title="get_board_card_checklist_item">get_board_card_checklist_item</a> + <a href="#get_checklist_item" class="toc-h2 toc-link" data-title="get_checklist_item">get_checklist_item</a> </li> <li> - <a href="#put_board_card_checklist_item" class="toc-h2 toc-link" data-title="put_board_card_checklist_item">put_board_card_checklist_item</a> + <a href="#edit_checklist_item" class="toc-h2 toc-link" data-title="edit_checklist_item">edit_checklist_item</a> </li> <li> - <a href="#delete_board_card_checklist_item" class="toc-h2 toc-link" data-title="delete_board_card_checklist_item">delete_board_card_checklist_item</a> + <a href="#delete_checklist_item" class="toc-h2 toc-link" data-title="delete_checklist_item">delete_checklist_item</a> </li> @@ -1670,17 +1670,17 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> <li> - <a href="#post_board_card_comments" class="toc-h2 toc-link" data-title="post_board_card_comments">post_board_card_comments</a> + <a href="#new_comment" class="toc-h2 toc-link" data-title="new_comment">new_comment</a> </li> <li> - <a href="#get_board_card_comment" class="toc-h2 toc-link" data-title="get_board_card_comment">get_board_card_comment</a> + <a href="#get_comment" class="toc-h2 toc-link" data-title="get_comment">get_comment</a> </li> <li> - <a href="#delete_board_card_comment" class="toc-h2 toc-link" data-title="delete_board_card_comment">delete_board_card_comment</a> + <a href="#delete_comment" class="toc-h2 toc-link" data-title="delete_comment">delete_comment</a> </li> @@ -1694,7 +1694,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <ul class="toc-list-h2"> <li> - <a href="#get_board_customfieldvalue" class="toc-h2 toc-link" data-title="get_board_customFieldValue">get_board_customFieldValue</a> + <a href="#get_cards_by_custom_field" class="toc-h2 toc-link" data-title="get_cards_by_custom_field">get_cards_by_custom_field</a> </li> @@ -1709,22 +1709,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> <li> - <a href="#get_board_list_card" class="toc-h2 toc-link" data-title="get_board_list_card">get_board_list_card</a> + <a href="#get_card" class="toc-h2 toc-link" data-title="get_card">get_card</a> </li> <li> - <a href="#put_board_list_card" class="toc-h2 toc-link" data-title="put_board_list_card">put_board_list_card</a> + <a href="#edit_card" class="toc-h2 toc-link" data-title="edit_card">edit_card</a> </li> <li> - <a href="#delete_board_list_card" class="toc-h2 toc-link" data-title="delete_board_list_card">delete_board_list_card</a> + <a href="#delete_card" class="toc-h2 toc-link" data-title="delete_card">delete_card</a> </li> <li> - <a href="#get_board_swimlane_cards" class="toc-h2 toc-link" data-title="get_board_swimlane_cards">get_board_swimlane_cards</a> + <a href="#get_swimlane_cards" class="toc-h2 toc-link" data-title="get_swimlane_cards">get_swimlane_cards</a> </li> @@ -1748,12 +1748,12 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> <li> - <a href="#get_board_customfield" class="toc-h2 toc-link" data-title="get_board_customField">get_board_customField</a> + <a href="#get_custom_field" class="toc-h2 toc-link" data-title="get_custom_field">get_custom_field</a> </li> <li> - <a href="#delete_board_customfield" class="toc-h2 toc-link" data-title="delete_board_customField">delete_board_customField</a> + <a href="#delete_custom_field" class="toc-h2 toc-link" data-title="delete_custom_field">delete_custom_field</a> </li> @@ -1792,12 +1792,12 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> <li> - <a href="#delete_board_int_activities" class="toc-h2 toc-link" data-title="delete_board_int_activities">delete_board_int_activities</a> + <a href="#delete_integration_activities" class="toc-h2 toc-link" data-title="delete_integration_activities">delete_integration_activities</a> </li> <li> - <a href="#post_board_int_activities" class="toc-h2 toc-link" data-title="post_board_int_activities">post_board_int_activities</a> + <a href="#new_integration_activities" class="toc-h2 toc-link" data-title="new_integration_activities">new_integration_activities</a> </li> @@ -1845,7 +1845,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> <li> - <a href="#post_board_user_remove" class="toc-h2 toc-link" data-title="post_board_user_remove">post_board_user_remove</a> + <a href="#remove_board_member" class="toc-h2 toc-link" data-title="remove_board_member">remove_board_member</a> </li> @@ -1904,7 +1904,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> <li> - <a href="#delete_board_swimlane" class="toc-h2 toc-link" data-title="delete_board_swimlane">delete_board_swimlane</a> + <a href="#delete_swimlane" class="toc-h2 toc-link" data-title="delete_swimlane">delete_swimlane</a> </li> @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <div class="page-wrapper"> <div class="dark-box"></div> <div class="content"> - <h1 id="wekan-rest-api">Wekan REST API v4.11</h1> + <h1 id="wekan-rest-api">Wekan REST API v4.20</h1> <blockquote> <p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p> </blockquote> @@ -4325,20 +4325,24 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity </aside> <h1 id="wekan-rest-api-checklists">Checklists</h1> -<h2 id="get_board_card_checklists">get_board_card_checklists</h2> -<p><a id="opIdget_board_card_checklists"></a></p> +<h2 id="get_all_checklists">get_all_checklists</h2> +<p><a id="opIdget_all_checklists"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/cards/{card}/checklists \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/checklists</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4357,6 +4361,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4378,6 +4383,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/checklists'</s <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -4390,6 +4396,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -4425,6 +4432,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -4440,7 +4448,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/cards/{card}/checklists</code></p> -<h3 id="get_board_card_checklists-parameters">Parameters</h3> +<p><em>Get the list of checklists attached to a card</em></p> +<h3 id="get_all_checklists-parameters">Parameters</h3> <table> <thead> <tr> @@ -4457,18 +4466,34 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> </tbody> </table> -<h3 id="get_board_card_checklists-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>card</strong>: the card ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>[ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span> + } +] +</code></pre> +<h3 id="get_all_checklists-responses">Responses</h3> <table> <thead> <tr> @@ -4483,7 +4508,36 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_all_checklists-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -4491,24 +4545,27 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="post_board_card_checklists">post_board_card_checklists</h2> -<p><a id="opIdpost_board_card_checklists"></a></p> +<h2 id="new_checklist">new_checklist</h2> +<p><a id="opIdnew_checklist"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X POST /api/boards/{board}/cards/{card}/checklists \ -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/checklists</span> HTTP/1.1 <span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json </span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4531,6 +4588,7 @@ $.ajax({ }'</span>; <span class="hljs-keyword">const</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4553,6 +4611,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/checklists'</s headers = { <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -4566,6 +4625,7 @@ p JSON.parse(result) <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -4602,6 +4662,7 @@ System.out.println(response.toString()); headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -4617,6 +4678,7 @@ System.out.println(response.toString()); </code></pre> <p><code>POST /api/boards/{board}/cards/{card}/checklists</code></p> +<p><em>create a new checklist</em></p> <blockquote> <p>Body parameter</p> </blockquote> @@ -4624,7 +4686,7 @@ System.out.println(response.toString()); <span class="hljs-attr">items:</span> <span class="hljs-string">string</span> </code></pre> -<h3 id="post_board_card_checklists-parameters">Parameters</h3> +<h3 id="new_checklist-parameters">Parameters</h3> <table> <thead> <tr> @@ -4641,14 +4703,14 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> <tr> <td>body</td> @@ -4662,18 +4724,31 @@ System.out.println(response.toString()); <td>body</td> <td>string</td> <td>true</td> -<td>the title value</td> +<td>the title of the new checklist</td> </tr> <tr> <td>» items</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the items value</td> +<td>false</td> +<td>the list of items on the new checklist</td> </tr> </tbody> </table> -<h3 id="post_board_card_checklists-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>card</strong>: the card ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="new_checklist-responses">Responses</h3> <table> <thead> <tr> @@ -4688,7 +4763,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="new_checklist-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -4696,20 +4793,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="get_board_card_checklist">get_board_card_checklist</h2> -<p><a id="opIdget_board_card_checklist"></a></p> +<h2 id="get_checklist">get_checklist</h2> +<p><a id="opIdget_checklist"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/cards/{card}/checklists/{checklist} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/checklists/{checklist}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4728,6 +4829,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4749,6 +4851,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/checklists/{ch <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -4761,6 +4864,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -4796,6 +4900,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -4811,7 +4916,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/cards/{card}/checklists/{checklist}</code></p> -<h3 id="get_board_card_checklist-parameters">Parameters</h3> +<p><em>Get a checklist</em></p> +<h3 id="get_checklist-parameters">Parameters</h3> <table> <thead> <tr> @@ -4828,25 +4934,50 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> <tr> <td>checklist</td> <td>path</td> <td>string</td> <td>true</td> -<td>the checklist value</td> +<td>the ID of the checklist</td> </tr> </tbody> </table> -<h3 id="get_board_card_checklist-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>card</strong>: the card ID</p> +<p><strong>checklist</strong>: the ID of the checklist</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"cardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"finishedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"items"</span>: [ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isFinished"</span>: <span class="hljs-literal">true</span> + } + ] +} +</code></pre> +<h3 id="get_checklist-responses">Responses</h3> <table> <thead> <tr> @@ -4861,7 +4992,85 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_checklist-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» cardId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» finishedAt</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» createdAt</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» sort</td> +<td>number</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» items</td> +<td>[object]</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>»» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>»» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>»» isFinished</td> +<td>boolean</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -4869,20 +5078,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="delete_board_card_checklist">delete_board_card_checklist</h2> -<p><a id="opIddelete_board_card_checklist"></a></p> +<h2 id="delete_checklist">delete_checklist</h2> +<p><a id="opIddelete_checklist"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X DELETE /api/boards/{board}/cards/{card}/checklists/{checklist} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/checklists/{checklist}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4901,6 +5114,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -4922,6 +5136,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/checklists/{ch <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -4934,6 +5149,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -4969,6 +5185,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -4984,7 +5201,9 @@ System.out.println(response.toString()); </code></pre> <p><code>DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}</code></p> -<h3 id="delete_board_card_checklist-parameters">Parameters</h3> +<p><em>Delete a checklist</em></p> +<p>The checklist will be removed, not put in the recycle bin.</p> +<h3 id="delete_checklist-parameters">Parameters</h3> <table> <thead> <tr> @@ -5001,25 +5220,39 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> <tr> <td>checklist</td> <td>path</td> <td>string</td> <td>true</td> -<td>the checklist value</td> +<td>the ID of the checklist to remove</td> </tr> </tbody> </table> -<h3 id="delete_board_card_checklist-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>card</strong>: the card ID</p> +<p><strong>checklist</strong>: the ID of the checklist to remove</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="delete_checklist-responses">Responses</h3> <table> <thead> <tr> @@ -5034,7 +5267,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="delete_checklist-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -5043,20 +5298,24 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity </aside> <h1 id="wekan-rest-api-checklistitems">ChecklistItems</h1> -<h2 id="get_board_card_checklist_item">get_board_card_checklist_item</h2> -<p><a id="opIdget_board_card_checklist_item"></a></p> +<h2 id="get_checklist_item">get_checklist_item</h2> +<p><a id="opIdget_checklist_item"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5075,6 +5334,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5096,6 +5356,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/checklists/{ch <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -5108,6 +5369,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -5143,6 +5405,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -5158,7 +5421,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}</code></p> -<h3 id="get_board_card_checklist_item-parameters">Parameters</h3> +<p><em>Get a checklist item</em></p> +<h3 id="get_checklist_item-parameters">Parameters</h3> <table> <thead> <tr> @@ -5175,32 +5439,53 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> <tr> <td>checklist</td> <td>path</td> <td>string</td> <td>true</td> -<td>the checklist value</td> +<td>the checklist ID</td> </tr> <tr> <td>item</td> <td>path</td> <td>string</td> <td>true</td> -<td>the item value</td> +<td>the ID of the item</td> </tr> </tbody> </table> -<h3 id="get_board_card_checklist_item-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>card</strong>: the card ID</p> +<p><strong>checklist</strong>: the checklist ID</p> +<p><strong>item</strong>: the ID of the item</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"isFinished"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"checklistId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"cardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="get_checklist_item-responses">Responses</h3> <table> <thead> <tr> @@ -5215,7 +5500,7 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td><a href="#schemachecklistitems">ChecklistItems</a></td> </tr> </tbody> </table> @@ -5223,24 +5508,27 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="put_board_card_checklist_item">put_board_card_checklist_item</h2> -<p><a id="opIdput_board_card_checklist_item"></a></p> +<h2 id="edit_checklist_item">edit_checklist_item</h2> +<p><a id="opIdedit_checklist_item"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \ -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">PUT</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}</span> HTTP/1.1 <span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json </span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5263,6 +5551,7 @@ $.ajax({ }'</span>; <span class="hljs-keyword">const</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5285,6 +5574,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/checklists/{ch headers = { <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -5298,6 +5588,7 @@ p JSON.parse(result) <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -5334,6 +5625,7 @@ System.out.println(response.toString()); headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -5349,6 +5641,7 @@ System.out.println(response.toString()); </code></pre> <p><code>PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}</code></p> +<p><em>Edit a checklist item</em></p> <blockquote> <p>Body parameter</p> </blockquote> @@ -5356,7 +5649,7 @@ System.out.println(response.toString()); <span class="hljs-attr">title:</span> <span class="hljs-string">string</span> </code></pre> -<h3 id="put_board_card_checklist_item-parameters">Parameters</h3> +<h3 id="edit_checklist_item-parameters">Parameters</h3> <table> <thead> <tr> @@ -5373,28 +5666,28 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> <tr> <td>checklist</td> <td>path</td> <td>string</td> <td>true</td> -<td>the checklist value</td> +<td>the checklist ID</td> </tr> <tr> <td>item</td> <td>path</td> <td>string</td> <td>true</td> -<td>the item value</td> +<td>the ID of the item</td> </tr> <tr> <td>body</td> @@ -5407,19 +5700,34 @@ System.out.println(response.toString()); <td>» isFinished</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the isFinished value</td> +<td>false</td> +<td>is the item checked?</td> </tr> <tr> <td>» title</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the title value</td> +<td>false</td> +<td>the new text of the item</td> </tr> </tbody> </table> -<h3 id="put_board_card_checklist_item-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>card</strong>: the card ID</p> +<p><strong>checklist</strong>: the checklist ID</p> +<p><strong>item</strong>: the ID of the item</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="edit_checklist_item-responses">Responses</h3> <table> <thead> <tr> @@ -5434,7 +5742,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="edit_checklist_item-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -5442,20 +5772,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="delete_board_card_checklist_item">delete_board_card_checklist_item</h2> -<p><a id="opIddelete_board_card_checklist_item"></a></p> +<h2 id="delete_checklist_item">delete_checklist_item</h2> +<p><a id="opIddelete_checklist_item"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5474,6 +5808,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5495,6 +5830,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/checklists/{ch <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -5507,6 +5843,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -5542,6 +5879,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -5557,7 +5895,9 @@ System.out.println(response.toString()); </code></pre> <p><code>DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}</code></p> -<h3 id="delete_board_card_checklist_item-parameters">Parameters</h3> +<p><em>Delete a checklist item</em></p> +<p>Note: this operation can't be reverted.</p> +<h3 id="delete_checklist_item-parameters">Parameters</h3> <table> <thead> <tr> @@ -5574,32 +5914,47 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> <tr> <td>checklist</td> <td>path</td> <td>string</td> <td>true</td> -<td>the checklist value</td> +<td>the checklist ID</td> </tr> <tr> <td>item</td> <td>path</td> <td>string</td> <td>true</td> -<td>the item value</td> +<td>the ID of the item to be removed</td> </tr> </tbody> </table> -<h3 id="delete_board_card_checklist_item-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>card</strong>: the card ID</p> +<p><strong>checklist</strong>: the checklist ID</p> +<p><strong>item</strong>: the ID of the item to be removed</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="delete_checklist_item-responses">Responses</h3> <table> <thead> <tr> @@ -5614,7 +5969,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="delete_checklist_item-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -5851,24 +6228,27 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="post_board_card_comments">post_board_card_comments</h2> -<p><a id="opIdpost_board_card_comments"></a></p> +<h2 id="new_comment">new_comment</h2> +<p><a id="opIdnew_comment"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X POST /api/boards/{board}/cards/{card}/comments \ -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/comments</span> HTTP/1.1 <span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json </span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5891,6 +6271,7 @@ $.ajax({ }'</span>; <span class="hljs-keyword">const</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -5913,6 +6294,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/comments'</spa headers = { <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -5926,6 +6308,7 @@ p JSON.parse(result) <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -5962,6 +6345,7 @@ System.out.println(response.toString()); headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -5977,6 +6361,7 @@ System.out.println(response.toString()); </code></pre> <p><code>POST /api/boards/{board}/cards/{card}/comments</code></p> +<p><em>Add a comment on a card</em></p> <blockquote> <p>Body parameter</p> </blockquote> @@ -5984,7 +6369,7 @@ System.out.println(response.toString()); <span class="hljs-attr">comment:</span> <span class="hljs-string">string</span> </code></pre> -<h3 id="post_board_card_comments-parameters">Parameters</h3> +<h3 id="new_comment-parameters">Parameters</h3> <table> <thead> <tr> @@ -6001,14 +6386,14 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID of the card</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the ID of the card</td> </tr> <tr> <td>body</td> @@ -6022,7 +6407,7 @@ System.out.println(response.toString()); <td>body</td> <td>string</td> <td>true</td> -<td>the authorId value</td> +<td>the user who 'posted' the comment</td> </tr> <tr> <td>» comment</td> @@ -6033,7 +6418,20 @@ System.out.println(response.toString()); </tr> </tbody> </table> -<h3 id="post_board_card_comments-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID of the card</p> +<p><strong>card</strong>: the ID of the card</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="new_comment-responses">Responses</h3> <table> <thead> <tr> @@ -6048,7 +6446,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="new_comment-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -6056,20 +6476,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="get_board_card_comment">get_board_card_comment</h2> -<p><a id="opIdget_board_card_comment"></a></p> +<h2 id="get_comment">get_comment</h2> +<p><a id="opIdget_comment"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/cards/{card}/comments/{comment} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/comments/{comment}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -6088,6 +6512,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -6109,6 +6534,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/comments/{comm <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -6121,6 +6547,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -6156,6 +6583,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -6171,7 +6599,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/cards/{card}/comments/{comment}</code></p> -<h3 id="get_board_card_comment-parameters">Parameters</h3> +<p><em>Get a comment on a card</em></p> +<h3 id="get_comment-parameters">Parameters</h3> <table> <thead> <tr> @@ -6188,25 +6617,44 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID of the card</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the ID of the card</td> </tr> <tr> <td>comment</td> <td>path</td> <td>string</td> <td>true</td> -<td>the comment value</td> +<td>the ID of the comment to retrieve</td> </tr> </tbody> </table> -<h3 id="get_board_card_comment-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID of the card</p> +<p><strong>card</strong>: the ID of the card</p> +<p><strong>comment</strong>: the ID of the comment to retrieve</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"cardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"text"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="get_comment-responses">Responses</h3> <table> <thead> <tr> @@ -6221,7 +6669,7 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td><a href="#schemacardcomments">CardComments</a></td> </tr> </tbody> </table> @@ -6229,20 +6677,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="delete_board_card_comment">delete_board_card_comment</h2> -<p><a id="opIddelete_board_card_comment"></a></p> +<h2 id="delete_comment">delete_comment</h2> +<p><a id="opIddelete_comment"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X DELETE /api/boards/{board}/cards/{card}/comments/{comment} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/cards/{card}/comments/{comment}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -6261,6 +6713,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -6282,6 +6735,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cards/{card}/comments/{comm <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -6294,6 +6748,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -6329,6 +6784,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -6344,7 +6800,8 @@ System.out.println(response.toString()); </code></pre> <p><code>DELETE /api/boards/{board}/cards/{card}/comments/{comment}</code></p> -<h3 id="delete_board_card_comment-parameters">Parameters</h3> +<p><em>Delete a comment on a card</em></p> +<h3 id="delete_comment-parameters">Parameters</h3> <table> <thead> <tr> @@ -6361,25 +6818,39 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID of the card</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the ID of the card</td> </tr> <tr> <td>comment</td> <td>path</td> <td>string</td> <td>true</td> -<td>the comment value</td> +<td>the ID of the comment to delete</td> </tr> </tbody> </table> -<h3 id="delete_board_card_comment-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID of the card</p> +<p><strong>card</strong>: the ID of the card</p> +<p><strong>comment</strong>: the ID of the comment to delete</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="delete_comment-responses">Responses</h3> <table> <thead> <tr> @@ -6394,7 +6865,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="delete_comment-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -6403,20 +6896,24 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity </aside> <h1 id="wekan-rest-api-cards">Cards</h1> -<h2 id="get_board_customfieldvalue">get_board_customFieldValue</h2> -<p><a id="opIdget_board_customFieldValue"></a></p> +<h2 id="get_cards_by_custom_field">get_cards_by_custom_field</h2> +<p><a id="opIdget_cards_by_custom_field"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -6435,6 +6932,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -6456,6 +6954,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/cardsByCustomField/{customF <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -6468,6 +6967,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -6503,6 +7003,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -6518,7 +7019,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}</code></p> -<h3 id="get_board_customfieldvalue-parameters">Parameters</h3> +<p><em>Get all Cards that matchs a value of a specific custom field</em></p> +<h3 id="get_cards_by_custom_field-parameters">Parameters</h3> <table> <thead> <tr> @@ -6535,25 +7037,45 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>customField</td> <td>path</td> <td>string</td> <td>true</td> -<td>the customField value</td> +<td>the list ID</td> </tr> <tr> <td>customFieldValue</td> <td>path</td> <td>string</td> <td>true</td> -<td>the customFieldValue value</td> +<td>the value to look for</td> </tr> </tbody> </table> -<h3 id="get_board_customfieldvalue-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>customField</strong>: the list ID</p> +<p><strong>customFieldValue</strong>: the value to look for</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>[ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"listId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"swinlaneId"</span>: <span class="hljs-string">"string"</span> + } +] +</code></pre> +<h3 id="get_cards_by_custom_field-responses">Responses</h3> <table> <thead> <tr> @@ -6568,7 +7090,57 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_cards_by_custom_field-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» description</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» listId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» swinlaneId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -7088,20 +7660,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="get_board_list_card">get_board_list_card</h2> -<p><a id="opIdget_board_list_card"></a></p> +<h2 id="get_card">get_card</h2> +<p><a id="opIdget_card"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/lists/{list}/cards/{card} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards/{card}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7120,6 +7696,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7141,6 +7718,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'< <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -7153,6 +7731,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -7188,6 +7767,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -7203,7 +7783,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/lists/{list}/cards/{card}</code></p> -<h3 id="get_board_list_card-parameters">Parameters</h3> +<p><em>Get a Card</em></p> +<h3 id="get_card-parameters">Parameters</h3> <table> <thead> <tr> @@ -7220,25 +7801,87 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>list</td> <td>path</td> <td>string</td> <td>true</td> -<td>the list value</td> +<td>the list ID of the card</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the card ID</td> </tr> </tbody> </table> -<h3 id="get_board_list_card-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>list</strong>: the list ID of the card</p> +<p><strong>card</strong>: the card ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"archived"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"parentId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"listId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"coverId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"color"</span>: <span class="hljs-string">"white"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"customFields"</span>: [ + {} + ], + <span class="hljs-attr">"dateLastActivity"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"requestedBy"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"assignedBy"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"labelIds"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"members"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"assignees"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"receivedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"startAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dueAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"endAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"spentTime"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"isOvertime"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"subtaskSort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"linkedId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"vote"</span>: { + <span class="hljs-attr">"question"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"positive"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"negative"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"end"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"public"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowNonBoardMembers"</span>: <span class="hljs-literal">true</span> + } +} +</code></pre> +<h3 id="get_card-responses">Responses</h3> <table> <thead> <tr> @@ -7253,7 +7896,7 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td><a href="#schemacards">Cards</a></td> </tr> </tbody> </table> @@ -7261,24 +7904,27 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="put_board_list_card">put_board_list_card</h2> -<p><a id="opIdput_board_list_card"></a></p> +<h2 id="edit_card">edit_card</h2> +<p><a id="opIdedit_card"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X PUT /api/boards/{board}/lists/{list}/cards/{card} \ -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">PUT</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards/{card}</span> HTTP/1.1 <span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json </span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7302,6 +7948,7 @@ $.ajax({ "parentId": "string", "description": "string", "color": "string", + "vote": {}, "labelIds": "string", "requestedBy": "string", "assignedBy": "string", @@ -7310,7 +7957,7 @@ $.ajax({ "dueAt": "string", "endAt": "string", "spentTime": "string", - "isOverTime": "string", + "isOverTime": true, "customFields": "string", "members": "string", "assignees": "string", @@ -7318,6 +7965,7 @@ $.ajax({ }'</span>; <span class="hljs-keyword">const</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7340,6 +7988,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'< headers = { <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -7353,6 +8002,7 @@ p JSON.parse(result) <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -7389,6 +8039,7 @@ System.out.println(response.toString()); headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -7404,6 +8055,15 @@ System.out.println(response.toString()); </code></pre> <p><code>PUT /api/boards/{board}/lists/{list}/cards/{card}</code></p> +<p><em>Edit Fields in a Card</em></p> +<p>Edit a card</p> +<p>The color has to be chosen between <code>white</code>, <code>green</code>, <code>yellow</code>, <code>orange</code>, +<code>red</code>, <code>purple</code>, <code>blue</code>, <code>sky</code>, <code>lime</code>, <code>pink</code>, <code>black</code>, <code>silver</code>, +<code>peachpuff</code>, <code>crimson</code>, <code>plum</code>, <code>darkgreen</code>, <code>slateblue</code>, <code>magenta</code>, +<code>gold</code>, <code>navy</code>, <code>gray</code>, <code>saddlebrown</code>, <code>paleturquoise</code>, <code>mistyrose</code>, +<code>indigo</code>:</p> + <img src="/card-colors.png" alt="Wekan card colors" /> +<p>Note: setting the color to white has the same effect than removing it.</p> <blockquote> <p>Body parameter</p> </blockquote> @@ -7413,6 +8073,7 @@ System.out.println(response.toString()); <span class="hljs-attr">parentId:</span> <span class="hljs-string">string</span> <span class="hljs-attr">description:</span> <span class="hljs-string">string</span> <span class="hljs-attr">color:</span> <span class="hljs-string">string</span> +<span class="hljs-attr">vote:</span> <span class="hljs-string">{}</span> <span class="hljs-attr">labelIds:</span> <span class="hljs-string">string</span> <span class="hljs-attr">requestedBy:</span> <span class="hljs-string">string</span> <span class="hljs-attr">assignedBy:</span> <span class="hljs-string">string</span> @@ -7421,14 +8082,14 @@ System.out.println(response.toString()); <span class="hljs-attr">dueAt:</span> <span class="hljs-string">string</span> <span class="hljs-attr">endAt:</span> <span class="hljs-string">string</span> <span class="hljs-attr">spentTime:</span> <span class="hljs-string">string</span> -<span class="hljs-attr">isOverTime:</span> <span class="hljs-string">string</span> +<span class="hljs-attr">isOverTime:</span> <span class="hljs-literal">true</span> <span class="hljs-attr">customFields:</span> <span class="hljs-string">string</span> <span class="hljs-attr">members:</span> <span class="hljs-string">string</span> <span class="hljs-attr">assignees:</span> <span class="hljs-string">string</span> <span class="hljs-attr">swimlaneId:</span> <span class="hljs-string">string</span> </code></pre> -<h3 id="put_board_list_card-parameters">Parameters</h3> +<h3 id="edit_card-parameters">Parameters</h3> <table> <thead> <tr> @@ -7445,21 +8106,21 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID of the card</td> </tr> <tr> <td>list</td> <td>path</td> <td>string</td> <td>true</td> -<td>the list value</td> +<td>the list ID of the card</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the ID of the card</td> </tr> <tr> <td>body</td> @@ -7472,138 +8133,159 @@ System.out.println(response.toString()); <td>» title</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the title value</td> +<td>false</td> +<td>the new title of the card</td> </tr> <tr> <td>» listId</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the listId value</td> +<td>false</td> +<td>the new list ID of the card (move operation)</td> </tr> <tr> <td>» authorId</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the authorId value</td> +<td>false</td> +<td>change the owner of the card</td> </tr> <tr> <td>» parentId</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the parentId value</td> +<td>false</td> +<td>change the parent of the card</td> </tr> <tr> <td>» description</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the description value</td> +<td>false</td> +<td>the new description of the card</td> </tr> <tr> <td>» color</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the color value</td> +<td>false</td> +<td>the new color of the card</td> +</tr> +<tr> +<td>» vote</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>the vote object</td> </tr> <tr> <td>» labelIds</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the labelIds value</td> +<td>false</td> +<td>the new list of label IDs attached to the card</td> </tr> <tr> <td>» requestedBy</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the requestedBy value</td> +<td>false</td> +<td>the new requestedBy field of the card</td> </tr> <tr> <td>» assignedBy</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the assignedBy value</td> +<td>false</td> +<td>the new assignedBy field of the card</td> </tr> <tr> <td>» receivedAt</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the receivedAt value</td> +<td>false</td> +<td>the new receivedAt field of the card</td> </tr> <tr> <td>» startAt</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the startAt value</td> +<td>false</td> +<td>the new startAt field of the card</td> </tr> <tr> <td>» dueAt</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the dueAt value</td> +<td>false</td> +<td>the new dueAt field of the card</td> </tr> <tr> <td>» endAt</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the endAt value</td> +<td>false</td> +<td>the new endAt field of the card</td> </tr> <tr> <td>» spentTime</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the spentTime value</td> +<td>false</td> +<td>the new spentTime field of the card</td> </tr> <tr> <td>» isOverTime</td> <td>body</td> -<td>string</td> -<td>true</td> -<td>the isOverTime value</td> +<td>boolean</td> +<td>false</td> +<td>the new isOverTime field of the card</td> </tr> <tr> <td>» customFields</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the customFields value</td> +<td>false</td> +<td>the new customFields value of the card</td> </tr> <tr> <td>» members</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the members value</td> +<td>false</td> +<td>the new list of member IDs attached to the card</td> </tr> <tr> <td>» assignees</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the assignees value</td> +<td>false</td> +<td>the array of maximum one ID of assignee attached to the card</td> </tr> <tr> <td>» swimlaneId</td> <td>body</td> <td>string</td> -<td>true</td> -<td>the swimlaneId value</td> +<td>false</td> +<td>the new swimlane ID of the card</td> </tr> </tbody> </table> -<h3 id="put_board_list_card-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID of the card</p> +<p><strong>list</strong>: the list ID of the card</p> +<p><strong>card</strong>: the ID of the card</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="edit_card-responses">Responses</h3> <table> <thead> <tr> @@ -7618,7 +8300,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="edit_card-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -7626,20 +8330,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="delete_board_list_card">delete_board_list_card</h2> -<p><a id="opIddelete_board_list_card"></a></p> +<h2 id="delete_card">delete_card</h2> +<p><a id="opIddelete_card"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X DELETE /api/boards/{board}/lists/{list}/cards/{card} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/lists/{list}/cards/{card}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7658,6 +8366,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7679,6 +8388,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}/cards/{card}'< <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -7691,6 +8401,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -7726,6 +8437,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -7741,7 +8453,10 @@ System.out.println(response.toString()); </code></pre> <p><code>DELETE /api/boards/{board}/lists/{list}/cards/{card}</code></p> -<h3 id="delete_board_list_card-parameters">Parameters</h3> +<p><em>Delete a card from a board</em></p> +<p>This operation <strong>deletes</strong> a card, and therefore the card +is not put in the recycle bin.</p> +<h3 id="delete_card-parameters">Parameters</h3> <table> <thead> <tr> @@ -7758,25 +8473,39 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID of the card</td> </tr> <tr> <td>list</td> <td>path</td> <td>string</td> <td>true</td> -<td>the list value</td> +<td>the list ID of the card</td> </tr> <tr> <td>card</td> <td>path</td> <td>string</td> <td>true</td> -<td>the card value</td> +<td>the ID of the card</td> </tr> </tbody> </table> -<h3 id="delete_board_list_card-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID of the card</p> +<p><strong>list</strong>: the list ID of the card</p> +<p><strong>card</strong>: the ID of the card</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="delete_card-responses">Responses</h3> <table> <thead> <tr> @@ -7791,7 +8520,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="delete_card-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -7799,20 +8550,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="get_board_swimlane_cards">get_board_swimlane_cards</h2> -<p><a id="opIdget_board_swimlane_cards"></a></p> +<h2 id="get_swimlane_cards">get_swimlane_cards</h2> +<p><a id="opIdget_swimlane_cards"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/swimlanes/{swimlane}/cards \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/swimlanes/{swimlane}/cards</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7831,6 +8586,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -7852,6 +8608,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/swimlanes/{swimlane}/cards' <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -7864,6 +8621,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -7899,6 +8657,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -7914,7 +8673,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/swimlanes/{swimlane}/cards</code></p> -<h3 id="get_board_swimlane_cards-parameters">Parameters</h3> +<p><em>get all cards attached to a swimlane</em></p> +<h3 id="get_swimlane_cards-parameters">Parameters</h3> <table> <thead> <tr> @@ -7931,18 +8691,36 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>swimlane</td> <td>path</td> <td>string</td> <td>true</td> -<td>the swimlane value</td> +<td>the swimlane ID</td> </tr> </tbody> </table> -<h3 id="get_board_swimlane_cards-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>swimlane</strong>: the swimlane ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>[ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"listId"</span>: <span class="hljs-string">"string"</span> + } +] +</code></pre> +<h3 id="get_swimlane_cards-responses">Responses</h3> <table> <thead> <tr> @@ -7957,7 +8735,50 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_swimlane_cards-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» description</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» listId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -8467,20 +9288,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="get_board_customfield">get_board_customField</h2> -<p><a id="opIdget_board_customField"></a></p> +<h2 id="get_custom_field">get_custom_field</h2> +<p><a id="opIdget_custom_field"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X GET /api/boards/{board}/custom-fields/{customField} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/custom-fields/{customField}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -8499,6 +9324,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -8520,6 +9346,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/custom-fields/{customField} <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -8532,6 +9359,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -8567,6 +9395,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -8582,7 +9411,8 @@ System.out.println(response.toString()); </code></pre> <p><code>GET /api/boards/{board}/custom-fields/{customField}</code></p> -<h3 id="get_board_customfield-parameters">Parameters</h3> +<p><em>Get a Custom Fields attached to a board</em></p> +<h3 id="get_custom_field-parameters">Parameters</h3> <table> <thead> <tr> @@ -8606,11 +9436,38 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the customField value</td> +<td>the ID of the custom field</td> </tr> </tbody> </table> -<h3 id="get_board_customfield-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>customField</strong>: the ID of the custom field</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"boardIds"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"type"</span>: <span class="hljs-string">"text"</span>, + <span class="hljs-attr">"settings"</span>: { + <span class="hljs-attr">"currencyCode"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dropdownItems"</span>: [ + {} + ] + }, + <span class="hljs-attr">"showOnCard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"automaticallyOnCard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"showLabelOnMiniCard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="get_custom_field-responses">Responses</h3> <table> <thead> <tr> @@ -8625,7 +9482,7 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td><a href="#schemacustomfields">CustomFields</a></td> </tr> </tbody> </table> @@ -8633,20 +9490,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="delete_board_customfield">delete_board_customField</h2> -<p><a id="opIddelete_board_customField"></a></p> +<h2 id="delete_custom_field">delete_custom_field</h2> +<p><a id="opIddelete_custom_field"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X DELETE /api/boards/{board}/custom-fields/{customField} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/custom-fields/{customField}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -8665,6 +9526,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -8686,6 +9548,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/custom-fields/{customField} <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -8698,6 +9561,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -8733,6 +9597,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -8748,7 +9613,9 @@ System.out.println(response.toString()); </code></pre> <p><code>DELETE /api/boards/{board}/custom-fields/{customField}</code></p> -<h3 id="delete_board_customfield-parameters">Parameters</h3> +<p><em>Delete a Custom Fields attached to a board</em></p> +<p>The Custom Field can't be retrieved after this operation</p> +<h3 id="delete_custom_field-parameters">Parameters</h3> <table> <thead> <tr> @@ -8772,11 +9639,23 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the customField value</td> +<td>the ID of the custom field</td> </tr> </tbody> </table> -<h3 id="delete_board_customfield-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>customField</strong>: the ID of the custom field</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="delete_custom_field-responses">Responses</h3> <table> <thead> <tr> @@ -8791,7 +9670,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="delete_custom_field-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -10000,20 +10901,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="delete_board_int_activities">delete_board_int_activities</h2> -<p><a id="opIddelete_board_int_activities"></a></p> +<h2 id="delete_integration_activities">delete_integration_activities</h2> +<p><a id="opIddelete_integration_activities"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X DELETE /api/boards/{board}/integrations/{int}/activities \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/integrations/{int}/activities</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -10032,6 +10937,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -10053,6 +10959,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/integrations/{int}/activiti <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -10065,6 +10972,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -10100,6 +11008,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -10115,7 +11024,8 @@ System.out.println(response.toString()); </code></pre> <p><code>DELETE /api/boards/{board}/integrations/{int}/activities</code></p> -<h3 id="delete_board_int_activities-parameters">Parameters</h3> +<p><em>Delete subscribed activities</em></p> +<h3 id="delete_integration_activities-parameters">Parameters</h3> <table> <thead> <tr> @@ -10132,18 +11042,42 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>int</td> <td>path</td> <td>string</td> <td>true</td> -<td>the int value</td> +<td>the integration ID</td> </tr> </tbody> </table> -<h3 id="delete_board_int_activities-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>int</strong>: the integration ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"enabled"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"activities"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"token"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="delete_integration_activities-responses">Responses</h3> <table> <thead> <tr> @@ -10158,7 +11092,7 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td><a href="#schemaintegrations">Integrations</a></td> </tr> </tbody> </table> @@ -10166,24 +11100,27 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="post_board_int_activities">post_board_int_activities</h2> -<p><a id="opIdpost_board_int_activities"></a></p> +<h2 id="new_integration_activities">new_integration_activities</h2> +<p><a id="opIdnew_integration_activities"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X POST /api/boards/{board}/integrations/{int}/activities \ -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/integrations/{int}/activities</span> HTTP/1.1 <span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json </span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -10205,6 +11142,7 @@ $.ajax({ }'</span>; <span class="hljs-keyword">const</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -10227,6 +11165,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/integrations/{int}/activiti headers = { <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -10240,6 +11179,7 @@ p JSON.parse(result) <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -10276,6 +11216,7 @@ System.out.println(response.toString()); headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -10291,13 +11232,14 @@ System.out.println(response.toString()); </code></pre> <p><code>POST /api/boards/{board}/integrations/{int}/activities</code></p> +<p><em>Add subscribed activities</em></p> <blockquote> <p>Body parameter</p> </blockquote> <pre class="highlight tab tab-yaml"><code><span class="hljs-attr">activities:</span> <span class="hljs-string">string</span> </code></pre> -<h3 id="post_board_int_activities-parameters">Parameters</h3> +<h3 id="new_integration_activities-parameters">Parameters</h3> <table> <thead> <tr> @@ -10314,14 +11256,14 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>int</td> <td>path</td> <td>string</td> <td>true</td> -<td>the int value</td> +<td>the integration ID</td> </tr> <tr> <td>body</td> @@ -10339,7 +11281,31 @@ System.out.println(response.toString()); </tr> </tbody> </table> -<h3 id="post_board_int_activities-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>int</strong>: the integration ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"enabled"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"activities"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"token"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="new_integration_activities-responses">Responses</h3> <table> <thead> <tr> @@ -10354,7 +11320,7 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td><a href="#schemaintegrations">Integrations</a></td> </tr> </tbody> </table> @@ -11499,24 +12465,27 @@ to later change the permissions.</p> To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="post_board_user_remove">post_board_user_remove</h2> -<p><a id="opIdpost_board_user_remove"></a></p> +<h2 id="remove_board_member">remove_board_member</h2> +<p><a id="opIdremove_board_member"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X POST /api/boards/{board}/members/{user}/remove \ -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/members/{user}/remove</span> HTTP/1.1 <span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json </span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -11538,6 +12507,7 @@ $.ajax({ }'</span>; <span class="hljs-keyword">const</span> headers = { <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -11560,6 +12530,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/members/{user}/remove'</spa headers = { <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -11573,6 +12544,7 @@ p JSON.parse(result) <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -11609,6 +12581,7 @@ System.out.println(response.toString()); headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -11624,13 +12597,15 @@ System.out.println(response.toString()); </code></pre> <p><code>POST /api/boards/{board}/members/{user}/remove</code></p> +<p><em>Remove Member from Board</em></p> +<p>Only the admin user (the first user) can call the REST API.</p> <blockquote> <p>Body parameter</p> </blockquote> <pre class="highlight tab tab-yaml"><code><span class="hljs-attr">action:</span> <span class="hljs-string">string</span> </code></pre> -<h3 id="post_board_user_remove-parameters">Parameters</h3> +<h3 id="remove_board_member-parameters">Parameters</h3> <table> <thead> <tr> @@ -11647,14 +12622,14 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the board ID</td> </tr> <tr> <td>user</td> <td>path</td> <td>string</td> <td>true</td> -<td>the user value</td> +<td>the user ID</td> </tr> <tr> <td>body</td> @@ -11668,11 +12643,25 @@ System.out.println(response.toString()); <td>body</td> <td>string</td> <td>true</td> -<td>the action value</td> +<td>the action (needs to be <code>remove</code>)</td> </tr> </tbody> </table> -<h3 id="post_board_user_remove-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>user</strong>: the user ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="remove_board_member-responses">Responses</h3> <table> <thead> <tr> @@ -11687,7 +12676,36 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="remove_board_member-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -11842,6 +12860,7 @@ System.out.println(response.toString()); ], <span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"hideCheckedItems"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>, @@ -11858,7 +12877,7 @@ System.out.println(response.toString()); <span class="hljs-string">"string"</span> ], <span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>, - <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>, + <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-swimlanes"</span>, <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>, <span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>, @@ -12498,6 +13517,7 @@ System.out.println(response.toString()); ], <span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"hideCheckedItems"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>, @@ -12514,7 +13534,7 @@ System.out.println(response.toString()); <span class="hljs-string">"string"</span> ], <span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>, - <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>, + <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-swimlanes"</span>, <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>, <span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>, @@ -13641,20 +14661,24 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> -<h2 id="delete_board_swimlane">delete_board_swimlane</h2> -<p><a id="opIddelete_board_swimlane"></a></p> +<h2 id="delete_swimlane">delete_swimlane</h2> +<p><a id="opIddelete_swimlane"></a></p> <blockquote> <p>Code samples</p> </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X DELETE /api/boards/{board}/swimlanes/{swimlane} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ -H <span class="hljs-string">'Authorization: API_KEY'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}/swimlanes/{swimlane}</span> HTTP/1.1 -<span class="undefined"></span></code></pre> +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -13673,6 +14697,7 @@ $.ajax({ <pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); <span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> }; @@ -13694,6 +14719,7 @@ fetch(<span class="hljs-string">'/api/boards/{board}/swimlanes/{swimlane}'</span <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> } @@ -13706,6 +14732,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> } @@ -13741,6 +14768,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, } @@ -13756,7 +14784,9 @@ System.out.println(response.toString()); </code></pre> <p><code>DELETE /api/boards/{board}/swimlanes/{swimlane}</code></p> -<h3 id="delete_board_swimlane-parameters">Parameters</h3> +<p><em>Delete a swimlane</em></p> +<p>The swimlane will be deleted, not moved to the recycle bin</p> +<h3 id="delete_swimlane-parameters">Parameters</h3> <table> <thead> <tr> @@ -13773,18 +14803,31 @@ System.out.println(response.toString()); <td>path</td> <td>string</td> <td>true</td> -<td>the board value</td> +<td>the ID of the board</td> </tr> <tr> <td>swimlane</td> <td>path</td> <td>string</td> <td>true</td> -<td>the swimlane value</td> +<td>the ID of the swimlane</td> </tr> </tbody> </table> -<h3 id="delete_board_swimlane-responses">Responses</h3> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the ID of the board</p> +<p><strong>swimlane</strong>: the ID of the swimlane</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="delete_swimlane-responses">Responses</h3> <table> <thead> <tr> @@ -13799,7 +14842,29 @@ System.out.println(response.toString()); <td>200</td> <td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> <td>200 response</td> -<td>None</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="delete_swimlane-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> </tr> </tbody> </table> @@ -15928,6 +16993,7 @@ UserSecurity ], <span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"hideCheckedItems"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>, @@ -15944,7 +17010,7 @@ UserSecurity <span class="hljs-string">"string"</span> ], <span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>, - <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>, + <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-swimlanes"</span>, <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>, <span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>, @@ -16097,6 +17163,7 @@ UserSecurity ], <span class="hljs-attr">"fullname"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"showDesktopDragHandles"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"hideCheckedItems"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenSystemMessages"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"hiddenMinicardLabelText"</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">"initials"</span>: <span class="hljs-string">"string"</span>, @@ -16113,7 +17180,7 @@ UserSecurity <span class="hljs-string">"string"</span> ], <span class="hljs-attr">"icode"</span>: <span class="hljs-string">"string"</span>, - <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-lists"</span>, + <span class="hljs-attr">"boardView"</span>: <span class="hljs-string">"board-view-swimlanes"</span>, <span class="hljs-attr">"listSortBy"</span>: <span class="hljs-string">"-modifiedat"</span>, <span class="hljs-attr">"templatesBoardId"</span>: <span class="hljs-string">"string"</span>, <span class="hljs-attr">"cardTemplatesSwimlaneId"</span>: <span class="hljs-string">"string"</span>, @@ -16163,6 +17230,13 @@ UserSecurity <td>does the user want to hide system messages?</td> </tr> <tr> +<td>hideCheckedItems</td> +<td>boolean</td> +<td>false</td> +<td>none</td> +<td>does the user want to hide checked checklist items?</td> +</tr> +<tr> <td>hiddenSystemMessages</td> <td>boolean</td> <td>false</td> @@ -16301,11 +17375,11 @@ UserSecurity <tbody> <tr> <td>boardView</td> -<td>board-view-lists</td> +<td>board-view-swimlanes</td> </tr> <tr> <td>boardView</td> -<td>board-view-swimlanes</td> +<td>board-view-lists</td> </tr> <tr> <td>boardView</td> diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 40fcf4b4..da61bc5a 100644 --- a/public/api/wekan.yml +++ b/public/api/wekan.yml @@ -1,7 +1,7 @@ swagger: '2.0' info: title: Wekan REST API - version: v4.11 + version: v4.20 description: | The REST API allows you to control and extend Wekan with ease. @@ -290,18 +290,21 @@ paths: 200 response /api/boards/{board}/cards/{card}/checklists: get: - operationId: get_board_card_checklists + operationId: get_all_checklists + summary: Get the list of checklists attached to a card tags: - Checklists parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true produces: @@ -312,8 +315,18 @@ paths: '200': description: |- 200 response + schema: + type: array + items: + type: object + properties: + _id: + type: string + title: + type: string post: - operationId: post_board_card_checklists + operationId: new_checklist + summary: create a new checklist tags: - Checklists consumes: @@ -322,22 +335,26 @@ paths: parameters: - name: title in: formData - description: the title value + description: | + the title of the new checklist type: string required: true - name: items in: formData - description: the items value + description: | + the list of items on the new checklist type: string - required: true + required: false - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true produces: @@ -348,25 +365,34 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/cards/{card}/checklists/{checklist}: get: - operationId: get_board_card_checklist + operationId: get_checklist + summary: Get a checklist tags: - Checklists parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true - name: checklist in: path - description: the checklist value + description: | + the ID of the checklist type: string required: true produces: @@ -377,24 +403,54 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + cardId: + type: string + title: + type: string + finishedAt: + type: string + createdAt: + type: string + sort: + type: number + items: + type: array + items: + type: object + properties: + _id: + type: string + title: + type: string + isFinished: + type: boolean delete: - operationId: delete_board_card_checklist + operationId: delete_checklist + summary: Delete a checklist + description: | + The checklist will be removed, not put in the recycle bin. tags: - Checklists parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true - name: checklist in: path - description: the checklist value + description: | + the ID of the checklist to remove type: string required: true produces: @@ -405,30 +461,41 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}: get: - operationId: get_board_card_checklist_item + operationId: get_checklist_item + summary: Get a checklist item tags: - ChecklistItems + - Checklists parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true - name: checklist in: path - description: the checklist value + description: | + the checklist ID type: string required: true - name: item in: path - description: the item value + description: | + the ID of the item type: string required: true produces: @@ -439,42 +506,52 @@ paths: '200': description: |- 200 response + schema: + $ref: "#/definitions/ChecklistItems" put: - operationId: put_board_card_checklist_item + operationId: edit_checklist_item + summary: Edit a checklist item tags: - ChecklistItems + - Checklists consumes: - multipart/form-data - application/json parameters: - name: isFinished in: formData - description: the isFinished value + description: | + is the item checked? type: string - required: true + required: false - name: title in: formData - description: the title value + description: | + the new text of the item type: string - required: true + required: false - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true - name: checklist in: path - description: the checklist value + description: | + the checklist ID type: string required: true - name: item in: path - description: the item value + description: | + the ID of the item type: string required: true produces: @@ -485,29 +562,42 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string delete: - operationId: delete_board_card_checklist_item + operationId: delete_checklist_item + summary: Delete a checklist item + description: | + Note: this operation can't be reverted. tags: - ChecklistItems + - Checklists parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true - name: checklist in: path - description: the checklist value + description: | + the checklist ID type: string required: true - name: item in: path - description: the item value + description: | + the ID of the item to be removed type: string required: true produces: @@ -518,6 +608,11 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/cards/{card}/comments: get: operationId: get_all_comments @@ -557,7 +652,8 @@ paths: authorId: type: string post: - operationId: post_board_card_comments + operationId: new_comment + summary: Add a comment on a card tags: - CardComments consumes: @@ -566,7 +662,8 @@ paths: parameters: - name: authorId in: formData - description: the authorId value + description: | + the user who 'posted' the comment type: string required: true - name: comment @@ -576,12 +673,14 @@ paths: required: true - name: board in: path - description: the board value + description: | + the board ID of the card type: string required: true - name: card in: path - description: the card value + description: | + the ID of the card type: string required: true produces: @@ -592,25 +691,34 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/cards/{card}/comments/{comment}: get: - operationId: get_board_card_comment + operationId: get_comment + summary: Get a comment on a card tags: - CardComments parameters: - name: board in: path - description: the board value + description: | + the board ID of the card type: string required: true - name: card in: path - description: the card value + description: | + the ID of the card type: string required: true - name: comment in: path - description: the comment value + description: | + the ID of the comment to retrieve type: string required: true produces: @@ -621,24 +729,30 @@ paths: '200': description: |- 200 response + schema: + $ref: "#/definitions/CardComments" delete: - operationId: delete_board_card_comment + operationId: delete_comment + summary: Delete a comment on a card tags: - CardComments parameters: - name: board in: path - description: the board value + description: | + the board ID of the card type: string required: true - name: card in: path - description: the card value + description: | + the ID of the card type: string required: true - name: comment in: path - description: the comment value + description: | + the ID of the comment to delete type: string required: true produces: @@ -649,25 +763,34 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}: get: - operationId: get_board_customFieldValue + operationId: get_cards_by_custom_field + summary: Get all Cards that matchs a value of a specific custom field tags: - Cards parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: customField in: path - description: the customField value + description: | + the list ID type: string required: true - name: customFieldValue in: path - description: the customFieldValue value + description: | + the value to look for type: string required: true produces: @@ -678,6 +801,21 @@ paths: '200': description: |- 200 response + schema: + type: array + items: + type: object + properties: + _id: + type: string + title: + type: string + description: + type: string + listId: + type: string + swinlaneId: + type: string /api/boards/{board}/custom-fields: get: operationId: get_all_custom_fields @@ -779,7 +917,8 @@ paths: type: string /api/boards/{board}/custom-fields/{customField}: get: - operationId: get_board_customField + operationId: get_custom_field + summary: Get a Custom Fields attached to a board tags: - CustomFields parameters: @@ -790,7 +929,8 @@ paths: required: true - name: customField in: path - description: the customField value + description: | + the ID of the custom field type: string required: true produces: @@ -801,8 +941,13 @@ paths: '200': description: |- 200 response + schema: + $ref: "#/definitions/CustomFields" delete: - operationId: delete_board_customField + operationId: delete_custom_field + summary: Delete a Custom Fields attached to a board + description: | + The Custom Field can't be retrieved after this operation tags: - CustomFields parameters: @@ -813,7 +958,8 @@ paths: required: true - name: customField in: path - description: the customField value + description: | + the ID of the custom field type: string required: true produces: @@ -824,6 +970,11 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/export: get: operationId: exportJson @@ -1036,18 +1187,21 @@ paths: type: string /api/boards/{board}/integrations/{int}/activities: delete: - operationId: delete_board_int_activities + operationId: delete_integration_activities + summary: Delete subscribed activities tags: - Integrations parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: int in: path - description: the int value + description: | + the integration ID type: string required: true produces: @@ -1058,8 +1212,11 @@ paths: '200': description: |- 200 response + schema: + $ref: "#/definitions/Integrations" post: - operationId: post_board_int_activities + operationId: new_integration_activities + summary: Add subscribed activities tags: - Integrations consumes: @@ -1073,12 +1230,14 @@ paths: required: true - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: int in: path - description: the int value + description: | + the integration ID type: string required: true produces: @@ -1089,6 +1248,8 @@ paths: '200': description: |- 200 response + schema: + $ref: "#/definitions/Integrations" /api/boards/{board}/labels: put: operationId: add_board_label @@ -1359,23 +1520,27 @@ paths: type: string /api/boards/{board}/lists/{list}/cards/{card}: get: - operationId: get_board_list_card + operationId: get_card + summary: Get a Card tags: - Cards parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: list in: path - description: the list value + description: | + the list ID of the card type: string required: true - name: card in: path - description: the card value + description: | + the card ID type: string required: true produces: @@ -1386,8 +1551,23 @@ paths: '200': description: |- 200 response + schema: + $ref: "#/definitions/Cards" put: - operationId: put_board_list_card + operationId: edit_card + summary: Edit Fields in a Card + description: | + Edit a card + + The color has to be chosen between `white`, `green`, `yellow`, `orange`, + `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, + `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, + `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, + `indigo`: + + <img src="/card-colors.png" width="40%" alt="Wekan card colors" /> + + Note: setting the color to white has the same effect than removing it. tags: - Cards consumes: @@ -1396,112 +1576,140 @@ paths: parameters: - name: title in: formData - description: the title value + description: | + the new title of the card type: string - required: true + required: false - name: listId in: formData - description: the listId value + description: | + the new list ID of the card (move operation) type: string - required: true + required: false - name: authorId in: formData - description: the authorId value + description: | + change the owner of the card type: string - required: true + required: false - name: parentId in: formData - description: the parentId value + description: | + change the parent of the card type: string - required: true + required: false - name: description in: formData - description: the description value + description: | + the new description of the card type: string - required: true + required: false - name: color in: formData - description: the color value + description: | + the new color of the card type: string - required: true + required: false + - name: vote + in: formData + description: | + the vote object + type: object + required: false - name: labelIds in: formData - description: the labelIds value + description: | + the new list of label IDs attached to the card type: string - required: true + required: false - name: requestedBy in: formData - description: the requestedBy value + description: | + the new requestedBy field of the card type: string - required: true + required: false - name: assignedBy in: formData - description: the assignedBy value + description: | + the new assignedBy field of the card type: string - required: true + required: false - name: receivedAt in: formData - description: the receivedAt value + description: | + the new receivedAt field of the card type: string - required: true + required: false - name: startAt in: formData - description: the startAt value + description: | + the new startAt field of the card type: string - required: true + required: false - name: dueAt in: formData - description: the dueAt value + description: | + the new dueAt field of the card type: string - required: true + required: false - name: endAt in: formData - description: the endAt value + description: | + the new endAt field of the card type: string - required: true + required: false - name: spentTime in: formData - description: the spentTime value + description: | + the new spentTime field of the card type: string - required: true + required: false - name: isOverTime in: formData - description: the isOverTime value - type: string - required: true + description: | + the new isOverTime field of the card + type: boolean + required: false - name: customFields in: formData - description: the customFields value + description: | + the new customFields value of the card type: string - required: true + required: false - name: members in: formData - description: the members value + description: | + the new list of member IDs attached to the card type: string - required: true + required: false - name: assignees in: formData - description: the assignees value + description: | + the array of maximum one ID of assignee attached to the card type: string - required: true + required: false - name: swimlaneId in: formData - description: the swimlaneId value + description: | + the new swimlane ID of the card type: string - required: true + required: false - name: board in: path - description: the board value + description: | + the board ID of the card type: string required: true - name: list in: path - description: the list value + description: | + the list ID of the card type: string required: true - name: card in: path - description: the card value + description: | + the ID of the card type: string required: true produces: @@ -1512,24 +1720,36 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string delete: - operationId: delete_board_list_card + operationId: delete_card + summary: Delete a card from a board + description: | + This operation **deletes** a card, and therefore the card + is not put in the recycle bin. tags: - Cards parameters: - name: board in: path - description: the board value + description: | + the board ID of the card type: string required: true - name: list in: path - description: the list value + description: | + the list ID of the card type: string required: true - name: card in: path - description: the card value + description: | + the ID of the card type: string required: true produces: @@ -1540,6 +1760,11 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/members/{member}: post: operationId: set_board_member_permission @@ -1663,26 +1888,33 @@ paths: type: string /api/boards/{board}/members/{user}/remove: post: - operationId: post_board_user_remove + operationId: remove_board_member + summary: Remove Member from Board + description: | + Only the admin user (the first user) can call the REST API. tags: - Users + - Boards consumes: - multipart/form-data - application/json parameters: - name: action in: formData - description: the action value + description: | + the action (needs to be `remove`) type: string required: true - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: user in: path - description: the user value + description: | + the user ID type: string required: true produces: @@ -1693,6 +1925,13 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string + title: + type: string /api/boards/{board}/swimlanes: get: operationId: get_all_swimlanes @@ -1787,18 +2026,23 @@ paths: schema: $ref: "#/definitions/Swimlanes" delete: - operationId: delete_board_swimlane + operationId: delete_swimlane + summary: Delete a swimlane + description: | + The swimlane will be deleted, not moved to the recycle bin tags: - Swimlanes parameters: - name: board in: path - description: the board value + description: | + the ID of the board type: string required: true - name: swimlane in: path - description: the swimlane value + description: | + the ID of the swimlane type: string required: true produces: @@ -1809,20 +2053,28 @@ paths: '200': description: |- 200 response + schema: + type: object + properties: + _id: + type: string /api/boards/{board}/swimlanes/{swimlane}/cards: get: - operationId: get_board_swimlane_cards + operationId: get_swimlane_cards + summary: get all cards attached to a swimlane tags: - Cards parameters: - name: board in: path - description: the board value + description: | + the board ID type: string required: true - name: swimlane in: path - description: the swimlane value + description: | + the swimlane ID type: string required: true produces: @@ -1833,6 +2085,19 @@ paths: '200': description: |- 200 response + schema: + type: array + items: + type: object + properties: + _id: + type: string + title: + type: string + description: + type: string + listId: + type: string /api/user: get: operationId: get_current_user @@ -3071,6 +3336,10 @@ definitions: description: | does the user want to hide system messages? type: boolean + hideCheckedItems: + description: | + does the user want to hide checked checklist items? + type: boolean hiddenSystemMessages: description: | does the user want to hide system messages? @@ -3132,8 +3401,8 @@ definitions: boardView field of the user type: string enum: - - board-view-lists - board-view-swimlanes + - board-view-lists - board-view-cal listSortBy: description: | diff --git a/public/site.webmanifest b/public/site.webmanifest index 997a52ec..1be96989 100644 --- a/public/site.webmanifest +++ b/public/site.webmanifest @@ -11,6 +11,21 @@ "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" + }, + { + "src": "/Square150x150Logo.scale-100.png", + "sizes": "150x150", + "type": "image/png" + }, + { + "src": "/Square44x44Logo.scale-100.png", + "sizes": "44x44", + "type": "image/png" + }, + { + "src": "/StoreLogo.scale-100.png", + "sizes": "50x50", + "type": "image/png" } ], "theme_color": "#ffffff", diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh index 818d9923..e07dfc0e 100755 --- a/rebuild-wekan.sh +++ b/rebuild-wekan.sh @@ -5,7 +5,7 @@ echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correct echo " You can still use any other locale as your main locale." #Below script installs newest node 8.x for Debian/Ubuntu/Mint. -#NODE_VERSION=12.18.0 +#NODE_VERSION=12.18.2 #X64NODE="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" function pause(){ @@ -64,7 +64,8 @@ function npm_call(){ echo PS3='Please enter your choice: ' -options=("Install Wekan dependencies" "Build Wekan" "Run Meteor for development on Ethernet IP address port 4000" "Run Meteor for development on Custom IP address and port" "Quit") +options=("Install Wekan dependencies" "Build Wekan" "Run Meteor for dev on http://localhost:4000" "Run Meteor for dev on http://CURRENT-IP-ADDRESS:4000" "Run Meteor for dev on http://CUSTOM-IP-ADDRESS:PORT" "Quit") + select opt in "${options[@]}" do case $opt in @@ -79,7 +80,7 @@ do curl -0 -L https://npmjs.org/install.sh | sudo sh sudo chown -R $(id -u):$(id -g) $HOME/.npm sudo npm -g install n - sudo n 12.18.0 + sudo n 12.18.2 #curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - #sudo apt-get install -y nodejs elif [[ "$OSTYPE" == "darwin"* ]]; then @@ -166,13 +167,18 @@ do break ;; - "Run Meteor for development on Ethernet IP address port 4000") - IPADDRESS=$(ip addr show enp2s0 | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1) + "Run Meteor for dev on http://localhost:4000") + WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://localhost:4000 meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000 + break + ;; + + "Run Meteor for dev on http://CURRENT-IP-ADDRESS:4000") + IPADDRESS=$(ip a | grep 'scope global' | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1) WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://$IPADDRESS:4000 meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000 break ;; - "Run Meteor for development on Custom IP address and port") + "Run Meteor for dev on http://CUSTOM-IP-ADDRESS:PORT") ip address echo "From above list, what is your IP address?" read IPADDRESS diff --git a/releases/release-sandstorm.sh b/releases/release-sandstorm.sh index 069df417..65a0e640 100755 --- a/releases/release-sandstorm.sh +++ b/releases/release-sandstorm.sh @@ -18,7 +18,7 @@ cd $REPODIR rm -rf $WEKANDIR git clone git@github.com:wekan/wekan.git cd $WEKANDIR -sudo n 12.18.0 +sudo n 12.18.2 sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp # Build Wekan ./releases/rebuild-release.sh diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index e2d67fbf..521fb772 100644 --- a/sandstorm-pkgdef.capnp +++ b/sandstorm-pkgdef.capnp @@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Wekan"), # The name of the app as it is displayed to the user. - appVersion = 411, + appVersion = 420, # Increment this for every release. - appMarketingVersion = (defaultText = "4.11.0~2020-06-04"), + appMarketingVersion = (defaultText = "4.20.0~2020-07-20"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, diff --git a/server/migrations.js b/server/migrations.js index 5655bd1d..85d10c8e 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -246,19 +246,6 @@ Migrations.add('add-checklist-items', () => { }); }); -Migrations.add('add-profile-view', () => { - Users.find().forEach(user => { - if (!user.hasOwnProperty('profile.boardView')) { - // Set default view - Users.direct.update( - { _id: user._id }, - { $set: { 'profile.boardView': 'board-view-lists' } }, - noValidate, - ); - } - }); -}); - Migrations.add('add-card-types', () => { Cards.find().forEach(card => { Cards.direct.update( @@ -1044,3 +1031,16 @@ Migrations.add('add-sort-field-to-boards', () => { } }); }); + +Migrations.add('add-default-profile-view', () => { + Users.find().forEach(user => { + if (!user.hasOwnProperty('profile.boardView')) { + // Set default view + Users.direct.update( + { _id: user._id }, + { $set: { 'profile.boardView': 'board-view-swimlanes' } }, + noValidate, + ); + } + }); +}); diff --git a/snapcraft.yaml b/snapcraft.yaml index b1bfb161..816f97a2 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -81,7 +81,7 @@ parts: wekan: source: . plugin: nodejs - node-engine: 12.18.0 + node-engine: 12.18.2 node-packages: - node-gyp - node-pre-gyp diff --git a/stacksmith/user-scripts/build.sh b/stacksmith/user-scripts/build.sh index 7b27a453..4d57bb26 100755 --- a/stacksmith/user-scripts/build.sh +++ b/stacksmith/user-scripts/build.sh @@ -2,7 +2,7 @@ set -euxo pipefail BUILD_DEPS="bsdtar gnupg wget curl bzip2 python git ca-certificates perl-Digest-SHA" -NODE_VERSION=v12.17.0 +NODE_VERSION=v12.18.2 #METEOR_RELEASE=1.6.0.1 - for Stacksmith, meteor-1.8 branch that could have METEOR@1.8.1-beta.8 or newer USE_EDGE=false METEOR_EDGE=1.5-beta.17 diff --git a/start-wekan.bat b/start-wekan.bat index 272e963e..cfea7001 100755..100644 --- a/start-wekan.bat +++ b/start-wekan.bat @@ -1,9 +1,4 @@ -REM ------------------------------------------------------------ - -REM NOTE: THIS .BAT DOES NOT WORK !! -REM Use instead this webpage instructions to build on Windows: -REM https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows -REM Please add fix PRs, like config of MongoDB etc. +@ECHO OFF REM ------------------------------------------------------------ @@ -12,11 +7,13 @@ REM SET DEBUG=true REM ------------------------------------------------------------ +SET ROOT_URL=http://localhost +SET PORT=80 SET MONGO_URL=mongodb://127.0.0.1:27017/wekan -SET ROOT_URL=http://127.0.0.1:2000/ -SET MAIL_URL=smtp://user:pass@mailserver.example.com:25/ -SET MAIL_FROM=admin@example.com -SET PORT=2000 + +REM https://github.com/wekan/wekan/wiki/Troubleshooting-Mail +REM SET MAIL_URL=smtps://username:password@email-smtp.eu-west-1.amazonaws.com:587/ +REM SET MAIL_FROM="Wekan Boards <info@example.com>" REM # If you disable Wekan API with false, Export Board does not work. SET WITH_API=true @@ -395,6 +392,4 @@ REM # LOGOUT_ON_MINUTES : The number of minutes REM # example : LOGOUT_ON_MINUTES=55 REM SET LOGOUT_ON_MINUTES= -cd .build\bundle node main.js -cd ..\.. diff --git a/torodb-postgresql/docker-compose.yml b/torodb-postgresql/docker-compose.yml index 793a9b4f..5ea02525 100644 --- a/torodb-postgresql/docker-compose.yml +++ b/torodb-postgresql/docker-compose.yml @@ -173,7 +173,7 @@ services: # that if you're using more than 1 instance of Wekan # (or any MeteorJS based tool) you're supposed to set # MONGO_OPLOG_URL as an environment variable. - # Without setting it, Meteor will perform a pull-and-diff + # Without setting it, Meteor will perform a poll-and-diff # update of it's dataset. With it, Meteor will update from # the OPLOG. See here # https://blog.meteor.com/tuning-meteor-mongo-livedata-for-scalability-13fe9deb8908 |