Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a5d619b89 | ||
|
|
97c56baebb | ||
|
|
9c99c5c3ae | ||
|
|
28d515436e | ||
|
|
f70ec7f53c | ||
|
|
74825c099f | ||
|
|
966670fe70 | ||
|
|
c406607fd2 | ||
|
|
e812a3a087 | ||
|
|
9e6744d1e3 | ||
|
|
835e3ef305 | ||
|
|
ac658af462 | ||
|
|
6c3fcdcc4c | ||
|
|
22cbd5097b | ||
|
|
d06ac09485 | ||
|
|
94b67db78a | ||
|
|
5536525564 | ||
|
|
e6c7463c03 | ||
|
|
11bf4c7c07 | ||
|
|
bc9c7e5aa4 | ||
|
|
9a0f54f4fe | ||
|
|
3b6f3c58e1 | ||
|
|
ff01c2a69f | ||
|
|
1322c1fbbd | ||
|
|
36e2c76456 | ||
|
|
c42a8df65c | ||
|
|
01b38bb2e0 | ||
|
|
9f9a69286c | ||
|
|
e3a0dea85f | ||
|
|
5b5094ced6 | ||
|
|
f5c2557338 | ||
|
|
802f1599a1 | ||
|
|
9781afa17e | ||
|
|
3319602f3f | ||
|
|
8bd2e4f0dd | ||
|
|
8eaa490664 | ||
|
|
db54eb87cd | ||
|
|
d1950efdd4 | ||
|
|
cf51ddb32e | ||
|
|
269551ead5 | ||
|
|
ee06e4f6de | ||
|
|
87e9949f33 | ||
|
|
0b02e88ee3 | ||
|
|
dd58698cef | ||
|
|
f9807bfad8 | ||
|
|
4f6bd86478 | ||
|
|
be6ff3782b | ||
|
|
7ae2360a55 | ||
|
|
1852e66abd | ||
|
|
367b2370a5 | ||
|
|
640df0f4a5 | ||
|
|
37984a6f9a | ||
|
|
c062621dd5 | ||
|
|
437a2ea0e2 | ||
|
|
fc2fb9a081 | ||
|
|
41d9ae92e6 | ||
|
|
4c659da533 | ||
|
|
21a9226c4a | ||
|
|
ee2c167be4 | ||
|
|
09b5359c45 | ||
|
|
e55e8ef000 | ||
|
|
bffd56f5fc | ||
|
|
ac0d7bda1c | ||
|
|
2912e541a0 | ||
|
|
442e6bf983 | ||
|
|
70ba1eca78 | ||
|
|
e925877ae4 | ||
|
|
0e7cc1ef87 | ||
|
|
909b0ef1b7 | ||
|
|
a573083291 | ||
|
|
6a42f738c9 | ||
|
|
9bee6ae666 | ||
|
|
533af4b39e | ||
|
|
99a200d0b2 | ||
|
|
889ec1339a | ||
|
|
0bdc3d04b4 | ||
|
|
bd9fbedbf9 | ||
|
|
6c0a958481 | ||
|
|
45a39ec213 | ||
|
|
800304270e | ||
|
|
9defed2680 | ||
|
|
7be9d7ff49 | ||
|
|
287abe7640 | ||
|
|
262df6c4a0 | ||
|
|
10e3d963ef | ||
|
|
d23920c886 | ||
|
|
be2647556d | ||
|
|
ea57864bcc | ||
|
|
0c121a5894 | ||
|
|
c19723ae27 | ||
|
|
00b43df267 | ||
|
|
edb6355960 | ||
|
|
8626b466b8 | ||
|
|
a80ab6e47a | ||
|
|
2b2978b8e7 | ||
|
|
3bdea42f6d | ||
|
|
b56ea161cd | ||
|
|
cde74a9c0b | ||
|
|
79b00f88b0 | ||
|
|
0da84f8f3e | ||
|
|
4f164a46a6 | ||
|
|
3d9b7eb7ab | ||
|
|
d3eb0ced83 | ||
|
|
08ac1f6b69 | ||
|
|
cc63be8ff0 | ||
|
|
b1d8b0c7d4 | ||
|
|
3f6fde033b | ||
|
|
0a9e10b21e | ||
|
|
25e17fedb9 | ||
|
|
8ec54ffa5b | ||
|
|
b516275c24 | ||
|
|
aea5d62556 | ||
|
|
de2fc69315 | ||
|
|
8629537c3f | ||
|
|
57401e48c1 | ||
|
|
76f4b8316b | ||
|
|
ef0e4e36f4 | ||
|
|
55296b676b | ||
|
|
5b9a2a8bac | ||
|
|
8031b184f3 | ||
|
|
1efd7bb33a | ||
|
|
53d663f77b | ||
|
|
9969523b70 | ||
|
|
2cd0a414d5 | ||
|
|
256a673a7f | ||
|
|
6d8a062e50 | ||
|
|
35a7159be4 | ||
|
|
764d9fa806 | ||
|
|
292ff3c961 | ||
|
|
071929d3a6 | ||
|
|
c7cc9273a6 | ||
|
|
55a11a24f4 | ||
|
|
d1f443bcd8 | ||
|
|
52fafe9976 | ||
|
|
9aa7b792be | ||
|
|
07e9fe3403 | ||
|
|
858967f420 | ||
|
|
e07df35b61 | ||
|
|
2a3aa9331f | ||
|
|
4863689248 | ||
|
|
8a53aa9fa4 | ||
|
|
57a990d91e | ||
|
|
76c0393c53 | ||
|
|
62d472fa54 | ||
|
|
6d9d69e01d | ||
|
|
38666cbda2 | ||
|
|
b3b81546f6 | ||
|
|
9c2151f802 | ||
|
|
1f2c4b5a9e | ||
|
|
c9ef28b2ad | ||
|
|
03a5f46131 | ||
|
|
f1e4297e00 | ||
|
|
9bb1425a81 | ||
|
|
b6277233a1 | ||
|
|
7bed8a7abb | ||
|
|
787df04419 | ||
|
|
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 | ||
|
|
977821d293 | ||
|
|
f4e5306181 | ||
|
|
f01b440fb7 | ||
|
|
2fd741bf54 | ||
|
|
e8522c323f | ||
|
|
def2ec46e0 | ||
|
|
4e17d5a10f | ||
|
|
dcba6909e2 | ||
|
|
fc74324d1a | ||
|
|
8bb33c53f0 | ||
|
|
236b6c3552 | ||
|
|
28e9a6ac33 | ||
|
|
f91cc25b11 | ||
|
|
6fd45ce74b | ||
|
|
b57eae14d4 | ||
|
|
12db3714f9 | ||
|
|
7a1f42fa4e | ||
|
|
74064324cf | ||
|
|
f3baa32d6c | ||
|
|
33eed50290 | ||
|
|
11d9d1c889 | ||
|
|
5a7860ac8e | ||
|
|
b13f691389 | ||
|
|
d70e876388 | ||
|
|
36c2cb9573 | ||
|
|
88a47780a8 | ||
|
|
d30ce3c5cf | ||
|
|
0fa8fc8b50 | ||
|
|
6d73618a48 | ||
|
|
db493f1571 | ||
|
|
2b51afaedf | ||
|
|
18b6381d79 | ||
|
|
c65d8ed6a9 | ||
|
|
b3ba156d20 | ||
|
|
e1de787f19 | ||
|
|
e1f08b157b | ||
|
|
508915462d | ||
|
|
7c2ef6fbd5 | ||
|
|
ae73029dda | ||
|
|
542972fc5c | ||
|
|
d7cb143b0a | ||
|
|
d594555227 | ||
|
|
fe25ed5202 | ||
|
|
f6c36d6edd | ||
|
|
fe40f35d6d | ||
|
|
789d1d1d1c | ||
|
|
70265deb47 | ||
|
|
c0d1ed714e | ||
|
|
0555b7e34c | ||
|
|
c1c2eb22ba | ||
|
|
697d7613f2 | ||
|
|
33836af1f9 | ||
|
|
4f0c2dafca | ||
|
|
84801010d5 | ||
|
|
cb418f5e23 | ||
|
|
f7d6ac9401 | ||
|
|
d939ab0d76 | ||
|
|
d538a01d19 | ||
|
|
8770326ed3 | ||
|
|
b2e96746db | ||
|
|
6ce0be635b | ||
|
|
1001e95a87 | ||
|
|
609adcdf10 | ||
|
|
9de2580e30 | ||
|
|
9eb9081c6d | ||
|
|
f551b03dc7 | ||
|
|
1d5dd5e60f | ||
|
|
35a7036d4a | ||
|
|
7024929881 | ||
|
|
90058f25bf | ||
|
|
24ec9018fb | ||
|
|
ec01e5182d | ||
|
|
06d2880a7e | ||
|
|
2a611a8935 | ||
|
|
b236d95636 | ||
|
|
b1abfc768a | ||
|
|
9b97810109 | ||
|
|
4feffd90e3 | ||
|
|
dd8d2ea276 | ||
|
|
4c29b72242 | ||
|
|
ebe39771a6 | ||
|
|
63605ee42e | ||
|
|
b7f047db88 | ||
|
|
96289210d7 | ||
|
|
3b4a44abb1 | ||
|
|
e0797c83f8 | ||
|
|
30ffcc9246 | ||
|
|
a0945d2a2e | ||
|
|
c4cea9e71b | ||
|
|
35ec61726d | ||
|
|
f18a57b059 | ||
|
|
4ba180fbc4 | ||
|
|
0f34d407a4 | ||
|
|
4b29e9fbcb | ||
|
|
7f648720af | ||
|
|
58081c13cf | ||
|
|
78555f57a7 | ||
|
|
1ad40134dd | ||
|
|
9e16a405d8 | ||
|
|
9122a339cb | ||
|
|
56197274b6 | ||
|
|
6cf65ba82a | ||
|
|
aa59007409 | ||
|
|
66729e4c05 | ||
|
|
6387d32c2f | ||
|
|
48dbeb1e14 | ||
|
|
20452d7296 | ||
|
|
7daa67c792 | ||
|
|
4d9ba8d73b | ||
|
|
3650ef4805 | ||
|
|
be9154a015 | ||
|
|
0e00ca2350 | ||
|
|
2c0549a67a | ||
|
|
59e23e4296 | ||
|
|
3aa7a6e244 | ||
|
|
838c74a83b | ||
|
|
7f17bc9fb0 | ||
|
|
2dca6e8e7c | ||
|
|
a1bb3f9031 | ||
|
|
d1d4453120 | ||
|
|
48dcb02328 | ||
|
|
0a0cec6ef0 | ||
|
|
c3dd9f47fb | ||
|
|
5417f9b190 | ||
|
|
f03c873815 | ||
|
|
80adca5134 | ||
|
|
6efcac2a0e | ||
|
|
5162317298 | ||
|
|
90139b978c | ||
|
|
080fcb9c62 | ||
|
|
250f95deb6 | ||
|
|
bc98d82acf | ||
|
|
ecd780962f | ||
|
|
ab06597b7c | ||
|
|
220c52373a | ||
|
|
688ef08cd5 | ||
|
|
8607a18a26 | ||
|
|
fe7962e10a |
No files matched your search
@@ -1,5 +1,12 @@
|
||||
{
|
||||
"presets": [
|
||||
"@babel/preset-stage-3"
|
||||
]
|
||||
],
|
||||
"env": {
|
||||
"COVERAGE": {
|
||||
"plugins": [
|
||||
"istanbul"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV \
|
||||
DEBUG=false \
|
||||
NODE_VERSION=v12.22.1 \
|
||||
NODE_VERSION=v12.22.6 \
|
||||
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,
|
||||
@@ -156,6 +157,7 @@
|
||||
"Integrations": true,
|
||||
"HTTP": true,
|
||||
"AccountSettings": true,
|
||||
"TableVisibilityModeSettings": true,
|
||||
"Announcements": true,
|
||||
"Swimlanes": true,
|
||||
"ChecklistItems": true,
|
||||
|
||||
@@ -81,7 +81,7 @@ parts:
|
||||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 12.22.1
|
||||
node-engine: 12.22.6
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
||||
@@ -83,7 +83,7 @@ parts:
|
||||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 12.22.1
|
||||
node-engine: 12.22.6
|
||||
node-packages:
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
## Issue
|
||||
|
||||
Note: With Docker, please don't use latest tag. Only use release tags.
|
||||
See https://github.com/wekan/wekan/issues/3874
|
||||
|
||||
If you can not login for any reason:
|
||||
- https://github.com/wekan/wekan/wiki/Forgot-Password
|
||||
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
name: Docker
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '28 23 * * *'
|
||||
push:
|
||||
branches: [ master ]
|
||||
# Publish semver tags as releases.
|
||||
tags: [ 'v*.*.*' ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
REGISTRY: ghcr.io
|
||||
# github.repository as <account>/<repo>
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Login against a Docker registry except on PR
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Extract metadata (tags, labels) for Docker
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
@@ -0,0 +1,160 @@
|
||||
name: Test suite
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
# the following are optional jobs and need to be configured according
|
||||
# to this project's settings:
|
||||
#
|
||||
# lintcode:
|
||||
# name: Javascript lint
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - name: checkout
|
||||
# uses: actions/checkout@v2
|
||||
#
|
||||
# - name: setup node
|
||||
# uses: actions/setup-node@v1
|
||||
# with:
|
||||
# node-version: '12.x'
|
||||
#
|
||||
# - name: cache dependencies
|
||||
# uses: actions/cache@v1
|
||||
# with:
|
||||
# path: ~/.npm
|
||||
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
# restore-keys: |
|
||||
# ${{ runner.os }}-node-
|
||||
#
|
||||
# - run: npm install
|
||||
# - run: npm run lint:code
|
||||
#
|
||||
# lintstyle:
|
||||
# name: SCSS lint
|
||||
# runs-on: ubuntu-latest
|
||||
# needs: [lintcode]
|
||||
# steps:
|
||||
# - name: checkout
|
||||
# uses: actions/checkout@v2
|
||||
#
|
||||
# - name: setup node
|
||||
# uses: actions/setup-node@v1
|
||||
# with:
|
||||
# node-version: '12.x'
|
||||
#
|
||||
# - name: cache dependencies
|
||||
# uses: actions/cache@v1
|
||||
# with:
|
||||
# path: ~/.npm
|
||||
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
# restore-keys: |
|
||||
# ${{ runner.os }}-node-
|
||||
# - run: npm install
|
||||
# - run: npm run lint:style
|
||||
#
|
||||
# lintdocs:
|
||||
# name: documentation lint
|
||||
# runs-on: ubuntu-latest
|
||||
# needs: [lintcode,lintstyle]
|
||||
# steps:
|
||||
# - name: checkout
|
||||
# uses: actions/checkout@v2
|
||||
#
|
||||
# - name: setup node
|
||||
# uses: actions/setup-node@v1
|
||||
# with:
|
||||
# node-version: '12.x'
|
||||
#
|
||||
# - name: cache dependencies
|
||||
# uses: actions/cache@v1
|
||||
# with:
|
||||
# path: ~/.npm
|
||||
# key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
# restore-keys: |
|
||||
# ${{ runner.os }}-node-
|
||||
#
|
||||
# - run: npm install
|
||||
# - run: npm run lint:markdown
|
||||
|
||||
tests:
|
||||
name: Meteor ${{ matrix.meteor }} tests
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
# CHECKOUTS
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# CACHING
|
||||
- name: Install Meteor
|
||||
id: cache-meteor-install
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.meteor
|
||||
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
|
||||
restore-keys: |
|
||||
v1-meteor-
|
||||
|
||||
- name: Cache NPM dependencies
|
||||
id: cache-meteor-npm
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: v1-npm-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: |
|
||||
v1-npm-
|
||||
|
||||
- name: Cache Meteor build
|
||||
id: cache-meteor-build
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
.meteor/local/resolver-result-cache.json
|
||||
.meteor/local/plugin-cache
|
||||
.meteor/local/isopacks
|
||||
.meteor/local/bundler-cache/scanner
|
||||
key: v1-meteor_build_cache-${{ github.ref }}-${{ github.sha }}
|
||||
restore-key: |
|
||||
v1-meteor_build_cache-
|
||||
|
||||
- name: Setup meteor
|
||||
uses: meteorengineer/setup-meteor@v1
|
||||
with:
|
||||
meteor-release: '2.2'
|
||||
|
||||
- name: Install NPM Dependencies
|
||||
run: meteor npm ci
|
||||
|
||||
- name: Run Tests
|
||||
run: sh ./test-wekan.sh -cv
|
||||
|
||||
- name: Upload coverage
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: coverage-folder
|
||||
path: .coverage/
|
||||
|
||||
coverage:
|
||||
name: Coverage report
|
||||
runs-on: ubuntu-latest
|
||||
needs: [tests]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Download coverage
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: coverage-folder
|
||||
path: .coverage/
|
||||
|
||||
|
||||
- name: Coverage Report
|
||||
uses: VeryGoodOpenSource/very_good_coverage@v1.1.1
|
||||
with:
|
||||
path: ".coverage/lcov.info"
|
||||
min_coverage: 1 # TODO add tests and increase to 95!
|
||||
@@ -33,3 +33,8 @@ ehthumbs.db
|
||||
.meteor/local
|
||||
.devcontainer/docker-compose.extend.yml
|
||||
.devcontainer/volumes*/
|
||||
.coverage
|
||||
|
||||
# Helm chart
|
||||
# Chart dependencies
|
||||
/helm/wekan/**/*.tgz
|
||||
@@ -145,3 +145,5 @@ spacebars
|
||||
easylogic:summernote
|
||||
pascoual:pdfkit
|
||||
wekan-accounts-lockout
|
||||
lmieulet:meteor-coverage
|
||||
meteortesting:mocha
|
||||
@@ -69,6 +69,7 @@ lamhieu:meteorx@2.1.1
|
||||
lamhieu:unblock@1.0.0
|
||||
launch-screen@1.2.1
|
||||
livedata@1.0.18
|
||||
lmieulet:meteor-coverage@3.2.0
|
||||
localstorage@1.2.0
|
||||
logging@1.2.0
|
||||
matb33:collection-hooks@0.9.1
|
||||
@@ -82,6 +83,9 @@ meteorhacks:collection-utils@1.2.0
|
||||
meteorhacks:picker@1.0.3
|
||||
meteorhacks:subs-manager@1.6.4
|
||||
meteorspark:util@0.2.0
|
||||
meteortesting:browser-tests@1.3.4
|
||||
meteortesting:mocha@2.0.1
|
||||
meteortesting:mocha-core@8.0.1
|
||||
minifier-css@1.5.4
|
||||
minifier-js@2.6.0
|
||||
minifiers@1.1.8-faster-rebuild.0
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ sudo: required
|
||||
|
||||
env:
|
||||
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
|
||||
TRAVIS_NODE_VERSION: 12.22.1
|
||||
TRAVIS_NODE_VERSION: 12.22.6
|
||||
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_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
|
||||
|
||||
+493
-3
@@ -1,5 +1,495 @@
|
||||
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
|
||||
|
||||
Note: With Docker, please don't use latest tag. Only use release tags.
|
||||
See https://github.com/wekan/wekan/issues/3874
|
||||
|
||||
# v5.63 2021-10-07 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Allow setting custom kubernetes labels when using the helm chart](https://github.com/wekan/wekan/pull/4031).
|
||||
Thanks to ariep.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed SMTP by reverting MAIL_SERVICE changes](https://github.com/wekan/wekan/commit/9c99c5c3ae8d291df5305b3b6cd1825fc5cc2c21).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.62 2021-10-04 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Allow word match for rules -> title filter](https://github.com/wekan/wekan/pull/4025).
|
||||
Thanks to ilvar.
|
||||
- [CSV/TSV/Excel Export translatable and fixed, CSV semicolon option added](https://github.com/wekan/wekan/pull/4028).
|
||||
Thanks to Ben0it-T.
|
||||
- Added week numbers to dates at card, minicard, Custom Field dates, DatePicker and Calendar.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/d06ac09485dafb0256ae7fbe613ab2dbe00b70f3),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/9e6744d1e33b37e0d23eea5869ccac3ff37f7d53).
|
||||
Thanks to xet7.
|
||||
- [Confirm Archive Card](https://github.com/wekan/wekan/commit/6c3fcdcc4c446fd4c8dc4dca1b2846f6e3ea72e4).
|
||||
Thanks to xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Clean up /tmp after Docker build. This drastically reduces docker image size from ~280 MB to ~180 MB](https://github.com/wekan/wekan/pull/4026).
|
||||
Thanks to ilvar.
|
||||
- [Removed extra quotes from Export menu](https://github.com/wekan/wekan/commit/553652556468ac88c0691d4d688d5a922ef6a0c2).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.61 2021-09-25 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Search by name or username or emails address when adding a new user to a board](https://github.com/wekan/wekan/pull/4018).
|
||||
Thanks to Emile840.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed REST API, it shoud work now by Admin user](https://github.com/wekan/wekan/commit/e3a0dea85fa1f8e2f580f419b30cf5f36775d731).
|
||||
Reverted [Allow board members to use more of API of Wekan v5.35](https://github.com/wekan/wekan/commit/a719e8fda1f78bcbf9af6e7b4341f8be1d141e90).
|
||||
Thanks to tomhughes and xet7.
|
||||
- [Wekan Gantt GPL: Fix Tasks not displayed in Gantt screen](https://github.com/wekan/wekan-gantt-gpl/commit/72d464f5eb55501f08eb0cfd31fd5340380d7f3b).
|
||||
Thanks to MrLovegreen and khjde1207.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.60 2021-09-22 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Toggle opened card Custom Fields layout between Grid and one per row](https://github.com/wekan/wekan/commit/fc2fb9a081021663cc822bf2a687fda74cd0afa6).
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Updated Docker base image to newer Ubuntu](https://github.com/wekan/wekan/commit/442e6bf983ada47c26a15dbc1982c554118fa84d).
|
||||
Thanks to xet7.
|
||||
- [Try to add Docker image to GitHub Docker Image Registry](https://github.com/wekan/wekan/commit/70ba1eca787671879215726c16335a84e2b636c9).
|
||||
Thanks to xet7.
|
||||
- [Update build scripts to install npm from NodeSource, and meteor with npm](https://github.com/wekan/wekan/commit/c062621dd5486b60bdd200a9279a38b98fc0d410).
|
||||
Thanks to Meteor developers.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Try to fix Bug: Card number equal to #0 when creating a sub-task from a card](https://github.com/wekan/wekan/commit/4c659da5334641f558e77285f7ca47e562f7c853).
|
||||
Thanks to marcungeschikts, olivierlambert and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.59 2021-09-17 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Admin Panel/People: Possibility of adding a team to all selected users](https://github.com/wekan/wekan/pull/3996).
|
||||
Thanks to Emile840.
|
||||
- [Add / remove team members as board members when adding / removing team from board](https://github.com/wekan/wekan/pull/4000).
|
||||
Thanks to Emile840.
|
||||
- [Added more translations to: Admin Panel/People: Possibility of adding a team to all selected users](https://github.com/wekan/wekan/commit/3d9b7eb7ab41c6450b473f6f349d894f516c5487).
|
||||
Thanks to xet7.
|
||||
- [Enter new password 2 times when registering](https://github.com/wekan/wekan/commit/0da84f8f3eb91c5bf726e058f5ec74a7891d734b).
|
||||
Thanks to sh2515 and xet7.
|
||||
- Sum of cards. In Progress, not ready yet.
|
||||
[Part 1: Add Custom Field options for field sum](https://github.com/wekan/wekan/commit/8626b466b830adf6c671211bbd61b53b96ac5a49).
|
||||
[Part 2: Show option for custom field sum only for currency and number custom fields](https://github.com/wekan/wekan/commit/9bee6ae6663a5e1c974de2811f6a5fdd2d66efe5).
|
||||
Thanks to xet7.
|
||||
- [Admin Panel/Settings/Layout: Customize OIDC button text](https://github.com/wekan/wekan/pull/4011).
|
||||
Thanks to Emile840.
|
||||
- [At card attachments, show play and fullscreen controls for video webm/mp4/ogg, and play controls for audio mp3/ogg](https://github.com/wekan/wekan/commit/bd9fbedbf9fbe0181913876b930b335261cd2a0a).
|
||||
Thanks to luistiktok and xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Links to devel branch are broken; use master instead](https://github.com/wekan/wekan/pull/3993).
|
||||
Thanks to garrison.
|
||||
- [Fix first user creation for via OIDC](https://github.com/wekan/wekan/pull/3994).
|
||||
Thanks to ww-daniel-mora.
|
||||
- [When list has just one card, to show 'card' instead of 'cards'](https://github.com/wekan/wekan/pull/3999).
|
||||
Thanks to helioguardabaxo.
|
||||
- [Fix: Linked card cannot change date](https://github.com/wekan/wekan/pull/4002).
|
||||
Thanks to Ben0it-T.
|
||||
- [Try to fix: Can't delete attachment](https://github.com/wekan/wekan/commit/889ec1339a025a68ec919f059b9d58e8d94a3376).
|
||||
Thanks to luistiktok and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.58 2021-09-01 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [1) Edit profile and modify password menus are not displayed if SSO authentication is used.
|
||||
2) Board filtering will be displayed only if user belongs to atleast one team or
|
||||
organization](https://github.com/wekan/wekan/pull/3983).
|
||||
Thanks to Emile840.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.57 2021-08-31 Wekan release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Updated build scripts](https://github.com/wekan/wekan/commit/52fafe997659e933e403acb0ee0cffc99f74e35f).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.56 2021-08-31 Wekan release
|
||||
|
||||
This release adds the following updates:
|
||||
|
||||
- [Updated dependencies](https://github.com/wekan/wekan/commit/858967f4200783cadaa62d0e3436f661c772ede7).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.55 2021-08-31 Wekan release
|
||||
|
||||
This release adds to following CRITICAL SECURITY UPDATES:
|
||||
|
||||
- [Updated to Node.js v12.22.6](https://github.com/wekan/wekan/commit/48636892489dd01c6f6b930bafb94651c00859d8).
|
||||
Thanks to Node.js developers.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed bugs](https://github.com/wekan/wekan/pull/3981):
|
||||
1) Public Boards page shows only "Add Board" button, not any Public Boards.
|
||||
2) When at Admin Panel / Boards visibility / Private only, public board still accessible publicly by it's
|
||||
public board URL.
|
||||
Thanks to Emile840.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.54 2021-08-28 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Admin panel: Added a parameter to display or not the visibility of a board in private mode only](https://github.com/wekan/wekan/pull/3976).
|
||||
Thanks to Emile840.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix: Incorrect card numbers for sub tasks](https://github.com/wekan/wekan/pull/3977).
|
||||
Thanks to syndimann.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.53 2021-08-27 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Try to fix MAIL_FROM](https://github.com/wekan/wekan/commit/787df044190915c46e22159f3c40fb611846dc07).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# 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:
|
||||
|
||||
- [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:
|
||||
|
||||
- [Fixed Wekan JSON import fails](https://github.com/wekan/wekan/commit/0fa8fc8b506831a60649d100ce93c96f8f7b76f5).
|
||||
Thanks to BartoszBroda and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.40 2021-07-25 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fixed Delete of Planning Poker doesn't work](https://github.com/wekan/wekan/commit/18b6381d790848062752b211d48c84a2de268bd0).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.39 2021-07-24 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [LDAP AD Simple Auth](https://github.com/wekan/wekan/pull/3909).
|
||||
Thanks to indika-dev.
|
||||
- [LDAP AD Simple Auth: Added settings for all remaining Wekan Standalone (non-Sandstorm)
|
||||
platforms](https://github.com/wekan/wekan/commit/fe40f35d6d9b6293f3bdbf5bc0f3e8e708c59518)
|
||||
and Docs to https://github.com/wekan/wekan/wiki/LDAP-AD-Simple-Auth .
|
||||
Thanks to xet7.
|
||||
- [Convert Checklist Item to Card](https://github.com/wekan/wekan/pull/3910).
|
||||
Thanks to helioguardabaxo.
|
||||
- [Organizations and Teams are taken into account when displaying board at
|
||||
`All Boards` page](https://github.com/wekan/wekan/pull/3912).
|
||||
Thanks to Emile840.
|
||||
|
||||
and adds the following new translations:
|
||||
|
||||
- [English (Italy)](https://github.com/wekan/wekan/commit/ae73029dda63db361925e378202e6f8c137cf5bd).
|
||||
Thanks to translators.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.38 2021-07-18 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Added Code View `</>` button when `RICHER_CARD_COMMENT_EDITOR=true` and in desktop view
|
||||
where is enough screen space for buttons (not added to mobile
|
||||
view)](https://github.com/wekan/wekan/commit/ec01e5182d6b8c848d752540887a8113472b0226).
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- Updated dependencies
|
||||
[Part 1](https://github.com/wekan/wekan/commit/7024929881c05cad472de74c86517cf80c8e240c),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/609adcdf100db226c5f310577195afa4b1a4aead).
|
||||
Thanks to developers of dependencies.
|
||||
- [Updated to Node.js v12.22.3](https://github.com/wekan/wekan/commit/d538a01d1962464cf4cb001462669150eeafaa99).
|
||||
Thanks to Node.js developers.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed Line break which is wrongly added in Cards description and Cards
|
||||
comments](https://github.com/wekan/wekan/commit/ec01e5182d6b8c848d752540887a8113472b0226).
|
||||
Thanks to Emile840 and xet7.
|
||||
- [Fixed rebuild-wekan.sh](https://github.com/wekan/wekan/commit/1d5dd5e60fec151de6c7dce7ef4e758b562923b9).
|
||||
Thanks to xet7.
|
||||
- [Small fixes for ModernDark theme](https://github.com/wekan/wekan/pull/3902).
|
||||
Thanks to jghaanstra.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.37 2021-07-04 Wekan release
|
||||
|
||||
This release adds the following CRITICAL SECURITY UPDATES:
|
||||
|
||||
- [Updated to Node.js v12.22.2](https://github.com/wekan/wekan/commit/4feffd90e3f466609e09524e0ddccdafa2faef32).
|
||||
Thanks to Node.js developers.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Building OpenAPI docs is broken in Wekan v3.56](https://github.com/wekan/wekan/pull/3889).
|
||||
Thanks to bentiss.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.36 2021-06-29 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Added some controls and warning messages when user try to delete an organization or team that has
|
||||
at least one user belongs to it](https://github.com/wekan/wekan/pull/3865).
|
||||
Thanks to Emile840.
|
||||
- Shared Templates. In Progress.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/0a0cec6ef0eb55391608aade897004db430ba10a).
|
||||
Template Containers visible at All Boards page, with white border around board icon.
|
||||
[Part 2](https://github.com/wekan/wekan/commit/d1d4453120005de61eaf2cbadc6a7b9d80e75fc1).
|
||||
Ablity to Add Template Container, checkbox in Create Board popup.
|
||||
Do not create Template Container by default, when creating user.
|
||||
[Part 3](https://github.com/wekan/wekan/commit/7f17bc9fb03d6f4b43a2cd71ecc372e0f1b0f491).
|
||||
Template container titles "Card/List/Board Templates" automatically translated.
|
||||
Thanks to xet7.
|
||||
[Part 4](https://github.com/wekan/wekan/commit/3b4a44abb1c1c4339c3d1b00dfac1c69ec3684cd).
|
||||
Hide this Shared Templates feature while it's not finished yet.
|
||||
Added back creating Template Container by default, when creating user.
|
||||
Thanks to xet7.
|
||||
- [Added testsuite](https://github.com/wekan/wekan/pull/3872).
|
||||
Thanks to jankapunkt.
|
||||
- [Delete user at REST API and `Admin Panel/People/People`](https://github.com/wekan/wekan/commit/9e16a405d8ca32a4e1be9cf89f8f978a2985593c).
|
||||
There is still bug of leaving empty user avatars to boards: boards members, card members and assignees have
|
||||
empty users. So it would be better to delete user from all boards before deleting user.
|
||||
Thanks to darren-teo and xet7.
|
||||
|
||||
and adds the following improvements:
|
||||
|
||||
- [Removed unused exceljs from client bundle](https://github.com/wekan/wekan/pull/3871).
|
||||
This decreased Wekan browserside frontend amount of Javascript from 5.4 MB to 4.3 MB.
|
||||
Thanks to jankapunkt.
|
||||
- Added note: With Docker, please don't use latest tag. Only use release tags.
|
||||
See https://github.com/wekan/wekan/issues/3874 .
|
||||
[Part 1](https://github.com/wekan/wekan/commit/f18a57b059994b8a6a3588a69cf095fe599b3a90),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/c4cea9e71b467731fd8290538dd039b7691097af).
|
||||
Thanks to xet7.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fixed tests, that need to be in tests directory to not get build
|
||||
errors](https://github.com/wekan/wekan/commit/56197274b6c4782fa20c7d9b5b9d58255d1f830a).
|
||||
Thanks to xet7.
|
||||
- Try to fix tests.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/78555f57a7c2ba0fb3e3986608bcf11509af9a21),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/7f648720afa42a2b53bfdee7e709fd891eb33373),
|
||||
[Part 3](https://github.com/wekan/wekan/commit/0f34d407a43c8a63d882e69ea64ea17fc4b22c7b).
|
||||
Thanks to xet7.
|
||||
- [Fixed "Search All Boards" instructions are gone](https://github.com/wekan/wekan/commit/30ffcc924663f39406b250d93b14384a2f38ab6a).
|
||||
Thanks to ClaudiaK21 and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v5.35 2021-06-14 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
@@ -5364,7 +5854,7 @@ This release adds the following new features:
|
||||
and fixes the following bugs:
|
||||
|
||||
- Revert [Sandstorm API changes](https://github.com/wekan/wekan/commit/be03a191c4321c2f80116c0ee1ae6c826d882535)
|
||||
that were done at [Wekan v2.05](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v205-2019-01-27-wekan-release)
|
||||
that were done at [Wekan v2.05](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v205-2019-01-27-wekan-release)
|
||||
to fix #2143. Thanks to pantraining and xet7.
|
||||
|
||||
Thanks to above GitHub users and translators for contributions.
|
||||
@@ -5511,7 +6001,7 @@ Update translations. Thanks to translators.
|
||||
This release adds the following new features:
|
||||
|
||||
- [IFTTT Rules improvements](https://github.com/wekan/wekan/pull/2088). Thanks to Angtrim.
|
||||
- Add [find.sh](https://github.com/wekan/wekan/blob/devel/find.sh) bash script that ignores
|
||||
- Add [find.sh](https://github.com/wekan/wekan/blob/master/find.sh) bash script that ignores
|
||||
extra directories when searching. xet7 uses this a lot when developing. Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions.
|
||||
@@ -7022,7 +7512,7 @@ This release adds the following new features:
|
||||
|
||||
- [Checklist templates](https://github.com/wekan/wekan/pull/1470);
|
||||
- Added [Finnish language changelog](https://github.com/wekan/wekan/tree/devel/meta/t9n-changelog)
|
||||
and [more Finnish traslations](https://github.com/wekan/wekan/blob/devel/sandstorm-pkgdef.capnp)
|
||||
and [more Finnish traslations](https://github.com/wekan/wekan/blob/master/sandstorm-pkgdef.capnp)
|
||||
to Sandstorm.
|
||||
|
||||
Thanks to GitHub users erikturk and xet7 for their contributions.
|
||||
|
||||
+8
-6
@@ -1,8 +1,8 @@
|
||||
FROM quay.io/wekan/ubuntu:groovy-20210115
|
||||
FROM quay.io/wekan/ubuntu:hirsute-20210825
|
||||
LABEL maintainer="wekan"
|
||||
|
||||
# 2020-12-03:
|
||||
# - Above Ubuntu base image copied from Docker Hub ubuntu:groovy-20201125.2
|
||||
# 2021-09-18:
|
||||
# - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825
|
||||
# to Quay to avoid Docker Hub rate limits.
|
||||
|
||||
# Set the environment variables (defaults where required)
|
||||
@@ -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.1 \
|
||||
NODE_VERSION=v12.22.6 \
|
||||
METEOR_RELEASE=1.10.2 \
|
||||
USE_EDGE=false \
|
||||
METEOR_EDGE=1.5-beta.17 \
|
||||
@@ -64,6 +64,9 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
|
||||
LDAP_ENABLE=false \
|
||||
LDAP_PORT=389 \
|
||||
LDAP_HOST="" \
|
||||
LDAP_AD_SIMPLE_AUTH="" \
|
||||
LDAP_USER_AUTHENTICATION=false \
|
||||
LDAP_USER_AUTHENTICATION_FIELD=uid \
|
||||
LDAP_BASEDN="" \
|
||||
LDAP_LOGIN_FALLBACK=false \
|
||||
LDAP_RECONNECT=true \
|
||||
@@ -81,8 +84,6 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
|
||||
LDAP_ENCRYPTION=false \
|
||||
LDAP_CA_CERT="" \
|
||||
LDAP_REJECT_UNAUTHORIZED=false \
|
||||
LDAP_USER_AUTHENTICATION=false \
|
||||
LDAP_USER_AUTHENTICATION_FIELD=uid \
|
||||
LDAP_USER_SEARCH_FILTER="" \
|
||||
LDAP_USER_SEARCH_SCOPE="" \
|
||||
LDAP_USER_SEARCH_FIELD="" \
|
||||
@@ -308,6 +309,7 @@ RUN \
|
||||
apt-get remove --purge -y ${BUILD_DEPS} && \
|
||||
apt-get autoremove -y && \
|
||||
npm uninstall -g api2html &&\
|
||||
rm -R /tmp* && \
|
||||
rm -R /var/lib/apt/lists/* && \
|
||||
rm -R /home/wekan/.meteor && \
|
||||
rm -R /home/wekan/app && \
|
||||
|
||||
+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.1 \
|
||||
NODE_VERSION=v12.22.6 \
|
||||
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.1 \
|
||||
NODE_VERSION=v12.22.6 \
|
||||
NODE_ENV=production \
|
||||
NPM_VERSION=latest \
|
||||
WITH_API=true \
|
||||
|
||||
@@ -30,6 +30,11 @@ It's better than at chat where details get lost when chat scrolls up.
|
||||
|
||||
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
|
||||
|
||||
## Docker: Please only use Docker release tags
|
||||
|
||||
Note: With Docker, please don't use latest tag. Only use release tags.
|
||||
See https://github.com/wekan/wekan/issues/3874
|
||||
|
||||
## FAQ
|
||||
|
||||
**NOTE**:
|
||||
@@ -70,7 +75,7 @@ that by providing one-click installation on various platforms.
|
||||
Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
|
||||
Wekan on Sandstorm is not usually affected by any Standalone Wekan (Snap/Docker/Source) security issues.
|
||||
- [Reporting all new bugs immediately](https://github.com/wekan/wekan/issues).
|
||||
New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
|
||||
New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
|
||||
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of Wekan database once a day miminum.
|
||||
Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
|
||||
Some bug can cause Wekan board to not load at all, requiring manual fixing of database content.
|
||||
@@ -82,7 +87,7 @@ that by providing one-click installation on various platforms.
|
||||
[Developer Documentation][dev_docs]
|
||||
|
||||
- There is many companies and individuals contributing code to Wekan, to add features and bugfixes
|
||||
[many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
|
||||
[many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
|
||||
- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
|
||||
- [Commercial Support](https://wekan.team/commercial-support/).
|
||||
|
||||
|
||||
+4
-4
@@ -51,8 +51,8 @@ This also means all Standalone Wekan functionality works in offline local networ
|
||||
Wekan is used by companies that have [thousands of users](https://github.com/wekan/wekan/wiki/AWS) and at healthcare.
|
||||
|
||||
Wekan uses xss package for input fields like cards, as you can see from
|
||||
[package.json](https://github.com/wekan/wekan/blob/devel/package.json). Other used versions can be seen from
|
||||
[Meteor versions file](https://github.com/wekan/wekan/blob/devel/.meteor/versions).
|
||||
[package.json](https://github.com/wekan/wekan/blob/master/package.json). Other used versions can be seen from
|
||||
[Meteor versions file](https://github.com/wekan/wekan/blob/master/.meteor/versions).
|
||||
Forms can include markdown links, html, image tags etc like you see at https://wekan.github.io .
|
||||
It's possible to add attachments to cards, and markdown/html links to files.
|
||||
|
||||
@@ -69,7 +69,7 @@ access to outside of Wekan grain.
|
||||
Standalone Wekan only has password auth currently, there is work in progress to add
|
||||
[oauth2](https://github.com/wekan/wekan/pull/1578), [Openid](https://github.com/wekan/wekan/issues/538),
|
||||
[LDAP](https://github.com/wekan/wekan/issues/119) etc. If you need more login security for Standalone Wekan now,
|
||||
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
|
||||
it's possible add additional [Google Auth proxybouncer](https://github.com/wekan/wekan/wiki/Let's-Encrypt-and-Google-Auth) in front of password auth, and then use Google Authenticator for Google Auth. Standalone Wekan does have [brute force protection with eluck:accounts-lockout and browser-policy clickjacking protection](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v080-2018-04-04-wekan-release). You can also optionally use some [WAF](https://en.wikipedia.org/wiki/Web_application_firewall)
|
||||
like for example [AWS WAF](https://aws.amazon.com/waf/).
|
||||
|
||||
[All Wekan Platforms](https://github.com/wekan/wekan/wiki/Platforms)
|
||||
@@ -106,7 +106,7 @@ a security issue, we'd like to know about it, and also how to fix it:
|
||||
Typical already known or "no impact" bugs such as:
|
||||
|
||||
- Brute force password guessign. Currently there is
|
||||
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v080-2018-04-04-wekan-release).
|
||||
[brute force protection with eluck:accounts-lockout](https://github.com/wekan/wekan/blob/master/CHANGELOG.md#v080-2018-04-04-wekan-release).
|
||||
- Security issues related to that Wekan uses Meteor 1.6.0.1 related packages, and upgrading to newer
|
||||
Meteor 1.6.1 is complicated process that requires lots of changes to many dependency packages.
|
||||
Upgrading [has been tried many times, spending a lot of time](https://github.com/meteor/meteor/issues/9609)
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v5.35.0"
|
||||
appVersion: "v5.63.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}}}.
|
||||
|
||||
|
||||
@@ -113,8 +113,10 @@ BlazeComponent.extendComponent({
|
||||
).getLabelById(lastLabelId);
|
||||
if (lastLabel && (lastLabel.name === undefined || lastLabel.name === '')) {
|
||||
return lastLabel.color;
|
||||
} else {
|
||||
} else if (lastLabel.name !== undefined && lastLabel.name !== '') {
|
||||
return lastLabel.name;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -240,6 +242,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
|
||||
|
||||
@@ -13,26 +13,29 @@ template(name="board")
|
||||
+spinner
|
||||
|
||||
template(name="boardBody")
|
||||
.board-wrapper(class=currentBoard.colorClass)
|
||||
+sidebar
|
||||
.board-canvas.js-swimlanes(
|
||||
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
|
||||
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
|
||||
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
|
||||
if showOverlay.get
|
||||
.board-overlay
|
||||
if currentBoard.isTemplatesBoard
|
||||
each currentBoard.swimlanes
|
||||
+swimlane(this)
|
||||
else if isViewSwimlanes
|
||||
each currentBoard.swimlanes
|
||||
+swimlane(this)
|
||||
else if isViewLists
|
||||
+listsGroup(currentBoard)
|
||||
else if isViewCalendar
|
||||
+calendarView
|
||||
else
|
||||
+listsGroup(currentBoard)
|
||||
if notDisplayThisBoard
|
||||
| {{_ 'tableVisibilityMode-allowPrivateOnly'}}
|
||||
else
|
||||
.board-wrapper(class=currentBoard.colorClass)
|
||||
+sidebar
|
||||
.board-canvas.js-swimlanes(
|
||||
class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}"
|
||||
class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}"
|
||||
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
|
||||
if showOverlay.get
|
||||
.board-overlay
|
||||
if currentBoard.isTemplatesBoard
|
||||
each currentBoard.swimlanes
|
||||
+swimlane(this)
|
||||
else if isViewSwimlanes
|
||||
each currentBoard.swimlanes
|
||||
+swimlane(this)
|
||||
else if isViewLists
|
||||
+listsGroup(currentBoard)
|
||||
else if isViewCalendar
|
||||
+calendarView
|
||||
else
|
||||
+listsGroup(currentBoard)
|
||||
|
||||
template(name="calendarView")
|
||||
if isViewCalendar
|
||||
|
||||
@@ -33,6 +33,7 @@ BlazeComponent.extendComponent({
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
Meteor.subscribe('tableVisibilityModeSettings');
|
||||
this.showOverlay = new ReactiveVar(false);
|
||||
this.draggingActive = new ReactiveVar(false);
|
||||
this._isDragging = false;
|
||||
@@ -235,6 +236,16 @@ BlazeComponent.extendComponent({
|
||||
}
|
||||
},
|
||||
|
||||
notDisplayThisBoard(){
|
||||
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
|
||||
let currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue && currentBoard.permission == 'public'){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
isViewSwimlanes() {
|
||||
currentUser = Meteor.user();
|
||||
if (currentUser) {
|
||||
@@ -325,6 +336,7 @@ BlazeComponent.extendComponent({
|
||||
defaultView: 'agendaDay',
|
||||
editable: true,
|
||||
timezone: 'local',
|
||||
weekNumbers: true,
|
||||
header: {
|
||||
left: 'title today prev,next',
|
||||
center:
|
||||
|
||||
@@ -766,7 +766,15 @@ setBoardClear(color1,color2)
|
||||
.toggle-label:after, .board-color-modern .toggle-switch:checked~.toggle-label:after
|
||||
background-color: #819C5D !important
|
||||
|
||||
button, input:not([type=file]), select, textarea
|
||||
border-radius: 2px
|
||||
|
||||
/* Headers */
|
||||
&#header
|
||||
background-color: #262626
|
||||
border-bottom: 1px solid #555555;
|
||||
border-top: 1px solid #555555;
|
||||
|
||||
&#header-quick-access, .background-box, #header
|
||||
background-color: #333333
|
||||
|
||||
@@ -774,14 +782,16 @@ setBoardClear(color1,color2)
|
||||
padding: 4px
|
||||
font-size: 14px
|
||||
|
||||
&#header-quick-access .allBoards
|
||||
padding: 5px 10px 0 10px;
|
||||
|
||||
&#header-quick-access ul.header-quick-access-list
|
||||
margin: -5px 0 -5px 0
|
||||
|
||||
&#header #header-main-bar
|
||||
height: 30px
|
||||
padding-top: 3px
|
||||
padding-bottom: 3px
|
||||
|
||||
&#header
|
||||
box-shadow: 0 6px 6px -6px rgba(0,0,0,0.8)
|
||||
|
||||
&#header-quick-access ul
|
||||
overflow: visible
|
||||
|
||||
@@ -812,18 +822,23 @@ setBoardClear(color1,color2)
|
||||
/* Content */
|
||||
.board-canvas
|
||||
background: #2a2a2a
|
||||
padding: 10px 10px 0
|
||||
|
||||
/* Swimlanes */
|
||||
.swimlane .swimlane-header-wrap
|
||||
background-color: #666666
|
||||
background-color: #494949
|
||||
color: #cccccc
|
||||
padding: 4px 0
|
||||
margin-bottom: 10px
|
||||
|
||||
.swimlane .swimlane-header-wrap .swimlane-header
|
||||
font-family: Poppins
|
||||
|
||||
.swimlane .swimlane-header-wrap .swimlane-header-menu
|
||||
padding: 6px
|
||||
font-size: 16px
|
||||
|
||||
.swimlane .swimlane-header-wrap .swimlane-header-plus-icon
|
||||
font-size: 16px
|
||||
|
||||
.swimlane
|
||||
background: #2a2a2a
|
||||
line-height: 15px
|
||||
@@ -836,13 +851,19 @@ setBoardClear(color1,color2)
|
||||
border: 0px solid #666666
|
||||
flex: 0 0 265px;
|
||||
|
||||
.swimlane .list:first-child
|
||||
margin-left: 0
|
||||
|
||||
.swimlane .list:nth-child(even)
|
||||
background: #5f5f5f
|
||||
|
||||
.swimlane .list:nth-child(odd) .list-header
|
||||
background: #3b3b3b
|
||||
|
||||
.list-header
|
||||
background: #333333
|
||||
padding-top: 10px
|
||||
border-bottom: 6px solid #333333
|
||||
padding: 10px
|
||||
border-bottom: 0
|
||||
|
||||
.list-header .viewer
|
||||
padding-left: 10px
|
||||
@@ -852,7 +873,11 @@ setBoardClear(color1,color2)
|
||||
color: #eeeeee
|
||||
|
||||
.list-header .list-header-menu
|
||||
padding-top: 17px
|
||||
padding: 10px
|
||||
top: 0
|
||||
|
||||
.list-header .list-header-plus-icon
|
||||
color: #a6a6a6
|
||||
|
||||
.list-body
|
||||
scrollbar-width: thin
|
||||
@@ -883,35 +908,43 @@ setBoardClear(color1,color2)
|
||||
color: #ffffff
|
||||
|
||||
/* Mini Card */
|
||||
.minicard-wrapper
|
||||
margin-bottom: 12px
|
||||
|
||||
.minicard
|
||||
background-color: #444444
|
||||
color: #cccccc
|
||||
border-radius: 2px
|
||||
font-size: 0.9em
|
||||
font-size: 0.95em
|
||||
padding: 10px
|
||||
box-shadow: 0 4px 3px -3px rgba(0,0,0,0.8)
|
||||
border-bottom: 1px solid #666666
|
||||
|
||||
.minicard:hover
|
||||
background-color: #555555 !important
|
||||
background-color: #494949 !important
|
||||
|
||||
.minicard .minicard-labels
|
||||
margin-bottom: 4px
|
||||
|
||||
.minicard .card-label
|
||||
font-size: 11px
|
||||
font-weight: 400
|
||||
padding: 2px 6px 0
|
||||
padding: 1px 6px 0
|
||||
border-radius: 2px
|
||||
|
||||
.minicard .badges
|
||||
color: #bbbbbb
|
||||
|
||||
.minicard .date
|
||||
margin-top: 7px
|
||||
margin-top: 10px
|
||||
font-size: 11px
|
||||
|
||||
.card-date
|
||||
color: #555555
|
||||
color: #444444
|
||||
border-radius: 2px
|
||||
|
||||
.card-date.almost-due
|
||||
color: #666666
|
||||
color: #444444
|
||||
|
||||
.minicard.minicard-composer textarea.minicard-composer-textarea:focus
|
||||
background-color: #eeeeee
|
||||
@@ -970,11 +1003,17 @@ setBoardClear(color1,color2)
|
||||
|
||||
.card-details .checklist-item
|
||||
background-color: rgba(255,255,255,0.1)
|
||||
padding: 2px 8px
|
||||
border-radius: 3px
|
||||
padding: 4px 8px
|
||||
border-radius: 2px
|
||||
font-size: 13px
|
||||
margin-top: 5px
|
||||
|
||||
.card-details .checklist-item:hover
|
||||
background-color: rgba(255,255,255,0.2)
|
||||
|
||||
.card-details .checklist-item .item-title .viewer p
|
||||
max-width: auto
|
||||
|
||||
.card-details .check-box.materialCheckBox
|
||||
border-color: #ffffff
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
template(name="boardHeaderBar")
|
||||
h1.header-board-menu
|
||||
with currentBoard
|
||||
+viewer
|
||||
= title
|
||||
if $eq title 'Templates'
|
||||
| {{_ 'templates'}}
|
||||
else
|
||||
+viewer
|
||||
= title
|
||||
|
||||
.board-header-btns.left
|
||||
unless isMiniScreen
|
||||
@@ -144,14 +147,15 @@ template(name="boardVisibilityList")
|
||||
if visibilityCheck
|
||||
i.fa.fa-check
|
||||
span.sub-name {{_ 'private-desc'}}
|
||||
li
|
||||
with "public"
|
||||
a.js-select-visibility
|
||||
i.fa.fa-globe.colorful
|
||||
| {{_ 'public'}}
|
||||
if visibilityCheck
|
||||
i.fa.fa-check
|
||||
span.sub-name {{_ 'public-desc'}}
|
||||
if notAllowPrivateVisibilityOnly
|
||||
li
|
||||
with "public"
|
||||
a.js-select-visibility
|
||||
i.fa.fa-globe.colorful
|
||||
| {{_ 'public'}}
|
||||
if visibilityCheck
|
||||
i.fa.fa-check
|
||||
span.sub-name {{_ 'public-desc'}}
|
||||
|
||||
template(name="boardChangeVisibilityPopup")
|
||||
+boardVisibilityList
|
||||
@@ -225,6 +229,9 @@ template(name="createBoard")
|
||||
= " "
|
||||
| {{{_ 'board-private-info'}}}
|
||||
a.js-change-visibility {{_ 'change'}}.
|
||||
//a.flex.js-toggle-add-template-container
|
||||
// .materialCheckBox#add-template-container
|
||||
// span {{_ 'add-template-container'}}
|
||||
input.primary.wide(type="submit" value="{{_ 'create'}}")
|
||||
span.quiet
|
||||
| {{_ 'or'}}
|
||||
|
||||
@@ -194,6 +194,11 @@ const CreateBoard = BlazeComponent.extendComponent({
|
||||
this.visibilityMenuIsOpen = new ReactiveVar(false);
|
||||
this.visibility = new ReactiveVar('private');
|
||||
this.boardId = new ReactiveVar('');
|
||||
Meteor.subscribe('tableVisibilityModeSettings');
|
||||
},
|
||||
|
||||
notAllowPrivateVisibilityOnly(){
|
||||
return !TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
|
||||
},
|
||||
|
||||
visibilityCheck() {
|
||||
@@ -209,24 +214,79 @@ const CreateBoard = BlazeComponent.extendComponent({
|
||||
this.visibilityMenuIsOpen.set(!this.visibilityMenuIsOpen.get());
|
||||
},
|
||||
|
||||
toggleAddTemplateContainer() {
|
||||
$('#add-template-container').toggleClass('is-checked');
|
||||
},
|
||||
|
||||
onSubmit(event) {
|
||||
event.preventDefault();
|
||||
const title = this.find('.js-new-board-title').value;
|
||||
const visibility = this.visibility.get();
|
||||
|
||||
this.boardId.set(
|
||||
Boards.insert({
|
||||
title,
|
||||
permission: visibility,
|
||||
}),
|
||||
);
|
||||
const addTemplateContainer = $('#add-template-container.is-checked').length > 0;
|
||||
if (addTemplateContainer) {
|
||||
//const templateContainerId = Meteor.call('setCreateTemplateContainer');
|
||||
//Utils.goBoardId(templateContainerId);
|
||||
//alert('niinku template ' + Meteor.call('setCreateTemplateContainer'));
|
||||
|
||||
Swimlanes.insert({
|
||||
title: 'Default',
|
||||
boardId: this.boardId.get(),
|
||||
});
|
||||
this.boardId.set(
|
||||
Boards.insert({
|
||||
// title: TAPi18n.__('templates'),
|
||||
title: title,
|
||||
permission: 'private',
|
||||
type: 'template-container',
|
||||
}),
|
||||
);
|
||||
|
||||
Utils.goBoardId(this.boardId.get());
|
||||
// Insert the card templates swimlane
|
||||
Swimlanes.insert({
|
||||
// title: TAPi18n.__('card-templates-swimlane'),
|
||||
title: 'Card Templates',
|
||||
boardId: this.boardId.get(),
|
||||
sort: 1,
|
||||
type: 'template-container',
|
||||
}),
|
||||
|
||||
// Insert the list templates swimlane
|
||||
Swimlanes.insert(
|
||||
{
|
||||
// title: TAPi18n.__('list-templates-swimlane'),
|
||||
title: 'List Templates',
|
||||
boardId: this.boardId.get(),
|
||||
sort: 2,
|
||||
type: 'template-container',
|
||||
},
|
||||
);
|
||||
|
||||
// Insert the board templates swimlane
|
||||
Swimlanes.insert(
|
||||
{
|
||||
//title: TAPi18n.__('board-templates-swimlane'),
|
||||
title: 'Board Templates',
|
||||
boardId: this.boardId.get(),
|
||||
sort: 3,
|
||||
type: 'template-container',
|
||||
},
|
||||
);
|
||||
|
||||
Utils.goBoardId(this.boardId.get());
|
||||
|
||||
} else {
|
||||
const visibility = this.visibility.get();
|
||||
|
||||
this.boardId.set(
|
||||
Boards.insert({
|
||||
title,
|
||||
permission: visibility,
|
||||
}),
|
||||
);
|
||||
|
||||
Swimlanes.insert({
|
||||
title: 'Default',
|
||||
boardId: this.boardId.get(),
|
||||
});
|
||||
|
||||
Utils.goBoardId(this.boardId.get());
|
||||
}
|
||||
},
|
||||
|
||||
events() {
|
||||
@@ -240,6 +300,7 @@ const CreateBoard = BlazeComponent.extendComponent({
|
||||
submit: this.onSubmit,
|
||||
'click .js-import-board': Popup.open('chooseBoardSource'),
|
||||
'click .js-board-template': Popup.open('searchElement'),
|
||||
'click .js-toggle-add-template-container': this.toggleAddTemplateContainer,
|
||||
},
|
||||
];
|
||||
},
|
||||
@@ -254,6 +315,9 @@ const CreateBoard = BlazeComponent.extendComponent({
|
||||
}.register('headerBarCreateBoardPopup'));
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
notAllowPrivateVisibilityOnly(){
|
||||
return !TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
|
||||
},
|
||||
visibilityCheck() {
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
return this.currentData() === currentBoard.permission;
|
||||
|
||||
@@ -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
|
||||
@@ -17,47 +38,90 @@ template(name="boardList")
|
||||
button.js-accept-invite.primary {{_ 'accept'}}
|
||||
button.js-decline-invite {{_ 'decline'}}
|
||||
else
|
||||
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
|
||||
span.details
|
||||
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
|
||||
+viewer
|
||||
= title
|
||||
i.fa.js-star-board(
|
||||
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
|
||||
title="{{_ 'star-board-title'}}")
|
||||
p.board-list-item-desc
|
||||
+viewer
|
||||
= description
|
||||
if hasSpentTimeCards
|
||||
i.fa.js-has-spenttime-cards(
|
||||
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
|
||||
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
|
||||
if isMiniScreen
|
||||
i.fa.board-handle(
|
||||
class="fa-arrows"
|
||||
title="{{_ 'Drag board'}}")
|
||||
unless isMiniScreen
|
||||
if isSandstorm
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
else if isAdministrable
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
else if currentUser.isAdmin
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
if $eq type "template-container"
|
||||
a.js-open-board.template-container.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
|
||||
span.details
|
||||
span.board-list-item-name(title="{{_ 'template-container'}}")
|
||||
+viewer
|
||||
= title
|
||||
i.fa.js-star-board(
|
||||
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
|
||||
title="{{_ 'star-board-title'}}")
|
||||
p.board-list-item-desc
|
||||
+viewer
|
||||
= description
|
||||
if hasSpentTimeCards
|
||||
i.fa.js-has-spenttime-cards(
|
||||
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
|
||||
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
|
||||
if isMiniScreen
|
||||
i.fa.board-handle(
|
||||
class="fa-arrows"
|
||||
title="{{_ 'Drag board'}}")
|
||||
unless isMiniScreen
|
||||
if isSandstorm
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
else if isAdministrable
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
else if currentUser.isAdmin
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
else
|
||||
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
|
||||
span.details
|
||||
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
|
||||
+viewer
|
||||
= title
|
||||
i.fa.js-star-board(
|
||||
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
|
||||
title="{{_ 'star-board-title'}}")
|
||||
p.board-list-item-desc
|
||||
+viewer
|
||||
= description
|
||||
if hasSpentTimeCards
|
||||
i.fa.js-has-spenttime-cards(
|
||||
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
|
||||
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
|
||||
if isMiniScreen
|
||||
i.fa.board-handle(
|
||||
class="fa-arrows"
|
||||
title="{{_ 'Drag board'}}")
|
||||
unless isMiniScreen
|
||||
if isSandstorm
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
else if isAdministrable
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
else if currentUser.isAdmin
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
|
||||
template(name="boardListHeaderBar")
|
||||
h1 {{_ title }}
|
||||
|
||||
@@ -22,6 +22,7 @@ Template.boardListHeaderBar.helpers({
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
Meteor.subscribe('setting');
|
||||
Meteor.subscribe('tableVisibilityModeSettings');
|
||||
let currUser = Meteor.user();
|
||||
let userLanguage;
|
||||
if(currUser && currUser.profile){
|
||||
@@ -84,15 +85,103 @@ BlazeComponent.extendComponent({
|
||||
}
|
||||
});
|
||||
},
|
||||
userHasTeams(){
|
||||
if(Meteor.user().teams && Meteor.user().teams.length > 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
},
|
||||
teamsDatas() {
|
||||
if(Meteor.user().teams)
|
||||
return Meteor.user().teams;
|
||||
else
|
||||
return [];
|
||||
},
|
||||
userHasOrgs(){
|
||||
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
},
|
||||
orgsDatas() {
|
||||
if(Meteor.user().orgs)
|
||||
return Meteor.user().orgs;
|
||||
else
|
||||
return [];
|
||||
},
|
||||
userHasOrgsOrTeams(){
|
||||
let boolUserHasOrgs;
|
||||
if(Meteor.user().orgs && Meteor.user().orgs.length > 0)
|
||||
boolUserHasOrgs = true;
|
||||
else
|
||||
boolUserHasOrgs = false;
|
||||
|
||||
let boolUserHasTeams;
|
||||
if(Meteor.user().teams && Meteor.user().teams.length > 0)
|
||||
boolUserHasTeams = true;
|
||||
else
|
||||
boolUserHasTeams = false;
|
||||
|
||||
return (boolUserHasOrgs || boolUserHasTeams);
|
||||
},
|
||||
boards() {
|
||||
const query = {
|
||||
archived: false,
|
||||
type: 'board',
|
||||
let query = {
|
||||
//archived: false,
|
||||
////type: { $in: ['board','template-container'] },
|
||||
//type: 'board',
|
||||
$and: [
|
||||
{ archived: false },
|
||||
{ type: 'board' },
|
||||
{ $or:[] }
|
||||
]
|
||||
};
|
||||
if (FlowRouter.getRouteName() === 'home')
|
||||
query['members.userId'] = Meteor.userId();
|
||||
else query.permission = 'public';
|
||||
|
||||
let allowPrivateVisibilityOnly = TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly');
|
||||
|
||||
if (FlowRouter.getRouteName() === 'home'){
|
||||
query.$and[2].$or.push({'members.userId': Meteor.userId()});
|
||||
|
||||
if(allowPrivateVisibilityOnly !== undefined && allowPrivateVisibilityOnly.booleanValue){
|
||||
query.$and.push({'permission': 'private'});
|
||||
}
|
||||
const currUser = Users.findOne(Meteor.userId());
|
||||
|
||||
// const currUser = Users.findOne(Meteor.userId(), {
|
||||
// fields: {
|
||||
// orgs: 1,
|
||||
// teams: 1,
|
||||
// },
|
||||
// });
|
||||
|
||||
let orgIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : '';
|
||||
if(orgIdsUserBelongs && orgIdsUserBelongs != ''){
|
||||
let orgsIds = orgIdsUserBelongs.split(',');
|
||||
// for(let i = 0; i < orgsIds.length; i++){
|
||||
// query.$and[2].$or.push({'orgs.orgId': orgsIds[i]});
|
||||
// }
|
||||
|
||||
//query.$and[2].$or.push({'orgs': {$elemMatch : {orgId: orgsIds[0]}}});
|
||||
query.$and[2].$or.push({'orgs.orgId': {$in : orgsIds}});
|
||||
}
|
||||
|
||||
let teamIdsUserBelongs = currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : '';
|
||||
if(teamIdsUserBelongs && teamIdsUserBelongs != ''){
|
||||
let teamsIds = teamIdsUserBelongs.split(',');
|
||||
// for(let i = 0; i < teamsIds.length; i++){
|
||||
// query.$or[2].$or.push({'teams.teamId': teamsIds[i]});
|
||||
// }
|
||||
//query.$and[2].$or.push({'teams': { $elemMatch : {teamId: teamsIds[0]}}});
|
||||
query.$and[2].$or.push({'teams.teamId': {$in : teamsIds}});
|
||||
}
|
||||
}
|
||||
else if(allowPrivateVisibilityOnly !== undefined && !allowPrivateVisibilityOnly.booleanValue){
|
||||
query = {
|
||||
archived: false,
|
||||
//type: { $in: ['board','template-container'] },
|
||||
type: 'board',
|
||||
permission: 'public',
|
||||
};
|
||||
}
|
||||
|
||||
return Boards.find(query, {
|
||||
sort: { sort: 1 /* boards default sorting */ },
|
||||
@@ -169,6 +258,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";
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
|
||||
@@ -45,6 +45,9 @@ $spaceBetweenTiles = 16px
|
||||
text-decoration: none
|
||||
word-wrap: break-word
|
||||
|
||||
&.template-container
|
||||
border: 4px solid #fff
|
||||
|
||||
&.tile
|
||||
background-size: auto
|
||||
background-repeat: repeat
|
||||
@@ -226,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;
|
||||
@@ -26,6 +26,18 @@ template(name="attachmentsGalery")
|
||||
if isUploaded
|
||||
if isImage
|
||||
img.attachment-thumbnail-img(src="{{url}}")
|
||||
else if($eq extension 'mp3')
|
||||
video(width="100%" height="100%" controls="true")
|
||||
source(src="{{url}}" type="audio/mpeg")
|
||||
else if($eq extension 'ogg')
|
||||
video(width="100%" height="100%" controls="true")
|
||||
source(src="{{url}}" type="video/ogg")
|
||||
else if($eq extension 'webm')
|
||||
video(width="100%" height="100%" controls="true")
|
||||
source(src="{{url}}" type="video/webm")
|
||||
else if($eq extension 'mp4')
|
||||
video(width="100%" height="100%" controls="true")
|
||||
source(src="{{url}}" type="video/mp4")
|
||||
else
|
||||
span.attachment-thumbnail-ext= extension
|
||||
else
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
margin: 10px 1% 0
|
||||
text-align: center
|
||||
border-radius: 3px
|
||||
overflow: hidden
|
||||
overflow: auto
|
||||
background: darken(white, 7%)
|
||||
min-height: 120px
|
||||
|
||||
|
||||
@@ -79,18 +79,22 @@ template(name="cardCustomField-currency")
|
||||
|
||||
template(name="cardCustomField-date")
|
||||
if canModifyCard
|
||||
a.js-edit-date(title="{{showTitle}}" class="{{classes}}")
|
||||
if value
|
||||
div.card-date
|
||||
time(datetime="{{showISODate}}")
|
||||
| {{showDate}}
|
||||
else
|
||||
| {{_ 'edit'}}
|
||||
else
|
||||
a.js-edit-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
|
||||
if value
|
||||
div.card-date
|
||||
time(datetime="{{showISODate}}")
|
||||
| {{showDate}}
|
||||
div.card-date
|
||||
time(datetime="{{showISODate}}")
|
||||
| {{showDate}}
|
||||
b
|
||||
| {{showWeek}}
|
||||
else
|
||||
| {{_ 'edit'}}
|
||||
else
|
||||
if value
|
||||
div.card-date
|
||||
time(datetime="{{showISODate}}")
|
||||
| {{showDate}}
|
||||
b
|
||||
| {{showWeek}}
|
||||
|
||||
template(name="cardCustomField-dropdown")
|
||||
if canModifyCard
|
||||
|
||||
@@ -149,6 +149,10 @@ CardCustomField.register('cardCustomField');
|
||||
});
|
||||
}
|
||||
|
||||
showWeek() {
|
||||
return this.date.get().week().toString();
|
||||
}
|
||||
|
||||
showDate() {
|
||||
// this will start working once mquandalle:moment
|
||||
// is updated to at least moment.js 2.10.5
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
template(name="dateBadge")
|
||||
if canModifyCard
|
||||
a.js-edit-date.card-date(title="{{showTitle}}" class="{{classes}}")
|
||||
a.js-edit-date.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
|
||||
time(datetime="{{showISODate}}")
|
||||
| {{showDate}}
|
||||
b
|
||||
| {{showWeek}}
|
||||
else
|
||||
a.card-date(title="{{showTitle}}" class="{{classes}}")
|
||||
a.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
|
||||
time(datetime="{{showISODate}}")
|
||||
| {{showDate}}
|
||||
b
|
||||
| {{showWeek}}
|
||||
|
||||
template(name="dateCustomField")
|
||||
a(title="{{showTitle}}" class="{{classes}}")
|
||||
a(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}")
|
||||
time(datetime="{{showISODate}}")
|
||||
| {{showDate}}
|
||||
b
|
||||
| {{showWeek}}
|
||||
@@ -115,6 +115,10 @@ const CardDate = BlazeComponent.extendComponent({
|
||||
}, 60000);
|
||||
},
|
||||
|
||||
showWeek() {
|
||||
return this.date.get().week().toString();
|
||||
},
|
||||
|
||||
showDate() {
|
||||
// this will start working once mquandalle:moment
|
||||
// is updated to at least moment.js 2.10.5
|
||||
@@ -284,12 +288,25 @@ class CardCustomFieldDate extends CardDate {
|
||||
});
|
||||
}
|
||||
|
||||
classes() {
|
||||
return 'customfield-date';
|
||||
showWeek() {
|
||||
return this.date.get().week().toString();
|
||||
}
|
||||
|
||||
showDate() {
|
||||
// this will start working once mquandalle:moment
|
||||
// is updated to at least moment.js 2.10.5
|
||||
// until then, the date is displayed in the "L" format
|
||||
return this.date.get().calendar(null, {
|
||||
sameElse: 'llll',
|
||||
});
|
||||
}
|
||||
|
||||
showTitle() {
|
||||
return '';
|
||||
return `${this.date.get().format('LLLL')}`;
|
||||
}
|
||||
|
||||
classes() {
|
||||
return 'customfield-date';
|
||||
}
|
||||
|
||||
events() {
|
||||
|
||||
@@ -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
|
||||
@@ -224,8 +227,17 @@ template(name="cardDetails")
|
||||
|
||||
//.card-details-items
|
||||
if customFieldsWD
|
||||
hr
|
||||
.material-toggle-switch(title="{{_ 'change'}} {{_ 'custom-fields'}} {{_ 'layout'}}")
|
||||
if customFieldsGrid
|
||||
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton" checked="checked")
|
||||
else
|
||||
input.toggle-switch(type="checkbox" id="toggleCustomFieldsGridButton")
|
||||
label.toggle-label(for="toggleCustomFieldsGridButton")
|
||||
unless customFieldsGrid
|
||||
hr
|
||||
each customFieldsWD
|
||||
if customFieldsGrid
|
||||
hr
|
||||
.card-details-item.card-details-item-customfield
|
||||
h3.card-details-item-title
|
||||
i.fa.fa-list-alt
|
||||
@@ -705,8 +717,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)
|
||||
@@ -717,9 +730,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)
|
||||
@@ -812,6 +826,12 @@ template(name="cardDeletePopup")
|
||||
p {{_ "card-delete-suggest-archive"}}
|
||||
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
|
||||
|
||||
template(name="cardArchivePopup")
|
||||
p {{_ "card-archive-pop"}}
|
||||
unless archived
|
||||
p {{_ "card-archive-suggest-cancel"}}
|
||||
button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
|
||||
|
||||
template(name="deleteVotePopup")
|
||||
p {{_ "vote-delete-pop"}}
|
||||
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
|
||||
|
||||
@@ -43,6 +43,13 @@ BlazeComponent.extendComponent({
|
||||
this.calculateNextPeak();
|
||||
|
||||
Meteor.subscribe('unsaved-edits');
|
||||
|
||||
// this.findUsersOptions = new ReactiveVar({});
|
||||
// this.page = new ReactiveVar(1);
|
||||
// this.autorun(() => {
|
||||
// const limitUsers = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
// this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
|
||||
// });
|
||||
},
|
||||
|
||||
isWatching() {
|
||||
@@ -54,6 +61,11 @@ BlazeComponent.extendComponent({
|
||||
return Meteor.user().hasHiddenSystemMessages();
|
||||
},
|
||||
|
||||
customFieldsGrid() {
|
||||
return Meteor.user().hasCustomFieldsGrid();
|
||||
},
|
||||
|
||||
|
||||
cardMaximized() {
|
||||
return Meteor.user().hasCardMaximized();
|
||||
},
|
||||
@@ -180,7 +192,7 @@ BlazeComponent.extendComponent({
|
||||
integration,
|
||||
'CardSelected',
|
||||
params,
|
||||
() => {},
|
||||
() => { },
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -412,6 +424,9 @@ BlazeComponent.extendComponent({
|
||||
'click #toggleButton'() {
|
||||
Meteor.call('toggleSystemMessages');
|
||||
},
|
||||
'click #toggleCustomFieldsGridButton'() {
|
||||
Meteor.call('toggleCustomFieldsGrid');
|
||||
},
|
||||
'click .js-maximize-card-details'() {
|
||||
Meteor.call('toggleCardMaximized');
|
||||
autosize($('.card-details'));
|
||||
@@ -541,8 +556,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.]');
|
||||
@@ -627,6 +642,7 @@ Template.cardDetailsActionsPopup.events({
|
||||
'click .js-spent-time': Popup.open('editCardSpentTime'),
|
||||
'click .js-move-card': Popup.open('moveCard'),
|
||||
'click .js-copy-card': Popup.open('copyCard'),
|
||||
'click .js-convert-checklist-item-to-card': Popup.open('convertChecklistItemToCard'),
|
||||
'click .js-copy-checklist-cards': Popup.open('copyChecklistToManyCards'),
|
||||
'click .js-set-card-color': Popup.open('setCardColor'),
|
||||
'click .js-move-card-to-top'(event) {
|
||||
@@ -647,11 +663,11 @@ Template.cardDetailsActionsPopup.events({
|
||||
);
|
||||
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
|
||||
},
|
||||
'click .js-archive'(event) {
|
||||
event.preventDefault();
|
||||
this.archive();
|
||||
'click .js-archive': Popup.afterConfirm('cardArchive', function () {
|
||||
Popup.close();
|
||||
},
|
||||
this.archive();
|
||||
Utils.goBoardId(this.boardId);
|
||||
}),
|
||||
'click .js-more': Popup.open('cardMore'),
|
||||
'click .js-toggle-watch-card'() {
|
||||
const currentCard = this;
|
||||
@@ -666,6 +682,64 @@ Template.editCardTitleForm.onRendered(function () {
|
||||
autosize(this.$('.js-edit-card-title'));
|
||||
});
|
||||
|
||||
Template.cardMembersPopup.onCreated(function () {
|
||||
let currBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
let members = currBoard.activeMembers();
|
||||
|
||||
// let query = {
|
||||
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
|
||||
// };
|
||||
|
||||
// let boardTeamUsers = Users.find(query, {
|
||||
// sort: { sort: 1 },
|
||||
// });
|
||||
|
||||
// members = currBoard.activeMembers2(members, boardTeamUsers);
|
||||
|
||||
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 currBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
let members = currBoard.activeMembers();
|
||||
|
||||
// let query = {
|
||||
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
|
||||
// };
|
||||
|
||||
// let boardTeamUsers = Users.find(query, {
|
||||
// sort: { sort: 1 },
|
||||
// });
|
||||
|
||||
// members = currBoard.activeMembers2(members, boardTeamUsers);
|
||||
|
||||
if (filterTerm) {
|
||||
members = members
|
||||
.map(member => ({
|
||||
member,
|
||||
user: Users.findOne(member.userId)
|
||||
}))
|
||||
.filter(({ user }) =>
|
||||
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|
||||
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.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
|
||||
@@ -791,6 +865,34 @@ Template.copyCardPopup.events({
|
||||
},
|
||||
});
|
||||
|
||||
Template.convertChecklistItemToCardPopup.events({
|
||||
'click .js-done'() {
|
||||
const card = Cards.findOne(Session.get('currentCard'));
|
||||
const lSelect = $('.js-select-lists')[0];
|
||||
const listId = lSelect.options[lSelect.selectedIndex].value;
|
||||
const slSelect = $('.js-select-swimlanes')[0];
|
||||
const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
|
||||
const bSelect = $('.js-select-boards')[0];
|
||||
const boardId = bSelect.options[bSelect.selectedIndex].value;
|
||||
const textarea = $('#copy-card-title');
|
||||
const title = textarea.val().trim();
|
||||
|
||||
if (title) {
|
||||
const _id = Cards.insert({
|
||||
title: title,
|
||||
listId: listId,
|
||||
boardId: boardId,
|
||||
swimlaneId: swimlaneId,
|
||||
sort: 0,
|
||||
});
|
||||
Filter.addException(_id);
|
||||
|
||||
Popup.close();
|
||||
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Template.copyChecklistToManyCardsPopup.events({
|
||||
'click .js-done'() {
|
||||
const card = Cards.findOne(Session.get('currentCard'));
|
||||
@@ -990,9 +1092,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);
|
||||
@@ -1297,7 +1398,6 @@ BlazeComponent.extendComponent({
|
||||
Popup.close();
|
||||
},
|
||||
'click .js-remove-poker': Popup.afterConfirm('deletePoker', (event) => {
|
||||
event.preventDefault();
|
||||
this.currentCard.unsetPoker();
|
||||
Popup.close();
|
||||
}),
|
||||
@@ -1561,6 +1661,23 @@ EscapeActions.register(
|
||||
},
|
||||
);
|
||||
|
||||
Template.cardAssigneesPopup.onCreated(function () {
|
||||
let currBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
let members = currBoard.activeMembers();
|
||||
|
||||
// let query = {
|
||||
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
|
||||
// };
|
||||
|
||||
// let boardTeamUsers = Users.find(query, {
|
||||
// sort: { sort: 1 },
|
||||
// });
|
||||
|
||||
// members = currBoard.activeMembers2(members, boardTeamUsers);
|
||||
|
||||
this.members = new ReactiveVar(members);
|
||||
});
|
||||
|
||||
Template.cardAssigneesPopup.events({
|
||||
'click .js-select-assignee'(event) {
|
||||
const card = Cards.findOne(Session.get('currentCard'));
|
||||
@@ -1568,6 +1685,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({
|
||||
@@ -1578,6 +1699,10 @@ Template.cardAssigneesPopup.helpers({
|
||||
return _.contains(cardAssignees, this.userId);
|
||||
},
|
||||
|
||||
members() {
|
||||
return Template.instance().members.get();
|
||||
},
|
||||
|
||||
user() {
|
||||
return Users.findOne(this.userId);
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
@@ -237,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
|
||||
|
||||
@@ -80,6 +80,9 @@ template(name="editChecklistItemForm")
|
||||
span(title=createdAt) {{ moment createdAt }}
|
||||
if canModifyCard
|
||||
a.js-delete-checklist-item {{_ "delete"}}...
|
||||
a.js-convert-checklist-item-to-card
|
||||
i.fa.fa-copy
|
||||
| {{_ 'convertChecklistItemToCardPopup-title'}}
|
||||
|
||||
template(name="checklistItems")
|
||||
.checklist-items.js-checklist-items
|
||||
@@ -110,3 +113,32 @@ template(name='checklistItemDetail')
|
||||
.item-title(class="{{#if item.isFinished }}is-checked{{/if}}")
|
||||
+viewer
|
||||
= item.title
|
||||
|
||||
template(name="convertChecklistItemToCardPopup")
|
||||
label(for='convert-checklist-item-to-card-title') {{_ 'title'}}:
|
||||
textarea#copy-card-title.minicard-composer-textarea.js-card-title(autofocus)
|
||||
= item.title
|
||||
+boardsSwimlanesAndLists
|
||||
|
||||
template(name="boardsSwimlanesAndLists")
|
||||
unless currentUser.isWorker
|
||||
label {{_ 'boards'}}:
|
||||
select.js-select-boards(autofocus)
|
||||
each boards
|
||||
if $eq _id currentBoard._id
|
||||
option(value="{{_id}}" selected) {{_ 'current'}}
|
||||
else
|
||||
option(value="{{_id}}") {{title}}
|
||||
|
||||
label {{_ 'swimlanes'}}:
|
||||
select.js-select-swimlanes
|
||||
each swimlanes
|
||||
option(value="{{_id}}") {{title}}
|
||||
|
||||
label {{_ 'lists'}}:
|
||||
select.js-select-lists
|
||||
each aBoardLists
|
||||
option(value="{{_id}}") {{title}}
|
||||
|
||||
.edit-controls.clearfix
|
||||
button.primary.confirm.js-done {{_ 'done'}}
|
||||
@@ -1,3 +1,7 @@
|
||||
import Cards from '/models/cards';
|
||||
import Boards from '/models/boards';
|
||||
|
||||
const subManager = new SubsManager();
|
||||
const { calculateIndexData, capitalize } = Utils;
|
||||
|
||||
function initSorting(items) {
|
||||
@@ -206,6 +210,7 @@ BlazeComponent.extendComponent({
|
||||
'submit .js-edit-checklist-title': this.editChecklist,
|
||||
'submit .js-add-checklist-item': this.addChecklistItem,
|
||||
'submit .js-edit-checklist-item': this.editChecklistItem,
|
||||
'click .js-convert-checklist-item-to-card': Popup.open('convertChecklistItemToCard'),
|
||||
'click .js-delete-checklist-item': this.deleteItem,
|
||||
'click .confirm-checklist-delete': this.deleteChecklist,
|
||||
'focus .js-add-checklist-item': this.focusChecklistItem,
|
||||
@@ -215,6 +220,47 @@ BlazeComponent.extendComponent({
|
||||
},
|
||||
}).register('checklists');
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
subManager.subscribe('board', Session.get('currentBoard'), false);
|
||||
this.selectedBoardId = new ReactiveVar(Session.get('currentBoard'));
|
||||
},
|
||||
|
||||
boards() {
|
||||
return Boards.find(
|
||||
{
|
||||
archived: false,
|
||||
'members.userId': Meteor.userId(),
|
||||
_id: { $ne: Meteor.user().getTemplatesBoardId() },
|
||||
},
|
||||
{
|
||||
sort: { sort: 1 /* boards default sorting */ },
|
||||
},
|
||||
);
|
||||
},
|
||||
|
||||
swimlanes() {
|
||||
const board = Boards.findOne(this.selectedBoardId.get());
|
||||
return board.swimlanes();
|
||||
},
|
||||
|
||||
aBoardLists() {
|
||||
const board = Boards.findOne(this.selectedBoardId.get());
|
||||
return board.lists();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'change .js-select-boards'(event) {
|
||||
this.selectedBoardId.set($(event.currentTarget).val());
|
||||
subManager.subscribe('board', this.selectedBoardId.get(), false);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('boardsSwimlanesAndLists');
|
||||
|
||||
Template.checklists.helpers({
|
||||
hideCheckedItems() {
|
||||
const currentUser = Meteor.user();
|
||||
|
||||
@@ -159,7 +159,8 @@ textarea.js-add-checklist-item, textarea.js-edit-checklist-item
|
||||
padding-top: 2px
|
||||
padding-right: 10px;
|
||||
|
||||
.js-delete-checklist-item
|
||||
.js-delete-checklist-item,
|
||||
.js-convert-checklist-item-to-card
|
||||
margin: 0 0 0.5em 1.33em
|
||||
@extends .delete-text
|
||||
padding: 12px 0 0 0
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -37,6 +37,8 @@ BlazeComponent.extendComponent({
|
||||
? targetBoard.getDefaultSwimline()._id
|
||||
: targetSwimlane._id;
|
||||
|
||||
const nextCardNumber = targetBoard.getNextCardNumber();
|
||||
|
||||
if (title) {
|
||||
const _id = Cards.insert({
|
||||
title,
|
||||
@@ -49,6 +51,7 @@ BlazeComponent.extendComponent({
|
||||
sort: sortIndex,
|
||||
swimlaneId,
|
||||
type: 'cardType-card',
|
||||
cardNumber: nextCardNumber
|
||||
});
|
||||
|
||||
// In case the filter is active we need to add the newly inserted card in
|
||||
|
||||
@@ -4,6 +4,17 @@ template(name="listBody")
|
||||
if cards.count
|
||||
+inlinedForm(autoclose=false position="top")
|
||||
+addCardForm(listId=_id position="top")
|
||||
ul.sidebar-list
|
||||
each customFieldsSum
|
||||
li
|
||||
+viewer
|
||||
= name
|
||||
if $eq customFieldsSum.type "number"
|
||||
+viewer
|
||||
= value
|
||||
if $eq customFieldsSum.type "currency"
|
||||
+viewer
|
||||
= formattedCurrencyCustomFieldValue(value)
|
||||
each (cardsWithLimit (idOrNull ../../_id))
|
||||
a.minicard-wrapper.js-minicard(href=originRelativeUrl
|
||||
class="{{#if cardIsSelected}}is-selected{{/if}}"
|
||||
|
||||
@@ -13,6 +13,13 @@ BlazeComponent.extendComponent({
|
||||
return [];
|
||||
},
|
||||
|
||||
customFieldsSum() {
|
||||
return CustomFields.find({
|
||||
boardIds: { $in: [Session.get('currentBoard')] },
|
||||
showSumAtTopOfList: true,
|
||||
});
|
||||
},
|
||||
|
||||
openForm(options) {
|
||||
options = options || {};
|
||||
options.position = options.position || 'top';
|
||||
@@ -81,7 +88,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 +102,7 @@ BlazeComponent.extendComponent({
|
||||
sort: sortIndex,
|
||||
swimlaneId,
|
||||
type: cardType,
|
||||
cardNumber: nextCardNumber,
|
||||
linkedId,
|
||||
});
|
||||
|
||||
@@ -241,7 +251,7 @@ BlazeComponent.extendComponent({
|
||||
Boards.findOne(currentBoardId)
|
||||
.customFields()
|
||||
.fetch(),
|
||||
function(field) {
|
||||
function (field) {
|
||||
if (field.automaticallyOnCard || field.alwaysOnCard)
|
||||
arr.push({ _id: field._id, value: null });
|
||||
},
|
||||
@@ -552,7 +562,7 @@ BlazeComponent.extendComponent({
|
||||
board = Boards.findOne((Meteor.user().profile || {}).templatesBoardId);
|
||||
} else {
|
||||
// Prefetch first non-current board id
|
||||
board = Boards.findOne({
|
||||
board = Boards.find({
|
||||
archived: false,
|
||||
'members.userId': Meteor.userId(),
|
||||
_id: {
|
||||
@@ -750,17 +760,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() {
|
||||
|
||||
@@ -20,7 +20,7 @@ template(name="listHeader")
|
||||
|
||||
if showCardsCountForList cards.count
|
||||
|
|
||||
span(class="cardCount") {{cardsCount}} {{_ 'cards-count'}}
|
||||
span(class="cardCount") {{cardsCount}} {{cardsCountForListIsOne cards.count}}
|
||||
if isMiniScreen
|
||||
if currentList
|
||||
if isWatching
|
||||
|
||||
@@ -85,6 +85,14 @@ BlazeComponent.extendComponent({
|
||||
return limit >= 0 && count >= limit;
|
||||
},
|
||||
|
||||
cardsCountForListIsOne(count) {
|
||||
if (count === 1) {
|
||||
return TAPi18n.__('cards-count-one');
|
||||
} else {
|
||||
return TAPi18n.__('cards-count');
|
||||
}
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
|
||||
@@ -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) {
|
||||
@@ -50,7 +57,7 @@ Template.editor.onRendered(() => {
|
||||
['table', ['table']],
|
||||
//['insert', ['link', 'picture', 'video']], // iframe tag will be sanitized TODO if iframe[class=note-video-clip] can be added into safe list, insert video can be enabled
|
||||
['insert', ['link']], //, 'picture']], // modal popup has issue somehow :(
|
||||
['view', ['fullscreen', 'help']],
|
||||
['view', ['fullscreen', 'codeview', 'help']],
|
||||
];
|
||||
const cleanPastedHTML = function(input) {
|
||||
const badTags = [
|
||||
@@ -229,7 +236,7 @@ Template.editor.onRendered(() => {
|
||||
// (and multiplies by pasting more) by changing paste "p" to "br".
|
||||
// Fixes https://github.com/wekan/wekan/2890 .
|
||||
// == Fix Start ==
|
||||
//someNote.execCommand('defaultParagraphSeparator', false, 'br');
|
||||
someNote.execCommand('defaultParagraphSeparator', false, 'br');
|
||||
// == Fix End ==
|
||||
const original = someNote.summernote('code');
|
||||
const cleaned = cleanPastedHTML(original); //this is where to call whatever clean function you want. I have mine in a different file, called CleanPastedHTML.
|
||||
@@ -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;
|
||||
|
||||
@@ -158,40 +158,42 @@ class GlobalSearchComponent extends CardSearchPagedComponent {
|
||||
['# ', 'globalSearch-instructions-heading'],
|
||||
['\n', 'globalSearch-instructions-description'],
|
||||
['\n\n', 'globalSearch-instructions-operators'],
|
||||
['\n* ', 'globalSearch-instructions-operator-board'],
|
||||
['\n* ', 'globalSearch-instructions-operator-list'],
|
||||
['\n* ', 'globalSearch-instructions-operator-swimlane'],
|
||||
['\n* ', 'globalSearch-instructions-operator-comment'],
|
||||
['\n* ', 'globalSearch-instructions-operator-label'],
|
||||
['\n* ', 'globalSearch-instructions-operator-hash'],
|
||||
['\n* ', 'globalSearch-instructions-operator-user'],
|
||||
['\n* ', 'globalSearch-instructions-operator-at'],
|
||||
['\n* ', 'globalSearch-instructions-operator-member'],
|
||||
['\n* ', 'globalSearch-instructions-operator-assignee'],
|
||||
['\n* ', 'globalSearch-instructions-operator-creator'],
|
||||
['\n* ', 'globalSearch-instructions-operator-due'],
|
||||
['\n* ', 'globalSearch-instructions-operator-created'],
|
||||
['\n* ', 'globalSearch-instructions-operator-modified'],
|
||||
['\n* ', 'globalSearch-instructions-operator-status'],
|
||||
['\n * ', 'globalSearch-instructions-status-archived'],
|
||||
['\n * ', 'globalSearch-instructions-status-public'],
|
||||
['\n * ', 'globalSearch-instructions-status-private'],
|
||||
['\n * ', 'globalSearch-instructions-status-all'],
|
||||
['\n * ', 'globalSearch-instructions-status-ended'],
|
||||
['\n* ', 'globalSearch-instructions-operator-has'],
|
||||
['\n* ', 'globalSearch-instructions-operator-sort'],
|
||||
['\n* ', 'globalSearch-instructions-operator-limit'],
|
||||
['\n- ', 'globalSearch-instructions-operator-board'],
|
||||
['\n- ', 'globalSearch-instructions-operator-list'],
|
||||
['\n- ', 'globalSearch-instructions-operator-swimlane'],
|
||||
['\n- ', 'globalSearch-instructions-operator-comment'],
|
||||
['\n- ', 'globalSearch-instructions-operator-label'],
|
||||
['\n- ', 'globalSearch-instructions-operator-hash'],
|
||||
['\n- ', 'globalSearch-instructions-operator-user'],
|
||||
['\n- ', 'globalSearch-instructions-operator-at'],
|
||||
['\n- ', 'globalSearch-instructions-operator-member'],
|
||||
['\n- ', 'globalSearch-instructions-operator-assignee'],
|
||||
['\n- ', 'globalSearch-instructions-operator-creator'],
|
||||
['\n- ', 'globalSearch-instructions-operator-due'],
|
||||
['\n- ', 'globalSearch-instructions-operator-created'],
|
||||
['\n- ', 'globalSearch-instructions-operator-modified'],
|
||||
['\n- ', 'globalSearch-instructions-operator-status'],
|
||||
['\n - ', 'globalSearch-instructions-status-archived'],
|
||||
['\n - ', 'globalSearch-instructions-status-public'],
|
||||
['\n - ', 'globalSearch-instructions-status-private'],
|
||||
['\n - ', 'globalSearch-instructions-status-all'],
|
||||
['\n - ', 'globalSearch-instructions-status-ended'],
|
||||
['\n- ', 'globalSearch-instructions-operator-has'],
|
||||
['\n- ', 'globalSearch-instructions-operator-sort'],
|
||||
['\n- ', 'globalSearch-instructions-operator-limit'],
|
||||
['\n## ', 'heading-notes'],
|
||||
['\n* ', 'globalSearch-instructions-notes-1'],
|
||||
['\n* ', 'globalSearch-instructions-notes-2'],
|
||||
['\n* ', 'globalSearch-instructions-notes-3'],
|
||||
['\n* ', 'globalSearch-instructions-notes-3-2'],
|
||||
['\n* ', 'globalSearch-instructions-notes-4'],
|
||||
['\n* ', 'globalSearch-instructions-notes-5'],
|
||||
['\n- ', 'globalSearch-instructions-notes-1'],
|
||||
['\n- ', 'globalSearch-instructions-notes-2'],
|
||||
['\n- ', 'globalSearch-instructions-notes-3'],
|
||||
['\n- ', 'globalSearch-instructions-notes-3-2'],
|
||||
['\n- ', 'globalSearch-instructions-notes-4'],
|
||||
['\n- ', 'globalSearch-instructions-notes-5'],
|
||||
].forEach(([prefix, instruction]) => {
|
||||
text += `${prefix}${TAPi18n.__(instruction, tags)}`;
|
||||
text += `${prefix}${TAPi18n.__(instruction, tags)}`
|
||||
// Replace *<text>* with `<text>` so markdown shows correctly
|
||||
.replace(/\*\</, '`<')
|
||||
.replace(/\>\*/, '\>\`')
|
||||
});
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,12 @@ Template.userFormsLayout.onCreated(function() {
|
||||
Meteor.subscribe('setting', {
|
||||
onReady() {
|
||||
templateInstance.currentSetting.set(Settings.findOne());
|
||||
let currSetting = templateInstance.currentSetting.curValue;
|
||||
let oidcBtnElt = $("#at-oidc");
|
||||
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
|
||||
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
|
||||
oidcBtnElt.html(htmlvalue);
|
||||
}
|
||||
return this.stop();
|
||||
},
|
||||
});
|
||||
@@ -86,12 +92,16 @@ 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') {
|
||||
name = 'Latviešu';
|
||||
} else if (lang.name === 'latviešu valoda') {
|
||||
name = 'Latviešu';
|
||||
} else if (lang.name === 'en-IT') {
|
||||
name = 'English (Italy)';
|
||||
} else if (lang.name === 'Español') {
|
||||
name = 'español';
|
||||
} else if (lang.name === 'es_419') {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -40,6 +40,11 @@ template(name="people")
|
||||
| {{_ 'search'}}
|
||||
.ext-box-right
|
||||
span {{#unless isMiniScreen}}{{_ 'people-number'}}{{/unless}} #{peopleNumber}
|
||||
.divAddOrRemoveTeam#divAddOrRemoveTeam
|
||||
button#addOrRemoveTeam
|
||||
i.fa.fa-edit
|
||||
| {{_ 'add'}} / {{_ 'delete'}} {{_ 'teams'}}
|
||||
|
||||
.content-body
|
||||
.side-menu
|
||||
ul
|
||||
@@ -97,9 +102,12 @@ template(name="teamGeneral")
|
||||
+teamRow(teamId=team._id)
|
||||
|
||||
template(name="peopleGeneral")
|
||||
#divAddOrRemoveTeamContainer
|
||||
+modifyTeamsUsers
|
||||
table
|
||||
tbody
|
||||
tr
|
||||
th
|
||||
th {{_ 'username'}}
|
||||
th {{_ 'fullname'}}
|
||||
th {{_ 'initials'}}
|
||||
@@ -202,6 +210,12 @@ template(name="teamRow")
|
||||
|
||||
template(name="peopleRow")
|
||||
tr
|
||||
if userData.loginDisabled
|
||||
td
|
||||
input.selectUserChkBox(type="checkbox", disabled="disabled", id="{{userData._id}}")
|
||||
else
|
||||
td
|
||||
input.selectUserChkBox(type="checkbox", id="{{userData._id}}")
|
||||
if userData.loginDisabled
|
||||
td.username <s>{{ userData.username }}</s>
|
||||
else
|
||||
@@ -342,7 +356,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
|
||||
@@ -453,6 +467,24 @@ template(name="newTeamPopup")
|
||||
div.buttonsContainer
|
||||
input.primary.wide(type="submit" value="{{_ 'save'}}")
|
||||
|
||||
template(name="modifyTeamsUsers")
|
||||
label
|
||||
| {{_ 'teams'}}
|
||||
select.js-teamsUser#jsteamsUser
|
||||
each value in teamsDatas
|
||||
option(value="{{value._id}}") {{_ value.teamDisplayName}}
|
||||
hr
|
||||
label
|
||||
| {{_ 'r-action'}}
|
||||
.form-group.flex
|
||||
input.wekan-form-control#addAction(type="radio" name="action" value="true" checked="checked")
|
||||
span {{_ 'add'}}
|
||||
input.wekan-form-control#deleteAction(type="radio" name="action" value="false")
|
||||
span {{_ 'delete'}}
|
||||
div.buttonsContainer
|
||||
input.primary.wide#addTeamBtn(type="submit" value="{{_ 'save'}}")
|
||||
input.primary.wide#cancelBtn(type="submit" value="{{_ 'cancel'}}")
|
||||
|
||||
template(name="newUserPopup")
|
||||
form
|
||||
//label.hide.userId(type="text" value=user._id)
|
||||
@@ -469,7 +501,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
|
||||
@@ -531,6 +563,9 @@ template(name="settingsOrgPopup")
|
||||
ul.pop-over-list
|
||||
li
|
||||
form
|
||||
label#deleteOrgWarningMessage.hide
|
||||
| {{_ 'delete-org-warning-message'}}
|
||||
br
|
||||
label
|
||||
| {{_ 'delete-org-confirm-popup'}}
|
||||
br
|
||||
@@ -552,6 +587,9 @@ template(name="settingsTeamPopup")
|
||||
ul.pop-over-list
|
||||
li
|
||||
form
|
||||
label#deleteTeamWarningMessage.hide
|
||||
| {{_ 'delete-team-warning-message'}}
|
||||
br
|
||||
label
|
||||
| {{_ 'delete-team-confirm-popup'}}
|
||||
br
|
||||
@@ -565,15 +603,20 @@ template(name="settingsUserPopup")
|
||||
a.impersonate-user
|
||||
i.fa.fa-user
|
||||
| {{_ 'impersonate-user'}}
|
||||
//hr
|
||||
//li
|
||||
// form
|
||||
// label.hide.userId(type="text" value=user._id)
|
||||
// div.buttonsContainer
|
||||
// input#deleteButton.card-details-red.right.wide(type="button" value="{{_ 'delete'}}")
|
||||
// Delete is not enabled yet, because it does leave empty user avatars
|
||||
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
|
||||
// to boards: boards members, card members and assignees have
|
||||
// empty users. See:
|
||||
// empty users. So it is better to remove user from all boards before removing user.
|
||||
// See:
|
||||
// - wekan/client/components/settings/peopleBody.jade deleteButton
|
||||
// - wekan/client/components/settings/peopleBody.js deleteButton
|
||||
// - wekan/client/components/sidebar/sidebar.js Popup.afterConfirm('removeMember'
|
||||
|
||||
@@ -2,6 +2,7 @@ const orgsPerPage = 25;
|
||||
const teamsPerPage = 25;
|
||||
const usersPerPage = 25;
|
||||
let userOrgsTeamsAction = ""; //poosible actions 'addOrg', 'addTeam', 'removeOrg' or 'removeTeam' when adding or modifying a user
|
||||
let selectedUserChkBoxUserIds = [];
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
mixins() {
|
||||
@@ -81,6 +82,9 @@ BlazeComponent.extendComponent({
|
||||
'click #searchButton'() {
|
||||
this.filterPeople();
|
||||
},
|
||||
'click #addOrRemoveTeam'(){
|
||||
document.getElementById("divAddOrRemoveTeamContainer").style.display = 'block';
|
||||
},
|
||||
'keydown #searchInput'(event) {
|
||||
if (event.keyCode === 13 && !event.shiftKey) {
|
||||
this.filterPeople();
|
||||
@@ -385,11 +389,111 @@ BlazeComponent.extendComponent({
|
||||
{
|
||||
'click a.edit-user': Popup.open('editUser'),
|
||||
'click a.more-settings-user': Popup.open('settingsUser'),
|
||||
'click .selectUserChkBox': function(ev){
|
||||
if(ev.currentTarget){
|
||||
if(ev.currentTarget.checked){
|
||||
if(!selectedUserChkBoxUserIds.includes(ev.currentTarget.id)){
|
||||
selectedUserChkBoxUserIds.push(ev.currentTarget.id);
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(selectedUserChkBoxUserIds.includes(ev.currentTarget.id)){
|
||||
let index = selectedUserChkBoxUserIds.indexOf(ev.currentTarget.id);
|
||||
if(index > -1)
|
||||
selectedUserChkBoxUserIds.splice(index, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(selectedUserChkBoxUserIds.length > 0)
|
||||
document.getElementById("divAddOrRemoveTeam").style.display = 'block';
|
||||
else
|
||||
document.getElementById("divAddOrRemoveTeam").style.display = 'none';
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('peopleRow');
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {},
|
||||
teamsDatas() {
|
||||
return Team.find({}, {sort: { createdAt: -1 }});
|
||||
},
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'click #cancelBtn': function(){
|
||||
let selectedElt = document.getElementById("jsteamsUser");
|
||||
document.getElementById("divAddOrRemoveTeamContainer").style.display = 'none';
|
||||
},
|
||||
'click #addTeamBtn': function(){
|
||||
let selectedElt;
|
||||
let selectedEltValue;
|
||||
let selectedEltValueId;
|
||||
let userTms = [];
|
||||
let currentUser;
|
||||
let currUserTeamIndex;
|
||||
|
||||
selectedElt = document.getElementById("jsteamsUser");
|
||||
selectedEltValue = selectedElt.options[selectedElt.selectedIndex].text;
|
||||
selectedEltValueId = selectedElt.options[selectedElt.selectedIndex].value;
|
||||
|
||||
if(document.getElementById('addAction').checked){
|
||||
for(let i = 0; i < selectedUserChkBoxUserIds.length; i++){
|
||||
currentUser = Users.findOne(selectedUserChkBoxUserIds[i]);
|
||||
userTms = currentUser.teams;
|
||||
if(userTms == undefined || userTms.length == 0){
|
||||
userTms = [];
|
||||
userTms.push({
|
||||
"teamId": selectedEltValueId,
|
||||
"teamDisplayName": selectedEltValue,
|
||||
})
|
||||
}
|
||||
else if(userTms.length > 0)
|
||||
{
|
||||
currUserTeamIndex = userTms.findIndex(function(t){ return t.teamId == selectedEltValueId});
|
||||
if(currUserTeamIndex == -1){
|
||||
userTms.push({
|
||||
"teamId": selectedEltValueId,
|
||||
"teamDisplayName": selectedEltValue,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Users.update(selectedUserChkBoxUserIds[i], {
|
||||
$set:{
|
||||
teams: userTms
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
else{
|
||||
for(let i = 0; i < selectedUserChkBoxUserIds.length; i++){
|
||||
currentUser = Users.findOne(selectedUserChkBoxUserIds[i]);
|
||||
userTms = currentUser.teams;
|
||||
if(userTms !== undefined || userTms.length > 0)
|
||||
{
|
||||
currUserTeamIndex = userTms.findIndex(function(t){ return t.teamId == selectedEltValueId});
|
||||
if(currUserTeamIndex != -1){
|
||||
userTms.splice(currUserTeamIndex, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Users.update(selectedUserChkBoxUserIds[i], {
|
||||
$set:{
|
||||
teams: userTms
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById("divAddOrRemoveTeamContainer").style.display = 'none';
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('modifyTeamsUsers');
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
events() {
|
||||
return [
|
||||
@@ -551,12 +655,15 @@ Template.editUserPopup.events({
|
||||
let userTeamsList = userTeams.split(",");
|
||||
let userTeamsIdsList = userTeamsIds.split(",");
|
||||
let userTms = [];
|
||||
for(let i = 0; i < userTeamsList.length; i++){
|
||||
userTms.push({
|
||||
"teamId": userTeamsIdsList[i],
|
||||
"teamDisplayName": userTeamsList[i],
|
||||
})
|
||||
if(userTeams != ''){
|
||||
for(let i = 0; i < userTeamsList.length; i++){
|
||||
userTms.push({
|
||||
"teamId": userTeamsIdsList[i],
|
||||
"teamDisplayName": userTeamsList[i],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Users.update(this.userId, {
|
||||
$set:{
|
||||
teams: userTms
|
||||
@@ -566,12 +673,15 @@ Template.editUserPopup.events({
|
||||
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(userOrgs != ''){
|
||||
for(let i = 0; i < userOrgsList.length; i++){
|
||||
userOrganizations.push({
|
||||
"orgId": userOrgsIdsList[i],
|
||||
"orgDisplayName": userOrgsList[i],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Users.update(this.userId, {
|
||||
$set:{
|
||||
orgs: userOrganizations
|
||||
@@ -724,7 +834,7 @@ UpdateUserOrgsOrTeamsElement = function(isNewUser = false){
|
||||
lstInputValuesIds = [];
|
||||
}
|
||||
index = lstInputValues.indexOf(selectedEltValue);
|
||||
indexId = lstInputValuesIds.indexOf(selectedEltValue);
|
||||
indexId = lstInputValuesIds.indexOf(selectedEltValueId);
|
||||
if(userOrgsTeamsAction == "addOrg" || userOrgsTeamsAction == "addTeam"){
|
||||
if(index <= -1 && selectedEltValueId != "-1"){
|
||||
lstInputValues.push(selectedEltValue);
|
||||
@@ -833,20 +943,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(
|
||||
@@ -923,6 +1037,16 @@ Template.newUserPopup.events({
|
||||
Template.settingsOrgPopup.events({
|
||||
'click #deleteButton'(event) {
|
||||
event.preventDefault();
|
||||
if(Users.find({"orgs.orgId": this.orgId}).count() > 0)
|
||||
{
|
||||
let orgClassList = document.getElementById("deleteOrgWarningMessage").classList;
|
||||
if(orgClassList.contains('hide'))
|
||||
{
|
||||
orgClassList.remove('hide');
|
||||
document.getElementById("deleteOrgWarningMessage").style.color = "red";
|
||||
}
|
||||
return;
|
||||
}
|
||||
Org.remove(this.orgId);
|
||||
Popup.close();
|
||||
}
|
||||
@@ -931,6 +1055,16 @@ Template.settingsOrgPopup.events({
|
||||
Template.settingsTeamPopup.events({
|
||||
'click #deleteButton'(event) {
|
||||
event.preventDefault();
|
||||
if(Users.find({"teams.teamId": this.teamId}).count() > 0)
|
||||
{
|
||||
let teamClassList = document.getElementById("deleteTeamWarningMessage").classList;
|
||||
if(teamClassList.contains('hide'))
|
||||
{
|
||||
teamClassList.remove('hide');
|
||||
document.getElementById("deleteTeamWarningMessage").style.color = "red";
|
||||
}
|
||||
return;
|
||||
}
|
||||
Team.remove(this.teamId);
|
||||
Popup.close();
|
||||
}
|
||||
@@ -949,10 +1083,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'
|
||||
@@ -960,7 +1097,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();
|
||||
},
|
||||
|
||||
@@ -55,3 +55,31 @@ table
|
||||
|
||||
.js-teams,.js-teamsNewUser
|
||||
display: none;
|
||||
|
||||
.selectUserChkBox
|
||||
position: static !important;
|
||||
visibility: visible !important;
|
||||
left: 0 !important;
|
||||
|
||||
#divAddOrRemoveTeam
|
||||
background: green;
|
||||
display: none;
|
||||
|
||||
#addOrRemoveTeam
|
||||
background: green;
|
||||
color: white;
|
||||
|
||||
#divAddOrRemoveTeamContainer
|
||||
display: none;
|
||||
margin: auto;
|
||||
width: 50%;
|
||||
border: 3px solid green;
|
||||
padding: 10px;
|
||||
|
||||
#cancelBtn
|
||||
margin-left: 5% !important;
|
||||
background: orange;
|
||||
color: white;
|
||||
|
||||
#deleteAction
|
||||
margin-left: 5% !important;
|
||||
@@ -22,6 +22,10 @@ template(name="setting")
|
||||
a.js-setting-menu(data-id="account-setting")
|
||||
i.fa.fa-users
|
||||
| {{_ 'accounts'}}
|
||||
li
|
||||
a.js-setting-menu(data-id="tableVisibilityMode-setting")
|
||||
i.fa.fa-eye
|
||||
| {{_ 'tableVisibilityMode'}}
|
||||
li
|
||||
a.js-setting-menu(data-id="announcement-setting")
|
||||
i.fa.fa-bullhorn
|
||||
@@ -44,6 +48,8 @@ template(name="setting")
|
||||
+email
|
||||
else if accountSetting.get
|
||||
+accountSettings
|
||||
else if tableVisibilityModeSetting.get
|
||||
+tableVisibilityModeSettings
|
||||
else if announcementSetting.get
|
||||
+announcementSettings
|
||||
else if layoutSetting.get
|
||||
@@ -96,7 +102,7 @@ template(name='email')
|
||||
// li.smtp-form
|
||||
// .title {{_ 'smtp-username'}}
|
||||
// .form-group
|
||||
// input.wekan-form-control#mail-server-username(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
|
||||
// input.wekan-form-control#mail-server-u"accounts-allowUserNameChange": "Allow Username Change",sername(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
|
||||
// li.smtp-form
|
||||
// .title {{_ 'smtp-password'}}
|
||||
// .form-group
|
||||
@@ -120,6 +126,17 @@ template(name='email')
|
||||
li
|
||||
button.js-send-smtp-test-email.primary {{_ 'send-smtp-test'}}
|
||||
|
||||
template(name='tableVisibilityModeSettings')
|
||||
ul#tableVisibilityMode-setting.setting-detail
|
||||
li.tableVisibilityMode-form
|
||||
.title {{_ 'tableVisibilityMode-allowPrivateOnly'}}
|
||||
.form-group.flex
|
||||
input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="true" checked="{{#if allowPrivateOnly}}checked{{/if}}")
|
||||
span {{_ 'yes'}}
|
||||
input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="false" checked="{{#unless allowPrivateOnly}}checked{{/unless}}")
|
||||
span {{_ 'no'}}
|
||||
button.js-tableVisibilityMode-save.primary {{_ 'save'}}
|
||||
|
||||
template(name='accountSettings')
|
||||
ul#account-setting.setting-detail
|
||||
li
|
||||
@@ -163,6 +180,10 @@ template(name='announcementSettings')
|
||||
|
||||
template(name='layoutSettings')
|
||||
ul#layout-setting.setting-detail
|
||||
li.layout-form
|
||||
.title {{_ 'oidc-button-text'}}
|
||||
.form-group
|
||||
input.wekan-form-control#oidcBtnTextvalue(type="text", placeholder="" value="{{currentSetting.oidcBtnText}}")
|
||||
li.layout-form
|
||||
.title {{_ 'display-authentication-method'}}
|
||||
.form-group.flex
|
||||
|
||||
@@ -7,6 +7,7 @@ BlazeComponent.extendComponent({
|
||||
this.generalSetting = new ReactiveVar(true);
|
||||
this.emailSetting = new ReactiveVar(false);
|
||||
this.accountSetting = new ReactiveVar(false);
|
||||
this.tableVisibilityModeSetting = new ReactiveVar(false);
|
||||
this.announcementSetting = new ReactiveVar(false);
|
||||
this.layoutSetting = new ReactiveVar(false);
|
||||
this.webhookSetting = new ReactiveVar(false);
|
||||
@@ -14,6 +15,7 @@ BlazeComponent.extendComponent({
|
||||
Meteor.subscribe('setting');
|
||||
Meteor.subscribe('mailServer');
|
||||
Meteor.subscribe('accountSettings');
|
||||
Meteor.subscribe('tableVisibilityModeSettings');
|
||||
Meteor.subscribe('announcements');
|
||||
Meteor.subscribe('globalwebhooks');
|
||||
},
|
||||
@@ -88,6 +90,7 @@ BlazeComponent.extendComponent({
|
||||
this.announcementSetting.set('announcement-setting' === targetID);
|
||||
this.layoutSetting.set('layout-setting' === targetID);
|
||||
this.webhookSetting.set('webhook-setting' === targetID);
|
||||
this.tableVisibilityModeSetting.set('tableVisibilityMode-setting' === targetID);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -196,6 +199,12 @@ BlazeComponent.extendComponent({
|
||||
)
|
||||
.val()
|
||||
.trim();
|
||||
|
||||
const oidcBtnText = $(
|
||||
'#oidcBtnTextvalue',
|
||||
)
|
||||
.val()
|
||||
.trim();
|
||||
const hideLogoChange = $('input[name=hideLogo]:checked').val() === 'true';
|
||||
const displayAuthenticationMethod =
|
||||
$('input[name=displayAuthenticationMethod]:checked').val() === 'true';
|
||||
@@ -218,6 +227,7 @@ BlazeComponent.extendComponent({
|
||||
defaultAuthenticationMethod,
|
||||
automaticLinkedUrlSchemes,
|
||||
spinnerName,
|
||||
oidcBtnText,
|
||||
},
|
||||
});
|
||||
} catch (e) {
|
||||
@@ -317,6 +327,46 @@ BlazeComponent.extendComponent({
|
||||
},
|
||||
}).register('accountSettings');
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
saveTableVisibilityChange() {
|
||||
const allowPrivateOnly =
|
||||
$('input[name=allowPrivateOnly]:checked').val() === 'true';
|
||||
TableVisibilityModeSettings.update('tableVisibilityMode-allowPrivateOnly', {
|
||||
$set: { booleanValue: allowPrivateOnly },
|
||||
});
|
||||
},
|
||||
allowPrivateOnly() {
|
||||
return TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue;
|
||||
},
|
||||
allHideSystemMessages() {
|
||||
Meteor.call('setAllUsersHideSystemMessages', (err, ret) => {
|
||||
if (!err && ret) {
|
||||
if (ret === true) {
|
||||
const message = `${TAPi18n.__(
|
||||
'now-system-messages-of-all-users-are-hidden',
|
||||
)}`;
|
||||
alert(message);
|
||||
}
|
||||
} else {
|
||||
const reason = err.reason || '';
|
||||
const message = `${TAPi18n.__(err.error)}\n${reason}`;
|
||||
alert(message);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'click button.js-tableVisibilityMode-save': this.saveTableVisibilityChange,
|
||||
},
|
||||
{
|
||||
'click button.js-all-hide-system-messages': this.allHideSystemMessages,
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('tableVisibilityModeSettings');
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.loading = new ReactiveVar(false);
|
||||
|
||||
@@ -31,6 +31,28 @@ template(name='homeSidebar')
|
||||
+activities(mode="board")
|
||||
|
||||
template(name="membersWidget")
|
||||
if AtLeastOneOrgWasCreated
|
||||
.board-widget.board-widget-members
|
||||
h3
|
||||
i.fa.fa-users
|
||||
| {{_ 'organizations'}}
|
||||
|
||||
.board-widget-content
|
||||
+boardOrgGeneral
|
||||
.clearfix
|
||||
br
|
||||
hr
|
||||
if AtLeastOneTeamWasCreated
|
||||
.board-widget.board-widget-members
|
||||
h3
|
||||
i.fa.fa-users
|
||||
| {{_ 'teams'}}
|
||||
|
||||
.board-widget-content
|
||||
+boardTeamGeneral
|
||||
.clearfix
|
||||
br
|
||||
hr
|
||||
.board-widget.board-widget-members
|
||||
h3
|
||||
i.fa.fa-users
|
||||
@@ -65,6 +87,30 @@ template(name="membersWidget")
|
||||
button.js-member-invite-accept.primary {{_ 'accept'}}
|
||||
button.js-member-invite-decline {{_ 'decline'}}
|
||||
|
||||
template(name="boardOrgGeneral")
|
||||
table
|
||||
tbody
|
||||
tr
|
||||
th {{_ 'displayName'}}
|
||||
th
|
||||
if currentUser.isBoardAdmin
|
||||
a.member.orgOrTeamMember.add-member.js-manage-board-addOrg(title="{{_ 'add-members'}}")
|
||||
i.fa.fa-plus
|
||||
each org in currentBoard.activeOrgs
|
||||
+boardOrgRow(orgId=org.orgId)
|
||||
|
||||
template(name="boardTeamGeneral")
|
||||
table
|
||||
tbody
|
||||
tr
|
||||
th {{_ 'displayName'}}
|
||||
th
|
||||
if currentUser.isBoardAdmin
|
||||
a.member.orgOrTeamMember.add-member.js-manage-board-addTeam(title="{{_ 'add-members'}}")
|
||||
i.fa.fa-plus
|
||||
each currentBoard.activeTeams
|
||||
+boardTeamRow(teamId=this.teamId)
|
||||
|
||||
template(name="boardChangeColorPopup")
|
||||
.board-backgrounds-list.clearfix
|
||||
each backgroundColors
|
||||
@@ -145,6 +191,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}}")
|
||||
@@ -347,7 +400,11 @@ template(name="exportBoard")
|
||||
li
|
||||
a(href="{{exportCsvUrl}}", download="{{exportCsvFilename}}")
|
||||
i.fa.fa-share-alt
|
||||
| {{_ 'export-board-csv'}}
|
||||
| {{_ 'export-board-csv'}} ,
|
||||
li
|
||||
a(href="{{exportScsvUrl}}", download="{{exportCsvFilename}}")
|
||||
i.fa.fa-share-alt
|
||||
| {{_ 'export-board-csv'}} ;
|
||||
li
|
||||
a(href="{{exportTsvUrl}}", download="{{exportTsvFilename}}")
|
||||
i.fa.fa-share-alt
|
||||
@@ -409,6 +466,40 @@ template(name="leaveBoardPopup")
|
||||
p {{_ 'leave-board-pop' boardTitle=board.title}}
|
||||
button.js-confirm.negate.full(type="submit") {{_ 'leave-board'}}
|
||||
|
||||
template(name="addBoardOrgPopup")
|
||||
select.js-boardOrgs#jsBoardOrgs
|
||||
option(value="-1") {{_ 'organizations'}} :
|
||||
each value in orgsDatas
|
||||
option(value="{{value._id}}") {{_ value.orgDisplayName}}
|
||||
|
||||
template(name="removeBoardOrgPopup")
|
||||
form
|
||||
input.hide#hideOrgId(type="text" value=org._id)
|
||||
label
|
||||
| {{_ 'leave-board'}} ?
|
||||
br
|
||||
hr
|
||||
div.buttonsContainer
|
||||
input.primary.wide.leaveBoardBtn#leaveBoardBtn(type="submit" value="{{_ 'leave-board'}}")
|
||||
input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardBtn(type="submit" value="{{_ 'Cancel'}}")
|
||||
|
||||
template(name="addBoardTeamPopup")
|
||||
select.js-boardTeams#jsBoardTeams
|
||||
option(value="-1") {{_ 'teams'}} :
|
||||
each value in teamsDatas
|
||||
option(value="{{value._id}}") {{_ value.teamDisplayName}}
|
||||
|
||||
template(name="removeBoardTeamPopup")
|
||||
form
|
||||
input.hide#hideTeamId(type="text" value=team._id)
|
||||
label
|
||||
| {{_ 'leave-board'}} ?
|
||||
br
|
||||
hr
|
||||
div.buttonsContainer
|
||||
input.primary.wide.leaveBoardBtn#leaveBoardTeamBtn(type="submit" value="{{_ 'leave-board'}}")
|
||||
input.primary.wide.cancelLeaveBoardBtn#cancelLeaveBoardTeamBtn(type="submit" value="{{_ 'Cancel'}}")
|
||||
|
||||
template(name="addMemberPopup")
|
||||
.js-search-member
|
||||
+esInput(index="users")
|
||||
|
||||
@@ -183,6 +183,7 @@ Template.memberPopup.helpers({
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Template.boardMenuPopup.events({
|
||||
'click .js-rename-board': Popup.open('boardChangeTitle'),
|
||||
'click .js-open-rules-view'() {
|
||||
@@ -290,6 +291,42 @@ Template.leaveBoardPopup.helpers({
|
||||
return Boards.findOne(Session.get('currentBoard'));
|
||||
},
|
||||
});
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
this.findTeamsOptions = new ReactiveVar({});
|
||||
|
||||
this.page = new ReactiveVar(1);
|
||||
this.teamPage = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
|
||||
});
|
||||
|
||||
this.autorun(() => {
|
||||
const limitTeams = this.teamPage.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('team', this.findTeamsOptions.get(), limitTeams, () => {});
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
}).register('membersWidget');
|
||||
|
||||
Template.membersWidget.helpers({
|
||||
isInvited() {
|
||||
@@ -307,12 +344,29 @@ Template.membersWidget.helpers({
|
||||
isBoardAdmin() {
|
||||
return Meteor.user().isBoardAdmin();
|
||||
},
|
||||
AtLeastOneOrgWasCreated(){
|
||||
let orgs = Org.find({}, {sort: { createdAt: -1 }});
|
||||
if(orgs === undefined)
|
||||
return false;
|
||||
|
||||
return orgs.count() > 0;
|
||||
},
|
||||
|
||||
AtLeastOneTeamWasCreated(){
|
||||
let teams = Team.find({}, {sort: { createdAt: -1 }});
|
||||
if(teams === undefined)
|
||||
return false;
|
||||
|
||||
return teams.count() > 0;
|
||||
},
|
||||
});
|
||||
|
||||
Template.membersWidget.events({
|
||||
'click .js-member': Popup.open('member'),
|
||||
'click .js-open-board-menu': Popup.open('boardMenu'),
|
||||
'click .js-manage-board-members': Popup.open('addMember'),
|
||||
'click .js-manage-board-addOrg': Popup.open('addBoardOrg'),
|
||||
'click .js-manage-board-addTeam': Popup.open('addBoardTeam'),
|
||||
'click .js-import': Popup.open('boardImportBoard'),
|
||||
submit: this.onSubmit,
|
||||
'click .js-import-board': Popup.open('chooseBoardSource'),
|
||||
@@ -458,6 +512,21 @@ BlazeComponent.extendComponent({
|
||||
};
|
||||
const queryParams = {
|
||||
authToken: Accounts._storedLoginToken(),
|
||||
delimiter: ',',
|
||||
};
|
||||
return FlowRouter.path(
|
||||
'/api/boards/:boardId/export/csv',
|
||||
params,
|
||||
queryParams,
|
||||
);
|
||||
},
|
||||
exportScsvUrl() {
|
||||
const params = {
|
||||
boardId: Session.get('currentBoard'),
|
||||
};
|
||||
const queryParams = {
|
||||
authToken: Accounts._storedLoginToken(),
|
||||
delimiter: ';',
|
||||
};
|
||||
return FlowRouter.path(
|
||||
'/api/boards/:boardId/export/csv',
|
||||
@@ -774,6 +843,10 @@ BlazeComponent.extendComponent({
|
||||
return this.currentBoard.allowsComments;
|
||||
},
|
||||
|
||||
allowsCardNumber() {
|
||||
return this.currentBoard.allowsCardNumber;
|
||||
},
|
||||
|
||||
allowsDescriptionTitle() {
|
||||
return this.currentBoard.allowsDescriptionTitle;
|
||||
},
|
||||
@@ -1017,6 +1090,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
|
||||
@@ -1168,6 +1257,346 @@ BlazeComponent.extendComponent({
|
||||
},
|
||||
}).register('addMemberPopup');
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
|
||||
this.page = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'keyup input'() {
|
||||
this.setError('');
|
||||
},
|
||||
'change #jsBoardOrgs'() {
|
||||
let currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
let selectElt = document.getElementById("jsBoardOrgs");
|
||||
let selectedOrgId = selectElt.options[selectElt.selectedIndex].value;
|
||||
let selectedOrgDisplayName = selectElt.options[selectElt.selectedIndex].text;
|
||||
let boardOrganizations = [];
|
||||
if(currentBoard.orgs !== undefined){
|
||||
for(let i = 0; i < currentBoard.orgs.length; i++){
|
||||
boardOrganizations.push(currentBoard.orgs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(!boardOrganizations.some((org) => org.orgDisplayName == selectedOrgDisplayName)){
|
||||
boardOrganizations.push({
|
||||
"orgId": selectedOrgId,
|
||||
"orgDisplayName": selectedOrgDisplayName,
|
||||
"isActive" : true,
|
||||
})
|
||||
|
||||
if (selectedOrgId != "-1") {
|
||||
Meteor.call('setBoardOrgs', boardOrganizations, currentBoard._id);
|
||||
}
|
||||
}
|
||||
|
||||
Popup.close();
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('addBoardOrgPopup');
|
||||
|
||||
Template.addBoardOrgPopup.helpers({
|
||||
orgsDatas() {
|
||||
// return Org.find({}, {sort: { createdAt: -1 }});
|
||||
let orgs = Org.find({}, {sort: { createdAt: -1 }});
|
||||
return orgs;
|
||||
},
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
|
||||
this.page = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'keyup input'() {
|
||||
this.setError('');
|
||||
},
|
||||
'click #leaveBoardBtn'(){
|
||||
let stringOrgId = document.getElementById('hideOrgId').value;
|
||||
let currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
let boardOrganizations = [];
|
||||
if(currentBoard.orgs !== undefined){
|
||||
for(let i = 0; i < currentBoard.orgs.length; i++){
|
||||
if(currentBoard.orgs[i].orgId != stringOrgId){
|
||||
boardOrganizations.push(currentBoard.orgs[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Meteor.call('setBoardOrgs', boardOrganizations, currentBoard._id);
|
||||
|
||||
Popup.close();
|
||||
},
|
||||
'click #cancelLeaveBoardBtn'(){
|
||||
Popup.close();
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('removeBoardOrgPopup');
|
||||
|
||||
Template.removeBoardOrgPopup.helpers({
|
||||
org() {
|
||||
return Org.findOne(this.orgId);
|
||||
},
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
|
||||
this.page = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
|
||||
});
|
||||
|
||||
this.findUsersOptions = new ReactiveVar({});
|
||||
this.userPage = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitUsers = this.userPage.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'keyup input'() {
|
||||
this.setError('');
|
||||
},
|
||||
'change #jsBoardTeams'() {
|
||||
let currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
let selectElt = document.getElementById("jsBoardTeams");
|
||||
let selectedTeamId = selectElt.options[selectElt.selectedIndex].value;
|
||||
let selectedTeamDisplayName = selectElt.options[selectElt.selectedIndex].text;
|
||||
let boardTeams = [];
|
||||
if(currentBoard.teams !== undefined){
|
||||
for(let i = 0; i < currentBoard.teams.length; i++){
|
||||
boardTeams.push(currentBoard.teams[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(!boardTeams.some((team) => team.teamDisplayName == selectedTeamDisplayName)){
|
||||
boardTeams.push({
|
||||
"teamId": selectedTeamId,
|
||||
"teamDisplayName": selectedTeamDisplayName,
|
||||
"isActive" : true,
|
||||
})
|
||||
|
||||
if (selectedTeamId != "-1") {
|
||||
let members = currentBoard.members;
|
||||
|
||||
let query = {
|
||||
"teams.teamId": { $in: boardTeams.map(t => t.teamId) },
|
||||
};
|
||||
|
||||
const boardTeamUsers = Users.find(query, {
|
||||
sort: { sort: 1 },
|
||||
});
|
||||
|
||||
if(boardTeams !== undefined && boardTeams.length > 0){
|
||||
let index;
|
||||
if(boardTeamUsers && boardTeamUsers.count() > 0){
|
||||
boardTeamUsers.forEach((u) => {
|
||||
index = members.findIndex(function(m){ return m.userId == u._id});
|
||||
if(index == -1){
|
||||
members.push({
|
||||
"isActive": true,
|
||||
"isAdmin": u.isAdmin !== undefined ? u.isAdmin : false,
|
||||
"isCommentOnly" : false,
|
||||
"isNoComments" : false,
|
||||
"userId": u._id,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Meteor.call('setBoardTeams', boardTeams, members, currentBoard._id);
|
||||
}
|
||||
}
|
||||
|
||||
Popup.close();
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('addBoardTeamPopup');
|
||||
|
||||
Template.addBoardTeamPopup.helpers({
|
||||
teamsDatas() {
|
||||
let teams = Team.find({}, {sort: { createdAt: -1 }});
|
||||
return teams;
|
||||
},
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
|
||||
this.page = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
|
||||
});
|
||||
|
||||
this.findUsersOptions = new ReactiveVar({});
|
||||
this.userPage = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitUsers = this.userPage.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'keyup input'() {
|
||||
this.setError('');
|
||||
},
|
||||
'click #leaveBoardTeamBtn'(){
|
||||
let stringTeamId = document.getElementById('hideTeamId').value;
|
||||
let currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
let boardTeams = [];
|
||||
if(currentBoard.teams !== undefined){
|
||||
for(let i = 0; i < currentBoard.teams.length; i++){
|
||||
if(currentBoard.teams[i].teamId != stringTeamId){
|
||||
boardTeams.push(currentBoard.teams[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let members = currentBoard.members;
|
||||
let query = {
|
||||
"teams.teamId": stringTeamId
|
||||
};
|
||||
|
||||
const boardTeamUsers = Users.find(query, {
|
||||
sort: { sort: 1 },
|
||||
});
|
||||
|
||||
if(currentBoard.teams !== undefined && currentBoard.teams.length > 0){
|
||||
let index;
|
||||
if(boardTeamUsers && boardTeamUsers.count() > 0){
|
||||
boardTeamUsers.forEach((u) => {
|
||||
index = members.findIndex(function(m){ return m.userId == u._id});
|
||||
if(index !== -1 && (u.isAdmin === undefined || u.isAdmin == false)){
|
||||
members.splice(index, 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Meteor.call('setBoardTeams', boardTeams, members, currentBoard._id);
|
||||
|
||||
Popup.close();
|
||||
},
|
||||
'click #cancelLeaveBoardTeamBtn'(){
|
||||
Popup.close();
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('removeBoardTeamPopup');
|
||||
|
||||
Template.removeBoardTeamPopup.helpers({
|
||||
team() {
|
||||
return Team.findOne(this.teamId);
|
||||
},
|
||||
});
|
||||
|
||||
Template.changePermissionsPopup.events({
|
||||
'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only, click .js-set-worker'(
|
||||
event,
|
||||
|
||||
@@ -214,3 +214,13 @@
|
||||
i.fa
|
||||
padding: 8px 0px 8px 16px
|
||||
font-weight: bold
|
||||
|
||||
#jsBoardOrgs, #jsBoardTeams
|
||||
width: 90%
|
||||
|
||||
.leaveBoardBtn
|
||||
background-color: green !important
|
||||
|
||||
.cancelLeaveBoardBtn
|
||||
margin-left: 5% !important
|
||||
background-color: red !important
|
||||
@@ -43,6 +43,14 @@ template(name="createCustomFieldPopup")
|
||||
option(value=value selected="selected") {{name}}
|
||||
else
|
||||
option(value=value) {{name}}
|
||||
a.flex.js-field-show-sum-at-top-of-list(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
|
||||
.materialCheckBox(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
|
||||
span {{_ 'showSum-field-on-list'}}
|
||||
|
||||
div.js-field-settings.js-field-settings-currency(class="{{#if isTypeNotSelected 'number'}}hide{{/if}}")
|
||||
a.flex.js-field-show-sum-at-top-of-list(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
|
||||
.materialCheckBox(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
|
||||
span {{_ 'showSum-field-on-list'}}
|
||||
|
||||
div.js-field-settings.js-field-settings-dropdown(class="{{#if isTypeNotSelected 'dropdown'}}hide{{/if}}")
|
||||
label
|
||||
|
||||
@@ -234,6 +234,14 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
|
||||
$target.find('.materialCheckBox').toggleClass('is-checked');
|
||||
$target.toggleClass('is-checked');
|
||||
},
|
||||
'click .js-field-show-sum-at-top-of-list'(evt) {
|
||||
let $target = $(evt.target);
|
||||
if (!$target.hasClass('js-field-show-sum-at-top-of-list')) {
|
||||
$target = $target.parent();
|
||||
}
|
||||
$target.find('.materialCheckBox').toggleClass('is-checked');
|
||||
$target.toggleClass('is-checked');
|
||||
},
|
||||
'click .primary'(evt) {
|
||||
evt.preventDefault();
|
||||
|
||||
@@ -248,6 +256,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
|
||||
this.find('.js-field-automatically-on-card.is-checked') !== null,
|
||||
alwaysOnCard:
|
||||
this.find('.js-field-always-on-card.is-checked') !== null,
|
||||
showSumAtTopOfList:
|
||||
this.find('.js-field-show-sum-at-top-of-list.is-checked') !== null,
|
||||
};
|
||||
|
||||
// insert or update
|
||||
|
||||
@@ -11,8 +11,15 @@ template(name="swimlaneHeader")
|
||||
template(name="swimlaneFixedHeader")
|
||||
.swimlane-header(
|
||||
class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
|
||||
+viewer
|
||||
= title
|
||||
if $eq title 'Card Templates'
|
||||
| {{_ 'card-templates-swimlane'}}
|
||||
else if $eq title 'List Templates'
|
||||
| {{_ 'list-templates-swimlane'}}
|
||||
else if $eq title 'Board Templates'
|
||||
| {{_ 'board-templates-swimlane'}}
|
||||
else
|
||||
+viewer
|
||||
= title
|
||||
.swimlane-header-menu
|
||||
unless currentUser.isCommentOnly
|
||||
if currentUser.isBoardAdmin
|
||||
|
||||
@@ -19,6 +19,44 @@ template(name="userAvatarInitials")
|
||||
svg.avatar.avatar-initials(viewBox="0 0 {{viewPortWidth}} 15")
|
||||
text(x="50%" y="13" text-anchor="middle")= initials
|
||||
|
||||
template(name="orgAvatar")
|
||||
a.member.orgOrTeamMember(class="js-member" title="{{orgData.orgDisplayName}}")
|
||||
+boardOrgName(orgId=orgData._id)
|
||||
|
||||
template(name="boardOrgRow")
|
||||
tr
|
||||
if orgData.orgIsActive
|
||||
td <s>{{ orgData.orgDisplayName }}</s>
|
||||
else
|
||||
td {{ orgData.orgDisplayName }}
|
||||
td
|
||||
if currentUser.isBoardAdmin
|
||||
a.member.orgOrTeamMember.add-member.js-manage-board-removeOrg(title="{{_ 'remove-from-board'}}")
|
||||
i.fa.fa-minus
|
||||
|
||||
template(name="boardTeamRow")
|
||||
tr
|
||||
if teamData.teamIsActive
|
||||
td <s>{{ teamData.teamDisplayName }}</s>
|
||||
else
|
||||
td {{ teamData.teamDisplayName }}
|
||||
td
|
||||
if currentUser.isBoardAdmin
|
||||
a.member.orgOrTeamMember.add-member.js-manage-board-removeTeam(title="{{_ 'remove-from-board'}}")
|
||||
i.fa.fa-minus
|
||||
|
||||
template(name="boardOrgName")
|
||||
svg.avatar.avatar-initials(viewBox="0 0 {{orgViewPortWidth}} 15")
|
||||
text(x="50%" y="13" text-anchor="middle")= orgName
|
||||
|
||||
template(name="teamAvatar")
|
||||
a.member.orgOrTeamMember(class="js-member" title="{{teamData.teamDisplayName}}")
|
||||
+boardTeamName(orgId=orgData._id)
|
||||
|
||||
template(name="boardTeamName")
|
||||
svg.avatar.avatar-initials(viewBox="0 0 {{teamViewPortWidth}} 15")
|
||||
text(x="50%" y="13" text-anchor="middle")= teamName
|
||||
|
||||
template(name="userPopup")
|
||||
.board-member-menu
|
||||
.mini-profile-info
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import Cards from '/models/cards';
|
||||
import Avatars from '/models/avatars';
|
||||
import Users from '/models/users';
|
||||
import Org from '/models/org';
|
||||
import Team from '/models/team';
|
||||
|
||||
Template.userAvatar.helpers({
|
||||
userData() {
|
||||
@@ -46,6 +48,132 @@ Template.userAvatarInitials.helpers({
|
||||
},
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
|
||||
this.page = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitOrgs = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('org', this.findOrgsOptions.get(), limitOrgs, () => {});
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'keyup input'() {
|
||||
this.setError('');
|
||||
},
|
||||
'click .js-manage-board-removeOrg': Popup.open('removeBoardOrg'),
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('boardOrgRow');
|
||||
|
||||
Template.boardOrgRow.helpers({
|
||||
orgData() {
|
||||
const orgCollection = this.esSearch ? ESSearchResults : Org;
|
||||
return orgCollection.findOne(this.orgId);
|
||||
},
|
||||
currentUser(){
|
||||
return Meteor.user();
|
||||
},
|
||||
});
|
||||
|
||||
Template.boardOrgName.helpers({
|
||||
orgName() {
|
||||
const org = Org.findOne(this.orgId);
|
||||
return org && org.orgDisplayName;
|
||||
},
|
||||
|
||||
orgViewPortWidth() {
|
||||
const org = Org.findOne(this.orgId);
|
||||
return ((org && org.orgDisplayName.length) || 1) * 12;
|
||||
},
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
this.findOrgsOptions = new ReactiveVar({});
|
||||
|
||||
this.page = new ReactiveVar(1);
|
||||
this.autorun(() => {
|
||||
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
|
||||
});
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [
|
||||
{
|
||||
'keyup input'() {
|
||||
this.setError('');
|
||||
},
|
||||
'click .js-manage-board-removeTeam': Popup.open('removeBoardTeam'),
|
||||
},
|
||||
];
|
||||
},
|
||||
}).register('boardTeamRow');
|
||||
|
||||
Template.boardTeamRow.helpers({
|
||||
teamData() {
|
||||
const teamCollection = this.esSearch ? ESSearchResults : Team;
|
||||
return teamCollection.findOne(this.teamId);
|
||||
},
|
||||
currentUser(){
|
||||
return Meteor.user();
|
||||
},
|
||||
});
|
||||
|
||||
Template.boardTeamName.helpers({
|
||||
teamName() {
|
||||
const team = Team.findOne(this.teamId);
|
||||
return team && team.teamDisplayName;
|
||||
},
|
||||
|
||||
teamViewPortWidth() {
|
||||
const team = Team.findOne(this.teamId);
|
||||
return ((team && team.teamDisplayName.length) || 1) * 12;
|
||||
},
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
|
||||
@@ -49,10 +49,11 @@ template(name="memberMenuPopup")
|
||||
i.fa.fa-lock
|
||||
| {{_ 'admin-panel'}}
|
||||
hr
|
||||
li
|
||||
a.js-edit-profile
|
||||
i.fa.fa-user
|
||||
| {{_ 'edit-profile'}}
|
||||
if isNotOAuth2AuthenticationMethod
|
||||
li
|
||||
a.js-edit-profile
|
||||
i.fa.fa-user
|
||||
| {{_ 'edit-profile'}}
|
||||
li
|
||||
a.js-change-settings
|
||||
i.fa.fa-cog
|
||||
@@ -62,10 +63,11 @@ template(name="memberMenuPopup")
|
||||
i.fa.fa-picture-o
|
||||
| {{_ 'edit-avatar'}}
|
||||
unless isSandstorm
|
||||
li
|
||||
a.js-change-password
|
||||
i.fa.fa-key
|
||||
| {{_ 'changePasswordPopup-title'}}
|
||||
if isNotOAuth2AuthenticationMethod
|
||||
li
|
||||
a.js-change-password
|
||||
i.fa.fa-key
|
||||
| {{_ 'changePasswordPopup-title'}}
|
||||
li
|
||||
a.js-change-language
|
||||
i.fa.fa-flag
|
||||
|
||||
@@ -22,6 +22,14 @@ Template.memberMenuPopup.helpers({
|
||||
return false;
|
||||
}
|
||||
},
|
||||
isNotOAuth2AuthenticationMethod(){
|
||||
currentUser = Meteor.user();
|
||||
if (currentUser) {
|
||||
return currentUser.authenticationMethod != 'OAuth2';
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Template.memberMenuPopup.events({
|
||||
@@ -180,12 +188,16 @@ 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') {
|
||||
name = 'Latviešu';
|
||||
} else if (lang.name === 'latviešu valoda') {
|
||||
name = 'Latviešu';
|
||||
} else if (lang.name === 'en-IT') {
|
||||
name = 'English (Italy)';
|
||||
} else if (lang.name === 'Español') {
|
||||
name = 'español';
|
||||
} else if (lang.name === 'es_419') {
|
||||
|
||||
@@ -34,6 +34,7 @@ export class DatePicker extends BlazeComponent {
|
||||
todayBtn: 'linked',
|
||||
language: TAPi18n.getLanguage(),
|
||||
weekStart: this.startDayOfWeek(),
|
||||
calendarWeeks: true,
|
||||
})
|
||||
.on(
|
||||
'changeDate',
|
||||
|
||||
Executable → Regular
File mode changed.
@@ -0,0 +1,197 @@
|
||||
/* eslint-env mocha */
|
||||
import sinon from 'sinon';
|
||||
import { expect } from 'chai';
|
||||
import { Random } from 'meteor/random';
|
||||
import '../utils';
|
||||
|
||||
|
||||
describe('Utils', function() {
|
||||
beforeEach(function() {
|
||||
sinon.stub(Utils, 'reload').callsFake(() => {});
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
window.localStorage.removeItem(boardView);
|
||||
sinon.restore();
|
||||
});
|
||||
|
||||
const boardView = 'boardView';
|
||||
|
||||
describe(Utils.setBoardView.name, function() {
|
||||
it('sets the board view if the user exists', function(done) {
|
||||
const viewId = Random.id();
|
||||
const user = {
|
||||
setBoardView: (view) => {
|
||||
expect(view).to.equal(viewId);
|
||||
done();
|
||||
},
|
||||
};
|
||||
sinon.stub(Meteor, 'user').callsFake(() => user);
|
||||
Utils.setBoardView(viewId);
|
||||
|
||||
expect(window.localStorage.getItem(boardView)).to.equal(viewId);
|
||||
});
|
||||
|
||||
it('sets a specific view if no user exists but a view is defined', function() {
|
||||
const views = [
|
||||
'board-view-swimlanes',
|
||||
'board-view-lists',
|
||||
'board-view-cal'
|
||||
];
|
||||
|
||||
sinon.stub(Meteor, 'user').callsFake(() => {});
|
||||
|
||||
views.forEach(viewName => {
|
||||
Utils.setBoardView(viewName);
|
||||
expect(window.localStorage.getItem(boardView)).to.equal(viewName);
|
||||
});
|
||||
});
|
||||
|
||||
it('sets a default view if no user and no view are given', function() {
|
||||
sinon.stub(Meteor, 'user').callsFake(() => {});
|
||||
Utils.setBoardView();
|
||||
expect(window.localStorage.getItem(boardView)).to.equal('board-view-swimlanes');
|
||||
});
|
||||
});
|
||||
|
||||
describe(Utils.unsetBoardView.name, function() {
|
||||
it('removes the boardview from localStoage', function() {
|
||||
window.localStorage.setItem(boardView, Random.id());
|
||||
window.localStorage.setItem('collapseSwimlane', Random.id());
|
||||
|
||||
Utils.unsetBoardView();
|
||||
|
||||
expect(window.localStorage.getItem(boardView)).to.equal(null);
|
||||
expect(window.localStorage.getItem('collapseSwimlane')).to.equal(null);
|
||||
});
|
||||
});
|
||||
|
||||
describe(Utils.boardView.name, function() {
|
||||
it('returns the user\'s board view if a user exists', function() {
|
||||
const viewId = Random.id();
|
||||
const user = {};
|
||||
sinon.stub(Meteor, 'user').callsFake(() => user);
|
||||
expect(Utils.boardView()).to.equal(undefined);
|
||||
|
||||
const boardView = Random.id();
|
||||
user.profile = { boardView };
|
||||
|
||||
expect(Utils.boardView()).to.equal(boardView);
|
||||
});
|
||||
it('returns the current defined view', function() {
|
||||
const views = [
|
||||
'board-view-swimlanes',
|
||||
'board-view-lists',
|
||||
'board-view-cal'
|
||||
];
|
||||
|
||||
sinon.stub(Meteor, 'user').callsFake(() => {});
|
||||
|
||||
views.forEach(viewName => {
|
||||
window.localStorage.setItem(boardView, viewName);
|
||||
expect(Utils.boardView()).to.equal(viewName);
|
||||
});
|
||||
});
|
||||
it('returns a default if nothing is set', function() {
|
||||
sinon.stub(Meteor, 'user').callsFake(() => {});
|
||||
expect(Utils.boardView()).to.equal('board-view-swimlanes');
|
||||
expect(window.localStorage.getItem(boardView)).to.equal('board-view-swimlanes');
|
||||
});
|
||||
});
|
||||
|
||||
describe(Utils.myCardsSort.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.myCardsSortToggle.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.setMyCardsSort.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.archivedBoardIds.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.dueCardsView.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.setDueCardsView.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.goBoardId.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.goCardId.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.processUploadedAttachment.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.shrinkImage.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.capitalize.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.isMiniScreen.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.isShowDesktopDragHandles.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.isMiniScreenOrShowDesktopDragHandles.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.calculateIndexData.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.calculateIndex.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.isTouchDevice.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.calculateTouchDistance.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.enableClickOnTouch.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.manageCustomUI.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.setCustomUI.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.setMatomo.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.manageMatomo.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
|
||||
describe(Utils.getTriggerActionDesc.name, function() {
|
||||
it('has no tests yet');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
import './Utils.tests';
|
||||
+14
-7
@@ -1,20 +1,27 @@
|
||||
Utils = {
|
||||
reload () {
|
||||
// we move all window.location.reload calls into this function
|
||||
// so we can disable it when running tests.
|
||||
// This is because we are not allowed to override location.reload but
|
||||
// we can override Utils.reload to prevent reload during tests.
|
||||
window.location.reload();
|
||||
},
|
||||
setBoardView(view) {
|
||||
currentUser = Meteor.user();
|
||||
if (currentUser) {
|
||||
Meteor.user().setBoardView(view);
|
||||
} else if (view === 'board-view-swimlanes') {
|
||||
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
|
||||
location.reload();
|
||||
Utils.reload();
|
||||
} else if (view === 'board-view-lists') {
|
||||
window.localStorage.setItem('boardView', 'board-view-lists'); //true
|
||||
location.reload();
|
||||
Utils.reload();
|
||||
} else if (view === 'board-view-cal') {
|
||||
window.localStorage.setItem('boardView', 'board-view-cal'); //true
|
||||
location.reload();
|
||||
Utils.reload();
|
||||
} else {
|
||||
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
|
||||
location.reload();
|
||||
Utils.reload();
|
||||
}
|
||||
},
|
||||
|
||||
@@ -39,7 +46,7 @@ Utils = {
|
||||
return 'board-view-cal';
|
||||
} else {
|
||||
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
|
||||
location.reload();
|
||||
Utils.reload();
|
||||
return 'board-view-swimlanes';
|
||||
}
|
||||
},
|
||||
@@ -64,7 +71,7 @@ Utils = {
|
||||
|
||||
setMyCardsSort(sort) {
|
||||
window.localStorage.setItem('myCardsSort', sort);
|
||||
location.reload();
|
||||
Utils.reload();
|
||||
},
|
||||
|
||||
archivedBoardIds() {
|
||||
@@ -87,7 +94,7 @@ Utils = {
|
||||
|
||||
setDueCardsView(view) {
|
||||
window.localStorage.setItem('dueCardsView', view);
|
||||
location.reload();
|
||||
Utils.reload();
|
||||
},
|
||||
|
||||
// XXX We should remove these two methods
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ AccountsTemplates.addFields([
|
||||
AccountsTemplates.configure({
|
||||
defaultLayout: 'userFormsLayout',
|
||||
defaultContentRegion: 'content',
|
||||
confirmPassword: false,
|
||||
confirmPassword: true,
|
||||
enablePasswordChange: true,
|
||||
sendVerificationEmail: true,
|
||||
showForgotPasswordLink: true,
|
||||
|
||||
+43
-9
@@ -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
|
||||
@@ -440,9 +443,47 @@ services:
|
||||
# The host server for the LDAP server
|
||||
#- LDAP_HOST=localhost
|
||||
#
|
||||
#-----------------------------------------------------------------
|
||||
# ==== LDAP AD Simple Auth ====
|
||||
#
|
||||
# Set to true, if you want to connect with Active Directory by Simple Authentication.
|
||||
# When using AD Simple Auth, LDAP_BASEDN is not needed.
|
||||
#
|
||||
# Example:
|
||||
#- LDAP_AD_SIMPLE_AUTH=true
|
||||
#
|
||||
# === LDAP User Authentication ===
|
||||
#
|
||||
# a) Option to login to the LDAP server with the user's own username and password, instead of
|
||||
# an administrator key. Default: false (use administrator key).
|
||||
#
|
||||
# b) When using AD Simple Auth, set to true, when login user is used for binding,
|
||||
# and LDAP_BASEDN is not needed.
|
||||
#
|
||||
# Example:
|
||||
#- LDAP_USER_AUTHENTICATION=true
|
||||
#
|
||||
# Which field is used to find the user for the user authentication. Default: uid.
|
||||
#- LDAP_USER_AUTHENTICATION_FIELD=uid
|
||||
#
|
||||
# === LDAP Default Domain ===
|
||||
#
|
||||
# a) In case AD SimpleAuth is configured, the default domain is appended to the given
|
||||
# loginname for creating the correct username for the bind request to AD.
|
||||
#
|
||||
# b) The default domain of the ldap it is used to create email if the field is not map
|
||||
# correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
|
||||
#
|
||||
# Example :
|
||||
#- LDAP_DEFAULT_DOMAIN=mydomain.com
|
||||
#
|
||||
#-----------------------------------------------------------------
|
||||
# ==== LDAP BASEDN Auth ====
|
||||
#
|
||||
# The base DN for the LDAP Tree
|
||||
#- LDAP_BASEDN=ou=user,dc=example,dc=org
|
||||
#
|
||||
#-----------------------------------------------------------------
|
||||
# Fallback on the default authentication method
|
||||
#- LDAP_LOGIN_FALLBACK=false
|
||||
#
|
||||
@@ -493,12 +534,6 @@ services:
|
||||
# Reject Unauthorized Certificate
|
||||
#- LDAP_REJECT_UNAUTHORIZED=false
|
||||
#
|
||||
# Option to login to the LDAP server with the user's own username and password, instead of an administrator key. Default: false (use administrator key).
|
||||
#- LDAP_USER_AUTHENTICATION=true
|
||||
#
|
||||
# Which field is used to find the user for the user authentication. Default: uid.
|
||||
#- LDAP_USER_AUTHENTICATION_FIELD=uid
|
||||
#
|
||||
# Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
|
||||
#- LDAP_USER_SEARCH_FILTER=
|
||||
#
|
||||
@@ -564,9 +599,8 @@ services:
|
||||
#
|
||||
#- LDAP_SYNC_GROUP_ROLES=
|
||||
#
|
||||
# The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
|
||||
# example :
|
||||
#- LDAP_DEFAULT_DOMAIN=mydomain.com
|
||||
# The default domain of the ldap it is used to create email if the field is not map correctly
|
||||
# with the LDAP_SYNC_USER_DATA_FIELDMAP is defined in setting LDAP_DEFAULT_DOMAIN above.
|
||||
#
|
||||
# Enable/Disable syncing of admin status based on ldap groups:
|
||||
#- LDAP_SYNC_ADMIN_STATUS=true
|
||||
|
||||
@@ -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"
|
||||
+20
-10
@@ -1,14 +1,24 @@
|
||||
name: wekan
|
||||
version: 1.0.3
|
||||
apiVersion: v1
|
||||
apiVersion: v2
|
||||
appVersion: "5.63"
|
||||
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
|
||||
@@ -8,6 +8,9 @@ metadata:
|
||||
component: wekan
|
||||
release: {{ .Release.Name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
{{- if .Values.deploymentLabels }}
|
||||
{{- toYaml .Values.deploymentLabels | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
@@ -22,6 +25,9 @@ spec:
|
||||
app: {{ template "wekan.name" . }}
|
||||
component: wekan
|
||||
release: {{ .Release.Name }}
|
||||
{{- if .Values.podLabels }}
|
||||
{{- toYaml .Values.podLabels | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
serviceAccountName: {{ template "wekan.serviceAccountName" . }}
|
||||
containers:
|
||||
|
||||
@@ -14,7 +14,7 @@ serviceAccounts:
|
||||
##
|
||||
image:
|
||||
repository: quay.io/wekan/wekan
|
||||
tag: latest
|
||||
tag: v5.63
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
## Configuration for wekan component
|
||||
@@ -103,6 +103,12 @@ autoscaling:
|
||||
##
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
# Optional custom labels for the deployment resource.
|
||||
deploymentLabels: {}
|
||||
|
||||
# Optional custom labels for the pods created by the deployment.
|
||||
podLabels: {}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# MongoDB:
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archive",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Members",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "إضافة مرفق",
|
||||
"add-board": "إضافة لوحة",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "إضافة بطاقة",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "إضافة مهمة فرعية",
|
||||
"add-checklist": "إضافة قائمة تدقيق",
|
||||
"add-checklist-item": "إضافة عنصر إلى قائمة التحقق",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "إضافة غلاف",
|
||||
"add-label": "إضافة ملصق",
|
||||
"add-list": "إضافة قائمة",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "أرشيف",
|
||||
"template": "نموذج",
|
||||
"templates": "نماذج",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "تعيين عضو",
|
||||
"attached": "أُرفق)",
|
||||
"attachment": "مرفق",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "هذا حذف أبديّ . سوف تفقد كل الإجراءات المنوطة بهذه البطاقة",
|
||||
"card-delete-pop": "سيتم إزالة جميع الإجراءات من تبعات النشاط، وأنك لن تكون قادرا على إعادة فتح البطاقة. لا يوجد التراجع.",
|
||||
"card-delete-suggest-archive": "يمكنك نقل بطاقة إلى الأرشيف لإزالتها من اللوحة والمحافظة على النشاط.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "مستحق",
|
||||
"card-due-on": "مستحق في",
|
||||
"card-spent": "امضى وقتا",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "حذف البطاقة ?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "إجراءات على البطاقة",
|
||||
"cardLabelsPopup-title": "علامات",
|
||||
"cardMembersPopup-title": "أعضاء",
|
||||
@@ -318,6 +325,7 @@
|
||||
"editCardStartDatePopup-title": "تغيير تاريخ البدء",
|
||||
"editCardDueDatePopup-title": "تغيير تاريخ الاستحقاق",
|
||||
"editCustomFieldPopup-title": "Edit Field",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "تعديل العلامة",
|
||||
"editNotificationPopup-title": "تصحيح الإشعار",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "نعم",
|
||||
"no": "لا",
|
||||
"accounts": "الحسابات",
|
||||
"accounts-allowEmailChange": "السماح بتغيير البريد الإلكتروني",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Добави прикачен файл",
|
||||
"add-board": "Добави Табло",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Добави карта",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Добави подзадача",
|
||||
"add-checklist": "Добави списък със задачи",
|
||||
"add-checklist-item": "Добави точка към списъка със задачи",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Добави корица",
|
||||
"add-label": "Добави етикет",
|
||||
"add-list": "Добави списък",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Архив",
|
||||
"template": "Шаблон",
|
||||
"templates": "Шаблони",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Възложи на член от екипа",
|
||||
"attached": "прикачен",
|
||||
"attachment": "Прикаченн файл",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "Можете да преместите картата в Архива, за да я премахнете от Таблото и така да запазите активността в него.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Готова за",
|
||||
"card-due-on": "Готова за",
|
||||
"card-spent": "Изработено време",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Желаете да изтриете картата?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Опции",
|
||||
"cardLabelsPopup-title": "Етикети",
|
||||
"cardMembersPopup-title": "Членове",
|
||||
@@ -318,6 +325,7 @@
|
||||
"editCardStartDatePopup-title": "Промени началната дата",
|
||||
"editCardDueDatePopup-title": "Промени датата за готовност",
|
||||
"editCustomFieldPopup-title": "Промени Полето",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Промени изработеното време",
|
||||
"editLabelPopup-title": "Промяна на Етикета",
|
||||
"editNotificationPopup-title": "Промени известията",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Експортиране на Табло",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Сортирай",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Покажи име на поле на мини-картата",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Да",
|
||||
"no": "Не",
|
||||
"accounts": "Профили",
|
||||
"accounts-allowEmailChange": "Разреши промяна на имейла",
|
||||
"accounts-allowUserNameChange": "Позволи смяна на потребителско име",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Създаден на",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Потвърден",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Нещо се обърка",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Копирай таблото",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Ouzphenn ur golo",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archive",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Diverkañ ar gartenn ?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Izili",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Afegeix adjunt",
|
||||
"add-board": "Afegeix Tauler",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Afegeix Fitxa",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Afegir Subtasca",
|
||||
"add-checklist": "Afegeix checklist",
|
||||
"add-checklist-item": "Afegeix un ítem al checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Afegeix coberta",
|
||||
"add-label": "Afegeix etiqueta",
|
||||
"add-list": "Afegeix llista",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Desa",
|
||||
"template": "Plantilla",
|
||||
"templates": "Plantilles",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assignar membre",
|
||||
"attached": "adjuntat",
|
||||
"attachment": "Adjunt",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "L'esborrat és permanent. Perdreu totes les accions associades a aquesta fitxa.",
|
||||
"card-delete-pop": "Totes les accions s'eliminaran de l'activitat i no podreu tornar a obrir la fitxa. No es pot desfer.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Finalitza",
|
||||
"card-due-on": "Finalitza a",
|
||||
"card-spent": "Temps Dedicat",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Esborrar fitxa?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Accions de fitxes",
|
||||
"cardLabelsPopup-title": "Etiquetes",
|
||||
"cardMembersPopup-title": "Membres",
|
||||
@@ -318,6 +325,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ó",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Exporta tauler",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Si",
|
||||
"no": "No",
|
||||
"accounts": "Comptes",
|
||||
"accounts-allowEmailChange": "Permet modificar correu electrònic",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Creat ",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificat",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "editoval(a) datum ukončení na %s z %s",
|
||||
"add-attachment": "Přidat přílohu",
|
||||
"add-board": "Přidat tablo",
|
||||
"add-template": "Přidat šablonu",
|
||||
"add-card": "Přidat kartu",
|
||||
"add-card-to-top-of-list": "Přidat kartu na začátek seznamu",
|
||||
"add-card-to-bottom-of-list": "Přidat kartu na konec seznamu",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Přidat Podúkol",
|
||||
"add-checklist": "Přidat zaškrtávací seznam",
|
||||
"add-checklist-item": "Přidat položku do zaškrtávacího seznamu",
|
||||
"convertChecklistItemToCardPopup-title": "Převést na kartu",
|
||||
"add-cover": "Přidat obal",
|
||||
"add-label": "Přidat štítek",
|
||||
"add-list": "Přidat sloupec",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archiv",
|
||||
"template": "Šablona",
|
||||
"templates": "Šablony",
|
||||
"template-container": "Kontejner šablony",
|
||||
"add-template-container": "Přidat kontejner šablony",
|
||||
"assign-member": "Přiřadit člena",
|
||||
"attached": "přiloženo",
|
||||
"attachment": "Příloha",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Smazání je trvalé. Přijdete o všechny akce asociované s touto kartou.",
|
||||
"card-delete-pop": "Všechny akce budou odstraněny z kanálu aktivity a nebude možné kartu obnovit. Toto nelze vrátit zpět.",
|
||||
"card-delete-suggest-archive": "Můžete přesunout kartu do archivu pro odstranění z tabla a zachovat aktivitu.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Termín",
|
||||
"card-due-on": "Do",
|
||||
"card-spent": "Strávený čas",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Smazat plánovací poker?",
|
||||
"poker-delete-pop": "Smazání je trvalé. Přijdete o všechny akce asociované s tímto plánovacím pokerem.",
|
||||
"cardDeletePopup-title": "Smazat kartu?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Akce karty",
|
||||
"cardLabelsPopup-title": "Štítky",
|
||||
"cardMembersPopup-title": "Členové",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Exportovat tablo",
|
||||
"exportCardPopup-title": "Exportovat kartu",
|
||||
"sort": "řadit",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Kliknout pro třídění seznamu",
|
||||
"list-sort-by": "řadit seznam podle",
|
||||
"list-label-modifiedAt": "Čas posledního přístupu",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Přidat pole na nové karty",
|
||||
"always-field-on-card": "Přidat pole na všechny karty",
|
||||
"showLabel-field-on-card": "Ukázat štítek pole na minikartě",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Ano",
|
||||
"no": "Ne",
|
||||
"accounts": "Účty",
|
||||
"accounts-allowEmailChange": "Povolit změnu Emailu",
|
||||
"accounts-allowUserNameChange": "Povolit změnu uživatelského jména",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Vytvořeno v",
|
||||
"modifiedAt": "Modifikováno",
|
||||
"verified": "Ověřen",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Něco se pokazilo",
|
||||
"error-ldap-login": "Během přihlašování nastala chyba",
|
||||
"display-authentication-method": "Zobraz způsob ověřování",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Zobraz způsob ověřování",
|
||||
"duplicate-board": "Duplikovat tablo",
|
||||
"org-number": "Počet organizací je:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximalizovat kartu",
|
||||
"minimize-card": "Minimalizovat kartu"
|
||||
"minimize-card": "Minimalizovat kartu",
|
||||
"delete-org-warning-message": "Tuto organizaci není možné smazat, protože do ní patří uživatel(é)",
|
||||
"delete-team-warning-message": "Tento tým není možné smazat, protože do nej patří uživatel(é)"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Tilføj vedhæftning",
|
||||
"add-board": "Tilføj tavle",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Tilføj kort",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Tilføj delopgave",
|
||||
"add-checklist": "Tilføj tjekliste",
|
||||
"add-checklist-item": "Tilføj et element til tjeklisten",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Tilføj omslag",
|
||||
"add-label": "Tilføj etikette",
|
||||
"add-list": "Tilføj liste",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Arkiv",
|
||||
"template": "Skabelon",
|
||||
"templates": "Skabeloner",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Tilknyt medlem",
|
||||
"attached": "vedhæftet",
|
||||
"attachment": "Vedhæftning",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Sletning vil være permanent. Du mister alle handlinger knyttet til dette kort.",
|
||||
"card-delete-pop": "Alle handlinger vil blive fjernet fra aktivitetsfeedet, og du kan ikke genåbne kortet. Det kan ikke omgøres.",
|
||||
"card-delete-suggest-archive": "Du kan flytte et kort til arkivet for at fjerne det fra tavlen, og bevare aktiviteten.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Forfalder",
|
||||
"card-due-on": "Forfaldsdato",
|
||||
"card-spent": "Anvendt tid",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Slet kort?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Handlinger for kort",
|
||||
"cardLabelsPopup-title": "Etiketter",
|
||||
"cardMembersPopup-title": "Medlemmer",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Eksportér tavle",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sortér",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Klik for at sortere listen",
|
||||
"list-sort-by": "Sortér listen efter:",
|
||||
"list-label-modifiedAt": "Senest tilgået:",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Vis feltetikette på minikort",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Ja",
|
||||
"no": "Nej",
|
||||
"accounts": "Konti",
|
||||
"accounts-allowEmailChange": "Tillad ændring af e-mail",
|
||||
"accounts-allowUserNameChange": "Tillad ændring af brugernavn",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Oprettet per",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificeret",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Noget gik galt",
|
||||
"error-ldap-login": "Fejl under forsøg på login",
|
||||
"display-authentication-method": "Vis godkendelsesmetode",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Standard for godkendelsesmetode",
|
||||
"duplicate-board": "Duplikér tavle",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+19
-3
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
||||
"add-attachment": "Datei anhängen",
|
||||
"add-board": "Board hinzufügen",
|
||||
"add-template": "Vorlage hinzufügen",
|
||||
"add-card": "Karte hinzufügen",
|
||||
"add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen",
|
||||
"add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Teilaufgabe hinzufügen",
|
||||
"add-checklist": "Checkliste hinzufügen",
|
||||
"add-checklist-item": "Element zu Checkliste hinzufügen",
|
||||
"convertChecklistItemToCardPopup-title": "in Karte konvertieren",
|
||||
"add-cover": "Cover hinzufügen",
|
||||
"add-label": "Label hinzufügen",
|
||||
"add-list": "Liste hinzufügen",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archiv",
|
||||
"template": "Vorlage",
|
||||
"templates": "Vorlagen",
|
||||
"template-container": "Vorlagen-Container",
|
||||
"add-template-container": "Vorlagen-Container hinzufügen",
|
||||
"assign-member": "Mitglied zuweisen",
|
||||
"attached": "angehängt",
|
||||
"attachment": "Anhang",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
|
||||
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
|
||||
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "fällig",
|
||||
"card-due-on": "fällig am",
|
||||
"card-spent": "Aufgewendete Zeit",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Planning Poker löschen ?",
|
||||
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planning Poker verlieren.",
|
||||
"cardDeletePopup-title": "Karte löschen?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Kartenaktionen",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Mitglieder",
|
||||
@@ -260,7 +267,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.",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Board exportieren",
|
||||
"exportCardPopup-title": "Karte exportieren",
|
||||
"sort": "Sortieren",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Zum Sortieren der Liste klicken",
|
||||
"list-sort-by": "Sortieren der Liste nach:",
|
||||
"list-label-modifiedAt": "Letzte Zugriffszeit",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Füge Feld neuen Karten hinzu",
|
||||
"always-field-on-card": "Füge Feld allen Karten hinzu",
|
||||
"showLabel-field-on-card": "Feldbezeichnung auf Minikarte anzeigen",
|
||||
"showSum-field-on-list": "Zeige Summe der Felder oben in der Liste",
|
||||
"yes": "Ja",
|
||||
"no": "Nein",
|
||||
"accounts": "Konten",
|
||||
"accounts-allowEmailChange": "Ändern der E-Mailadresse erlauben",
|
||||
"accounts-allowUserNameChange": "Ändern des Benutzernamens erlauben",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Sichtbarkeit von Boards: Erlaube nur private Boards",
|
||||
"tableVisibilityMode": "Sichtbarkeit von Boards",
|
||||
"createdAt": "Erstellt am",
|
||||
"modifiedAt": "Geändert am",
|
||||
"verified": "Geprüft",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Etwas ist schief gelaufen",
|
||||
"error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten",
|
||||
"display-authentication-method": "Anzeige Authentifizierungsverfahren",
|
||||
"oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche",
|
||||
"default-authentication-method": "Standardauthentifizierungsverfahren",
|
||||
"duplicate-board": "Board duplizieren",
|
||||
"org-number": "Die Anzahl an Organisationen ist:",
|
||||
@@ -947,7 +961,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",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Karte maximieren",
|
||||
"minimize-card": "Karte minimieren"
|
||||
"minimize-card": "Karte minimieren",
|
||||
"delete-org-warning-message": "Diese Organisation kann nicht gelöscht werden. Zumindest ein Benutzer ist ihr noch zugehörig.",
|
||||
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden. Zumindest ein Benutzer ist ihm noch zugehörig."
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
||||
"add-attachment": "Datei anhängen",
|
||||
"add-board": "neues Board",
|
||||
"add-template": "Vorlage hinzufügen",
|
||||
"add-card": "Karte hinzufügen",
|
||||
"add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen",
|
||||
"add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Teilaufgabe hinzufügen",
|
||||
"add-checklist": "Checkliste hinzufügen",
|
||||
"add-checklist-item": "Element zu Checkliste hinzufügen",
|
||||
"convertChecklistItemToCardPopup-title": "Zu Karte umwandeln",
|
||||
"add-cover": "Cover hinzufügen",
|
||||
"add-label": "Label hinzufügen",
|
||||
"add-list": "Liste hinzufügen",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archiv",
|
||||
"template": "Vorlage",
|
||||
"templates": "Vorlagen",
|
||||
"template-container": "Vorlagen-Container",
|
||||
"add-template-container": "Vorlagen-Container hinzufügen",
|
||||
"assign-member": "Mitglied zuweisen",
|
||||
"attached": "angehängt",
|
||||
"attachment": "Anhang",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.",
|
||||
"card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.",
|
||||
"card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Fällig",
|
||||
"card-due-on": "Fällig am",
|
||||
"card-spent": "Aufgewendete Zeit",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Planungspoker löschen?",
|
||||
"poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planungspoker verlieren.",
|
||||
"cardDeletePopup-title": "Karte löschen?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Kartenaktionen",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Mitglieder",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Board exportieren",
|
||||
"exportCardPopup-title": "Karte exportieren",
|
||||
"sort": "Sortieren",
|
||||
"sorted": "Sortiert",
|
||||
"remove-sort": "Sortierung entfernen",
|
||||
"sort-desc": "Zum Sortieren der Liste klicken",
|
||||
"list-sort-by": "Sortieren der Liste nach:",
|
||||
"list-label-modifiedAt": "Letzte Zugriffszeit",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Füge Feld neuen Karten hinzu",
|
||||
"always-field-on-card": "Füge Feld allen Karten hinzu",
|
||||
"showLabel-field-on-card": "Feldbezeichnung auf Minikarte anzeigen",
|
||||
"showSum-field-on-list": "Zeige Summe der Felder oben in der Liste",
|
||||
"yes": "Ja",
|
||||
"no": "Nein",
|
||||
"accounts": "Konten",
|
||||
"accounts-allowEmailChange": "Ändern der E-Mailadresse erlauben",
|
||||
"accounts-allowUserNameChange": "Ändern des Benutzernamens erlauben",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Board-Sichtbarkeit: Erlaube ausschließlich private Boards",
|
||||
"tableVisibilityMode": "Sichtbarkeit der Boards",
|
||||
"createdAt": "Erstellt am",
|
||||
"modifiedAt": "Geändert am",
|
||||
"verified": "Geprüft",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Etwas ist schief gelaufen",
|
||||
"error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten",
|
||||
"display-authentication-method": "Anzeige Authentifizierungsverfahren",
|
||||
"oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche",
|
||||
"default-authentication-method": "Standardauthentifizierungsverfahren",
|
||||
"duplicate-board": "Board duplizieren",
|
||||
"org-number": "Die Anzahl an Organisationen ist:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout-Warte-Symbol",
|
||||
"Wave": "Wellen-Warte-Symbol",
|
||||
"maximize-card": "Karte maximieren",
|
||||
"minimize-card": "Karte minimieren"
|
||||
"minimize-card": "Karte minimieren",
|
||||
"delete-org-warning-message": "Diese Organisation kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört.",
|
||||
"delete-team-warning-message": "Dieses Team kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört."
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "η ημερομηνία λήξης άλλαξε σε %s από %s",
|
||||
"add-attachment": "Προσθήκη Συνημμένου",
|
||||
"add-board": "Προσθήκη Πίνακα",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Προσθήκη Κάρτας",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Προσθήκη Υποεργασίας",
|
||||
"add-checklist": "Προσθήκη Λίστας ελέγχου",
|
||||
"add-checklist-item": "Προσθήκη ενός στοιχείου στη λίστα ελέγχου - checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Προσθήκη Ετικέτας",
|
||||
"add-list": "Προσθήκη Λίστας",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Αρχείο",
|
||||
"template": "Πρότυπο",
|
||||
"templates": "Πρότυπα",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Ανάθεση μέλους",
|
||||
"attached": "επισυνάφθηκε",
|
||||
"attachment": "Συνημμένο",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Η Διαγραφή είναι μόνιμη. Θα χάσετε όλες τις ενέργειες που σχετίζονται με αυτή την κάρτα. ",
|
||||
"card-delete-pop": "Όλες οι ενέργειες θα αφαιρεθούν από τη ροή δραστηριοτήτων και δε θα μπορείτε να ξανανοίξετε την κάρτα. Δεν υπάρχει δυνατότητα επαναφοράς.",
|
||||
"card-delete-suggest-archive": "Μπορείτε να μετακινήσετε μια κάρτα στο Αρχείο για να την αφαιρέσετε από τον πίνακα και να διατηρήσετε τη δραστηριότητα.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Έως",
|
||||
"card-due-on": "Έως τις",
|
||||
"card-spent": "Δαπανηθείς Χρόνος",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Διαγραφή Κάρτας;",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Ενέργειες κάρτας",
|
||||
"cardLabelsPopup-title": "Ετικέτες",
|
||||
"cardMembersPopup-title": "Μέλοι",
|
||||
@@ -318,6 +325,7 @@
|
||||
"editCardStartDatePopup-title": "Αλλαγή ημερομηνίας έναρξης",
|
||||
"editCardDueDatePopup-title": "Αλλαγή ημερομηνίας λήξης προθεσμίας",
|
||||
"editCustomFieldPopup-title": "Επεξεργασία Πεδίου",
|
||||
"addReactionPopup-title": "Add reaction",
|
||||
"editCardSpentTimePopup-title": "Αλλαγή δαπανηθέντος χρόνου",
|
||||
"editLabelPopup-title": "Αλλαγή Ετικέτας",
|
||||
"editNotificationPopup-title": "Επεξεργασία Ειδοποίησης",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Εξαγωγή πίνακα",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Ταξινόμηση",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Κάντε κλικ για να ταξινομήστε τη λίστα",
|
||||
"list-sort-by": "Ταξινόμηση λίστας βάσει:",
|
||||
"list-label-modifiedAt": "Τελευταία Προσπέλαση",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Ναι",
|
||||
"no": "Όχι",
|
||||
"accounts": "Λογαριασμοί",
|
||||
"accounts-allowEmailChange": "Επίτρεψε Αλλαγή Email",
|
||||
"accounts-allowUserNameChange": "Επίτρεψε Αλλαγή Ονόματος χρήστη",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Δημιουργήθηκε στις",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Επιβεβαιώθηκε",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archive",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Members",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archive",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Members",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode" : "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is: ",
|
||||
@@ -1054,5 +1068,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Arkivi",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Etikedoj",
|
||||
"cardMembersPopup-title": "Membroj",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Jes",
|
||||
"no": "Ne",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Agregar Adjunto",
|
||||
"add-board": "Agregar Tablero",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Agregar Tarjeta",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Agregar Subtarea",
|
||||
"add-checklist": "Agregar Lista de Tareas",
|
||||
"add-checklist-item": "Agregar ítem a lista de tareas",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Agregar Portadas",
|
||||
"add-label": "Agregar Etiqueta",
|
||||
"add-list": "Agregar Lista",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archivar",
|
||||
"template": "Plantilla",
|
||||
"templates": "Plantillas",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Asignar miembro",
|
||||
"attached": "adjunto(s)",
|
||||
"attachment": "Adjunto",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Borrar es permanente. Perderás todas las acciones asociadas con esta tarjeta.",
|
||||
"card-delete-pop": "Todas las acciones van a ser eliminadas del agregador de actividad y no podrás re-abrir la tarjeta. No hay deshacer.",
|
||||
"card-delete-suggest-archive": "Podés mover una tarjeta al Archivo para eliminarla del tablero y preservar la actividad.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Vence",
|
||||
"card-due-on": "Vence en",
|
||||
"card-spent": "Tiempo Empleado",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "¿Borrar Tarjeta?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Acciones de la Tarjeta",
|
||||
"cardLabelsPopup-title": "Etiquetas",
|
||||
"cardMembersPopup-title": "Miembros",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Exportar tablero",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Si",
|
||||
"no": "No",
|
||||
"accounts": "Cuentas",
|
||||
"accounts-allowEmailChange": "Permitir Cambio de Email",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Creado en",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificado",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Añadir adjunto",
|
||||
"add-board": "Añadir tablero",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Añadir una tarjeta",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Añadir subtarea",
|
||||
"add-checklist": "Añadir una lista de verificación",
|
||||
"add-checklist-item": "Añadir un elemento a la lista de verificación",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Añadir portada",
|
||||
"add-label": "Añadir una etiqueta",
|
||||
"add-list": "Añadir una lista",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archivo",
|
||||
"template": "Plantilla",
|
||||
"templates": "Plantillas",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Asignar miembros",
|
||||
"attached": "adjuntado",
|
||||
"attachment": "Adjunto",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "la eliminación es permanente. Perderás todas las acciones asociadas a esta tarjeta.",
|
||||
"card-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la tarjeta. Esta acción no puede deshacerse.",
|
||||
"card-delete-suggest-archive": "Puedes mover una tarjeta al Archivo para quitarla del tablero y preservar la actividad.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Vence",
|
||||
"card-due-on": "Vence el",
|
||||
"card-spent": "Tiempo consumido",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
|
||||
"cardLabelsPopup-title": "Etiquetas",
|
||||
"cardMembersPopup-title": "Miembros",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Exportar el tablero",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Ordenar",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click para ordenar la lista",
|
||||
"list-sort-by": "Ordenar la lista por:",
|
||||
"list-label-modifiedAt": "Hora de último acceso",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Mostrar etiquetas de campos en la minitarjeta.",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Sí",
|
||||
"no": "No",
|
||||
"accounts": "Cuentas",
|
||||
"accounts-allowEmailChange": "Permitir cambiar el correo electrónico",
|
||||
"accounts-allowUserNameChange": "Permitir cambiar el nombre de usuario",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Fecha de alta",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificado",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Algo no está bien",
|
||||
"error-ldap-login": "Ocurrió un error al intentar acceder",
|
||||
"display-authentication-method": "Mostrar el método de autenticación",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Método de autenticación por defecto",
|
||||
"duplicate-board": "Duplicar tablero",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archive",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Members",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archive",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Members",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "editada la fecha de finalización a %s de %s",
|
||||
"add-attachment": "Agregar adjunto",
|
||||
"add-board": "Agregar tablero",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Agregar una tarjeta",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Agregar subtarea",
|
||||
"add-checklist": "Agregar lista de comprobación",
|
||||
"add-checklist-item": "Agregar un elemento a la lista de comprobación",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Agregar portada",
|
||||
"add-label": "Agregar una etiqueta",
|
||||
"add-list": "Agregar una lista",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archivo",
|
||||
"template": "Plantilla",
|
||||
"templates": "Plantillas",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Asignar miembros",
|
||||
"attached": "adjuntado",
|
||||
"attachment": "Adjunto",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "la eliminación es permanente. Perderá todas las acciones asociadas a esta tarjeta.",
|
||||
"card-delete-pop": "Se eliminarán todas las acciones de la fuente de actividades y no se podrá volver a abrir la tarjeta. Esta acción no puede deshacerse.",
|
||||
"card-delete-suggest-archive": "Puede mover una tarjeta al archivo para quitarla del tablero y preservar la actividad.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Vence",
|
||||
"card-due-on": "Vence el",
|
||||
"card-spent": "Tiempo consumido",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "¿Eliminar la tarjeta?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Acciones de la tarjeta",
|
||||
"cardLabelsPopup-title": "Etiquetas",
|
||||
"cardMembersPopup-title": "Miembros",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Exportar tablero",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Ordenar",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Clic para ordenar lista",
|
||||
"list-sort-by": "Ordenar la lista por:",
|
||||
"list-label-modifiedAt": "Hora de último acceso",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Mostrar etiquetas de campos en la minitarjeta.",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Sí",
|
||||
"no": "No",
|
||||
"accounts": "Cuentas",
|
||||
"accounts-allowEmailChange": "Permitir cambiar el correo electrónico",
|
||||
"accounts-allowUserNameChange": "Permitir cambiar el nombre de usuario",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Creado en",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verificado",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Algo no está bien",
|
||||
"error-ldap-login": "Ocurrió un error al intentar acceder",
|
||||
"display-authentication-method": "Mostrar el método de autenticación",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Método de autenticación por defecto",
|
||||
"duplicate-board": "Duplicar tablero",
|
||||
"org-number": "El número de organizaciones es:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
+17
-1
@@ -81,6 +81,7 @@
|
||||
"activity-endDate": "edited end date to %s of %s",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-template": "Add Template",
|
||||
"add-card": "Add Card",
|
||||
"add-card-to-top-of-list": "Add Card to Top of List",
|
||||
"add-card-to-bottom-of-list": "Add Card to Bottom of List",
|
||||
@@ -88,6 +89,7 @@
|
||||
"add-subtask": "Add Subtask",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"convertChecklistItemToCardPopup-title": "Convert to Card",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
@@ -119,6 +121,8 @@
|
||||
"archives": "Archive",
|
||||
"template": "Template",
|
||||
"templates": "Templates",
|
||||
"template-container": "Template Container",
|
||||
"add-template-container": "Add Template Container",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
@@ -155,6 +159,8 @@
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
|
||||
"card-archive-pop": "Card will not be visible at this list after archiving card.",
|
||||
"card-archive-suggest-cancel": "You can later restore card from Archive.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
@@ -203,6 +209,7 @@
|
||||
"deletePokerPopup-title": "Delete planning poker?",
|
||||
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardArchivePopup-title": "Archive Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Members",
|
||||
@@ -318,6 +325,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",
|
||||
@@ -364,6 +372,8 @@
|
||||
"exportBoardPopup-title": "Export board",
|
||||
"exportCardPopup-title": "Export card",
|
||||
"sort": "Sort",
|
||||
"sorted": "Sorted",
|
||||
"remove-sort": "Remove sort",
|
||||
"sort-desc": "Click to Sort List",
|
||||
"list-sort-by": "Sort the List By:",
|
||||
"list-label-modifiedAt": "Last Access Time",
|
||||
@@ -647,11 +657,14 @@
|
||||
"automatically-field-on-card": "Add field to new cards",
|
||||
"always-field-on-card": "Add field to all cards",
|
||||
"showLabel-field-on-card": "Show field label on minicard",
|
||||
"showSum-field-on-list": "Show sum of fields at top of list",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"accounts-allowUserNameChange": "Allow Username Change",
|
||||
"tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only",
|
||||
"tableVisibilityMode": "Boards visibility",
|
||||
"createdAt": "Created at",
|
||||
"modifiedAt": "Modified at",
|
||||
"verified": "Verified",
|
||||
@@ -821,6 +834,7 @@
|
||||
"error-undefined": "Something went wrong",
|
||||
"error-ldap-login": "An error occurred while trying to login",
|
||||
"display-authentication-method": "Display Authentication Method",
|
||||
"oidc-button-text": "Customize the OIDC button text",
|
||||
"default-authentication-method": "Default Authentication Method",
|
||||
"duplicate-board": "Duplicate Board",
|
||||
"org-number": "The number of organizations is:",
|
||||
@@ -1053,5 +1067,7 @@
|
||||
"Scaleout": "Scaleout Wait Spinner",
|
||||
"Wave": "Wave Wait Spinner",
|
||||
"maximize-card": "Maximize Card",
|
||||
"minimize-card": "Minimize Card"
|
||||
"minimize-card": "Minimize Card",
|
||||
"delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it",
|
||||
"delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it"
|
||||
}
|
||||
Loaded 100 of 273 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user