mirror of
https://github.com/wekan/wekan.git
synced 2025-04-23 13:37:09 -04:00
Merge branch 'master' of https://github.com/wekan/wekan
This commit is contained in:
commit
52e45211a2
37 changed files with 7053 additions and 134 deletions
|
@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v12.22.3 \
|
||||
NODE_VERSION=v12.22.4 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
|
|
|
@ -81,7 +81,7 @@ parts:
|
|||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 12.22.3
|
||||
node-engine: 12.22.4
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
|
|
@ -83,7 +83,7 @@ parts:
|
|||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 12.22.3
|
||||
node-engine: 12.22.4
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -34,3 +34,7 @@ ehthumbs.db
|
|||
.devcontainer/docker-compose.extend.yml
|
||||
.devcontainer/volumes*/
|
||||
.coverage
|
||||
|
||||
# Helm chart
|
||||
# Chart dependencies
|
||||
/helm/wekan/**/*.tgz
|
||||
|
|
|
@ -3,7 +3,7 @@ sudo: required
|
|||
|
||||
env:
|
||||
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
|
||||
TRAVIS_NODE_VERSION: 12.22.3
|
||||
TRAVIS_NODE_VERSION: 12.22.4
|
||||
TRAVIS_NPM_VERSION: latest
|
||||
|
||||
before_install:
|
||||
|
|
73
CHANGELOG.md
73
CHANGELOG.md
|
@ -3,6 +3,79 @@
|
|||
Note: With Docker, please don't use latest tag. Only use release tags.
|
||||
See https://github.com/wekan/wekan/issues/3874
|
||||
|
||||
# v5.47 2021-08-05 Wekan release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/commit/68d9de89466611521db7d942dcf8daf58ba15a3e).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.46 2021-08-05 Wekan release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/commit/d5c0a5d377d31bedadf3730756406355a17a563a).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.45 2021-08-05 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Special handles to notify board or card members in a comment](https://github.com/wekan/wekan/pull/3937).
|
||||
Thanks to syndimann.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix: Show missing user mentions popover when posting comments in maximized card layout](https://github.com/wekan/wekan/pull/3939).
|
||||
Thanks to syndimann.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.44 2021-08-03 Wekan release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Wekan v5.43](https://github.com/wekan/wekan/commit/4e17d5a10f95fcea420c794ed8b30ea18dc2a725) and v5.44 for helm.
|
||||
Thanks to xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix: Consecutive Card numbering when a card is moved to another board or copied](https://github.com/wekan/wekan/pull/3936).
|
||||
Thanks to syndimann.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.43 2021-08-03 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Consecutive boardwise card numbering](https://github.com/wekan/wekan/pull/3935).
|
||||
Thanks to syndimann.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Update Helm Chart apiVersion, pin image version](https://github.com/wekan/wekan/pulls/3933).
|
||||
This makes this Chart compatible with [flux](https://fluxcd.io)
|
||||
[helm-controller](https://fluxcd.io/docs/components/helm), which requires v2 charts.
|
||||
Thanks to varac.
|
||||
- [Wekan v5.42 for helm](https://github.com/wekan/wekan/commit/7a1f42fa4e153ff4a0fb481ca5a363ac62033b7f).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.42 2021-08-01 Wekan release
|
||||
|
||||
This release adds the following CRITICAL SECURITY UPDATES:
|
||||
|
||||
- [Updated to Node.js v12.22.4](https://github.com/wekan/wekan/commit/b13f6913896f787e1cae485381d98345d9f8b830).
|
||||
Thanks to Node.js developers.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.41 2021-07-26 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
|
|
@ -12,7 +12,7 @@ ARG DEBIAN_FRONTEND=noninteractive
|
|||
|
||||
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v12.22.3 \
|
||||
NODE_VERSION=v12.22.4 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
|
|
|
@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
|
|||
ENV QEMU_VERSION=v4.2.0-6 \
|
||||
QEMU_ARCHITECTURE=aarch64 \
|
||||
NODE_ARCHITECTURE=linux-arm64 \
|
||||
NODE_VERSION=v12.22.3 \
|
||||
NODE_VERSION=v12.22.4 \
|
||||
WEKAN_VERSION=latest \
|
||||
WEKAN_ARCHITECTURE=arm64
|
||||
|
||||
|
@ -40,7 +40,7 @@ LABEL maintainer="wekan"
|
|||
# Set the environment variables (defaults where required)
|
||||
ENV QEMU_ARCHITECTURE=aarch64 \
|
||||
NODE_ARCHITECTURE=linux-arm64 \
|
||||
NODE_VERSION=v12.22.3 \
|
||||
NODE_VERSION=v12.22.4 \
|
||||
NODE_ENV=production \
|
||||
NPM_VERSION=latest \
|
||||
WITH_API=true \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v5.41.0"
|
||||
appVersion: "v5.47.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
|
|
@ -25,6 +25,9 @@ template(name="cardDetails")
|
|||
h2.card-details-title.js-card-title(
|
||||
class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
|
||||
+viewer
|
||||
if currentBoard.allowsCardNumber
|
||||
span.card-number
|
||||
| ##{getCardNumber}
|
||||
= getTitle
|
||||
if isWatching
|
||||
i.card-details-watch.fa.fa-eye
|
||||
|
|
|
@ -114,6 +114,12 @@ avatar-radius = 50%
|
|||
background: darken(white, 7%)
|
||||
border-bottom: 1px solid darken(white, 14%)
|
||||
|
||||
.card-number {
|
||||
color: darken(white, 30%);
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.close-card-details,
|
||||
.maximize-card-details,
|
||||
.minimize-card-details,
|
||||
|
|
|
@ -37,6 +37,9 @@ template(name="minicard")
|
|||
if getArchived
|
||||
span.linked-icon.linked-archived.fa.fa-archive
|
||||
+viewer
|
||||
if currentBoard.allowsCardNumber
|
||||
span.card-number
|
||||
| ##{getCardNumber}
|
||||
= getTitle
|
||||
if $eq 'subtext-with-full-path' currentBoard.presentParentTask
|
||||
.parent-subtext
|
||||
|
|
|
@ -114,6 +114,10 @@
|
|||
font-size:20px;
|
||||
color: #ccc;
|
||||
.minicard-title
|
||||
.card-number
|
||||
color: darken(white, 30%);
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
p:last-child
|
||||
margin-bottom: 0
|
||||
.viewer
|
||||
|
|
|
@ -81,7 +81,9 @@ BlazeComponent.extendComponent({
|
|||
Utils.boardView() === 'board-view-cal' ||
|
||||
!Utils.boardView()
|
||||
)
|
||||
swimlaneId = board.getDefaultSwimline()._id;
|
||||
swimlaneId = board.getDefaultSwimline()._id;
|
||||
|
||||
const nextCardNumber = board.getNextCardNumber();
|
||||
|
||||
const _id = Cards.insert({
|
||||
title,
|
||||
|
@ -93,6 +95,7 @@ BlazeComponent.extendComponent({
|
|||
sort: sortIndex,
|
||||
swimlaneId,
|
||||
type: cardType,
|
||||
cardNumber: nextCardNumber,
|
||||
linkedId,
|
||||
});
|
||||
|
||||
|
@ -241,7 +244,7 @@ BlazeComponent.extendComponent({
|
|||
Boards.findOne(currentBoardId)
|
||||
.customFields()
|
||||
.fetch(),
|
||||
function(field) {
|
||||
function (field) {
|
||||
if (field.automaticallyOnCard || field.alwaysOnCard)
|
||||
arr.push({ _id: field._id, value: null });
|
||||
},
|
||||
|
@ -750,17 +753,17 @@ BlazeComponent.extendComponent({
|
|||
|
||||
checkIdleTime() {
|
||||
return window.requestIdleCallback ||
|
||||
function(handler) {
|
||||
const startTime = Date.now();
|
||||
return setTimeout(function() {
|
||||
handler({
|
||||
didTimeout: false,
|
||||
timeRemaining() {
|
||||
return Math.max(0, 50.0 - (Date.now() - startTime));
|
||||
},
|
||||
});
|
||||
}, 1);
|
||||
};
|
||||
function (handler) {
|
||||
const startTime = Date.now();
|
||||
return setTimeout(function () {
|
||||
handler({
|
||||
didTimeout: false,
|
||||
timeRemaining() {
|
||||
return Math.max(0, 50.0 - (Date.now() - startTime));
|
||||
},
|
||||
});
|
||||
}, 1);
|
||||
};
|
||||
}
|
||||
|
||||
updateList() {
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
const specialHandles = [
|
||||
{userId: 'board_members', username: 'board_members'},
|
||||
{userId: 'card_members', username: 'card_members'}
|
||||
];
|
||||
const specialHandleNames = specialHandles.map(m => m.username);
|
||||
|
||||
Template.editor.onRendered(() => {
|
||||
const textareaSelector = 'textarea';
|
||||
const mentions = [
|
||||
|
@ -7,13 +13,14 @@ Template.editor.onRendered(() => {
|
|||
search(term, callback) {
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
callback(
|
||||
_.union(
|
||||
currentBoard
|
||||
.activeMembers()
|
||||
.map(member => {
|
||||
const username = Users.findOne(member.userId).username;
|
||||
return username.includes(term) ? username : null;
|
||||
})
|
||||
.filter(Boolean),
|
||||
.filter(Boolean), [...specialHandleNames])
|
||||
);
|
||||
},
|
||||
template(value) {
|
||||
|
@ -323,13 +330,13 @@ Blaze.Template.registerHelper(
|
|||
return HTML.Raw(
|
||||
DOMPurify.sanitize(content, { ALLOW_UNKNOWN_PROTOCOLS: true }),
|
||||
);
|
||||
const knowedUsers = currentBoard.members.map(member => {
|
||||
const knowedUsers = _.union(currentBoard.members.map(member => {
|
||||
const u = Users.findOne(member.userId);
|
||||
if (u) {
|
||||
member.username = u.username;
|
||||
}
|
||||
return member;
|
||||
});
|
||||
}), [...specialHandles]);
|
||||
const mentionRegex = /\B@([\w.]*)/gi;
|
||||
|
||||
let currentMention;
|
||||
|
|
|
@ -317,6 +317,9 @@ kbd
|
|||
.grabbing
|
||||
cursor: grabbing
|
||||
|
||||
.textcomplete-dropdown
|
||||
z-index: 2000 !important;
|
||||
|
||||
// Implement a thiner close icon as suggested in
|
||||
// https://github.com/FortAwesome/Font-Awesome/issues/1540#issuecomment-68689950
|
||||
.fa.fa-times-thin:before
|
||||
|
|
|
@ -189,6 +189,13 @@ template(name="boardCardSettingsPopup")
|
|||
span
|
||||
i.fa.fa-tags
|
||||
| {{_ 'labels'}}
|
||||
div.check-div
|
||||
a.flex.js-field-has-card-number(class="{{#if allowsCardNumber}}is-checked{{/if}}")
|
||||
.materialCheckBox(class="{{#if allowsCardNumber}}is-checked{{/if}}")
|
||||
span
|
||||
i.fa.fa-hashtag
|
||||
| {{_ 'card'}}
|
||||
| {{_ 'number'}}
|
||||
div.check-div
|
||||
a.flex.js-field-has-description-title(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
|
||||
.materialCheckBox(class="{{#if allowsDescriptionTitle}}is-checked{{/if}}")
|
||||
|
|
|
@ -776,6 +776,10 @@ BlazeComponent.extendComponent({
|
|||
return this.currentBoard.allowsComments;
|
||||
},
|
||||
|
||||
allowsCardNumber() {
|
||||
return this.currentBoard.allowsCardNumber;
|
||||
},
|
||||
|
||||
allowsDescriptionTitle() {
|
||||
return this.currentBoard.allowsDescriptionTitle;
|
||||
},
|
||||
|
@ -1019,6 +1023,22 @@ BlazeComponent.extendComponent({
|
|||
this.currentBoard.allowsDescriptionTitle,
|
||||
);
|
||||
},
|
||||
'click .js-field-has-card-number'(evt) {
|
||||
evt.preventDefault();
|
||||
this.currentBoard.allowsCardNumber = !this.currentBoard
|
||||
.allowsCardNumber;
|
||||
this.currentBoard.setAllowsCardNumber(
|
||||
this.currentBoard.allowsCardNumber,
|
||||
);
|
||||
$(`.js-field-has-card-number ${MCB}`).toggleClass(
|
||||
CKCLS,
|
||||
this.currentBoard.allowsCardNumber,
|
||||
);
|
||||
$('.js-field-has-card-number').toggleClass(
|
||||
CKCLS,
|
||||
this.currentBoard.allowsCardNumber,
|
||||
);
|
||||
},
|
||||
'click .js-field-has-description-text'(evt) {
|
||||
evt.preventDefault();
|
||||
this.currentBoard.allowsDescriptionText = !this.currentBoard
|
||||
|
|
6
helm/wekan/Chart.lock
Normal file
6
helm/wekan/Chart.lock
Normal file
|
@ -0,0 +1,6 @@
|
|||
dependencies:
|
||||
- name: mongodb
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
version: 10.0.5
|
||||
digest: sha256:f6520f39b687cb52574ec2fda514662ce913665c0fd2391b68fdb4d2eb059497
|
||||
generated: "2021-07-27T22:16:39.945592552+02:00"
|
|
@ -1,14 +1,24 @@
|
|||
name: wekan
|
||||
version: 1.0.3
|
||||
apiVersion: v1
|
||||
apiVersion: v2
|
||||
appVersion: "5.47"
|
||||
dependencies:
|
||||
- condition: mongodb.enabled
|
||||
name: mongodb
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
version: 10.0.x
|
||||
description: Open Source kanban
|
||||
home: https://wekan.github.io/
|
||||
home: https://wekan.github.io
|
||||
icon: https://wekan.github.io/wekan-logo.svg
|
||||
keywords:
|
||||
- kanban
|
||||
maintainers:
|
||||
- email: github@randall.cc
|
||||
name: technotaff
|
||||
- email: jiangyt.cn@gmail.com
|
||||
name: jiangytcn
|
||||
- email: varac@varac.net
|
||||
name: varac
|
||||
name: wekan
|
||||
sources:
|
||||
- https://github.com/wekan/wekan
|
||||
maintainers:
|
||||
- name: technotaff
|
||||
email: github@randall.cc
|
||||
- name: jiangytcn
|
||||
email: jiangyt.cn@gmail.com
|
||||
engine: gotpl
|
||||
type: application
|
||||
version: 1.1.0
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
dependencies:
|
||||
- name: mongodb
|
||||
version: 10.0.x
|
||||
repository: "https://charts.bitnami.com/bitnami"
|
||||
condition: mongodb.enabled
|
|
@ -14,7 +14,7 @@ serviceAccounts:
|
|||
##
|
||||
image:
|
||||
repository: quay.io/wekan/wekan
|
||||
tag: latest
|
||||
tag: v5.47
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Configuration for wekan component
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
"add-subtask": "Teilaufgabe hinzufügen",
|
||||
"add-checklist": "Checkliste hinzufügen",
|
||||
"add-checklist-item": "Element zu Checkliste hinzufügen",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"convertChecklistItemToCardPopup-title": "in Karte konvertieren",
|
||||
"add-cover": "Cover hinzufügen",
|
||||
"add-label": "Label hinzufügen",
|
||||
"add-list": "Liste hinzufügen",
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
"add-subtask": "Adicionar Sub-tarefa",
|
||||
"add-checklist": "Adicionar Lista de Verificação",
|
||||
"add-checklist-item": "Adicionar um item à lista de verificação",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"convertChecklistItemToCardPopup-title": "Converter para Cartão",
|
||||
"add-cover": "Adicionar Capa",
|
||||
"add-label": "Adicionar Etiqueta",
|
||||
"add-list": "Adicionar Lista",
|
||||
|
@ -199,7 +199,7 @@
|
|||
"poker-forty": "40",
|
||||
"poker-oneHundred": "100",
|
||||
"poker-unsure": "?",
|
||||
"poker-finish": "Finish",
|
||||
"poker-finish": "Finalizar",
|
||||
"poker-result-votes": "Votos",
|
||||
"poker-result-who": "Who",
|
||||
"poker-replay": "Replay",
|
||||
|
|
|
@ -210,15 +210,30 @@ if (Meteor.isServer) {
|
|||
// ignore commenter mention himself?
|
||||
continue;
|
||||
}
|
||||
const atUser = _.findWhere(knownUsers, { username });
|
||||
if (!atUser) {
|
||||
continue;
|
||||
|
||||
if (activity.boardId && username === 'board_members') {
|
||||
// mentions all board members
|
||||
const knownUids = knownUsers.map(u => u.userId);
|
||||
watchers = _.union(watchers, [...knownUids]);
|
||||
title = 'act-atUserComment';
|
||||
} else if (activity.cardId && username === 'card_members') {
|
||||
// mentions all card members if assigned
|
||||
const card = activity.card();
|
||||
watchers = _.union(watchers, [...card.members]);
|
||||
title = 'act-atUserComment';
|
||||
} else {
|
||||
const atUser = _.findWhere(knownUsers, { username });
|
||||
if (!atUser) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const uid = atUser.userId;
|
||||
params.atUsername = username;
|
||||
params.atEmails = atUser.emails;
|
||||
title = 'act-atUserComment';
|
||||
watchers = _.union(watchers, [uid]);
|
||||
}
|
||||
const uid = atUser.userId;
|
||||
params.atUsername = username;
|
||||
params.atEmails = atUser.emails;
|
||||
title = 'act-atUserComment';
|
||||
watchers = _.union(watchers, [uid]);
|
||||
|
||||
}
|
||||
}
|
||||
params.commentId = comment._id;
|
||||
|
|
|
@ -375,6 +375,14 @@ Boards.attachSchema(
|
|||
defaultValue: true,
|
||||
},
|
||||
|
||||
allowsCardNumber: {
|
||||
/**
|
||||
* Does the board allows card numbers?
|
||||
*/
|
||||
type: Boolean,
|
||||
defaultValue: false,
|
||||
},
|
||||
|
||||
allowsActivities: {
|
||||
/**
|
||||
* Does the board allows comments?
|
||||
|
@ -1056,6 +1064,26 @@ Boards.helpers({
|
|||
return result;
|
||||
},
|
||||
|
||||
getNextCardNumber() {
|
||||
const boardCards = Cards.find(
|
||||
{
|
||||
boardId: this._id
|
||||
},
|
||||
{
|
||||
sort: { cardNumber: -1 },
|
||||
limit: 1
|
||||
}
|
||||
).fetch();
|
||||
|
||||
// If no card is assigned to the board, return 1
|
||||
if (!boardCards || boardCards.length === 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
const maxCardNr = !!boardCards[0].cardNumber ? boardCards[0].cardNumber : 0;
|
||||
return maxCardNr + 1;
|
||||
},
|
||||
|
||||
cardsDueInBetween(start, end) {
|
||||
return Cards.find({
|
||||
boardId: this._id,
|
||||
|
@ -1285,6 +1313,10 @@ Boards.mutations({
|
|||
return { $set: { allowsDescriptionTitle } };
|
||||
},
|
||||
|
||||
setAllowsCardNumber(allowsCardNumber) {
|
||||
return { $set: { allowsCardNumber } };
|
||||
},
|
||||
|
||||
setAllowsDescriptionText(allowsDescriptionText) {
|
||||
return { $set: { allowsDescriptionText } };
|
||||
},
|
||||
|
|
|
@ -470,6 +470,16 @@ Cards.attachSchema(
|
|||
optional: true,
|
||||
defaultValue: [],
|
||||
},
|
||||
cardNumber: {
|
||||
/**
|
||||
* A boardwise sequentially increasing number that is assigned
|
||||
* to every newly created card
|
||||
*/
|
||||
type: Number,
|
||||
decimal: true,
|
||||
optional: true,
|
||||
defaultValue: 0,
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
|
@ -567,6 +577,7 @@ Cards.helpers({
|
|||
|
||||
delete this._id;
|
||||
this.boardId = boardId;
|
||||
this.cardNumber = Boards.findOne(boardId).getNextCardNumber();
|
||||
this.swimlaneId = swimlaneId;
|
||||
this.listId = listId;
|
||||
const _id = Cards.insert(this);
|
||||
|
@ -1647,6 +1658,10 @@ Cards.helpers({
|
|||
}
|
||||
},
|
||||
|
||||
getCardNumber() {
|
||||
return this.cardNumber;
|
||||
},
|
||||
|
||||
getBoardTitle() {
|
||||
if (this.isLinkedCard()) {
|
||||
const card = Cards.findOne({ _id: this.linkedId });
|
||||
|
@ -1975,8 +1990,12 @@ Cards.mutations({
|
|||
'_id',
|
||||
);
|
||||
|
||||
// assign the new card number from the target board
|
||||
const newCardNumber = newBoard.getNextCardNumber();
|
||||
|
||||
Object.assign(mutatedFields, {
|
||||
labelIds: newCardLabelIds,
|
||||
cardNumber: newCardNumber
|
||||
});
|
||||
|
||||
mutatedFields.customFields = this.mapCustomFieldsToBoard(newBoard._id);
|
||||
|
@ -3207,6 +3226,8 @@ if (Meteor.isServer) {
|
|||
Authentication.checkAdminOrCondition(req.userId, addPermission);
|
||||
const paramListId = req.params.listId;
|
||||
const paramParentId = req.params.parentId;
|
||||
|
||||
const nextCardNumber = board.getNextCardNumber();
|
||||
const currentCards = Cards.find(
|
||||
{
|
||||
listId: paramListId,
|
||||
|
@ -3229,6 +3250,7 @@ if (Meteor.isServer) {
|
|||
userId: req.body.authorId,
|
||||
swimlaneId: req.body.swimlaneId,
|
||||
sort: currentCards.count(),
|
||||
cardNumber: nextCardNumber,
|
||||
members,
|
||||
assignees,
|
||||
});
|
||||
|
|
6774
package-lock.json
generated
6774
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "wekan",
|
||||
"version": "v5.41.0",
|
||||
"version": "v5.47.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"repository": {
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Wekan REST API v5.41</title>
|
||||
<title>Wekan REST API v5.47</title>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
@ -1555,7 +1555,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
|||
<ul class="toc-list-h1">
|
||||
|
||||
<li>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.41">Wekan REST API v5.41</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.47">Wekan REST API v5.47</a>
|
||||
|
||||
</li>
|
||||
|
||||
|
@ -2128,7 +2128,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
|
|||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="wekan-rest-api">Wekan REST API v5.41</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v5.47</h1>
|
||||
<blockquote>
|
||||
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
|
||||
</blockquote>
|
||||
|
@ -3554,6 +3554,7 @@ System.out.println(response.toString());
|
|||
<span class="hljs-attr">"allowsComments"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsDescriptionTitle"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsDescriptionText"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsCardNumber"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsActivities"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsLabels"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsCreator"</span>: <span class="hljs-literal">true</span>,
|
||||
|
@ -9138,7 +9139,8 @@ System.out.println(response.toString());
|
|||
],
|
||||
<span class="hljs-attr">"linkId_gantt"</span>: [
|
||||
<span class="hljs-string">"string"</span>
|
||||
]
|
||||
],
|
||||
<span class="hljs-attr">"cardNumber"</span>: <span class="hljs-number">0</span>
|
||||
}
|
||||
</code></pre>
|
||||
<h3 id="get_card-responses">Responses</h3>
|
||||
|
@ -18346,6 +18348,7 @@ UserSecurity
|
|||
<span class="hljs-attr">"allowsComments"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsDescriptionTitle"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsDescriptionText"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsCardNumber"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsActivities"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsLabels"</span>: <span class="hljs-literal">true</span>,
|
||||
<span class="hljs-attr">"allowsCreator"</span>: <span class="hljs-literal">true</span>,
|
||||
|
@ -18551,6 +18554,13 @@ UserSecurity
|
|||
<td>Does the board allows description text?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>allowsCardNumber</td>
|
||||
<td>boolean</td>
|
||||
<td>true</td>
|
||||
<td>none</td>
|
||||
<td>Does the board allows card numbers?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>allowsActivities</td>
|
||||
<td>boolean</td>
|
||||
<td>true</td>
|
||||
|
@ -19302,7 +19312,8 @@ UserSecurity
|
|||
],
|
||||
<span class="hljs-attr">"linkId_gantt"</span>: [
|
||||
<span class="hljs-string">"string"</span>
|
||||
]
|
||||
],
|
||||
<span class="hljs-attr">"cardNumber"</span>: <span class="hljs-number">0</span>
|
||||
}
|
||||
|
||||
</code></pre>
|
||||
|
@ -19563,6 +19574,13 @@ UserSecurity
|
|||
<td>none</td>
|
||||
<td>ID of card which is the parent link in gantt view</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cardNumber</td>
|
||||
<td>number¦null</td>
|
||||
<td>false</td>
|
||||
<td>none</td>
|
||||
<td>A boardwise sequentially increasing number that is assigned<br />to every newly created card</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h4 id="enumerated-values-3">Enumerated Values</h4>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v5.41
|
||||
version: v5.47
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
@ -2770,6 +2770,10 @@ definitions:
|
|||
description: |
|
||||
Does the board allows description text?
|
||||
type: boolean
|
||||
allowsCardNumber:
|
||||
description: |
|
||||
Does the board allows card numbers?
|
||||
type: boolean
|
||||
allowsActivities:
|
||||
description: |
|
||||
Does the board allows comments?
|
||||
|
@ -2888,6 +2892,7 @@ definitions:
|
|||
- allowsComments
|
||||
- allowsDescriptionTitle
|
||||
- allowsDescriptionText
|
||||
- allowsCardNumber
|
||||
- allowsActivities
|
||||
- allowsLabels
|
||||
- allowsCreator
|
||||
|
@ -3268,6 +3273,12 @@ definitions:
|
|||
type: string
|
||||
x-nullable: true
|
||||
x-nullable: true
|
||||
cardNumber:
|
||||
description: |
|
||||
A boardwise sequentially increasing number that is assigned
|
||||
to every newly created card
|
||||
type: number
|
||||
x-nullable: true
|
||||
required:
|
||||
- archived
|
||||
- swimlaneId
|
||||
|
|
|
@ -18,8 +18,8 @@ REM Install chocolatey
|
|||
|
||||
choco install -y git curl python2 dotnet4.5.2 nano mongodb-3 mongoclient meteor
|
||||
|
||||
curl -O https://nodejs.org/dist/v12.22.3/node-v12.22.3-x64.msi
|
||||
call node-v12.22.3-x64.msi
|
||||
curl -O https://nodejs.org/dist/v12.22.4/node-v12.22.4-x64.msi
|
||||
call node-v12.22.4-x64.msi
|
||||
|
||||
call npm config -g set msvs_version 2015
|
||||
call meteor npm config -g set msvs_version 2015
|
||||
|
|
|
@ -28,7 +28,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.22.3
|
||||
sudo n 12.22.4
|
||||
#curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
|
||||
#sudo apt-get install -y nodejs
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
|
|
|
@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
|||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 541,
|
||||
appVersion = 547,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "5.41.0~2021-07-26"),
|
||||
appMarketingVersion = (defaultText = "5.47.0~2021-08-05"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
|
|
@ -1061,3 +1061,42 @@ Migrations.add('add-hide-logo-by-default', () => {
|
|||
noValidateMulti,
|
||||
);
|
||||
});
|
||||
|
||||
Migrations.add('add-card-number-allowed', () => {
|
||||
Boards.update(
|
||||
{
|
||||
allowsCardNumber: {
|
||||
$exists: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
$set: {
|
||||
allowsCardNumber: false,
|
||||
},
|
||||
},
|
||||
noValidateMulti,
|
||||
);
|
||||
});
|
||||
|
||||
Migrations.add('assign-boardwise-card-numbers', () => {
|
||||
Boards.find().forEach(board => {
|
||||
let nextCardNumber = board.getNextCardNumber();
|
||||
Cards.find(
|
||||
{
|
||||
boardId: board._id,
|
||||
cardNumber: {
|
||||
$exists: false
|
||||
}
|
||||
},
|
||||
{
|
||||
sort: { createdAt: 1 }
|
||||
}
|
||||
).forEach(card => {
|
||||
Cards.update(
|
||||
card._id,
|
||||
{ $set: { cardNumber: nextCardNumber } },
|
||||
noValidate);
|
||||
nextCardNumber++;
|
||||
});
|
||||
})
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name: wekan
|
||||
version: '5.41'
|
||||
version: '5.47'
|
||||
summary: The open-source kanban
|
||||
description: |
|
||||
Wekan is an open-source and collaborative kanban board application.
|
||||
|
@ -80,7 +80,7 @@ parts:
|
|||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 12.22.3
|
||||
node-engine: 12.22.4
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
set -euxo pipefail
|
||||
|
||||
BUILD_DEPS="bsdtar gnupg wget curl bzip2 python git ca-certificates perl-Digest-SHA"
|
||||
NODE_VERSION=v12.22.3
|
||||
NODE_VERSION=v12.22.4
|
||||
#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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue