From df9851e2b7a37138476fbd12d5ca209835047d97 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Fri, 5 Jun 2020 08:29:46 +0200 Subject: [PATCH 001/105] Copy the labels only if the target board is different This fixes the issues https://github.com/wekan/wekan/issues/2404 and https://github.com/wekan/wekan/issues/2970 if the target board doesn't differ from the source board. --- models/cards.js | 111 ++++++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 51 deletions(-) diff --git a/models/cards.js b/models/cards.js index e1d48653b..f78fb76c0 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; @@ -1298,8 +1302,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 +1347,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, }); From 1f85b25549b50602380f1745f19e5fe44fe36d6f Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Sat, 6 Jun 2020 11:26:06 +0200 Subject: [PATCH 002/105] WIP: markdown --- .meteor/packages | 1 + .meteor/versions | 3 ++- packages/markdown/markdown.js | 9 --------- packages/markdown/package.js | 18 +++++++++++------- packages/markdown/src/checkNpmVersions.js | 5 +++++ packages/markdown/src/markdown.js | 9 +++++++++ packages/markdown/src/template-integration.js | 18 ++++++++++++++++++ packages/markdown/template-integration.js | 16 ---------------- 8 files changed, 46 insertions(+), 33 deletions(-) delete mode 100755 packages/markdown/markdown.js create mode 100644 packages/markdown/src/checkNpmVersions.js create mode 100755 packages/markdown/src/markdown.js create mode 100755 packages/markdown/src/template-integration.js delete mode 100755 packages/markdown/template-integration.js diff --git a/.meteor/packages b/.meteor/packages index ba278f347..cb1151110 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 127079d4b..b46280c4d 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -177,6 +177,7 @@ templating@1.3.2 templating-compiler@1.3.3 templating-runtime@1.3.2 templating-tools@1.1.2 +tmeasday:check-npm-versions@0.3.2 tracker@1.2.0 twbs:bootstrap@3.3.6 ui@1.0.13 @@ -191,7 +192,7 @@ webapp-hashing@1.0.9 wekan-accounts-cas@0.1.0 wekan-accounts-oidc@1.0.10 wekan-ldap@0.0.2 -wekan-markdown@1.0.8 +wekan-markdown@1.0.9 wekan-oidc@1.0.12 wekan-scrollbar@3.1.3 yasaricli:slugify@0.0.7 diff --git a/packages/markdown/markdown.js b/packages/markdown/markdown.js deleted file mode 100755 index bb015cc4a..000000000 --- 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/package.js b/packages/markdown/package.js index 0838922ba..552288560 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 000000000..350ca549b --- /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 000000000..8e003f262 --- /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 000000000..bd8eec47d --- /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 301bde31d..000000000 --- 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)); - })); -} From e127895cf38f5bcefa7e65aea9e4c7041711b813 Mon Sep 17 00:00:00 2001 From: Jimmy Jones Date: Sun, 7 Jun 2020 20:18:17 +0100 Subject: [PATCH 003/105] OpenShift template updates * Remove status fields (this is created by Kubernetes at run time) * The latest MongoDB by [default available with OpenShift is 3.6](https://github.com/openshift/origin/blob/master/examples/image-streams/image-streams-rhel7.json#L334) * Change MongoDB service name to contain wekan to avoid potentially conflicting with other mongodb instances in the same project --- openshift/wekan.yml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/openshift/wekan.yml b/openshift/wekan.yml index 28f633007..3d08451b1 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 From fb44df981581354bf23a6928427ad2bf73c4550f Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Sun, 7 Jun 2020 22:58:56 +0200 Subject: [PATCH 004/105] WIP: XSS fixes --- client/components/activities/activities.jade | 56 +++++++++---------- client/components/activities/activities.js | 28 +++++++--- .../components/rules/actions/cardActions.jade | 2 +- 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index c86936a01..77acd6a34 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 5d356f6e5..b6635da15 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({ @@ -57,7 +59,7 @@ BlazeComponent.extendComponent({ return checkItem && checkItem.title; }, - boardLabel() { + boardLabelLink() { const data = this.currentData(); if (data.mode !== 'board') { return createBoardLink(data.activity.board(), data.activity.listName); @@ -65,10 +67,10 @@ BlazeComponent.extendComponent({ return TAPi18n.__('this-board'); }, - cardLabel() { + cardLabelLink() { const data = this.currentData(); if (data.mode !== 'card') { - return createCardLink(this.currentData().activity.card()); + return createCardLink(data.activity.card()); } return TAPi18n.__('this-card'); }, @@ -134,11 +136,11 @@ BlazeComponent.extendComponent({ { href: source.url, }, - source.system, + sanitizeXss(source.system), ), ); } else { - return source.system; + return sanitizeXss(source.system); } } return null; @@ -162,10 +164,10 @@ BlazeComponent.extendComponent({ href: attachment.url({ download: true }), target: '_blank', }, - attachment.name(), + sanitizeXss(attachment.name()), ), )) || - this.currentData().activity.attachmentName + sanitizeXss(this.currentData().activity.attachmentName) ); }, @@ -202,7 +204,15 @@ BlazeComponent.extendComponent({ }, }).register('activity'); +Template.activity.helpers({ + sanitize(value) { + return sanitizeXss(value); + }, +}); + function createCardLink(card) { + if (!card) + return ''; return ( card && Blaze.toHTML( @@ -211,7 +221,7 @@ function createCardLink(card) { href: card.absoluteUrl(), class: 'action-card', }, - card.title, + sanitizeXss(card.title), ), ) ); @@ -228,7 +238,7 @@ function createBoardLink(board, list) { href: board.absoluteUrl(), class: 'action-board', }, - text, + sanitizeXss(text), ), ) ); diff --git a/client/components/rules/actions/cardActions.jade b/client/components/rules/actions/cardActions.jade index c10c4b2b7..469c1c508 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 }}} // XSS?! div.trigger-button.js-set-color-action.js-goto-rules i.fa.fa-plus From f935cf391e042c6268a34cfaef28391cbaaac93c Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:26:00 +0300 Subject: [PATCH 005/105] Update translations. From 8c3322f9a93c321e8a2cc5cfcd4b1d6316a5fb7c Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:28:53 +0300 Subject: [PATCH 006/105] Change default view to Swimlanes. Thanks to xet7 ! --- client/components/boards/boardHeader.jade | 2 +- client/components/swimlanes/swimlanes.js | 11 ++++++++-- models/users.js | 8 +++---- server/migrations.js | 26 +++++++++++------------ 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 4c0edac49..a8bdc8c50 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -105,7 +105,7 @@ template(name="boardHeaderBar") i.fa.fa-th-large 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( diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 753fa88b1..bfb075302 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -23,8 +23,15 @@ function currentCardIsInThisList(listId, swimlaneId) { currentCard.listId === listId && currentCard.swimlaneId === swimlaneId ); - // Default view: board-view-lists - else return currentCard && currentCard.listId === listId; + // OLD: Default view: board-view-lists + ////else return currentCard && currentCard.listId === listId; + // NEW: Default view: board-view-swimlanes +else return ( + currentCard && + currentCard.listId === listId && + currentCard.swimlaneId === swimlaneId +); + // https://github.com/wekan/wekan/issues/1623 // https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de // TODO: In public board, if you would like to switch between List/Swimlane view, you could diff --git a/models/users.js b/models/users.js index 976e5068b..679d48158 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', }; } }, @@ -218,8 +218,8 @@ Users.attachSchema( type: String, optional: true, allowedValues: [ - 'board-view-lists', 'board-view-swimlanes', + 'board-view-lists', 'board-view-cal', ], }, @@ -903,7 +903,7 @@ if (Meteor.isServer) { user.profile = { initials, fullname: user.services.oidc.fullname, - boardView: 'board-view-lists', + boardView: 'board-view-swimlanes', }; user.authenticationMethod = 'oauth2'; @@ -961,7 +961,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( diff --git a/server/migrations.js b/server/migrations.js index 5655bd1d4..85d10c8e1 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, + ); + } + }); +}); From 6b22f96313354b45b851b93c25aa392bbe346bdb Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:30:26 +0300 Subject: [PATCH 007/105] Use markdown in Swimlane titles. Thanks to xet7 ! --- client/components/swimlanes/swimlaneHeader.jade | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade index 72a7f0544..9228bf75e 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 From 415e94d187ffcb9a4afaecc5c6960a50a87ca7eb Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:32:17 +0300 Subject: [PATCH 008/105] Fix indent. Thanks to xet7 ! --- client/components/activities/activities.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index b6635da15..23ab70ed3 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -211,8 +211,7 @@ Template.activity.helpers({ }); function createCardLink(card) { - if (!card) - return ''; + if (!card) return ''; return ( card && Blaze.toHTML( From 61e682470cdaef42cce2d74b41fb752cfc61848b Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:33:38 +0300 Subject: [PATCH 009/105] Default view Swimlanes part 2. Thanks to xet7 ! --- client/components/swimlanes/swimlanes.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index bfb075302..afd5da22a 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -26,11 +26,12 @@ function currentCardIsInThisList(listId, swimlaneId) { // OLD: Default view: board-view-lists ////else return currentCard && currentCard.listId === listId; // NEW: Default view: board-view-swimlanes -else return ( - currentCard && - currentCard.listId === listId && - currentCard.swimlaneId === swimlaneId -); + else + return ( + currentCard && + currentCard.listId === listId && + currentCard.swimlaneId === swimlaneId + ); // https://github.com/wekan/wekan/issues/1623 // https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de From 99f68f36b028d6c75acf2e5b83585b1acee65f97 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:34:45 +0300 Subject: [PATCH 010/105] Fix XSS. Thanks to xet7 ! --- client/components/rules/actions/cardActions.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/components/rules/actions/cardActions.jade b/client/components/rules/actions/cardActions.jade index 469c1c508..0840283b7 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 }}} // XSS?! + | {{_ cardColorButtonText }} div.trigger-button.js-set-color-action.js-goto-rules i.fa.fa-plus From 96494bacf550cde65598e6d59199517f311aa33d Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:35:25 +0300 Subject: [PATCH 011/105] Fix indent part 2. Thanks to xet7 ! --- models/cards.js | 4 ++-- models/users.js | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/models/cards.js b/models/cards.js index e1d48653b..ca2083393 100644 --- a/models/cards.js +++ b/models/cards.js @@ -2169,7 +2169,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 +2210,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, diff --git a/models/users.js b/models/users.js index 679d48158..f3fc1046e 100644 --- a/models/users.js +++ b/models/users.js @@ -1109,10 +1109,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 +1140,7 @@ if (Meteor.isServer) { Users.update(fakeUserId.get(), { $set: { 'profile.cardTemplatesSwimlaneId': swimlaneId }, }); - future1.return(); + future1.return(); }, ); @@ -1158,7 +1158,7 @@ if (Meteor.isServer) { Users.update(fakeUserId.get(), { $set: { 'profile.listTemplatesSwimlaneId': swimlaneId }, }); - future2.return(); + future2.return(); }, ); @@ -1176,22 +1176,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). From cb1e91fee83eaad1e926c288c0abfc1e4f2a8bd4 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:37:20 +0300 Subject: [PATCH 012/105] Update minifier-css. Thanks to xet7 ! --- .meteor/versions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.meteor/versions b/.meteor/versions index b46280c4d..71815aa7b 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -101,7 +101,7 @@ meteorhacks:collection-utils@1.2.0 meteorhacks:picker@1.0.3 meteorhacks:subs-manager@1.6.4 meteorspark:util@0.2.0 -minifier-css@1.5.0 +minifier-css@1.5.1 minifier-js@2.6.0 minifiers@1.1.8-faster-rebuild.0 minimongo@1.6.0 From 7f6d500cbec15496ae357b05b9df3f10e51ed1f1 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:53:03 +0300 Subject: [PATCH 013/105] Default view Swimlanes part 3: Change dropdown order to Swimlanes/Lists/Calendar. Thanks to xet7 ! --- client/components/boards/boardHeader.jade | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index a8bdc8c50..53346db47 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -172,13 +172,6 @@ template(name="boardChangeWatchPopup") template(name="boardChangeViewPopup") ul.pop-over-list - li - with "board-view-lists" - a.js-open-lists-view - i.fa.fa-trello.colorful - | {{_ 'board-view-lists'}} - if $eq Utils.boardView "board-view-lists" - i.fa.fa-check li with "board-view-swimlanes" a.js-open-swimlanes-view @@ -186,6 +179,13 @@ template(name="boardChangeViewPopup") | {{_ 'board-view-swimlanes'}} if $eq Utils.boardView "board-view-swimlanes" i.fa.fa-check + li + with "board-view-lists" + a.js-open-lists-view + i.fa.fa-trello.colorful + | {{_ 'board-view-lists'}} + if $eq Utils.boardView "board-view-lists" + i.fa.fa-check li with "board-view-cal" a.js-open-cal-view From dcbf92b5b18426078facdb0d983c4747f73ee2d4 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 17:55:43 +0300 Subject: [PATCH 014/105] Update dependencies. --- package-lock.json | 607 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 476 insertions(+), 131 deletions(-) diff --git a/package-lock.json b/package-lock.json index 80afccd09..b793837a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,23 +8,24 @@ "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==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz", + "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==", "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", + "@babel/code-frame": "^7.10.1", + "@babel/generator": "^7.10.2", + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helpers": "^7.10.1", + "@babel/parser": "^7.10.2", + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -35,44 +36,103 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "@babel/code-frame": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", + "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", "requires": { - "@babel/types": "^7.9.6", + "@babel/highlight": "^7.10.1" + } + }, + "@babel/generator": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", + "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", + "requires": { + "@babel/types": "^7.10.2", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, + "@babel/helper-function-name": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", + "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", + "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/highlight": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", + "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "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.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", + "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + }, + "@babel/template": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", + "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "requires": { + "@babel/code-frame": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1" + } }, "@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==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", + "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", "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", + "@babel/code-frame": "^7.10.1", + "@babel/generator": "^7.10.1", + "@babel/helper-function-name": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@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.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", "requires": { - "@babel/helper-validator-identifier": "^7.9.5", + "@babel/helper-validator-identifier": "^7.10.1", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -95,6 +155,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,97 +166,266 @@ "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.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", + "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.1" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/types": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "lodash": "^4.17.13", + "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.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", + "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.1" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/types": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "lodash": "^4.17.13", + "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==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", + "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", "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", + "@babel/helper-module-imports": "^7.10.1", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1", "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", + "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "requires": { + "@babel/highlight": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/highlight": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", + "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", + "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + }, + "@babel/template": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", + "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "requires": { + "@babel/code-frame": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/types": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "lodash": "^4.17.13", + "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.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", + "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.1" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/types": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "lodash": "^4.17.13", + "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==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", + "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", "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" + "@babel/helper-member-expression-to-functions": "^7.10.1", + "@babel/helper-optimise-call-expression": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" }, "dependencies": { - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "@babel/code-frame": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", + "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", "requires": { - "@babel/types": "^7.9.6", + "@babel/highlight": "^7.10.1" + } + }, + "@babel/generator": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", + "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", + "requires": { + "@babel/types": "^7.10.2", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, + "@babel/helper-function-name": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", + "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", + "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/highlight": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", + "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "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.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", + "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + }, + "@babel/template": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", + "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "requires": { + "@babel/code-frame": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1" + } }, "@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==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", + "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", "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", + "@babel/code-frame": "^7.10.1", + "@babel/generator": "^7.10.1", + "@babel/helper-function-name": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@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.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", "requires": { - "@babel/helper-validator-identifier": "^7.9.5", + "@babel/helper-validator-identifier": "^7.10.1", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -203,18 +433,69 @@ } }, "@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.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", + "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", + "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "requires": { + "@babel/highlight": "^7.10.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/highlight": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", + "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", + "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + }, + "@babel/template": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", + "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "requires": { + "@babel/code-frame": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/types": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "lodash": "^4.17.13", + "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,56 +503,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.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", + "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" }, "dependencies": { - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "@babel/code-frame": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", + "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", "requires": { - "@babel/types": "^7.9.6", + "@babel/highlight": "^7.10.1" + } + }, + "@babel/generator": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", + "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", + "requires": { + "@babel/types": "^7.10.2", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, + "@babel/helper-function-name": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", + "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", + "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + }, + "@babel/highlight": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", + "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "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.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", + "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + }, + "@babel/template": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", + "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "requires": { + "@babel/code-frame": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1" + } }, "@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==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", + "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", "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", + "@babel/code-frame": "^7.10.1", + "@babel/generator": "^7.10.1", + "@babel/helper-function-name": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@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.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", "requires": { - "@babel/helper-validator-identifier": "^7.9.5", + "@babel/helper-validator-identifier": "^7.10.1", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -282,6 +623,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 +633,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.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", + "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -305,6 +648,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 +676,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", @@ -3467,15 +3812,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.26.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", + "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==", "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.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz", + "integrity": "sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==", "requires": { "bl": "^2.2.0", "bson": "^1.1.4", @@ -3575,9 +3920,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", @@ -5249,11 +5594,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" } }, From 39519d1cc944c567837be0f88ab4a037e2144c61 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 19:12:17 +0300 Subject: [PATCH 015/105] 1) Public board default view to Swimlane. 2) When changing Public board view (sets view cookie), also reload page so view is changed immediately. Thanks to xet7 ! --- client/components/boards/boardHeader.jade | 4 ++-- client/lib/utils.js | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 53346db47..1daf06183 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -99,10 +99,10 @@ 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-swimlanes'}}{{/if}} diff --git a/client/lib/utils.js b/client/lib/utils.js index c921fddca..754214c07 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'; } }, From 8a622ec7c3043bf8f34399ef34563e6a9a19dcd8 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 19:20:27 +0300 Subject: [PATCH 016/105] Change to correct dependency version. --- package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index b793837a3..2a0c7b398 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5594,11 +5594,11 @@ } }, "xss": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.7.tgz", - "integrity": "sha512-A9v7tblGvxu8TWXQC9rlpW96a+LN1lyw6wyhpTmmGW+FwRMactchBR3ROKSi33UPCUcUHSu8s9YP6F+K3Mw//w==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.6.tgz", + "integrity": "sha512-6Q9TPBeNyoTRxgZFk5Ggaepk/4vUOYdOsIUYvLehcsIZTFjaavbVnsuAkLA5lIFuug5hw8zxcB9tm01gsjph2A==", "requires": { - "commander": "^2.20.3", + "commander": "^2.9.0", "cssfilter": "0.0.10" } }, From ca23934bde44f56285b86abeb79ffbfb56ebffe3 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 20:21:36 +0300 Subject: [PATCH 017/105] Update ChangeLog. --- CHANGELOG.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f2e1d6bf..35a092762 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,43 @@ +# Upcoming 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: From 55534b8b2ee3a6aca40e3d4740bdc0eb5a059af8 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 20:23:34 +0300 Subject: [PATCH 018/105] Fix typos. --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35a092762..46015881c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ This release fixes the following CRITICAL SECURITY VULNERABILITIES: -- Fix XSS bug reported 2020-05-24 by [swsjona](https://twitter.com/swsjona), +- 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), @@ -28,12 +28,12 @@ and adds the following new features: and adds the following updates: - [Update minifier-css](https://github.com/wekan/wekan/commit/cb1e91fee83eaad1e926c288c0abfc1e4f2a8bd4). - Thanks to xet7. + 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). + [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. From ffcd380523e0dc46cbff8bb1507a8f46b0a9c796 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 20:24:40 +0300 Subject: [PATCH 019/105] Update ChangeLog. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46015881c..ad72793dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ This release fixes the following CRITICAL SECURITY VULNERABILITIES: and adds the following new features: -- Change default view to Swimlanes +- 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), From 07d1a864d834cf0a5b94339197cbf73e3353ea93 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 20:29:55 +0300 Subject: [PATCH 020/105] v4.12 --- CHANGELOG.md | 2 +- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 16 ++++++++-------- public/api/wekan.yml | 4 ++-- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad72793dc..34bfe9ac9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v4.12 2020-06-08 Wekan release This release fixes the following CRITICAL SECURITY VULNERABILITIES: diff --git a/Stackerfile.yml b/Stackerfile.yml index 61c3db38d..4ebaeff36 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.12.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index 2a0c7b398..edfda4fcb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.11.0", + "version": "v4.12.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index da891beca..56c406433 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.11.0", + "version": "v4.12.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index 9d3114fd1..741c7f360 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
  • - Wekan REST API v4.11 + Wekan REST API v4.12
  • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
    -

    Wekan REST API v4.11

    +

    Wekan REST API v4.12

    Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

    @@ -11858,7 +11858,7 @@ System.out.println(response.toString()); "string" ], "icode": "string", - "boardView": "board-view-lists", + "boardView": "board-view-swimlanes", "listSortBy": "-modifiedat", "templatesBoardId": "string", "cardTemplatesSwimlaneId": "string", @@ -12514,7 +12514,7 @@ System.out.println(response.toString()); "string" ], "icode": "string", - "boardView": "board-view-lists", + "boardView": "board-view-swimlanes", "listSortBy": "-modifiedat", "templatesBoardId": "string", "cardTemplatesSwimlaneId": "string", @@ -15944,7 +15944,7 @@ UserSecurity "string" ], "icode": "string", - "boardView": "board-view-lists", + "boardView": "board-view-swimlanes", "listSortBy": "-modifiedat", "templatesBoardId": "string", "cardTemplatesSwimlaneId": "string", @@ -16113,7 +16113,7 @@ UserSecurity "string" ], "icode": "string", - "boardView": "board-view-lists", + "boardView": "board-view-swimlanes", "listSortBy": "-modifiedat", "templatesBoardId": "string", "cardTemplatesSwimlaneId": "string", @@ -16301,11 +16301,11 @@ UserSecurity boardView -board-view-lists +board-view-swimlanes boardView -board-view-swimlanes +board-view-lists boardView diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 40fcf4b4f..33d1c2465 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.12 description: | The REST API allows you to control and extend Wekan with ease. @@ -3132,8 +3132,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/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index e2d67fbf4..561ef6120 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 = 412, # Increment this for every release. - appMarketingVersion = (defaultText = "4.11.0~2020-06-04"), + appMarketingVersion = (defaultText = "4.12.0~2020-06-08"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From 573ca73b45428cd3caac24175fa74fe15a443a02 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 8 Jun 2020 21:22:34 +0300 Subject: [PATCH 021/105] Use Docker Hub image, it did build faster this time. --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6a88ab933..cc60d2948 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 From 1aa8f502ae4626b9f2240f9cd57f6118b4ae5b8c Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Tue, 9 Jun 2020 17:05:53 +0200 Subject: [PATCH 022/105] Fix condition whether a card is in list This fixes the issues https://github.com/wekan/wekan/issues/3164, https://github.com/wekan/wekan/issues/3162, and https://github.com/wekan/wekan/issues/3163. While at it, remove now useless comments. --- client/components/swimlanes/swimlanes.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index afd5da22a..1fc97a892 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -23,15 +23,7 @@ function currentCardIsInThisList(listId, swimlaneId) { currentCard.listId === listId && currentCard.swimlaneId === swimlaneId ); - // OLD: Default view: board-view-lists - ////else return currentCard && currentCard.listId === listId; - // NEW: Default view: board-view-swimlanes - else - return ( - currentCard && - currentCard.listId === listId && - currentCard.swimlaneId === swimlaneId - ); + else return currentCard && currentCard.listId === listId; // https://github.com/wekan/wekan/issues/1623 // https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de From 444fff47dc0355731fcd3a0f18591042af271453 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 9 Jun 2020 22:16:00 +0300 Subject: [PATCH 023/105] Update ChangeLog. --- CHANGELOG.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34bfe9ac9..bd00a46cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,27 @@ +# Upcoming Wekan release + +This release adds the following updates: + +- [OpenShift template updates: + 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](https://github.com/wekan/wekan/pull/3158). + Thanks to jimmyjones2. + +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. + +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): +- 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), From b6cc6c440dd6814da5f184212ecd0dc4e4c3e32f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 9 Jun 2020 22:27:34 +0300 Subject: [PATCH 024/105] Update ChangeLog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd00a46cc..4f14322be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ 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. From 781b384fe9d5c4b415dc17ee6dcb04c7a1fbb735 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 9 Jun 2020 22:29:18 +0300 Subject: [PATCH 025/105] Update translations. From a562ee4ba1e8bb392bdfa6a2b29a65336ca171f3 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 9 Jun 2020 22:34:18 +0300 Subject: [PATCH 026/105] Update ChangeLog. --- CHANGELOG.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f14322be..e74c33c0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,10 @@ This release adds the following updates: -- [OpenShift template updates: +- [OpenShift template updates](https://github.com/wekan/wekan/pull/3158): 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](https://github.com/wekan/wekan/pull/3158). + 3) Change MongoDB service name to contain wekan to avoid potentially conflicting with other mongodb instances in the same project Thanks to jimmyjones2. and fixes the following bugs: From c4df69a05bd48a61f2128f7dd2704cc017c256e6 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 9 Jun 2020 22:35:44 +0300 Subject: [PATCH 027/105] Update ChangeLog. --- CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e74c33c0a..1cc31dbad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,10 @@ This release adds the following updates: -- [OpenShift template updates](https://github.com/wekan/wekan/pull/3158): +- [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 - Thanks to jimmyjones2. + 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: From 2e93a975c4e546966109c5fe48613e722881b47e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 9 Jun 2020 22:41:46 +0300 Subject: [PATCH 028/105] v4.13 --- CHANGELOG.md | 2 +- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 4 ++-- public/api/wekan.yml | 2 +- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cc31dbad..88f5f4519 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v4.13 2020-06-09 Wekan release This release adds the following updates: diff --git a/Stackerfile.yml b/Stackerfile.yml index 4ebaeff36..e0c2446c7 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.12.0" +appVersion: "v4.13.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index edfda4fcb..7823fe264 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.12.0", + "version": "v4.13.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 56c406433..a7e5df964 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.12.0", + "version": "v4.13.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index 741c7f360..b4068d09d 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
    • - Wekan REST API v4.12 + Wekan REST API v4.13
    • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
      -

      Wekan REST API v4.12

      +

      Wekan REST API v4.13

      Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

      diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 33d1c2465..41529cfad 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.12 + version: v4.13 description: | The REST API allows you to control and extend Wekan with ease. diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 561ef6120..f357c4eac 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 = 412, + appVersion = 413, # Increment this for every release. - appMarketingVersion = (defaultText = "4.12.0~2020-06-08"), + appMarketingVersion = (defaultText = "4.13.0~2020-06-09"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From 5755ece33e9fc5967c0b726abed0912fde9612db Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Tue, 9 Jun 2020 23:32:00 +0200 Subject: [PATCH 029/105] Add user option to hide finished checklist items Add a user option to hide finished items in a checklist. --- client/components/cards/checklists.jade | 18 ++++++++++++++---- client/components/cards/checklists.js | 16 ++++++++++++++++ client/components/cards/checklists.styl | 13 +++++++++++++ i18n/en.i18n.json | 3 ++- models/users.js | 25 +++++++++++++++++++++++++ public/api/wekan.yml | 4 ++++ 6 files changed, 74 insertions(+), 5 deletions(-) diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index 1b1e088ac..25aa11b95 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 29573d2b6..17faa7734 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 0a6d688ba..f8c36a122 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,15 @@ 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 &.placeholder background: darken(white, 20%) diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 96862e47b..f8820efec 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/models/users.js b/models/users.js index f3fc1046e..2b5a059ef 100644 --- a/models/users.js +++ b/models/users.js @@ -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? @@ -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()); diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 33d1c2465..4391b4d6b 100644 --- a/public/api/wekan.yml +++ b/public/api/wekan.yml @@ -3071,6 +3071,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? From aa4bdf7efbaed50d2c6249929fdcd59af308cc22 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Tue, 9 Jun 2020 23:41:01 +0200 Subject: [PATCH 030/105] Strikethrough checked items --- client/components/cards/checklists.styl | 1 + 1 file changed, 1 insertion(+) diff --git a/client/components/cards/checklists.styl b/client/components/cards/checklists.styl index f8c36a122..0f4e7d330 100644 --- a/client/components/cards/checklists.styl +++ b/client/components/cards/checklists.styl @@ -141,6 +141,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 From 2d4f29cb5a300288196c94a03903bf70808efb0a Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 10 Jun 2020 15:17:27 +0300 Subject: [PATCH 031/105] Update ChangeLog. --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88f5f4519..0c52ece87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# Upcoming 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. + +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: From 06cacd7a5a974cb076dc457a15e544d5deb05441 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Wed, 10 Jun 2020 23:50:48 +0200 Subject: [PATCH 032/105] Fix infinite scrolling for activities This fixes the error: Uncaught TypeError: activitiesComponent.loadNextPage is not a function at constructor.reachNextPeak (sidebar.js:63) at constructor.BlazeComponent.callFirstWith (peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:660) at constructor.scroll (infiniteScrolling.js:28) at peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:469 at Object.Blaze._withCurrentView (view.js:533) at peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:468 at Template._withTemplateInstanceFunc (template.js:490) at Blaze.View.eventMap. (peerlibrary_blaze-components.js?hash=4049f7e3116e3d9e865392b9546e70dc479b9add:467) at view.js:879 at Object.Blaze._withCurrentView (view.js:533) --- client/components/activities/activities.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 23ab70ed3..edfaab2a0 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -7,7 +7,7 @@ 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 + const sidebar = Sidebar; sidebar.callFirstWith(null, 'resetNextPeak'); this.autorun(() => { let mode = this.data().mode; @@ -43,16 +43,15 @@ 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 }); From 1617577378fc17ca09fd3ef34f24e02c2889aa9f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 11 Jun 2020 15:27:11 +0300 Subject: [PATCH 033/105] Update ChangeLog. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c52ece87..ae90415e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ This release adds the following new features: items](https://github.com/wekan/wekan/pull/3167). Thanks to marc1006. +and fixes the following bugs: + +- [Fix infinite scrolling for activities](https://github.com/wekan/wekan/pull/3168). + Thanks to marc1006. + Thanks to above GitHub users for their contributions and translators for their translations. # v4.13 2020-06-09 Wekan release From e4de42d487b8d965276fdb7ce770cf58d562e766 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 11 Jun 2020 16:32:48 +0300 Subject: [PATCH 034/105] Update translations. --- i18n/ar.i18n.json | 3 ++- i18n/bg.i18n.json | 3 ++- i18n/br.i18n.json | 3 ++- i18n/ca.i18n.json | 3 ++- i18n/cs.i18n.json | 3 ++- i18n/da.i18n.json | 3 ++- i18n/de.i18n.json | 3 ++- i18n/el.i18n.json | 3 ++- i18n/en-GB.i18n.json | 3 ++- i18n/eo.i18n.json | 3 ++- i18n/es-AR.i18n.json | 3 ++- i18n/es-CL.i18n.json | 3 ++- i18n/es.i18n.json | 3 ++- i18n/eu.i18n.json | 3 ++- i18n/fa.i18n.json | 3 ++- i18n/fi.i18n.json | 3 ++- i18n/fr.i18n.json | 3 ++- i18n/gl.i18n.json | 3 ++- i18n/he.i18n.json | 3 ++- i18n/hi.i18n.json | 3 ++- i18n/hu.i18n.json | 3 ++- i18n/hy.i18n.json | 3 ++- i18n/id.i18n.json | 3 ++- i18n/ig.i18n.json | 3 ++- i18n/it.i18n.json | 7 ++++--- i18n/ja.i18n.json | 3 ++- i18n/ka.i18n.json | 3 ++- i18n/km.i18n.json | 3 ++- i18n/ko.i18n.json | 3 ++- i18n/lv.i18n.json | 3 ++- i18n/mk.i18n.json | 3 ++- i18n/mn.i18n.json | 3 ++- i18n/nb.i18n.json | 3 ++- i18n/nl.i18n.json | 3 ++- i18n/oc.i18n.json | 3 ++- i18n/pl.i18n.json | 3 ++- i18n/pt-BR.i18n.json | 3 ++- i18n/pt.i18n.json | 3 ++- i18n/ro.i18n.json | 3 ++- i18n/ru.i18n.json | 3 ++- i18n/sl.i18n.json | 3 ++- i18n/sr.i18n.json | 3 ++- i18n/sv.i18n.json | 3 ++- i18n/sw.i18n.json | 3 ++- i18n/ta.i18n.json | 3 ++- i18n/th.i18n.json | 3 ++- i18n/tr.i18n.json | 3 ++- i18n/uk.i18n.json | 3 ++- i18n/vi.i18n.json | 3 ++- i18n/zh-CN.i18n.json | 3 ++- i18n/zh-HK.i18n.json | 3 ++- i18n/zh-TW.i18n.json | 3 ++- 52 files changed, 106 insertions(+), 54 deletions(-) diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json index 4441143fd..07d42f3d7 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 b9699b8f4..887253472 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 67217ab9c..bd18ada83 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 33e887635..56d99357e 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 1ff7cfda4..8fa3f9e8e 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 a78e76ef0..18611591d 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 f0a353a61..e26b0ca25 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -808,5 +808,6 @@ "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-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/el.i18n.json b/i18n/el.i18n.json index e6024f40d..ef61a0dc3 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 0795c509a..326bc3960 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/eo.i18n.json b/i18n/eo.i18n.json index c83e3f96a..66f085109 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 0c60079ab..1819d0fdc 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 06e9781bf..a29458a35 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 7063d4a27..d952d3329 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 b96705cea..3ce70123e 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 eb2b581b9..6266649e6 100644 --- a/i18n/fa.i18n.json +++ b/i18n/fa.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/fi.i18n.json b/i18n/fi.i18n.json index bb58a6a21..22efb655a 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 0ffbf8673..620b85c6c 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 266bcc267..20f199e58 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 235be7471..406e671dc 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": "Hide checked items" } diff --git a/i18n/hi.i18n.json b/i18n/hi.i18n.json index 504711487..94ca288b9 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 e2450aa8e..5064ff050 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 ead8eb6ce..8c042e5e5 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 de0363598..02341ee7c 100644 --- a/i18n/id.i18n.json +++ b/i18n/id.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/ig.i18n.json b/i18n/ig.i18n.json index c81e041e3..518c480ce 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 b3ddf3d79..f4732dcd7 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 3ea079db0..5fac2a9f4 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": "Hide checked items" } diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json index c3190afbf..bdb532a9c 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 b9ec2c2f3..362c811be 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 5b8388351..e969206d7 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 77e282713..40d760dd6 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 51236fd8e..8e8ea54db 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 57e9573c6..55b6a98ca 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 ddae91711..8132f212a 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 9720b8859..a8c9c1f12 100644 --- a/i18n/nl.i18n.json +++ b/i18n/nl.i18n.json @@ -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": "Hide checked items" } diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json index bcd1b039d..93b9c8a18 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 b27706d41..208074317 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 7533c8c49..444976312 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 05075ac83..3d9faaa8b 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 927fb4513..92d530d23 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 c6264cf4d..31c98d7c2 100644 --- a/i18n/ru.i18n.json +++ b/i18n/ru.i18n.json @@ -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": "Hide checked items" } diff --git a/i18n/sl.i18n.json b/i18n/sl.i18n.json index f14d60b63..e7bafc55b 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 660689201..94824dc32 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 bf2d3ff48..336fbd3a1 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 d908b12f4..01ef8636e 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 089b65c2d..8ec2f5180 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 bca08fe2b..4d6ec609a 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 ee3bd9c14..10dcd6eac 100644 --- a/i18n/tr.i18n.json +++ b/i18n/tr.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/uk.i18n.json b/i18n/uk.i18n.json index 2f675da47..d9023866a 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 c0d0c8152..9f8773994 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 a6300a238..a5a1433ab 100644 --- a/i18n/zh-CN.i18n.json +++ b/i18n/zh-CN.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": "Hide checked items" } diff --git a/i18n/zh-HK.i18n.json b/i18n/zh-HK.i18n.json index 0a01b9313..b473bd610 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 945d71f39..b34d3901c 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" } From 06b548f12ed853692db78dbbfbe7988382c0fdee Mon Sep 17 00:00:00 2001 From: Nico Date: Thu, 11 Jun 2020 19:52:44 +0200 Subject: [PATCH 035/105] edit_card start vote better visibility what was voted --- client/components/cards/cardDetails.jade | 10 +++++-- client/components/cards/cardDetails.js | 22 ++------------ client/components/cards/minicard.jade | 4 +-- client/components/cards/minicard.styl | 5 ++++ models/cards.js | 37 ++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 23 deletions(-) diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 2aa776273..dda95e3e9 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 11e010d47..a91d9b6e0 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/minicard.jade b/client/components/cards/minicard.jade index 8afe19767..03511e0a5 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 7d72a5889..03d242ac7 100644 --- a/client/components/cards/minicard.styl +++ b/client/components/cards/minicard.styl @@ -299,3 +299,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/models/cards.js b/models/cards.js index 2e297d637..1ccc836af 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1112,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()) { @@ -2374,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( @@ -2473,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)) { From 336a22555f7c6baf81587c6f10e818a7c1cdce90 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 12 Jun 2020 07:22:36 +0200 Subject: [PATCH 036/105] openapi: fix jsdoc/operation matching The script was considering that the operation associated to a jsdoc was declared on the line just after the end of the jsdoc. Turns out that adding new lines makes the code clearer, but the python script was then ignoring some jsdocs. Change the behaviour to consider that the jsdoc associated with an operation is the last one declared after the end of the previous operation. Fixes #3169 --- openapi/generate_openapi.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py index 54526416f..b843feff6 100644 --- a/openapi/generate_openapi.py +++ b/openapi/generate_openapi.py @@ -814,13 +814,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, From f1660e3b9f1c83b8d786f578bfe3b7d0f53a81bd Mon Sep 17 00:00:00 2001 From: Henrik Gustafsson <3796374+hgustafsson@users.noreply.github.com> Date: Fri, 5 Jun 2020 14:37:07 -0400 Subject: [PATCH 037/105] Alignment and spacing of minicard labels --- client/components/cards/minicard.styl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl index 7d72a5889..1a923a68b 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 From 6e0ae161adda76b12370fd0b9b6049f0d222e612 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Sun, 14 Jun 2020 21:28:28 +0200 Subject: [PATCH 038/105] Remove top and bottom margin for hidden checklist items Remove top and bottom margin for hidden checklist items, otherwise there could be a gap between unchecked items if multiple hidden/checked items were between them. --- client/components/cards/checklists.styl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/components/cards/checklists.styl b/client/components/cards/checklists.styl index 0f4e7d330..e9b0fcd8d 100644 --- a/client/components/cards/checklists.styl +++ b/client/components/cards/checklists.styl @@ -112,6 +112,8 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item opacity: 0 height: 0 transition: height 0ms 0ms, opacity 600ms 0ms + margin-top: 0 + margin-bottom: 0 &.placeholder background: darken(white, 20%) From b144fab042fd486d2ec3731b6cc286059002af7a Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 18:05:26 +0300 Subject: [PATCH 039/105] Update ChangeLog. --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae90415e4..e0d5a3f79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ 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 fixes the following bugs: From d42c4fb4f64d551dd341f063ad45a15a398dc59e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 18:14:35 +0300 Subject: [PATCH 040/105] Update ChangeLog. --- CHANGELOG.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0d5a3f79..cfbe2c56c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,17 +2,19 @@ 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). +- [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). +- [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 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. Thanks to above GitHub users for their contributions and translators for their translations. From 100e2d4696a0b76947d1949c5f80be156ecfc217 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 18:17:18 +0300 Subject: [PATCH 041/105] Update translations. --- i18n/fa.i18n.json | 16 ++++++++-------- i18n/he.i18n.json | 2 +- i18n/nl.i18n.json | 6 +++--- i18n/ru.i18n.json | 6 +++--- i18n/zh-CN.i18n.json | 6 +++--- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json index 6266649e6..fb5a672e1 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": "(هیچ)", diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json index 406e671dc..ed29e6690 100644 --- a/i18n/he.i18n.json +++ b/i18n/he.i18n.json @@ -809,5 +809,5 @@ "archived": "בארכיון", "delete-linked-card-before-this-card": "לא ניתן למחוק את הכרטיס הזה לפני שמוחקים את הכרטיס המקושר שיש לו", "delete-linked-cards-before-this-list": "לא ניתן למחוק את הרשימה הזו לפני שמוחקים את הכרטיסים שמצביעים לכרטיסים ברשימה הזו", - "hide-checked-items": "Hide checked items" + "hide-checked-items": "הסתרת הפריטים שסומנו" } diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json index a8c9c1f12..9c73f54fb 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)", @@ -809,5 +809,5 @@ "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", - "hide-checked-items": "Hide checked items" + "hide-checked-items": "Verberg aangevinkte items" } diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json index 31c98d7c2..fbbb38aa6 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": "(нет)", @@ -809,5 +809,5 @@ "archived": "Архивировано", "delete-linked-card-before-this-card": "Вы не можете удалить карточку, не удалив связанную c ней карточку, которая имеет ", "delete-linked-cards-before-this-list": "Вы не можете удалить этот список, не удалив карточки, которые указывают на карточки в этом списке", - "hide-checked-items": "Hide checked items" + "hide-checked-items": "Спрятать отмеченные" } diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json index a5a1433ab..1698517c2 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": "(无)", @@ -809,5 +809,5 @@ "archived": "存档", "delete-linked-card-before-this-card": "在你首次删除卡片前你无法删除此选项卡片", "delete-linked-cards-before-this-list": "在首先删除指向此列表中的卡的链接卡之前,不能删除此列表", - "hide-checked-items": "Hide checked items" + "hide-checked-items": "隐藏选中项" } From 3b2b1087447bc8613baa8254bfec55e3d485bdc4 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 19:55:56 +0300 Subject: [PATCH 042/105] Fix: Unable to delete a custom field in a board. Thanks to xet7 ! Fixes #2605 --- models/customFields.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/models/customFields.js b/models/customFields.js index 9df635bac..83b47fc0a 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({ From 71cbac358bb4483c661a3b0b62a6ae3790806109 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 19:59:33 +0300 Subject: [PATCH 043/105] Update ChangeLog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfbe2c56c..d98f65fcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and fixes the following bugs: 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. From 8f34cdc279602e97085e0a504f7716495349f83c Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 20:02:39 +0300 Subject: [PATCH 044/105] Update dependencies. --- .meteor/versions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.meteor/versions b/.meteor/versions index 71815aa7b..7a6bd733e 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 From a6d4f445fba4d32b69407e7ea8376ce5b444fba2 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 20:08:20 +0300 Subject: [PATCH 045/105] v4.14 --- CHANGELOG.md | 7 ++++++- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 24 ++++++++++++++++++++++-- public/api/wekan.yml | 9 +++++++-- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d98f65fcd..7b1d647d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v4.14 2020-06-16 Wekan release This release adds the following new features: @@ -7,6 +7,11 @@ This release adds the following new features: - [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). diff --git a/Stackerfile.yml b/Stackerfile.yml index e0c2446c7..553292fd9 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.13.0" +appVersion: "v4.14.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index 7823fe264..c5687df5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.13.0", + "version": "v4.14.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a7e5df964..6eaa24627 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.13.0", + "version": "v4.14.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index b4068d09d..23ada44af 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
      • - Wekan REST API v4.13 + Wekan REST API v4.14
      • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
        -

        Wekan REST API v4.13

        +

        Wekan REST API v4.14

        Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

        @@ -7302,6 +7302,7 @@ $.ajax({ "parentId": "string", "description": "string", "color": "string", + "vote": "string", "labelIds": "string", "requestedBy": "string", "assignedBy": "string", @@ -7413,6 +7414,7 @@ System.out.println(response.toString()); parentId: string description: string color: string +vote: string labelIds: string requestedBy: string assignedBy: string @@ -7511,6 +7513,13 @@ System.out.println(response.toString()); the color value +» vote +body +string +true +the vote value + + » labelIds body string @@ -11842,6 +11851,7 @@ System.out.println(response.toString()); ], "fullname": "string", "showDesktopDragHandles": true, + "hideCheckedItems": true, "hiddenSystemMessages": true, "hiddenMinicardLabelText": true, "initials": "string", @@ -12498,6 +12508,7 @@ System.out.println(response.toString()); ], "fullname": "string", "showDesktopDragHandles": true, + "hideCheckedItems": true, "hiddenSystemMessages": true, "hiddenMinicardLabelText": true, "initials": "string", @@ -15928,6 +15939,7 @@ UserSecurity ], "fullname": "string", "showDesktopDragHandles": true, + "hideCheckedItems": true, "hiddenSystemMessages": true, "hiddenMinicardLabelText": true, "initials": "string", @@ -16097,6 +16109,7 @@ UserSecurity ], "fullname": "string", "showDesktopDragHandles": true, + "hideCheckedItems": true, "hiddenSystemMessages": true, "hiddenMinicardLabelText": true, "initials": "string", @@ -16163,6 +16176,13 @@ UserSecurity does the user want to hide system messages? +hideCheckedItems +boolean +false +none +does the user want to hide checked checklist items? + + hiddenSystemMessages boolean false diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 4a2d929bd..2aa49922c 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.13 + version: v4.14 description: | The REST API allows you to control and extend Wekan with ease. @@ -1424,6 +1424,11 @@ paths: description: the color value type: string required: true + - name: vote + in: formData + description: the vote value + type: string + required: true - name: labelIds in: formData description: the labelIds value @@ -3073,7 +3078,7 @@ definitions: type: boolean hideCheckedItems: description: | - does the user want to hide checked checklist items? + does the user want to hide checked checklist items? type: boolean hiddenSystemMessages: description: | diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index f357c4eac..08e9c9a83 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 = 413, + appVersion = 414, # Increment this for every release. - appMarketingVersion = (defaultText = "4.13.0~2020-06-09"), + appMarketingVersion = (defaultText = "4.14.0~2020-06-16"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From f1587753cb0bba38e4b1df2e0300d3dc2826da72 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 20:30:15 +0300 Subject: [PATCH 046/105] Fix lint errors. --- client/components/cards/cardDetails.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index dda95e3e9..d0cfe5bcc 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -223,11 +223,11 @@ template(name="cardDetails") button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}") if voteState i.fa.fa-thumbs-up - {{_ 'vote-for-it'}} + | {{_ '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'}} + | {{_ 'vote-against'}} //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard From e6629779f77676eadfe4465c407f0bee0ec64061 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 20:34:28 +0300 Subject: [PATCH 047/105] Fix lint errors. --- client/components/cards/cardDetails.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index d0cfe5bcc..dabee971e 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -223,11 +223,11 @@ template(name="cardDetails") button.card-details-green.js-vote.js-vote-positive(class="{{#if voteState}}voted{{/if}}") if voteState i.fa.fa-thumbs-up - | {{_ 'vote-for-it'}} + | {{_ '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'}} + | {{_ 'vote-against'}} //- XXX We should use "editable" to avoid repetiting ourselves if canModifyCard From 983714cd7298746dd7437b91cc9464b23b9a1bfd Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Tue, 16 Jun 2020 20:40:12 +0300 Subject: [PATCH 048/105] v4.15 --- CHANGELOG.md | 10 ++++++++++ Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 4 ++-- public/api/wekan.yml | 2 +- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 18 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b1d647d7..528ac066f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# 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: diff --git a/Stackerfile.yml b/Stackerfile.yml index 553292fd9..50325d478 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.14.0" +appVersion: "v4.15.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index c5687df5e..c49fb5a41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.14.0", + "version": "v4.15.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6eaa24627..5cb1e9f8b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.14.0", + "version": "v4.15.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index 23ada44af..d315f3ca3 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
        • - Wekan REST API v4.14 + Wekan REST API v4.15
        • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
          -

          Wekan REST API v4.14

          +

          Wekan REST API v4.15

          Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

          diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 2aa49922c..7e8041201 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.14 + version: v4.15 description: | The REST API allows you to control and extend Wekan with ease. diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 08e9c9a83..27dc1be51 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 = 414, + appVersion = 415, # Increment this for every release. - appMarketingVersion = (defaultText = "4.14.0~2020-06-16"), + appMarketingVersion = (defaultText = "4.15.0~2020-06-16"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From 431d884e8371dfbce6d151493044ffcd2a92d10d Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 12 Jun 2020 07:22:36 +0200 Subject: [PATCH 049/105] openapi: fix jsdoc/operation matching The script was considering that the operation associated to a jsdoc was declared on the line just after the end of the jsdoc. Turns out that adding new lines makes the code clearer, but the python script was then ignoring some jsdocs. Change the behaviour to consider that the jsdoc associated with an operation is the last one declared after the end of the previous operation. Fixes #3169 --- openapi/generate_openapi.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py index 54526416f..b843feff6 100644 --- a/openapi/generate_openapi.py +++ b/openapi/generate_openapi.py @@ -814,13 +814,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, From e1ffe943c836d511a6e445d532c3927d0a8f6cf2 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Wed, 17 Jun 2020 05:37:15 +0200 Subject: [PATCH 050/105] openapi: also consider Object type as valid Not sure if this will end up in a correct openapi file, but the docs are correctly generated, so... meh. --- openapi/generate_openapi.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py index b843feff6..fabf38194 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) From 207be3a363d64810dfb69937c1321691b2819839 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Wed, 17 Jun 2020 05:40:17 +0200 Subject: [PATCH 051/105] cards: fix JSDoc There was one missing comma, and the return type was then invalid --- models/cards.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/cards.js b/models/cards.js index 1ccc836af..2fd52827f 100644 --- a/models/cards.js +++ b/models/cards.js @@ -2749,7 +2749,7 @@ if (Meteor.isServer) { * @return_type [{_id: string, * title: string, * description: string, - * listId: string + * listId: string, * swinlaneId: string}] */ JsonRoutes.add( From 6d063a4f64bbe133cb182fdd9d2d97defc60a8fd Mon Sep 17 00:00:00 2001 From: Allemand <37148072+salleman33@users.noreply.github.com> Date: Wed, 17 Jun 2020 18:07:22 +0200 Subject: [PATCH 052/105] Update users.js change method to find existing user --- models/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/users.js b/models/users.js index 2b5a059ef..a1928f979 100644 --- a/models/users.js +++ b/models/users.js @@ -933,7 +933,7 @@ if (Meteor.isServer) { user.authenticationMethod = 'oauth2'; // see if any existing user has this email address or username, otherwise create new - const existingUser = Meteor.users.findOne({ + const existingUser = Users.findOne({ $or: [{ 'emails.address': email }, { username: user.username }], }); if (!existingUser) return user; From f6c377eb9f3f7e62911cadbd0ac8745b537d3f97 Mon Sep 17 00:00:00 2001 From: Allemand <37148072+salleman33@users.noreply.github.com> Date: Wed, 17 Jun 2020 18:44:12 +0200 Subject: [PATCH 053/105] update onCreateUser for oidc correct bug : remove the wrong user ! --- models/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/users.js b/models/users.js index a1928f979..7f234a542 100644 --- a/models/users.js +++ b/models/users.js @@ -946,7 +946,7 @@ 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 }); // remove existing record return existingUser; } From 670b964e6bfc6000cdfe1a6adc343f4c7b406b9e Mon Sep 17 00:00:00 2001 From: Allemand <37148072+salleman33@users.noreply.github.com> Date: Wed, 17 Jun 2020 18:50:44 +0200 Subject: [PATCH 054/105] update comments --- models/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/users.js b/models/users.js index 7f234a542..7ce4edbc2 100644 --- a/models/users.js +++ b/models/users.js @@ -946,7 +946,7 @@ if (Meteor.isServer) { existingUser.profile = user.profile; existingUser.authenticationMethod = user.authenticationMethod; - Meteor.users.remove({ _id: user._id }); // remove existing record + Meteor.users.remove({ _id: user._id }); // remove previous record return existingUser; } From 768412ba7c2da28f2365e9d0152912aeafb61bbc Mon Sep 17 00:00:00 2001 From: Allemand <37148072+salleman33@users.noreply.github.com> Date: Wed, 17 Jun 2020 19:00:40 +0200 Subject: [PATCH 055/105] remove useless comments --- models/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/users.js b/models/users.js index 7ce4edbc2..8675dbad3 100644 --- a/models/users.js +++ b/models/users.js @@ -946,7 +946,7 @@ if (Meteor.isServer) { existingUser.profile = user.profile; existingUser.authenticationMethod = user.authenticationMethod; - Meteor.users.remove({ _id: user._id }); // remove previous record + Meteor.users.remove({ _id: user._id }); return existingUser; } From 40abff4c1ea553461def5917d2c0daf79893875e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 20:06:18 +0300 Subject: [PATCH 056/105] Update ChangeLog. --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 528ac066f..0d62e719b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# Upcoming Wekan release + +This release fixes the following bugs: + +- [OpenAPI: Fix jsdoc/operation matching](https://github.com/wekan/wekan/pull/3171). + Thanks to bentiss. + +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: From f245b6b7faa29b4f276527daca48c305fe9689c1 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 20:21:44 +0300 Subject: [PATCH 057/105] Update users.js etc with global search replace, to try to fix selecting correct user. Thanks to xet7 ! --- fix-download-unicode/cfs_access-point.txt | 2 +- models/export.js | 4 ++-- models/users.js | 12 ++++++------ packages/meteor-accounts-cas/cas_server.js | 4 ++-- packages/meteor-useraccounts-core/Guide.md | 2 +- packages/meteor-useraccounts-core/lib/methods.js | 2 +- packages/meteor-useraccounts-core/lib/server.js | 2 +- .../meteor-useraccounts-core/lib/server_methods.js | 2 +- packages/wekan-accounts-cas/cas_server.js | 4 ++-- packages/wekan-ldap/server/loginHandler.js | 6 +++--- packages/wekan-ldap/server/sync.js | 6 +++--- sandstorm.js | 6 +++--- 12 files changed, 26 insertions(+), 26 deletions(-) diff --git a/fix-download-unicode/cfs_access-point.txt b/fix-download-unicode/cfs_access-point.txt index de1c6c769..2e86ac4ee 100644 --- a/fix-download-unicode/cfs_access-point.txt +++ b/fix-download-unicode/cfs_access-point.txt @@ -869,7 +869,7 @@ var expirationAuth = function expirationAuth() { } // 326 // 327 // We are not on a secure line - so we have to look up the user... // 328 - var user = Meteor.users.findOne({ // 329 + var user = Users.findOne({ // 329 $or: [ // 330 {'services.resume.loginTokens.hashedToken': Accounts._hashLoginToken(userToken)}, // 331 {'services.resume.loginTokens.token': userToken} // 332 diff --git a/models/export.js b/models/export.js index 9dd03a389..3ba5cfadb 100644 --- a/models/export.js +++ b/models/export.js @@ -28,7 +28,7 @@ if (Meteor.isServer) { const loginToken = req.query.authToken; if (loginToken) { const hashToken = Accounts._hashLoginToken(loginToken); - user = Meteor.users.findOne({ + user = Users.findOne({ 'services.resume.loginTokens.hashedToken': hashToken, }); } else if (!Meteor.settings.public.sandstorm) { @@ -69,7 +69,7 @@ if (Meteor.isServer) { const loginToken = params.query.authToken; if (loginToken) { const hashToken = Accounts._hashLoginToken(loginToken); - user = Meteor.users.findOne({ + user = Users.findOne({ 'services.resume.loginTokens.hashedToken': hashToken, }); } else if (!Meteor.settings.public.sandstorm) { diff --git a/models/users.js b/models/users.js index 8675dbad3..d1a85c370 100644 --- a/models/users.js +++ b/models/users.js @@ -1277,7 +1277,7 @@ if (Meteor.isServer) { JsonRoutes.add('GET', '/api/user', function(req, res) { try { Authentication.checkLoggedIn(req.userId); - const data = Meteor.users.findOne({ _id: req.userId }); + const data = Users.findOne({ _id: req.userId }); delete data.services; // get all boards where the user is member of @@ -1368,7 +1368,7 @@ if (Meteor.isServer) { return u; }); - const user = Meteor.users.findOne({ _id: id }); + const user = Users.findOne({ _id: id }); user.boards = boards; JsonRoutes.sendResult(res, { code: 200, @@ -1404,7 +1404,7 @@ if (Meteor.isServer) { Authentication.checkUserId(req.userId); const id = req.params.userId; const action = req.body.action; - let data = Meteor.users.findOne({ _id: id }); + let data = Users.findOne({ _id: id }); if (data !== undefined) { if (action === 'takeOwnership') { data = Boards.find( @@ -1437,7 +1437,7 @@ if (Meteor.isServer) { } else if (action === 'enableLogin') { Users.update({ _id: id }, { $set: { loginDisabled: '' } }); } - data = Meteor.users.findOne({ _id: id }); + data = Users.findOne({ _id: id }); } } JsonRoutes.sendResult(res, { @@ -1481,7 +1481,7 @@ if (Meteor.isServer) { const boardId = req.params.boardId; const action = req.body.action; const { isAdmin, isNoComments, isCommentOnly } = req.body; - let data = Meteor.users.findOne({ _id: userId }); + let data = Users.findOne({ _id: userId }); if (data !== undefined) { if (action === 'add') { data = Boards.find({ @@ -1542,7 +1542,7 @@ if (Meteor.isServer) { const userId = req.params.userId; const boardId = req.params.boardId; const action = req.body.action; - let data = Meteor.users.findOne({ _id: userId }); + let data = Users.findOne({ _id: userId }); if (data !== undefined) { if (action === 'remove') { data = Boards.find({ diff --git a/packages/meteor-accounts-cas/cas_server.js b/packages/meteor-accounts-cas/cas_server.js index 2e8edef2c..e07052b02 100644 --- a/packages/meteor-accounts-cas/cas_server.js +++ b/packages/meteor-accounts-cas/cas_server.js @@ -252,13 +252,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/packages/meteor-useraccounts-core/Guide.md b/packages/meteor-useraccounts-core/Guide.md index c84b3f8b3..484997084 100644 --- a/packages/meteor-useraccounts-core/Guide.md +++ b/packages/meteor-useraccounts-core/Guide.md @@ -804,7 +804,7 @@ If, differently, you do something like this: if (Meteor.isServer){ Meteor.methods({ "userExists": function(username){ - return !!Meteor.users.findOne({username: username}); + return !!Users.findOne({username: username}); }, }); } diff --git a/packages/meteor-useraccounts-core/lib/methods.js b/packages/meteor-useraccounts-core/lib/methods.js index 0d3a070dc..906edcafa 100644 --- a/packages/meteor-useraccounts-core/lib/methods.js +++ b/packages/meteor-useraccounts-core/lib/methods.js @@ -10,7 +10,7 @@ Meteor.methods({ var userId = this.userId; if (userId) { - var user = Meteor.users.findOne(userId); + var user = Users.findOne(userId); var numServices = _.keys(user.services).length; // including "resume" var unset = {}; diff --git a/packages/meteor-useraccounts-core/lib/server.js b/packages/meteor-useraccounts-core/lib/server.js index 2a925dc7e..07f563bde 100644 --- a/packages/meteor-useraccounts-core/lib/server.js +++ b/packages/meteor-useraccounts-core/lib/server.js @@ -80,7 +80,7 @@ AT.prototype._init = function() { return Meteor.users.find(userId, {fields: {services: 1}}); /* if (userId) { - var user = Meteor.users.findOne(userId); + var user = Users.findOne(userId); var services_id = _.chain(user.services) .keys() .reject(function(service) {return service === "resume";}) diff --git a/packages/meteor-useraccounts-core/lib/server_methods.js b/packages/meteor-useraccounts-core/lib/server_methods.js index 500440d70..700c2eac6 100644 --- a/packages/meteor-useraccounts-core/lib/server_methods.js +++ b/packages/meteor-useraccounts-core/lib/server_methods.js @@ -124,7 +124,7 @@ Meteor.methods({ ATResendVerificationEmail: function (email) { check(email, String); - var user = Meteor.users.findOne({ "emails.address": email }); + var user = Users.findOne({ "emails.address": email }); // Send the standard error back to the client if no user exist with this e-mail if (!user) { diff --git a/packages/wekan-accounts-cas/cas_server.js b/packages/wekan-accounts-cas/cas_server.js index 15c1b174e..c13a6df19 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/packages/wekan-ldap/server/loginHandler.js b/packages/wekan-ldap/server/loginHandler.js index 79b3899a0..6f8504c35 100644 --- a/packages/wekan-ldap/server/loginHandler.js +++ b/packages/wekan-ldap/server/loginHandler.js @@ -96,7 +96,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { log_info('Querying user'); log_debug('userQuery', userQuery); - user = Meteor.users.findOne(userQuery); + user = Users.findOne(userQuery); } // Attempt to find user by username @@ -137,7 +137,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { log_debug('userQuery', userQuery); - user = Meteor.users.findOne(userQuery); + user = Users.findOne(userQuery); } // Attempt to find user by e-mail address only @@ -159,7 +159,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { log_debug('userQuery', userQuery); - user = Meteor.users.findOne(userQuery); + user = Users.findOne(userQuery); } diff --git a/packages/wekan-ldap/server/sync.js b/packages/wekan-ldap/server/sync.js index dd3855d35..5d0a98399 100644 --- a/packages/wekan-ldap/server/sync.js +++ b/packages/wekan-ldap/server/sync.js @@ -234,7 +234,7 @@ export function syncUserData(user, ldapUser) { const username = slug(getLdapUsername(ldapUser)); if (user && user._id && username !== user.username) { log_info('Syncing user username', user.username, '->', username); - Meteor.users.findOne({ _id: user._id }, { $set: { username }}); + Users.findOne({ _id: user._id }, { $set: { username }}); } } @@ -341,7 +341,7 @@ export function importNewUsers(ldap) { } // Add user if it was not added before - let user = Meteor.users.findOne(userQuery); + let user = Users.findOne(userQuery); if (!user && username && LDAP.settings_get('LDAP_MERGE_EXISTING_USERS') === true) { const userQuery = { @@ -350,7 +350,7 @@ export function importNewUsers(ldap) { log_debug('userQuery merge', userQuery); - user = Meteor.users.findOne(userQuery); + user = Users.findOne(userQuery); if (user) { syncUserData(user, ldapUser); } diff --git a/sandstorm.js b/sandstorm.js index de386d149..34b1e507e 100644 --- a/sandstorm.js +++ b/sandstorm.js @@ -175,7 +175,7 @@ if (isSandstorm && Meteor.isServer) { const users = {}; function ensureUserListed(userId) { if (!users[userId]) { - const user = Meteor.users.findOne(userId); + const user = Users.findOne(userId); if (user) { users[userId] = { id: user.services.sandstorm.id }; } else { @@ -217,7 +217,7 @@ if (isSandstorm && Meteor.isServer) { 'userId', ); (comment.text.match(/\B@([\w.]*)/g) || []).forEach(username => { - const user = Meteor.users.findOne({ + const user = Users.findOne({ username: username.slice(1), }); if (user && activeMembers.indexOf(user._id) !== -1) { @@ -368,7 +368,7 @@ if (isSandstorm && Meteor.isServer) { if (newMethods[key].auth) { newMethods[key].auth = function() { const sandstormID = this.req.headers['x-sandstorm-user-id']; - const user = Meteor.users.findOne({ + const user = Users.findOne({ 'services.sandstorm.id': sandstormID, }); return user && user._id; From 39be9aa58da1ddda16b41e92b12f118169049fed Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 20:25:22 +0300 Subject: [PATCH 058/105] Update ChangeLog. --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d62e719b..02ee18616 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ This release 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. Thanks to above GitHub users for their contributions and translators for their translations. From bda49ed60947e0438206b2f55119f5c5c132c734 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 20:28:22 +0300 Subject: [PATCH 059/105] Add find-replace.sh script. --- find-replace.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 find-replace.sh diff --git a/find-replace.sh b/find-replace.sh new file mode 100755 index 000000000..522affab9 --- /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' From 54b4682258478e2b0568aee45b3899d769ba6a0b Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 20:30:38 +0300 Subject: [PATCH 060/105] Update translations. From 3e4a8bca3634b92c0ed6302da27b2f57f5d18bb5 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 20:31:01 +0300 Subject: [PATCH 061/105] Update ChangeLog. --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02ee18616..8b1548ca1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Upcoming Wekan release -This release fixes the following bugs: +This release adds the following features: + +- [Add find-replace.sh script for development](https://github.com/wekan/wekan/commit/bda49ed60947e0438206b2f55119f5c5c132c734). + Thanks to xet7. + +and fixes the following bugs: - [OpenAPI: Fix jsdoc/operation matching](https://github.com/wekan/wekan/pull/3171). Thanks to bentiss. From b00db983c8506e0cdc9968e452c3c8025fc10776 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 21:37:01 +0300 Subject: [PATCH 062/105] Try to prevent errors on CSV/TSV export. Thanks to xet7 ! Related #3173 --- models/export.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/models/export.js b/models/export.js index 3ba5cfadb..b90f584c6 100644 --- a/models/export.js +++ b/models/export.js @@ -80,19 +80,19 @@ if (Meteor.isServer) { }); } const exporter = new Exporter(boardId); - if (exporter.canExport(user)) { - body = params.query.delimiter - ? exporter.buildCsv(params.query.delimiter) - : exporter.buildCsv(); - res.writeHead(200, { - 'Content-Length': body.length, - 'Content-Type': params.query.delimiter ? 'text/csv' : 'text/tsv', - }); - res.write(body); - res.end(); - } else { - res.writeHead(403); - res.end('Permission Error'); - } + //if (exporter.canExport(user)) { + body = params.query.delimiter + ? exporter.buildCsv(params.query.delimiter) + : exporter.buildCsv(); + //'Content-Length': body.length, + res.writeHead(200, { + 'Content-Type': params.query.delimiter ? 'text/csv' : 'text/tsv', + }); + res.write(body); + res.end(); + //} else { + // res.writeHead(403); + // res.end('Permission Error'); + //} }); } From e41256f9355aeb2414c5cb06e3112c9c6d5210fd Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 21:39:34 +0300 Subject: [PATCH 063/105] Update ChangeLog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b1548ca1..130ffeda9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and fixes the following bugs: - 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. From b11ae567c9b2d16a115ea4f3f7f88e67d076f326 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 21:49:49 +0300 Subject: [PATCH 064/105] Upgrade to Node 12.18.1 Thanks to Node developers and xet7 ! --- .devcontainer/Dockerfile | 2 +- .future-snap/broken-snapcraft.yaml | 2 +- .future-snap/snapcraft.yaml | 2 +- .travis.yml | 2 +- Dockerfile | 2 +- Dockerfile.arm64v8 | 4 ++-- rebuild-wekan.sh | 4 ++-- releases/release-sandstorm.sh | 2 +- snapcraft.yaml | 2 +- stacksmith/user-scripts/build.sh | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2270e43df..0488c226a 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.1 \ 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 eab2bbaf6..1841dacd0 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.1 node-packages: - node-gyp - node-pre-gyp diff --git a/.future-snap/snapcraft.yaml b/.future-snap/snapcraft.yaml index 434307912..99fabb65a 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.1 node-packages: - node-gyp - node-pre-gyp diff --git a/.travis.yml b/.travis.yml index f55c7bab7..fb72b9c9c 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.1 TRAVIS_NPM_VERSION: latest before_install: diff --git a/Dockerfile b/Dockerfile index e0053701a..641219c52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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.1 \ METEOR_RELEASE=1.10.2 \ USE_EDGE=false \ METEOR_EDGE=1.5-beta.17 \ diff --git a/Dockerfile.arm64v8 b/Dockerfile.arm64v8 index ae6dd5f68..35da388e1 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.1 \ 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.1 \ NODE_ENV=production \ NPM_VERSION=latest \ WITH_API=true \ diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh index 818d99238..dab80b536 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.1 #X64NODE="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" function pause(){ @@ -79,7 +79,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.1 #curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - #sudo apt-get install -y nodejs elif [[ "$OSTYPE" == "darwin"* ]]; then diff --git a/releases/release-sandstorm.sh b/releases/release-sandstorm.sh index 069df4170..2e0f5c75f 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.1 sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp # Build Wekan ./releases/rebuild-release.sh diff --git a/snapcraft.yaml b/snapcraft.yaml index b1bfb1613..f1b0533a9 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.1 node-packages: - node-gyp - node-pre-gyp diff --git a/stacksmith/user-scripts/build.sh b/stacksmith/user-scripts/build.sh index 7b27a453f..e0174110f 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.1 #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 From 0ff1e63a5d82d1fb3a6f0a0d994ac2c30cdb1c9f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 17 Jun 2020 21:59:54 +0300 Subject: [PATCH 065/105] v4.16 --- CHANGELOG.md | 7 +- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 1558 +++++++++++++++++++++++++++++++++------- public/api/wekan.yml | 514 +++++++++---- sandstorm-pkgdef.capnp | 4 +- 7 files changed, 1704 insertions(+), 385 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 130ffeda9..d7cc46fe1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,15 @@ -# Upcoming Wekan release +# 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). diff --git a/Stackerfile.yml b/Stackerfile.yml index 50325d478..b9bc688dc 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.15.0" +appVersion: "v4.16.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index c49fb5a41..d41a22dba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.15.0", + "version": "v4.16.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5cb1e9f8b..398bc04eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.15.0", + "version": "v4.16.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index d315f3ca3..927943076 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
          • - Wekan REST API v4.15 + Wekan REST API v4.16
          • @@ -1612,22 +1612,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
            • - get_board_card_checklists + get_all_checklists
            • - post_board_card_checklists + new_checklist
            • - get_board_card_checklist + get_checklist
            • - delete_board_card_checklist + delete_checklist
            • @@ -1641,17 +1641,17 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
              • - get_board_card_checklist_item + get_checklist_item
              • - put_board_card_checklist_item + edit_checklist_item
              • - delete_board_card_checklist_item + delete_checklist_item
              • @@ -1670,17 +1670,17 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
              • - post_board_card_comments + new_comment
              • - get_board_card_comment + get_comment
              • - delete_board_card_comment + delete_comment
              • @@ -1694,7 +1694,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                • - get_board_customFieldValue + get_cards_by_custom_field
                • @@ -1709,22 +1709,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                • - get_board_list_card + get_card
                • - put_board_list_card + edit_card
                • - delete_board_list_card + delete_card
                • - get_board_swimlane_cards + get_swimlane_cards
                • @@ -1748,12 +1748,12 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                • - get_board_customField + get_custom_field
                • - delete_board_customField + delete_custom_field
                • @@ -1792,12 +1792,12 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                • - delete_board_int_activities + delete_integration_activities
                • - post_board_int_activities + new_integration_activities
                • @@ -1845,7 +1845,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                • - post_board_user_remove + remove_board_member
                • @@ -1904,7 +1904,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                • - delete_board_swimlane + delete_swimlane
                • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                  -

                  Wekan REST API v4.15

                  +

                  Wekan REST API v4.16

                  Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

                  @@ -4325,20 +4325,24 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity

                  Checklists

                  -

                  get_board_card_checklists

                  -

                  +

                  get_all_checklists

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/cards/{card}/checklists \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/cards/{card}/checklists HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4357,6 +4361,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4378,6 +4383,7 @@ fetch('/api/boards/{board}/cards/{card}/checklists'require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -4390,6 +4396,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -4425,6 +4432,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -4440,7 +4448,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/cards/{card}/checklists

                  -

                  Parameters

                  +

                  Get the list of checklists attached to a card

                  +

                  Parameters

                  @@ -4457,18 +4466,34 @@ System.out.println(response.toString()); - + - +
                  path string truethe board valuethe board ID
                  card path string truethe card valuethe card ID
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  card: the card ID

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  [
                  +  {
                  +    "_id": "string",
                  +    "title": "string"
                  +  }
                  +]
                  +
                  +

                  Responses

                  @@ -4483,7 +4508,36 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  » titlestringfalsenonenone
                  @@ -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 -

                  post_board_card_checklists

                  -

                  +

                  new_checklist

                  +

                  Code samples

                  # You can also use wget
                   curl -X POST /api/boards/{board}/cards/{card}/checklists \
                     -H 'Content-Type: multipart/form-data' \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  POST /api/boards/{board}/cards/{card}/checklists HTTP/1.1
                   
                   Content-Type: multipart/form-data
                  +Accept: application/json
                   
                   
                  var headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4531,6 +4588,7 @@ $.ajax({
                   }';
                   const headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4553,6 +4611,7 @@ fetch('/api/boards/{board}/cards/{card}/checklists''Content-Type' => 'multipart/form-data',
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -4566,6 +4625,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                     'Content-Type': 'multipart/form-data',
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -4602,6 +4662,7 @@ System.out.println(response.toString());
                   
                       headers := map[string][]string{
                           "Content-Type": []string{"multipart/form-data"},
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -4617,6 +4678,7 @@ System.out.println(response.toString());
                   
                   

                  POST /api/boards/{board}/cards/{card}/checklists

                  +

                  create a new checklist

                  Body parameter

                  @@ -4624,7 +4686,7 @@ System.out.println(response.toString()); items: string
                  -

                  Parameters

                  +

                  Parameters

                  @@ -4641,14 +4703,14 @@ System.out.println(response.toString()); - + - + @@ -4662,18 +4724,31 @@ System.out.println(response.toString()); - + - - + +
                  path string truethe board valuethe board ID
                  card path string truethe card valuethe card ID
                  bodybody string truethe title valuethe title of the new checklist
                  » items body stringtruethe items valuefalsethe list of items on the new checklist
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  card: the card ID

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -4688,7 +4763,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -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 -

                  get_board_card_checklist

                  -

                  +

                  get_checklist

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/cards/{card}/checklists/{checklist} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/cards/{card}/checklists/{checklist} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4728,6 +4829,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4749,6 +4851,7 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -4761,6 +4864,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -4796,6 +4900,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -4811,7 +4916,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/cards/{card}/checklists/{checklist}

                  -

                  Parameters

                  +

                  Get a checklist

                  +

                  Parameters

                  @@ -4828,25 +4934,50 @@ System.out.println(response.toString()); - + - + - +
                  path string truethe board valuethe board ID
                  card path string truethe card valuethe card ID
                  checklist path string truethe checklist valuethe ID of the checklist
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  card: the card ID

                  +

                  checklist: the ID of the checklist

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "cardId": "string",
                  +  "title": "string",
                  +  "finishedAt": "string",
                  +  "createdAt": "string",
                  +  "sort": 0,
                  +  "items": [
                  +    {
                  +      "_id": "string",
                  +      "title": "string",
                  +      "isFinished": true
                  +    }
                  +  ]
                  +}
                  +
                  +

                  Responses

                  @@ -4861,7 +4992,85 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » cardIdstringfalsenonenone
                  » titlestringfalsenonenone
                  » finishedAtstringfalsenonenone
                  » createdAtstringfalsenonenone
                  » sortnumberfalsenonenone
                  » items[object]falsenonenone
                  »» _idstringfalsenonenone
                  »» titlestringfalsenonenone
                  »» isFinishedbooleanfalsenonenone
                  @@ -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 -

                  delete_board_card_checklist

                  -

                  +

                  delete_checklist

                  +

                  Code samples

                  # You can also use wget
                   curl -X DELETE /api/boards/{board}/cards/{card}/checklists/{checklist} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  DELETE /api/boards/{board}/cards/{card}/checklists/{checklist} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4901,6 +5114,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -4922,6 +5136,7 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -4934,6 +5149,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -4969,6 +5185,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -4984,7 +5201,9 @@ System.out.println(response.toString());
                   
                   

                  DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}

                  -

                  Parameters

                  +

                  Delete a checklist

                  +

                  The checklist will be removed, not put in the recycle bin.

                  +

                  Parameters

                  @@ -5001,25 +5220,39 @@ System.out.println(response.toString()); - + - + - +
                  path string truethe board valuethe board ID
                  card path string truethe card valuethe card ID
                  checklist path string truethe checklist valuethe ID of the checklist to remove
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  card: the card ID

                  +

                  checklist: the ID of the checklist to remove

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -5034,7 +5267,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -5043,20 +5298,24 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity

                  ChecklistItems

                  -

                  get_board_card_checklist_item

                  -

                  +

                  get_checklist_item

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5075,6 +5334,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5096,6 +5356,7 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -5108,6 +5369,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -5143,6 +5405,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -5158,7 +5421,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}

                  -

                  Parameters

                  +

                  Get a checklist item

                  +

                  Parameters

                  @@ -5175,32 +5439,53 @@ System.out.println(response.toString()); - + - + - + - +
                  path string truethe board valuethe board ID
                  card path string truethe card valuethe card ID
                  checklist path string truethe checklist valuethe checklist ID
                  item path string truethe item valuethe ID of the item
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  card: the card ID

                  +

                  checklist: the checklist ID

                  +

                  item: the ID of the item

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "title": "string",
                  +  "sort": 0,
                  +  "isFinished": true,
                  +  "checklistId": "string",
                  +  "cardId": "string",
                  +  "createdAt": "string",
                  +  "modifiedAt": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -5215,7 +5500,7 @@ System.out.println(response.toString()); - +
                  200 OK 200 responseNoneChecklistItems
                  @@ -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 -

                  put_board_card_checklist_item

                  -

                  +

                  edit_checklist_item

                  +

                  Code samples

                  # You can also use wget
                   curl -X PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \
                     -H 'Content-Type: multipart/form-data' \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                   
                   Content-Type: multipart/form-data
                  +Accept: application/json
                   
                   
                  var headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5263,6 +5551,7 @@ $.ajax({
                   }';
                   const headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5285,6 +5574,7 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                   
                   headers = {
                     'Content-Type' => 'multipart/form-data',
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -5298,6 +5588,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                     'Content-Type': 'multipart/form-data',
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -5334,6 +5625,7 @@ System.out.println(response.toString());
                   
                       headers := map[string][]string{
                           "Content-Type": []string{"multipart/form-data"},
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -5349,6 +5641,7 @@ System.out.println(response.toString());
                   
                   

                  PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}

                  +

                  Edit a checklist item

                  Body parameter

                  @@ -5356,7 +5649,7 @@ System.out.println(response.toString()); title: string
                  -

                  Parameters

                  +

                  Parameters

                  @@ -5373,28 +5666,28 @@ System.out.println(response.toString()); - + - + - + - + @@ -5407,19 +5700,34 @@ System.out.println(response.toString()); - - + + - - + +
                  path string truethe board valuethe board ID
                  card path string truethe card valuethe card ID
                  checklist path string truethe checklist valuethe checklist ID
                  item path string truethe item valuethe ID of the item
                  body» isFinished body stringtruethe isFinished valuefalseis the item checked?
                  » title body stringtruethe title valuefalsethe new text of the item
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  card: the card ID

                  +

                  checklist: the checklist ID

                  +

                  item: the ID of the item

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -5434,7 +5742,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -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 -

                  delete_board_card_checklist_item

                  -

                  +

                  delete_checklist_item

                  +

                  Code samples

                  # You can also use wget
                   curl -X DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5474,6 +5808,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5495,6 +5830,7 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -5507,6 +5843,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -5542,6 +5879,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -5557,7 +5895,9 @@ System.out.println(response.toString());
                   
                   

                  DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}

                  -

                  Parameters

                  +

                  Delete a checklist item

                  +

                  Note: this operation can't be reverted.

                  +

                  Parameters

                  @@ -5574,32 +5914,47 @@ System.out.println(response.toString()); - + - + - + - +
                  path string truethe board valuethe board ID
                  card path string truethe card valuethe card ID
                  checklist path string truethe checklist valuethe checklist ID
                  item path string truethe item valuethe ID of the item to be removed
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  card: the card ID

                  +

                  checklist: the checklist ID

                  +

                  item: the ID of the item to be removed

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -5614,7 +5969,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -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 -

                  post_board_card_comments

                  -

                  +

                  new_comment

                  +

                  Code samples

                  # You can also use wget
                   curl -X POST /api/boards/{board}/cards/{card}/comments \
                     -H 'Content-Type: multipart/form-data' \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  POST /api/boards/{board}/cards/{card}/comments HTTP/1.1
                   
                   Content-Type: multipart/form-data
                  +Accept: application/json
                   
                   
                  var headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5891,6 +6271,7 @@ $.ajax({
                   }';
                   const headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -5913,6 +6294,7 @@ fetch('/api/boards/{board}/cards/{card}/comments''Content-Type' => 'multipart/form-data',
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -5926,6 +6308,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                     'Content-Type': 'multipart/form-data',
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -5962,6 +6345,7 @@ System.out.println(response.toString());
                   
                       headers := map[string][]string{
                           "Content-Type": []string{"multipart/form-data"},
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -5977,6 +6361,7 @@ System.out.println(response.toString());
                   
                   

                  POST /api/boards/{board}/cards/{card}/comments

                  +

                  Add a comment on a card

                  Body parameter

                  @@ -5984,7 +6369,7 @@ System.out.println(response.toString()); comment: string
                  -

                  Parameters

                  +

                  Parameters

                  @@ -6001,14 +6386,14 @@ System.out.println(response.toString()); - + - + @@ -6022,7 +6407,7 @@ System.out.println(response.toString()); - + @@ -6033,7 +6418,20 @@ System.out.println(response.toString());
                  path string truethe board valuethe board ID of the card
                  card path string truethe card valuethe ID of the card
                  bodybody string truethe authorId valuethe user who 'posted' the comment
                  » comment
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID of the card

                  +

                  card: the ID of the card

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -6048,7 +6446,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -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 -

                  get_board_card_comment

                  -

                  +

                  get_comment

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/cards/{card}/comments/{comment} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/cards/{card}/comments/{comment} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -6088,6 +6512,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -6109,6 +6534,7 @@ fetch('/api/boards/{board}/cards/{card}/comments/{comm
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -6121,6 +6547,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -6156,6 +6583,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -6171,7 +6599,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/cards/{card}/comments/{comment}

                  -

                  Parameters

                  +

                  Get a comment on a card

                  +

                  Parameters

                  @@ -6188,25 +6617,44 @@ System.out.println(response.toString()); - + - + - +
                  path string truethe board valuethe board ID of the card
                  card path string truethe card valuethe ID of the card
                  comment path string truethe comment valuethe ID of the comment to retrieve
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID of the card

                  +

                  card: the ID of the card

                  +

                  comment: the ID of the comment to retrieve

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "boardId": "string",
                  +  "cardId": "string",
                  +  "text": "string",
                  +  "createdAt": "string",
                  +  "modifiedAt": "string",
                  +  "userId": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -6221,7 +6669,7 @@ System.out.println(response.toString()); - +
                  200 OK 200 responseNoneCardComments
                  @@ -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 -

                  delete_board_card_comment

                  -

                  +

                  delete_comment

                  +

                  Code samples

                  # You can also use wget
                   curl -X DELETE /api/boards/{board}/cards/{card}/comments/{comment} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  DELETE /api/boards/{board}/cards/{card}/comments/{comment} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -6261,6 +6713,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -6282,6 +6735,7 @@ fetch('/api/boards/{board}/cards/{card}/comments/{comm
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -6294,6 +6748,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -6329,6 +6784,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -6344,7 +6800,8 @@ System.out.println(response.toString());
                   
                   

                  DELETE /api/boards/{board}/cards/{card}/comments/{comment}

                  -

                  Parameters

                  +

                  Delete a comment on a card

                  +

                  Parameters

                  @@ -6361,25 +6818,39 @@ System.out.println(response.toString()); - + - + - +
                  path string truethe board valuethe board ID of the card
                  card path string truethe card valuethe ID of the card
                  comment path string truethe comment valuethe ID of the comment to delete
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID of the card

                  +

                  card: the ID of the card

                  +

                  comment: the ID of the comment to delete

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -6394,7 +6865,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -6403,20 +6896,24 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity

                  Cards

                  -

                  get_board_customFieldValue

                  -

                  +

                  get_cards_by_custom_field

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -6435,6 +6932,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -6456,6 +6954,7 @@ fetch('/api/boards/{board}/cardsByCustomField/{customF
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -6468,6 +6967,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -6503,6 +7003,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -6518,7 +7019,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}

                  -

                  Parameters

                  +

                  Get all Cards that matchs a value of a specific custom field

                  +

                  Parameters

                  @@ -6535,25 +7037,45 @@ System.out.println(response.toString()); - + - + - +
                  path string truethe board valuethe board ID
                  customField path string truethe customField valuethe list ID
                  customFieldValue path string truethe customFieldValue valuethe value to look for
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  customField: the list ID

                  +

                  customFieldValue: the value to look for

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  [
                  +  {
                  +    "_id": "string",
                  +    "title": "string",
                  +    "description": "string",
                  +    "listId": "string",
                  +    "swinlaneId": "string"
                  +  }
                  +]
                  +
                  +

                  Responses

                  @@ -6568,7 +7090,57 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  » titlestringfalsenonenone
                  » descriptionstringfalsenonenone
                  » listIdstringfalsenonenone
                  » swinlaneIdstringfalsenonenone
                  @@ -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 -

                  get_board_list_card

                  -

                  +

                  get_card

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/lists/{list}/cards/{card} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7120,6 +7696,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7141,6 +7718,7 @@ fetch('/api/boards/{board}/lists/{list}/cards/{card}'<
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -7153,6 +7731,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -7188,6 +7767,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -7203,7 +7783,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/lists/{list}/cards/{card}

                  -

                  Parameters

                  +

                  Get a Card

                  +

                  Parameters

                  @@ -7220,25 +7801,87 @@ System.out.println(response.toString()); - + - + - +
                  path string truethe board valuethe board ID
                  list path string truethe list valuethe list ID of the card
                  card path string truethe card valuethe card ID
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  list: the list ID of the card

                  +

                  card: the card ID

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "title": "string",
                  +  "archived": true,
                  +  "parentId": "string",
                  +  "listId": "string",
                  +  "swimlaneId": "string",
                  +  "boardId": "string",
                  +  "coverId": "string",
                  +  "color": "white",
                  +  "createdAt": "string",
                  +  "modifiedAt": "string",
                  +  "customFields": [
                  +    {}
                  +  ],
                  +  "dateLastActivity": "string",
                  +  "description": "string",
                  +  "requestedBy": "string",
                  +  "assignedBy": "string",
                  +  "labelIds": [
                  +    "string"
                  +  ],
                  +  "members": [
                  +    "string"
                  +  ],
                  +  "assignees": [
                  +    "string"
                  +  ],
                  +  "receivedAt": "string",
                  +  "startAt": "string",
                  +  "dueAt": "string",
                  +  "endAt": "string",
                  +  "spentTime": 0,
                  +  "isOvertime": true,
                  +  "userId": "string",
                  +  "sort": 0,
                  +  "subtaskSort": 0,
                  +  "type": "string",
                  +  "linkedId": "string",
                  +  "vote": {
                  +    "question": "string",
                  +    "positive": [
                  +      "string"
                  +    ],
                  +    "negative": [
                  +      "string"
                  +    ],
                  +    "end": "string",
                  +    "public": true,
                  +    "allowNonBoardMembers": true
                  +  }
                  +}
                  +
                  +

                  Responses

                  @@ -7253,7 +7896,7 @@ System.out.println(response.toString()); - +
                  200 OK 200 responseNoneCards
                  @@ -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 -

                  put_board_list_card

                  -

                  +

                  edit_card

                  +

                  Code samples

                  # You can also use wget
                   curl -X PUT /api/boards/{board}/lists/{list}/cards/{card} \
                     -H 'Content-Type: multipart/form-data' \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  PUT /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                   
                   Content-Type: multipart/form-data
                  +Accept: application/json
                   
                   
                  var headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7302,7 +7948,7 @@ $.ajax({
                     "parentId": "string",
                     "description": "string",
                     "color": "string",
                  -  "vote": "string",
                  +  "vote": {},
                     "labelIds": "string",
                     "requestedBy": "string",
                     "assignedBy": "string",
                  @@ -7311,7 +7957,7 @@ $.ajax({
                     "dueAt": "string",
                     "endAt": "string",
                     "spentTime": "string",
                  -  "isOverTime": "string",
                  +  "isOverTime": true,
                     "customFields": "string",
                     "members": "string",
                     "assignees": "string",
                  @@ -7319,6 +7965,7 @@ $.ajax({
                   }';
                   const headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7341,6 +7988,7 @@ fetch('/api/boards/{board}/lists/{list}/cards/{card}'<
                   
                   headers = {
                     'Content-Type' => 'multipart/form-data',
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -7354,6 +8002,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                     'Content-Type': 'multipart/form-data',
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -7390,6 +8039,7 @@ System.out.println(response.toString());
                   
                       headers := map[string][]string{
                           "Content-Type": []string{"multipart/form-data"},
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -7405,6 +8055,15 @@ System.out.println(response.toString());
                   
                   

                  PUT /api/boards/{board}/lists/{list}/cards/{card}

                  +

                  Edit Fields in a Card

                  +

                  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:

                  + Wekan card colors +

                  Note: setting the color to white has the same effect than removing it.

                  Body parameter

                  @@ -7414,7 +8073,7 @@ System.out.println(response.toString()); parentId: string description: string color: string -vote: string +vote: {} labelIds: string requestedBy: string assignedBy: string @@ -7423,14 +8082,14 @@ System.out.println(response.toString()); dueAt: string endAt: string spentTime: string -isOverTime: string +isOverTime: true customFields: string members: string assignees: string swimlaneId: string
                  -

                  Parameters

                  +

                  Parameters

                  @@ -7447,21 +8106,21 @@ System.out.println(response.toString()); - + - + - + @@ -7474,145 +8133,159 @@ System.out.println(response.toString()); - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + +
                  path string truethe board valuethe board ID of the card
                  list path string truethe list valuethe list ID of the card
                  card path string truethe card valuethe ID of the card
                  body» title body stringtruethe title valuefalsethe new title of the card
                  » listId body stringtruethe listId valuefalsethe new list ID of the card (move operation)
                  » authorId body stringtruethe authorId valuefalsechange the owner of the card
                  » parentId body stringtruethe parentId valuefalsechange the parent of the card
                  » description body stringtruethe description valuefalsethe new description of the card
                  » color body stringtruethe color valuefalsethe new color of the card
                  » vote bodystringtruethe vote valueobjectfalsethe vote object
                  » labelIds body stringtruethe labelIds valuefalsethe new list of label IDs attached to the card
                  » requestedBy body stringtruethe requestedBy valuefalsethe new requestedBy field of the card
                  » assignedBy body stringtruethe assignedBy valuefalsethe new assignedBy field of the card
                  » receivedAt body stringtruethe receivedAt valuefalsethe new receivedAt field of the card
                  » startAt body stringtruethe startAt valuefalsethe new startAt field of the card
                  » dueAt body stringtruethe dueAt valuefalsethe new dueAt field of the card
                  » endAt body stringtruethe endAt valuefalsethe new endAt field of the card
                  » spentTime body stringtruethe spentTime valuefalsethe new spentTime field of the card
                  » isOverTime bodystringtruethe isOverTime valuebooleanfalsethe new isOverTime field of the card
                  » customFields body stringtruethe customFields valuefalsethe new customFields value of the card
                  » members body stringtruethe members valuefalsethe new list of member IDs attached to the card
                  » assignees body stringtruethe assignees valuefalsethe array of maximum one ID of assignee attached to the card
                  » swimlaneId body stringtruethe swimlaneId valuefalsethe new swimlane ID of the card
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID of the card

                  +

                  list: the list ID of the card

                  +

                  card: the ID of the card

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -7627,7 +8300,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -7635,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 -

                  delete_board_list_card

                  -

                  +

                  delete_card

                  +

                  Code samples

                  # You can also use wget
                   curl -X DELETE /api/boards/{board}/lists/{list}/cards/{card} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  DELETE /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7667,6 +8366,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7688,6 +8388,7 @@ fetch('/api/boards/{board}/lists/{list}/cards/{card}'<
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -7700,6 +8401,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -7735,6 +8437,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -7750,7 +8453,10 @@ System.out.println(response.toString());
                   
                   

                  DELETE /api/boards/{board}/lists/{list}/cards/{card}

                  -

                  Parameters

                  +

                  Delete a card from a board

                  +

                  This operation deletes a card, and therefore the card +is not put in the recycle bin.

                  +

                  Parameters

                  @@ -7767,25 +8473,39 @@ System.out.println(response.toString()); - + - + - +
                  path string truethe board valuethe board ID of the card
                  list path string truethe list valuethe list ID of the card
                  card path string truethe card valuethe ID of the card
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID of the card

                  +

                  list: the list ID of the card

                  +

                  card: the ID of the card

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -7800,7 +8520,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -7808,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 -

                  get_board_swimlane_cards

                  -

                  +

                  get_swimlane_cards

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/swimlanes/{swimlane}/cards \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/swimlanes/{swimlane}/cards HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7840,6 +8586,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -7861,6 +8608,7 @@ fetch('/api/boards/{board}/swimlanes/{swimlane}/cards'
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -7873,6 +8621,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -7908,6 +8657,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -7923,7 +8673,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/swimlanes/{swimlane}/cards

                  -

                  Parameters

                  +

                  get all cards attached to a swimlane

                  +

                  Parameters

                  @@ -7940,18 +8691,36 @@ System.out.println(response.toString()); - + - +
                  path string truethe board valuethe board ID
                  swimlane path string truethe swimlane valuethe swimlane ID
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  swimlane: the swimlane ID

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  [
                  +  {
                  +    "_id": "string",
                  +    "title": "string",
                  +    "description": "string",
                  +    "listId": "string"
                  +  }
                  +]
                  +
                  +

                  Responses

                  @@ -7966,7 +8735,50 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  » titlestringfalsenonenone
                  » descriptionstringfalsenonenone
                  » listIdstringfalsenonenone
                  @@ -8476,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 -

                  get_board_customField

                  -

                  +

                  get_custom_field

                  +

                  Code samples

                  # You can also use wget
                   curl -X GET /api/boards/{board}/custom-fields/{customField} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  GET /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -8508,6 +9324,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -8529,6 +9346,7 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -8541,6 +9359,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -8576,6 +9395,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -8591,7 +9411,8 @@ System.out.println(response.toString());
                   
                   

                  GET /api/boards/{board}/custom-fields/{customField}

                  -

                  Parameters

                  +

                  Get a Custom Fields attached to a board

                  +

                  Parameters

                  @@ -8615,11 +9436,38 @@ System.out.println(response.toString()); - +
                  path string truethe customField valuethe ID of the custom field
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  customField: the ID of the custom field

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "boardIds": [
                  +    "string"
                  +  ],
                  +  "name": "string",
                  +  "type": "text",
                  +  "settings": {
                  +    "currencyCode": "string",
                  +    "dropdownItems": [
                  +      {}
                  +    ]
                  +  },
                  +  "showOnCard": true,
                  +  "automaticallyOnCard": true,
                  +  "showLabelOnMiniCard": true,
                  +  "createdAt": "string",
                  +  "modifiedAt": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -8634,7 +9482,7 @@ System.out.println(response.toString()); - +
                  200 OK 200 responseNoneCustomFields
                  @@ -8642,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 -

                  delete_board_customField

                  -

                  +

                  delete_custom_field

                  +

                  Code samples

                  # You can also use wget
                   curl -X DELETE /api/boards/{board}/custom-fields/{customField} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  DELETE /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -8674,6 +9526,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -8695,6 +9548,7 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -8707,6 +9561,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -8742,6 +9597,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -8757,7 +9613,9 @@ System.out.println(response.toString());
                   
                   

                  DELETE /api/boards/{board}/custom-fields/{customField}

                  -

                  Parameters

                  +

                  Delete a Custom Fields attached to a board

                  +

                  The Custom Field can't be retrieved after this operation

                  +

                  Parameters

                  @@ -8781,11 +9639,23 @@ System.out.println(response.toString()); - +
                  path string truethe customField valuethe ID of the custom field
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  customField: the ID of the custom field

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -8800,7 +9670,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  @@ -10009,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 -

                  delete_board_int_activities

                  -

                  +

                  delete_integration_activities

                  +

                  Code samples

                  # You can also use wget
                   curl -X DELETE /api/boards/{board}/integrations/{int}/activities \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  DELETE /api/boards/{board}/integrations/{int}/activities HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -10041,6 +10937,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -10062,6 +10959,7 @@ fetch('/api/boards/{board}/integrations/{int}/activiti
                   require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -10074,6 +10972,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -10109,6 +11008,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -10124,7 +11024,8 @@ System.out.println(response.toString());
                   
                   

                  DELETE /api/boards/{board}/integrations/{int}/activities

                  -

                  Parameters

                  +

                  Delete subscribed activities

                  +

                  Parameters

                  @@ -10141,18 +11042,42 @@ System.out.println(response.toString()); - + - +
                  path string truethe board valuethe board ID
                  int path string truethe int valuethe integration ID
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  int: the integration ID

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "enabled": true,
                  +  "title": "string",
                  +  "type": "string",
                  +  "activities": [
                  +    "string"
                  +  ],
                  +  "url": "string",
                  +  "token": "string",
                  +  "boardId": "string",
                  +  "createdAt": "string",
                  +  "modifiedAt": "string",
                  +  "userId": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -10167,7 +11092,7 @@ System.out.println(response.toString()); - +
                  200 OK 200 responseNoneIntegrations
                  @@ -10175,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 -

                  post_board_int_activities

                  -

                  +

                  new_integration_activities

                  +

                  Code samples

                  # You can also use wget
                   curl -X POST /api/boards/{board}/integrations/{int}/activities \
                     -H 'Content-Type: multipart/form-data' \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  POST /api/boards/{board}/integrations/{int}/activities HTTP/1.1
                   
                   Content-Type: multipart/form-data
                  +Accept: application/json
                   
                   
                  var headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -10214,6 +11142,7 @@ $.ajax({
                   }';
                   const headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -10236,6 +11165,7 @@ fetch('/api/boards/{board}/integrations/{int}/activiti
                   
                   headers = {
                     'Content-Type' => 'multipart/form-data',
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -10249,6 +11179,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                     'Content-Type': 'multipart/form-data',
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -10285,6 +11216,7 @@ System.out.println(response.toString());
                   
                       headers := map[string][]string{
                           "Content-Type": []string{"multipart/form-data"},
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -10300,13 +11232,14 @@ System.out.println(response.toString());
                   
                   

                  POST /api/boards/{board}/integrations/{int}/activities

                  +

                  Add subscribed activities

                  Body parameter

                  activities: string
                   
                   
                  -

                  Parameters

                  +

                  Parameters

                  @@ -10323,14 +11256,14 @@ System.out.println(response.toString()); - + - + @@ -10348,7 +11281,31 @@ System.out.println(response.toString());
                  path string truethe board valuethe board ID
                  int path string truethe int valuethe integration ID
                  body
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  int: the integration ID

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "enabled": true,
                  +  "title": "string",
                  +  "type": "string",
                  +  "activities": [
                  +    "string"
                  +  ],
                  +  "url": "string",
                  +  "token": "string",
                  +  "boardId": "string",
                  +  "createdAt": "string",
                  +  "modifiedAt": "string",
                  +  "userId": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -10363,7 +11320,7 @@ System.out.println(response.toString()); - +
                  200 OK 200 responseNoneIntegrations
                  @@ -11508,24 +12465,27 @@ to later change the permissions.

                  To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity -

                  post_board_user_remove

                  -

                  +

                  remove_board_member

                  +

                  Code samples

                  # You can also use wget
                   curl -X POST /api/boards/{board}/members/{user}/remove \
                     -H 'Content-Type: multipart/form-data' \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  POST /api/boards/{board}/members/{user}/remove HTTP/1.1
                   
                   Content-Type: multipart/form-data
                  +Accept: application/json
                   
                   
                  var headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -11547,6 +12507,7 @@ $.ajax({
                   }';
                   const headers = {
                     'Content-Type':'multipart/form-data',
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -11569,6 +12530,7 @@ fetch('/api/boards/{board}/members/{user}/remove''Content-Type' => 'multipart/form-data',
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -11582,6 +12544,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                     'Content-Type': 'multipart/form-data',
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -11618,6 +12581,7 @@ System.out.println(response.toString());
                   
                       headers := map[string][]string{
                           "Content-Type": []string{"multipart/form-data"},
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -11633,13 +12597,15 @@ System.out.println(response.toString());
                   
                   

                  POST /api/boards/{board}/members/{user}/remove

                  +

                  Remove Member from Board

                  +

                  Only the admin user (the first user) can call the REST API.

                  Body parameter

                  action: string
                   
                   
                  -

                  Parameters

                  +

                  Parameters

                  @@ -11656,14 +12622,14 @@ System.out.println(response.toString()); - + - + @@ -11677,11 +12643,25 @@ System.out.println(response.toString()); - +
                  path string truethe board valuethe board ID
                  user path string truethe user valuethe user ID
                  bodybody string truethe action valuethe action (needs to be remove)
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the board ID

                  +

                  user: the user ID

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string",
                  +  "title": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -11696,7 +12676,36 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  » titlestringfalsenonenone
                  @@ -13652,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 -

                  delete_board_swimlane

                  -

                  +

                  delete_swimlane

                  +

                  Code samples

                  # You can also use wget
                   curl -X DELETE /api/boards/{board}/swimlanes/{swimlane} \
                  +  -H 'Accept: application/json' \
                     -H 'Authorization: API_KEY'
                   
                   
                  DELETE /api/boards/{board}/swimlanes/{swimlane} HTTP/1.1
                   
                  -
                  +Accept: application/json + +
                  var headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -13684,6 +14697,7 @@ $.ajax({
                   
                  const fetch = require('node-fetch');
                   
                   const headers = {
                  +  'Accept':'application/json',
                     'Authorization':'API_KEY'
                   
                   };
                  @@ -13705,6 +14719,7 @@ fetch('/api/boards/{board}/swimlanes/{swimlane}'require 'json'
                   
                   headers = {
                  +  'Accept' => 'application/json',
                     'Authorization' => 'API_KEY'
                   }
                   
                  @@ -13717,6 +14732,7 @@ p JSON.parse(result)
                   
                  import requests
                   headers = {
                  +  'Accept': 'application/json',
                     'Authorization': 'API_KEY'
                   }
                   
                  @@ -13752,6 +14768,7 @@ System.out.println(response.toString());
                   func main() {
                   
                       headers := map[string][]string{
                  +        "Accept": []string{"application/json"},
                           "Authorization": []string{"API_KEY"},
                           
                       }
                  @@ -13767,7 +14784,9 @@ System.out.println(response.toString());
                   
                   

                  DELETE /api/boards/{board}/swimlanes/{swimlane}

                  -

                  Parameters

                  +

                  Delete a swimlane

                  +

                  The swimlane will be deleted, not moved to the recycle bin

                  +

                  Parameters

                  @@ -13784,18 +14803,31 @@ System.out.println(response.toString()); - + - +
                  path string truethe board valuethe ID of the board
                  swimlane path string truethe swimlane valuethe ID of the swimlane
                  -

                  Responses

                  +

                  Detailed descriptions

                  +

                  board: the ID of the board

                  +

                  swimlane: the ID of the swimlane

                  +
                  +

                  Example responses

                  +
                  +
                  +

                  200 Response

                  +
                  +
                  {
                  +  "_id": "string"
                  +}
                  +
                  +

                  Responses

                  @@ -13810,7 +14842,29 @@ System.out.println(response.toString()); - + + + +
                  200 OK 200 responseNoneInline
                  +

                  Response Schema

                  +

                  Status Code 200

                  + + + + + + + + + + + + + + + + +
                  NameTypeRequiredRestrictionsDescription
                  » _idstringfalsenonenone
                  diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 7e8041201..bfbe913d1 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.15 + version: v4.16 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`: + + Wekan card colors + + Note: setting the color to white has the same effect than removing it. tags: - Cards consumes: @@ -1396,117 +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 value - type: string - required: true + 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: @@ -1517,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: @@ -1545,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 @@ -1668,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: @@ -1698,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 @@ -1792,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: @@ -1814,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: @@ -1838,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 diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 27dc1be51..fab8f1d64 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 = 415, + appVersion = 416, # Increment this for every release. - appMarketingVersion = (defaultText = "4.15.0~2020-06-16"), + appMarketingVersion = (defaultText = "4.16.0~2020-06-17"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From 5eb378452761ad1d6d67a491316007fdf6dfd689 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 18 Jun 2020 02:00:51 +0300 Subject: [PATCH 066/105] Revert users changes that were made at Wekan v4.16. Thanks to xet7 ! --- fix-download-unicode/cfs_access-point.txt | 2 +- models/export.js | 4 ++-- models/users.js | 16 ++++++++-------- packages/meteor-accounts-cas/cas_server.js | 4 ++-- packages/meteor-useraccounts-core/Guide.md | 2 +- packages/meteor-useraccounts-core/lib/methods.js | 2 +- packages/meteor-useraccounts-core/lib/server.js | 2 +- .../lib/server_methods.js | 2 +- packages/wekan-ldap/server/loginHandler.js | 6 +++--- packages/wekan-ldap/server/sync.js | 6 +++--- sandstorm.js | 6 +++--- 11 files changed, 26 insertions(+), 26 deletions(-) diff --git a/fix-download-unicode/cfs_access-point.txt b/fix-download-unicode/cfs_access-point.txt index 2e86ac4ee..de1c6c769 100644 --- a/fix-download-unicode/cfs_access-point.txt +++ b/fix-download-unicode/cfs_access-point.txt @@ -869,7 +869,7 @@ var expirationAuth = function expirationAuth() { } // 326 // 327 // We are not on a secure line - so we have to look up the user... // 328 - var user = Users.findOne({ // 329 + var user = Meteor.users.findOne({ // 329 $or: [ // 330 {'services.resume.loginTokens.hashedToken': Accounts._hashLoginToken(userToken)}, // 331 {'services.resume.loginTokens.token': userToken} // 332 diff --git a/models/export.js b/models/export.js index b90f584c6..17b08dad8 100644 --- a/models/export.js +++ b/models/export.js @@ -28,7 +28,7 @@ if (Meteor.isServer) { const loginToken = req.query.authToken; if (loginToken) { const hashToken = Accounts._hashLoginToken(loginToken); - user = Users.findOne({ + user = Meteor.users.findOne({ 'services.resume.loginTokens.hashedToken': hashToken, }); } else if (!Meteor.settings.public.sandstorm) { @@ -69,7 +69,7 @@ if (Meteor.isServer) { const loginToken = params.query.authToken; if (loginToken) { const hashToken = Accounts._hashLoginToken(loginToken); - user = Users.findOne({ + user = Meteor.users.findOne({ 'services.resume.loginTokens.hashedToken': hashToken, }); } else if (!Meteor.settings.public.sandstorm) { diff --git a/models/users.js b/models/users.js index d1a85c370..2b5a059ef 100644 --- a/models/users.js +++ b/models/users.js @@ -933,7 +933,7 @@ if (Meteor.isServer) { user.authenticationMethod = 'oauth2'; // see if any existing user has this email address or username, otherwise create new - const existingUser = Users.findOne({ + const existingUser = Meteor.users.findOne({ $or: [{ 'emails.address': email }, { username: user.username }], }); if (!existingUser) return user; @@ -946,7 +946,7 @@ if (Meteor.isServer) { existingUser.profile = user.profile; existingUser.authenticationMethod = user.authenticationMethod; - Meteor.users.remove({ _id: user._id }); + Meteor.users.remove({ _id: existingUser._id }); // remove existing record return existingUser; } @@ -1277,7 +1277,7 @@ if (Meteor.isServer) { JsonRoutes.add('GET', '/api/user', function(req, res) { try { Authentication.checkLoggedIn(req.userId); - const data = Users.findOne({ _id: req.userId }); + const data = Meteor.users.findOne({ _id: req.userId }); delete data.services; // get all boards where the user is member of @@ -1368,7 +1368,7 @@ if (Meteor.isServer) { return u; }); - const user = Users.findOne({ _id: id }); + const user = Meteor.users.findOne({ _id: id }); user.boards = boards; JsonRoutes.sendResult(res, { code: 200, @@ -1404,7 +1404,7 @@ if (Meteor.isServer) { Authentication.checkUserId(req.userId); const id = req.params.userId; const action = req.body.action; - let data = Users.findOne({ _id: id }); + let data = Meteor.users.findOne({ _id: id }); if (data !== undefined) { if (action === 'takeOwnership') { data = Boards.find( @@ -1437,7 +1437,7 @@ if (Meteor.isServer) { } else if (action === 'enableLogin') { Users.update({ _id: id }, { $set: { loginDisabled: '' } }); } - data = Users.findOne({ _id: id }); + data = Meteor.users.findOne({ _id: id }); } } JsonRoutes.sendResult(res, { @@ -1481,7 +1481,7 @@ if (Meteor.isServer) { const boardId = req.params.boardId; const action = req.body.action; const { isAdmin, isNoComments, isCommentOnly } = req.body; - let data = Users.findOne({ _id: userId }); + let data = Meteor.users.findOne({ _id: userId }); if (data !== undefined) { if (action === 'add') { data = Boards.find({ @@ -1542,7 +1542,7 @@ if (Meteor.isServer) { const userId = req.params.userId; const boardId = req.params.boardId; const action = req.body.action; - let data = Users.findOne({ _id: userId }); + let data = Meteor.users.findOne({ _id: userId }); if (data !== undefined) { if (action === 'remove') { data = Boards.find({ diff --git a/packages/meteor-accounts-cas/cas_server.js b/packages/meteor-accounts-cas/cas_server.js index e07052b02..2e8edef2c 100644 --- a/packages/meteor-accounts-cas/cas_server.js +++ b/packages/meteor-accounts-cas/cas_server.js @@ -252,13 +252,13 @@ const casValidate = (req, ticket, token, service, callback) => { if (attrs.debug) { console.log(`CAS response : ${JSON.stringify(result)}`); } - let user = Users.findOne({ 'username': options.username }); + let user = Meteor.users.findOne({ 'username': options.username }); if (! user) { if (attrs.debug) { console.log(`Creating user account ${JSON.stringify(options)}`); } const userId = Accounts.insertUserDoc({}, options); - user = Users.findOne(userId); + user = Meteor.users.findOne(userId); } if (attrs.debug) { console.log(`Using user account ${JSON.stringify(user)}`); diff --git a/packages/meteor-useraccounts-core/Guide.md b/packages/meteor-useraccounts-core/Guide.md index 484997084..c84b3f8b3 100644 --- a/packages/meteor-useraccounts-core/Guide.md +++ b/packages/meteor-useraccounts-core/Guide.md @@ -804,7 +804,7 @@ If, differently, you do something like this: if (Meteor.isServer){ Meteor.methods({ "userExists": function(username){ - return !!Users.findOne({username: username}); + return !!Meteor.users.findOne({username: username}); }, }); } diff --git a/packages/meteor-useraccounts-core/lib/methods.js b/packages/meteor-useraccounts-core/lib/methods.js index 906edcafa..0d3a070dc 100644 --- a/packages/meteor-useraccounts-core/lib/methods.js +++ b/packages/meteor-useraccounts-core/lib/methods.js @@ -10,7 +10,7 @@ Meteor.methods({ var userId = this.userId; if (userId) { - var user = Users.findOne(userId); + var user = Meteor.users.findOne(userId); var numServices = _.keys(user.services).length; // including "resume" var unset = {}; diff --git a/packages/meteor-useraccounts-core/lib/server.js b/packages/meteor-useraccounts-core/lib/server.js index 07f563bde..2a925dc7e 100644 --- a/packages/meteor-useraccounts-core/lib/server.js +++ b/packages/meteor-useraccounts-core/lib/server.js @@ -80,7 +80,7 @@ AT.prototype._init = function() { return Meteor.users.find(userId, {fields: {services: 1}}); /* if (userId) { - var user = Users.findOne(userId); + var user = Meteor.users.findOne(userId); var services_id = _.chain(user.services) .keys() .reject(function(service) {return service === "resume";}) diff --git a/packages/meteor-useraccounts-core/lib/server_methods.js b/packages/meteor-useraccounts-core/lib/server_methods.js index 700c2eac6..500440d70 100644 --- a/packages/meteor-useraccounts-core/lib/server_methods.js +++ b/packages/meteor-useraccounts-core/lib/server_methods.js @@ -124,7 +124,7 @@ Meteor.methods({ ATResendVerificationEmail: function (email) { check(email, String); - var user = Users.findOne({ "emails.address": email }); + var user = Meteor.users.findOne({ "emails.address": email }); // Send the standard error back to the client if no user exist with this e-mail if (!user) { diff --git a/packages/wekan-ldap/server/loginHandler.js b/packages/wekan-ldap/server/loginHandler.js index 6f8504c35..79b3899a0 100644 --- a/packages/wekan-ldap/server/loginHandler.js +++ b/packages/wekan-ldap/server/loginHandler.js @@ -96,7 +96,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { log_info('Querying user'); log_debug('userQuery', userQuery); - user = Users.findOne(userQuery); + user = Meteor.users.findOne(userQuery); } // Attempt to find user by username @@ -137,7 +137,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { log_debug('userQuery', userQuery); - user = Users.findOne(userQuery); + user = Meteor.users.findOne(userQuery); } // Attempt to find user by e-mail address only @@ -159,7 +159,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) { log_debug('userQuery', userQuery); - user = Users.findOne(userQuery); + user = Meteor.users.findOne(userQuery); } diff --git a/packages/wekan-ldap/server/sync.js b/packages/wekan-ldap/server/sync.js index 5d0a98399..dd3855d35 100644 --- a/packages/wekan-ldap/server/sync.js +++ b/packages/wekan-ldap/server/sync.js @@ -234,7 +234,7 @@ export function syncUserData(user, ldapUser) { const username = slug(getLdapUsername(ldapUser)); if (user && user._id && username !== user.username) { log_info('Syncing user username', user.username, '->', username); - Users.findOne({ _id: user._id }, { $set: { username }}); + Meteor.users.findOne({ _id: user._id }, { $set: { username }}); } } @@ -341,7 +341,7 @@ export function importNewUsers(ldap) { } // Add user if it was not added before - let user = Users.findOne(userQuery); + let user = Meteor.users.findOne(userQuery); if (!user && username && LDAP.settings_get('LDAP_MERGE_EXISTING_USERS') === true) { const userQuery = { @@ -350,7 +350,7 @@ export function importNewUsers(ldap) { log_debug('userQuery merge', userQuery); - user = Users.findOne(userQuery); + user = Meteor.users.findOne(userQuery); if (user) { syncUserData(user, ldapUser); } diff --git a/sandstorm.js b/sandstorm.js index 34b1e507e..de386d149 100644 --- a/sandstorm.js +++ b/sandstorm.js @@ -175,7 +175,7 @@ if (isSandstorm && Meteor.isServer) { const users = {}; function ensureUserListed(userId) { if (!users[userId]) { - const user = Users.findOne(userId); + const user = Meteor.users.findOne(userId); if (user) { users[userId] = { id: user.services.sandstorm.id }; } else { @@ -217,7 +217,7 @@ if (isSandstorm && Meteor.isServer) { 'userId', ); (comment.text.match(/\B@([\w.]*)/g) || []).forEach(username => { - const user = Users.findOne({ + const user = Meteor.users.findOne({ username: username.slice(1), }); if (user && activeMembers.indexOf(user._id) !== -1) { @@ -368,7 +368,7 @@ if (isSandstorm && Meteor.isServer) { if (newMethods[key].auth) { newMethods[key].auth = function() { const sandstormID = this.req.headers['x-sandstorm-user-id']; - const user = Users.findOne({ + const user = Meteor.users.findOne({ 'services.sandstorm.id': sandstormID, }); return user && user._id; From e21c078521c061fe019083ec5a5f62a99e6254d1 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Thu, 18 Jun 2020 01:02:38 +0200 Subject: [PATCH 067/105] Fix activities view on mobile devices Turns out that the sidebar is not available on mobile device therefore add guards for this for now. This needs further investigation. --- client/components/activities/activities.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index edfaab2a0..83843d1d7 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -7,8 +7,9 @@ BlazeComponent.extendComponent({ // XXX Should we use ReactiveNumber? this.page = new ReactiveVar(1); this.loadNextPageLocked = false; + // TODO is sidebar always available? E.g. on small screens/mobile devices const sidebar = Sidebar; - sidebar.callFirstWith(null, 'resetNextPeak'); + sidebar && sidebar.callFirstWith(null, 'resetNextPeak'); this.autorun(() => { let mode = this.data().mode; const capitalizedMode = Utils.capitalize(mode); @@ -29,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 From afe00d02cddf016a3ccc1ed9a98a7f10d3339f26 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 18 Jun 2020 02:13:19 +0300 Subject: [PATCH 068/105] Add back checks about can user export CSV/TSV. Thanks to marc1006 and xet7 ! Related #3173 --- models/export.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/models/export.js b/models/export.js index 17b08dad8..7a59fbec0 100644 --- a/models/export.js +++ b/models/export.js @@ -80,19 +80,21 @@ if (Meteor.isServer) { }); } const exporter = new Exporter(boardId); - //if (exporter.canExport(user)) { - body = params.query.delimiter - ? exporter.buildCsv(params.query.delimiter) - : exporter.buildCsv(); - //'Content-Length': body.length, - res.writeHead(200, { - 'Content-Type': params.query.delimiter ? 'text/csv' : 'text/tsv', - }); - res.write(body); - res.end(); - //} else { - // res.writeHead(403); - // res.end('Permission Error'); - //} + if (exporter.canExport(user)) { + body = params.query.delimiter + ? exporter.buildCsv(params.query.delimiter) + : exporter.buildCsv(); + res.writeHead(200, { + // 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); + res.end(); + } else { + res.writeHead(403); + res.end('Permission Error'); + } }); } From cd97cca7b8651e3d9aa746d7d12f270fb96c1f82 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 18 Jun 2020 02:23:48 +0300 Subject: [PATCH 069/105] Update ChangeLog. --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7cc46fe1..745ae0766 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# Upcoming 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: From 032099cfbeb140faffeb3a8e5b5934260c1ce864 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 18 Jun 2020 02:33:01 +0300 Subject: [PATCH 070/105] v4.17 --- CHANGELOG.md | 2 +- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 4 ++-- public/api/wekan.yml | 2 +- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 745ae0766..8ff2c972d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v4.17 2020-06-18 Wekan release This release fixes the following bugs: diff --git a/Stackerfile.yml b/Stackerfile.yml index b9bc688dc..90359b27a 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.16.0" +appVersion: "v4.17.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index d41a22dba..5c99549a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.16.0", + "version": "v4.17.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 398bc04eb..4dcab06a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.16.0", + "version": "v4.17.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index 927943076..31398ea28 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
                  • - Wekan REST API v4.16 + Wekan REST API v4.17
                  • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                    -

                    Wekan REST API v4.16

                    +

                    Wekan REST API v4.17

                    Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

                    diff --git a/public/api/wekan.yml b/public/api/wekan.yml index bfbe913d1..a0d165508 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.16 + version: v4.17 description: | The REST API allows you to control and extend Wekan with ease. diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index fab8f1d64..b926fb632 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 = 416, + appVersion = 417, # Increment this for every release. - appMarketingVersion = (defaultText = "4.16.0~2020-06-17"), + appMarketingVersion = (defaultText = "4.17.0~2020-06-18"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From 311c0d23a4566c17a65f34317fe084236d6b6544 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 24 Jun 2020 10:00:53 -0400 Subject: [PATCH 071/105] Add meteor ens3 Ethernet interface to rebuild-wekan.sh Thanks to xet7 ! --- rebuild-wekan.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh index dab80b536..6e057d2d7 100755 --- a/rebuild-wekan.sh +++ b/rebuild-wekan.sh @@ -64,7 +64,7 @@ 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 development on Ethernet IP address port 4000" "Run Meteor for development on Eth interface ens3 address port 4000" "Run Meteor for development on Custom IP address and port" "Quit") select opt in "${options[@]}" do case $opt in @@ -172,6 +172,12 @@ do break ;; + "Run Meteor for development on Eth interface ens3 address port 4000") + IPADDRESS=$(ip addr show ens3 | 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") ip address echo "From above list, what is your IP address?" From 20edac091a0ba9a100eaae9119cff87a02deca18 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Wed, 24 Jun 2020 10:02:05 -0400 Subject: [PATCH 072/105] Update translations. --- i18n/ja.i18n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json index 5fac2a9f4..e575914cd 100644 --- a/i18n/ja.i18n.json +++ b/i18n/ja.i18n.json @@ -809,5 +809,5 @@ "archived": "アーカイブ", "delete-linked-card-before-this-card": "カード内にある、リンクされているカードを削除しなければ、このカードは削除できません", "delete-linked-cards-before-this-list": "リスト内にある、他のカードを参照しているカードを削除しなければ、このリストは削除できません", - "hide-checked-items": "Hide checked items" + "hide-checked-items": "チェックした項目を隠す" } From 0be1c00fccef8797a1b3612593a6623a9b465e0d Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Thu, 25 Jun 2020 22:08:57 +0300 Subject: [PATCH 073/105] Fix start-wekan.bat Thanks to xet7 ! --- start-wekan.bat | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) mode change 100755 => 100644 start-wekan.bat diff --git a/start-wekan.bat b/start-wekan.bat old mode 100755 new mode 100644 index 272e963e5..cfea7001e --- 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 " 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 ..\.. From c8b21b2e172f5ad7103f856bbd68e9a004e6fa50 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 28 Jun 2020 05:55:12 -0400 Subject: [PATCH 074/105] Update translations. From a77cf56fbdaf0b74d8b97aa41b0a88fee85e3ee1 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 28 Jun 2020 06:42:05 -0400 Subject: [PATCH 075/105] Fix running meteor for dev in rebuild-wekan.sh Thanks to xet7 ! --- rebuild-wekan.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh index 6e057d2d7..e8336a299 100755 --- a/rebuild-wekan.sh +++ b/rebuild-wekan.sh @@ -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 Eth interface ens3 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 @@ -166,19 +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 Eth interface ens3 address port 4000") - IPADDRESS=$(ip addr show ens3 | 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 From 2575552e11bdb975d90d31a35bd83cb0eed1faf7 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 28 Jun 2020 06:44:56 -0400 Subject: [PATCH 076/105] Update ChangeLog. --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ff2c972d..c671fe74d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# Upcoming Wekan release + +This release fixes the following bugs: + +- [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. + +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: From ee6852f8ea677d664cb89fe578d241d602e27ad2 Mon Sep 17 00:00:00 2001 From: Lua00808 <3102oikawa713hayaki@gmail.com> Date: Mon, 29 Jun 2020 14:05:01 +0900 Subject: [PATCH 077/105] Fix typo. --- docker-compose.yml | 2 +- torodb-postgresql/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index cc60d2948..338840dd4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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/torodb-postgresql/docker-compose.yml b/torodb-postgresql/docker-compose.yml index 793a9b4fc..5ea025253 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 From eb4219504d35265d5305bbb2729cc11dc51ef423 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 29 Jun 2020 06:15:08 -0400 Subject: [PATCH 078/105] Update ChangeLog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c671fe74d..d2c04fbba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ This release fixes the following bugs: - [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. Thanks to above GitHub users for their contributions and translators for their translations. From c5e0832e00567272f684ec2b5b9eafddb4bd737a Mon Sep 17 00:00:00 2001 From: Allemand <37148072+salleman33@users.noreply.github.com> Date: Fri, 10 Jul 2020 10:06:39 +0200 Subject: [PATCH 079/105] Update users.js issue #3099 : we have to delete the existing user, Account Service create it again --- models/users.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/users.js b/models/users.js index 2b5a059ef..7c5d28554 100644 --- a/models/users.js +++ b/models/users.js @@ -946,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; } From 892008563b308647267e8430adb32e729de7dc0a Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 16:08:03 +0300 Subject: [PATCH 080/105] Update translations. From 2cbd7d83f991178ceae7f06e18eb74e370579f85 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 16:08:31 +0300 Subject: [PATCH 081/105] Update ChangeLog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2c04fbba..c4ba00bae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ This release fixes the following bugs: 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. From ba24c4e40c728d030504ed21ccf79247d0449e1b Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 18:56:26 +0300 Subject: [PATCH 082/105] All logged in users are now allowed to reorder boards by dragging at All Boards page and Public Boards page. Thanks to xet7 ! Fixes #3147 --- client/components/boards/boardsList.js | 6 ------ models/boards.js | 8 ++++++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js index eee119eaa..145f67892 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/models/boards.js b/models/boards.js index 11d8fd890..f272e0971 100644 --- a/models/boards.js +++ b/models/boards.js @@ -1219,6 +1219,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({ From af240450d6a79afc045ce06cc17bbb0005eb3c2e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 19:01:51 +0300 Subject: [PATCH 083/105] Update ChangeLog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ba00bae..fd59eb417 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ This release 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 From 05cd1247ab935f586d747743bb9cd79d23e0b1e6 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 19:04:46 +0300 Subject: [PATCH 084/105] Update dependencies. --- .meteor/versions | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.meteor/versions b/.meteor/versions index 7a6bd733e..990f87104 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -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 @@ -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 @@ -169,7 +169,7 @@ 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 @@ -182,7 +182,7 @@ 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 From 6e4407ed9cb3c95a99e0dbbb4383324dd57d6be1 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 19:11:46 +0300 Subject: [PATCH 085/105] Upgrade to Node 12.18.2. Thanks to Node developers and xet7 ! --- .devcontainer/Dockerfile | 2 +- .future-snap/broken-snapcraft.yaml | 2 +- .future-snap/snapcraft.yaml | 2 +- .travis.yml | 2 +- Dockerfile | 2 +- Dockerfile.arm64v8 | 4 ++-- rebuild-wekan.sh | 4 ++-- releases/release-sandstorm.sh | 2 +- snapcraft.yaml | 2 +- stacksmith/user-scripts/build.sh | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 0488c226a..7d7908b63 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive ENV \ DEBUG=false \ - NODE_VERSION=12.18.1 \ + 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 1841dacd0..b2290ba64 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.1 + 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 99fabb65a..e2582058e 100644 --- a/.future-snap/snapcraft.yaml +++ b/.future-snap/snapcraft.yaml @@ -83,7 +83,7 @@ parts: wekan: source: . plugin: nodejs - node-engine: 12.18.1 + node-engine: 12.18.2 node-packages: - node-gyp - node-pre-gyp diff --git a/.travis.yml b/.travis.yml index fb72b9c9c..17e0634b5 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.1 + TRAVIS_NODE_VERSION: 12.18.2 TRAVIS_NPM_VERSION: latest before_install: diff --git a/Dockerfile b/Dockerfile index 641219c52..03b85dd07 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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.1 \ + 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 35da388e1..b25f2bb42 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.1 \ + 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.1 \ + NODE_VERSION=v12.18.2 \ NODE_ENV=production \ NPM_VERSION=latest \ WITH_API=true \ diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh index e8336a299..e07dfc0e1 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.1 +#NODE_VERSION=12.18.2 #X64NODE="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" function pause(){ @@ -80,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.1 + 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 diff --git a/releases/release-sandstorm.sh b/releases/release-sandstorm.sh index 2e0f5c75f..65a0e6406 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.1 +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/snapcraft.yaml b/snapcraft.yaml index f1b0533a9..816f97a2d 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -81,7 +81,7 @@ parts: wekan: source: . plugin: nodejs - node-engine: 12.18.1 + 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 e0174110f..4d57bb263 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.18.1 +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 From 16a793e6725482ce3e9d2c8781147014f6a37073 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 19:14:47 +0300 Subject: [PATCH 086/105] Update ChangeLog. --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd59eb417..0055fe890 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Upcoming Wekan release -This release fixes the following bugs: +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. From b7562a708571a4951cefd1b1758211fc0469ba25 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Fri, 10 Jul 2020 19:28:43 +0300 Subject: [PATCH 087/105] v4.18 --- CHANGELOG.md | 2 +- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 4 ++-- public/api/wekan.yml | 2 +- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0055fe890..3b938a579 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v4.18 2020-07-10 Wekan release This release adds the following updates: diff --git a/Stackerfile.yml b/Stackerfile.yml index 90359b27a..41e6fa456 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.17.0" +appVersion: "v4.18.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index 5c99549a0..8449f5fbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.17.0", + "version": "v4.18.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 4dcab06a6..ad4dba502 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.17.0", + "version": "v4.18.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index 31398ea28..aa5c69729 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
                    • - Wekan REST API v4.17 + Wekan REST API v4.18
                    • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                      -

                      Wekan REST API v4.17

                      +

                      Wekan REST API v4.18

                      Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

                      diff --git a/public/api/wekan.yml b/public/api/wekan.yml index a0d165508..540af9ef1 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.17 + version: v4.18 description: | The REST API allows you to control and extend Wekan with ease. diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index b926fb632..c4415391f 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 = 417, + appVersion = 418, # Increment this for every release. - appMarketingVersion = (defaultText = "4.17.0~2020-06-18"), + appMarketingVersion = (defaultText = "4.18.0~2020-07-10"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From 0911511d0c1c9fdf88e1d3fc06bfc7807848f90e Mon Sep 17 00:00:00 2001 From: Robert Lebedeu Date: Fri, 17 Jul 2020 16:24:27 +0200 Subject: [PATCH 088/105] Checklist Item PUT API: boolean cast on isFinished --- models/checklistItems.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/models/checklistItems.js b/models/checklistItems.js index 7f3ab0953..afcd9081a 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')) { From 23ee93ca3d4ea161a93627a8e28e1ce93eea1bab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Jul 2020 04:28:59 +0000 Subject: [PATCH 089/105] Bump lodash from 4.17.15 to 4.17.19 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8449f5fbf..84733e55f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3066,9 +3066,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", From 87cb4598f745a362aaac06b8b457198c40aaf61e Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 18 Jul 2020 09:51:27 +0300 Subject: [PATCH 090/105] Update dependencies. Thanks to developers of dependencies and xet7 ! --- .meteor/versions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.meteor/versions b/.meteor/versions index 990f87104..1d8b71bc3 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -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.1 +minifier-css@1.5.2 minifier-js@2.6.0 minifiers@1.1.8-faster-rebuild.0 minimongo@1.6.0 @@ -162,7 +162,7 @@ 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 From f57ed2990f5c6e1af10d270b24c7092805711afe Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 18 Jul 2020 09:54:37 +0300 Subject: [PATCH 091/105] Update dependencies. --- packages/markdown/marked/package-lock.json | 7 +++---- packages/markdown/marked/package.json | 3 +++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/markdown/marked/package-lock.json b/packages/markdown/marked/package-lock.json index ca9b58489..adeef6be2 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 a2fcfe600..db7d2f99f 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" } } From 1a49d25c9082bd6bb32b145e2ab289f3f1c401fd Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 18 Jul 2020 10:01:51 +0300 Subject: [PATCH 092/105] Update translations. --- i18n/de.i18n.json | 6 +- i18n/id.i18n.json | 354 +++++++++++++++++++++++----------------------- i18n/tr.i18n.json | 48 +++---- 3 files changed, 204 insertions(+), 204 deletions(-) diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json index e26b0ca25..2345252d2 100644 --- a/i18n/de.i18n.json +++ b/i18n/de.i18n.json @@ -807,7 +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", - "hide-checked-items": "Hide checked items" + "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/id.i18n.json b/i18n/id.i18n.json index 02341ee7c..f970ce92a 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 start", - "add-custom-html-before-body-end": "Add Custom HTML before 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 mulai", + "add-custom-html-before-body-end": "Tambahkan HTML khusus sebelum 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,38 +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", - "hide-checked-items": "Hide checked items" + "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/tr.i18n.json b/i18n/tr.i18n.json index 10dcd6eac..962ecce72 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. Oturum açarak 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", From b9a4b0b51d3692fcbb715b1afc875f21cd204ae5 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 18 Jul 2020 10:08:59 +0300 Subject: [PATCH 093/105] Add support for EdgeHTML browser (Microsoft Legacy Edge, not based on Chromium) by removing incompatible csv-stringify package. CSV export will be fixed later. Thanks to xet7 ! Closes #3125 --- models/exporter.js | 54 +++++++++++++++++++++++++--------------------- package-lock.json | 5 ----- package.json | 1 - 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/models/exporter.js b/models/exporter.js index b6188ece3..3b3589f6d 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/package-lock.json b/package-lock.json index 84733e55f..5838eba66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1378,11 +1378,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", diff --git a/package.json b/package.json index ad4dba502..909fee884 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,6 @@ "bcrypt": "^3.0.7", "bson": "^4.0.3", "bunyan": "^1.8.12", - "csv-stringify": "^5.5.0", "es6-promise": "^4.2.4", "fibers": "^5.0.0", "flatted": "^2.0.1", From b51094d5cddd205492ecb624174304e4e38db861 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 18 Jul 2020 10:16:03 +0300 Subject: [PATCH 094/105] Update ChangeLog. --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b938a579..426bdf884 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +# Upcoming 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: From 282f0f91fef799dc3981004e4d20730ae18eff2f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sat, 18 Jul 2020 10:28:52 +0300 Subject: [PATCH 095/105] v4.19 --- CHANGELOG.md | 2 +- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 4 ++-- public/api/wekan.yml | 2 +- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 426bdf884..88a9c7601 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v4.19 2020-07-18 Wekan release This release adds the following features: diff --git a/Stackerfile.yml b/Stackerfile.yml index 41e6fa456..b0a66aa83 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.18.0" +appVersion: "v4.19.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index 5838eba66..1de68ab76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.18.0", + "version": "v4.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 909fee884..7f2ea637a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.18.0", + "version": "v4.19.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index aa5c69729..901a5509b 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
                      • - Wekan REST API v4.18 + Wekan REST API v4.19
                      • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                        -

                        Wekan REST API v4.18

                        +

                        Wekan REST API v4.19

                        Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

                        diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 540af9ef1..939835230 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.18 + version: v4.19 description: | The REST API allows you to control and extend Wekan with ease. diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index c4415391f..59b987f4b 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 = 418, + appVersion = 419, # Increment this for every release. - appMarketingVersion = (defaultText = "4.18.0~2020-07-10"), + appMarketingVersion = (defaultText = "4.19.0~2020-07-18"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From 19acd7861d1843460297f27e8da0c90dba6ebe54 Mon Sep 17 00:00:00 2001 From: Nico Date: Sun, 19 Jul 2020 19:57:23 +0200 Subject: [PATCH 096/105] Change slug on card rename --- models/boards.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/models/boards.js b/models/boards.js index f272e0971..306bae134 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; } }, From 0725ce3fb1a524df6319949a328d5466b5fd9aac Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 19 Jul 2020 22:44:32 +0300 Subject: [PATCH 097/105] Update translations. From 3ee9b13b3b1d3a8e5f6487a55546a0e65ba82b38 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 19 Jul 2020 22:47:43 +0300 Subject: [PATCH 098/105] Update ChangeLog. --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88a9c7601..640b7cef6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# Upcoming Wekan release + +This release fixes the following bugs: + +- [Change slug on card rename](https://github.com/wekan/wekan/pull/3214). + Thanks to NicoP-S. + +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: From 419615bed43b6e9de4030193c47137a066b85bde Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 19 Jul 2020 23:07:17 +0300 Subject: [PATCH 099/105] Update dependencies. Thanks to developers of dependencies and xet7 ! --- package-lock.json | 764 +++++++++++++++++++++++----------------------- package.json | 16 +- 2 files changed, 397 insertions(+), 383 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1de68ab76..cf7877dcb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,126 +14,125 @@ } }, "@babel/core": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz", - "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==", + "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.1", - "@babel/generator": "^7.10.2", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helpers": "^7.10.1", - "@babel/parser": "^7.10.2", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.2", + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "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.1" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", + "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.10.2", + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", + "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.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", + "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.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "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.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "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.1", + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "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.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", + "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.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", + "@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.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -172,320 +171,319 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", + "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.10.1" + "@babel/types": "^7.10.5" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", + "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.10.1" + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "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.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "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.1" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "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.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "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.1", + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "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.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", + "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.10.1" + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } } }, "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "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.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "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.1" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", + "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.10.2", + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", + "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.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", + "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.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "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.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "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.1", + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "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.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", + "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.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", + "@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.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "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.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "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.10.1", - "@babel/types": "^7.10.1" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "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.1" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "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.1", + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "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.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -507,113 +505,112 @@ "dev": true }, "@babel/helpers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", - "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "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.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" }, "dependencies": { "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "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.1" + "@babel/highlight": "^7.10.4" } }, "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", + "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.10.2", + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", + "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.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" + "@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.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", + "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.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "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.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "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.1", + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==" + "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.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", + "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.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", + "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.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", + "@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.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", + "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.1", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } } @@ -637,9 +634,9 @@ "dev": true }, "@babel/runtime": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", - "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", + "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" } @@ -709,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", @@ -1082,12 +1085,12 @@ "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": "1.8.14", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", + "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", "requires": { "dtrace-provider": "~0.8", - "moment": "^2.10.6", + "moment": "^2.19.3", "mv": "~2", "safe-json-stringify": "~1" } @@ -1534,22 +1537,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": { @@ -1684,9 +1687,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", @@ -1738,23 +1741,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": { @@ -1781,6 +1785,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" + } } } }, @@ -1794,9 +1807,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" @@ -2278,9 +2291,9 @@ "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": { @@ -2556,9 +2569,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": { @@ -2692,12 +2705,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": { @@ -2814,9 +2827,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", @@ -3807,15 +3820,15 @@ } }, "moment": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", - "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==", + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==", "optional": true }, "mongodb": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz", - "integrity": "sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==", + "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", @@ -4083,9 +4096,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": { @@ -4956,9 +4969,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", @@ -4972,9 +4985,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", @@ -5055,28 +5068,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", @@ -5297,6 +5288,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", @@ -5589,11 +5603,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 7f2ea637a..e7be4e8fb 100644 --- a/package.json +++ b/package.json @@ -45,36 +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", "babel-runtime": "^6.26.0", "bcrypt": "^3.0.7", "bson": "^4.0.3", - "bunyan": "^1.8.12", + "bunyan": "^1.8.14", "es6-promise": "^4.2.4", "fibers": "^5.0.0", "flatted": "^2.0.1", "gridfs-stream": "^0.5.3", - "jszip": "^3.4.0", + "jszip": "^3.5.0", "ldapjs": "^1.0.2", "meteor-node-stubs": "^0.4.1", - "mongodb": "^3.5.7", + "mongodb": "^3.5.9", "os": "^0.1.1", "page": "^1.11.5", "papaparse": "^5.2.0", "qs": "^6.9.4", "source-map-support": "^0.5.19", - "xss": "^1.0.6" + "xss": "^1.0.7" } } From de28bf8569a7373a5d6fd60a4f413e76673adc26 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 19 Jul 2020 23:11:00 +0300 Subject: [PATCH 100/105] Add missing Wekan logo sizes for PWAs and Apps. Thanks to xet7 ! --- public/Square150x150Logo.scale-100.png | Bin 0 -> 13069 bytes public/Square44x44Logo.scale-100.png | Bin 0 -> 9241 bytes public/StoreLogo.scale-100.png | Bin 0 -> 9770 bytes public/site.webmanifest | 15 +++++++++++++++ 4 files changed, 15 insertions(+) create mode 100644 public/Square150x150Logo.scale-100.png create mode 100644 public/Square44x44Logo.scale-100.png create mode 100644 public/StoreLogo.scale-100.png diff --git a/public/Square150x150Logo.scale-100.png b/public/Square150x150Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..0445b50c7f8ef91a5c46fbd3454b5b61890ef30e GIT binary patch literal 13069 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 bZ0Y|2GRPWg_3zx`00000NkvXXu0mjfIqUax literal 0 HcmV?d00001 diff --git a/public/Square44x44Logo.scale-100.png b/public/Square44x44Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8cacfeed79e7bbdd09682d6379736eb0a87239 GIT binary patch literal 9241 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 literal 0 HcmV?d00001 diff --git a/public/StoreLogo.scale-100.png b/public/StoreLogo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..5d73037edf70c1d1ddc20f14232a424872d09c83 GIT binary patch literal 9770 zcmV+_Ce_)AP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>vax1x#tp8&by@bRJEC-`m@8B)JKSw4hN=H?7 z>)JaiNmMciAO;Wj09a=IzyIClfB08iPA0@$QcdaNU#OwF#*1>@|LXZ^uW){zf8IUs z+3&~A`whn-uQTsIb9>Hj9FJcYyq;nE_v5BK@3`{Z$i8oUk3dh>>-jmzGqQ8shUZ3g z-7iut`E#iKxzTt|JVSZD!+TiwFa2%49mrT|MjqsyTi*JMpUyuc@b`D)JM+`}!g=;N z5)HrZQ|)b#Z_|7IzOGLLeKYdwmHBD?_p2YqckMauf7miTHsZyvZ`kIn`NiX1U}qzs%pg`ES0=-a{s`S9#ltaXG~`!;t6nle2Kh;|ArJ z{rGy^e|^Lcp^69NF>_&p?dta}dbD4$<&U2|=S6!VHf z%FbnLv17qOjgdPaT*m`8MmHIx3*IMZvLj`9HrHf(&UMixr^8?qj)*>yTLlj_oE1VO zesUVi>7-Nb#787f1$)}KFN+~CST+2R(9COM!mt1ozzJwA>D!G(WORKJWFfi6s zb1k*j)|_cPsBy2x`Hdspb>BmeJ@wp6ue}YzXM_<)8hMmaN1JZ?2~5m1^DMK@wyaqo z#R@B~wDKyeuC|G_?RVI5r=54%b+@+!UgN0A`E?5`IEnHZ z9&^Fs@hlGz&`v(PiVeZZbMo0$9Z3-#gN*WxnN}Xdg<)A2w|)EW%X9yc-%Kq3k>A`u zdCtgn|35ruaNVDN`^9Thb#5Gw-B~D`UViH!4=X10REF;*5#J*d_IdZ%uDw>MyMlEV zBc;s+Wyh%BdF1VUiIE5YTfcW=fRSiNDkR!6stvg|ce@w-=-SMYnJKaX^~N}GGN z8pg_ucpA*?{}@9au`x~`$WX?3h24tXi(yor%7~U{P@5O{*Pq)NoBZmwO&@oNmoIXq z3uQ0|0!at+wFt*Z=y*ShjhL)tZZe!E+WW@lKy9u1ldNE%6p)o%*_x=`Gq*NJpV{VV zW9J@r#-TVI1fk74b&z|G%INGiOJk2=%RAVTYOx8}knY=Encp-2HvJz*42MQ;uVLhw znP}%hZE{N{xd-zo^Uov6PaE=#4)(!S=D)k_&#TOTciEp;ng8yx|8#1h|LXXHUvlWj zF-eZu+rMsR2(OrWZPrgNO@zRwlU<&A$CAfeu2rJcJ5g@;rm@2bNfSnoWwo9OCDQ*I zX~nCJT1kRSqw_yKFFrPAZ})8#o1U8+pz4f`Q|yjyffL^&ZE?cSBV=rdoE}=@=Wd{j z`SYaICKGfkdAABY;>vaqljF)hl1%X;5jz+`vV!Wv^?3mS#sY<)tN_Hd2`tq#Y*X3D z`q@d(dSVt_h{{&|oQ!_pxR6{Y=kmUWS&_MD-X%0wv(jUykuog7-PonC-BTf{hsa|H}@NjH;S8SjXy(8%qC8(5#C2)X;-0Ay+`aU zJbTY&6(C85>i#Q23O4kY{O*t6C#XuD;y6eL&KBxtq9QTjOk~RgN!WN-nd)QPttyVl zuXh~P5&a!7bug+j-Zo>f875#<6}l`iJyEuBHjx`kSCmtZPXs-o!drd=GgwfQk3RH! z8iPPLorzP*Pel;ke^mx1yPvb3lPG;u-xB7*f$!!wuJzeYCHW(gO0(5Fy!Hxt6vX>A zY}%C;N3<9oWn%u~_{ZV4mTJ~##cFk(!|iyV@egkp7nAj6Ey2-KV z9S;_^0u_oR6)-Y<<}pL;rnUw4z@}bD2oPu2M?%2b^4f$%{uvT@Ei?k1Qr%abXGCi; zhhu#B-^ZT3G-H$hCg8ycI56$|Ro1k?Xzzec} zo!v-yM;$UtQYl?oP3XLdOi5pU8za4#Dnqg#2O>~Xe#%+WVks>w}e>;}F_+Gjec~F*A*XJb7 znWg__=8}`3wjJc16?;xsJZ6T+*1pAfZ1_5AJ`NMDI4mNkzt8d?taH!MJX8FbA^G+- zp9?KJkLv56b0qf3jmJ^Y*wszFH5&D~0-Ms=;H-4|B|MD

                        Ba|Po}r21jN_Z<7Kq~ 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 Eg7|>0mH+?% literal 0 HcmV?d00001 diff --git a/public/site.webmanifest b/public/site.webmanifest index 997a52ec7..1be969896 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", From 14cdb5bdf1825d0e51dbb8b44725242314416b63 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Sun, 19 Jul 2020 23:13:22 +0300 Subject: [PATCH 101/105] Update ChangeLog. --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 640b7cef6..2c7d7782d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,16 @@ # Upcoming Wekan release -This release fixes the following bugs: +This release adds the following updates: + +- [Update dependencies](https://github.com/wekan/wekan/commit/419615bed43b6e9de4030193c47137a066b85bde). + 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. From 116372e11e09ce9b8376a8694553add595e02815 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 20 Jul 2020 00:13:39 +0300 Subject: [PATCH 102/105] Update dependencies, part 2. Thanks to developers of dependencies and xet7 ! --- package-lock.json | 368 +++++++++++++++++++++++++--------------------- package.json | 20 +-- 2 files changed, 211 insertions(+), 177 deletions(-) diff --git a/package-lock.json b/package-lock.json index cf7877dcb..dec24203e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -758,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", @@ -771,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": { @@ -875,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", @@ -1006,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": { @@ -1085,11 +1093,12 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "bunyan": { - "version": "1.8.14", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", - "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", + "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", + "exeunt": "1.1.0", "moment": "^2.19.3", "mv": "~2", "safe-json-stringify": "~1" @@ -1221,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", @@ -1381,14 +1385,6 @@ "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", "integrity": "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" }, - "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", @@ -1923,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", @@ -2071,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", @@ -2172,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", @@ -2184,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", @@ -2297,9 +2309,12 @@ "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", @@ -2808,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", @@ -2844,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" } }, @@ -3207,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": { @@ -3250,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": { @@ -3286,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": { @@ -3316,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": { @@ -3436,7 +3451,7 @@ "bundled": true }, "elliptic": { - "version": "6.4.0", + "version": "6.4.1", "bundled": true, "requires": { "bn.js": "^4.4.0", @@ -3449,7 +3464,7 @@ } }, "events": { - "version": "1.1.1", + "version": "3.0.0", "bundled": true }, "evp_bytestokey": { @@ -3469,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": { @@ -3492,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": { @@ -3512,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": { @@ -3536,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", @@ -3578,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": { @@ -3601,7 +3615,7 @@ "bundled": true }, "randombytes": { - "version": "2.0.6", + "version": "2.1.0", "bundled": true, "requires": { "safe-buffer": "^5.1.0" @@ -3616,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": { @@ -3646,6 +3656,10 @@ "version": "5.1.2", "bundled": true }, + "setimmediate": { + "version": "1.0.5", + "bundled": true + }, "sha.js": { "version": "2.4.11", "bundled": true, @@ -3655,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": { @@ -3710,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": { @@ -3721,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", @@ -3892,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", @@ -3953,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", @@ -4502,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", @@ -5394,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" } @@ -5427,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": { diff --git a/package.json b/package.json index e7be4e8fb..48d67c884 100644 --- a/package.json +++ b/package.json @@ -57,21 +57,21 @@ "@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.14", - "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", + "flatted": "^3.0.4", + "gridfs-stream": "^1.1.1", "jszip": "^3.5.0", - "ldapjs": "^1.0.2", - "meteor-node-stubs": "^0.4.1", + "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", From 52938b2f1c9f4a3cb49612e5dfb4141799da6a5f Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 20 Jul 2020 00:16:23 +0300 Subject: [PATCH 103/105] Update ChangeLog. --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c7d7782d..b4c0d5105 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ This release adds the following updates: -- [Update dependencies](https://github.com/wekan/wekan/commit/419615bed43b6e9de4030193c47137a066b85bde). +- 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: From be6d1044a04d59b8cadc1226077f65c4af2a1bed Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 20 Jul 2020 00:21:03 +0300 Subject: [PATCH 104/105] v4.20 --- CHANGELOG.md | 2 +- Stackerfile.yml | 2 +- package-lock.json | 2 +- package.json | 2 +- public/api/wekan.html | 4 ++-- public/api/wekan.yml | 2 +- sandstorm-pkgdef.capnp | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4c0d5105..5f8dce62c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Upcoming Wekan release +# v4.20 2020-07-20 Wekan release This release adds the following updates: diff --git a/Stackerfile.yml b/Stackerfile.yml index b0a66aa83..2e19adc1f 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v4.19.0" +appVersion: "v4.20.0" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index dec24203e..0edb0d4fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.19.0", + "version": "v4.20.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 48d67c884..769ee7036 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v4.19.0", + "version": "v4.20.0", "description": "Open-Source kanban", "private": true, "scripts": { diff --git a/public/api/wekan.html b/public/api/wekan.html index 901a5509b..d3ed75c2d 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

                        • - Wekan REST API v4.19 + Wekan REST API v4.20
                        • @@ -2027,7 +2027,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                          -

                          Wekan REST API v4.19

                          +

                          Wekan REST API v4.20

                          Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

                          diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 939835230..da61bc5aa 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.19 + version: v4.20 description: | The REST API allows you to control and extend Wekan with ease. diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index 59b987f4b..521fb7727 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 = 419, + appVersion = 420, # Increment this for every release. - appMarketingVersion = (defaultText = "4.19.0~2020-07-18"), + appMarketingVersion = (defaultText = "4.20.0~2020-07-20"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, From f6e9f5a5e8423fed9eaadaf196b46273eca241d0 Mon Sep 17 00:00:00 2001 From: Lauri Ojansivu Date: Mon, 20 Jul 2020 00:54:33 +0300 Subject: [PATCH 105/105] Fix typo. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f8dce62c..472ec0327 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ This release adds the following updates: -- Update dependencies[Part1](https://github.com/wekan/wekan/commit/419615bed43b6e9de4030193c47137a066b85bde) and +- 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.