Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e142dfdcf | ||
|
|
2a216d41f0 | ||
|
|
241eb9df0f | ||
|
|
0bdd7c8973 | ||
|
|
a59932af00 | ||
|
|
c2a073dec0 | ||
|
|
7808fdd22f | ||
|
|
bf2f3ccec1 | ||
|
|
9c7c481f48 | ||
|
|
df26bc9013 | ||
|
|
b36a7621e0 | ||
|
|
f2c242f49e | ||
|
|
5175f13881 | ||
|
|
75a1854cc3 | ||
|
|
48c3263e28 | ||
|
|
f5e26fb2e6 | ||
|
|
1fadf204c2 | ||
|
|
f03b14a46b | ||
|
|
ab8e56e16a | ||
|
|
2f33a1ecff | ||
|
|
abadeb5e14 | ||
|
|
19c68895e9 | ||
|
|
bed6d6c591 | ||
|
|
b2652edf56 | ||
|
|
94bb3bee77 | ||
|
|
e909ece2da | ||
|
|
7bc250ce84 | ||
|
|
7706839fbe | ||
|
|
68ad58431d | ||
|
|
2059752fc6 | ||
|
|
302afae0bb | ||
|
|
3d1d94d628 | ||
|
|
d51fc2f12c | ||
|
|
2dee14b0d5 | ||
|
|
e75849da98 | ||
|
|
508c7b7a90 | ||
|
|
de67e051d7 | ||
|
|
9ce65c601a | ||
|
|
10d7eeb762 | ||
|
|
104a6dd0b3 | ||
|
|
2977120129 | ||
|
|
d8e8512d66 | ||
|
|
7bfbcf7e03 | ||
|
|
91cad7b49e | ||
|
|
26f1defc56 | ||
|
|
9a03654062 | ||
|
|
2576ef75bd | ||
|
|
752b45af42 | ||
|
|
23c70ac252 | ||
|
|
ad4de9e85d | ||
|
|
855d60f28e | ||
|
|
781a94c05f | ||
|
|
b3cc01b041 | ||
|
|
e23ced47ae | ||
|
|
f406b51a5f | ||
|
|
c81cb786ed | ||
|
|
846f1244c7 | ||
|
|
3ea723329a | ||
|
|
698c9ed1ea | ||
|
|
63044ac13a | ||
|
|
68d9de8946 | ||
|
|
92a7717e50 | ||
|
|
d5c0a5d377 | ||
|
|
c0b7fb0b84 | ||
|
|
9b4e556837 | ||
|
|
1aec0b5f0d | ||
|
|
c5d4e06ea3 | ||
|
|
97bf907448 | ||
|
|
7ef2a2a9f4 | ||
|
|
547d82fe57 |
No files matched your search
@@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v12.22.4 \
|
||||
NODE_VERSION=v12.22.5 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
"Activities": true,
|
||||
"Attachments": true,
|
||||
"Boards": true,
|
||||
"CardCommentReactions": true,
|
||||
"CardComments": true,
|
||||
"DatePicker": true,
|
||||
"Cards": true,
|
||||
|
||||
@@ -81,7 +81,7 @@ parts:
|
||||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 12.22.4
|
||||
node-engine: 12.22.5
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
||||
@@ -83,7 +83,7 @@ parts:
|
||||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 12.22.4
|
||||
node-engine: 12.22.5
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ sudo: required
|
||||
|
||||
env:
|
||||
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
|
||||
TRAVIS_NODE_VERSION: 12.22.4
|
||||
TRAVIS_NODE_VERSION: 12.22.5
|
||||
TRAVIS_NPM_VERSION: latest
|
||||
|
||||
before_install:
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ host = https://www.transifex.com
|
||||
# tap:i18n requires us to use `-` separator in the language identifiers whereas
|
||||
# Transifex uses a `_` separator, without an option to customize it on one side
|
||||
# or the other, so we need to do a Manual mapping.
|
||||
lang_map = ar_EG:ar-EG, bg_BG:bg, de_CH:de-CH, en_IT:en-IT, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, hu_HU:hu, id_ID:id, mn_MN:mn, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_HK:zh-HK
|
||||
lang_map = ar_EG:ar-EG, bg_BG:bg, de_CH:de-CH, en_IT:en-IT, en_GB:en-GB, es_AR:es-AR, es_CL:es-CL, es_419:es-LA, es_PE:es-PE, es_MX:es-MX, es_TX:es-TX, es_PY:es-PY, el_GR:el, fa_IR:fa-IR, fi_FI:fi, fr_CH:fr-CH, hu_HU:hu, id_ID:id, mn_MN:mn, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, sl_SI:sl, zh_CN:zh-CN, zh_TW:zh-TW, zh_Hans:zh-Hans, zh_HK:zh-HK
|
||||
|
||||
[wekan.application]
|
||||
file_filter = i18n/<lang>.i18n.json
|
||||
|
||||
+125
@@ -3,6 +3,131 @@
|
||||
Note: With Docker, please don't use latest tag. Only use release tags.
|
||||
See https://github.com/wekan/wekan/issues/3874
|
||||
|
||||
# v5.52 2021-08-26 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- Added MAIL_SERVICE settings for Well Known Email Services
|
||||
[Part 1](https://github.com/wekan/wekan/commit/ab8e56e16a02ef0afb7b4023a43b4adf2558a8ff),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/1fadf204c2d5fa96ea41b9cb39f003cc05e2fe46).
|
||||
https://github.com/wekan/wekan/wiki/Troubleshooting-Mail . Please test.
|
||||
Thanks to xet7.
|
||||
- [All Boards page: Possibility of filtering board by team or organization](https://github.com/wekan/wekan/pull/3964).
|
||||
Thanks to Emile840.
|
||||
- [Fixed translation of "Clear Filter" for "All boards page: Possibility of filtering board by team or organization"](https://github.com/wekan/wekan/commit/b36a7621e0feca5c22fc4a24eceba1a9fc584ab0).
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following new translations:
|
||||
|
||||
- [Added Chinese (Simplified) (zh-Hans or zh-CN)](https://github.com/wekan/wekan/commit/f2c242f49e18e2197f1f90c9b2dac5934a08325d).
|
||||
Thanks to translators.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Initials not required for new user that is created at Admin Panel](https://github.com/wekan/wekan/commit/9c7c481f48cb66406715f7571439f9d7fa332b87).
|
||||
Thanks to xet7.
|
||||
- [Delete user is now possible at Admin Panel](https://github.com/wekan/wekan/commit/7808fdd22f04cc482b7df21187aaf3e9623f19e6).
|
||||
But you should remove user first from all boards, because otherwise there could be
|
||||
bug of empty avatars at boards, that need to be removed manually from database.
|
||||
Thanks to xet7.
|
||||
- [Fixed Save button not clickable in maximized card view](https://github.com/wekan/wekan/commit/a59932af00c066871102970d252b78d262d06fa0).
|
||||
Thanks to hatl, urmel1960 and syndimann.
|
||||
- [Fixed New wide card edit view is all jumbled on mobile](https://github.com/wekan/wekan/commit/241eb9df0fb446b3775704848281b0cc032c4921).
|
||||
Thanks to jdaviescoates and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.51 2021-08-17 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fixed exception in global search](https://github.com/wekan/wekan/pull/3949).
|
||||
Thanks to syndimann.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.50 2021-08-15 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix: Save user initials and fullname when a new user is created](https://github.com/wekan/wekan/pull/3946).
|
||||
Thanks to syndimann.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.49 2021-08-14 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Text "Search" now translatable at Card Add Member/Assignee](https://github.com/wekan/wekan/commit/9ce65c601a875a4259fb69fdda45124b8412ae6f).
|
||||
Thanks to xet7.
|
||||
- [Add Card Comment Reactions](https://github.com/wekan/wekan/pull/3945).
|
||||
Thanks to syndimann.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.48 2021-08-11 Wekan release
|
||||
|
||||
This release adds the following CRITICAL SECURITY UPDATES:
|
||||
|
||||
- [Updated to Node.js v12.22.5](https://github.com/wekan/wekan/commit/91cad7b49e25cecdf417321dadcdd9ea5cd8b020).
|
||||
Thanks to Node.js developers.
|
||||
- Also jszip update in some of included update commits.
|
||||
|
||||
and adds the following new features:
|
||||
|
||||
- [Searchfields for members and assignees card popups](https://github.com/wekan/wekan/pull/3942).
|
||||
Thanks to syndimann.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/commit/b3cc01b04167bd67dde02c6c899baf8917ae09c1).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
and adds the following new translations:
|
||||
|
||||
- [French (Switzerland) (fr_CH)](https://github.com/wekan/wekan/commit/23c70ac252494b464cd2a268d7e680370775ddc4).
|
||||
Thanks to translators.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed: Can't save user without Initials](https://github.com/wekan/wekan/commit/9a03654062f9c8ac7aac257f11b386a054cd39e7).
|
||||
Thanks to devagleo and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# 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:
|
||||
|
||||
+6
-1
@@ -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.4 \
|
||||
NODE_VERSION=v12.22.5 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
@@ -21,6 +21,11 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
|
||||
ARCHITECTURE=linux-x64 \
|
||||
SRC_PATH=./ \
|
||||
WITH_API=true \
|
||||
MAIL_URL="" \
|
||||
MAIL_FROM="" \
|
||||
MAIL_SERVICE="" \
|
||||
MAIL_SERVICE_USER="" \
|
||||
MAIL_SERVICE_PASSWORD="" \
|
||||
RESULTS_PER_PAGE="" \
|
||||
ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
|
||||
ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
|
||||
|
||||
+2
-2
@@ -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.4 \
|
||||
NODE_VERSION=v12.22.5 \
|
||||
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.4 \
|
||||
NODE_VERSION=v12.22.5 \
|
||||
NODE_ENV=production \
|
||||
NPM_VERSION=latest \
|
||||
WITH_API=true \
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v5.44.0"
|
||||
appVersion: "v5.52.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -21,6 +21,22 @@ template(name="editOrDeleteComment")
|
||||
= ' - '
|
||||
a.js-delete-comment {{_ "delete"}}
|
||||
|
||||
template(name="commentReactions")
|
||||
.reactions
|
||||
each reaction in reactions
|
||||
span.reaction(class="{{#if isSelected reaction.userIds}}selected{{/if}}" data-codepoint="#{reaction.reactionCodepoint}" title="{{userNames reaction.userIds}}")
|
||||
span.reaction-codepoint !{reaction.reactionCodepoint}
|
||||
span.reaction-count #{reaction.userIds.length}
|
||||
if (currentUser.isBoardMember)
|
||||
a.open-comment-reaction-popup(title="{{_ 'addReactionPopup-title'}}")
|
||||
i.fa.fa-smile-o
|
||||
i.fa.fa-plus
|
||||
|
||||
template(name="addReactionPopup")
|
||||
.reactions-popup
|
||||
each codepoint in codepoints
|
||||
span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint}
|
||||
|
||||
template(name="activity")
|
||||
.activity
|
||||
+userAvatar(userId=activity.user._id)
|
||||
@@ -124,6 +140,7 @@ template(name="activity")
|
||||
.activity-comment
|
||||
+viewer
|
||||
= activity.comment.text
|
||||
+commentReactions(reactions=activity.comment.reactions commentId=activity.comment._id)
|
||||
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
|
||||
if($eq currentUser._id activity.comment.userId)
|
||||
+editOrDeleteComment
|
||||
@@ -150,20 +167,20 @@ template(name="activity")
|
||||
|
||||
if($eq activity.activityType 'a-startAt')
|
||||
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
|
||||
|
||||
|
||||
if($eq activity.activityType 'a-dueAt')
|
||||
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
|
||||
|
||||
if($eq activity.activityType 'a-endAt')
|
||||
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
|
||||
|
||||
|
||||
if($eq mode 'board')
|
||||
if($eq activity.activityType 'a-receivedAt')
|
||||
| {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}.
|
||||
|
||||
if($eq activity.activityType 'a-startAt')
|
||||
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
|
||||
|
||||
|
||||
if($eq activity.activityType 'a-dueAt')
|
||||
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
|
||||
|
||||
|
||||
@@ -240,6 +240,60 @@ Template.activity.helpers({
|
||||
},
|
||||
});
|
||||
|
||||
Template.commentReactions.events({
|
||||
'click .reaction'(event) {
|
||||
if (Meteor.user().isBoardMember()) {
|
||||
const codepoint = event.currentTarget.dataset['codepoint'];
|
||||
const commentId = Template.instance().data.commentId;
|
||||
const cardComment = CardComments.findOne({_id: commentId});
|
||||
cardComment.toggleReaction(codepoint);
|
||||
}
|
||||
},
|
||||
'click .open-comment-reaction-popup': Popup.open('addReaction'),
|
||||
})
|
||||
|
||||
Template.addReactionPopup.events({
|
||||
'click .add-comment-reaction'(event) {
|
||||
if (Meteor.user().isBoardMember()) {
|
||||
const codepoint = event.currentTarget.dataset['codepoint'];
|
||||
const commentId = Template.instance().data.commentId;
|
||||
const cardComment = CardComments.findOne({_id: commentId});
|
||||
cardComment.toggleReaction(codepoint);
|
||||
}
|
||||
Popup.close();
|
||||
},
|
||||
})
|
||||
|
||||
Template.addReactionPopup.helpers({
|
||||
codepoints() {
|
||||
// Starting set of unicode codepoints as comment reactions
|
||||
return [
|
||||
'👍',
|
||||
'👎',
|
||||
'👀',
|
||||
'✅',
|
||||
'❌',
|
||||
'🙏',
|
||||
'👏',
|
||||
'🎉',
|
||||
'🚀',
|
||||
'😊',
|
||||
'🤔',
|
||||
'😔'];
|
||||
}
|
||||
})
|
||||
|
||||
Template.commentReactions.helpers({
|
||||
isSelected(userIds) {
|
||||
return userIds.includes(Meteor.user()._id);
|
||||
},
|
||||
userNames(userIds) {
|
||||
return Users.find({_id: {$in: userIds}})
|
||||
.map(user => user.profile.fullname)
|
||||
.join(', ');
|
||||
}
|
||||
})
|
||||
|
||||
function createCardLink(card) {
|
||||
if (!card) return '';
|
||||
return (
|
||||
|
||||
@@ -5,6 +5,20 @@
|
||||
display: flex
|
||||
justify-content:space-between
|
||||
|
||||
.reactions-popup
|
||||
.add-comment-reaction
|
||||
display: inline-block
|
||||
cursor: pointer
|
||||
border-radius: 5px
|
||||
font-size: 22px
|
||||
text-align: center
|
||||
line-height: 30px
|
||||
width: 40px
|
||||
|
||||
&:hover {
|
||||
background-color: #b0c4de
|
||||
}
|
||||
|
||||
.activities
|
||||
clear: both
|
||||
|
||||
@@ -18,7 +32,7 @@
|
||||
height: @width
|
||||
|
||||
.activity-member
|
||||
font-weight: 700
|
||||
font-weight: 700
|
||||
|
||||
.activity-desc
|
||||
word-wrap: break-word
|
||||
@@ -39,6 +53,45 @@
|
||||
margin-top: 5px
|
||||
padding: 5px
|
||||
|
||||
.reactions
|
||||
display: flex
|
||||
margin-top: 5px
|
||||
gap: 5px
|
||||
|
||||
.open-comment-reaction-popup
|
||||
display: flex
|
||||
align-items: center
|
||||
text-decoration: none
|
||||
height: 24px;
|
||||
|
||||
i.fa.fa-smile-o
|
||||
font-size: 17px
|
||||
font-weight: 500
|
||||
margin-left: 2px
|
||||
|
||||
i.fa.fa-plus
|
||||
font-size: 8px;
|
||||
margin-top: -7px;
|
||||
margin-left: 1px;
|
||||
|
||||
.reaction
|
||||
cursor: pointer
|
||||
border: 1px solid grey
|
||||
border-radius: 15px
|
||||
display: flex
|
||||
padding: 2px 5px
|
||||
|
||||
&.selected {
|
||||
background-color: #b0c4de
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: #b0c4de
|
||||
}
|
||||
|
||||
.reaction-count
|
||||
font-size: 12px
|
||||
|
||||
.activity-checklist
|
||||
display: block
|
||||
border-radius: 3px
|
||||
|
||||
@@ -1,11 +1,32 @@
|
||||
template(name="boardList")
|
||||
.wrapper
|
||||
ul.AllBoardTeamsOrgs
|
||||
li.AllBoardTeams
|
||||
if userHasTeams
|
||||
select.js-AllBoardTeams#jsAllBoardTeams("multiple")
|
||||
option(value="-1") {{_ 'teams'}} :
|
||||
each teamsDatas
|
||||
option(value="{{teamId}}") {{_ teamDisplayName}}
|
||||
|
||||
li.AllBoardOrgs
|
||||
if userHasOrgs
|
||||
select.js-AllBoardOrgs#jsAllBoardOrgs("multiple")
|
||||
option(value="-1") {{_ 'organizations'}} :
|
||||
each orgsDatas
|
||||
option(value="{{orgId}}") {{_ orgDisplayName}}
|
||||
li.AllBoardBtns
|
||||
div.AllBoardButtonsContainer
|
||||
if userHasOrgsOrTeams
|
||||
i.fa.fa-filter
|
||||
input#filterBtn(type="button" value="{{_ 'filter'}}")
|
||||
input#resetBtn(type="button" value="{{_ 'filter-clear'}}")
|
||||
|
||||
ul.board-list.clearfix.js-boards
|
||||
li.js-add-board
|
||||
a.board-list-item.label(title="{{_ 'add-board'}}")
|
||||
| {{_ 'add-board'}}
|
||||
each boards
|
||||
li(class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
|
||||
li(class="{{_id}}" class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
|
||||
if isInvited
|
||||
.board-list-item
|
||||
span.details
|
||||
|
||||
@@ -84,7 +84,61 @@ BlazeComponent.extendComponent({
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
userHasTeams(){
|
||||
if(Meteor.user().teams)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
},
|
||||
teamsDatas() {
|
||||
if(Meteor.user().teams)
|
||||
{
|
||||
return Meteor.user().teams;
|
||||
}
|
||||
else{
|
||||
return [];
|
||||
}
|
||||
},
|
||||
userHasOrgs(){
|
||||
if(Meteor.user().orgs)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
},
|
||||
orgsDatas() {
|
||||
if(Meteor.user().orgs)
|
||||
{
|
||||
return Meteor.user().orgs;
|
||||
}
|
||||
else{
|
||||
return [];
|
||||
}
|
||||
},
|
||||
userHasOrgsOrTeams(){
|
||||
let boolUserHasOrgs;
|
||||
if(Meteor.user().orgs)
|
||||
{
|
||||
boolUserHasOrgs = true;
|
||||
}
|
||||
else{
|
||||
boolUserHasOrgs = false;
|
||||
}
|
||||
let boolUserHasTeams;
|
||||
if(Meteor.user().teams)
|
||||
{
|
||||
boolUserHasTeams = true;
|
||||
}
|
||||
else{
|
||||
boolUserHasTeams = false;
|
||||
}
|
||||
return (boolUserHasOrgs || boolUserHasTeams);
|
||||
},
|
||||
boards() {
|
||||
const query = {
|
||||
//archived: false,
|
||||
@@ -132,7 +186,7 @@ BlazeComponent.extendComponent({
|
||||
else query.permission = 'public';
|
||||
|
||||
return Boards.find(query, {
|
||||
//sort: { sort: 1 /* boards default sorting */ },
|
||||
sort: { sort: 1 /* boards default sorting */ },
|
||||
});
|
||||
},
|
||||
isStarred() {
|
||||
@@ -206,6 +260,74 @@ BlazeComponent.extendComponent({
|
||||
}
|
||||
});
|
||||
},
|
||||
'click #resetBtn'(event){
|
||||
let allBoards = document.getElementsByClassName("js-board");
|
||||
let currBoard;
|
||||
for(let i=0; i < allBoards.length; i++){
|
||||
currBoard = allBoards[i];
|
||||
currBoard.style.display = "block";
|
||||
}
|
||||
},
|
||||
'click #filterBtn'(event) {
|
||||
event.preventDefault();
|
||||
let selectedTeams = document.querySelectorAll('#jsAllBoardTeams option:checked');
|
||||
let selectedTeamsValues = Array.from(selectedTeams).map(function(elt){return elt.value});
|
||||
let index = selectedTeamsValues.indexOf("-1");
|
||||
if (index > -1) {
|
||||
selectedTeamsValues.splice(index, 1);
|
||||
}
|
||||
|
||||
let selectedOrgs = document.querySelectorAll('#jsAllBoardOrgs option:checked');
|
||||
let selectedOrgsValues = Array.from(selectedOrgs).map(function(elt){return elt.value});
|
||||
index = selectedOrgsValues.indexOf("-1");
|
||||
if (index > -1) {
|
||||
selectedOrgsValues.splice(index, 1);
|
||||
}
|
||||
|
||||
if(selectedTeamsValues.length > 0 || selectedOrgsValues.length > 0){
|
||||
const query = {
|
||||
$and: [
|
||||
{ archived: false },
|
||||
{ type: 'board' },
|
||||
{ $or:[] }
|
||||
]
|
||||
};
|
||||
if(selectedTeamsValues.length > 0)
|
||||
{
|
||||
query.$and[2].$or.push({'teams.teamId': {$in : selectedTeamsValues}});
|
||||
}
|
||||
if(selectedOrgsValues.length > 0)
|
||||
{
|
||||
query.$and[2].$or.push({'orgs.orgId': {$in : selectedOrgsValues}});
|
||||
}
|
||||
|
||||
let filteredBoards = Boards.find(query, {}).fetch();
|
||||
let allBoards = document.getElementsByClassName("js-board");
|
||||
let currBoard;
|
||||
if(filteredBoards.length > 0){
|
||||
let currBoardId;
|
||||
let found;
|
||||
for(let i=0; i < allBoards.length; i++){
|
||||
currBoard = allBoards[i];
|
||||
currBoardId = currBoard.classList[0];
|
||||
found = filteredBoards.find(function(board){
|
||||
return board._id == currBoardId;
|
||||
});
|
||||
|
||||
if(found !== undefined)
|
||||
currBoard.style.display = "block";
|
||||
else
|
||||
currBoard.style.display = "none";
|
||||
}
|
||||
}
|
||||
else{
|
||||
for(let i=0; i < allBoards.length; i++){
|
||||
currBoard = allBoards[i];
|
||||
currBoard.style.display = "none";
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
|
||||
@@ -229,3 +229,25 @@ $spaceBetweenTiles = 16px
|
||||
transform: translateY(-50%)
|
||||
right: 10px
|
||||
font-size: 24px
|
||||
|
||||
.AllBoardTeamsOrgs
|
||||
list-style-type: none;
|
||||
overflow: hidden;
|
||||
|
||||
.AllBoardTeams,.AllBoardOrgs,.AllBoardBtns
|
||||
float: left;
|
||||
|
||||
.js-AllBoardOrgs
|
||||
margin-left: 16px;
|
||||
|
||||
.AllBoardTeams
|
||||
margin-left : 16px;
|
||||
|
||||
.AllBoardButtonsContainer
|
||||
margin: 16px;
|
||||
|
||||
#filterBtn,#resetBtn
|
||||
display: inline;
|
||||
|
||||
.js-board
|
||||
display: block;
|
||||
@@ -708,8 +708,9 @@ template(name="boardsAndLists")
|
||||
button.primary.confirm.js-done {{_ 'done'}}
|
||||
|
||||
template(name="cardMembersPopup")
|
||||
input.card-members-filter(type="text" placeholder="{{_ 'search'}}")
|
||||
ul.pop-over-list.js-card-member-list
|
||||
each board.activeMembers
|
||||
each members
|
||||
li.item(class="{{#if isCardMember}}active{{/if}}")
|
||||
a.name.js-select-member(href="#")
|
||||
+userAvatar(userId=user._id)
|
||||
@@ -720,9 +721,10 @@ template(name="cardMembersPopup")
|
||||
i.fa.fa-check
|
||||
|
||||
template(name="cardAssigneesPopup")
|
||||
input.card-assignees-filter(type="text" placeholder="{{_ 'search'}}")
|
||||
unless currentUser.isWorker
|
||||
ul.pop-over-list.js-card-assignee-list
|
||||
each board.activeMembers
|
||||
each members
|
||||
li.item(class="{{#if isCardAssignee}}active{{/if}}")
|
||||
a.name.js-select-assignee(href="#")
|
||||
+userAvatar(userId=user._id)
|
||||
|
||||
@@ -180,7 +180,7 @@ BlazeComponent.extendComponent({
|
||||
integration,
|
||||
'CardSelected',
|
||||
params,
|
||||
() => {},
|
||||
() => { },
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -541,8 +541,8 @@ BlazeComponent.extendComponent({
|
||||
}).register('exportCardPopup');
|
||||
|
||||
// only allow number input
|
||||
Template.editCardSortOrderForm.onRendered(function() {
|
||||
this.$('input').on("keypress paste", function(event) {
|
||||
Template.editCardSortOrderForm.onRendered(function () {
|
||||
this.$('input').on("keypress paste", function (event) {
|
||||
let keyCode = event.keyCode;
|
||||
let charCode = String.fromCharCode(keyCode);
|
||||
let regex = new RegExp('[-0-9.]');
|
||||
@@ -667,6 +667,40 @@ Template.editCardTitleForm.onRendered(function () {
|
||||
autosize(this.$('.js-edit-card-title'));
|
||||
});
|
||||
|
||||
Template.cardMembersPopup.onCreated(function () {
|
||||
const members = Boards.findOne(Session.get('currentBoard')).activeMembers();
|
||||
this.members = new ReactiveVar(members);
|
||||
});
|
||||
|
||||
Template.cardMembersPopup.events({
|
||||
'keyup .card-members-filter'(event) {
|
||||
const members = filterMembers(event.target.value);
|
||||
Template.instance().members.set(members);
|
||||
}
|
||||
});
|
||||
|
||||
Template.cardMembersPopup.helpers({
|
||||
members() {
|
||||
return Template.instance().members.get();
|
||||
},
|
||||
});
|
||||
|
||||
const filterMembers = (filterTerm) => {
|
||||
let members = Boards.findOne(Session.get('currentBoard')).activeMembers();
|
||||
|
||||
if (filterTerm) {
|
||||
members = members
|
||||
.map(member => ({
|
||||
member,
|
||||
user: Users.findOne(member.userId)
|
||||
}))
|
||||
.filter(({ user }) =>
|
||||
user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|
||||
.map(({ member }) => member);
|
||||
}
|
||||
return members;
|
||||
}
|
||||
|
||||
Template.editCardTitleForm.events({
|
||||
'keydown .js-edit-card-title'(event) {
|
||||
// If enter key was pressed, submit the data
|
||||
@@ -1019,9 +1053,8 @@ BlazeComponent.extendComponent({
|
||||
// https://github.com/wekan/wekan/issues/2785
|
||||
const message = `${TAPi18n.__(
|
||||
'delete-linked-card-before-this-card',
|
||||
)} linkedId: ${
|
||||
this._id
|
||||
} at client/components/cards/cardDetails.js and https://github.com/wekan/wekan/issues/2785`;
|
||||
)} linkedId: ${this._id
|
||||
} at client/components/cards/cardDetails.js and https://github.com/wekan/wekan/issues/2785`;
|
||||
alert(message);
|
||||
}
|
||||
Utils.goBoardId(this.boardId);
|
||||
@@ -1589,6 +1622,11 @@ EscapeActions.register(
|
||||
},
|
||||
);
|
||||
|
||||
Template.cardAssigneesPopup.onCreated(function () {
|
||||
const members = Boards.findOne(Session.get('currentBoard')).activeMembers();
|
||||
this.members = new ReactiveVar(members);
|
||||
});
|
||||
|
||||
Template.cardAssigneesPopup.events({
|
||||
'click .js-select-assignee'(event) {
|
||||
const card = Cards.findOne(Session.get('currentCard'));
|
||||
@@ -1596,6 +1634,10 @@ Template.cardAssigneesPopup.events({
|
||||
card.toggleAssignee(assigneeId);
|
||||
event.preventDefault();
|
||||
},
|
||||
'keyup .card-assignees-filter'(event) {
|
||||
const members = filterMembers(event.target.value);
|
||||
Template.instance().members.set(members);
|
||||
},
|
||||
});
|
||||
|
||||
Template.cardAssigneesPopup.helpers({
|
||||
@@ -1606,6 +1648,10 @@ Template.cardAssigneesPopup.helpers({
|
||||
return _.contains(cardAssignees, this.userId);
|
||||
},
|
||||
|
||||
members() {
|
||||
return Template.instance().members.get();
|
||||
},
|
||||
|
||||
user() {
|
||||
return Users.findOne(this.userId);
|
||||
},
|
||||
|
||||
@@ -243,42 +243,42 @@ avatar-radius = 50%
|
||||
.activities
|
||||
padding-top: 10px
|
||||
|
||||
.card-details-maximized
|
||||
padding: 0
|
||||
flex-shrink: 0
|
||||
flex-basis: calc(100% - 20px)
|
||||
will-change: flex-basis
|
||||
overflow-y: scroll
|
||||
overflow-x: scroll
|
||||
background: darken(white, 3%)
|
||||
border-radius: bottom 3px
|
||||
z-index: 1000 !important
|
||||
animation: flexGrowIn 0.1s
|
||||
box-shadow: 0 0 7px 0 darken(white, 30%)
|
||||
transition: flex-basis 0.1s
|
||||
box-sizing: border-box
|
||||
position: absolute
|
||||
top: 0
|
||||
left: 0
|
||||
height: calc(100% - 20px)
|
||||
width: calc(100% - 20px)
|
||||
float: left
|
||||
|
||||
.card-details-left
|
||||
@media screen and (min-width: 801px)
|
||||
.card-details-maximized
|
||||
padding: 0
|
||||
flex-shrink: 0
|
||||
flex-basis: calc(100% - 20px)
|
||||
will-change: flex-basis
|
||||
overflow-y: scroll
|
||||
overflow-x: scroll
|
||||
background: darken(white, 3%)
|
||||
border-radius: bottom 3px
|
||||
z-index: 1000 !important
|
||||
animation: flexGrowIn 0.1s
|
||||
box-shadow: 0 0 7px 0 darken(white, 30%)
|
||||
transition: flex-basis 0.1s
|
||||
box-sizing: border-box
|
||||
position: absolute
|
||||
top: 0
|
||||
left: 0
|
||||
height: calc(100% - 20px)
|
||||
width: calc(100% - 20px)
|
||||
float: left
|
||||
top: 60px
|
||||
left: 20px
|
||||
width: 47%
|
||||
|
||||
.card-details-right
|
||||
position: absolute
|
||||
float: right
|
||||
top: 20px
|
||||
left: 50%
|
||||
.card-details-left
|
||||
float: left
|
||||
top: 60px
|
||||
left: 20px
|
||||
width: 47%
|
||||
|
||||
.card-details-header
|
||||
width: 47%
|
||||
.card-details-right
|
||||
position: absolute
|
||||
float: right
|
||||
top: 20px
|
||||
left: 50%
|
||||
|
||||
.card-details-header
|
||||
width: 47%
|
||||
|
||||
input[type="text"].attachment-add-link-input
|
||||
float: left
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -86,6 +86,8 @@ Template.userFormsLayout.helpers({
|
||||
name = 'Français (Belgique)';
|
||||
} else if (lang.name === 'fr-CA') {
|
||||
name = 'Français (Canada)';
|
||||
} else if (lang.name === 'fr-CH') {
|
||||
name = 'Français (Schweiz)';
|
||||
} else if (lang.name === 'ig') {
|
||||
name = 'Igbo';
|
||||
} else if (lang.name === 'lv') {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -342,7 +342,7 @@ template(name="editUserPopup")
|
||||
input.js-profile-fullname(type="text" value=user.profile.fullname required)
|
||||
label
|
||||
| {{_ 'initials'}}
|
||||
input.js-profile-initials(type="text" value=user.profile.initials required)
|
||||
input.js-profile-initials(type="text" value=user.profile.initials)
|
||||
label
|
||||
| {{_ 'admin'}}
|
||||
select.select-role.js-profile-isadmin
|
||||
@@ -469,7 +469,7 @@ template(name="newUserPopup")
|
||||
input.js-profile-username(type="text" value="" required)
|
||||
label
|
||||
| {{_ 'initials'}}
|
||||
input.js-profile-initials(type="text" value="" required)
|
||||
input.js-profile-initials(type="text" value="")
|
||||
label
|
||||
| {{_ 'email'}}
|
||||
span.error.hide.email-taken
|
||||
@@ -571,10 +571,14 @@ template(name="settingsUserPopup")
|
||||
a.impersonate-user
|
||||
i.fa.fa-user
|
||||
| {{_ 'impersonate-user'}}
|
||||
br
|
||||
hr
|
||||
li
|
||||
form
|
||||
label.hide.userId(type="text" value=user._id)
|
||||
label
|
||||
| {{_ 'delete-user-confirm-popup' }}
|
||||
br
|
||||
div.buttonsContainer
|
||||
input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
|
||||
// Delete is enabled, but there is still bug of leaving empty user avatars
|
||||
|
||||
@@ -839,20 +839,24 @@ Template.newUserPopup.events({
|
||||
let userTeamsIdsList = userTeamsIds.split(",");
|
||||
let userTms = [];
|
||||
for(let i = 0; i < userTeamsList.length; i++){
|
||||
userTms.push({
|
||||
"teamId": userTeamsIdsList[i],
|
||||
"teamDisplayName": userTeamsList[i],
|
||||
})
|
||||
if(!!userTeamsIdsList[i] && !!userTeamsList[i]) {
|
||||
userTms.push({
|
||||
"teamId": userTeamsIdsList[i],
|
||||
"teamDisplayName": userTeamsList[i],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
let userOrgsList = userOrgs.split(",");
|
||||
let userOrgsIdsList = userOrgsIds.split(",");
|
||||
let userOrganizations = [];
|
||||
for(let i = 0; i < userOrgsList.length; i++){
|
||||
userOrganizations.push({
|
||||
"orgId": userOrgsIdsList[i],
|
||||
"orgDisplayName": userOrgsList[i],
|
||||
})
|
||||
if(!!userOrgsIdsList[i] && !!userOrgsList[i]) {
|
||||
userOrganizations.push({
|
||||
"orgId": userOrgsIdsList[i],
|
||||
"orgDisplayName": userOrgsList[i],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Meteor.call(
|
||||
@@ -975,10 +979,13 @@ Template.settingsUserPopup.events({
|
||||
},
|
||||
'click #deleteButton'(event) {
|
||||
event.preventDefault();
|
||||
Users.remove(this.userId);
|
||||
/*
|
||||
// Delete is not enabled yet, because it does leave empty user avatars
|
||||
// to boards: boards members, card members and assignees have
|
||||
// empty users. See:
|
||||
// Delete user is enabled, but you should remove user from all boards
|
||||
// before deleting user, because there is possibility of leaving empty user avatars
|
||||
// to boards. You can remove non-existing user ids manually from database,
|
||||
// if that happens.
|
||||
//. See:
|
||||
// - wekan/client/components/settings/peopleBody.jade deleteButton
|
||||
// - wekan/client/components/settings/peopleBody.js deleteButton
|
||||
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
|
||||
@@ -986,7 +993,7 @@ Template.settingsUserPopup.events({
|
||||
// but that should be used to remove user from all boards similarly
|
||||
// - wekan/models/users.js Delete is not enabled
|
||||
//
|
||||
//Users.remove(this.userId);
|
||||
//
|
||||
*/
|
||||
Popup.close();
|
||||
},
|
||||
|
||||
@@ -180,6 +180,8 @@ Template.changeLanguagePopup.helpers({
|
||||
name = 'Français (Belgique)';
|
||||
} else if (lang.name === 'fr-CA') {
|
||||
name = 'Français (Canada)';
|
||||
} else if (lang.name === 'fr-CH') {
|
||||
name = 'Français (Schweiz)';
|
||||
} else if (lang.name === 'ig') {
|
||||
name = 'Igbo';
|
||||
} else if (lang.name === 'lv') {
|
||||
|
||||
@@ -166,6 +166,9 @@ services:
|
||||
#- MAIL_URL=smtp://user:pass@mailserver.example.com:25/
|
||||
- MAIL_URL=smtp://<mail_url>:25/?ignoreTLS=true&tls={rejectUnauthorized:false}
|
||||
- MAIL_FROM=Wekan Notifications <noreply.wekan@mydomain.com>
|
||||
#- MAIL_SERVICE=Outlook365
|
||||
#- MAIL_SERVICE_USER=firstname.lastname@hotmail.com
|
||||
#- MAIL_SERVICE_PASSWORD=SecretPassword
|
||||
#---------------------------------------------------------------
|
||||
# ==== OPTIONAL: MONGO OPLOG SETTINGS =====
|
||||
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-378343587
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
apiVersion: v2
|
||||
appVersion: "5.44"
|
||||
appVersion: "5.52"
|
||||
dependencies:
|
||||
- condition: mongodb.enabled
|
||||
name: mongodb
|
||||
|
||||
@@ -14,7 +14,7 @@ serviceAccounts:
|
||||
##
|
||||
image:
|
||||
repository: quay.io/wekan/wekan
|
||||
tag: v5.44
|
||||
tag: v5.52
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Configuration for wekan component
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "تغيير تاريخ البدء",
|
||||
"editCardDueDatePopup-title": "تغيير تاريخ الاستحقاق",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "تعديل العلامة",
|
||||
"editNotificationPopup-title": "تصحيح الإشعار",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Промени началната дата",
|
||||
"editCardDueDatePopup-title": "Промени датата за готовност",
|
||||
"editCustomFieldPopup-title": "Промени Полето",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Промени изработеното време",
|
||||
"editLabelPopup-title": "Промяна на Етикета",
|
||||
"editNotificationPopup-title": "Промени известията",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Canvia data d'inici",
|
||||
"editCardDueDatePopup-title": "Canvia data de finalització",
|
||||
"editCustomFieldPopup-title": "Modificar camp",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Canvia temps dedicat",
|
||||
"editLabelPopup-title": "Canvia etiqueta",
|
||||
"editNotificationPopup-title": "Edita la notificació",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Změnit datum startu úkolu",
|
||||
"editCardDueDatePopup-title": "Změnit datum dokončení úkolu",
|
||||
"editCustomFieldPopup-title": "Upravit pole",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Změnit strávený čas",
|
||||
"editLabelPopup-title": "Změnit štítek",
|
||||
"editNotificationPopup-title": "Změnit notifikace",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Skift startdato",
|
||||
"editCardDueDatePopup-title": "Skift forfaldsdato",
|
||||
"editCustomFieldPopup-title": "Redigér felt",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Tilpas forbrugt tid",
|
||||
"editLabelPopup-title": "Skift etikette",
|
||||
"editNotificationPopup-title": "Redigér notifikation",
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
"color-white": "Weiss",
|
||||
"color-yellow": "gelb",
|
||||
"unset-color": "Nicht festgelegt",
|
||||
"comment": "Kommentar",
|
||||
"comment": "Kommentar speichern",
|
||||
"comment-placeholder": "Kommentar schreiben",
|
||||
"comment-only": "Nur Kommentare",
|
||||
"comment-only-desc": "Kann Karten nur kommentieren.",
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Startdatum ändern",
|
||||
"editCardDueDatePopup-title": "Fälligkeitsdatum ändern",
|
||||
"editCustomFieldPopup-title": "Feld bearbeiten",
|
||||
"addReactionPopup-title": "Bewertung hinzufügen",
|
||||
"editCardSpentTimePopup-title": "Aufgewendete Zeit ändern",
|
||||
"editLabelPopup-title": "Label ändern",
|
||||
"editNotificationPopup-title": "Benachrichtigung ändern",
|
||||
@@ -951,7 +952,7 @@
|
||||
"operator-created": "erstellt",
|
||||
"operator-modified": "geändert",
|
||||
"operator-sort": "sortieren",
|
||||
"operator-comment": "Kommentar",
|
||||
"operator-comment": "kommentieren",
|
||||
"operator-has": "hat",
|
||||
"operator-limit": "Begrenzung",
|
||||
"predicate-archived": "archiviert",
|
||||
|
||||
+2
-1
@@ -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": "Zu Karte umwandeln",
|
||||
"add-cover": "Cover hinzufügen",
|
||||
"add-label": "Label hinzufügen",
|
||||
"add-list": "Liste hinzufügen",
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Startdatum ändern",
|
||||
"editCardDueDatePopup-title": "Fälligkeitsdatum ändern",
|
||||
"editCustomFieldPopup-title": "Feld bearbeiten",
|
||||
"addReactionPopup-title": "Reaktion hinzufügen",
|
||||
"editCardSpentTimePopup-title": "Aufgewendete Zeit ändern",
|
||||
"editLabelPopup-title": "Label ändern",
|
||||
"editNotificationPopup-title": "Benachrichtigung ändern",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Αλλαγή ημερομηνίας έναρξης",
|
||||
"editCardDueDatePopup-title": "Αλλαγή ημερομηνίας λήξης προθεσμίας",
|
||||
"editCustomFieldPopup-title": "Επεξεργασία Πεδίου",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Αλλαγή δαπανηθέντος χρόνου",
|
||||
"editLabelPopup-title": "Αλλαγή Ετικέτας",
|
||||
"editNotificationPopup-title": "Επεξεργασία Ειδοποίησης",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Redakti komencdaton",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Ŝanĝi etikedon",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Cambiar fecha de inicio",
|
||||
"editCardDueDatePopup-title": "Cambiar fecha de vencimiento",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Cambiar tiempo empleado",
|
||||
"editLabelPopup-title": "Cambiar Etiqueta",
|
||||
"editNotificationPopup-title": "Editar Notificación",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Cambiar la fecha de comienzo",
|
||||
"editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
|
||||
"editCustomFieldPopup-title": "Editar el campo",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
|
||||
"editLabelPopup-title": "Cambiar la etiqueta",
|
||||
"editNotificationPopup-title": "Editar las notificaciones",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Cambiar la fecha de inicio",
|
||||
"editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
|
||||
"editCustomFieldPopup-title": "Editar el campo",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
|
||||
"editLabelPopup-title": "Cambiar la etiqueta",
|
||||
"editNotificationPopup-title": "Editar las notificaciones",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Cambiar la fecha de comienzo",
|
||||
"editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
|
||||
"editCustomFieldPopup-title": "Editar el campo",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
|
||||
"editLabelPopup-title": "Cambiar la etiqueta",
|
||||
"editNotificationPopup-title": "Editar las notificaciones",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Aldatu hasiera data",
|
||||
"editCardDueDatePopup-title": "Aldatu epemuga data",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Aldatu erabilitako denbora",
|
||||
"editLabelPopup-title": "Aldatu etiketa",
|
||||
"editNotificationPopup-title": "Editatu jakinarazpena",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "تغییر تاریخ آغاز",
|
||||
"editCardDueDatePopup-title": "تغییر تاریخ پایان",
|
||||
"editCustomFieldPopup-title": "ویرایش فیلد",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "تغییر زمان صرف شده",
|
||||
"editLabelPopup-title": "تغیر لیبل",
|
||||
"editNotificationPopup-title": "اصلاح اعلان",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Muokkaa aloituspäivää",
|
||||
"editCardDueDatePopup-title": "Muokkaa eräpäivää",
|
||||
"editCustomFieldPopup-title": "Muokkaa kenttää",
|
||||
"addReactionPopup-title": "Lisää reaktio",
|
||||
"editCardSpentTimePopup-title": "Muuta käytettyä aikaa",
|
||||
"editLabelPopup-title": "Muokkaa nimilappua",
|
||||
"editNotificationPopup-title": "Muokkaa ilmoituksia",
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Modifier la date de début",
|
||||
"editCardDueDatePopup-title": "Modifier la date d'échéance",
|
||||
"editCustomFieldPopup-title": "Éditer le champ personnalisé",
|
||||
"addReactionPopup-title": "Ajouter une réaction",
|
||||
"editCardSpentTimePopup-title": "Modifier le temps passé",
|
||||
"editLabelPopup-title": "Modifier l'étiquette",
|
||||
"editNotificationPopup-title": "Modifier la notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Cambiar a data de inicio",
|
||||
"editCardDueDatePopup-title": "Cambiar a data límite",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Cambiar a etiqueta",
|
||||
"editNotificationPopup-title": "Editar a notificación",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "שינוי מועד התחלה",
|
||||
"editCardDueDatePopup-title": "שינוי מועד סיום",
|
||||
"editCustomFieldPopup-title": "עריכת שדה",
|
||||
"addReactionPopup-title": "הוספת סימון כתגובה",
|
||||
"editCardSpentTimePopup-title": "שינוי הזמן שהושקע",
|
||||
"editLabelPopup-title": "שינוי תווית",
|
||||
"editNotificationPopup-title": "שינוי דיווח",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "संपादित करें Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "संपादित करें Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Promijeni datum početka",
|
||||
"editCardDueDatePopup-title": "Promijeni datum dospijeća",
|
||||
"editCustomFieldPopup-title": "Uredi polje",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Promijeni oznaku",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Kezdődátum megváltoztatása",
|
||||
"editCardDueDatePopup-title": "Határidő dátumának megváltoztatása",
|
||||
"editCustomFieldPopup-title": "Mező szerkesztése",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Eltöltött idő megváltoztatása",
|
||||
"editLabelPopup-title": "Címke megváltoztatása",
|
||||
"editNotificationPopup-title": "Értesítés szerkesztése",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Ubah tanggal mulai",
|
||||
"editCardDueDatePopup-title": "Ubah tanggal selesai",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Ubah Label",
|
||||
"editNotificationPopup-title": "Sunting Pemberitahuan",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Cambia data di inizio",
|
||||
"editCardDueDatePopup-title": "Cambia data di scadenza",
|
||||
"editCustomFieldPopup-title": "Modifica campo",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Cambia tempo trascorso",
|
||||
"editLabelPopup-title": "Modifica etichetta",
|
||||
"editNotificationPopup-title": "Modifica notifiche",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "開始日の変更",
|
||||
"editCardDueDatePopup-title": "期限の変更",
|
||||
"editCustomFieldPopup-title": "フィールドを編集",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "作業時間の変更",
|
||||
"editLabelPopup-title": "ラベルの変更",
|
||||
"editNotificationPopup-title": "通知の変更",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "დაწყების დროის შეცვლა",
|
||||
"editCardDueDatePopup-title": "შეცვალეთ დედლაინი",
|
||||
"editCustomFieldPopup-title": "ველების შესწორება",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "დახარჯული დროის შეცვლა",
|
||||
"editLabelPopup-title": "ნიშნის შეცვლა",
|
||||
"editNotificationPopup-title": "შეტყობინებების შესწორება",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "시작일 변경",
|
||||
"editCardDueDatePopup-title": "종료일 변경",
|
||||
"editCustomFieldPopup-title": "필드 수정",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "라벨 변경",
|
||||
"editNotificationPopup-title": "알림 수정",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Mainīt sākuma datumu",
|
||||
"editCardDueDatePopup-title": "Mainīt termiņu",
|
||||
"editCustomFieldPopup-title": "Labot lauku",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Mainīt patērēto laiku",
|
||||
"editLabelPopup-title": "Mainīt birku",
|
||||
"editNotificationPopup-title": "Labot ziņojumu",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Промени началната дата",
|
||||
"editCardDueDatePopup-title": "Промени датата за готовност",
|
||||
"editCustomFieldPopup-title": "Промени Полето",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Промени изработеното време",
|
||||
"editLabelPopup-title": "Промяна на Етикета",
|
||||
"editNotificationPopup-title": "Промени известията",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Эхлэх өдрийг өөрчлөх",
|
||||
"editCardDueDatePopup-title": "Дуусах өдрийг өөрчлөх",
|
||||
"editCustomFieldPopup-title": "Талбарыг засварлах",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Зарцуулсан хугацааг засварлах",
|
||||
"editLabelPopup-title": "Шошгыг өөрчлөх",
|
||||
"editNotificationPopup-title": "Мэдэгдэл тохируулах",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Endre start dato",
|
||||
"editCardDueDatePopup-title": "Endre forfallsdato",
|
||||
"editCustomFieldPopup-title": "Redigere felt",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Endre forbrukt tid",
|
||||
"editLabelPopup-title": "Endre Etikett",
|
||||
"editNotificationPopup-title": "Endre Varsel",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Wijzig start datum",
|
||||
"editCardDueDatePopup-title": "Wijzig vervaldatum",
|
||||
"editCustomFieldPopup-title": "Wijzig Veld",
|
||||
"addReactionPopup-title": "Reactie toevoegen",
|
||||
"editCardSpentTimePopup-title": "Verander gespendeerde tijd",
|
||||
"editLabelPopup-title": "Wijzig label",
|
||||
"editNotificationPopup-title": "Wijzig notificatie",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Cambiar la data de debuta",
|
||||
"editCardDueDatePopup-title": "Cambiar la data de fin",
|
||||
"editCustomFieldPopup-title": "Modificar los camps",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Cambiar lo temp passat",
|
||||
"editLabelPopup-title": "Cambiar l'etiqueta",
|
||||
"editNotificationPopup-title": "Modificar la notificacion",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Zmień datę rozpoczęcia",
|
||||
"editCardDueDatePopup-title": "Zmień datę wykonania",
|
||||
"editCustomFieldPopup-title": "Edytuj pole",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Zmień ilość przepracowanego czasu",
|
||||
"editLabelPopup-title": "Zmień etykietę",
|
||||
"editNotificationPopup-title": "Zmień tryb powiadamiania",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Altera data de início",
|
||||
"editCardDueDatePopup-title": "Altera prazo final",
|
||||
"editCustomFieldPopup-title": "Editar campo",
|
||||
"addReactionPopup-title": "Adicionar reação",
|
||||
"editCardSpentTimePopup-title": "Editar tempo gasto",
|
||||
"editLabelPopup-title": "Alterar Etiqueta",
|
||||
"editNotificationPopup-title": "Editar Notificações",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Alterar a data de início",
|
||||
"editCardDueDatePopup-title": "Alterar a data limite",
|
||||
"editCustomFieldPopup-title": "Editar Campo",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Alterar o tempo gasto",
|
||||
"editLabelPopup-title": "Alterar a Etiqueta",
|
||||
"editNotificationPopup-title": "Editar a Notificação",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
+4
-3
@@ -89,7 +89,7 @@
|
||||
"add-subtask": "Добавить подзадачу",
|
||||
"add-checklist": "Добавить контрольный список",
|
||||
"add-checklist-item": "Добавить пункт в контрольный список",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"convertChecklistItemToCardPopup-title": "Преобразовать в Карточку",
|
||||
"add-cover": "Прикрепить",
|
||||
"add-label": "Добавить метку",
|
||||
"add-list": "Добавить простой список",
|
||||
@@ -121,8 +121,8 @@
|
||||
"archives": "Архив",
|
||||
"template": "Шаблон",
|
||||
"templates": "Шаблоны",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"template-container": "Шаблон Контейнера",
|
||||
"add-template-container": "Добавить Шаблон Контейнера",
|
||||
"assign-member": "Назначить участника",
|
||||
"attached": "прикреплено",
|
||||
"attachment": "Вложение",
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Изменить дату начала",
|
||||
"editCardDueDatePopup-title": "Изменить дату выполнения",
|
||||
"editCustomFieldPopup-title": "Редактировать поле",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Изменить затраченное время",
|
||||
"editLabelPopup-title": "Изменить метки",
|
||||
"editNotificationPopup-title": "Редактировать уведомления",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Spremeni začetni datum",
|
||||
"editCardDueDatePopup-title": "Spremeni datum zapadlosti",
|
||||
"editCustomFieldPopup-title": "Uredi polje",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Spremeni porabljen čas",
|
||||
"editLabelPopup-title": "Spremeni oznako",
|
||||
"editNotificationPopup-title": "Uredi obvestilo",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Izmeni početni datum",
|
||||
"editCardDueDatePopup-title": "Izmeni krajnji datum",
|
||||
"editCustomFieldPopup-title": "Izmeni polje",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Izmeni oznaku",
|
||||
"editNotificationPopup-title": "Izmeni obaveštenje",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Ändra startdatum",
|
||||
"editCardDueDatePopup-title": "Ändra förfallodatum",
|
||||
"editCustomFieldPopup-title": "Redigera fält",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Ändra spenderad tid",
|
||||
"editLabelPopup-title": "Ändra etikett",
|
||||
"editNotificationPopup-title": "Redigera notis",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "เปลี่ยนวันเริ่มต้น",
|
||||
"editCardDueDatePopup-title": "เปลี่ยนวันครบกำหนด",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "เปลี่ยนป้ายกำกับ",
|
||||
"editNotificationPopup-title": "แก้ไขการแจ้งเตือน",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Başlangıç tarihini değiştir",
|
||||
"editCardDueDatePopup-title": "Bitiş tarihini değiştir",
|
||||
"editCustomFieldPopup-title": "Alanı düzenle",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Harcanan zamanı değiştir",
|
||||
"editLabelPopup-title": "Etiket Değiştir",
|
||||
"editNotificationPopup-title": "Bildirimi değiştir",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Thay đổi ngày bắt đầu",
|
||||
"editCardDueDatePopup-title": "Thay đổi ngày đến hạn",
|
||||
"editCustomFieldPopup-title": "Sửa Trường",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Thay đổi thời gian đã sử dụng",
|
||||
"editLabelPopup-title": "Thay đổi nhãn",
|
||||
"editNotificationPopup-title": "Sửa Thông báo",
|
||||
|
||||
+15
-14
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"accept": "接受",
|
||||
"accept": "同意",
|
||||
"act-activity-notify": "活动通知",
|
||||
"act-addAttachment": "添加附件 __attachment__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
|
||||
"act-deleteAttachment": "删除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的附件 __attachment__",
|
||||
@@ -42,7 +42,7 @@
|
||||
"act-unjoinMember": "移除成员 __member__ 从卡片 __card__ 列表 __list__ a泳道 __swimlane__ 看板 __board__",
|
||||
"act-withBoardTitle": "看板__board__",
|
||||
"act-withCardTitle": "[看板 __board__] 卡片 __card__",
|
||||
"actions": "操作",
|
||||
"actions": "动作",
|
||||
"activities": "活动",
|
||||
"activity": "活动",
|
||||
"activity-added": "添加 %s 至 %s",
|
||||
@@ -81,15 +81,15 @@
|
||||
"activity-endDate": "已将结束日期从 %s 修改为 %s",
|
||||
"add-attachment": "添加附件",
|
||||
"add-board": "添加看板",
|
||||
"add-template": "新增模板",
|
||||
"add-template": "添加模板",
|
||||
"add-card": "添加卡片",
|
||||
"add-card-to-top-of-list": "新增卡片到列表顶部",
|
||||
"add-card-to-bottom-of-list": "新增卡片到列表底部",
|
||||
"add-card-to-top-of-list": "添加卡片到列表顶部",
|
||||
"add-card-to-bottom-of-list": "添加卡片到列表底部",
|
||||
"add-swimlane": "添加泳道图",
|
||||
"add-subtask": "添加子任务",
|
||||
"add-checklist": "添加待办清单",
|
||||
"add-checklist-item": "扩充清单",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-checklist": "添加清单",
|
||||
"add-checklist-item": "添加项目清单",
|
||||
"convertChecklistItemToCardPopup-title": "转为卡片",
|
||||
"add-cover": "添加封面",
|
||||
"add-label": "添加标签",
|
||||
"add-list": "添加列表",
|
||||
@@ -149,7 +149,7 @@
|
||||
"board-view-cal": "日历",
|
||||
"board-view-swimlanes": "泳道图",
|
||||
"board-view-collapse": "崩溃",
|
||||
"board-view-gantt": "甘特",
|
||||
"board-view-gantt": "甘特图",
|
||||
"board-view-lists": "列表",
|
||||
"bucket-example": "例如 “目标清单”",
|
||||
"cancel": "取消",
|
||||
@@ -203,7 +203,7 @@
|
||||
"poker-result-votes": "投票",
|
||||
"poker-result-who": "何人",
|
||||
"poker-replay": "Replay",
|
||||
"set-estimation": "Set Estimation",
|
||||
"set-estimation": "设置预估时间",
|
||||
"deletePokerPopup-title": "删除计划扑克?",
|
||||
"poker-delete-pop": "永久删除。对该计划扑克的所有操作记录将会丢失。",
|
||||
"cardDeletePopup-title": "彻底删除卡片?",
|
||||
@@ -267,7 +267,7 @@
|
||||
"comment": "评论",
|
||||
"comment-placeholder": "添加评论",
|
||||
"comment-only": "仅能评论",
|
||||
"comment-only-desc": "只能在卡片上评论。",
|
||||
"comment-only-desc": "仅能在卡片上评论。",
|
||||
"no-comments": "暂无评论",
|
||||
"no-comments-desc": "无法查看评论和活动。",
|
||||
"worker": "人员",
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "修改起始日期",
|
||||
"editCardDueDatePopup-title": "修改截止日期",
|
||||
"editCustomFieldPopup-title": "编辑字段",
|
||||
"addReactionPopup-title": "新增动作",
|
||||
"editCardSpentTimePopup-title": "修改耗时",
|
||||
"editLabelPopup-title": "更改标签",
|
||||
"editNotificationPopup-title": "编辑通知",
|
||||
@@ -351,10 +352,10 @@
|
||||
"error-user-doesNotExist": "该用户不存在",
|
||||
"error-user-notAllowSelf": "无法邀请自己",
|
||||
"error-user-notCreated": "该用户未能成功创建",
|
||||
"error-username-taken": "此用户名已存在",
|
||||
"error-username-taken": "此用户名已被使用",
|
||||
"error-orgname-taken": "此组织名称已被使用",
|
||||
"error-teamname-taken": "此团队名称已被使用",
|
||||
"error-email-taken": "此EMail已存在",
|
||||
"error-email-taken": "此邮箱已被使用",
|
||||
"export-board": "导出看板",
|
||||
"export-board-json": "看板导出为JSON",
|
||||
"export-board-csv": "看板导出为CSV",
|
||||
@@ -391,7 +392,7 @@
|
||||
"filter-member-label": "按成员过滤",
|
||||
"filter-no-member": "无成员",
|
||||
"filter-assignee-label": "按指定人过滤",
|
||||
"filter-no-assignee": "没有代理人",
|
||||
"filter-no-assignee": "没有指派人",
|
||||
"filter-custom-fields-label": "按自定义字段过滤",
|
||||
"filter-no-custom-fields": "无自定义字段",
|
||||
"filter-show-archive": "显示归档的列表",
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
"add-subtask": "新增子任務",
|
||||
"add-checklist": "新增待辦清單",
|
||||
"add-checklist-item": "新增項目",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"convertChecklistItemToCardPopup-title": "轉換為卡片",
|
||||
"add-cover": "新增封面",
|
||||
"add-label": "新增標籤",
|
||||
"add-list": "新增清單",
|
||||
@@ -322,6 +322,7 @@
|
||||
"editCardStartDatePopup-title": "變更開始日期",
|
||||
"editCardDueDatePopup-title": "變更到期日期",
|
||||
"editCustomFieldPopup-title": "編輯欄位",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "變更耗費時間",
|
||||
"editLabelPopup-title": "更改標籤",
|
||||
"editNotificationPopup-title": "更改通知",
|
||||
|
||||
+23
-8
@@ -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;
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
const commentReactionSchema = new SimpleSchema({
|
||||
reactionCodepoint: { type: String, optional: false },
|
||||
userIds: { type: [String], defaultValue: [] }
|
||||
});
|
||||
|
||||
CardCommentReactions = new Mongo.Collection('card_comment_reactions');
|
||||
|
||||
/**
|
||||
* All reactions of a card comment
|
||||
*/
|
||||
CardCommentReactions.attachSchema(
|
||||
new SimpleSchema({
|
||||
boardId: {
|
||||
/**
|
||||
* the board ID
|
||||
*/
|
||||
type: String,
|
||||
optional: false
|
||||
},
|
||||
cardId: {
|
||||
/**
|
||||
* the card ID
|
||||
*/
|
||||
type: String,
|
||||
optional: false
|
||||
},
|
||||
cardCommentId: {
|
||||
/**
|
||||
* the card comment ID
|
||||
*/
|
||||
type: String,
|
||||
optional: false
|
||||
},
|
||||
reactions: {
|
||||
type: [commentReactionSchema],
|
||||
defaultValue: []
|
||||
}
|
||||
}),
|
||||
);
|
||||
|
||||
CardCommentReactions.allow({
|
||||
insert(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
update(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
remove(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
fetch: ['boardId'],
|
||||
});
|
||||
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Meteor.startup(() => {
|
||||
CardCommentReactions._collection._ensureIndex({ cardCommentId: 1 }, { unique: true });
|
||||
});
|
||||
}
|
||||
+47
-5
@@ -93,6 +93,48 @@ CardComments.helpers({
|
||||
user() {
|
||||
return Users.findOne(this.userId);
|
||||
},
|
||||
|
||||
reactions() {
|
||||
const cardCommentReactions = CardCommentReactions.findOne({cardCommentId: this._id});
|
||||
return !!cardCommentReactions ? cardCommentReactions.reactions : [];
|
||||
},
|
||||
|
||||
toggleReaction(reactionCodepoint) {
|
||||
|
||||
const cardCommentReactions = CardCommentReactions.findOne({cardCommentId: this._id});
|
||||
const reactions = !!cardCommentReactions ? cardCommentReactions.reactions : [];
|
||||
const userId = Meteor.userId();
|
||||
const reaction = reactions.find(r => r.reactionCodepoint === reactionCodepoint);
|
||||
|
||||
// If no reaction is set for the codepoint, add this
|
||||
if (!reaction) {
|
||||
reactions.push({ reactionCodepoint, userIds: [userId] });
|
||||
} else {
|
||||
|
||||
// toggle user reaction upon previous reaction state
|
||||
const userHasReacted = reaction.userIds.includes(userId);
|
||||
if (userHasReacted) {
|
||||
reaction.userIds.splice(reaction.userIds.indexOf(userId), 1);
|
||||
if (reaction.userIds.length === 0) {
|
||||
reactions.splice(reactions.indexOf(reaction), 1);
|
||||
}
|
||||
} else {
|
||||
reaction.userIds.push(userId);
|
||||
}
|
||||
}
|
||||
|
||||
// If no reaction doc exists yet create otherwise update reaction set
|
||||
if (!!cardCommentReactions) {
|
||||
return CardCommentReactions.update({ _id: cardCommentReactions._id }, { $set: { reactions } });
|
||||
} else {
|
||||
return CardCommentReactions.insert({
|
||||
boardId: this.boardId,
|
||||
cardCommentId: this._id,
|
||||
cardId: this.cardId,
|
||||
reactions
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
CardComments.hookOptions.after.update = { fetchPrevious: false };
|
||||
@@ -187,7 +229,7 @@ if (Meteor.isServer) {
|
||||
* comment: string,
|
||||
* authorId: string}]
|
||||
*/
|
||||
JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/comments', function(
|
||||
JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/comments', function (
|
||||
req,
|
||||
res,
|
||||
) {
|
||||
@@ -200,7 +242,7 @@ if (Meteor.isServer) {
|
||||
data: CardComments.find({
|
||||
boardId: paramBoardId,
|
||||
cardId: paramCardId,
|
||||
}).map(function(doc) {
|
||||
}).map(function (doc) {
|
||||
return {
|
||||
_id: doc._id,
|
||||
comment: doc.text,
|
||||
@@ -228,7 +270,7 @@ if (Meteor.isServer) {
|
||||
JsonRoutes.add(
|
||||
'GET',
|
||||
'/api/boards/:boardId/cards/:cardId/comments/:commentId',
|
||||
function(req, res) {
|
||||
function (req, res) {
|
||||
try {
|
||||
const paramBoardId = req.params.boardId;
|
||||
Authentication.checkBoardAccess(req.userId, paramBoardId);
|
||||
@@ -264,7 +306,7 @@ if (Meteor.isServer) {
|
||||
JsonRoutes.add(
|
||||
'POST',
|
||||
'/api/boards/:boardId/cards/:cardId/comments',
|
||||
function(req, res) {
|
||||
function (req, res) {
|
||||
try {
|
||||
const paramBoardId = req.params.boardId;
|
||||
Authentication.checkBoardAccess(req.userId, paramBoardId);
|
||||
@@ -310,7 +352,7 @@ if (Meteor.isServer) {
|
||||
JsonRoutes.add(
|
||||
'DELETE',
|
||||
'/api/boards/:boardId/cards/:cardId/comments/:commentId',
|
||||
function(req, res) {
|
||||
function (req, res) {
|
||||
try {
|
||||
const paramBoardId = req.params.boardId;
|
||||
Authentication.checkBoardAccess(req.userId, paramBoardId);
|
||||
|
||||
+51
-12
@@ -1,3 +1,5 @@
|
||||
var nodemailer = require('nodemailer');
|
||||
|
||||
// Sandstorm context is detected using the METEOR_SETTINGS environment variable
|
||||
// in the package definition.
|
||||
const isSandstorm =
|
||||
@@ -157,6 +159,7 @@ if (Meteor.isServer) {
|
||||
};
|
||||
Settings.insert(defaultSetting);
|
||||
}
|
||||
/*
|
||||
if (isSandstorm) {
|
||||
// At Sandstorm, Admin Panel has SMTP settings
|
||||
const newSetting = Settings.findOne();
|
||||
@@ -169,7 +172,9 @@ if (Meteor.isServer) {
|
||||
// Not running on Sandstorm, so using environment variables
|
||||
Accounts.emailTemplates.from = process.env.MAIL_FROM;
|
||||
}
|
||||
*/
|
||||
});
|
||||
/*
|
||||
if (isSandstorm) {
|
||||
// At Sandstorm Wekan Admin Panel, save SMTP settings.
|
||||
Settings.after.update((userId, doc, fieldNames) => {
|
||||
@@ -189,6 +194,7 @@ if (Meteor.isServer) {
|
||||
}
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
function getRandomNum(min, max) {
|
||||
const range = max - min;
|
||||
@@ -220,12 +226,29 @@ if (Meteor.isServer) {
|
||||
};
|
||||
const lang = author.getLanguage();
|
||||
|
||||
Email.send({
|
||||
to: icode.email,
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-invite-register-subject', params, lang),
|
||||
text: TAPi18n.__('email-invite-register-text', params, lang),
|
||||
});
|
||||
|
||||
if (process.env.MAIL_SERVICE !== '') {
|
||||
let transporter = nodemailer.createTransport({
|
||||
service: process.env.MAIL_SERVICE,
|
||||
auth: {
|
||||
user: process.env.MAIL_SERVICE_USER,
|
||||
pass: process.env.MAIL_SERVICE_PASSWORD
|
||||
},
|
||||
})
|
||||
let info = transporter.sendMail({
|
||||
to: icode.email,
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-invite-register-subject', params, lang),
|
||||
text: TAPi18n.__('email-invite-register-text', params, lang),
|
||||
})
|
||||
} else if (process.env.MAIL_URL !== '') {
|
||||
Email.send({
|
||||
to: icode.email,
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-invite-register-subject', params, lang),
|
||||
text: TAPi18n.__('email-invite-register-text', params, lang),
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
InvitationCodes.remove(_id);
|
||||
throw new Meteor.Error('email-fail', e.message);
|
||||
@@ -318,12 +341,28 @@ if (Meteor.isServer) {
|
||||
this.unblock();
|
||||
const lang = user.getLanguage();
|
||||
try {
|
||||
Email.send({
|
||||
to: user.emails[0].address,
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-smtp-test-subject', { lng: lang }),
|
||||
text: TAPi18n.__('email-smtp-test-text', { lng: lang }),
|
||||
});
|
||||
if (process.env.MAIL_SERVICE !== '') {
|
||||
let transporter = nodemailer.createTransport({
|
||||
service: process.env.MAIL_SERVICE,
|
||||
auth: {
|
||||
user: process.env.MAIL_SERVICE_USER,
|
||||
pass: process.env.MAIL_SERVICE_PASSWORD
|
||||
},
|
||||
})
|
||||
let info = transporter.sendMail({
|
||||
to: user.emails[0].address,
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-smtp-test-subject', { lng: lang }),
|
||||
text: TAPi18n.__('email-smtp-test-text', { lng: lang }),
|
||||
})
|
||||
} else if (process.env.MAIL_URL !== '') {
|
||||
Email.send({
|
||||
to: user.emails[0].address,
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-smtp-test-subject', { lng: lang }),
|
||||
text: TAPi18n.__('email-smtp-test-text', { lng: lang }),
|
||||
});
|
||||
}
|
||||
} catch ({ message }) {
|
||||
throw new Meteor.Error(
|
||||
'email-fail',
|
||||
|
||||
+24
-6
@@ -1,3 +1,4 @@
|
||||
var nodemailer = require('nodemailer');
|
||||
import { SyncedCron } from 'meteor/percolate:synced-cron';
|
||||
import ImpersonatedUsers from './impersonatedUsers';
|
||||
|
||||
@@ -1218,12 +1219,29 @@ if (Meteor.isServer) {
|
||||
url: board.absoluteUrl(),
|
||||
};
|
||||
const lang = user.getLanguage();
|
||||
Email.send({
|
||||
to: user.emails[0].address.toLowerCase(),
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-invite-subject', params, lang),
|
||||
text: TAPi18n.__('email-invite-text', params, lang),
|
||||
});
|
||||
|
||||
if (process.env.MAIL_SERVICE !== '') {
|
||||
let transporter = nodemailer.createTransport({
|
||||
service: process.env.MAIL_SERVICE,
|
||||
auth: {
|
||||
user: process.env.MAIL_SERVICE_USER,
|
||||
pass: process.env.MAIL_SERVICE_PASSWORD
|
||||
},
|
||||
})
|
||||
let info = transporter.sendMail({
|
||||
to: user.emails[0].address.toLowerCase(),
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-invite-subject', params, lang),
|
||||
text: TAPi18n.__('email-invite-text', params, lang),
|
||||
})
|
||||
} else if (process.env.MAIL_URL !== '') {
|
||||
Email.send({
|
||||
to: user.emails[0].address.toLowerCase(),
|
||||
from: Accounts.emailTemplates.from,
|
||||
subject: TAPi18n.__('email-invite-subject', params, lang),
|
||||
text: TAPi18n.__('email-invite-text', params, lang),
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
throw new Meteor.Error('email-fail', e.message);
|
||||
}
|
||||
|
||||
Generated
+508
-306
File diff suppressed because it is too large.
Load diff
Loaded 100 of 119 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user